diff options
25 files changed, 536 insertions, 487 deletions
@@ -353,6 +353,7 @@ clean: $(RM) include/fpu_control.h $(MAKE) -C extra/locale clean $(MAKE) -C ldso clean + $(MAKE) -C libc clean $(MAKE) -C libpthread clean $(MAKE) -C test clean $(MAKE) -C utils clean @@ -43,7 +43,6 @@ CC = $(CROSS)gcc AR = $(CROSS)ar LD = $(CROSS)ld NM = $(CROSS)nm -RANLIB = $(CROSS)ranlib STRIPTOOL = $(CROSS)strip INSTALL = install @@ -67,11 +66,9 @@ VERSION := $(MAJOR_VERSION).$(MINOR_VERSION).$(SUBLEVEL) LC_ALL := C export MAJOR_VERSION MINOR_VERSION SUBLEVEL VERSION LC_ALL -SHARED_FULLNAME:=libuClibc-$(MAJOR_VERSION).$(MINOR_VERSION).$(SUBLEVEL).so SHARED_MAJORNAME:=libc.so.$(MAJOR_VERSION) UCLIBC_LDSO:=ld-uClibc.so.$(MAJOR_VERSION) -LIBNAME:=libc.a -LIBC:=$(TOPDIR)libc/$(LIBNAME) +NONSHARED_LIBNAME:=uclibc_nonshared.a # Make sure DESTDIR and PREFIX can be used to install # PREFIX is a uClibcism while DESTDIR is a common GNUism @@ -134,11 +131,11 @@ ifeq ($(strip $(TARGET_ARCH)),i386) CPU_CFLAGS-$(CONFIG_PENTIUMIII)+=$(call check_gcc,-march=pentium3,-march=i686) CPU_CFLAGS-$(CONFIG_PENTIUM4)+=$(call check_gcc,-march=pentium4,-march=i686) CPU_CFLAGS-$(CONFIG_K6)+=$(call check_gcc,-march=k6,-march=i586) - CPU_CFLAGS-$(CONFIG_K7)+=$(call check_gcc,-march=athlon,-malign-functions=4 -march=i686) - CPU_CFLAGS-$(CONFIG_CRUSOE)+=-march=i686 -malign-functions=0 -malign-jumps=0 -malign-loops=0 + CPU_CFLAGS-$(CONFIG_K7)+=$(call check_gcc,-march=athlon,-march=i686) $(call check_gcc,-falign-functions=4,-malign-functions=4) + CPU_CFLAGS-$(CONFIG_CRUSOE)+=-march=i686 $(call check_gcc,-falign-functions=0,-malign-functions=0) CPU_CFLAGS-$(CONFIG_WINCHIPC6)+=$(call check_gcc,-march=winchip-c6,-march=i586) CPU_CFLAGS-$(CONFIG_WINCHIP2)+=$(call check_gcc,-march=winchip2,-march=i586) - CPU_CFLAGS-$(CONFIG_CYRIXIII)+=$(call check_gcc,-march=c3,-march=i486) -malign-functions=0 -malign-jumps=0 -malign-loops=0 + CPU_CFLAGS-$(CONFIG_CYRIXIII)+=$(call check_gcc,-march=c3,-march=i486) $(call check_gcc,-falign-functions=0,-malign-functions=0) CPU_CFLAGS-$(CONFIG_NEHEMIAH)+=$(call check_gcc,-march=c3-2,-march=i686) endif @@ -306,9 +303,11 @@ else LDFLAGS := $(LDFLAGS_NOSTRIP) -s endif -# -# Thread includes are needed to compile some files. -# +ifeq ($(UCLIBC_HAS_THREADS),y) +# set up system dependencies include dirs (NOTE: order matters!) +PTDIR := $(TOPDIR)libpthread/linuxthreads/ +PTINC := -I$(PTDIR)sysdeps/pthread \ + -I$(PTDIR)sysdeps/$(TARGET_ARCH) ifeq ($(UCLIBC_HAS_THREADS_NATIVE),y) PTDIR := $(TOPDIR)libpthread/nptl/ PTINC := -I$(PTDIR)compat \ @@ -319,23 +318,9 @@ PTINC := -I$(PTDIR)compat \ -I$(PTDIR)sysdeps/pthread/bits \ -I$(PTDIR)sysdeps/generic \ -include $(PTDIR)compat/libc-symbols.h -CFLAGS += $(PTINC) -else -PTDIR := $(TOPDIR)libpthread/linuxthreads/ -PTINC := -I$(PTDIR)sysdeps/$(TARGET_ARCH) \ - -I$(PTDIR)sysdeps/pthread -endif - -# -# Thread objects linked into C library. -# -PTCOBJST := $(TOPDIR)libc/obj-pthread-libc -PTCOBJSH := $(TOPDIR)libc/obj-pthread-libc_shared - # # Test for TLS if NPTL support was selected. # -ifeq ($(UCLIBC_HAS_THREADS_NATIVE),y) GCC_HAS_TLS=$(shell \ echo "extern __thread int foo;" | $(CC) -o /dev/null -S -xc - 2>&1) ifneq ($(GCC_HAS_TLS),) @@ -351,7 +336,7 @@ gcc_tls_test_fail: @exit 1; endif endif - +endif ifeq ($(UCLIBC_BUILD_RELRO),y) LDFLAGS+=-z relro diff --git a/ldso/Makefile b/ldso/Makefile index dd7ff2052..340ddfacb 100644 --- a/ldso/Makefile +++ b/ldso/Makefile @@ -21,33 +21,38 @@ include $(TOPDIR)Rules.mak DIRS = ldso libdl -all: ldso libdl - ifeq ($(strip $(BUILD_UCLIBC_LDSO)),y) -ldso: headers - $(MAKE) -C ldso -libdl: ldso headers - $(MAKE) -C libdl -shared: libdl - $(MAKE) -C libdl shared +all: subdirs else -ldso libdl shared: - echo "Skipping $@ target" +all: endif LN_HEADERS := $(patsubst %, include/%, elf.h) LN_ARCH_HEADERS := $(patsubst %, include/%, dl-startup.h dl-syscalls.h dl-sysdep.h dl-debug.h) HEADERS := $(LN_HEADERS) $(LN_ARCH_HEADERS) include/dl-progname.h + headers: $(HEADERS) + $(LN_HEADERS): - $(LN) -fs $(TOPDIR)../$@ $@ + $(LN) -sf $(TOPDIR)../$@ $@ + $(LN_ARCH_HEADERS): - $(LN) -fs ../ldso/$(TARGET_ARCH)/$(patsubst include/%,%,$@) $@ + $(LN) -sf ../ldso/$(TARGET_ARCH)/$(patsubst include/%,%,$@) $@ + include/dl-progname.h: echo '#include "$(TARGET_ARCH)/elfinterp.c"' \ > include/dl-progname.h -clean: - set -e ; for d in $(DIRS) ; do $(MAKE) -C $$d $@ ; done - -find . -name '*~' | xargs $(RM) +clean: subdirs_clean $(RM) $(HEADERS) + +subdirs: $(patsubst %, _dir_%, $(DIRS)) +subdirs_clean: $(patsubst %, _dirclean_%, $(DIRS)) + +$(patsubst %, _dir_%, $(DIRS)): headers + $(MAKE) -C $(patsubst _dir_%, %, $@) + +$(patsubst %, _dirclean_%, $(DIRS)): dummy + $(MAKE) -C $(patsubst _dirclean_%, %, $@) clean + +.PHONY: dummy diff --git a/ldso/ldso/Makefile b/ldso/ldso/Makefile index a2b255b95..6c9f0b45a 100644 --- a/ldso/ldso/Makefile +++ b/ldso/ldso/Makefile @@ -16,16 +16,8 @@ # along with this program; if not, write to the Free Software Foundation, Inc., # 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - TOPDIR=../../ include $(TOPDIR)Rules.mak -LDSO_FULLNAME=ld-uClibc-$(MAJOR_VERSION).$(MINOR_VERSION).$(SUBLEVEL).so - -# reset to initial (disabling predefined CFLAGS) -ASFLAGS= -ifeq ($(UCLIBC_BUILD_NOEXECSTACK),y) -ASFLAGS+=$(call check_as,--noexecstack) -endif XXFLAGS=$(XWARNINGS) $(SSP_DISABLE_FLAGS) @@ -47,24 +39,7 @@ XXFLAGS+= -DUCLIBC_LDSO=\"$(UCLIBC_LDSO)\" $(XARCH_CFLAGS) $(CPU_CFLAGS) $(PICFL -fno-builtin -nostdinc -D_LIBC -I$(TOPDIR)ldso/include -I. -I$(TOPDIR)include endif -# BEWARE!!! At least mips* will die if -O0 is used!!! -XXFLAGS:=$(XXFLAGS:-O0=-O1) XXFLAGS+=-isystem $(shell $(CC) -print-file-name=include) -LDFLAGS=$(CPU_LDFLAGS-y) -e _start -z now -Bsymbolic -shared --warn-common --export-dynamic --sort-common \ - -z combreloc --discard-locals --discard-all --no-undefined -ifeq ($(UCLIBC_BUILD_RELRO),y) - LDFLAGS+=-z relro -endif - -CSRC=ldso.c -COBJS=$(patsubst %.c,%.o, $(CSRC)) -ASRC=$(shell ls $(TARGET_ARCH)/*.S) -AOBJS=$(patsubst %.S,%.o, $(ASRC)) -OBJS=$(AOBJS) $(COBJS) - -ifneq ($(strip $(SUPPORT_LD_DEBUG)),y) -LDFLAGS+=-s -endif ifeq ($(strip $(SUPPORT_LD_DEBUG)),y) XXFLAGS+=-D__SUPPORT_LD_DEBUG__ @@ -77,29 +52,55 @@ endif #This stuff will not work with -fomit-frame-pointer XXFLAGS := $(XXFLAGS:-fomit-frame-pointer=) -all: $(LDSO_FULLNAME) +# BEWARE!!! At least mips* will die if -O0 is used!!! +ifeq ($(strip $(TARGET_ARCH)),mips) +XXFLAGS := $(XXFLAGS:-O0=-O1) +endif -ifeq ($(UCLIBC_HAS_THREADS_NATIVE),y) -$(LDSO_FULLNAME): dl-tls.c $(OBJS) $(DLINK_OBJS) -else -$(LDSO_FULLNAME): $(OBJS) $(DLINK_OBJS) +ASFLAGS=$(XXFLAGS) +ifeq ($(UCLIBC_BUILD_NOEXECSTACK),y) +ASFLAGS+=$(call check_as,--noexecstack) endif - $(LD) $(LDFLAGS) -soname=$(UCLIBC_LDSO) \ - -o $(LDSO_FULLNAME) $(OBJS) $(LIBGCC) + +LDFLAGS=$(CPU_LDFLAGS-y) -e _start -z now -Bsymbolic -shared --warn-common --export-dynamic --sort-common \ + -z combreloc --discard-locals --discard-all --no-undefined + +ifeq ($(UCLIBC_BUILD_RELRO),y) +LDFLAGS+=-z relro +endif + +ifneq ($(strip $(SUPPORT_LD_DEBUG)),y) +LDFLAGS+=-s +endif + +LIB_NAME=ld-uClibc +SO_LIB_NAME=$(TOPDIR)lib/$(UCLIBC_LDSO) +SO_FULL_NAME=$(LIB_NAME)-$(MAJOR_VERSION).$(MINOR_VERSION).$(SUBLEVEL).so + +CSRC= ldso.c +COBJS=$(patsubst %.c,%.o, $(CSRC)) + +ASRC=$(wildcard $(TARGET_ARCH)/*.S) +AOBJS=$(patsubst %.S,%.o, $(ASRC)) + +OBJS=$(AOBJS) $(COBJS) + +all: $(SO_LIB_NAME) + +$(SO_LIB_NAME): $(OBJS) $(INSTALL) -d $(TOPDIR)lib - $(INSTALL) -m 755 $(LDSO_FULLNAME) $(TOPDIR)lib - $(LN) -sf $(LDSO_FULLNAME) $(TOPDIR)lib/$(UCLIBC_LDSO) + $(RM) $(TOPDIR)lib/$(SO_FULL_NAME) $(SO_LIB_NAME) + $(LD) $(LDFLAGS) -soname=$(UCLIBC_LDSO) \ + -o $(TOPDIR)lib/$(SO_FULL_NAME) $(OBJS) $(LIBGCC) + $(LN) -sf $(SO_FULL_NAME) $(SO_LIB_NAME) $(COBJS): %.o : %.c $(CC) $(XXFLAGS) -c $< -o $@ $(STRIPTOOL) -x -R .note -R .comment $*.o $(AOBJS): %.o : %.S - $(CC) $(XXFLAGS) $(ASFLAGS) -c $< -o $@ + $(CC) $(ASFLAGS) -c $< -o $@ $(STRIPTOOL) -x -R .note -R .comment $*.o -ldso.o: $(CSRC) dl-elf.c dl-hash.c dl-startup.c dl-debug.c \ - $(TARGET_ARCH)/*.h $(TARGET_ARCH)/*.c $(TOPDIR)ldso/include/*.h - clean: - $(RM) $(UCLIBC_LDSO)* $(OBJS) $(LDSO_FULLNAME)* core *.o *.a *.s *.i ldso.h *~ + $(RM) *.o */*.o *~ core diff --git a/ldso/ldso/ldso.c b/ldso/ldso/ldso.c index 4467313dd..dceeab68e 100644 --- a/ldso/ldso/ldso.c +++ b/ldso/ldso/ldso.c @@ -273,7 +273,8 @@ void _dl_get_ready_to_run(struct elf_resolve *tpnt, unsigned long load_addr, } break; #else - _dl_fatal_printf("Program uses TLS, but ld-uClibc.so does not support it!\n"); + _dl_debug_early("Program uses unsupported TLS data!!!\n"); + _dl_exit(1); #endif } } diff --git a/ldso/libdl/Makefile b/ldso/libdl/Makefile index 17ec3f30d..8ff94e668 100644 --- a/ldso/libdl/Makefile +++ b/ldso/libdl/Makefile @@ -30,62 +30,72 @@ endif ifeq ($(UCLIBC_HAS_THREADS_NATIVE),y) XXFLAGS+= $(XARCH_CFLAGS) $(CPU_CFLAGS) \ -DUCLIBC_RUNTIME_PREFIX=\"$(RUNTIME_PREFIX)\" \ - -fno-builtin -nostdinc -D_LIBC -I$(TOPDIR)ldso/include -I$(TOPDIR)ldso/ldso -I. -I$(TOPDIR)include $(PTINC) -DIS_IN_rtld + -fno-builtin -nostdinc -D_LIBC -I$(TOPDIR)ldso/include -I$(TOPDIR)ldso/ldso -I$(TOPDIR)include $(PTINC) -DIS_IN_rtld else XXFLAGS+= $(XARCH_CFLAGS) $(CPU_CFLAGS) \ -DUCLIBC_RUNTIME_PREFIX=\"$(RUNTIME_PREFIX)\" \ - -fno-builtin -nostdinc -D_LIBC -I$(TOPDIR)ldso/include -I$(TOPDIR)ldso/ldso -I. -I$(TOPDIR)include + -fno-builtin -nostdinc -D_LIBC -I$(TOPDIR)ldso/include -I$(TOPDIR)ldso/ldso -I$(TOPDIR)include endif XXFLAGS+=-isystem $(shell $(CC) -print-file-name=include) +ifeq ($(strip $(SUPPORT_LD_DEBUG)),y) +XXFLAGS+=-D__SUPPORT_LD_DEBUG__ +endif XXFLAGS_NOPIC:=$(XXFLAGS) ifeq ($(DOPIC),y) XXFLAGS += $(PICFLAG) -D__LIBDL_SHARED__ endif -ifeq ($(strip $(SUPPORT_LD_DEBUG)),y) -XXFLAGS+=-D__SUPPORT_LD_DEBUG__ -endif -LIBDL=libdl.a -LIBDL_PIC=libdl_pic.a -LIBDL_SHARED=libdl.so -LIBDL_SHARED_FULLNAME=libdl-$(MAJOR_VERSION).$(MINOR_VERSION).$(SUBLEVEL).so +# BEWARE!!! At least mips* will die if -O0 is used!!! +ifeq ($(strip $(TARGET_ARCH)),mips) +XXFLAGS := $(XXFLAGS:-O0=-O1) +endif -CSRC=libdl.c -OBJS=libdl.o -PIC_OBJS=libdl_pic.o +LIB_NAME=libdl +AR_LIB_NAME=$(TOPDIR)lib/$(LIB_NAME).a +SO_LIB_NAME=$(TOPDIR)lib/$(LIB_NAME).so +SO_FULL_NAME=$(LIB_NAME)-$(MAJOR_VERSION).$(MINOR_VERSION).$(SUBLEVEL).so -all: $(LIBDL) $(LIBDL_PIC) +CSRC = libdl.c +OBJS = libdl.o +PIC_OBJS = libdl_pic.o -ar-target: $(LIBDL) $(LIBDL_PIC) +# we do not get here, do we need a libdl.a, if ld.so is not ours? +#ifeq ($(strip $(HAVE_SHARED)),y) +all: $(AR_LIB_NAME) $(SO_LIB_NAME) +#else +#all: $(AR_LIB_NAME) +#endif -$(LIBDL): $(OBJS) - $(AR) $(ARFLAGS) $(LIBDL) ../ldso/$(TARGET_ARCH)/resolve.o $(OBJS) +$(AR_LIB_NAME): $(OBJS) ../ldso/$(TARGET_ARCH)/resolve.o $(INSTALL) -d $(TOPDIR)lib - $(RM) $(TOPDIR)lib/$(LIBDL) - $(INSTALL) -m 644 $(LIBDL) $(TOPDIR)lib + $(RM) $(AR_LIB_NAME) + $(AR) $(ARFLAGS) $(AR_LIB_NAME) $(OBJS) ../ldso/$(TARGET_ARCH)/resolve.o -$(LIBDL_PIC): $(PIC_OBJS) - $(AR) $(ARFLAGS) $(LIBDL_PIC) $(PIC_OBJS) +shared_$(LIB_NAME).a: $(PIC_OBJS) + $(RM) shared_$(LIB_NAME).a + $(AR) $(ARFLAGS) shared_$(LIB_NAME).a $(PIC_OBJS) -libdl.o: libdl.c $(TOPDIR)ldso/include/*.h - $(CC) $(XXFLAGS_NOPIC) -c libdl.c -o libdl.o - $(STRIPTOOL) -x -R .note -R .comment $*.o +# this will be built only on the second round, when libc.so is present, +# else we would link against libc.a +$(SO_LIB_NAME): shared_$(LIB_NAME).a + if [ -f $(TOPDIR)lib/libc.so ] ; then \ + $(RM) $(TOPDIR)lib/$(SO_FULL_NAME) $(SO_LIB_NAME).$(MAJOR_VERSION) $(SO_LIB_NAME) ; \ + $(LD) $(LDFLAGS) -soname=$(LIB_NAME).so.$(MAJOR_VERSION) \ + -o $(TOPDIR)lib/$(SO_FULL_NAME) -fini dl_cleanup --whole-archive shared_$(LIB_NAME).a \ + --no-whole-archive $(TOPDIR)libc/misc/internals/interp.o \ + -L$(TOPDIR)lib -lc $(LDADD_LIBFLOAT) $(TOPDIR)lib/$(UCLIBC_LDSO) $(LIBGCC) ; \ + $(LN) -sf $(SO_FULL_NAME) $(SO_LIB_NAME).$(MAJOR_VERSION) ; \ + $(LN) -sf $(SO_FULL_NAME) $(SO_LIB_NAME) ; \ + fi -libdl_pic.o: libdl.c $(TOPDIR)ldso/include/*.h - $(CC) $(XXFLAGS) -DSHARED -c libdl.c -o libdl_pic.o +$(OBJS): %.o : %.c + $(CC) $(XXFLAGS_NOPIC) -c $< -o $@ $(STRIPTOOL) -x -R .note -R .comment $*.o -shared: $(LIBDL_PIC) - $(LD) $(LDFLAGS) -soname=$(LIBDL_SHARED).$(MAJOR_VERSION) \ - -o $(LIBDL_SHARED_FULLNAME) -fini dl_cleanup --whole-archive $(LIBDL_PIC) \ - --no-whole-archive $(TOPDIR)/libc/misc/internals/interp.o \ - -L$(TOPDIR)/lib -lc $(LDADD_LIBFLOAT) $(TOPDIR)lib/$(UCLIBC_LDSO) $(LIBGCC); - $(INSTALL) -d $(TOPDIR)lib - $(RM) $(TOPDIR)lib/$(LIBDL_SHARED_FULLNAME) $(TOPDIR)lib/$(LIBDL_SHARED).$(MAJOR_VERSION) - $(INSTALL) -m 644 $(LIBDL_SHARED_FULLNAME) $(TOPDIR)lib - $(LN) -sf $(LIBDL_SHARED_FULLNAME) $(TOPDIR)lib/$(LIBDL_SHARED) - $(LN) -sf $(LIBDL_SHARED_FULLNAME) $(TOPDIR)lib/$(LIBDL_SHARED).$(MAJOR_VERSION) +libdl_pic.o: libdl.c + $(CC) $(XXFLAGS) -c $< -o $@ + $(STRIPTOOL) -x -R .note -R .comment $*.o clean: - $(RM) .depend $(LIBDL_SHARED)* $(LIBDL_SHARED_FULLNAME) core *.o *.a *.s *.i tmp_make foo *~ + $(RM) *.o *~ core *.a diff --git a/libc/Makefile b/libc/Makefile index 231c8112e..07ae4085c 100644 --- a/libc/Makefile +++ b/libc/Makefile @@ -37,9 +37,17 @@ DIRS = misc pwd_grp stdio string termios inet signal stdlib sysdeps unistd VERSION_SCRIPT:=${shell if [ -f sysdeps/linux/$(TARGET_ARCH)/libc.map ] ; then \ echo "--version-script sysdeps/linux/$(TARGET_ARCH)/libc.map"; fi} -LIBNAME_TARGET:=$(TOPDIR)lib/$(LIBNAME) - -all: halfclean $(LIBNAME_TARGET) +# we have SHARED_MAJORNAME=libc.so.$(MAJOR_VERSION) defined in Rules.mak +LIB_NAME=libc +AR_LIB_NAME=$(TOPDIR)lib/$(LIB_NAME).a +SO_LIB_NAME=$(TOPDIR)lib/$(LIB_NAME).so +SO_FULL_NAME=libuClibc-$(MAJOR_VERSION).$(MINOR_VERSION).$(SUBLEVEL).so + +ifeq ($(strip $(HAVE_SHARED)),y) +all: $(SO_LIB_NAME) +else +all: $(AR_LIB_NAME) +endif # Some functions are duplicated across subdirs, and when you pass $(AR) # the same object file more than once, it'll add it to the archive multiple @@ -52,53 +60,63 @@ all: halfclean $(LIBNAME_TARGET) # the wildcard will be evaluated when `make` is run instead of when the make # target is evaluated. That means if you run `rm obj.* ; make`, the wildcard # will evaluate to no files :(. -$(LIBNAME) shared_$(LIBNAME) ar-target: subdirs objs-pthread-libc - $(RM) $(LIBNAME) shared_$(LIBNAME) +shared_$(LIB_NAME).a: subdirs + $(RM) shared_$(LIB_NAME).a obj.pthread.* objs=`cat obj.*` ; \ - $(AR) $(ARFLAGS) $(LIBNAME) $$objs && \ - $(AR) dN 2 $(LIBNAME) $$objs && \ - $(AR) dN 2 $(LIBNAME) $$objs + $(AR) $(ARFLAGS) shared_$(LIB_NAME).a $$objs && \ + $(AR) dN 2 shared_$(LIB_NAME).a $$objs && \ + $(AR) dN 2 shared_$(LIB_NAME).a $$objs @for objfile in obj.signal \ obj.string.generic obj.string.$(TARGET_ARCH) obj.string \ obj.sysdeps.common obj.sysdeps.$(TARGET_ARCH) ; do \ if [ -e $$objfile ] ; then \ if [ "$(MAKE_IS_SILENT)" = "n" ] ; then \ - echo $(AR) $(ARFLAGS) $(LIBNAME) $$objfile ; \ + echo $(AR) $(ARFLAGS) shared_$(LIB_NAME).a $$objfile ; \ fi ; \ objs=`cat $$objfile` ; \ fi ; \ - $(AR) $(ARFLAGS) $(LIBNAME) $$objs || exit 1 ; \ + $(AR) $(ARFLAGS) shared_$(LIB_NAME).a $$objs || exit 1 ; \ done - cp $(LIBNAME) shared_$(LIBNAME) - $(AR) $(ARFLAGS) $(LIBNAME) misc/internals/static.o - $(AR) $(ARFLAGS) $(LIBNAME) `cat "$(PTCOBJST)"` - $(RANLIB) $(LIBNAME) - -$(LIBNAME_TARGET): $(LIBNAME) - $(INSTALL) -d $(TOPDIR)lib - $(RM) $(TOPDIR)lib/$(LIBNAME) - $(INSTALL) -m 644 $(LIBNAME) $(TOPDIR)lib -shared: shared_$(LIBNAME) - $(AR) $(ARFLAGS) shared_$(LIBNAME) `cat "$(PTCOBJSH)"` - $(LD) $(LDFLAGS) $(VERSION_SCRIPT) -soname=$(SHARED_MAJORNAME) -o $(SHARED_FULLNAME) \ - --whole-archive shared_$(LIBNAME) \ - $(TOPDIR)libc/misc/internals/interp.o --no-whole-archive \ - -init __uClibc_init $(TOPDIR)lib/$(UCLIBC_LDSO) $(LIBGCC) $(LDADD_LIBFLOAT) +$(AR_LIB_NAME): shared_$(LIB_NAME).a $(INSTALL) -d $(TOPDIR)lib - $(RM) $(TOPDIR)lib/$(SHARED_FULLNAME) - $(INSTALL) -m 644 $(SHARED_FULLNAME) $(TOPDIR)lib - $(LN) -sf $(SHARED_FULLNAME) $(TOPDIR)lib/libc.so - $(LN) -sf $(SHARED_FULLNAME) $(TOPDIR)lib/$(SHARED_MAJORNAME) - -halfclean: - $(RM) $(LIBNAME) shared_$(LIBNAME) $(SHARED_FULLNAME) + $(RM) $(AR_LIB_NAME) + cp shared_$(LIB_NAME).a $(AR_LIB_NAME) + $(AR) $(ARFLAGS) $(AR_LIB_NAME) misc/internals/static.o `cat nonshared_obj.*` +ifeq ($(UCLIBC_HAS_THREADS_NATIVE),y) + $(MAKE) -C $(TOPDIR)libpthread/nptl obj.pthread.ar + $(AR) $(ARFLAGS) $(AR_LIB_NAME) `cat obj.pthread.ar` +endif + +$(SO_LIB_NAME): $(AR_LIB_NAME) + $(RM) $(TOPDIR)lib/$(SO_FULL_NAME) $(TOPDIR)lib/$(SHARED_MAJORNAME) $(SO_LIB_NAME) +ifeq ($(UCLIBC_HAS_THREADS_NATIVE),y) + $(MAKE) -C $(TOPDIR)libpthread/nptl obj.pthread.so + $(AR) $(ARFLAGS) shared_$(LIB_NAME).a `cat obj.pthread.so` +endif + $(LD) $(LDFLAGS) $(VERSION_SCRIPT) -soname=$(SHARED_MAJORNAME) \ + -o $(TOPDIR)lib/$(SO_FULL_NAME) --whole-archive shared_$(LIB_NAME).a \ + --no-whole-archive $(TOPDIR)libc/misc/internals/interp.o \ + -init __uClibc_init $(TOPDIR)lib/$(UCLIBC_LDSO) $(LDADD_LIBFLOAT) $(LIBGCC) + $(LN) -sf $(SO_FULL_NAME) $(TOPDIR)lib/$(SHARED_MAJORNAME) + $(RM) $(TOPDIR)lib/$(NONSHARED_LIBNAME) + $(AR) $(ARFLAGS) $(TOPDIR)lib/$(NONSHARED_LIBNAME) `cat nonshared_obj.*` + echo "/* GNU ld script" > $(SO_LIB_NAME) + echo " * Use the shared library, but some functions are only in" >> $(SO_LIB_NAME) + echo " * the static library, so try that secondarily. */" >> $(SO_LIB_NAME) + #OUT_FORMAT:=$(shell $(LD) --verbose | grep OUTPUT_FORMAT | awk -F '"' '{print $2}') + #echo "OUTPUT_FORMAT($(OUT_FORMAT))" >> $(SO_LIB_NAME) +ifeq ($(strip $(COMPAT_ATEXIT)),y) + echo "GROUP ( $(TOPDIR)lib/$(NONSHARED_LIBNAME) $(TOPDIR)lib/$(SHARED_MAJORNAME) )" >> $(SO_LIB_NAME) +else + echo "GROUP ( $(TOPDIR)lib/$(SHARED_MAJORNAME) $(TOPDIR)lib/$(NONSHARED_LIBNAME) )" >> $(SO_LIB_NAME) +endif tags: ctags -R -clean: subdirs_clean halfclean - $(RM) obj.* obj-* +clean: subdirs_clean + $(RM) *.a obj.* nonshared_obj.* subdirs: $(patsubst %, _dir_%, $(DIRS)) subdirs_clean: $(patsubst %, _dirclean_%, $(DIRS)) @@ -109,8 +127,4 @@ $(patsubst %, _dir_%, $(DIRS)) : dummy $(patsubst %, _dirclean_%, $(DIRS)) : dummy $(MAKE) -C $(patsubst _dirclean_%, %, $@) clean -objs-pthread-libc: - $(RM) $(PTCOBJST) $(PTCOBJSH) - $(MAKE) -C ../libpthread $@ - .PHONY: dummy subdirs diff --git a/libc/inet/Makefile b/libc/inet/Makefile index e7018db7c..6d59e1856 100644 --- a/libc/inet/Makefile +++ b/libc/inet/Makefile @@ -56,6 +56,10 @@ CSRC =getservice.c getproto.c hostid.c getnetent.c getnetbynm.c getnetbyad.c \ COBJS=$(patsubst %.c,%.o, $(CSRC)) +ifeq ($(UCLIBC_HAS_THREADS),y) +CFLAGS += $(PTINC) +endif + OBJS=$(MOBJ) $(MOBJ2) $(MOBJ3) $(COBJS) OBJ_LIST=../obj.inet diff --git a/libc/misc/internals/Makefile b/libc/misc/internals/Makefile index fee3eca70..1df05a934 100644 --- a/libc/misc/internals/Makefile +++ b/libc/misc/internals/Makefile @@ -31,6 +31,10 @@ __uClibc_main.o: CFLAGS += $(SSP_DISABLE_FLAGS) OBJS=$(COBJS) +ifeq ($(UCLIBC_HAS_THREADS),y) +CFLAGS += $(PTINC) +endif + OBJ_LIST=../../obj.misc.internals all: $(OBJ_LIST) interp.o static.o diff --git a/libc/misc/internals/__uClibc_main.c b/libc/misc/internals/__uClibc_main.c index 1ed05c6b2..8ed1f8d71 100644 --- a/libc/misc/internals/__uClibc_main.c +++ b/libc/misc/internals/__uClibc_main.c @@ -27,8 +27,12 @@ #include <sys/sysmacros.h> #ifdef __UCLIBC_HAS_SSP__ #include <ssp-internal.h> +#include <stdint.h> -unsigned long __guard = 0UL; +/* for gcc-3.x + Etoh ssp */ +uintptr_t __guard /* segfaults with attribute_relro */; +/* for gcc-4.1 non-TLS */ +uintptr_t __stack_chk_guard /* attribute_relro */; #endif /* @@ -43,13 +47,13 @@ extern void weak_function _locale_init(void); #endif #ifdef __UCLIBC_HAS_THREADS__ extern void weak_function __pthread_initialize_minimal(void); -extern void weak_function _dl_aux_init(ElfW(auxv_t) *); #endif + /* * Declare the __environ global variable and create a weak alias environ. * Note: Apparently we must initialize __environ to ensure that the weak @@ -108,11 +112,9 @@ static int __check_suid(void) } #ifdef __UCLIBC_HAS_SSP__ -static __always_inline void __guard_setup(void) +static __always_inline uintptr_t _dl_guard_setup(void) { - if (__guard != 0UL) - return; - + uintptr_t ret; #ifndef __SSP_QUICK_CANARY__ size_t size; @@ -125,10 +127,9 @@ static __always_inline void __guard_setup(void) mib[1] = KERN_RANDOM; mib[2] = RANDOM_ERANDOM; - size = sizeof(unsigned long); - if (SYSCTL(mib, 3, &__guard, &size, NULL, 0) != (-1)) - if (__guard != 0UL) - return; + if (SYSCTL(mib, 3, &ret, &size, NULL, 0) != (-1)) + if (size == (size_t) sizeof(ret)) + return ret; } # endif /* ifdef __SSP_USE_ERANDOM__ */ { @@ -142,25 +143,26 @@ static __always_inline void __guard_setup(void) if ((fd = OPEN("/dev/erandom", O_RDONLY)) == (-1)) # endif fd = OPEN("/dev/urandom", O_RDONLY); - if (fd != (-1)) { - size = READ(fd, (char *) &__guard, sizeof(__guard)); + if (fd >= 0) { + size = READ(fd, &ret, sizeof(ret)); CLOSE(fd); - if (size == sizeof(__guard)) - return; + if (size == (size_t) sizeof(ret)) + return ret; } } #endif /* ifndef __SSP_QUICK_CANARY__ */ /* Start with the "terminator canary". */ - __guard = 0xFF0A0D00UL; + ret = 0xFF0A0D00UL; /* Everything failed? Or we are using a weakened model of the * terminator canary */ { struct timeval tv; - GETTIMEOFDAY(&tv, NULL); - __guard ^= tv.tv_usec ^ tv.tv_sec; + if (GETTIMEOFDAY(&tv, NULL) != (-1)) + ret ^= tv.tv_usec ^ tv.tv_sec; } + return ret; } #endif /* __UCLIBC_HAS_SSP__ */ @@ -199,7 +201,11 @@ void __uClibc_init(void) #endif #ifdef __UCLIBC_HAS_SSP__ - __guard_setup (); + uintptr_t stack_chk_guard = _dl_guard_setup(); + /* for gcc-3.x + Etoh ssp */ + __guard = stack_chk_guard; + /* for gcc-4.1 non-TLS */ + __stack_chk_guard = stack_chk_guard; #endif #ifdef __UCLIBC_HAS_LOCALE__ @@ -265,13 +271,17 @@ __uClibc_main(int (*main)(int, char **, char **), int argc, aux_dat += 2; } -#ifdef __UCLIBC_HAS_THREADS__ - /* - * Before we can make any pthread calls, we have to do some - * some TLS setup. This call may do more in the future. - */ - if (likely(_dl_aux_init != NULL)) - _dl_aux_init(auxvt); +#ifdef __UCLIBC_HAS_THREADS_NATIVE__ + { + extern void _dl_aux_init (ElfW(auxv_t) *av); + + /* + * Before we can make any pthread calls, we have to do some + * some TLS setup. This call may do more in the future. + */ + if (likely(_dl_aux_init != NULL)) + _dl_aux_init(auxvt); + } #endif /* We need to initialize uClibc. If we are dynamically linked this diff --git a/libc/misc/syslog/Makefile b/libc/misc/syslog/Makefile index 35e755e40..26239ab7b 100644 --- a/libc/misc/syslog/Makefile +++ b/libc/misc/syslog/Makefile @@ -28,6 +28,10 @@ CSRC=syslog.c COBJS=$(patsubst %.c,%.o, $(CSRC)) OBJS=$(COBJS) +ifeq ($(UCLIBC_HAS_THREADS),y) +CFLAGS += $(PTINC) +endif + OBJ_LIST=../../obj.misc.syslog all: $(OBJ_LIST) diff --git a/libc/stdio/Makefile b/libc/stdio/Makefile index dc2a29173..729e4dd81 100644 --- a/libc/stdio/Makefile +++ b/libc/stdio/Makefile @@ -119,6 +119,10 @@ ifeq ($(strip $(UCLIBC_HAS_LFS)),y) OBJS += $(CLOBJS) endif +ifeq ($(UCLIBC_HAS_THREADS),y) +CFLAGS += $(PTINC) +endif + ifeq ($(UCLIBC_HAS_STDIO_FUTEXES),y) CFLAGS += -D__USE_STDIO_FUTEXES__ endif diff --git a/libc/stdlib/malloc-standard/Makefile b/libc/stdlib/malloc-standard/Makefile index acd7526e9..54022ec13 100644 --- a/libc/stdlib/malloc-standard/Makefile +++ b/libc/stdlib/malloc-standard/Makefile @@ -32,11 +32,17 @@ endif # calloc.c can be found at uClibc/libc/stdlib/calloc.c # valloc.c can be found at uClibc/libc/stdlib/valloc.c CSRC=malloc.c calloc.c realloc.c free.c memalign.c mallopt.c mallinfo.c + +COBJS=$(patsubst %.c,%.o, $(CSRC)) + +OBJS=$(COBJS) + +ifeq ($(UCLIBC_HAS_THREADS),y) +CFLAGS += $(PTINC) ifeq ($(UCLIBC_HAS_THREADS_NATIVE),y) CSRC += thread-freeres.c endif -COBJS=$(patsubst %.c,%.o, $(CSRC)) -OBJS=$(COBJS) +endif OBJ_LIST=../../obj.stdlib.malloc-standard diff --git a/libc/sysdeps/linux/mips/Makefile b/libc/sysdeps/linux/mips/Makefile index 91da020dd..6d51205e9 100644 --- a/libc/sysdeps/linux/mips/Makefile +++ b/libc/sysdeps/linux/mips/Makefile @@ -60,14 +60,14 @@ $(COBJS): %.o : %.c ifeq ($(strip $(UCLIBC_CTOR_DTOR)),y) crti.o: crti.S - $(CC) $(ASFLAGS) -c crti.S -o crti.o + $(CC) $(ASFLAGS) $(SSP_DISABLE_FLAGS) -c crti.S -o crti.o $(TOPDIR)lib/crti.o: crti.o $(INSTALL) -d $(TOPDIR)lib/ cp crti.o $(TOPDIR)lib/ crtn.o: crtn.S - $(CC) $(ASFLAGS) -c crtn.S -o crtn.o + $(CC) $(ASFLAGS) $(SSP_DISABLE_FLAGS) -c crtn.S -o crtn.o $(TOPDIR)lib/crtn.o: crtn.o $(INSTALL) -d $(TOPDIR)lib/ @@ -87,9 +87,5 @@ headers: cp sysdep.h $(TOPDIR)/include/ clean: - $(RM) *.[oa] *~ core - $(RM) bits/sysnum.h - $(RM) $(TOPDIR)/include/fpu_control.h - $(RM) $(TOPDIR)/include/sgidefs.h - $(RM) $(TOPDIR)/include/sysdep.h - $(RM) $(TOPDIR)/include/sysdep-nptl.h + $(RM) *.o *~ core + $(RM) $(TOPDIR)/include/sgidefs.h $(TOPDIR)/include/sysdep.h diff --git a/libpthread/Makefile b/libpthread/Makefile index 4b57ab32f..18292917a 100644 --- a/libpthread/Makefile +++ b/libpthread/Makefile @@ -18,50 +18,22 @@ TOPDIR=../ include $(TOPDIR)Rules.mak -ifeq ($(strip $(UCLIBC_HAS_THREADS_NATIVE)),y) -include nptl/Rules.mak -endif - -# -# Adjust the soname version to avoid namespace collisions with glibc's -# libpthread library. -# -LIBPTHREAD=libpthread.a -LIBPTHREAD_SHARED=libpthread.so -LIBPTHREAD_SHARED_FULLNAME=libpthread-$(MAJOR_VERSION).$(MINOR_VERSION).$(SUBLEVEL).so -LIBTHREAD_DB=libthread_db.a -LIBTHREAD_DB_SHARED=libthread_db.so -LIBTHREAD_DB_SHARED_FULLNAME=libthread_db-$(MAJOR_VERSION).$(MINOR_VERSION).$(SUBLEVEL).so - -DIRS= ifeq ($(strip $(UCLIBC_HAS_THREADS_NATIVE)),y) - DIRS+=nptl +ALL_SUBDIRS = nptl nptl_db +DIRS = nptl ifeq ($(strip $(PTHREADS_DEBUG_SUPPORT)),y) - DIRS+=nptl_db + DIRS += nptl_db endif else - DIRS+=linuxthreads +ALL_SUBDIRS = linuxthreads linuxthreads_db +DIRS = linuxthreads ifeq ($(strip $(PTHREADS_DEBUG_SUPPORT)),y) - DIRS+=linuxthreads_db -endif + DIRS += linuxthreads_db endif - -ifeq ($(strip $(UCLIBC_CTOR_DTOR)),y) - SHARED_START_FILES = $(TOPDIR)lib/crti.o $(LIBGCC_DIR)crtbeginS.o - SHARED_END_FILES = $(LIBGCC_DIR)crtendS.o $(TOPDIR)lib/crtn.o endif -ifeq ($(strip $(UCLIBC_HAS_THREADS_NATIVE)),y) -ALL_SUBDIRS = nptl nptl_db -else -ALL_SUBDIRS = linuxthreads linuxthreads_db -endif - -# Remove any -z defs since this lib will have undefined symbols -LIBTHREAD_DB_LDFLAGS := $(subst -z defs,,$(LDFLAGS)) - -all: $(LIBPTHREAD) $(LIBTHREAD_DB) +all: subdirs headers: ifeq ($(strip $(UCLIBC_HAS_THREADS_NATIVE)),y) @@ -71,6 +43,9 @@ ifeq ($(strip $(UCLIBC_HAS_THREADS_NATIVE)),y) $(LN) -sf ../$(TOPDIR)libpthread/nptl/sysdeps/unix/sysv/linux/$(TARGET_ARCH)/bits/pthreadtypes.h $(TOPDIR)include/bits/ $(LN) -sf ../$(TOPDIR)libpthread/nptl/sysdeps/pthread/bits/libc-lock.h $(TOPDIR)include/bits/ $(LN) -sf ../$(TOPDIR)libpthread/nptl/sysdeps/pthread/bits/stdio-lock.h $(TOPDIR)include/bits/ +ifeq ($(strip $(PTHREADS_DEBUG_SUPPORT)),y) + $(LN) -sf $(TOPDIR)libpthread/nptl_db/thread_db.h $(TOPDIR)include/ +endif else $(LN) -sf $(TOPDIR)libpthread/linuxthreads/sysdeps/pthread/pthread.h $(TOPDIR)include/ $(LN) -sf $(TOPDIR)libpthread/linuxthreads/semaphore.h $(TOPDIR)include/ @@ -80,69 +55,6 @@ ifeq ($(strip $(PTHREADS_DEBUG_SUPPORT)),y) endif endif -$(LIBPTHREAD): subdirs - $(INSTALL) -d $(TOPDIR)lib - $(RM) $(TOPDIR)lib/$(LIBPTHREAD) - $(INSTALL) -m 644 $(LIBPTHREAD) $(TOPDIR)lib - -$(LIBTHREAD_DB): subdirs -ifeq ($(strip $(PTHREADS_DEBUG_SUPPORT)),y) - $(INSTALL) -d $(TOPDIR)lib - $(RM) $(TOPDIR)lib/$(LIBTHREAD_DB) - $(INSTALL) -m 644 $(LIBTHREAD_DB) $(TOPDIR)lib -endif - -objs-pthread-libc: -ifeq ($(strip $(UCLIBC_HAS_THREADS_NATIVE)),y) - $(MAKE) -C nptl $@ -else - touch $(PTCOBJST) $(PTCOBJSH) -endif - - -$(OBJS): %.o : %.c - $(CC) $(CFLAGS) -c $< -o $@ - $(STRIPTOOL) -x -R .note -R .comment $*.o - -shared: all -ifeq ($(strip $(UCLIBC_HAS_THREADS_NATIVE)),y) - $(LD) $(LDFLAGS_NOSTRIP) -soname=$(LIBPTHREAD_SHARED).$(MAJOR_VERSION) \ - -o $(LIBPTHREAD_SHARED_FULLNAME) $(SHARED_START_FILES) --whole-archive $(LIBPTHREAD_SHARED_ARCHIVE) \ - --no-whole-archive $(TOPDIR)libc/misc/internals/interp.o \ - -L$(TOPDIR)lib -lc $(LDADD_LIBFLOAT) $(LIBGCC) \ - $(TOPDIR)ldso/ldso/ld-uClibc-$(MAJOR_VERSION).$(MINOR_VERSION).$(SUBLEVEL).so \ - -L$(TOPDIR)ldso/libdl -ldl \ - $(SHARED_END_FILES) -else - $(LD) $(LDFLAGS_NOSTRIP) -soname=$(LIBPTHREAD_SHARED).$(MAJOR_VERSION) \ - -o $(LIBPTHREAD_SHARED_FULLNAME) $(SHARED_START_FILES) --whole-archive $(LIBPTHREAD) \ - --no-whole-archive $(TOPDIR)libc/misc/internals/interp.o \ - -L$(TOPDIR)lib -lc $(LDADD_LIBFLOAT) $(LIBGCC) \ - $(SHARED_END_FILES) -endif - $(INSTALL) -d $(TOPDIR)lib - $(RM) $(TOPDIR)lib/$(LIBPTHREAD_SHARED_FULLNAME) \ - $(TOPDIR)lib/$(LIBPTHREAD_SHARED).$(MAJOR_VERSION) - $(INSTALL) -m 644 $(LIBPTHREAD_SHARED_FULLNAME) $(TOPDIR)lib - $(LN) -sf $(LIBPTHREAD_SHARED_FULLNAME) \ - $(TOPDIR)lib/$(LIBPTHREAD_SHARED) - $(LN) -sf $(LIBPTHREAD_SHARED_FULLNAME) \ - $(TOPDIR)lib/$(LIBPTHREAD_SHARED).$(MAJOR_VERSION) -ifeq ($(strip $(PTHREADS_DEBUG_SUPPORT)),y) - $(LD) $(LIBTHREAD_DB_LDFLAGS) --warn-unresolved-symbols -soname=$(LIBTHREAD_DB_SHARED).1 \ - -o $(LIBTHREAD_DB_SHARED_FULLNAME) --whole-archive $(LIBTHREAD_DB) \ - --no-whole-archive $(TOPDIR)libc/misc/internals/interp.o \ - -L$(TOPDIR)lib -lc $(LDADD_LIBFLOAT) $(LIBGCC) - $(INSTALL) -d $(TOPDIR)lib - $(RM) $(TOPDIR)lib/$(LIBTHREAD_DB_SHARED_FULLNAME) \ - $(TOPDIR)lib/$(LIBTHREAD_DB_SHARED).1 - $(INSTALL) -m 644 $(LIBTHREAD_DB_SHARED_FULLNAME) $(TOPDIR)lib - $(LN) -sf $(LIBTHREAD_DB_SHARED_FULLNAME) \ - $(TOPDIR)lib/$(LIBTHREAD_DB_SHARED) - $(LN) -sf $(LIBTHREAD_DB_SHARED_FULLNAME) \ - $(TOPDIR)lib/$(LIBTHREAD_DB_SHARED).1 -endif - tags: ctags -R @@ -156,9 +68,7 @@ $(patsubst %, _dirclean_%, $(ALL_SUBDIRS)) : dummy $(MAKE) -C $(patsubst _dirclean_%, %, $@) clean clean: subdirs_clean - $(RM) *.[oa] *~ core $(LIBPTHREAD) $(LIBPTHREAD_SHARED_FULLNAME) \ - $(LIBTHREAD_DB) $(LIBTHREAD_DB_SHARED_FULLNAME) \ - $(TOPDIR)include/pthread.h $(TOPDIR)include/semaphore.h \ + $(RM) $(TOPDIR)include/pthread.h $(TOPDIR)include/semaphore.h \ $(TOPDIR)include/thread_db.h \ $(TOPDIR)include/bits/pthreadtypes.h $(TOPDIR)include/bits/semaphore.h \ $(TOPDIR)include/bits/libc-lock.h $(TOPDIR)include/bits/stdio-lock diff --git a/libpthread/linuxthreads/Makefile b/libpthread/linuxthreads/Makefile index 4072d660f..d5637eccf 100644 --- a/libpthread/linuxthreads/Makefile +++ b/libpthread/linuxthreads/Makefile @@ -22,17 +22,11 @@ include $(TOPDIR)Rules.mak CFLAGS+=$(SSP_ALL_CFLAGS) -#This stuff will not compile without at least -O1 +# This stuff will not compile without at least -O1 CFLAGS :=$(CFLAGS:-O0=-O1) -# set up system dependencies include dirs (NOTE: order matters!) -# psm: don't think that the last include makes sense -# they all should be already linked to $(TOPDIR)include -PTDIR = $(TOPDIR)libpthread/linuxthreads/ -SYSDEPINC = -I$(PTDIR)sysdeps/pthread \ - -I$(PTDIR)sysdeps/$(TARGET_ARCH) \ - -I$(TOPDIR)libc/sysdeps/linux/$(TARGET_ARCH) -CFLAGS += $(SYSDEPINC) +# Get the thread include dependencies +CFLAGS += $(PTINC) ARCH_CFLAGS = $(CFLAGS) diff --git a/libpthread/linuxthreads_db/Makefile b/libpthread/linuxthreads_db/Makefile index 2c27cdccc..3c7ee91a7 100644 --- a/libpthread/linuxthreads_db/Makefile +++ b/libpthread/linuxthreads_db/Makefile @@ -26,13 +26,8 @@ AR_LIB_NAME=$(TOPDIR)lib/$(LIB_NAME).a SO_LIB_NAME=$(TOPDIR)lib/$(LIB_NAME).so SO_FULL_NAME=$(LIB_NAME)-$(MAJOR_VERSION).$(MINOR_VERSION).$(SUBLEVEL).so -# set up system dependencies include dirs (NOTE: order matters!) -PTDIR = $(TOPDIR)libpthread/linuxthreads/ -SYSDEPINC = -I$(PTDIR)sysdeps/pthread \ - -I$(PTDIR)sysdeps/$(TARGET_ARCH) \ - -I$(TOPDIR)libc/sysdeps/linux/$(TARGET_ARCH) - -CFLAGS += $(SYSDEPINC) -DLIBPTHREAD_SO="\"libpthread.so.$(MAJOR_VERSION)\"" +# Get the thread include dependencies and shared object name +CFLAGS += $(PTINC) -DLIBPTHREAD_SO="\"libpthread.so.$(MAJOR_VERSION)\"" # Remove any -z defs since this lib will have undefined symbols LDFLAGS := $(subst -z defs,,$(LDFLAGS)) --warn-unresolved-symbols diff --git a/libpthread/nptl/Makefile b/libpthread/nptl/Makefile index 830805fcf..f5efae013 100644 --- a/libpthread/nptl/Makefile +++ b/libpthread/nptl/Makefile @@ -1,4 +1,4 @@ -# Makefile for uClibc's NPTL pthread library (Portions stolen from glibc.) +# Makefile for uClibc's native pthread library (Portions stolen from glibc.) # # Copyright (C) 2005 Steven J. Hill <sjhill@realitydiluted.com> # @@ -226,36 +226,26 @@ libpthread-misc-routines = pthread_rwlock_rdlock pthread_rwlock_timedrdlock \ DIRS := sysdeps/pthread sysdeps/$(TARGET_ARCH) sysdeps/unix/sysv/linux \ sysdeps/unix/sysv/linux/$(TARGET_ARCH) -CSRC-LIBP-ST = $(patsubst %, %.c, $(filter-out $(libpthread-os-routines) \ +AR_LIBP_CSRC = $(patsubst %, %.c, $(filter-out $(libpthread-os-routines) \ $(libpthread-misc-routines) \ $(libpthread-shared-only-routines), \ $(libpthread-routines))) - -CSRC-LIBP-SH = $(patsubst %, %.c, $(filter-out $(libpthread-os-routines) \ +SO_LIBP_CSRC = $(patsubst %, %.c, $(filter-out $(libpthread-os-routines) \ $(libpthread-misc-routines) \ $(libpthread-static-only-routines) pt-allocrtsig, \ $(libpthread-routines))) - -CSRC-LIBC-ST = $(patsubst %, %.c, $(filter-out $(shared-only-routines) \ +AR_LIBC_CSRC = $(patsubst %, %.c, $(filter-out $(shared-only-routines) \ libc-lowlevellock, $(routines))) +SO_LIBC_CSRC = $(patsubst %, %.c, $(filter-out libc-lowlevellock, $(routines))) -CSRC-LIBC-SH = $(patsubst %, %.c, $(filter-out libc-lowlevellock, $(routines))) +AR_LIBP_COBJS = $(patsubst %.c, %.o, $(AR_LIBP_CSRC)) +SO_LIBP_COBJS = $(patsubst %.c, %.os, $(SO_LIBP_CSRC)) +AR_LIBC_COBJS = $(patsubst %.c, %.o, $(AR_LIBC_CSRC)) +SO_LIBC_COBJS = $(patsubst %.c, %.os, $(SO_LIBC_CSRC)) -COBJ-LIBP-ST = $(patsubst %.c, %.o, $(CSRC-LIBP-ST)) -COBJ-LIBP-SH = $(patsubst %.c, %.os, $(CSRC-LIBP-SH)) -COBJ-LIBC-ST = $(patsubst %.c, %.o, $(CSRC-LIBC-ST)) -COBJ-LIBC-SH = $(patsubst %.c, %.os, $(CSRC-LIBC-SH)) +all: headers $(AR_LIB_NAME) $(SO_LIB_NAME) -ar-target all: version.h banner.h $(COBJ-LIBP-ST) $(COBJ-LIBP-SH) subdirs -ifeq ($(strip $(PTHREADS_DEBUG_SUPPORT)),y) - $(STRIPTOOL) -X --strip-debug -R .note -R .comment \ - $(COBJ-LIBP-ST) $(COBJ-LIBP-SH) -else - $(STRIPTOOL) -x -R .note -R .comment \ - $(COBJ-LIBP-ST) $(COBJ-LIBP-SH) -endif - $(AR) $(ARFLAGS) $(PTDIR)../$(LIBPTHREAD_STATIC_ARCHIVE) $(COBJ-LIBP-ST) - $(AR) $(ARFLAGS) $(PTDIR)../$(LIBPTHREAD_SHARED_ARCHIVE) $(COBJ-LIBP-SH) +headers: version.h banner.h version.h: @echo "#define VERSION \""$(VERSION)"\"" > $@ @@ -263,36 +253,78 @@ version.h: banner.h: Banner sed 's/\(.*\)/"\1\\n"/' $< > $@ -$(COBJ-LIBP-ST): %.o : %.c - $(CC) $(CFLAGS-$<) $(CFLAGS-LIBP) -c $< -o $@ - -$(COBJ-LIBP-SH): %.os : %.c - $(CC) $(CFLAGS-$<) $(CFLAGS-LIBP) -DSHARED -c $< -o $@ - -$(COBJ-LIBC-ST): %.o : %.c - $(CC) $(CFLAGS-$<) $(CFLAGS-LIBC) -c $< -o $@ - -$(COBJ-LIBC-SH): %.os : %.c - $(CC) $(CFLAGS-$<) $(CFLAGS-LIBC) -DSHARED -c $< -o $@ +$(AR_LIB_NAME): $(AR_LIBP_COBJS) + $(INSTALL) -d $(TOPDIR)lib + $(RM) $(AR_LIB_NAME) +ifeq ($(strip $(PTHREADS_DEBUG_SUPPORT)),y) + $(STRIPTOOL) -X --strip-debug -R .note -R .comment $(AR_LIBP_COBJS) +else + $(STRIPTOOL) -x -R .note -R .comment $(AR_LIBP_COBJS) +endif + $(AR) $(ARFLAGS) $(AR_LIB_NAME) $(AR_LIBP_COBJS) -objs-pthread-libc: $(COBJ-LIBC-ST) $(COBJ-LIBC-SH) +$(AR_SO_LIB_NAME): $(SO_LIBP_COBJS) + $(INSTALL) -d $(TOPDIR)lib + $(RM) $(TOPDIR)lib/$(SO_FULL_NAME) $(SO_LIB_NAME).$(MAJOR_VERSION) \ + $(SO_LIB_NAME) $(AR_SO_LIB_NAME) ifeq ($(strip $(PTHREADS_DEBUG_SUPPORT)),y) - $(STRIPTOOL) -X --strip-debug -R .note -R .comment \ - $(COBJ-LIBC-ST) $(COBJ-LIBC-SH) + $(STRIPTOOL) -X --strip-debug -R .note -R .comment $(SO_LIBP_COBJS) else - $(STRIPTOOL) -x -R .note -R .comment \ - $(COBJ-LIBC-ST) $(COBJ-LIBC-SH) + $(STRIPTOOL) -x -R .note -R .comment $(SO_LIBP_COBJS) endif - @for objfile in $(COBJ-LIBC-ST); do \ - echo ../libpthread/nptl/$$objfile >> $(PTCOBJST); \ - done - @for objfile in $(COBJ-LIBC-SH); do \ - echo ../libpthread/nptl/$$objfile >> $(PTCOBJSH); \ + $(AR) $(ARFLAGS) $(AR_SO_LIB_NAME) $(SO_LIBP_COBJS) + +$(SO_LIB_NAME): $(AR_SO_LIB_NAME) subdirs + $(LD) $(LDFLAGS_NOSTRIP) -soname=$(LIB_NAME).$(MAJOR_VERSION) \ + -o $(TOPDIR)lib/$(SO_FULL_NAME) $(SHARED_START_FILES) --whole-archive $(AR_SO_LIB_NAME) \ + --no-whole-archive $(TOPDIR)libc/misc/internals/interp.o \ + -L$(TOPDIR)lib -lc $(LDADD_LIBFLOAT) $(LIBGCC) \ + $(TOPDIR)lib/ld-uClibc-$(MAJOR_VERSION).$(MINOR_VERSION).$(SUBLEVEL).so \ + -L$(TOPDIR)ldso/libdl -ldl \ + $(SHARED_END_FILES) + $(LN) -sf $(SO_FULL_NAME) $(SO_LIB_NAME).$(MAJOR_VERSION) + $(LN) -sf $(SO_FULL_NAME) $(SO_LIB_NAME) + $(RM) $(AR_SO_LIB_NAME) + +obj.pthread.ar: $(AR_LIBC_COBJS) + $(RM) $(TOPDIR)libc/$@ +ifeq ($(strip $(PTHREADS_DEBUG_SUPPORT)),y) + $(STRIPTOOL) -X --strip-debug -R .note -R .comment $(AR_LIBC_COBJS) +else + $(STRIPTOOL) -x -R .note -R .comment $(AR_LIBC_COBJS) +endif + @for objfile in $(AR_LIBC_COBJS); do \ + echo ../libpthread/nptl/$$objfile >> $(TOPDIR)libc/$@; \ done $(MAKE) -C sysdeps/$(TARGET_ARCH) $@ $(MAKE) -C sysdeps/unix/sysv/linux $@ $(MAKE) -C sysdeps/unix/sysv/linux/$(TARGET_ARCH) $@ +obj.pthread.so: $(SO_LIBC_COBJS) + $(RM) $(TOPDIR)libc/$@ +ifeq ($(strip $(PTHREADS_DEBUG_SUPPORT)),y) + $(STRIPTOOL) -X --strip-debug -R .note -R .comment $(SO_LIBC_COBJS) +else + $(STRIPTOOL) -x -R .note -R .comment $(SO_LIBC_COBJS) +endif + @for objfile in $(SO_LIBC_COBJS); do \ + echo ../libpthread/nptl/$$objfile >> $(TOPDIR)libc/$@; \ + done + $(MAKE) -C sysdeps/unix/sysv/linux $@ + $(MAKE) -C sysdeps/unix/sysv/linux/$(TARGET_ARCH) $@ + +$(AR_LIBP_COBJS): %.o : %.c + $(CC) $(CFLAGS-$<) $(CFLAGS-LIBP) -c $< -o $@ + +$(SO_LIBP_COBJS): %.os : %.c + $(CC) $(CFLAGS-$<) $(CFLAGS-LIBP) -DSHARED -c $< -o $@ + +$(AR_LIBC_COBJS): %.o : %.c + $(CC) $(CFLAGS-$<) $(CFLAGS-LIBC) -c $< -o $@ + +$(SO_LIBC_COBJS): %.os : %.c + $(CC) $(CFLAGS-$<) $(CFLAGS-LIBC) -DSHARED -c $< -o $@ + clean: subdirs_clean $(RM) *.o *.os *~ core banner.h version.h diff --git a/libpthread/nptl/Rules.mak b/libpthread/nptl/Rules.mak index f96e42cd2..b42995738 100644 --- a/libpthread/nptl/Rules.mak +++ b/libpthread/nptl/Rules.mak @@ -1,13 +1,16 @@ # # These names are used for NPTL since we have to build seperate archives -# for the static and shared objects. We export them to sub-makes. +# for the static and shared objects. # -LIBPTHREAD_STATIC_ARCHIVE := libpthread.a -LIBPTHREAD_SHARED_ARCHIVE := libpthread-shared.a +LIB_NAME := libpthread +AR_LIB_NAME := $(TOPDIR)lib/$(LIB_NAME).a +AR_SO_LIB_NAME := $(TOPDIR)lib/shared_$(LIB_NAME).a +SO_LIB_NAME := $(TOPDIR)lib/$(LIB_NAME).so +SO_FULL_NAME := $(LIB_NAME)-$(MAJOR_VERSION).$(MINOR_VERSION).$(SUBLEVEL).so -CFLAGS-LIBC := $(filter-out -O0 -O1 -Os, $(CFLAGS)) -O2 -I$(PTDIR) \ +CFLAGS-LIBC := $(filter-out -O0 -O1 -Os, $(CFLAGS)) $(PTINC) -O2 \ + -I$(TOPDIR)libpthread/nptl \ -I$(TOPDIR)ldso/include -std=gnu99 ASFLAGS-LIBC := $(filter-out -std=gnu99, $(CFLAGS-LIBC)) -D__ASSEMBLER__ - CFLAGS-LIBP := $(CFLAGS-LIBC) -DNOT_IN_libc=1 -DIS_IN_libpthread=1 ASFLAGS-LIBP := $(filter-out -std=gnu99, $(CFLAGS-LIBP)) -D__ASSEMBLER__ diff --git a/libpthread/nptl/sysdeps/mips/Makefile b/libpthread/nptl/sysdeps/mips/Makefile index 949885073..5a1d6bff1 100644 --- a/libpthread/nptl/sysdeps/mips/Makefile +++ b/libpthread/nptl/sysdeps/mips/Makefile @@ -23,39 +23,49 @@ include ../../Rules.mak CFLAGS-dl-support.c = -D_GNU_SOURCE -COBJ-LIBC-ST = $(patsubst %.c, %.o, $(wildcard *.c)) +AR_LIBP_AOBJS = $(patsubst %.S, %.o, $(wildcard *.S)) +SO_LIBP_AOBJS = $(patsubst %.S, %.os, $(wildcard *.S)) +AR_LIBC_COBJS = $(patsubst %.c, %.o, $(wildcard *.c)) -AOBJ-LIBP-ST = $(patsubst %.S, %.o, $(wildcard *.S)) -AOBJ-LIBP-SH = $(patsubst %.S, %.os, $(wildcard *.S)) +all: $(AR_LIB_NAME) $(AR_SO_LIB_NAME) -ar-target all: $(AOBJ-LIBP-ST) $(AOBJ-LIBP-SH) +$(AR_LIB_NAME): $(AR_LIBP_AOBJS) ifeq ($(strip $(PTHREADS_DEBUG_SUPPORT)),y) - $(STRIPTOOL) -X --strip-debug -R .note -R .comment \ - $(AOBJ-LIBP-ST) $(AOBJ-LIBP-SH) + $(STRIPTOOL) -X --strip-debug -R .note -R .comment $(AR_LIBP_AOBJS) else - $(STRIPTOOL) -x -R .note -R .comment $(AOBJ-LIBP-ST) $(AOBJ-LIBP-SH) + $(STRIPTOOL) -x -R .note -R .comment $(AR_LIBP_AOBJS) $(AR_LIBP_AOBJS) endif - $(AR) $(ARFLAGS) $(PTDIR)../$(LIBPTHREAD_STATIC_ARCHIVE) $(AOBJ-LIBP-ST) - $(AR) $(ARFLAGS) $(PTDIR)../$(LIBPTHREAD_SHARED_ARCHIVE) $(AOBJ-LIBP-SH) + $(AR) $(ARFLAGS) $(AR_LIB_NAME) $(AR_LIBP_AOBJS) -$(AOBJ-LIBP-ST): %.o : %.S - $(CC) $(ASFLAGS) $(ASFLAGS-NPTL) -c $< -o $@ - -$(AOBJ-LIBP-SH): %.os : %.S - $(CC) $(ASFLAGS) $(ASFLAGS-NPTL) -DSHARED -c $< -o $@ - -$(COBJ-LIBC-ST): %.o : %.c - $(CC) $(CFLAGS-LIBC) $(CFLAGS-$<) -c $< -o $@ +$(AR_SO_LIB_NAME): $(SO_LIBP_AOBJS) +ifeq ($(strip $(PTHREADS_DEBUG_SUPPORT)),y) + $(STRIPTOOL) -X --strip-debug -R .note -R .comment $(SO_LIBP_AOBJS) +else + $(STRIPTOOL) -x -R .note -R .comment $(AR_LIBP_AOBJS) $(SO_LIBP_AOBJS) +endif + $(AR) $(ARFLAGS) $(AR_SO_LIB_NAME) $(SO_LIBP_AOBJS) -objs-pthread-libc: $(COBJ-LIBC-ST) +obj.pthread.ar: $(AR_LIBC_COBJS) ifeq ($(strip $(PTHREADS_DEBUG_SUPPORT)),y) - $(STRIPTOOL) -X --strip-debug -R .note -R .comment $(COBJ-LIBC-ST) + $(STRIPTOOL) -X --strip-debug -R .note -R .comment $(AR_LIBC_COBJS) else - $(STRIPTOOL) -x -R .note -R .comment $(COBJ-LIBC-ST) + $(STRIPTOOL) -x -R .note -R .comment $(AR_LIBC_COBJS) endif - @for objfile in $(COBJ-LIBC-ST); do \ - echo ../libpthread/nptl/sysdeps/mips/$$objfile >> $(PTCOBJST); \ + @for objfile in $(AR_LIBC_COBJS); do \ + echo ../libpthread/nptl/sysdeps/mips/$$objfile >> \ + $(TOPDIR)libc/$@; \ done +$(AR_LIBP_AOBJS): %.o : %.S + $(CC) $(ASFLAGS) $(ASFLAGS-NPTL) -c $< -o $@ + +$(SO_LIBP_AOBJS): %.os : %.S + $(CC) $(ASFLAGS) $(ASFLAGS-NPTL) -DSHARED -c $< -o $@ + +$(AR_LIBC_COBJS): %.o : %.c + $(CC) $(CFLAGS-LIBC) $(CFLAGS-$<) -c $< -o $@ + clean: $(RM) *.o *.os *~ core + +.PHONY: $(AR_LIB_NAME) $(AR_SO_LIB_NAME) diff --git a/libpthread/nptl/sysdeps/pthread/Makefile b/libpthread/nptl/sysdeps/pthread/Makefile index fae8f0800..280db89f1 100644 --- a/libpthread/nptl/sysdeps/pthread/Makefile +++ b/libpthread/nptl/sysdeps/pthread/Makefile @@ -42,25 +42,34 @@ CFLAGS-pthread_spin_destroy.c = -D_GNU_SOURCE CFLAGS-pthread_spin_init.c = -D_GNU_SOURCE CFLAGS-pthread_spin_unlock.c = -D_GNU_SOURCE -COBJ-LIBP-ST = $(patsubst %.c, %.o, $(CSRC)) -COBJ-LIBP-SH = $(patsubst %.c, %.os, $(CSRC)) +AR_LIBP_COBJS = $(patsubst %.c, %.o, $(CSRC)) +SO_LIBP_COBJS = $(patsubst %.c, %.os, $(CSRC)) -ar-target all: $(COBJ-LIBP-ST) $(COBJ-LIBP-SH) +all: $(AR_LIB_NAME) $(AR_SO_LIB_NAME) + +$(AR_LIB_NAME): $(AR_LIBP_COBJS) +ifeq ($(strip $(PTHREADS_DEBUG_SUPPORT)),y) + $(STRIPTOOL) -X --strip-debug -R .note -R .comment $(AR_LIBP_COBJS) +else + $(STRIPTOOL) -x -R .note -R .comment $(AR_LIBP_COBJS) +endif + $(AR) $(ARFLAGS) $(AR_LIB_NAME) $(AR_LIBP_COBJS) + +$(AR_SO_LIB_NAME): $(SO_LIBP_COBJS) ifeq ($(strip $(PTHREADS_DEBUG_SUPPORT)),y) - $(STRIPTOOL) -X --strip-debug -R .note -R .comment \ - $(COBJ-LIBP-ST) $(COBJ-LIBP-SH) + $(STRIPTOOL) -X --strip-debug -R .note -R .comment $(SO_LIBP_COBJS) else - $(STRIPTOOL) -x -R .note -R .comment \ - $(COBJ-LIBP-ST) $(COBJ-LIBP-SH) + $(STRIPTOOL) -x -R .note -R .comment $(SO_LIBP_COBJS) endif - $(AR) $(ARFLAGS) $(PTDIR)../$(LIBPTHREAD_STATIC_ARCHIVE) $(COBJ-LIBP-ST) - $(AR) $(ARFLAGS) $(PTDIR)../$(LIBPTHREAD_SHARED_ARCHIVE) $(COBJ-LIBP-SH) + $(AR) $(ARFLAGS) $(AR_SO_LIB_NAME) $(SO_LIBP_COBJS) -$(COBJ-LIBP-ST): %.o : %.c +$(AR_LIBP_COBJS): %.o : %.c $(CC) $(CFLAGS-$<) $(CFLAGS-LIBP) -c $< -o $@ -$(COBJ-LIBP-SH): %.os : %.c +$(SO_LIBP_COBJS): %.os : %.c $(CC) $(CFLAGS-$<) $(CFLAGS-LIBP) -DSHARED -c $< -o $@ clean: $(RM) *.o *.os *~ core + +.PHONY: $(AR_LIB_NAME) $(AR_SO_LIB_NAME) diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/Makefile b/libpthread/nptl/sysdeps/unix/sysv/linux/Makefile index 37ea6e05b..3dd1430b7 100644 --- a/libpthread/nptl/sysdeps/unix/sysv/linux/Makefile +++ b/libpthread/nptl/sysdeps/unix/sysv/linux/Makefile @@ -21,35 +21,32 @@ TOPDIR=../../../../../../ include $(TOPDIR)Rules.mak include ../../../../Rules.mak -CSRC-LIBP-ST = pt-raise.c pthread_attr_getaffinity.c \ +AR_LIBP_CSRC = pt-raise.c pthread_attr_getaffinity.c \ pthread_attr_setaffinity.c pthread_getaffinity.c \ pthread_getcpuclockid.c pthread_kill.c \ pthread_mutex_cond_lock.c pthread_setaffinity.c \ pthread_yield.c sem_post.c sem_timedwait.c \ sem_trywait.c sem_wait.c pt-fork.c - -CSRC-LIBP-SH = $(CSRC-LIBP-ST) - -CSRC-LIBC-ST = libc_pthread_init.c libc_multiple_threads.c \ +SO_LIBP_CSRC = $(AR_LIBP_CSRC) +AR_LIBC_CSRC = libc_pthread_init.c libc_multiple_threads.c \ register-atfork.c unregister-atfork.c - -CSRC-LIBC-SH = $(CSRC-LIBC-ST) +SO_LIBC_CSRC = $(AR_LIBC_CSRC) ifeq ($(strip $(TARGET_ARCH)),alpha) -CSRC-LIBC-ST += libc-lowlevellock.c -CSRC-LIBP-ST += rtld-libc-lowlevellock.c +AR_LIBC_CSRC += libc-lowlevellock.c +AR_LIBP_CSRC += rtld-libc-lowlevellock.c endif ifeq ($(strip $(TARGET_ARCH)),mips) -CSRC-LIBC-ST += libc-lowlevellock.c -CSRC-LIBP-ST += rtld-libc-lowlevellock.c +AR_LIBC_CSRC += libc-lowlevellock.c +AR_LIBP_CSRC += rtld-libc-lowlevellock.c endif ifeq ($(strip $(TARGET_ARCH)),powerpc) -CSRC-LIBC-ST += libc-lowlevellock.c -CSRC-LIBP-ST += rtld-libc-lowlevellock.c +AR_LIBC_CSRC += libc-lowlevellock.c +AR_LIBP_CSRC += rtld-libc-lowlevellock.c endif ifeq ($(strip $(TARGET_ARCH)),sparc) -CSRC-LIBC-ST += libc-lowlevellock.c -CSRC-LIBP-ST += rtld-libc-lowlevellock.c +AR_LIBC_CSRC += libc-lowlevellock.c +AR_LIBP_CSRC += rtld-libc-lowlevellock.c endif # @@ -57,51 +54,67 @@ endif # CFLAGS-pt-fork.c = -D_GNU_SOURCE -COBJ-LIBP-ST = $(patsubst %.c, %.o, $(CSRC-LIBP-ST)) -COBJ-LIBP-SH = $(patsubst %.c, %.os, $(CSRC-LIBP-SH)) -COBJ-LIBC-ST = $(patsubst %.c, %.o, $(CSRC-LIBC-ST)) -COBJ-LIBC-SH = $(patsubst %.c, %.os, $(CSRC-LIBC-SH)) +AR_LIBP_COBJS = $(patsubst %.c, %.o, $(AR_LIBP_CSRC)) +SO_LIBP_COBJS = $(patsubst %.c, %.os, $(SO_LIBP_CSRC)) +AR_LIBC_COBJS = $(patsubst %.c, %.o, $(AR_LIBC_CSRC)) +SO_LIBC_COBJS = $(patsubst %.c, %.os, $(SO_LIBC_CSRC)) + +all: $(AR_LIB_NAME) $(AR_SO_LIB_NAME) -ar-target all: $(COBJ-LIBP-ST) $(COBJ-LIBP-SH) +$(AR_LIB_NAME): $(AR_LIBP_COBJS) ifeq ($(strip $(PTHREADS_DEBUG_SUPPORT)),y) - $(STRIPTOOL) -X --strip-debug -R .note -R .comment \ - $(COBJ-LIBP-ST) $(COBJ-LIBP-SH) + $(STRIPTOOL) -X --strip-debug -R .note -R .comment $(AR_LIBP_COBJS) else - $(STRIPTOOL) -x -R .note -R .comment \ - $(COBJ-LIBP-ST) $(COBJ-LIBP-SH) + $(STRIPTOOL) -x -R .note -R .comment $(AR_LIBP_COBJS) endif - $(AR) $(ARFLAGS) $(PTDIR)../$(LIBPTHREAD_STATIC_ARCHIVE) $(COBJ-LIBP-ST) - $(AR) $(ARFLAGS) $(PTDIR)../$(LIBPTHREAD_SHARED_ARCHIVE) $(COBJ-LIBP-SH) + $(AR) $(ARFLAGS) $(AR_LIB_NAME) $(AR_LIBP_COBJS) + +$(AR_SO_LIB_NAME): $(SO_LIBP_COBJS) +ifeq ($(strip $(PTHREADS_DEBUG_SUPPORT)),y) + $(STRIPTOOL) -X --strip-debug -R .note -R .comment $(SO_LIBP_COBJS) +else + $(STRIPTOOL) -x -R .note -R .comment $(SO_LIBP_COBJS) +endif + $(AR) $(ARFLAGS) $(AR_SO_LIB_NAME) $(SO_LIBP_COBJS) + +obj.pthread.ar: $(AR_LIBC_COBJS) +ifeq ($(strip $(PTHREADS_DEBUG_SUPPORT)),y) + $(STRIPTOOL) -X --strip-debug -R .note -R .comment $(AR_LIBC_COBJS) +else + $(STRIPTOOL) -x -R .note -R .comment $(AR_LIBC_COBJS) +endif + @for objfile in $(AR_LIBC_COBJS); do \ + echo ../libpthread/nptl/sysdeps/unix/sysv/linux/$$objfile >> \ + $(TOPDIR)libc/$@; \ + done -$(COBJ-LIBP-ST): %.o : %.c +obj.pthread.so: $(SO_LIBC_COBJS) +ifeq ($(strip $(PTHREADS_DEBUG_SUPPORT)),y) + $(STRIPTOOL) -X --strip-debug -R .note -R .comment $(SO_LIBC_COBJS) +else + $(STRIPTOOL) -x -R .note -R .comment $(SO_LIBC_COBJS) +endif + @for objfile in $(SO_LIBC_COBJS); do \ + echo ../libpthread/nptl/sysdeps/unix/sysv/linux/$$objfile >> \ + $(TOPDIR)libc/$@; \ + done + +$(AR_LIBP_COBJS): %.o : %.c $(CC) $(CFLAGS-$<) $(CFLAGS-LIBP) -c $< -o $@ -$(COBJ-LIBP-SH): %.os : %.c +$(SO_LIBP_COBJS): %.os : %.c $(CC) $(CFLAGS-$<) $(CFLAGS-LIBP) -DSHARED -c $< -o $@ -$(COBJ-LIBC-ST): %.o : %.c +$(AR_LIBC_COBJS): %.o : %.c $(CC) $(CFLAGS-$<) $(CFLAGS-LIBC) -c $< -o $@ -$(COBJ-LIBC-SH): %.os : %.c +$(SO_LIBC_COBJS): %.os : %.c $(CC) $(CFLAGS-$<) $(CFLAGS-LIBC) -DSHARED -c $< -o $@ -objs-pthread-libc: $(COBJ-LIBC-ST) $(COBJ-LIBC-SH) -ifeq ($(strip $(PTHREADS_DEBUG_SUPPORT)),y) - $(STRIPTOOL) -X --strip-debug -R .note -R .comment \ - $(COBJ-LIBC-ST) $(COBJ-LIBC-SH) -else - $(STRIPTOOL) -x -R .note -R .comment \ - $(COBJ-LIBC-ST) $(COBJ-LIBC-SH) -endif - @for objfile in $(COBJ-LIBC-ST); do \ - echo ../libpthread/nptl/sysdeps/unix/sysv/linux/$$objfile >> $(PTCOBJST); \ - done - @for objfile in $(COBJ-LIBC-SH); do \ - echo ../libpthread/nptl/sysdeps/unix/sysv/linux/$$objfile >> $(PTCOBJSH); \ - done - rtld-libc-lowlevellock.c: libc-lowlevellock.c $(LN) -fs $< $@ clean: $(RM) *.o *.os *~ core rtld-libc-lowlevellock.c + +.PHONY: $(AR_LIB_NAME) $(AR_SO_LIB_NAME) diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/libc_pthread_init.c b/libpthread/nptl/sysdeps/unix/sysv/linux/libc_pthread_init.c index 3d1c02181..85b75221e 100644 --- a/libpthread/nptl/sysdeps/unix/sysv/linux/libc_pthread_init.c +++ b/libpthread/nptl/sysdeps/unix/sysv/linux/libc_pthread_init.c @@ -57,3 +57,11 @@ __libc_pthread_init (ptr, reclaim, functions) return &__libc_multiple_threads; #endif } + +/* I would rather not talk about this. */ +#ifdef SHARED +#include <link.h> +void _dl_aux_init (ElfW(auxv_t) *av) +{ +} +#endif diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/mips/Makefile b/libpthread/nptl/sysdeps/unix/sysv/linux/mips/Makefile index dd2bda972..865f74149 100644 --- a/libpthread/nptl/sysdeps/unix/sysv/linux/mips/Makefile +++ b/libpthread/nptl/sysdeps/unix/sysv/linux/mips/Makefile @@ -21,71 +21,87 @@ TOPDIR=../../../../../../../ include $(TOPDIR)Rules.mak include ../../../../../Rules.mak -ASRC-LIBP-ST = pt-vfork.S clone.S -ASRC-LIBP-SH = $(ASRC-LIBP-ST) +AR_LIBP_ASRC = pt-vfork.S clone.S +SO_LIBP_ASRC = $(AR_LIBP_ASRC) +AR_LIBP_CSRC = pthread_once.c +SO_LIBP_CSRC = $(AR_LIBP_CSRC) +AR_LIBC_CSRC = fork-nptl.c +SO_LIBC_CSRC = $(AR_LIBC_CSRC) -CSRC-LIBP-ST = pthread_once.c -CSRC-LIBP-SH = $(CSRC-LIBP-ST) - -CSRC-LIBC-ST = fork-nptl.c -CSRC-LIBC-SH = $(CSRC-LIBC-ST) - -AOBJ-LIBP-ST = $(patsubst %.S, %.o, $(ASRC-LIBP-ST)) -AOBJ-LIBP-SH = $(patsubst %.S, %.os, $(ASRC-LIBP-SH)) -COBJ-LIBP-ST = $(patsubst %.c, %.o, $(CSRC-LIBP-ST)) -COBJ-LIBP-SH = $(patsubst %.c, %.os, $(CSRC-LIBP-ST)) -COBJ-LIBC-ST = $(patsubst %.c, %.o, $(CSRC-LIBC-ST)) -COBJ-LIBC-SH = $(patsubst %.c, %.os, $(CSRC-LIBC-SH)) +AR_LIBP_AOBJS = $(patsubst %.S, %.o, $(AR_LIBP_ASRC)) +SO_LIBP_AOBJS = $(patsubst %.S, %.os, $(SO_LIBP_ASRC)) +AR_LIBP_COBJS = $(patsubst %.c, %.o, $(AR_LIBP_CSRC)) +SO_LIBP_COBJS = $(patsubst %.c, %.os, $(SO_LIBP_CSRC)) +AR_LIBC_COBJS = $(patsubst %.c, %.o, $(AR_LIBC_CSRC)) +SO_LIBC_COBJS = $(patsubst %.c, %.os, $(SO_LIBC_CSRC)) ifeq ($(UCLIBC_HAS_STDIO_FUTEXES),y) CFLAGS-fork-nptl.c = -D__USE_STDIO_FUTEXES__ endif -ar-target all: $(AOBJ-LIBP-ST) $(AOBJ-LIBP-SH) $(COBJ-LIBP-ST) $(COBJ-LIBP-SH) +all: $(AR_LIB_NAME) $(AR_SO_LIB_NAME) + +$(AR_LIB_NAME): $(AR_LIBP_AOBJS) $(AR_LIBP_COBJS) +ifeq ($(strip $(PTHREADS_DEBUG_SUPPORT)),y) + $(STRIPTOOL) -X --strip-debug -R .note -R .comment \ + $(AR_LIBP_AOBJS) $(AR_LIBP_COBJS) +else + $(STRIPTOOL) -x -R .note -R .comment \ + $(AR_LIBP_AOBJS) $(AR_LIBP_COBJS) +endif + $(AR) $(ARFLAGS) $(AR_LIB_NAME) $(AR_LIBP_AOBJS) $(AR_LIBP_COBJS) + +$(AR_SO_LIB_NAME): $(SO_LIBP_AOBJS) $(SO_LIBP_COBJS) ifeq ($(strip $(PTHREADS_DEBUG_SUPPORT)),y) $(STRIPTOOL) -X --strip-debug -R .note -R .comment \ - $(AOBJ-LIBP-ST) $(AOBJ-LIBP-SH) $(COBJ-LIBP-ST) $(COBJ-LIBP-SH) + $(SO_LIBP_AOBJS) $(SO_LIBP_COBJS) else $(STRIPTOOL) -x -R .note -R .comment \ - $(AOBJ-LIBP-ST) $(AOBJ-LIBP-SH) $(COBJ-LIBP-ST) $(COBJ-LIBP-SH) + $(SO_LIBP_AOBJS) $(SO_LIBP_COBJS) +endif + $(AR) $(ARFLAGS) $(AR_SO_LIB_NAME) $(SO_LIBP_AOBJS) $(SO_LIBP_COBJS) + +obj.pthread.ar: $(AR_LIBC_COBJS) +ifeq ($(strip $(PTHREADS_DEBUG_SUPPORT)),y) + $(STRIPTOOL) -X --strip-debug -R .note -R .comment $(AR_LIBC_COBJS) +else + $(STRIPTOOL) -x -R .note -R .comment $(AR_LIBC_COBJS) +endif + @for objfile in $(AR_LIBC_COBJS); do \ + echo ../libpthread/nptl/sysdeps/unix/sysv/linux/mips/$$objfile \ + >> $(TOPDIR)libc/$@; \ + done + +obj.pthread.so: $(SO_LIBC_COBJS) +ifeq ($(strip $(PTHREADS_DEBUG_SUPPORT)),y) + $(STRIPTOOL) -X --strip-debug -R .note -R .comment $(SO_LIBC_COBJS) +else + $(STRIPTOOL) -x -R .note -R .comment $(SO_LIBC_COBJS) endif - $(AR) $(ARFLAGS) $(PTDIR)../$(LIBPTHREAD_STATIC_ARCHIVE) \ - $(AOBJ-LIBP-ST) $(COBJ-LIBP-ST) - $(AR) $(ARFLAGS) $(PTDIR)../$(LIBPTHREAD_SHARED_ARCHIVE) \ - $(AOBJ-LIBP-SH) $(COBJ-LIBP-SH) + @for objfile in $(SO_LIBC_COBJS); do \ + echo ../libpthread/nptl/sysdeps/unix/sysv/linux/mips/$$objfile \ + >> $(TOPDIR)libc/$@; \ + done -$(AOBJ-LIBP-ST): %.o : %.S +$(AR_LIBP_AOBJS): %.o : %.S $(CC) $(ASFLAGS-LIBP) -c $< -o $@ -$(AOBJ-LIBP-SH): %.os : %.S +$(SO_LIBP_AOBJS): %.os : %.S $(CC) $(ASFLAGS-LIBP) -DSHARED -c $< -o $@ -$(COBJ-LIBP-ST): %.o : %.c +$(AR_LIBP_COBJS): %.o : %.c $(CC) $(CFLAGS-$<) $(CFLAGS-LIBP) -c $< -o $@ -$(COBJ-LIBP-SH): %.os : %.c +$(SO_LIBP_COBJS): %.os : %.c $(CC) $(CFLAGS-$<) $(CFLAGS-LIBP) -DSHARED -c $< -o $@ -$(COBJ-LIBC-ST): %.o : %.c +$(AR_LIBC_COBJS): %.o : %.c $(CC) $(CFLAGS-$<) $(CFLAGS-LIBC) -c $< -o $@ -$(COBJ-LIBC-SH): %.os : %.c +$(SO_LIBC_COBJS): %.os : %.c $(CC) $(CFLAGS-$<) $(CFLAGS-LIBC) -DSHARED -c $< -o $@ -objs-pthread-libc: $(COBJ-LIBC-ST) $(COBJ-LIBC-SH) -ifeq ($(strip $(PTHREADS_DEBUG_SUPPORT)),y) - $(STRIPTOOL) -X --strip-debug -R .note -R .comment \ - $(COBJ-LIBC-ST) $(COBJ-LIBC-SH) -else - $(STRIPTOOL) -x -R .note -R .comment \ - $(COBJ-LIBC-ST) $(COBJ-LIBC-SH) -endif - @for objfile in $(COBJ-LIBC-ST); do \ - echo ../libpthread/nptl/sysdeps/unix/sysv/linux/mips/$$objfile >> $(PTCOBJST); \ - done - @for objfile in $(COBJ-LIBC-SH); do \ - echo ../libpthread/nptl/sysdeps/unix/sysv/linux/mips/$$objfile >> $(PTCOBJSH); \ - done - clean: $(RM) *.o *.os *~ core + +.PHONY: $(AR_LIB_NAME) $(AR_SO_LIB_NAME) diff --git a/libpthread/nptl_db/Makefile b/libpthread/nptl_db/Makefile index 7fa3daa9a..a18912b4c 100644 --- a/libpthread/nptl_db/Makefile +++ b/libpthread/nptl_db/Makefile @@ -1,4 +1,4 @@ -# Makefile for uClibc's NPTL pthread debug library +# Makefile for uClibc's native pthread debug library # # Copyright (C) 2005 Steven J. Hill <sjhill@realitydiluted.com> # @@ -20,28 +20,42 @@ TOPDIR=../../ include $(TOPDIR)Rules.mak -LIBTHREAD_DB=../libthread_db.a +LIB_NAME=libthread_db +AR_LIB_NAME=$(TOPDIR)lib/$(LIB_NAME).a +SO_LIB_NAME=$(TOPDIR)lib/$(LIB_NAME).so +SO_FULL_NAME=$(LIB_NAME)-$(MAJOR_VERSION).$(MINOR_VERSION).$(SUBLEVEL).so -CFLAGS := $(CFLAGS:-O0=-O2) -DNOT_IN_libc=1 -DIS_IN_libthread_db=1 \ +CFLAGS := $(CFLAGS:-O0=-O2) -DNOT_IN_libc=1 -DIS_IN_libthread_db=1 $(PTINC) \ -std=gnu99 -DLIBPTHREAD_SO="\"libpthread.so.$(MAJOR_VERSION)\"" -CFLAGS += -I$(PTDIR)compat \ - -I$(PTDIR)sysdeps/unix/sysv/linux/$(TARGET_ARCH) \ - -I$(PTDIR)sysdeps/$(TARGET_ARCH) \ - -I$(PTDIR)sysdeps/unix/sysv/linux \ - -I$(PTDIR)sysdeps/pthread \ - -I$(PTDIR)sysdeps/generic +# Remove any -z defs since this lib will have undefined symbols +LDFLAGS := $(subst -z defs,,$(LDFLAGS)) --warn-unresolved-symbols -OBJS=$(patsubst %.c, %.o, $(filter-out db_info.c, $(wildcard *.c))) +OBJS = $(patsubst %.c, %.o, $(filter-out db_info.c, $(wildcard *.c))) -all: $(LIBTHREAD_DB) +ifeq ($(strip $(HAVE_SHARED)),y) +all: $(SO_LIB_NAME) +else +all: $(AR_LIB_NAME) +endif -$(LIBTHREAD_DB) ar-target: $(OBJS) - $(AR) $(ARFLAGS) $(LIBTHREAD_DB) $(OBJS) +$(AR_LIB_NAME): $(OBJS) + $(INSTALL) -d $(TOPDIR)lib + $(RM) $(AR_LIB_NAME) + $(AR) $(ARFLAGS) $(AR_LIB_NAME) $(OBJS) + +$(SO_LIB_NAME): $(AR_LIB_NAME) + $(RM) $(TOPDIR)lib/$(SO_FULL_NAME) $(SO_LIB_NAME).1 $(SO_LIB_NAME) + $(LD) $(LDFLAGS) -soname=$(LIB_NAME).so.1 \ + -o $(TOPDIR)lib/$(SO_FULL_NAME) --whole-archive $(AR_LIB_NAME) \ + --no-whole-archive $(TOPDIR)libc/misc/internals/interp.o \ + -L$(TOPDIR)lib -lc $(LDADD_LIBFLOAT) $(LIBGCC) + $(LN) -sf $(SO_FULL_NAME) $(SO_LIB_NAME).1 + $(LN) -sf $(SO_FULL_NAME) $(SO_LIB_NAME) $(OBJS): %.o : %.c $(CC) $(CFLAGS) -c $< -o $@ $(STRIPTOOL) -x -R .note -R .comment $*.o clean: - $(RM) *.[oa] *~ core + $(RM) *.o *~ core |