Use newly built crt*.o files to build shared objects [BZ #22362]
Commit Message
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.
OK for master?
H.J.
---
[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.
---
config.make.in | 1 +
configure | 6 ++++++
configure.ac | 5 +++++
csu/Makefile | 11 +++++++++++
nptl/Makefile | 10 ----------
5 files changed, 23 insertions(+), 10 deletions(-)
Comments
On Okt 28 2017, "H.J. Lu" <hjl.tools@gmail.com> wrote:
> diff --git a/csu/Makefile b/csu/Makefile
> index fd668a5d00..b9803be0ff 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
Only a symlink . -> $(multidir) is needed.
> diff --git a/nptl/Makefile b/nptl/Makefile
> index d819349f43..314cbda46a 100644
> --- a/nptl/Makefile
> +++ b/nptl/Makefile
Same here.
Andreas.
@@ -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`
+
+
@@ -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)
@@ -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
@@ -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)))