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)
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.