1

I am a new user of Linux and am trying to attempt Pintos Project #02 - User Programs. I've only installed Pintos and I was trying to build the examples by "make" and I get this error:

7fcdfb62f000-7fcdfb631000 rw-p 00000000 00:00 0 
7fcdfb631000-7fcdfb632000 r--p 00022000 08:07 4619                       /lib/x86_64-linux-gnu/ld-2.17.so
7fcdfb632000-7fcdfb634000 rw-p 00023000 08:07 4619                       /lib/x86_64-linux-gnu/ld-2.17.so
7fffa164a000-7fffa166b000 rw-p 00000000 00:00 0                          [stack]
7fffa16ed000-7fffa16ef000 r-xp 00000000 00:00 0                          [vdso]
ffffffffff600000-ffffffffff601000 r-xp 00000000 00:00 0                  [vsyscall]
../Makefile.userprog:42: recipe for target 'libc.a' failed
make: *** [libc.a] Aborted (core dumped)
make: *** Deleting file 'libc.a'

Can anyone please explain what is going on?

Here is Makefile.userprog for reference:

# -*- makefile -*-

$(PROGS): CPPFLAGS += -I$(SRCDIR)/lib/user -I.

# Linker flags.
$(PROGS): LDFLAGS += -nostdlib -static -Wl,-T,$(LDSCRIPT)
$(PROGS): LDSCRIPT = $(SRCDIR)/lib/user/user.lds

# Library code shared between kernel and user programs.
lib_SRC  = lib/debug.c          # Debug code.
lib_SRC += lib/random.c         # Pseudo-random numbers.
lib_SRC += lib/stdio.c          # I/O library.
lib_SRC += lib/stdlib.c         # Utility functions.
lib_SRC += lib/string.c         # String functions.
lib_SRC += lib/arithmetic.c     # 64-bit arithmetic for GCC.
lib_SRC += lib/ustar.c          # Unix standard tar format utilities.
exm_SRC += example/halt.c       # changes done
# User level only library code.
lib/user_SRC  = lib/user/debug.c    # Debug helpers.
lib/user_SRC += lib/user/syscall.c  # System calls.
lib/user_SRC += lib/user/console.c  # Console code.

LIB_OBJ = $(patsubst %.c,%.o,$(patsubst %.S,%.o,$(lib_SRC) $(lib/user_SRC)))
LIB_DEP = $(patsubst %.o,%.d,$(LIB_OBJ))
LIB = lib/user/entry.o libc.a

PROGS_SRC = $(foreach prog,$(PROGS),$($(prog)_SRC))
PROGS_OBJ = $(patsubst %.c,%.o,$(patsubst %.S,%.o,$(PROGS_SRC)))
PROGS_DEP = $(patsubst %.o,%.d,$(PROGS_OBJ))

all: $(PROGS)

define TEMPLATE
$(1)_OBJ = $(patsubst %.c,%.o,$(patsubst %.S,%.o,$($(1)_SRC)))
$(1): $$($(1)_OBJ) $$(LIB) $$(LDSCRIPT)
    $$(CC) $$(LDFLAGS) $$($(1)_OBJ) $$(LIB) -o $$@
endef

$(foreach prog,$(PROGS),$(eval $(call TEMPLATE,$(prog))))

libc.a: $(LIB_OBJ)
    rm -f $@ # LINE 42
    ar r $@ $^
    ranlib $@

clean::
    rm -f $(PROGS) $(PROGS_OBJ) $(PROGS_DEP)
    rm -f $(LIB_DEP) $(LIB_OBJ) lib/user/entry.[do] libc.a 

.PHONY: all clean

-include $(LIB_DEP) $(PROGS_DEP)
tshepang
  • 12,111
  • 21
  • 91
  • 136
user2839294
  • 51
  • 1
  • 5

1 Answers1

0

You might have messed up your makefile by copypasting it from somewhere. The whitespace in front of commands to be executed NEEDS to be one or more tabs, you can't use blanks.

Guntram Blohm
  • 9,667
  • 2
  • 24
  • 31
  • Thanks, but I downloaded an entirely new pintos tarball and replaced my Makefile with the new one. Still got the same error. – user2839294 Dec 25 '13 at 18:54
  • Hm, just tried it myself, no problems. The core dump is strange anyway, there's no reason for it visible in the makefile. Did the first make in src/threads succeed? Can you post the 5 lines before the error as well to show us what make was trying to do? What happens if you manually try to execute the last program that make wanted to execute? – Guntram Blohm Dec 25 '13 at 19:06
  • Thanks. The make in src/threads did succeed. Even pintos run alarm-multiple works.I'll add the first few lines in the original post. – user2839294 Dec 25 '13 at 19:22
  • Thanks, everyone. I got rid of the error by reinstalling from scratch. – user2839294 Dec 25 '13 at 19:55