This is the mail archive of the
libc-alpha@sourceware.org
mailing list for the glibc project.
Re: PING: [PATCH] Check linker support for INSERT in linker script
- From: "H.J. Lu" <hjl dot tools at gmail dot com>
- To: GNU C Library <libc-alpha at sourceware dot org>
- Date: Fri, 4 Aug 2017 06:33:28 -0700
- Subject: Re: PING: [PATCH] Check linker support for INSERT in linker script
- Authentication-results: sourceware.org; auth=none
- References: <CAMe9rOqgGMy3n6Wq=JOrWzaFHvzNBziCbCJt9eho51k8941kzw@mail.gmail.com> <CAMe9rOosVikqiOAuNVAoLjBuntF+pcs1VaaMUE4q=KQ3NFACuw@mail.gmail.com>
On Wed, Aug 2, 2017 at 7:47 AM, H.J. Lu <hjl.tools@gmail.com> wrote:
> On Wed, Jun 28, 2017 at 11:15 AM, H.J. Lu <hjl.tools@gmail.com> wrote:
>> On Mon, Jun 26, 2017 at 12:54 PM, H.J. Lu <hongjiu.lu@intel.com> wrote:
>>> Since gold doesn't support INSERT in linker script:
>>>
>>> https://sourceware.org/bugzilla/show_bug.cgi?id=21676
>>>
>>> tst-split-dynreloc fails to link with gold. Check if linker supports
>>> INSERT in linker script before using it.
>>>
>>> Any comments?
>>
>> PING.
>
> Any objections?
>
>>> H.J.
>>> ---
>>> * config.make.in (have-insert): New.
>>> * configure.ac (libc_cv_insert): New. Set to yes if linker
>>> supports INSERT in linker script.
>>> (AC_SUBST(libc_cv_insert): New.
>>> * configure: Regenerated.
>>> * sysdeps/x86_64/Makefile (tests): Add tst-split-dynreloc only
>>> if $(have-insert) == yes.
>>> ---
>>> config.make.in | 1 +
>>> configure | 33 +++++++++++++++++++++++++++++++++
>>> configure.ac | 21 +++++++++++++++++++++
>>> sysdeps/x86_64/Makefile | 2 ++
>>> 4 files changed, 57 insertions(+)
>>>
>>> diff --git a/config.make.in b/config.make.in
>>> index dadabf9..c7edfc1 100644
>>> --- a/config.make.in
>>> +++ b/config.make.in
>>> @@ -54,6 +54,7 @@ enable-werror = @enable_werror@
>>> have-z-combreloc = @libc_cv_z_combreloc@
>>> have-z-execstack = @libc_cv_z_execstack@
>>> have-protected-data = @libc_cv_protected_data@
>>> +have-insert = @libc_cv_insert@
>>> have-glob-dat-reloc = @libc_cv_has_glob_dat@
>>> with-fp = @with_fp@
>>> enable-timezone-tools = @enable_timezone_tools@
>>> diff --git a/configure b/configure
>>> index b55fc92..a9ed3b3 100755
>>> --- a/configure
>>> +++ b/configure
>>> @@ -629,6 +629,7 @@ libc_cv_z_execstack
>>> libc_cv_z_combreloc
>>> ASFLAGS_config
>>> libc_cv_cc_with_libunwind
>>> +libc_cv_insert
>>> libc_cv_protected_data
>>> BISON
>>> INSTALL_INFO
>>> @@ -5703,6 +5704,38 @@ fi
>>> $as_echo "$libc_cv_protected_data" >&6; }
>>>
>>>
>>> +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking linker support for INSERT in linker script" >&5
>>> +$as_echo_n "checking linker support for INSERT in linker script... " >&6; }
>>> +if ${libc_cv_insert+:} false; then :
>>> + $as_echo_n "(cached) " >&6
>>> +else
>>> + cat > conftest.c <<EOF
>>> + const int __attribute__ ((section(".bar"))) bar = 0x12345678;
>>> + int test (void) { return bar; }
>>> +EOF
>>> + cat > conftest.t <<EOF
>>> + SECTIONS
>>> + {
>>> + .bar : { *(.bar) }
>>> + }
>>> + INSERT AFTER .rela.dyn;
>>> +EOF
>>> + libc_cv_insert=no
>>> + if { ac_try='${CC-cc} -nostdlib -nostartfiles $no_ssp -fPIC -shared conftest.c -Wl,-T,conftest.t -o conftest.so'
>>> + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5
>>> + (eval $ac_try) 2>&5
>>> + ac_status=$?
>>> + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
>>> + test $ac_status = 0; }; }; then
>>> + libc_cv_insert=yes
>>> + fi
>>> + rm -f conftest.*
>>> +
>>> +fi
>>> +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_insert" >&5
>>> +$as_echo "$libc_cv_insert" >&6; }
>>> +
>>> +
>>> { $as_echo "$as_me:${as_lineno-$LINENO}: checking for broken __attribute__((alias()))" >&5
>>> $as_echo_n "checking for broken __attribute__((alias()))... " >&6; }
>>> if ${libc_cv_broken_alias_attribute+:} false; then :
>>> diff --git a/configure.ac b/configure.ac
>>> index 5f62ecb..807961f 100644
>>> --- a/configure.ac
>>> +++ b/configure.ac
>>> @@ -1291,6 +1291,27 @@ EOF
>>> ])
>>> AC_SUBST(libc_cv_protected_data)
>>>
>>> +AC_CACHE_CHECK(linker support for INSERT in linker script,
>>> + libc_cv_insert,
>>> + [cat > conftest.c <<EOF
>>> + const int __attribute__ ((section(".bar"))) bar = 0x12345678;
>>> + int test (void) { return bar; }
>>> +EOF
>>> + cat > conftest.t <<EOF
>>> + SECTIONS
>>> + {
>>> + .bar : { *(.bar) }
>>> + }
>>> + INSERT AFTER .rela.dyn;
>>> +EOF
>>> + libc_cv_insert=no
>>> + if AC_TRY_COMMAND([${CC-cc} -nostdlib -nostartfiles $no_ssp -fPIC -shared conftest.c -Wl,-T,conftest.t -o conftest.so]); then
>>> + libc_cv_insert=yes
>>> + fi
>>> + rm -f conftest.*
>>> + ])
>>> +AC_SUBST(libc_cv_insert)
>>> +
>>> AC_CACHE_CHECK(for broken __attribute__((alias())),
>>> libc_cv_broken_alias_attribute,
>>> [cat > conftest.c <<EOF
>>> diff --git a/sysdeps/x86_64/Makefile b/sysdeps/x86_64/Makefile
>>> index 5075c91..948faa9 100644
>>> --- a/sysdeps/x86_64/Makefile
>>> +++ b/sysdeps/x86_64/Makefile
>>> @@ -59,9 +59,11 @@ test-extras += tst-audit4-aux tst-audit10-aux \
>>> extra-test-objs += tst-audit4-aux.o tst-audit10-aux.o \
>>> tst-avx-aux.o tst-avx512-aux.o
>>>
>>> +ifeq ($(have-insert),yes)
>>> tests += tst-split-dynreloc
>>> LDFLAGS-tst-split-dynreloc = -Wl,-T,$(..)sysdeps/x86_64/tst-split-dynreloc.lds
>>> tst-split-dynreloc-ENV = LD_BIND_NOW=1
>>> +endif
>>>
>>> modules-names += tst-auditmod3a tst-auditmod3b \
>>> tst-auditmod4a tst-auditmod4b \
>>> --
>>> 2.9.4
>>>
>>
>>
>>
>> --
>> H.J.
>
>
I am checking it in today.
--
H.J.