x86-64: Remove HAVE_LD_PIE_COPYRELOC
Checks
Commit Message
This was introduced in 2014-12 to use local binding for external symbols
for -fPIE. Now that we have H.J. Lu's GOTPCRELX for years which mostly
nullify the benefit of HAVE_LD_PIE_COPYRELOC, HAVE_LD_PIE_COPYRELOC
should retire now.
One design goal of -fPIE was to avoid copy relocations.
HAVE_LD_PIE_COPYRELOC has deviated from the goal. With this change, the
-fPIE behavior of x86-64 will be closer to x86-32 and other targets.
---
See https://gcc.gnu.org/legacy-ml/gcc/2019-05/msg00215.html for a list
of fixed and unfixed (e.g. gold incompatibility with protected
https://sourceware.org/bugzilla/show_bug.cgi?id=19823) issues.
If you prefer a longer write-up, see
https://maskray.me/blog/2021-01-09-copy-relocations-canonical-plt-entries-and-protected
---
gcc/config.in | 6 ---
gcc/config/i386/i386.c | 11 +---
gcc/configure | 52 -------------------
gcc/configure.ac | 48 -----------------
gcc/doc/sourcebuild.texi | 3 --
.../gcc.target/i386/pie-copyrelocs-1.c | 14 -----
.../gcc.target/i386/pie-copyrelocs-2.c | 14 -----
.../gcc.target/i386/pie-copyrelocs-3.c | 14 -----
.../gcc.target/i386/pie-copyrelocs-4.c | 17 ------
gcc/testsuite/lib/target-supports.exp | 47 -----------------
10 files changed, 2 insertions(+), 224 deletions(-)
delete mode 100644 gcc/testsuite/gcc.target/i386/pie-copyrelocs-1.c
delete mode 100644 gcc/testsuite/gcc.target/i386/pie-copyrelocs-2.c
delete mode 100644 gcc/testsuite/gcc.target/i386/pie-copyrelocs-3.c
delete mode 100644 gcc/testsuite/gcc.target/i386/pie-copyrelocs-4.c
Comments
Sorry, wrong list. Please ignore.
On Tue, May 11, 2021 at 8:28 PM Fangrui Song <maskray@google.com> wrote:
>
> This was introduced in 2014-12 to use local binding for external symbols
> for -fPIE. Now that we have H.J. Lu's GOTPCRELX for years which mostly
> nullify the benefit of HAVE_LD_PIE_COPYRELOC, HAVE_LD_PIE_COPYRELOC
> should retire now.
>
> One design goal of -fPIE was to avoid copy relocations.
> HAVE_LD_PIE_COPYRELOC has deviated from the goal. With this change, the
> -fPIE behavior of x86-64 will be closer to x86-32 and other targets.
>
> ---
>
> See https://gcc.gnu.org/legacy-ml/gcc/2019-05/msg00215.html for a list
> of fixed and unfixed (e.g. gold incompatibility with protected
> https://sourceware.org/bugzilla/show_bug.cgi?id=19823) issues.
>
> If you prefer a longer write-up, see
> https://maskray.me/blog/2021-01-09-copy-relocations-canonical-plt-entries-and-protected
> ---
> gcc/config.in | 6 ---
> gcc/config/i386/i386.c | 11 +---
> gcc/configure | 52 -------------------
> gcc/configure.ac | 48 -----------------
> gcc/doc/sourcebuild.texi | 3 --
> .../gcc.target/i386/pie-copyrelocs-1.c | 14 -----
> .../gcc.target/i386/pie-copyrelocs-2.c | 14 -----
> .../gcc.target/i386/pie-copyrelocs-3.c | 14 -----
> .../gcc.target/i386/pie-copyrelocs-4.c | 17 ------
> gcc/testsuite/lib/target-supports.exp | 47 -----------------
> 10 files changed, 2 insertions(+), 224 deletions(-)
> delete mode 100644 gcc/testsuite/gcc.target/i386/pie-copyrelocs-1.c
> delete mode 100644 gcc/testsuite/gcc.target/i386/pie-copyrelocs-2.c
> delete mode 100644 gcc/testsuite/gcc.target/i386/pie-copyrelocs-3.c
> delete mode 100644 gcc/testsuite/gcc.target/i386/pie-copyrelocs-4.c
>
> diff --git a/gcc/config.in b/gcc/config.in
> index e54f59ce0c3..a65bf5d4176 100644
> --- a/gcc/config.in
> +++ b/gcc/config.in
> @@ -1659,12 +1659,6 @@
> #endif
>
>
> -/* Define 0/1 if your linker supports -pie option with copy reloc. */
> -#ifndef USED_FOR_TARGET
> -#undef HAVE_LD_PIE_COPYRELOC
> -#endif
> -
> -
> /* Define if your PowerPC linker has .gnu.attributes long double support. */
> #ifndef USED_FOR_TARGET
> #undef HAVE_LD_PPC_GNU_ATTR_LONG_DOUBLE
> diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c
> index 915f89f571a..5ec3c6fd0c9 100644
> --- a/gcc/config/i386/i386.c
> +++ b/gcc/config/i386/i386.c
> @@ -10579,11 +10579,7 @@ legitimate_pic_address_disp_p (rtx disp)
> return true;
> }
> else if (!SYMBOL_REF_FAR_ADDR_P (op0)
> - && (SYMBOL_REF_LOCAL_P (op0)
> - || (HAVE_LD_PIE_COPYRELOC
> - && flag_pie
> - && !SYMBOL_REF_WEAK (op0)
> - && !SYMBOL_REF_FUNCTION_P (op0)))
> + && SYMBOL_REF_LOCAL_P (op0)
> && ix86_cmodel != CM_LARGE_PIC)
> return true;
> break;
> @@ -22892,10 +22888,7 @@ ix86_atomic_assign_expand_fenv (tree *hold, tree *clear, tree *update)
> static bool
> ix86_binds_local_p (const_tree exp)
> {
> - return default_binds_local_p_3 (exp, flag_shlib != 0, true, true,
> - (!flag_pic
> - || (TARGET_64BIT
> - && HAVE_LD_PIE_COPYRELOC != 0)));
> + return default_binds_local_p_3 (exp, flag_shlib != 0, true, true, !flag_pic);
> }
> #endif
>
> diff --git a/gcc/configure b/gcc/configure
> index f03fe888384..c500f5ca11e 100755
> --- a/gcc/configure
> +++ b/gcc/configure
> @@ -29968,58 +29968,6 @@ fi
> { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_ld_pie" >&5
> $as_echo "$gcc_cv_ld_pie" >&6; }
>
> -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking linker PIE support with copy reloc" >&5
> -$as_echo_n "checking linker PIE support with copy reloc... " >&6; }
> -gcc_cv_ld_pie_copyreloc=no
> -if test $gcc_cv_ld_pie = yes ; then
> - if test $in_tree_ld = yes ; then
> - if test "$gcc_cv_gld_major_version" -eq 2 -a "$gcc_cv_gld_minor_version" -ge 25 -o "$gcc_cv_gld_major_version" -gt 2; then
> - gcc_cv_ld_pie_copyreloc=yes
> - fi
> - elif test x$gcc_cv_as != x -a x$gcc_cv_ld != x ; then
> - # Check if linker supports -pie option with copy reloc
> - case "$target" in
> - i?86-*-linux* | x86_64-*-linux*)
> - cat > conftest1.s <<EOF
> - .globl a_glob
> - .data
> - .type a_glob, @object
> - .size a_glob, 4
> -a_glob:
> - .long 2
> -EOF
> - cat > conftest2.s <<EOF
> - .text
> - .globl main
> - .type main, @function
> -main:
> - movl %eax, a_glob(%rip)
> - .size main, .-main
> - .globl ptr
> - .section .data.rel,"aw",@progbits
> - .type ptr, @object
> -ptr:
> - .quad a_glob
> -EOF
> - if $gcc_cv_as --64 -o conftest1.o conftest1.s > /dev/null 2>&1 \
> - && $gcc_cv_ld -shared -melf_x86_64 -o conftest1.so conftest1.o > /dev/null 2>&1 \
> - && $gcc_cv_as --64 -o conftest2.o conftest2.s > /dev/null 2>&1 \
> - && $gcc_cv_ld -pie -melf_x86_64 -o conftest conftest2.o conftest1.so > /dev/null 2>&1; then
> - gcc_cv_ld_pie_copyreloc=yes
> - fi
> - rm -f conftest conftest1.so conftest1.o conftest2.o conftest1.s conftest2.s
> - ;;
> - esac
> - fi
> -fi
> -
> -cat >>confdefs.h <<_ACEOF
> -#define HAVE_LD_PIE_COPYRELOC `if test x"$gcc_cv_ld_pie_copyreloc" = xyes; then echo 1; else echo 0; fi`
> -_ACEOF
> -
> -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_ld_pie_copyreloc" >&5
> -$as_echo "$gcc_cv_ld_pie_copyreloc" >&6; }
> -
> { $as_echo "$as_me:${as_lineno-$LINENO}: checking linker EH-compatible garbage collection of sections" >&5
> $as_echo_n "checking linker EH-compatible garbage collection of sections... " >&6; }
> gcc_cv_ld_eh_gc_sections=no
> diff --git a/gcc/configure.ac b/gcc/configure.ac
> index e9ba2af548a..d60b22c1708 100644
> --- a/gcc/configure.ac
> +++ b/gcc/configure.ac
> @@ -5924,54 +5924,6 @@ if test x"$gcc_cv_ld_pie" = xyes; then
> fi
> AC_MSG_RESULT($gcc_cv_ld_pie)
>
> -AC_MSG_CHECKING(linker PIE support with copy reloc)
> -gcc_cv_ld_pie_copyreloc=no
> -if test $gcc_cv_ld_pie = yes ; then
> - if test $in_tree_ld = yes ; then
> - if test "$gcc_cv_gld_major_version" -eq 2 -a "$gcc_cv_gld_minor_version" -ge 25 -o "$gcc_cv_gld_major_version" -gt 2; then
> - gcc_cv_ld_pie_copyreloc=yes
> - fi
> - elif test x$gcc_cv_as != x -a x$gcc_cv_ld != x ; then
> - # Check if linker supports -pie option with copy reloc
> - case "$target" in
> - i?86-*-linux* | x86_64-*-linux*)
> - cat > conftest1.s <<EOF
> - .globl a_glob
> - .data
> - .type a_glob, @object
> - .size a_glob, 4
> -a_glob:
> - .long 2
> -EOF
> - cat > conftest2.s <<EOF
> - .text
> - .globl main
> - .type main, @function
> -main:
> - movl %eax, a_glob(%rip)
> - .size main, .-main
> - .globl ptr
> - .section .data.rel,"aw",@progbits
> - .type ptr, @object
> -ptr:
> - .quad a_glob
> -EOF
> - if $gcc_cv_as --64 -o conftest1.o conftest1.s > /dev/null 2>&1 \
> - && $gcc_cv_ld -shared -melf_x86_64 -o conftest1.so conftest1.o > /dev/null 2>&1 \
> - && $gcc_cv_as --64 -o conftest2.o conftest2.s > /dev/null 2>&1 \
> - && $gcc_cv_ld -pie -melf_x86_64 -o conftest conftest2.o conftest1.so > /dev/null 2>&1; then
> - gcc_cv_ld_pie_copyreloc=yes
> - fi
> - rm -f conftest conftest1.so conftest1.o conftest2.o conftest1.s conftest2.s
> - ;;
> - esac
> - fi
> -fi
> -AC_DEFINE_UNQUOTED(HAVE_LD_PIE_COPYRELOC,
> - [`if test x"$gcc_cv_ld_pie_copyreloc" = xyes; then echo 1; else echo 0; fi`],
> - [Define 0/1 if your linker supports -pie option with copy reloc.])
> -AC_MSG_RESULT($gcc_cv_ld_pie_copyreloc)
> -
> AC_MSG_CHECKING(linker EH-compatible garbage collection of sections)
> gcc_cv_ld_eh_gc_sections=no
> if test $in_tree_ld = yes ; then
> diff --git a/gcc/doc/sourcebuild.texi b/gcc/doc/sourcebuild.texi
> index 3a1d6536833..1c8019ea04c 100644
> --- a/gcc/doc/sourcebuild.texi
> +++ b/gcc/doc/sourcebuild.texi
> @@ -2383,9 +2383,6 @@ Target supports FPU instructions.
> @item non_strict_align
> Target does not require strict alignment.
>
> -@item pie_copyreloc
> -The x86-64 target linker supports PIE with copy reloc.
> -
> @item rdrand
> Target supports x86 @code{rdrand} instruction.
>
> diff --git a/gcc/testsuite/gcc.target/i386/pie-copyrelocs-1.c b/gcc/testsuite/gcc.target/i386/pie-copyrelocs-1.c
> deleted file mode 100644
> index 7af851bde9b..00000000000
> --- a/gcc/testsuite/gcc.target/i386/pie-copyrelocs-1.c
> +++ /dev/null
> @@ -1,14 +0,0 @@
> -/* Check that GOTPCREL isn't used to access glob_a. */
> -/* { dg-do compile { target *-*-linux* } } */
> -/* { dg-require-effective-target pie_copyreloc } */
> -/* { dg-options "-O2 -fpie" } */
> -
> -extern int glob_a;
> -
> -int foo ()
> -{
> - return glob_a;
> -}
> -
> -/* glob_a should never be accessed with a GOTPCREL. */
> -/* { dg-final { scan-assembler-not "glob_a@GOTPCREL" { target { ! ia32 } } } } */
> diff --git a/gcc/testsuite/gcc.target/i386/pie-copyrelocs-2.c b/gcc/testsuite/gcc.target/i386/pie-copyrelocs-2.c
> deleted file mode 100644
> index 19cb97e882c..00000000000
> --- a/gcc/testsuite/gcc.target/i386/pie-copyrelocs-2.c
> +++ /dev/null
> @@ -1,14 +0,0 @@
> -/* Check that GOTPCREL isn't used to access glob_a. */
> -/* { dg-do compile { target *-*-linux* } } */
> -/* { dg-require-effective-target pie_copyreloc } */
> -/* { dg-options "-O2 -fpie" } */
> -
> -int glob_a;
> -
> -int foo ()
> -{
> - return glob_a;
> -}
> -
> -/* glob_a should never be accessed with a GOTPCREL. */
> -/* { dg-final { scan-assembler-not "glob_a@GOTPCREL" { target { ! ia32 } } } } */
> diff --git a/gcc/testsuite/gcc.target/i386/pie-copyrelocs-3.c b/gcc/testsuite/gcc.target/i386/pie-copyrelocs-3.c
> deleted file mode 100644
> index c2fa8968e77..00000000000
> --- a/gcc/testsuite/gcc.target/i386/pie-copyrelocs-3.c
> +++ /dev/null
> @@ -1,14 +0,0 @@
> -/* Check that PLT is used to access glob_a. */
> -/* { dg-do compile { target *-*-linux* } } */
> -/* { dg-require-effective-target pie_copyreloc } */
> -/* { dg-options "-O2 -fpie" } */
> -
> -extern int glob_a (void);
> -
> -int foo ()
> -{
> - return glob_a ();
> -}
> -
> -/* glob_a should be accessed with a PLT. */
> -/* { dg-final { scan-assembler "glob_a@PLT" { target { ! ia32 } } } } */
> diff --git a/gcc/testsuite/gcc.target/i386/pie-copyrelocs-4.c b/gcc/testsuite/gcc.target/i386/pie-copyrelocs-4.c
> deleted file mode 100644
> index 413cdf381c3..00000000000
> --- a/gcc/testsuite/gcc.target/i386/pie-copyrelocs-4.c
> +++ /dev/null
> @@ -1,17 +0,0 @@
> -/* Check that GOTPCREL is used to access glob_a. */
> -/* { dg-do compile { target *-*-linux* } } */
> -/* { dg-require-effective-target pie_copyreloc } */
> -/* { dg-options "-O2 -fpie" } */
> -
> -extern int glob_a __attribute__((weak));
> -
> -int foo ()
> -{
> - if (&glob_a != 0)
> - return glob_a;
> - else
> - return 0;
> -}
> -
> -/* weak glob_a should be accessed with a GOTPCREL. */
> -/* { dg-final { scan-assembler "glob_a@GOTPCREL" { target { ! ia32 } } } } */
> diff --git a/gcc/testsuite/lib/target-supports.exp b/gcc/testsuite/lib/target-supports.exp
> index 5700c231065..6f922ebf2ab 100644
> --- a/gcc/testsuite/lib/target-supports.exp
> +++ b/gcc/testsuite/lib/target-supports.exp
> @@ -10133,53 +10133,6 @@ proc scan-ltrans-tree-dump-dem-not_required_options {} {
> return "-flto-partition=one"
> }
>
> -# Return 1 if the x86-64 target supports PIE with copy reloc, 0
> -# otherwise. Cache the result.
> -
> -proc check_effective_target_pie_copyreloc { } {
> - global tool
> - global GCC_UNDER_TEST
> -
> - if { !([istarget i?86-*-*] || [istarget x86_64-*-*]) } {
> - return 0
> - }
> -
> - # Need auto-host.h to check linker support.
> - if { ![file exists ../../auto-host.h ] } {
> - return 0
> - }
> -
> - return [check_cached_effective_target pie_copyreloc {
> - # Set up and compile to see if linker supports PIE with copy
> - # reloc. Include the current process ID in the file names to
> - # prevent conflicts with invocations for multiple testsuites.
> -
> - set src pie[pid].c
> - set obj pie[pid].o
> -
> - set f [open $src "w"]
> - puts $f "#include \"../../auto-host.h\""
> - puts $f "#if HAVE_LD_PIE_COPYRELOC == 0"
> - puts $f "# error Linker does not support PIE with copy reloc."
> - puts $f "#endif"
> - close $f
> -
> - verbose "check_effective_target_pie_copyreloc compiling testfile $src" 2
> - set lines [${tool}_target_compile $src $obj object ""]
> -
> - file delete $src
> - file delete $obj
> -
> - if [string match "" $lines] then {
> - verbose "check_effective_target_pie_copyreloc testfile compilation passed" 2
> - return 1
> - } else {
> - verbose "check_effective_target_pie_copyreloc testfile compilation failed" 2
> - return 0
> - }
> - }]
> -}
> -
> # Return 1 if the x86 target supports R_386_GOT32X relocation, 0
> # otherwise. Cache the result.
>
> --
> 2.31.1.607.g51e8a6a459-goog
>
@@ -1659,12 +1659,6 @@
#endif
-/* Define 0/1 if your linker supports -pie option with copy reloc. */
-#ifndef USED_FOR_TARGET
-#undef HAVE_LD_PIE_COPYRELOC
-#endif
-
-
/* Define if your PowerPC linker has .gnu.attributes long double support. */
#ifndef USED_FOR_TARGET
#undef HAVE_LD_PPC_GNU_ATTR_LONG_DOUBLE
@@ -10579,11 +10579,7 @@ legitimate_pic_address_disp_p (rtx disp)
return true;
}
else if (!SYMBOL_REF_FAR_ADDR_P (op0)
- && (SYMBOL_REF_LOCAL_P (op0)
- || (HAVE_LD_PIE_COPYRELOC
- && flag_pie
- && !SYMBOL_REF_WEAK (op0)
- && !SYMBOL_REF_FUNCTION_P (op0)))
+ && SYMBOL_REF_LOCAL_P (op0)
&& ix86_cmodel != CM_LARGE_PIC)
return true;
break;
@@ -22892,10 +22888,7 @@ ix86_atomic_assign_expand_fenv (tree *hold, tree *clear, tree *update)
static bool
ix86_binds_local_p (const_tree exp)
{
- return default_binds_local_p_3 (exp, flag_shlib != 0, true, true,
- (!flag_pic
- || (TARGET_64BIT
- && HAVE_LD_PIE_COPYRELOC != 0)));
+ return default_binds_local_p_3 (exp, flag_shlib != 0, true, true, !flag_pic);
}
#endif
@@ -29968,58 +29968,6 @@ fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_ld_pie" >&5
$as_echo "$gcc_cv_ld_pie" >&6; }
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking linker PIE support with copy reloc" >&5
-$as_echo_n "checking linker PIE support with copy reloc... " >&6; }
-gcc_cv_ld_pie_copyreloc=no
-if test $gcc_cv_ld_pie = yes ; then
- if test $in_tree_ld = yes ; then
- if test "$gcc_cv_gld_major_version" -eq 2 -a "$gcc_cv_gld_minor_version" -ge 25 -o "$gcc_cv_gld_major_version" -gt 2; then
- gcc_cv_ld_pie_copyreloc=yes
- fi
- elif test x$gcc_cv_as != x -a x$gcc_cv_ld != x ; then
- # Check if linker supports -pie option with copy reloc
- case "$target" in
- i?86-*-linux* | x86_64-*-linux*)
- cat > conftest1.s <<EOF
- .globl a_glob
- .data
- .type a_glob, @object
- .size a_glob, 4
-a_glob:
- .long 2
-EOF
- cat > conftest2.s <<EOF
- .text
- .globl main
- .type main, @function
-main:
- movl %eax, a_glob(%rip)
- .size main, .-main
- .globl ptr
- .section .data.rel,"aw",@progbits
- .type ptr, @object
-ptr:
- .quad a_glob
-EOF
- if $gcc_cv_as --64 -o conftest1.o conftest1.s > /dev/null 2>&1 \
- && $gcc_cv_ld -shared -melf_x86_64 -o conftest1.so conftest1.o > /dev/null 2>&1 \
- && $gcc_cv_as --64 -o conftest2.o conftest2.s > /dev/null 2>&1 \
- && $gcc_cv_ld -pie -melf_x86_64 -o conftest conftest2.o conftest1.so > /dev/null 2>&1; then
- gcc_cv_ld_pie_copyreloc=yes
- fi
- rm -f conftest conftest1.so conftest1.o conftest2.o conftest1.s conftest2.s
- ;;
- esac
- fi
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_LD_PIE_COPYRELOC `if test x"$gcc_cv_ld_pie_copyreloc" = xyes; then echo 1; else echo 0; fi`
-_ACEOF
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_ld_pie_copyreloc" >&5
-$as_echo "$gcc_cv_ld_pie_copyreloc" >&6; }
-
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking linker EH-compatible garbage collection of sections" >&5
$as_echo_n "checking linker EH-compatible garbage collection of sections... " >&6; }
gcc_cv_ld_eh_gc_sections=no
@@ -5924,54 +5924,6 @@ if test x"$gcc_cv_ld_pie" = xyes; then
fi
AC_MSG_RESULT($gcc_cv_ld_pie)
-AC_MSG_CHECKING(linker PIE support with copy reloc)
-gcc_cv_ld_pie_copyreloc=no
-if test $gcc_cv_ld_pie = yes ; then
- if test $in_tree_ld = yes ; then
- if test "$gcc_cv_gld_major_version" -eq 2 -a "$gcc_cv_gld_minor_version" -ge 25 -o "$gcc_cv_gld_major_version" -gt 2; then
- gcc_cv_ld_pie_copyreloc=yes
- fi
- elif test x$gcc_cv_as != x -a x$gcc_cv_ld != x ; then
- # Check if linker supports -pie option with copy reloc
- case "$target" in
- i?86-*-linux* | x86_64-*-linux*)
- cat > conftest1.s <<EOF
- .globl a_glob
- .data
- .type a_glob, @object
- .size a_glob, 4
-a_glob:
- .long 2
-EOF
- cat > conftest2.s <<EOF
- .text
- .globl main
- .type main, @function
-main:
- movl %eax, a_glob(%rip)
- .size main, .-main
- .globl ptr
- .section .data.rel,"aw",@progbits
- .type ptr, @object
-ptr:
- .quad a_glob
-EOF
- if $gcc_cv_as --64 -o conftest1.o conftest1.s > /dev/null 2>&1 \
- && $gcc_cv_ld -shared -melf_x86_64 -o conftest1.so conftest1.o > /dev/null 2>&1 \
- && $gcc_cv_as --64 -o conftest2.o conftest2.s > /dev/null 2>&1 \
- && $gcc_cv_ld -pie -melf_x86_64 -o conftest conftest2.o conftest1.so > /dev/null 2>&1; then
- gcc_cv_ld_pie_copyreloc=yes
- fi
- rm -f conftest conftest1.so conftest1.o conftest2.o conftest1.s conftest2.s
- ;;
- esac
- fi
-fi
-AC_DEFINE_UNQUOTED(HAVE_LD_PIE_COPYRELOC,
- [`if test x"$gcc_cv_ld_pie_copyreloc" = xyes; then echo 1; else echo 0; fi`],
- [Define 0/1 if your linker supports -pie option with copy reloc.])
-AC_MSG_RESULT($gcc_cv_ld_pie_copyreloc)
-
AC_MSG_CHECKING(linker EH-compatible garbage collection of sections)
gcc_cv_ld_eh_gc_sections=no
if test $in_tree_ld = yes ; then
@@ -2383,9 +2383,6 @@ Target supports FPU instructions.
@item non_strict_align
Target does not require strict alignment.
-@item pie_copyreloc
-The x86-64 target linker supports PIE with copy reloc.
-
@item rdrand
Target supports x86 @code{rdrand} instruction.
deleted file mode 100644
@@ -1,14 +0,0 @@
-/* Check that GOTPCREL isn't used to access glob_a. */
-/* { dg-do compile { target *-*-linux* } } */
-/* { dg-require-effective-target pie_copyreloc } */
-/* { dg-options "-O2 -fpie" } */
-
-extern int glob_a;
-
-int foo ()
-{
- return glob_a;
-}
-
-/* glob_a should never be accessed with a GOTPCREL. */
-/* { dg-final { scan-assembler-not "glob_a@GOTPCREL" { target { ! ia32 } } } } */
deleted file mode 100644
@@ -1,14 +0,0 @@
-/* Check that GOTPCREL isn't used to access glob_a. */
-/* { dg-do compile { target *-*-linux* } } */
-/* { dg-require-effective-target pie_copyreloc } */
-/* { dg-options "-O2 -fpie" } */
-
-int glob_a;
-
-int foo ()
-{
- return glob_a;
-}
-
-/* glob_a should never be accessed with a GOTPCREL. */
-/* { dg-final { scan-assembler-not "glob_a@GOTPCREL" { target { ! ia32 } } } } */
deleted file mode 100644
@@ -1,14 +0,0 @@
-/* Check that PLT is used to access glob_a. */
-/* { dg-do compile { target *-*-linux* } } */
-/* { dg-require-effective-target pie_copyreloc } */
-/* { dg-options "-O2 -fpie" } */
-
-extern int glob_a (void);
-
-int foo ()
-{
- return glob_a ();
-}
-
-/* glob_a should be accessed with a PLT. */
-/* { dg-final { scan-assembler "glob_a@PLT" { target { ! ia32 } } } } */
deleted file mode 100644
@@ -1,17 +0,0 @@
-/* Check that GOTPCREL is used to access glob_a. */
-/* { dg-do compile { target *-*-linux* } } */
-/* { dg-require-effective-target pie_copyreloc } */
-/* { dg-options "-O2 -fpie" } */
-
-extern int glob_a __attribute__((weak));
-
-int foo ()
-{
- if (&glob_a != 0)
- return glob_a;
- else
- return 0;
-}
-
-/* weak glob_a should be accessed with a GOTPCREL. */
-/* { dg-final { scan-assembler "glob_a@GOTPCREL" { target { ! ia32 } } } } */
@@ -10133,53 +10133,6 @@ proc scan-ltrans-tree-dump-dem-not_required_options {} {
return "-flto-partition=one"
}
-# Return 1 if the x86-64 target supports PIE with copy reloc, 0
-# otherwise. Cache the result.
-
-proc check_effective_target_pie_copyreloc { } {
- global tool
- global GCC_UNDER_TEST
-
- if { !([istarget i?86-*-*] || [istarget x86_64-*-*]) } {
- return 0
- }
-
- # Need auto-host.h to check linker support.
- if { ![file exists ../../auto-host.h ] } {
- return 0
- }
-
- return [check_cached_effective_target pie_copyreloc {
- # Set up and compile to see if linker supports PIE with copy
- # reloc. Include the current process ID in the file names to
- # prevent conflicts with invocations for multiple testsuites.
-
- set src pie[pid].c
- set obj pie[pid].o
-
- set f [open $src "w"]
- puts $f "#include \"../../auto-host.h\""
- puts $f "#if HAVE_LD_PIE_COPYRELOC == 0"
- puts $f "# error Linker does not support PIE with copy reloc."
- puts $f "#endif"
- close $f
-
- verbose "check_effective_target_pie_copyreloc compiling testfile $src" 2
- set lines [${tool}_target_compile $src $obj object ""]
-
- file delete $src
- file delete $obj
-
- if [string match "" $lines] then {
- verbose "check_effective_target_pie_copyreloc testfile compilation passed" 2
- return 1
- } else {
- verbose "check_effective_target_pie_copyreloc testfile compilation failed" 2
- return 0
- }
- }]
-}
-
# Return 1 if the x86 target supports R_386_GOT32X relocation, 0
# otherwise. Cache the result.