[PATCH] buildsys: clean up libubacktrace linker script handling

Kevin Cernekee cernekee at gmail.com
Fri Jun 15 17:47:08 UTC 2012


FWIW here is what I wound up using locally to work around the issue.  It
mostly reverts back to the original logic (write out lib/libc.so sans
libubacktrace reference in libc/Makefile.in, then hack the final
installed version to reference libubacktrace.so).  But it does respect
the HARDWIRED_ABSPATH setting now, and introduces slightly less cruft in
Makefile.in.

-- 8< --

From: Kevin Cernekee <cernekee at gmail.com>

Commit 01c125c3bd8f949f8e5711e09152859eecd1b004 (buildsys: clean up
libubacktrace linker script handling) caused a regression seen when
bootstrapping a new compiler: the libc.so linker script referenced
libubacktrace.so.0, which had not yet been installed.  Therefore, it
is necessary to partially revert the change, and go back to the old
method of appending $(UBACKTRACE_ASNEEDED) to the installed libc.so
script instead of the copy under lib/ in the source tree.

Signed-off-by: Kevin Cernekee <cernekee at gmail.com>
---
 Makefile.in      |    2 +-
 Rules.mak        |   11 +++++++++--
 libc/Makefile.in |    1 -
 3 files changed, 10 insertions(+), 4 deletions(-)

diff --git a/Makefile.in b/Makefile.in
index 9d18cfe..612cc9b 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -345,13 +345,13 @@ ifeq ($(HARDWIRED_ABSPATH),y)
 		$(SED) -e 's:$(NONSHARED_LIBNAME):$(DEVEL_PREFIX)$(MULTILIB_DIR)/$(NONSHARED_LIBNAME):' \
 		    -e 's:$(SHARED_LIBNAME):$(RUNTIME_PREFIX)$(MULTILIB_DIR)/$(SHARED_LIBNAME):' \
 		    -e 's:$(UCLIBC_LDSO):$(RUNTIME_PREFIX)$(MULTILIB_DIR)/$(UCLIBC_LDSO):' \
-		    -e 's:$(UBACKTRACE_DSO):$(RUNTIME_PREFIX)$(MULTILIB_DIR)/$(UBACKTRACE_DSO):' \
 		    $(top_builddir)lib/libc.so > $(PREFIX)$(DEVEL_PREFIX)$(MULTILIB_DIR)/libc.so; \
 		$(SED) -i -e 's://:/:g' $(PREFIX)$(DEVEL_PREFIX)$(MULTILIB_DIR)/libc.so; \
 	fi
 else
 	-$(INSTALL) -m 755 $(top_builddir)lib/libc.so $(PREFIX)$(DEVEL_PREFIX)$(MULTILIB_DIR)/
 endif
+	echo "$(UBACKTRACE_ASNEEDED)" >> $(PREFIX)$(DEVEL_PREFIX)$(MULTILIB_DIR)/libc.so
 ifeq ($(UCLIBC_HAS_THREADS),y)
 ifneq ($(LINUXTHREADS_OLD),y)
 ifeq ($(HARDWIRED_ABSPATH),y)
diff --git a/Rules.mak b/Rules.mak
index 320b952..58968ae 100644
--- a/Rules.mak
+++ b/Rules.mak
@@ -578,9 +578,16 @@ export ASNEEDED:=$(shell $(LD) --help 2>/dev/null | grep -q -- --as-needed && ec
 
 # Only used in installed libc.so linker script
 ifeq ($(UCLIBC_HAS_BACKTRACE),y)
+
+ifeq ($(HARDWIRED_ABSPATH),y)
+UBACKTRACE_FULL_NAME := $(subst //,/,$(RUNTIME_PREFIX)$(MULTILIB_DIR)/$(UBACKTRACE_DSO))
+else
+UBACKTRACE_FULL_NAME := $(UBACKTRACE_DSO)
+endif
+
 export UBACKTRACE_ASNEEDED:=$(shell $(LD) --help 2>/dev/null | grep -q -- --as-needed && \
-	echo "GROUP ( AS_NEEDED ( $(UBACKTRACE_DSO) ) )" || \
-	echo "GROUP ( $(UBACKTRACE_DSO) )")
+	echo "GROUP ( AS_NEEDED ( $(UBACKTRACE_FULL_NAME) ) )" || \
+	echo "GROUP ( $(UBACKTRACE_FULL_NAME) )")
 else
 export UBACKTRACE_ASNEEDED:=""
 endif
diff --git a/libc/Makefile.in b/libc/Makefile.in
index d8ea7bd..3b6a17b 100644
--- a/libc/Makefile.in
+++ b/libc/Makefile.in
@@ -74,7 +74,6 @@ ifeq ($(COMPAT_ATEXIT),y)
 else
 	$(Q)echo "GROUP ( $(SHARED_LIBNAME) $(NONSHARED_LIBNAME) $(ASNEEDED) )" >> $@.tmp
 endif
-	$(Q)echo "$(UBACKTRACE_ASNEEDED)" >> $@.tmp
 	$(Q)mv $@.tmp $@
 
 $(libc_OUT)/libc_so.a: $(libc-so-y) | $(top_builddir)lib/libc.a $(top_builddir)lib/$(NONSHARED_LIBNAME)
-- 
1.7.8.3



More information about the uClibc mailing list