diff options
author | H.J. Lu <hjl.tools@gmail.com> | 2017-10-28 17:41:16 -0700 |
---|---|---|
committer | H.J. Lu <hjl.tools@gmail.com> | 2017-10-28 19:05:09 -0700 |
commit | 340c6cf9bdf6734013f0c6b4e0d8f3a10fbd4ed0 (patch) | |
tree | e4b264ea6124739f36d850a06cacc5830de713c1 | |
parent | f301e5334065e93aace667fd4a87bce6fc1dbd13 (diff) | |
download | glibc-340c6cf9bdf6734013f0c6b4e0d8f3a10fbd4ed0.zip glibc-340c6cf9bdf6734013f0c6b4e0d8f3a10fbd4ed0.tar.gz glibc-340c6cf9bdf6734013f0c6b4e0d8f3a10fbd4ed0.tar.bz2 |
Use newly built crt*.o files to build shared objects [BZ #22362]hjl/pr22362/master
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 extends multi-lib support from nptl/Makefile 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]
* 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.
* nptl/Makefile: Don't include multidir.mk.
($(objpfx)multidir.mk): Removed.
-rw-r--r-- | config.make.in | 1 | ||||
-rwxr-xr-x | configure | 6 | ||||
-rw-r--r-- | configure.ac | 5 | ||||
-rw-r--r-- | csu/Makefile | 11 | ||||
-rw-r--r-- | nptl/Makefile | 10 |
5 files changed, 23 insertions, 10 deletions
diff --git a/config.make.in b/config.make.in index fd2dbc9..bd84a57 100644 --- a/config.make.in +++ b/config.make.in @@ -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@ @@ -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` + + diff --git a/configure.ac b/configure.ac index 148f7d1..9f25c9f 100644 --- a/configure.ac +++ b/configure.ac @@ -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) diff --git a/csu/Makefile b/csu/Makefile index fd668a5..b9803be 100644 --- a/csu/Makefile +++ b/csu/Makefile @@ -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,9 @@ $(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-target-directory) + ln -f $(objpfx)/$(@F) $@ +endif diff --git a/nptl/Makefile b/nptl/Makefile index d819349..314cbda 100644 --- a/nptl/Makefile +++ b/nptl/Makefile @@ -401,16 +401,6 @@ tests: $(test-modules) endif ifeq ($(build-shared),yes) - -# Set the `multidir' variable by grabbing the variable from the compiler. -# We do it once and save the result in a generated makefile. --include $(objpfx)multidir.mk -$(objpfx)multidir.mk: $(common-objpfx)config.make - $(make-target-directory) - dir=`$(CC) $(CFLAGS) $(CPPFLAGS) -print-multi-directory`; \ - echo "multidir := $$dir" > $@T - mv -f $@T $@ - crti-objs := crti.o crtn-objs := crtn.o ifneq (,$(patsubst .,,$(multidir))) |