diff options
author | H.J. Lu <hjl.tools@gmail.com> | 2017-06-26 12:46:08 -0700 |
---|---|---|
committer | H.J. Lu <hjl.tools@gmail.com> | 2017-06-28 11:13:24 -0700 |
commit | 0bece22943b76e739396f41c3929c5ff426839c7 (patch) | |
tree | aaeefee5c3f21e5cd25e9c9de2001eaac60c0b57 | |
parent | 82c62e711080e9cb81d5cde1065b4f88e736830d (diff) | |
download | glibc-hjl/pr14995.zip glibc-hjl/pr14995.tar.gz glibc-hjl/pr14995.tar.bz2 |
Check linker support for INSERT in linker scripthjl/pr14995
Since gold doesn't support INSERT in linker script:
https://sourceware.org/bugzilla/show_bug.cgi?id=15373
tst-split-dynreloc fails to link with gold. Check if linker supports
INSERT in linker script before using it.
* 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.
-rw-r--r-- | config.make.in | 1 | ||||
-rwxr-xr-x | configure | 33 | ||||
-rw-r--r-- | configure.ac | 21 | ||||
-rw-r--r-- | sysdeps/x86_64/Makefile | 2 |
4 files changed, 57 insertions, 0 deletions
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@ @@ -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 7e03019..245f838 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 \ |