diff mbox series

x86-64: Remove HAVE_LD_PIE_COPYRELOC

Message ID 20210512032905.1612080-1-maskray@google.com
State New
Headers show
Series x86-64: Remove HAVE_LD_PIE_COPYRELOC | expand

Commit Message

Fāng-ruì Sòng May 12, 2021, 3:29 a.m. UTC
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

Rainer Orth May 12, 2021, 5:27 a.m. UTC | #1
Hi Fangrui,

> 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.

Solaris/x86 ld doesn't support this, so HAVE_LD_PIE_COPYRELOC needs to
stay.  The Solaris 11.3/x86 assembler doesn't support
R_X86_64_*GOTPCRELX.

	Rainer
Fāng-ruì Sòng May 12, 2021, 6:33 a.m. UTC | #2
On 2021-05-12, Rainer Orth wrote:
>Hi Fangrui,

Hi Rainer,

>> 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.
>
>Solaris/x86 ld doesn't support this, so HAVE_LD_PIE_COPYRELOC needs to
>stay.  The Solaris 11.3/x86 assembler doesn't support
>R_X86_64_*GOTPCRELX.

Then I'll suggest that platforms which don't support GOTPCRELX just take
the very little performance hit (global variable access really should
not be in bottleneck of any properly written applications).

Avoiding copy relocations is *much* more important than saving few bytes
in global variable access.

If an app still wants faster variable access, use protected[1]/hidden.

[1]: protected data symbol has poor performance, which is the next thing
which should be fixed.

>	Rainer
>
>-- 
>-----------------------------------------------------------------------------
>Rainer Orth, Center for Biotechnology, Bielefeld University
Fāng-ruì Sòng May 24, 2021, 4:43 p.m. UTC | #3
Ping https://gcc.gnu.org/pipermail/gcc-patches/2021-May/570139.html

On Tue, May 11, 2021 at 8:29 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
>
Fāng-ruì Sòng June 4, 2021, 10:04 p.m. UTC | #4
PING^2 https://gcc.gnu.org/pipermail/gcc-patches/2021-May/570139.html

On Mon, May 24, 2021 at 9:43 AM Fāng-ruì Sòng <maskray@google.com> wrote:
>
> Ping https://gcc.gnu.org/pipermail/gcc-patches/2021-May/570139.html
>
> On Tue, May 11, 2021 at 8:29 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
> >
>
>
> --
> 宋方睿
diff mbox series

Patch

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.