[PATCH 1/6] Add Makefile support for DSBT ELF.

Bernd Schmidt bernds_cb1 at t-online.de
Wed Feb 23 19:05:47 UTC 2011


This adds support for a new binary format, DSBT ELF, to the Makefiles.
Every shared library is assigned a DSBT index, and the link.so macro is
adjusted to ensure the correct linker argument is passed.

Configuration and ldso support will follow in separate commits.

Signed-off-by: Bernd Schmidt <bernds at codesourcery.com>
---
 Makerules                               |   15 +++++++++++++++
 ldso/ldso/Makefile.in                   |    1 +
 ldso/libdl/Makefile.in                  |    1 +
 libc/Makefile.in                        |    1 +
 libcrypt/Makefile.in                    |    1 +
 libm/Makefile.in                        |    1 +
 libnsl/Makefile.in                      |    1 +
 libpthread/linuxthreads.old/Makefile.in |    1 +
 libresolv/Makefile.in                   |    1 +
 librt/Makefile.in                       |    1 +
 libutil/Makefile.in                     |    1 +
 11 files changed, 25 insertions(+), 0 deletions(-)

diff --git a/Makerules b/Makerules
index 84eeaea..e63fef4 100644
--- a/Makerules
+++ b/Makerules
@@ -294,16 +294,31 @@ endef
 cmd_hcompile.u = $(HOSTCC) $(filter-out $(PHONY),$^) $(DEPS-$(notdir $@)) -o $@ $(BUILD_LDFLAGS) $(BUILD_LDFLAGS-$(notdir $(^D))) $(BUILD_LDFLAGS-$(notdir $@)) $(BUILD_CFLAGS) $(BUILD_CFLAGS-$(notdir $(^D))) $(BUILD_CFLAGS-$(notdir $@))
 cmd_hcompile.o = $(HOSTCC) $(filter-out $(PHONY),$<) $(DEPS-$(notdir $@)) -c -o $@ $(BUILD_CFLAGS) $(BUILD_CFLAGS-$(notdir $(^D))) $(BUILD_CFLAGS-$(notdir $@))
 
+ifeq ($(UCLIBC_FORMAT_DSBT_ELF),y)
 define link.so
 	$(Q)$(RM) $@ $@.$(2) $(dir $@)$(1)
 	@$(disp_ld)
 	$(Q)$(CC) $(LDFLAGS-$(notdir $@)) -Wl,-soname=$(notdir $@).$(2) \
 		$(NOSTDLIB_CFLAGS) -o $(dir $@)$(1) $(START_FILE-$(notdir $@)) \
 		-Wl,--whole-archive $(firstword $^) -Wl,--no-whole-archive \
+		$(LDFLAGS_DSBTINDEX-$(notdir $@)) \
 		$(LIBS-$(notdir $@)) $(LIBGCC) $(END_FILE-$(notdir $@))
 	$(Q)$(LN) -sf $(1) $@.$(2)
 	$(Q)$(LN) -sf $(1) $@
 endef
+else
+define link.so
+	$(Q)$(INSTALL) -d $(dir $@)
+	$(Q)$(RM) $@ $@.$(2) $(dir $@)$(1)
+	@$(disp_ld)
+	$(Q)$(CC) $(LDFLAGS-$(notdir $@)) -Wl,-soname=$(notdir $@).$(2) \
+		$(NOSTDLIB_CFLAGS) -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) $@
+endef
+endif
 
 # CRT files needed by link-flat.so
 LINK_FLAT_CRTS := $(top_builddir)lib/Scrt1.o $(top_builddir)lib/crti.o \
diff --git a/ldso/ldso/Makefile.in b/ldso/ldso/Makefile.in
index e71ae15..0c5e1e4 100644
--- a/ldso/ldso/Makefile.in
+++ b/ldso/ldso/Makefile.in
@@ -30,6 +30,7 @@ CFLAGS-ldso/ldso/$(TARGET_ARCH)/ := $(CFLAGS-ldso)
 
 CFLAGS-ldso.c := -DLDSO_ELFINTERP=\"$(TARGET_ARCH)/elfinterp.c\" $(CFLAGS-ldso)
 
+LDFLAGS_DSBTINDEX-$(UCLIBC_LDSO_NAME).so := -Wl,--dsbt-index=1
 ifneq ($(SUPPORT_LD_DEBUG),y)
 LDFLAGS-$(UCLIBC_LDSO_NAME).so := $(LDFLAGS)
 else
diff --git a/ldso/libdl/Makefile.in b/ldso/libdl/Makefile.in
index 39db7a8..21edce9 100644
--- a/ldso/libdl/Makefile.in
+++ b/ldso/libdl/Makefile.in
@@ -19,6 +19,7 @@ endif
 
 CFLAGS-libdl.c := -DLDSO_ELFINTERP=\"$(TARGET_ARCH)/elfinterp.c\"
 
+LDFLAGS_DSBTINDEX-libdl.so := -Wl,--dsbt-index=3
 LDFLAGS-libdl.so := $(LDFLAGS) -Wl,-fini,dl_cleanup
 
 LIBS-libdl.so := $(LIBS) $(ldso)
diff --git a/libc/Makefile.in b/libc/Makefile.in
index dd666ac..8f78bf6 100644
--- a/libc/Makefile.in
+++ b/libc/Makefile.in
@@ -15,6 +15,7 @@ ifneq ($(VERSION_SCRIPT),)
 VERSION_SCRIPT := -Wl,--version-script,$(VERSION_SCRIPT)
 endif
 
+LDFLAGS_DSBTINDEX-libc.so := -Wl,--dsbt-index=2
 LDFLAGS-libc.so := $(LDFLAGS) $(VERSION_SCRIPT) -Wl,-init,$(SYMBOL_PREFIX)__uClibc_init
 ifeq ($(UCLIBC_HAS_STDIO_FUTEXES),y)
 CFLAGS += -D__USE_STDIO_FUTEXES__
diff --git a/libcrypt/Makefile.in b/libcrypt/Makefile.in
index 3cbf9d0..b1a53be 100644
--- a/libcrypt/Makefile.in
+++ b/libcrypt/Makefile.in
@@ -9,6 +9,7 @@ subdirs += libcrypt
 
 CFLAGS-libcrypt := -DNOT_IN_libc -DIS_IN_libcrypt $(SSP_ALL_CFLAGS)
 
+LDFLAGS_DSBTINDEX-libcrypt.so := -Wl,--dsbt-index=4
 LDFLAGS-libcrypt.so := $(LDFLAGS)
 
 LIBS-libcrypt.so := $(LIBS)
diff --git a/libm/Makefile.in b/libm/Makefile.in
index 384365c..927c073 100644
--- a/libm/Makefile.in
+++ b/libm/Makefile.in
@@ -25,6 +25,7 @@ subdirs += libm
 CFLAGS-libm := -DNOT_IN_libc -DIS_IN_libm $(SSP_ALL_CFLAGS)
 CFLAGS-libm += -D_IEEE_LIBM
 
+LDFLAGS_DSBTINDEX-libm.so := -Wl,--dsbt-index=5
 LDFLAGS-libm.so := $(LDFLAGS)
 
 LIBS-libm.so := $(LIBS)
diff --git a/libnsl/Makefile.in b/libnsl/Makefile.in
index 3aa05a0..84bc4e8 100644
--- a/libnsl/Makefile.in
+++ b/libnsl/Makefile.in
@@ -9,6 +9,7 @@ subdirs += libnsl
 
 CFLAGS-libnsl := -DNOT_IN_libc -DIS_IN_libnsl $(SSP_ALL_CFLAGS)
 
+LDFLAGS_DSBTINDEX-libnsl.so := -Wl,--dsbt-index=6
 LDFLAGS-libnsl.so := $(LDFLAGS) $(call link.asneeded,-lc)
 
 LIBS-libnsl.so := $(LIBS)
diff --git a/libpthread/linuxthreads.old/Makefile.in b/libpthread/linuxthreads.old/Makefile.in
index d2e29c7..4cff455 100644
--- a/libpthread/linuxthreads.old/Makefile.in
+++ b/libpthread/linuxthreads.old/Makefile.in
@@ -18,6 +18,7 @@ LDFLAGS-libpthread.so := $(LDFLAGS_NOSTRIP) -Wl,-z,defs
 else
 LDFLAGS-libpthread.so := $(LDFLAGS)
 endif
+LDFLAGS_DSBTINDEX-libpthread.so := -Wl,--dsbt-index=10
 
 LIBS-libpthread.so := $(LIBS) $(ldso)
 
diff --git a/libresolv/Makefile.in b/libresolv/Makefile.in
index fb71b42..4a7d77e 100644
--- a/libresolv/Makefile.in
+++ b/libresolv/Makefile.in
@@ -9,6 +9,7 @@ subdirs += libresolv
 
 CFLAGS-libresolv := -DNOT_IN_libc -DIS_IN_libresolv $(SSP_ALL_CFLAGS)
 
+LDFLAGS_DSBTINDEX-libresolv.so := -Wl,--dsbt-index=7
 LDFLAGS-libresolv.so := $(LDFLAGS) $(call link.asneeded,-lc)
 
 LIBS-libresolv.so := $(LIBS)
diff --git a/librt/Makefile.in b/librt/Makefile.in
index 6eb508c..9d9d142 100644
--- a/librt/Makefile.in
+++ b/librt/Makefile.in
@@ -9,6 +9,7 @@ subdirs += librt
 
 CFLAGS-librt := -DNOT_IN_libc -DIS_IN_librt $(SSP_ALL_CFLAGS)
 
+LDFLAGS_DSBTINDEX-librt.so := -Wl,--dsbt-index=9
 LDFLAGS-librt.so := $(LDFLAGS)
 LIBS-librt.so := $(LIBS)
 ifeq ($(UCLIBC_HAS_THREADS_NATIVE),y)
diff --git a/libutil/Makefile.in b/libutil/Makefile.in
index 057d02d..253b6fb 100644
--- a/libutil/Makefile.in
+++ b/libutil/Makefile.in
@@ -9,6 +9,7 @@ subdirs += libutil
 
 CFLAGS-libutil := -DNOT_IN_libc -DIS_IN_libutil $(SSP_ALL_CFLAGS)
 
+LDFLAGS_DSBTINDEX-libutil.so := -Wl,--dsbt-index=8
 LDFLAGS-libutil.so := $(LDFLAGS)
 
 LIBS-libutil.so := $(LIBS)
-- 
1.7.3.4



More information about the uClibc mailing list