From 89569c8bb6b386db4881af0e96514d2ec5c35478 Mon Sep 17 00:00:00 2001 From: "H.J. Lu" Date: Sat, 14 Nov 2015 12:00:16 -0800 Subject: Run tst-prelink test for GLOB_DAT reloc Run tst-prelink test on targets with GLOB_DAT relocaton. * config.make.in (have-glob-dat-reloc): New. * configure.ac (libc_cv_has_glob_dat): New. Set to yes if target supports GLOB_DAT relocaton. AC_SUBST. * configure: Regenerated. * elf/Makefile (tests): Add tst-prelink. (tests-special): Add $(objpfx)tst-prelink-cmp.out. (tst-prelink-ENV): New. ($(objpfx)tst-prelink-conflict.out): Likewise. ($(objpfx)tst-prelink-cmp.out): Likewise. * sysdeps/x86/tst-prelink.c: Moved to ... * elf/tst-prelink.c: Here. * sysdeps/x86/tst-prelink.exp: Moved to ... * elf/tst-prelink.exp: Here. * sysdeps/x86/Makefile (tests): Don't add tst-prelink. (tst-prelink-ENV): Removed. ($(objpfx)tst-prelink-conflict.out): Likewise. ($(objpfx)tst-prelink-cmp.out): Likewise. (tests-special): Don't add $(objpfx)tst-prelink-cmp.out. --- ChangeLog | 21 +++++++++++++++++++++ config.make.in | 1 + configure | 34 ++++++++++++++++++++++++++++++++++ configure.ac | 23 +++++++++++++++++++++++ elf/Makefile | 17 +++++++++++++++++ elf/tst-prelink.c | 30 ++++++++++++++++++++++++++++++ elf/tst-prelink.exp | 1 + sysdeps/x86/Makefile | 15 --------------- sysdeps/x86/tst-prelink.c | 30 ------------------------------ sysdeps/x86/tst-prelink.exp | 1 - 10 files changed, 127 insertions(+), 46 deletions(-) create mode 100644 elf/tst-prelink.c create mode 100644 elf/tst-prelink.exp delete mode 100644 sysdeps/x86/tst-prelink.c delete mode 100644 sysdeps/x86/tst-prelink.exp diff --git a/ChangeLog b/ChangeLog index b911aec..b1b25c6 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,24 @@ +2015-11-14 H.J. Lu + + * config.make.in (have-glob-dat-reloc): New. + * configure.ac (libc_cv_has_glob_dat): New. Set to yes if + target supports GLOB_DAT relocaton. AC_SUBST. + * configure: Regenerated. + * elf/Makefile (tests): Add tst-prelink. + (tests-special): Add $(objpfx)tst-prelink-cmp.out. + (tst-prelink-ENV): New. + ($(objpfx)tst-prelink-conflict.out): Likewise. + ($(objpfx)tst-prelink-cmp.out): Likewise. + * sysdeps/x86/tst-prelink.c: Moved to ... + * elf/tst-prelink.c: Here. + * sysdeps/x86/tst-prelink.exp: Moved to ... + * elf/tst-prelink.exp: Here. + * sysdeps/x86/Makefile (tests): Don't add tst-prelink. + (tst-prelink-ENV): Removed. + ($(objpfx)tst-prelink-conflict.out): Likewise. + ($(objpfx)tst-prelink-cmp.out): Likewise. + (tests-special): Don't add $(objpfx)tst-prelink-cmp.out. + 2015-11-13 Joseph Myers [BZ #14551] diff --git a/config.make.in b/config.make.in index 75bb9cc..ba9c60d 100644 --- a/config.make.in +++ b/config.make.in @@ -50,6 +50,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-glob-dat-reloc = @libc_cv_has_glob_dat@ with-fp = @with_fp@ enable-timezone-tools = @enable_timezone_tools@ unwind-find-fde = @libc_cv_gcc_unwind_find_fde@ diff --git a/configure b/configure index 01f5075..90953f0 100755 --- a/configure +++ b/configure @@ -622,6 +622,7 @@ libc_cv_cc_nofma stack_protector fno_unit_at_a_time libc_cv_output_format +libc_cv_has_glob_dat libc_cv_hashstyle libc_cv_fpie libc_cv_z_execstack @@ -5693,6 +5694,39 @@ $as_echo "$libc_cv_use_default_link" >&6; } use_default_link=$libc_cv_use_default_link fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for GLOB_DAT reloc" >&5 +$as_echo_n "checking for GLOB_DAT reloc... " >&6; } +if ${libc_cv_has_glob_dat+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat > conftest.c <&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } +then + if $READELF -rW conftest.so | grep '_GLOB_DAT' > /dev/null; then + libc_cv_has_glob_dat=yes + else + libc_cv_has_glob_dat=no + fi +else + libc_cv_has_glob_dat=no +fi +rm -f conftest* +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_has_glob_dat" >&5 +$as_echo "$libc_cv_has_glob_dat" >&6; } + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking linker output format" >&5 $as_echo_n "checking linker output format... " >&6; } if ${libc_cv_output_format+:} false; then : diff --git a/configure.ac b/configure.ac index 3fdf992..cd37433 100644 --- a/configure.ac +++ b/configure.ac @@ -1340,6 +1340,29 @@ $ac_try" use_default_link=$libc_cv_use_default_link fi +AC_CACHE_CHECK(for GLOB_DAT reloc, + libc_cv_has_glob_dat, [dnl +cat > conftest.c <&AS_MESSAGE_LOG_FD]) +then +dnl look for GLOB_DAT relocation. + if $READELF -rW conftest.so | grep '_GLOB_DAT' > /dev/null; then + libc_cv_has_glob_dat=yes + else + libc_cv_has_glob_dat=no + fi +else + libc_cv_has_glob_dat=no +fi +rm -f conftest*]) +AC_SUBST(libc_cv_has_glob_dat) + AC_CACHE_CHECK(linker output format, libc_cv_output_format, [dnl if libc_cv_output_format=` ${CC-cc} -nostartfiles -nostdlib -Wl,--print-output-format 2>&AS_MESSAGE_LOG_FD` diff --git a/elf/Makefile b/elf/Makefile index 76985cc..9d2dc5c 100644 --- a/elf/Makefile +++ b/elf/Makefile @@ -302,6 +302,13 @@ check-abi: $(objpfx)check-abi-ld.out tests-special += $(objpfx)check-abi-ld.out update-abi: update-abi-ld +ifeq ($(have-glob-dat-reloc),yes) +tests += tst-prelink +ifeq ($(run-built-tests),yes) +tests-special += $(objpfx)tst-prelink-cmp.out +endif +endif + include ../Rules ifeq (yes,$(build-shared)) @@ -1234,3 +1241,13 @@ $(objpfx)tst-audit12: $(libdl) tst-audit12-ENV = LD_AUDIT=$(objpfx)tst-auditmod12.so $(objpfx)tst-audit12mod1.so: $(objpfx)tst-audit12mod2.so LDFLAGS-tst-audit12mod2.so = -Wl,--version-script=tst-audit12mod2.map + +tst-prelink-ENV = LD_TRACE_PRELINKING=1 + +$(objpfx)tst-prelink-conflict.out: $(objpfx)tst-prelink.out + grep stdout $< | grep conflict | $(AWK) '{ print $$10, $$11 }' > $@ + +$(objpfx)tst-prelink-cmp.out: tst-prelink.exp \ + $(objpfx)tst-prelink-conflict.out + cmp $^ > $@; \ + $(evaluate-test) diff --git a/elf/tst-prelink.c b/elf/tst-prelink.c new file mode 100644 index 0000000..ab61c4e --- /dev/null +++ b/elf/tst-prelink.c @@ -0,0 +1,30 @@ +/* Test the output from the environment variable, LD_TRACE_PRELINKING, + for prelink. + Copyright (C) 2015 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#include + +static int +do_test (void) +{ + fprintf (stdout, "hello\n"); + return 0; +} + +#define TEST_FUNCTION do_test () +#include "../test-skeleton.c" diff --git a/elf/tst-prelink.exp b/elf/tst-prelink.exp new file mode 100644 index 0000000..b35b4c9 --- /dev/null +++ b/elf/tst-prelink.exp @@ -0,0 +1 @@ +/0 stdout diff --git a/sysdeps/x86/Makefile b/sysdeps/x86/Makefile index a2f4f8a..0de4f42 100644 --- a/sysdeps/x86/Makefile +++ b/sysdeps/x86/Makefile @@ -7,19 +7,4 @@ sysdep-dl-routines += dl-get-cpu-features tests += tst-get-cpu-features tests-static += tst-get-cpu-features-static - -tests += tst-prelink -tst-prelink-ENV = LD_TRACE_PRELINKING=1 - -$(objpfx)tst-prelink-conflict.out: $(objpfx)tst-prelink.out - grep stdout $< | grep conflict | $(AWK) '{ print $$10, $$11 }' > $@ - -$(objpfx)tst-prelink-cmp.out: $(..)sysdeps/x86/tst-prelink.exp \ - $(objpfx)tst-prelink-conflict.out - cmp $^ > $@; \ - $(evaluate-test) - -ifeq ($(run-built-tests),yes) -tests-special += $(objpfx)tst-prelink-cmp.out -endif endif diff --git a/sysdeps/x86/tst-prelink.c b/sysdeps/x86/tst-prelink.c deleted file mode 100644 index ab61c4e..0000000 --- a/sysdeps/x86/tst-prelink.c +++ /dev/null @@ -1,30 +0,0 @@ -/* Test the output from the environment variable, LD_TRACE_PRELINKING, - for prelink. - Copyright (C) 2015 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include - -static int -do_test (void) -{ - fprintf (stdout, "hello\n"); - return 0; -} - -#define TEST_FUNCTION do_test () -#include "../test-skeleton.c" diff --git a/sysdeps/x86/tst-prelink.exp b/sysdeps/x86/tst-prelink.exp deleted file mode 100644 index b35b4c9..0000000 --- a/sysdeps/x86/tst-prelink.exp +++ /dev/null @@ -1 +0,0 @@ -/0 stdout -- cgit v1.1