svn commit: trunk/uClibc: ldso/ldso ldso/libdl libc libpthread/li etc...

aldot at uclibc.org aldot at uclibc.org
Sat Oct 13 14:50:47 UTC 2007


Author: aldot
Date: 2007-10-13 07:50:43 -0700 (Sat, 13 Oct 2007)
New Revision: 20241

Log:
- use the compiler-driver instead of the linker
- adjust setting flags accordingly to use (hardcoded, see below) -Wl,
  Potential improvements:
  *) --warn-unresolved-symbols should perhaps be used for all libs
  *) eventually rename LDFLAGS to CC_LDFLAGS
  *) probe for compiler driver's notion of flag to use for passing in
     linker flags (i.e. don't hardcode "-Wl,")


Modified:
   trunk/uClibc/Makerules
   trunk/uClibc/Rules.mak
   trunk/uClibc/TODO
   trunk/uClibc/ldso/ldso/Makefile.in
   trunk/uClibc/ldso/libdl/Makefile.in
   trunk/uClibc/libc/Makefile.in
   trunk/uClibc/libpthread/linuxthreads.old/Makefile.in
   trunk/uClibc/libpthread/linuxthreads.old_db/Makefile.in
   trunk/uClibc/libpthread/linuxthreads/Makefile.in
   trunk/uClibc/libpthread/linuxthreads_db/Makefile.in


Changeset:
Modified: trunk/uClibc/Makerules
===================================================================
--- trunk/uClibc/Makerules	2007-10-13 14:41:46 UTC (rev 20240)
+++ trunk/uClibc/Makerules	2007-10-13 14:50:43 UTC (rev 20241)
@@ -126,9 +126,9 @@
 	$(Q)$(INSTALL) -d $(dir $@)
 	$(Q)$(RM) $@ $@.$(2) $(dir $@)$(1)
 	@$(disp_ld)
-	$(Q)$(LD) $(LDFLAGS-$(notdir $@)) -soname=$(notdir $@).$(2) \
-		-o $(dir $@)$(1) $(START_FILE-$(notdir $@)) \
-		--whole-archive $(firstword $^) --no-whole-archive \
+	$(Q)$(CC) $(LDFLAGS-$(notdir $@)) -Wl,-soname=$(notdir $@).$(2) \
+		-nostdlib -o $(dir $@)$(1) $(START_FILE-$(notdir $@)) \
+		-Wl,--whole-archive $(firstword $^) -Wl,--no-whole-archive \
 		$(LIBS-$(notdir $@)) $(LIBGCC) $(END_FILE-$(notdir $@))
 	$(Q)$(LN) -sf $(1) $@.$(2)
 	$(Q)$(LN) -sf $(1) $@
@@ -150,10 +150,10 @@
 	$(Q)$(INSTALL) -d $(dir $@)
 	$(Q)$(RM) $(1) $@
 	@$(disp_ld)
-	$(Q)$(LD) $(LDFLAGS-$(notdir $@)) -o $(1) \
-		-elf2flt -shared-lib-id $(2) $(top_builddir)lib/Scrt1.o \
-		$(top_builddir)/lib/crti.o --whole-archive $(firstword $^) \
-		--no-whole-archive $(LIBS-$(notdir $@)) $(LIBGCC) \
+	$(Q)$(CC) $(LDFLAGS-$(notdir $@)) -nostdlib -o $(1) \
+		-Wl,-elf2flt -Wl,-shared-lib-id $(2) $(top_builddir)lib/Scrt1.o \
+		$(top_builddir)/lib/crti.o -Wl,--whole-archive $(firstword $^) \
+		-Wl,--no-whole-archive $(LIBS-$(notdir $@)) $(LIBGCC) \
 		$(top_builddir)/lib/crtn.o
 endef
 
@@ -161,8 +161,8 @@
 	$(Q)$(INSTALL) -d $(dir $@)
 	$(Q)$(RM) $@ $@.$(2) $(dir $@)$(1)
 	@$(disp_ld)
-	$(Q)$(LD) $(LDFLAGS-$(notdir $@)) -soname=$(notdir $@).$(2) \
-		-o $(dir $@)$(1) $(START_FILE-$(notdir $@)) $^ \
+	$(Q)$(CC) $(LDFLAGS-$(notdir $@)) -Wl,-soname=$(notdir $@).$(2) \
+		-nostdlib -o $(dir $@)$(1) $(START_FILE-$(notdir $@)) $^ \
 		$(LIBS-$(notdir $@)) $(LIBGCC) $(END_FILE-$(notdir $@))
 	$(Q)$(LN) -sf $(1) $@.$(2)
 	$(Q)$(LN) -sf $(1) $@

Modified: trunk/uClibc/Rules.mak
===================================================================
--- trunk/uClibc/Rules.mak	2007-10-13 14:41:46 UTC (rev 20240)
+++ trunk/uClibc/Rules.mak	2007-10-13 14:50:43 UTC (rev 20241)
@@ -117,6 +117,9 @@
 ldso :=
 endif
 
+comma:=,
+space:= #
+
 ifndef CROSS
 CROSS=$(subst ",, $(strip $(CROSS_COMPILER_PREFIX)))
 endif
@@ -192,8 +195,8 @@
 
 ifeq ($(TARGET_ARCH),arm)
 	OPTIMIZATION+=-fstrict-aliasing
-	CPU_LDFLAGS-$(ARCH_LITTLE_ENDIAN)+=-EL
-	CPU_LDFLAGS-$(ARCH_BIG_ENDIAN)+=-EB
+	CPU_LDFLAGS-$(ARCH_LITTLE_ENDIAN)+=-Wl,-EL
+	CPU_LDFLAGS-$(ARCH_BIG_ENDIAN)+=-Wl,-EB
 	CPU_CFLAGS-$(ARCH_LITTLE_ENDIAN)+=-mlittle-endian
 	CPU_CFLAGS-$(ARCH_BIG_ENDIAN)+=-mbig-endian
 	CPU_CFLAGS-$(CONFIG_GENERIC_ARM)+=
@@ -216,8 +219,8 @@
 endif
 
 ifeq ($(TARGET_ARCH),mips)
-	CPU_LDFLAGS-$(ARCH_LITTLE_ENDIAN)+=-EL
-	CPU_LDFLAGS-$(ARCH_BIG_ENDIAN)+=-EB
+	CPU_LDFLAGS-$(ARCH_LITTLE_ENDIAN)+=-Wl,-EL
+	CPU_LDFLAGS-$(ARCH_BIG_ENDIAN)+=-Wl,-EB
 	CPU_CFLAGS-$(CONFIG_MIPS_ISA_1)+=-mips1
 	CPU_CFLAGS-$(CONFIG_MIPS_ISA_2)+=-mips2 -mtune=mips2
 	CPU_CFLAGS-$(CONFIG_MIPS_ISA_3)+=-mips3 -mtune=mips3
@@ -225,12 +228,12 @@
 	CPU_CFLAGS-$(CONFIG_MIPS_ISA_MIPS32)+=-mips32 -mtune=mips32
 	CPU_CFLAGS-$(CONFIG_MIPS_ISA_MIPS64)+=-mips64 -mtune=mips32
 	ifeq ($(strip $(ARCH_BIG_ENDIAN)),y)
-		CPU_LDFLAGS-$(CONFIG_MIPS_N64_ABI)+=-melf64btsmip
-		CPU_LDFLAGS-$(CONFIG_MIPS_O32_ABI)+=-melf32btsmip
+		CPU_LDFLAGS-$(CONFIG_MIPS_N64_ABI)+=-Wl,-melf64btsmip
+		CPU_LDFLAGS-$(CONFIG_MIPS_O32_ABI)+=-Wl,-melf32btsmip
 	endif
 	ifeq ($(strip $(ARCH_LITTLE_ENDIAN)),y)
-		CPU_LDFLAGS-$(CONFIG_MIPS_N64_ABI)+=-melf64ltsmip
-		CPU_LDFLAGS-$(CONFIG_MIPS_O32_ABI)+=-melf32ltsmip
+		CPU_LDFLAGS-$(CONFIG_MIPS_N64_ABI)+=-Wl,-melf64ltsmip
+		CPU_LDFLAGS-$(CONFIG_MIPS_O32_ABI)+=-Wl,-melf32ltsmip
 	endif
 	CPU_CFLAGS-$(CONFIG_MIPS_N64_ABI)+=-mabi=64
 	CPU_CFLAGS-$(CONFIG_MIPS_O32_ABI)+=-mabi=32
@@ -238,15 +241,15 @@
 endif
 
 ifeq ($(TARGET_ARCH),nios)
-	CPU_LDFLAGS-y+=-m32
-	CPU_CFLAGS-y+=-m32
+	CPU_LDFLAGS-y+=-Wl,-m32
+	CPU_CFLAGS-y+=-Wl,-m32
 endif
 
 ifeq ($(TARGET_ARCH),sh)
 	OPTIMIZATION+=-fstrict-aliasing
 	OPTIMIZATION+= $(call check_gcc,-mprefergot,)
-	CPU_LDFLAGS-$(ARCH_LITTLE_ENDIAN)+=-EL
-	CPU_LDFLAGS-$(ARCH_BIG_ENDIAN)+=-EB
+	CPU_LDFLAGS-$(ARCH_LITTLE_ENDIAN)+=-Wl,-EL
+	CPU_LDFLAGS-$(ARCH_BIG_ENDIAN)+=-Wl,-EB
 	CPU_CFLAGS-$(ARCH_LITTLE_ENDIAN)+=-ml
 	CPU_CFLAGS-$(ARCH_BIG_ENDIAN)+=-mb
 	CPU_CFLAGS-$(CONFIG_SH2)+=-m2
@@ -262,23 +265,23 @@
 
 ifeq ($(TARGET_ARCH),sh64)
 	OPTIMIZATION+=-fstrict-aliasing
-	CPU_LDFLAGS-$(ARCH_LITTLE_ENDIAN):=-EL
-	CPU_LDFLAGS-$(ARCH_BIG_ENDIAN):=-EB
+	CPU_LDFLAGS-$(ARCH_LITTLE_ENDIAN):=-Wl,-EL
+	CPU_LDFLAGS-$(ARCH_BIG_ENDIAN):=-Wl,-EB
 	CPU_CFLAGS-$(ARCH_LITTLE_ENDIAN):=-ml
 	CPU_CFLAGS-$(ARCH_BIG_ENDIAN):=-mb
 	CPU_CFLAGS-$(CONFIG_SH5)+=-m5-32media
 endif
 
 ifeq ($(TARGET_ARCH),h8300)
-	CPU_LDFLAGS-$(CONFIG_H8300H)+= -ms8300h
-	CPU_LDFLAGS-$(CONFIG_H8S)   += -ms8300s
+	CPU_LDFLAGS-$(CONFIG_H8300H)+= -Wl,-ms8300h
+	CPU_LDFLAGS-$(CONFIG_H8S)   += -Wl,-ms8300s
 	CPU_CFLAGS-$(CONFIG_H8300H) += -mh -mint32
 	CPU_CFLAGS-$(CONFIG_H8S)    += -ms -mint32
 endif
 
 ifeq ($(TARGET_ARCH),cris)
-	CPU_LDFLAGS-$(CONFIG_CRIS)+=-mcrislinux
-	CPU_LDFLAGS-$(CONFIG_CRISV32)+=-mcrislinux
+	CPU_LDFLAGS-$(CONFIG_CRIS)+=-Wl,-mcrislinux
+	CPU_LDFLAGS-$(CONFIG_CRISV32)+=-Wl,-mcrislinux
 	CPU_CFLAGS-$(CONFIG_CRIS)+=-mlinux
 	PICFLAG:=-fpic
 	PIEFLAG_NAME:=-fpie
@@ -304,13 +307,13 @@
 endif
 
 ifeq ($(TARGET_ARCH),frv)
-	CPU_LDFLAGS-$(CONFIG_FRV)+=-melf32frvfd
+	CPU_LDFLAGS-$(CONFIG_FRV)+=-Wl,-melf32frvfd
 	# Using -pie causes the program to have an interpreter, which is
 	# forbidden, so we must make do with -shared.  Unfortunately,
 	# -shared by itself would get us global function descriptors
 	# and calls through PLTs, dynamic resolution of symbols, etc,
 	# which would break as well, but -Bsymbolic comes to the rescue.
-	export LDPIEFLAG:=-shared -Bsymbolic
+	export LDPIEFLAG:=-Wl,-shared -Wl,-Bsymbolic
 	UCLIBC_LDSO=ld.so.1
 endif
 
@@ -396,19 +399,20 @@
 
 CFLAGS += $(call check_gcc,-std=gnu99,)
 
-LDFLAGS_NOSTRIP:=$(CPU_LDFLAGS-y) -shared --warn-common --warn-once -z combreloc
+LDFLAGS_NOSTRIP:=$(CPU_LDFLAGS-y) -Wl,-shared \
+	-Wl,--warn-common -Wl,--warn-once -Wl,-z,combreloc
 # binutils-2.16.1 warns about ignored sections, 2.16.91.0.3 and newer are ok
 #LDFLAGS_NOSTRIP+=$(call check_ld,--gc-sections)
 
 ifeq ($(UCLIBC_BUILD_RELRO),y)
-LDFLAGS_NOSTRIP+=-z relro
+LDFLAGS_NOSTRIP+=-Wl,-z,relro
 endif
 
 ifeq ($(UCLIBC_BUILD_NOW),y)
-LDFLAGS_NOSTRIP+=-z now
+LDFLAGS_NOSTRIP+=-Wl,-z,now
 endif
 
-LDFLAGS:=$(LDFLAGS_NOSTRIP) -z defs
+LDFLAGS:=$(LDFLAGS_NOSTRIP) -Wl,-z,defs
 ifeq ($(DODEBUG),y)
 #CFLAGS += -g3
 CFLAGS += -O0 -g3
@@ -416,7 +420,7 @@
 CFLAGS += $(OPTIMIZATION) $(XARCH_CFLAGS)
 endif
 ifeq ($(DOSTRIP),y)
-LDFLAGS += -s
+LDFLAGS += -Wl,-s
 else
 STRIPTOOL := true -Stripping_disabled
 endif

Modified: trunk/uClibc/TODO
===================================================================
--- trunk/uClibc/TODO	2007-10-13 14:41:46 UTC (rev 20240)
+++ trunk/uClibc/TODO	2007-10-13 14:50:43 UTC (rev 20241)
@@ -39,8 +39,6 @@
     *) Should integrate test subdir better ... need to propagate CPU
 	CFLAGS/LDFLAGS to the build/link for target binaries so that when we have
 	a multilib toolchain, the proper ABI is selected.
-    *) LD/LDFLAGS handling is broken ... stop invoking the linker directly and
-	have everything go through the compiler driver
 
 
 TODO list for the uClibc 1.0.0 release:

Modified: trunk/uClibc/ldso/ldso/Makefile.in
===================================================================
--- trunk/uClibc/ldso/ldso/Makefile.in	2007-10-13 14:41:46 UTC (rev 20240)
+++ trunk/uClibc/ldso/ldso/Makefile.in	2007-10-13 14:50:43 UTC (rev 20241)
@@ -20,9 +20,9 @@
 ifneq ($(SUPPORT_LD_DEBUG),y)
 LDFLAGS-$(UCLIBC_LDSO_NAME).so := $(LDFLAGS)
 else
-LDFLAGS-$(UCLIBC_LDSO_NAME).so := $(LDFLAGS_NOSTRIP) -z defs
+LDFLAGS-$(UCLIBC_LDSO_NAME).so := $(LDFLAGS_NOSTRIP) -Wl,-z,defs
 endif
-LDFLAGS-$(UCLIBC_LDSO_NAME).so += -e _start -z now -Bsymbolic --export-dynamic --sort-common --discard-locals --discard-all --no-undefined
+LDFLAGS-$(UCLIBC_LDSO_NAME).so += -Wl,-e,_start -Wl,-z,now -Wl,-Bsymbolic -Wl,--export-dynamic -Wl,--sort-common -Wl,--discard-locals -Wl,--discard-all -Wl,--no-undefined
 
 ldso_FULL_NAME := $(UCLIBC_LDSO_NAME)-$(VERSION).so
 

Modified: trunk/uClibc/ldso/libdl/Makefile.in
===================================================================
--- trunk/uClibc/ldso/libdl/Makefile.in	2007-10-13 14:41:46 UTC (rev 20240)
+++ trunk/uClibc/ldso/libdl/Makefile.in	2007-10-13 14:50:43 UTC (rev 20241)
@@ -17,7 +17,7 @@
 
 CFLAGS-libdl.c := -DLDSO_ELFINTERP=\"$(TARGET_ARCH)/elfinterp.c\"
 
-LDFLAGS-libdl.so := $(LDFLAGS) -fini dl_cleanup
+LDFLAGS-libdl.so := $(LDFLAGS) -Wl,-fini,dl_cleanup
 
 LIBS-libdl.so := $(LIBS) $(ldso)
 

Modified: trunk/uClibc/libc/Makefile.in
===================================================================
--- trunk/uClibc/libc/Makefile.in	2007-10-13 14:41:46 UTC (rev 20240)
+++ trunk/uClibc/libc/Makefile.in	2007-10-13 14:50:43 UTC (rev 20241)
@@ -12,10 +12,10 @@
 # libc, and if so, include it when linking.
 VERSION_SCRIPT := $(wildcard $(libc_DIR)/sysdeps/linux/$(TARGET_ARCH)/libc.map)
 ifneq ($(VERSION_SCRIPT),)
-VERSION_SCRIPT := --version-script $(VERSION_SCRIPT)
+VERSION_SCRIPT := -Wl,--version-script,$(VERSION_SCRIPT)
 endif
 
-LDFLAGS-libc.so := $(LDFLAGS) $(VERSION_SCRIPT) -init __uClibc_init
+LDFLAGS-libc.so := $(LDFLAGS) $(VERSION_SCRIPT) -Wl,-init,__uClibc_init
 
 LIBS-libc.so := $(interp) $(ldso) $(top_builddir)lib/$(NONSHARED_LIBNAME)
 

Modified: trunk/uClibc/libpthread/linuxthreads/Makefile.in
===================================================================
--- trunk/uClibc/libpthread/linuxthreads/Makefile.in	2007-10-13 14:41:46 UTC (rev 20240)
+++ trunk/uClibc/libpthread/linuxthreads/Makefile.in	2007-10-13 14:50:43 UTC (rev 20241)
@@ -19,7 +19,7 @@
 #CFLAGS:=$(CFLAGS:-O0=-O1)
 
 ifeq ($(PTHREADS_DEBUG_SUPPORT),y)
-LDFLAGS-libpthread.so := $(LDFLAGS_NOSTRIP) -z defs
+LDFLAGS-libpthread.so := $(LDFLAGS_NOSTRIP) -Wl,-z,defs
 else
 LDFLAGS-libpthread.so := $(LDFLAGS)
 endif

Modified: trunk/uClibc/libpthread/linuxthreads.old/Makefile.in
===================================================================
--- trunk/uClibc/libpthread/linuxthreads.old/Makefile.in	2007-10-13 14:41:46 UTC (rev 20240)
+++ trunk/uClibc/libpthread/linuxthreads.old/Makefile.in	2007-10-13 14:50:43 UTC (rev 20241)
@@ -12,7 +12,7 @@
 CFLAGS-libpthread/linuxthreads.old/sysdeps/$(TARGET_ARCH)/ := $(CFLAGS-linuxthreads.old)
 
 ifeq ($(PTHREADS_DEBUG_SUPPORT),y)
-LDFLAGS-libpthread.so := $(LDFLAGS_NOSTRIP) -z defs
+LDFLAGS-libpthread.so := $(LDFLAGS_NOSTRIP) -Wl,-z,defs
 else
 LDFLAGS-libpthread.so := $(LDFLAGS)
 endif

Modified: trunk/uClibc/libpthread/linuxthreads.old_db/Makefile.in
===================================================================
--- trunk/uClibc/libpthread/linuxthreads.old_db/Makefile.in	2007-10-13 14:41:46 UTC (rev 20240)
+++ trunk/uClibc/libpthread/linuxthreads.old_db/Makefile.in	2007-10-13 14:50:43 UTC (rev 20241)
@@ -8,9 +8,9 @@
 # Get the thread include dependencies and shared object name
 CFLAGS-linuxthreads.old_db := -DNOT_IN_libc -DLIBPTHREAD_SO="\"libpthread.so.$(MAJOR_VERSION)\""
 
-LDFLAGS-libthread_db.so := $(LDFLAGS_NOSTRIP) $(call check_ld,--warn-unresolved-symbols)
+LDFLAGS-libthread_db.so := $(LDFLAGS_NOSTRIP) $(if $(call check_ld,--warn-unresolved-symbols),-Wl$(comma)--warn-unresolved-symbols)
 ifeq ($(DOSTRIP),y)
-LDFLAGS-libthread_db.so += -s
+LDFLAGS-libthread_db.so += -Wl,-s
 endif
 
 LIBS-libthread_db.so := $(LIBS)

Modified: trunk/uClibc/libpthread/linuxthreads_db/Makefile.in
===================================================================
--- trunk/uClibc/libpthread/linuxthreads_db/Makefile.in	2007-10-13 14:41:46 UTC (rev 20240)
+++ trunk/uClibc/libpthread/linuxthreads_db/Makefile.in	2007-10-13 14:50:43 UTC (rev 20241)
@@ -8,9 +8,9 @@
 # Get the thread include dependencies and shared object name
 CFLAGS-linuxthreads_db := -DNOT_IN_libc -DLIBPTHREAD_SO="\"libpthread.so.$(MAJOR_VERSION)\""
 
-LDFLAGS-libthread_db.so := $(LDFLAGS_NOSTRIP) $(call check_ld,--warn-unresolved-symbols)
+LDFLAGS-libthread_db.so := $(LDFLAGS_NOSTRIP) $(if $(call check_ld,--warn-unresolved-symbols),-Wl$(comma)--warn-unresolved-symbols)
 ifeq ($(DOSTRIP),y)
-LDFLAGS-libthread_db.so += -s
+LDFLAGS-libthread_db.so += -Wl,-s
 endif
 
 LIBS-libthread_db.so := $(LIBS)




More information about the uClibc-cvs mailing list