summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Makefile1
-rw-r--r--Rules.mak35
-rw-r--r--ldso/Makefile35
-rw-r--r--ldso/ldso/Makefile79
-rw-r--r--ldso/ldso/ldso.c3
-rw-r--r--ldso/libdl/Makefile82
-rw-r--r--libc/Makefile90
-rw-r--r--libc/inet/Makefile4
-rw-r--r--libc/misc/internals/Makefile4
-rw-r--r--libc/misc/internals/__uClibc_main.c60
-rw-r--r--libc/misc/syslog/Makefile4
-rw-r--r--libc/stdio/Makefile4
-rw-r--r--libc/stdlib/malloc-standard/Makefile10
-rw-r--r--libc/sysdeps/linux/mips/Makefile12
-rw-r--r--libpthread/Makefile112
-rw-r--r--libpthread/linuxthreads/Makefile12
-rw-r--r--libpthread/linuxthreads_db/Makefile9
-rw-r--r--libpthread/nptl/Makefile116
-rw-r--r--libpthread/nptl/Rules.mak13
-rw-r--r--libpthread/nptl/sysdeps/mips/Makefile54
-rw-r--r--libpthread/nptl/sysdeps/pthread/Makefile31
-rw-r--r--libpthread/nptl/sysdeps/unix/sysv/linux/Makefile103
-rw-r--r--libpthread/nptl/sysdeps/unix/sysv/linux/libc_pthread_init.c8
-rw-r--r--libpthread/nptl/sysdeps/unix/sysv/linux/mips/Makefile100
-rw-r--r--libpthread/nptl_db/Makefile42
25 files changed, 536 insertions, 487 deletions
diff --git a/Makefile b/Makefile
index 945c59558..b46518d0a 100644
--- a/Makefile
+++ b/Makefile
@@ -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
diff --git a/Rules.mak b/Rules.mak
index 0bcd0c452..9ecabf1ec 100644
--- a/Rules.mak
+++ b/Rules.mak
@@ -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