]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
Use newly built crt*.o files to build shared objects [BZ #22362]
authorH.J. Lu <hjl.tools@gmail.com>
Mon, 6 Nov 2017 16:29:48 +0000 (08:29 -0800)
committerH.J. Lu <hjl.tools@gmail.com>
Mon, 6 Nov 2017 16:29:57 +0000 (08:29 -0800)
When multi-lib GCC is used to build glibc, the search order of GCC driver
for crt*.o is -B*/`gcc -print-multi-directory`, the installed diretory,
-B*/.  This patch adds multi-lib support to csu/Makefile so that
-B/glibc-build-directory/csu/ will pick up the newly built crt*.o.

Tested on x86-64 for i686 and x32.

[BZ #22362]
* Makerules (make-link-multidir): New.
* config.make.in (multidir): New.
* configure.ac (libc_cv_multidir): New.  AC_SUBST.
* configure: Regenerated.
* csu/Makefile [$(multidir) != .](multilib-extra-objs): New.
[$(multidir) != .](extra-objs): Add $(multilib-extra-objs).
[$(multidir) != .]($(addprefix $(objpfx)$(multidir)/, $(install-lib))):
New target.

ChangeLog
Makerules
config.make.in
configure
configure.ac
csu/Makefile

index acd573cfc3623baccb3efee054f7afb4be9fc6fc..57c99d65620aa1f6bf94d0b5c829cd522ce33528 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,15 @@
+2017-11-06  H.J. Lu  <hongjiu.lu@intel.com>
+
+       [BZ #22362]
+       * Makerules (make-link-multidir): New.
+       * config.make.in (multidir): New.
+       * configure.ac (libc_cv_multidir): New.  AC_SUBST.
+       * configure: Regenerated.
+       * csu/Makefile [$(multidir) != .](multilib-extra-objs): New.
+       [$(multidir) != .](extra-objs): Add $(multilib-extra-objs).
+       [$(multidir) != .]($(addprefix $(objpfx)$(multidir)/, $(install-lib))):
+       New target.
+
 2017-11-06  Joseph Myers  <joseph@codesourcery.com>
 
        [BZ #22402]
index bbfbefe33f79d6c3dcfd96af88ce4d0f082a3365..522de25cfddbfd47eb42b10d38fa14f8959fd81f 100644 (file)
--- a/Makerules
+++ b/Makerules
@@ -1079,6 +1079,11 @@ rm -f $@.new
 $(SHELL) $(..)scripts/rellns-sh $< $@.new
 mv -f $@.new $@
 endef
+define make-link-multidir
+$(patsubst %/,cd %,$(objpfx)); \
+  $(LN_S) . $(multidir) 2> /dev/null; \
+  test -L $(multidir)
+endef
 else
 # If we have no symbolic links don't bother with rellns-sh.
 define make-link
@@ -1086,6 +1091,10 @@ rm -f $@.new
 $(LN_S) $< $@.new
 mv -f $@.new $@
 endef
+define make-link-multidir
+$(make-target-directory)
+ln -f $(objpfx)/$(@F) $@
+endef
 endif
 
 ifeq (yes,$(build-shared))
index fd2dbc91d11a4245c3d4428c2ea2352af0b2aea3..bd84a5747d226d2d9ed581ad0ef29c2a0f6f30a5 100644 (file)
@@ -21,6 +21,7 @@ includedir = @includedir@
 datarootdir = @datarootdir@
 localstatedir = @libc_cv_localstatedir@
 localedir = @localedir@
+multidir= @libc_cv_multidir@
 
 # Should we use and build ldconfig?
 use-ldconfig = @use_ldconfig@
index 6010977c58e31187f126152b85402a7db94bc8a2..c8697d9b1a2223ee7b780e832542231dd62f8585 100755 (executable)
--- a/configure
+++ b/configure
@@ -594,6 +594,7 @@ mach_interface_list
 DEFINES
 static_nss
 profile
+libc_cv_multidir
 libc_cv_pie_default
 libc_cv_pic_default
 shared
@@ -6698,6 +6699,11 @@ fi
 $as_echo "$libc_cv_pie_default" >&6; }
 
 
+# Set the `multidir' variable by grabbing the variable from the compiler.
+# We do it once and save the result in a generated makefile.
+libc_cv_multidir=`${CC-cc} $CFLAGS $CPPFLAGS -print-multi-directory`
+
+
 
 
 
index 148f7d1682c4f76b3e51ec435a2ff1a1a168f8c1..9f25c9fa0f5964f021943fdd9e901630d54d301a 100644 (file)
@@ -1783,6 +1783,11 @@ fi
 rm -f conftest.*])
 AC_SUBST(libc_cv_pie_default)
 
+# Set the `multidir' variable by grabbing the variable from the compiler.
+# We do it once and save the result in a generated makefile.
+libc_cv_multidir=`${CC-cc} $CFLAGS $CPPFLAGS -print-multi-directory`
+AC_SUBST(libc_cv_multidir)
+
 AC_SUBST(profile)
 AC_SUBST(static_nss)
 
index fd668a5d0092f7923e7aaa70883ea25fa2e99212..e42a32b3eb31ed6b2176df5eb216769f6bf68090 100644 (file)
@@ -77,6 +77,11 @@ crtstuff = crti crtn
 install-lib += $(crtstuff:=.o)
 extra-objs += $(crtstuff:=.o)
 
+ifneq ($(multidir),.)
+multilib-extra-objs = $(addprefix $(multidir)/, $(install-lib))
+extra-objs += $(multilib-extra-objs)
+endif
+
 extra-objs += abi-note.o init.o
 asm-CPPFLAGS += -I$(objpfx).
 
@@ -147,3 +152,8 @@ $(objpfx)abi-tag.h: $(..)abi-tags
        done
        if test -r $@.new; then mv -f $@.new $@; \
        else echo >&2 'This configuration not matched in $<'; exit 1; fi
+
+ifneq ($(multidir),.)
+$(addprefix $(objpfx)$(multidir)/, $(install-lib)): $(addprefix $(objpfx), $(install-lib))
+       $(make-link-multidir)
+endif