diff options
author | H.J. Lu <hjl.tools@gmail.com> | 2017-08-04 12:17:15 -0700 |
---|---|---|
committer | H.J. Lu <hjl.tools@gmail.com> | 2017-08-04 12:17:30 -0700 |
commit | 19f1a11e7ea2a5082bae9d9a079338c5658ba954 (patch) | |
tree | 242caa3dcb915548b8541f4552e849e06c1ffb19 | |
parent | 3093fd5e5d418b91411aa9b061850b8773433cf7 (diff) | |
download | glibc-19f1a11e7ea2a5082bae9d9a079338c5658ba954.tar.gz glibc-19f1a11e7ea2a5082bae9d9a079338c5658ba954.tar.xz glibc-19f1a11e7ea2a5082bae9d9a079338c5658ba954.zip |
Check linker support for INSERT in linker script
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. * 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-- | ChangeLog | 10 | ||||
-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 |
5 files changed, 67 insertions, 0 deletions
diff --git a/ChangeLog b/ChangeLog index 33caac763c..cc540a148e 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,15 @@ 2017-08-04 H.J. Lu <hongjiu.lu@intel.com> + * 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. + +2017-08-04 H.J. Lu <hongjiu.lu@intel.com> + * elf/Makefile (tests): Add vismain only if $(have-protected-data) == yes. (tests-pie): Likewise. diff --git a/config.make.in b/config.make.in index 5a4a054612..7eff1daf6a 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 d8e1c50e11..e6a54d7841 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 @@ -5716,6 +5717,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 77456aa8d9..2c6308883c 100644 --- a/configure.ac +++ b/configure.ac @@ -1298,6 +1298,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 132470d9cb..7f3ffe34ba 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 \ |