Use newly built crt*.o files to build shared objects [BZ #22362]
Commit Message
On Sun, Oct 29, 2017 at 5:35 AM, Andreas Schwab <schwab@linux-m68k.org> wrote:
> 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.
Like this?
>> diff --git a/nptl/Makefile b/nptl/Makefile
>> index d819349f43..314cbda46a 100644
>> --- a/nptl/Makefile
>> +++ b/nptl/Makefile
>
> Same here.
If the updated patch is OK, I will submit a separate patch to convert
nptl/Makefile to symlink.
Thanks.
Comments
On Sun, Oct 29, 2017 at 9:21 AM, H.J. Lu <hjl.tools@gmail.com> wrote:
> On Sun, Oct 29, 2017 at 5:35 AM, Andreas Schwab <schwab@linux-m68k.org> wrote:
>> 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.
>
> Like this?
>
Any other comments or objections?
On Wed, Nov 1, 2017 at 7:43 AM, H.J. Lu <hjl.tools@gmail.com> wrote:
> On Sun, Oct 29, 2017 at 9:21 AM, H.J. Lu <hjl.tools@gmail.com> wrote:
>> On Sun, Oct 29, 2017 at 5:35 AM, Andreas Schwab <schwab@linux-m68k.org> wrote:
>>> 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.
>>
>> Like this?
>>
>
> Any other comments or objections?
>
I am checking it in.
From 3242db2138de7e0786ee3806f8bd016925d06099 Mon Sep 17 00:00:00 2001
From: "H.J. Lu" <hjl.tools@gmail.com>
Date: Sat, 28 Oct 2017 17:41:16 -0700
Subject: [PATCH] Use newly built crt*.o files to build shared objects [BZ
#22362]
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.
---
Makerules | 9 +++++++++
config.make.in | 1 +
configure | 6 ++++++
configure.ac | 5 +++++
csu/Makefile | 10 ++++++++++
5 files changed, 31 insertions(+)
@@ -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))
@@ -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,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
--
2.13.6