elf: Replace PI_STATIC_AND_HIDDEN with opposite HIDDEN_VAR_NEEDS_DYNAMIC_RELOC

PI_STATIC_AND_HIDDEN indicates whether accesses to internal linkage
variables and hidden visibility variables in a shared object (ld.so)
need dynamic relocations (usually R_*_RELATIVE). PI (position
independent) in the macro name is a misnomer: a code sequence using GOT
is typically position-independent as well, but using dynamic relocations
does not meet the requirement.

Not defining PI_STATIC_AND_HIDDEN is legacy and we expect that all new
ports will define PI_STATIC_AND_HIDDEN. Current ports defining
PI_STATIC_AND_HIDDEN are more than the opposite. Change the configure
default.

No functional change.

Reviewed-by: Adhemerval Zanella  <adhemerval.zanella@linaro.org>
This commit is contained in:
Fangrui Song 2022-04-26 09:26:22 -07:00
parent e465d97653
commit 098a657fe4
41 changed files with 46 additions and 82 deletions

View File

@ -84,9 +84,9 @@
/* Define if the compiler\'s exception support is based on libunwind. */
#undef HAVE_CC_WITH_LIBUNWIND
/* Define if the access to static and hidden variables is position independent
and does not need relocations. */
#undef PI_STATIC_AND_HIDDEN
/* Define if the accesses to static and hidden variables in a shared object
need dynamic relocations. */
#undef HIDDEN_VAR_NEEDS_DYNAMIC_RELOC
/* Define this to disable the 'hidden_proto' et al macros in
include/libc-symbols.h that avoid PLT slots in PIE. */

View File

@ -424,7 +424,7 @@ DL_SYSINFO_IMPLEMENTATION
is fine, too. The latter is important here. We can avoid setting
up a temporary link map for ld.so if we can mark _rtld_global as
hidden. */
#ifdef PI_STATIC_AND_HIDDEN
#ifndef HIDDEN_VAR_NEEDS_DYNAMIC_RELOC
# define DONT_USE_BOOTSTRAP_MAP 1
#endif

View File

@ -1,11 +1,6 @@
# This file is generated from configure.ac by Autoconf. DO NOT EDIT!
# Local configure fragment for sysdeps/aarch64.
# Static and hidden objects are accessed without dynamic relocations.
# The exception is -mcmodel=large which is unsupported with PIC/PIE.
$as_echo "#define PI_STATIC_AND_HIDDEN 1" >>confdefs.h
# Static PIE is supported.
$as_echo "#define SUPPORT_STATIC_PIE 1" >>confdefs.h

View File

@ -1,10 +1,6 @@
GLIBC_PROVIDES dnl See aclocal.m4 in the top level source directory.
# Local configure fragment for sysdeps/aarch64.
# Static and hidden objects are accessed without dynamic relocations.
# The exception is -mcmodel=large which is unsupported with PIC/PIE.
AC_DEFINE(PI_STATIC_AND_HIDDEN)
# Static PIE is supported.
AC_DEFINE(SUPPORT_STATIC_PIE)

View File

@ -1,11 +1,6 @@
# This file is generated from configure.ac by Autoconf. DO NOT EDIT!
# Local configure fragment for sysdeps/alpha.
# With required gcc+binutils, we can always access static and hidden
# symbols in a position independent way.
$as_echo "#define PI_STATIC_AND_HIDDEN 1" >>confdefs.h
# PIE builds fail on binutils 2.37 and earlier, see:
# https://sourceware.org/bugzilla/show_bug.cgi?id=28672
$as_echo "#define PIE_UNSUPPORTED 1" >>confdefs.h

View File

@ -1,10 +1,6 @@
GLIBC_PROVIDES dnl See aclocal.m4 in the top level source directory.
# Local configure fragment for sysdeps/alpha.
# With required gcc+binutils, we can always access static and hidden
# symbols in a position independent way.
AC_DEFINE(PI_STATIC_AND_HIDDEN)
# PIE builds fail on binutils 2.37 and earlier, see:
# https://sourceware.org/bugzilla/show_bug.cgi?id=28672
AC_DEFINE(PIE_UNSUPPORTED)

View File

@ -1,8 +1,6 @@
# This file is generated from configure.ac by Autoconf. DO NOT EDIT!
# Local configure fragment for sysdeps/arc.
$as_echo "#define PI_STATIC_AND_HIDDEN 1" >>confdefs.h
libc_cv_have_sdata_section=no
# For ARC, historically ; was used for comments and not newline

View File

@ -1,7 +1,6 @@
GLIBC_PROVIDES dnl See aclocal.m4 in the top level source directory.
# Local configure fragment for sysdeps/arc.
AC_DEFINE(PI_STATIC_AND_HIDDEN)
libc_cv_have_sdata_section=no
# For ARC, historically ; was used for comments and not newline

View File

@ -1,9 +1,6 @@
# This file is generated from configure.ac by Autoconf. DO NOT EDIT!
# Local configure fragment for sysdeps/arm.
$as_echo "#define PI_STATIC_AND_HIDDEN 1" >>confdefs.h
# We check to see if the compiler and flags are
# selecting the hard-float ABI and if they are then
# we set libc_cv_arm_pcs_vfp to yes which causes

View File

@ -1,11 +1,6 @@
GLIBC_PROVIDES dnl See aclocal.m4 in the top level source directory.
# Local configure fragment for sysdeps/arm.
dnl It is always possible to access static and hidden symbols in an
dnl position independent way. This has been true since GCC 4.1,
dnl which is older than the minimum version required to build libc.
AC_DEFINE(PI_STATIC_AND_HIDDEN)
# We check to see if the compiler and flags are
# selecting the hard-float ABI and if they are then
# we set libc_cv_arm_pcs_vfp to yes which causes

View File

@ -1,9 +1,6 @@
# This file is generated from configure.ac by Autoconf. DO NOT EDIT!
# Local configure fragment for sysdeps/csky.
$as_echo "#define PI_STATIC_AND_HIDDEN 1" >>confdefs.h
# PIE builds fail on binutils 2.37 and earlier, see:
# https://sourceware.org/bugzilla/show_bug.cgi?id=28672
$as_echo "#define PIE_UNSUPPORTED 1" >>confdefs.h

View File

@ -1,8 +1,6 @@
GLIBC_PROVIDES dnl See aclocal.m4 in the top level source directory.
# Local configure fragment for sysdeps/csky.
AC_DEFINE(PI_STATIC_AND_HIDDEN)
# PIE builds fail on binutils 2.37 and earlier, see:
# https://sourceware.org/bugzilla/show_bug.cgi?id=28672
AC_DEFINE(PIE_UNSUPPORTED)

View File

@ -32,6 +32,9 @@ cat >>confdefs.h <<_ACEOF
_ACEOF
$as_echo "#define HIDDEN_VAR_NEEDS_DYNAMIC_RELOC 1" >>confdefs.h
# PIE builds fail on binutils 2.37 and earlier, see:
# https://sourceware.org/bugzilla/show_bug.cgi?id=28672
$as_echo "#define PIE_UNSUPPORTED 1" >>confdefs.h

View File

@ -20,6 +20,8 @@ fi
rm -f conftest*])
AC_DEFINE_UNQUOTED(ASM_LINE_SEP, $libc_cv_asm_line_sep)
AC_DEFINE(HIDDEN_VAR_NEEDS_DYNAMIC_RELOC)
# PIE builds fail on binutils 2.37 and earlier, see:
# https://sourceware.org/bugzilla/show_bug.cgi?id=28672
AC_DEFINE(PIE_UNSUPPORTED)

View File

@ -1,9 +1,6 @@
# This file is generated from configure.ac by Autoconf. DO NOT EDIT!
# Local configure fragment for sysdeps/ia64.
$as_echo "#define PI_STATIC_AND_HIDDEN 1" >>confdefs.h
# PIE builds fail on binutils 2.37 and earlier, see:
# https://sourceware.org/bugzilla/show_bug.cgi?id=28672
$as_echo "#define PIE_UNSUPPORTED 1" >>confdefs.h

View File

@ -1,10 +1,6 @@
GLIBC_PROVIDES dnl See aclocal.m4 in the top level source directory.
# Local configure fragment for sysdeps/ia64.
dnl It is always possible to access static and hidden symbols in an
dnl position independent way.
AC_DEFINE(PI_STATIC_AND_HIDDEN)
# PIE builds fail on binutils 2.37 and earlier, see:
# https://sourceware.org/bugzilla/show_bug.cgi?id=28672
AC_DEFINE(PIE_UNSUPPORTED)

7
sysdeps/m68k/configure vendored Normal file
View File

@ -0,0 +1,7 @@
# This file is generated from configure.ac by Autoconf. DO NOT EDIT!
# Local configure fragment for sysdeps/m68k.
# Accessing static and hidden variables in a shared object needs relative
# relocation.
$as_echo "#define HIDDEN_VAR_NEEDS_DYNAMIC_RELOC 1" >>confdefs.h

View File

@ -0,0 +1,6 @@
GLIBC_PROVIDES dnl See aclocal.m4 in the top level source directory.
# Local configure fragment for sysdeps/m68k.
# Accessing static and hidden variables in a shared object needs relative
# relocation.
AC_DEFINE(HIDDEN_VAR_NEEDS_DYNAMIC_RELOC)

View File

@ -1,6 +1,9 @@
# This file is generated from configure.ac by Autoconf. DO NOT EDIT!
# Local configure fragment for sysdeps/microblaze.
$as_echo "#define HIDDEN_VAR_NEEDS_DYNAMIC_RELOC 1" >>confdefs.h
# gcc 11.2.1 and earlier crash with an internal compiler error, see:
# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=103613
$as_echo "#define PIE_UNSUPPORTED 1" >>confdefs.h

View File

@ -1,6 +1,8 @@
GLIBC_PROVIDES dnl See aclocal.m4 in the top level source directory.
# Local configure fragment for sysdeps/microblaze.
AC_DEFINE(HIDDEN_VAR_NEEDS_DYNAMIC_RELOC)
# gcc 11.2.1 and earlier crash with an internal compiler error, see:
# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=103613
AC_DEFINE(PIE_UNSUPPORTED)

View File

@ -1,6 +1,8 @@
# This file is generated from configure.ac by Autoconf. DO NOT EDIT!
# Local configure fragment for sysdeps/mips.
$as_echo "#define HIDDEN_VAR_NEEDS_DYNAMIC_RELOC 1" >>confdefs.h

View File

@ -3,7 +3,7 @@ GLIBC_PROVIDES dnl See aclocal.m4 in the top level source directory.
dnl No MIPS GCC supports accessing static and hidden symbols in an
dnl position independent way.
dnl AC_DEFINE(PI_STATIC_AND_HIDDEN)
AC_DEFINE(HIDDEN_VAR_NEEDS_DYNAMIC_RELOC)
AC_CACHE_CHECK([whether the compiler is using the 2008 NaN encoding],
libc_cv_mips_nan2008, [AC_EGREP_CPP(yes, [dnl

View File

@ -160,3 +160,6 @@ $as_echo "$libc_cv_nios2_be" >&6; }
if test $libc_cv_nios2_be = yes; then
as_fn_error $? "Big endian not supported for Nios II" "$LINENO" 5
fi
$as_echo "#define HIDDEN_VAR_NEEDS_DYNAMIC_RELOC 1" >>confdefs.h

View File

@ -11,3 +11,5 @@ AC_CACHE_CHECK([for big endian],
if test $libc_cv_nios2_be = yes; then
AC_MSG_ERROR([Big endian not supported for Nios II])
fi
AC_DEFINE(HIDDEN_VAR_NEEDS_DYNAMIC_RELOC)

View File

@ -1,5 +1,2 @@
# This file is generated from configure.ac by Autoconf. DO NOT EDIT!
# Local configure fragment for sysdeps/or1k.
$as_echo "#define PI_STATIC_AND_HIDDEN 1" >>confdefs.h

View File

@ -1,4 +1,2 @@
GLIBC_PROVIDES dnl See aclocal.m4 in the top level source directory.
# Local configure fragment for sysdeps/or1k.
AC_DEFINE(PI_STATIC_AND_HIDDEN)

View File

@ -1,6 +1,9 @@
# This file is generated from configure.ac by Autoconf. DO NOT EDIT!
# Local configure fragment for sysdeps/powerpc/powerpc32.
$as_echo "#define HIDDEN_VAR_NEEDS_DYNAMIC_RELOC 1" >>confdefs.h
# See whether GCC uses -msecure-plt.
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for -msecure-plt by default" >&5
$as_echo_n "checking for -msecure-plt by default... " >&6; }

View File

@ -1,6 +1,8 @@
GLIBC_PROVIDES dnl See aclocal.m4 in the top level source directory.
# Local configure fragment for sysdeps/powerpc/powerpc32.
AC_DEFINE(HIDDEN_VAR_NEEDS_DYNAMIC_RELOC)
# See whether GCC uses -msecure-plt.
AC_CACHE_CHECK(for -msecure-plt by default, libc_cv_ppc_secure_plt, [dnl
echo 'int foo (void) { extern int bar; return bar; }' > conftest.c

View File

@ -1,6 +1,9 @@
# This file is generated from configure.ac by Autoconf. DO NOT EDIT!
# Local configure fragment for sysdeps/powerpc/powerpc64.
$as_echo "#define HIDDEN_VAR_NEEDS_DYNAMIC_RELOC 1" >>confdefs.h
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for support for overlapping .opd entries" >&5
$as_echo_n "checking for support for overlapping .opd entries... " >&6; }
if ${libc_cv_overlapping_opd+:} false; then :

View File

@ -1,6 +1,8 @@
GLIBC_PROVIDES dnl See aclocal.m4 in the top level source directory.
# Local configure fragment for sysdeps/powerpc/powerpc64.
AC_DEFINE(HIDDEN_VAR_NEEDS_DYNAMIC_RELOC)
AC_CACHE_CHECK(for support for overlapping .opd entries,
libc_cv_overlapping_opd, [dnl
libc_cv_overlapping_opd=no

View File

@ -102,7 +102,7 @@ do_test (void)
if (&bar == bar_ptr)
printf ("PASS: bar address read from IFUNC resolver is correct.\n");
#if !defined TST_TLSIFUNC_STATIC || !defined PIC \
|| !defined PI_STATIC_AND_HIDDEN
|| defined HIDDEN_VAR_NEEDS_DYNAMIC_RELOC
else
{
printf ("FAIL: bar address read from IFUNC resolver is incorrect.\n");

View File

@ -1,9 +1,6 @@
# This file is generated from configure.ac by Autoconf. DO NOT EDIT!
# Local configure fragment for sysdeps/riscv/elf.
$as_echo "#define PI_STATIC_AND_HIDDEN 1" >>confdefs.h
# Check if static linker supports R_RISCV_ALIGN
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for R_RISCV_ALIGN linker relaxation support" >&5
$as_echo_n "checking for R_RISCV_ALIGN linker relaxation support... " >&6; }

View File

@ -1,8 +1,6 @@
GLIBC_PROVIDES dnl See aclocal.m4 in the top level source directory.
# Local configure fragment for sysdeps/riscv/elf.
AC_DEFINE(PI_STATIC_AND_HIDDEN)
# Check if static linker supports R_RISCV_ALIGN
AC_CACHE_CHECK([for R_RISCV_ALIGN linker relaxation support], [libc_cv_riscv_r_align],[dnl
cat > conftest.S <<EOF

View File

@ -1,9 +1,6 @@
# This file is generated from configure.ac by Autoconf. DO NOT EDIT!
# Local configure fragment for sysdeps/s390.
$as_echo "#define PI_STATIC_AND_HIDDEN 1" >>confdefs.h
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for __builtin_tbegin" >&5
$as_echo_n "checking for __builtin_tbegin... " >&6; }
if ${libc_cv_gcc_builtin_tbegin+:} false; then :

View File

@ -1,10 +1,6 @@
GLIBC_PROVIDES dnl See aclocal.m4 in the top level source directory.
# Local configure fragment for sysdeps/s390.
dnl It is always possible to access static and hidden symbols in an
dnl position independent way.
AC_DEFINE(PI_STATIC_AND_HIDDEN)
AC_CACHE_CHECK(for __builtin_tbegin, libc_cv_gcc_builtin_tbegin, [dnl
cat > conftest.c <<\EOF
#include <htmintrin.h>

View File

@ -1,5 +1,2 @@
# This file is generated from configure.ac by Autoconf. DO NOT EDIT!
# Local configure fragment for sysdeps/sh.
$as_echo "#define PI_STATIC_AND_HIDDEN 1" >>confdefs.h

View File

@ -1,6 +1,2 @@
GLIBC_PROVIDES dnl See aclocal.m4 in the top level source directory.
# Local configure fragment for sysdeps/sh.
dnl It is always possible to access static and hidden symbols in an
dnl position independent way.
AC_DEFINE(PI_STATIC_AND_HIDDEN)

View File

@ -1,4 +1,2 @@
# This file is generated from configure.ac by Autoconf. DO NOT EDIT!
# Local configure fragment for sysdeps/sparc.
$as_echo "#define PI_STATIC_AND_HIDDEN 1" >>confdefs.h

View File

@ -1,4 +1,2 @@
GLIBC_PROVIDES dnl See aclocal.m4 in the top level source directory.
# Local configure fragment for sysdeps/sparc.
AC_DEFINE(PI_STATIC_AND_HIDDEN)

View File

@ -190,8 +190,5 @@ fi
config_vars="$config_vars
enable-x86-isa-level = $libc_cv_include_x86_isa_level"
$as_echo "#define PI_STATIC_AND_HIDDEN 1" >>confdefs.h
$as_echo "#define SUPPORT_STATIC_PIE 1" >>confdefs.h

View File

@ -128,9 +128,5 @@ if test $libc_cv_include_x86_isa_level = yes; then
fi
LIBC_CONFIG_VAR([enable-x86-isa-level], [$libc_cv_include_x86_isa_level])
dnl It is always possible to access static and hidden symbols in an
dnl position independent way.
AC_DEFINE(PI_STATIC_AND_HIDDEN)
dnl Static PIE is supported.
AC_DEFINE(SUPPORT_STATIC_PIE)