Re: [PATCH] x86-64: Remove HAVE_LD_PIE_COPYRELOC

2022-06-20 Thread Fangrui Song via Gcc-patches
On Wed, Jun 15, 2022 at 2:34 AM Fangrui Song  wrote:
>
> This was introduced in 2014-12 to use local binding for external symbols
> for -fPIE.  It avoids a GOT indirection but the same optimizationis
> obtained with ld's R_X86_64_[REX_]GOTPCRELX optimization (albeit with
> slightly longer code).
>
> One design goal of -fPIE was to avoid copy relocations.
> HAVE_LD_PIE_COPYRELOC has deviated from the goal.  By removing
> HAVE_LD_PIE_COPYRELOC, the -fPIE behavior of x86-64 will match x86-32
> and other targets.
>
> The design goal of protected symbols was to improve performance similar
> to -Bsymbolic.  lld rejects copy relocations on data symbols.  Latest
> glibc rtld reports a warning when a protected data symbol is copy
> relocated[1].  With the adoption of PIE most object files are -fPIE or
> -fPIC.  -fPIE defaulting to the possibly copy relocations behavior makes
> protected data symbols infeasible to adopt on x86-64.
>
> [1]: 
> https://sourceware.org/git/?p=glibc.git;a=commit;h=7374c02b683b7110b853a32496a619410364d70b
> ("elf: Refine direct extern access diagnostics to protected symbol")
> ---
>  gcc/config.in |  6 ---
>  gcc/config/i386/i386.cc   | 16 +-
>  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/gcc.target/i386/pr32219-9.c |  1 -
>  gcc/testsuite/lib/target-supports.exp | 47 -
>  11 files changed, 2 insertions(+), 230 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 16bb963b45b..ade42625deb 100644
> --- a/gcc/config.in
> +++ b/gcc/config.in
> @@ -1691,12 +1691,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.cc b/gcc/config/i386/i386.cc
> index 3d189e124e4..f9fd9650f7c 100644
> --- a/gcc/config/i386/i386.cc
> +++ b/gcc/config/i386/i386.cc
> @@ -10790,16 +10790,7 @@ legitimate_pic_address_disp_p (rtx disp)
>   || ix86_cmodel == CM_SMALL_PIC)
> return true;
> }
> - else if (!SYMBOL_REF_FAR_ADDR_P (op0)
> -  && (SYMBOL_REF_LOCAL_P (op0)
> -  || ((ix86_direct_extern_access
> -   && !(SYMBOL_REF_DECL (op0)
> -&& lookup_attribute 
> ("nodirect_extern_access",
> - DECL_ATTRIBUTES 
> (SYMBOL_REF_DECL (op0)
> -  && HAVE_LD_PIE_COPYRELOC
> -  && flag_pie
> -  && !SYMBOL_REF_WEAK (op0)
> -  && !SYMBOL_REF_FUNCTION_P (op0)))
> + else if (!SYMBOL_REF_FAR_ADDR_P (op0) && SYMBOL_REF_LOCAL_P (op0)
>&& ix86_cmodel != CM_LARGE_PIC)
> return true;
>   break;
> @@ -23815,10 +23806,7 @@ ix86_binds_local_p (const_tree exp)
>  ix86_has_no_direct_extern_access = true;
>return default_binds_local_p_3 (exp, flag_shlib != 0, true,
>   direct_extern_access,
> - (direct_extern_access
> -  && (!flag_pic
> -  || (TARGET_64BIT
> -  && HAVE_LD_PIE_COPYRELOC != 0;
> + (direct_extern_access && !flag_pic));
>  }
>
>  /* If flag_pic or ix86_direct_extern_access is false, then neither
> diff --git a/gcc/configure b/gcc/configure
> index f43dc989d02..bf8aaec6e05 100755
> --- a/gcc/configure
> +++ b/gcc/configure
> @@ -30081,58 +30081,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" 
>

[PATCH] x86-64: Remove HAVE_LD_PIE_COPYRELOC

2022-06-15 Thread Fangrui Song via Gcc-patches
This was introduced in 2014-12 to use local binding for external symbols
for -fPIE.  It avoids a GOT indirection but the same optimizationis
obtained with ld's R_X86_64_[REX_]GOTPCRELX optimization (albeit with
slightly longer code).

One design goal of -fPIE was to avoid copy relocations.
HAVE_LD_PIE_COPYRELOC has deviated from the goal.  By removing
HAVE_LD_PIE_COPYRELOC, the -fPIE behavior of x86-64 will match x86-32
and other targets.

The design goal of protected symbols was to improve performance similar
to -Bsymbolic.  lld rejects copy relocations on data symbols.  Latest
glibc rtld reports a warning when a protected data symbol is copy
relocated[1].  With the adoption of PIE most object files are -fPIE or
-fPIC.  -fPIE defaulting to the possibly copy relocations behavior makes
protected data symbols infeasible to adopt on x86-64.

[1]: 
https://sourceware.org/git/?p=glibc.git;a=commit;h=7374c02b683b7110b853a32496a619410364d70b
("elf: Refine direct extern access diagnostics to protected symbol")
---
 gcc/config.in |  6 ---
 gcc/config/i386/i386.cc   | 16 +-
 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/gcc.target/i386/pr32219-9.c |  1 -
 gcc/testsuite/lib/target-supports.exp | 47 -
 11 files changed, 2 insertions(+), 230 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 16bb963b45b..ade42625deb 100644
--- a/gcc/config.in
+++ b/gcc/config.in
@@ -1691,12 +1691,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.cc b/gcc/config/i386/i386.cc
index 3d189e124e4..f9fd9650f7c 100644
--- a/gcc/config/i386/i386.cc
+++ b/gcc/config/i386/i386.cc
@@ -10790,16 +10790,7 @@ legitimate_pic_address_disp_p (rtx disp)
  || ix86_cmodel == CM_SMALL_PIC)
return true;
}
- else if (!SYMBOL_REF_FAR_ADDR_P (op0)
-  && (SYMBOL_REF_LOCAL_P (op0)
-  || ((ix86_direct_extern_access
-   && !(SYMBOL_REF_DECL (op0)
-&& lookup_attribute ("nodirect_extern_access",
- DECL_ATTRIBUTES 
(SYMBOL_REF_DECL (op0)
-  && HAVE_LD_PIE_COPYRELOC
-  && flag_pie
-  && !SYMBOL_REF_WEAK (op0)
-  && !SYMBOL_REF_FUNCTION_P (op0)))
+ else if (!SYMBOL_REF_FAR_ADDR_P (op0) && SYMBOL_REF_LOCAL_P (op0)
   && ix86_cmodel != CM_LARGE_PIC)
return true;
  break;
@@ -23815,10 +23806,7 @@ ix86_binds_local_p (const_tree exp)
 ix86_has_no_direct_extern_access = true;
   return default_binds_local_p_3 (exp, flag_shlib != 0, true,
  direct_extern_access,
- (direct_extern_access
-  && (!flag_pic
-  || (TARGET_64BIT
-  && HAVE_LD_PIE_COPYRELOC != 0;
+ (direct_extern_access && !flag_pic));
 }
 
 /* If flag_pic or ix86_direct_extern_access is false, then neither
diff --git a/gcc/configure b/gcc/configure
index f43dc989d02..bf8aaec6e05 100755
--- a/gcc/configure
+++ b/gcc/configure
@@ -30081,58 +30081,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

Re: [PATCH] x86-64: Remove HAVE_LD_PIE_COPYRELOC

2022-06-02 Thread Fāng-ruì Sòng via Gcc-patches
On Sun, Oct 31, 2021 at 7:36 PM Fāng-ruì Sòng  wrote:
>
> On Fri, Oct 8, 2021 at 10:57 AM Fāng-ruì Sòng  wrote:
> >
> > On Fri, Sep 24, 2021 at 11:29 AM H.J. Lu  wrote:
> > >
> > > On Fri, Sep 24, 2021 at 11:14 AM Fāng-ruì Sòng  wrote:
> > > >
> > > > On Fri, Sep 24, 2021 at 10:41 AM H.J. Lu  wrote:
> > > > >
> > > > > On Fri, Sep 24, 2021 at 10:29 AM Fāng-ruì Sòng  
> > > > > wrote:
> > > > > >
> > > > > >  On Tue, Sep 21, 2021 at 7:08 PM Fāng-ruì Sòng  
> > > > > > wrote:
> > > > > > >
> > > > > > > On Tue, Sep 21, 2021 at 6:57 PM H.J. Lu  
> > > > > > > wrote:
> > > > > > > >
> > > > > > > > On Tue, Sep 21, 2021 at 9:16 AM Uros Bizjak  
> > > > > > > > wrote:
> > > > > > > > >
> > > > > > > > > On Mon, Sep 20, 2021 at 8:20 PM Fāng-ruì Sòng via Gcc-patches
> > > > > > > > >  wrote:
> > > > > > > > > >
> > > > > > > > > > PING^5 
> > > > > > > > > > https://gcc.gnu.org/pipermail/gcc-patches/2021-May/570139.html
> > > > > > > > > >
> > > > > > > > > > On Sat, Sep 4, 2021 at 12:11 PM Fāng-ruì Sòng 
> > > > > > > > > >  wrote:
> > > > > > > > > > >
> > > > > > > > > > > PING^4 
> > > > > > > > > > > https://gcc.gnu.org/pipermail/gcc-patches/2021-May/570139.html
> > > > > > > > > > >
> > > > > > > > > > > One major design goal of PIE was to avoid copy 
> > > > > > > > > > > relocations.
> > > > > > > > > > > The original patch for GCC 5 caused problems for many 
> > > > > > > > > > > years.
> > > > > > > > > > >
> > > > > > > > > > > On Wed, Aug 18, 2021 at 11:54 PM Fāng-ruì Sòng 
> > > > > > > > > > >  wrote:
> > > > > > > > > > >>
> > > > > > > > > > >> PING^3 
> > > > > > > > > > >> https://gcc.gnu.org/pipermail/gcc-patches/2021-May/570139.html
> > > > > > > > > > >>
> > > > > > > > > > >> On Fri, Jun 4, 2021 at 3:04 PM Fāng-ruì Sòng 
> > > > > > > > > > >>  wrote:
> > > > > > > > > > >> >
> > > > > > > > > > >> > 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 
> > > > > > > > > > >> >  wrote:
> > > > > > > > > > >> > >
> > > > > > > > > > >> > > Ping 
> > > > > > > > > > >> > > https://gcc.gnu.org/pipermail/gcc-patches/2021-May/570139.html
> > > > > > > > > > >> > >
> > > > > > > > > > >> > > On Tue, May 11, 2021 at 8:29 PM Fangrui Song 
> > > > > > > > > > >> > >  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

Re: [PATCH] x86-64: Remove HAVE_LD_PIE_COPYRELOC

2021-10-31 Thread Fāng-ruì Sòng via Gcc-patches
On Fri, Oct 8, 2021 at 10:57 AM Fāng-ruì Sòng  wrote:
>
> On Fri, Sep 24, 2021 at 11:29 AM H.J. Lu  wrote:
> >
> > On Fri, Sep 24, 2021 at 11:14 AM Fāng-ruì Sòng  wrote:
> > >
> > > On Fri, Sep 24, 2021 at 10:41 AM H.J. Lu  wrote:
> > > >
> > > > On Fri, Sep 24, 2021 at 10:29 AM Fāng-ruì Sòng  
> > > > wrote:
> > > > >
> > > > >  On Tue, Sep 21, 2021 at 7:08 PM Fāng-ruì Sòng  
> > > > > wrote:
> > > > > >
> > > > > > On Tue, Sep 21, 2021 at 6:57 PM H.J. Lu  wrote:
> > > > > > >
> > > > > > > On Tue, Sep 21, 2021 at 9:16 AM Uros Bizjak  
> > > > > > > wrote:
> > > > > > > >
> > > > > > > > On Mon, Sep 20, 2021 at 8:20 PM Fāng-ruì Sòng via Gcc-patches
> > > > > > > >  wrote:
> > > > > > > > >
> > > > > > > > > PING^5 
> > > > > > > > > https://gcc.gnu.org/pipermail/gcc-patches/2021-May/570139.html
> > > > > > > > >
> > > > > > > > > On Sat, Sep 4, 2021 at 12:11 PM Fāng-ruì Sòng 
> > > > > > > > >  wrote:
> > > > > > > > > >
> > > > > > > > > > PING^4 
> > > > > > > > > > https://gcc.gnu.org/pipermail/gcc-patches/2021-May/570139.html
> > > > > > > > > >
> > > > > > > > > > One major design goal of PIE was to avoid copy relocations.
> > > > > > > > > > The original patch for GCC 5 caused problems for many years.
> > > > > > > > > >
> > > > > > > > > > On Wed, Aug 18, 2021 at 11:54 PM Fāng-ruì Sòng 
> > > > > > > > > >  wrote:
> > > > > > > > > >>
> > > > > > > > > >> PING^3 
> > > > > > > > > >> https://gcc.gnu.org/pipermail/gcc-patches/2021-May/570139.html
> > > > > > > > > >>
> > > > > > > > > >> On Fri, Jun 4, 2021 at 3:04 PM Fāng-ruì Sòng 
> > > > > > > > > >>  wrote:
> > > > > > > > > >> >
> > > > > > > > > >> > 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 
> > > > > > > > > >> >  wrote:
> > > > > > > > > >> > >
> > > > > > > > > >> > > Ping 
> > > > > > > > > >> > > https://gcc.gnu.org/pipermail/gcc-patches/2021-May/570139.html
> > > > > > > > > >> > >
> > > > > > > > > >> > > On Tue, May 11, 2021 at 8:29 PM Fangrui Song 
> > > > > > > > > >> > >  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 
> > > > > > > > > >> > >

Re: [PATCH] x86-64: Remove HAVE_LD_PIE_COPYRELOC

2021-10-08 Thread Fāng-ruì Sòng via Gcc-patches
On Fri, Sep 24, 2021 at 11:29 AM H.J. Lu  wrote:
>
> On Fri, Sep 24, 2021 at 11:14 AM Fāng-ruì Sòng  wrote:
> >
> > On Fri, Sep 24, 2021 at 10:41 AM H.J. Lu  wrote:
> > >
> > > On Fri, Sep 24, 2021 at 10:29 AM Fāng-ruì Sòng  wrote:
> > > >
> > > >  On Tue, Sep 21, 2021 at 7:08 PM Fāng-ruì Sòng  
> > > > wrote:
> > > > >
> > > > > On Tue, Sep 21, 2021 at 6:57 PM H.J. Lu  wrote:
> > > > > >
> > > > > > On Tue, Sep 21, 2021 at 9:16 AM Uros Bizjak  
> > > > > > wrote:
> > > > > > >
> > > > > > > On Mon, Sep 20, 2021 at 8:20 PM Fāng-ruì Sòng via Gcc-patches
> > > > > > >  wrote:
> > > > > > > >
> > > > > > > > PING^5 
> > > > > > > > https://gcc.gnu.org/pipermail/gcc-patches/2021-May/570139.html
> > > > > > > >
> > > > > > > > On Sat, Sep 4, 2021 at 12:11 PM Fāng-ruì Sòng 
> > > > > > > >  wrote:
> > > > > > > > >
> > > > > > > > > PING^4 
> > > > > > > > > https://gcc.gnu.org/pipermail/gcc-patches/2021-May/570139.html
> > > > > > > > >
> > > > > > > > > One major design goal of PIE was to avoid copy relocations.
> > > > > > > > > The original patch for GCC 5 caused problems for many years.
> > > > > > > > >
> > > > > > > > > On Wed, Aug 18, 2021 at 11:54 PM Fāng-ruì Sòng 
> > > > > > > > >  wrote:
> > > > > > > > >>
> > > > > > > > >> PING^3 
> > > > > > > > >> https://gcc.gnu.org/pipermail/gcc-patches/2021-May/570139.html
> > > > > > > > >>
> > > > > > > > >> On Fri, Jun 4, 2021 at 3:04 PM Fāng-ruì Sòng 
> > > > > > > > >>  wrote:
> > > > > > > > >> >
> > > > > > > > >> > 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 
> > > > > > > > >> >  wrote:
> > > > > > > > >> > >
> > > > > > > > >> > > Ping 
> > > > > > > > >> > > https://gcc.gnu.org/pipermail/gcc-patches/2021-May/570139.html
> > > > > > > > >> > >
> > > > > > > > >> > > On Tue, May 11, 2021 at 8:29 PM Fangrui Song 
> > > > > > > > >> > >  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 
> > > > > >

Re: [PATCH] x86-64: Remove HAVE_LD_PIE_COPYRELOC

2021-09-24 Thread H.J. Lu via Gcc-patches
On Fri, Sep 24, 2021 at 11:14 AM Fāng-ruì Sòng  wrote:
>
> On Fri, Sep 24, 2021 at 10:41 AM H.J. Lu  wrote:
> >
> > On Fri, Sep 24, 2021 at 10:29 AM Fāng-ruì Sòng  wrote:
> > >
> > >  On Tue, Sep 21, 2021 at 7:08 PM Fāng-ruì Sòng  wrote:
> > > >
> > > > On Tue, Sep 21, 2021 at 6:57 PM H.J. Lu  wrote:
> > > > >
> > > > > On Tue, Sep 21, 2021 at 9:16 AM Uros Bizjak  wrote:
> > > > > >
> > > > > > On Mon, Sep 20, 2021 at 8:20 PM Fāng-ruì Sòng via Gcc-patches
> > > > > >  wrote:
> > > > > > >
> > > > > > > PING^5 
> > > > > > > https://gcc.gnu.org/pipermail/gcc-patches/2021-May/570139.html
> > > > > > >
> > > > > > > On Sat, Sep 4, 2021 at 12:11 PM Fāng-ruì Sòng 
> > > > > > >  wrote:
> > > > > > > >
> > > > > > > > PING^4 
> > > > > > > > https://gcc.gnu.org/pipermail/gcc-patches/2021-May/570139.html
> > > > > > > >
> > > > > > > > One major design goal of PIE was to avoid copy relocations.
> > > > > > > > The original patch for GCC 5 caused problems for many years.
> > > > > > > >
> > > > > > > > On Wed, Aug 18, 2021 at 11:54 PM Fāng-ruì Sòng 
> > > > > > > >  wrote:
> > > > > > > >>
> > > > > > > >> PING^3 
> > > > > > > >> https://gcc.gnu.org/pipermail/gcc-patches/2021-May/570139.html
> > > > > > > >>
> > > > > > > >> On Fri, Jun 4, 2021 at 3:04 PM Fāng-ruì Sòng 
> > > > > > > >>  wrote:
> > > > > > > >> >
> > > > > > > >> > 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 
> > > > > > > >> >  wrote:
> > > > > > > >> > >
> > > > > > > >> > > Ping 
> > > > > > > >> > > https://gcc.gnu.org/pipermail/gcc-patches/2021-May/570139.html
> > > > > > > >> > >
> > > > > > > >> > > On Tue, May 11, 2021 at 8:29 PM Fangrui Song 
> > > > > > > >> > >  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
> > > > > >
> > > > > > From x86 maintainer's PoV, the implementation is trivially correct,
> > > > > > but I have no idea about functionality. HJ, can you please review 
> > > > > > the
> > > > > > functionality and post your opinion on the patch to move it forward?
> > > > > >
> > > > > > Thanks,
> > > > > 

Re: [PATCH] x86-64: Remove HAVE_LD_PIE_COPYRELOC

2021-09-24 Thread Fāng-ruì Sòng via Gcc-patches
On Fri, Sep 24, 2021 at 10:41 AM H.J. Lu  wrote:
>
> On Fri, Sep 24, 2021 at 10:29 AM Fāng-ruì Sòng  wrote:
> >
> >  On Tue, Sep 21, 2021 at 7:08 PM Fāng-ruì Sòng  wrote:
> > >
> > > On Tue, Sep 21, 2021 at 6:57 PM H.J. Lu  wrote:
> > > >
> > > > On Tue, Sep 21, 2021 at 9:16 AM Uros Bizjak  wrote:
> > > > >
> > > > > On Mon, Sep 20, 2021 at 8:20 PM Fāng-ruì Sòng via Gcc-patches
> > > > >  wrote:
> > > > > >
> > > > > > PING^5 
> > > > > > https://gcc.gnu.org/pipermail/gcc-patches/2021-May/570139.html
> > > > > >
> > > > > > On Sat, Sep 4, 2021 at 12:11 PM Fāng-ruì Sòng  
> > > > > > wrote:
> > > > > > >
> > > > > > > PING^4 
> > > > > > > https://gcc.gnu.org/pipermail/gcc-patches/2021-May/570139.html
> > > > > > >
> > > > > > > One major design goal of PIE was to avoid copy relocations.
> > > > > > > The original patch for GCC 5 caused problems for many years.
> > > > > > >
> > > > > > > On Wed, Aug 18, 2021 at 11:54 PM Fāng-ruì Sòng 
> > > > > > >  wrote:
> > > > > > >>
> > > > > > >> PING^3 
> > > > > > >> https://gcc.gnu.org/pipermail/gcc-patches/2021-May/570139.html
> > > > > > >>
> > > > > > >> On Fri, Jun 4, 2021 at 3:04 PM Fāng-ruì Sòng 
> > > > > > >>  wrote:
> > > > > > >> >
> > > > > > >> > 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 
> > > > > > >> >  wrote:
> > > > > > >> > >
> > > > > > >> > > Ping 
> > > > > > >> > > https://gcc.gnu.org/pipermail/gcc-patches/2021-May/570139.html
> > > > > > >> > >
> > > > > > >> > > On Tue, May 11, 2021 at 8:29 PM Fangrui Song 
> > > > > > >> > >  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
> > > > >
> > > > > From x86 maintainer's PoV, the implementation is trivially correct,
> > > > > but I have no idea about functionality. HJ, can you please review the
> > > > > functionality and post your opinion on the patch to move it forward?
> > > > >
> > > > > Thanks,
> > > > > Uros.
> > > >
> > > > I prefer to leave it alone and apply this:
> > > >
> > > > https://gcc.gnu.org/pipermail/gcc-patches/2021-August/576736.html
> > > >
> > > > instead.  I am working to add a nodirect_extern_access attribute based
> > > > on feedback at LPC 2021.
> > >
> > > I think -fpie sho

Re: [PATCH] x86-64: Remove HAVE_LD_PIE_COPYRELOC

2021-09-24 Thread H.J. Lu via Gcc-patches
On Fri, Sep 24, 2021 at 10:29 AM Fāng-ruì Sòng  wrote:
>
>  On Tue, Sep 21, 2021 at 7:08 PM Fāng-ruì Sòng  wrote:
> >
> > On Tue, Sep 21, 2021 at 6:57 PM H.J. Lu  wrote:
> > >
> > > On Tue, Sep 21, 2021 at 9:16 AM Uros Bizjak  wrote:
> > > >
> > > > On Mon, Sep 20, 2021 at 8:20 PM Fāng-ruì Sòng via Gcc-patches
> > > >  wrote:
> > > > >
> > > > > PING^5 https://gcc.gnu.org/pipermail/gcc-patches/2021-May/570139.html
> > > > >
> > > > > On Sat, Sep 4, 2021 at 12:11 PM Fāng-ruì Sòng  
> > > > > wrote:
> > > > > >
> > > > > > PING^4 
> > > > > > https://gcc.gnu.org/pipermail/gcc-patches/2021-May/570139.html
> > > > > >
> > > > > > One major design goal of PIE was to avoid copy relocations.
> > > > > > The original patch for GCC 5 caused problems for many years.
> > > > > >
> > > > > > On Wed, Aug 18, 2021 at 11:54 PM Fāng-ruì Sòng  
> > > > > > wrote:
> > > > > >>
> > > > > >> PING^3 
> > > > > >> https://gcc.gnu.org/pipermail/gcc-patches/2021-May/570139.html
> > > > > >>
> > > > > >> On Fri, Jun 4, 2021 at 3:04 PM Fāng-ruì Sòng  
> > > > > >> wrote:
> > > > > >> >
> > > > > >> > 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 
> > > > > >> >  wrote:
> > > > > >> > >
> > > > > >> > > Ping 
> > > > > >> > > https://gcc.gnu.org/pipermail/gcc-patches/2021-May/570139.html
> > > > > >> > >
> > > > > >> > > On Tue, May 11, 2021 at 8:29 PM Fangrui Song 
> > > > > >> > >  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
> > > >
> > > > From x86 maintainer's PoV, the implementation is trivially correct,
> > > > but I have no idea about functionality. HJ, can you please review the
> > > > functionality and post your opinion on the patch to move it forward?
> > > >
> > > > Thanks,
> > > > Uros.
> > >
> > > I prefer to leave it alone and apply this:
> > >
> > > https://gcc.gnu.org/pipermail/gcc-patches/2021-August/576736.html
> > >
> > > instead.  I am working to add a nodirect_extern_access attribute based
> > > on feedback at LPC 2021.
> >
> > I think -fpie should be fixed as soon as possible.
> >
> > "Add -f[no-]direct-extern-access" says "-fdirect-extern-access is the 
> > default."
> > IMHO this is not a good choice for -fpie.
> > As the description of this patch says, one of the design goals of
> > -fpie is to avoid copy relocations.
> >
> > > In exec

Re: [PATCH] x86-64: Remove HAVE_LD_PIE_COPYRELOC

2021-09-24 Thread Fāng-ruì Sòng via Gcc-patches
 On Tue, Sep 21, 2021 at 7:08 PM Fāng-ruì Sòng  wrote:
>
> On Tue, Sep 21, 2021 at 6:57 PM H.J. Lu  wrote:
> >
> > On Tue, Sep 21, 2021 at 9:16 AM Uros Bizjak  wrote:
> > >
> > > On Mon, Sep 20, 2021 at 8:20 PM Fāng-ruì Sòng via Gcc-patches
> > >  wrote:
> > > >
> > > > PING^5 https://gcc.gnu.org/pipermail/gcc-patches/2021-May/570139.html
> > > >
> > > > On Sat, Sep 4, 2021 at 12:11 PM Fāng-ruì Sòng  
> > > > wrote:
> > > > >
> > > > > PING^4 https://gcc.gnu.org/pipermail/gcc-patches/2021-May/570139.html
> > > > >
> > > > > One major design goal of PIE was to avoid copy relocations.
> > > > > The original patch for GCC 5 caused problems for many years.
> > > > >
> > > > > On Wed, Aug 18, 2021 at 11:54 PM Fāng-ruì Sòng  
> > > > > wrote:
> > > > >>
> > > > >> PING^3 https://gcc.gnu.org/pipermail/gcc-patches/2021-May/570139.html
> > > > >>
> > > > >> On Fri, Jun 4, 2021 at 3:04 PM Fāng-ruì Sòng  
> > > > >> wrote:
> > > > >> >
> > > > >> > 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  
> > > > >> > wrote:
> > > > >> > >
> > > > >> > > Ping 
> > > > >> > > https://gcc.gnu.org/pipermail/gcc-patches/2021-May/570139.html
> > > > >> > >
> > > > >> > > On Tue, May 11, 2021 at 8:29 PM Fangrui Song 
> > > > >> > >  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
> > >
> > > From x86 maintainer's PoV, the implementation is trivially correct,
> > > but I have no idea about functionality. HJ, can you please review the
> > > functionality and post your opinion on the patch to move it forward?
> > >
> > > Thanks,
> > > Uros.
> >
> > I prefer to leave it alone and apply this:
> >
> > https://gcc.gnu.org/pipermail/gcc-patches/2021-August/576736.html
> >
> > instead.  I am working to add a nodirect_extern_access attribute based
> > on feedback at LPC 2021.
>
> I think -fpie should be fixed as soon as possible.
>
> "Add -f[no-]direct-extern-access" says "-fdirect-extern-access is the 
> default."
> IMHO this is not a good choice for -fpie.
> As the description of this patch says, one of the design goals of
> -fpie is to avoid copy relocations.
>
> > In executable and shared library, bind symbols with the STV_PROTECTED 
> > visibility locally
>
> As I have repeated many times (also Clang's behavior), STV_PROTECTED
> visibility symbol should be bound locally regardless of
> -fno-direct-extern-access.
>
> I think it is fair to say all of Michael Matz, Alan Modra, and I think
> adding so many beh

Re: [PATCH] x86-64: Remove HAVE_LD_PIE_COPYRELOC

2021-09-21 Thread Fāng-ruì Sòng via Gcc-patches
On Tue, Sep 21, 2021 at 6:57 PM H.J. Lu  wrote:
>
> On Tue, Sep 21, 2021 at 9:16 AM Uros Bizjak  wrote:
> >
> > On Mon, Sep 20, 2021 at 8:20 PM Fāng-ruì Sòng via Gcc-patches
> >  wrote:
> > >
> > > PING^5 https://gcc.gnu.org/pipermail/gcc-patches/2021-May/570139.html
> > >
> > > On Sat, Sep 4, 2021 at 12:11 PM Fāng-ruì Sòng  wrote:
> > > >
> > > > PING^4 https://gcc.gnu.org/pipermail/gcc-patches/2021-May/570139.html
> > > >
> > > > One major design goal of PIE was to avoid copy relocations.
> > > > The original patch for GCC 5 caused problems for many years.
> > > >
> > > > On Wed, Aug 18, 2021 at 11:54 PM Fāng-ruì Sòng  
> > > > wrote:
> > > >>
> > > >> PING^3 https://gcc.gnu.org/pipermail/gcc-patches/2021-May/570139.html
> > > >>
> > > >> On Fri, Jun 4, 2021 at 3:04 PM Fāng-ruì Sòng  
> > > >> wrote:
> > > >> >
> > > >> > 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  
> > > >> > wrote:
> > > >> > >
> > > >> > > Ping https://gcc.gnu.org/pipermail/gcc-patches/2021-May/570139.html
> > > >> > >
> > > >> > > On Tue, May 11, 2021 at 8:29 PM Fangrui Song  
> > > >> > > 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
> >
> > From x86 maintainer's PoV, the implementation is trivially correct,
> > but I have no idea about functionality. HJ, can you please review the
> > functionality and post your opinion on the patch to move it forward?
> >
> > Thanks,
> > Uros.
>
> I prefer to leave it alone and apply this:
>
> https://gcc.gnu.org/pipermail/gcc-patches/2021-August/576736.html
>
> instead.  I am working to add a nodirect_extern_access attribute based
> on feedback at LPC 2021.

I think -fpie should be fixed as soon as possible.

"Add -f[no-]direct-extern-access" says "-fdirect-extern-access is the default."
IMHO this is not a good choice for -fpie.
As the description of this patch says, one of the design goals of
-fpie is to avoid copy relocations.

> In executable and shared library, bind symbols with the STV_PROTECTED 
> visibility locally

As I have repeated many times (also Clang's behavior), STV_PROTECTED
visibility symbol should be bound locally regardless of
-fno-direct-extern-access.

I think it is fair to say all of Michael Matz, Alan Modra, and I think
adding so many behaviors under -fno-direct-extern-access is
over-engineering (well, because I don't think
-fno-direct-extern-access can be selected as the default behavior any
time soon).

https://maskray.me/blog/2021-01-09-copy-relocations-canonical-plt-entries-and-protected#summary


Re: [PATCH] x86-64: Remove HAVE_LD_PIE_COPYRELOC

2021-09-21 Thread H.J. Lu via Gcc-patches
On Tue, Sep 21, 2021 at 9:16 AM Uros Bizjak  wrote:
>
> On Mon, Sep 20, 2021 at 8:20 PM Fāng-ruì Sòng via Gcc-patches
>  wrote:
> >
> > PING^5 https://gcc.gnu.org/pipermail/gcc-patches/2021-May/570139.html
> >
> > On Sat, Sep 4, 2021 at 12:11 PM Fāng-ruì Sòng  wrote:
> > >
> > > PING^4 https://gcc.gnu.org/pipermail/gcc-patches/2021-May/570139.html
> > >
> > > One major design goal of PIE was to avoid copy relocations.
> > > The original patch for GCC 5 caused problems for many years.
> > >
> > > On Wed, Aug 18, 2021 at 11:54 PM Fāng-ruì Sòng  wrote:
> > >>
> > >> PING^3 https://gcc.gnu.org/pipermail/gcc-patches/2021-May/570139.html
> > >>
> > >> On Fri, Jun 4, 2021 at 3:04 PM Fāng-ruì Sòng  wrote:
> > >> >
> > >> > 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  
> > >> > wrote:
> > >> > >
> > >> > > Ping https://gcc.gnu.org/pipermail/gcc-patches/2021-May/570139.html
> > >> > >
> > >> > > On Tue, May 11, 2021 at 8:29 PM Fangrui Song  
> > >> > > 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
>
> From x86 maintainer's PoV, the implementation is trivially correct,
> but I have no idea about functionality. HJ, can you please review the
> functionality and post your opinion on the patch to move it forward?
>
> Thanks,
> Uros.

I prefer to leave it alone and apply this:

https://gcc.gnu.org/pipermail/gcc-patches/2021-August/576736.html

instead.  I am working to add a nodirect_extern_access attribute based
on feedback at LPC 2021.

-- 
H.J.


Re: [PATCH] x86-64: Remove HAVE_LD_PIE_COPYRELOC

2021-09-21 Thread Uros Bizjak via Gcc-patches
On Mon, Sep 20, 2021 at 8:20 PM Fāng-ruì Sòng via Gcc-patches
 wrote:
>
> PING^5 https://gcc.gnu.org/pipermail/gcc-patches/2021-May/570139.html
>
> On Sat, Sep 4, 2021 at 12:11 PM Fāng-ruì Sòng  wrote:
> >
> > PING^4 https://gcc.gnu.org/pipermail/gcc-patches/2021-May/570139.html
> >
> > One major design goal of PIE was to avoid copy relocations.
> > The original patch for GCC 5 caused problems for many years.
> >
> > On Wed, Aug 18, 2021 at 11:54 PM Fāng-ruì Sòng  wrote:
> >>
> >> PING^3 https://gcc.gnu.org/pipermail/gcc-patches/2021-May/570139.html
> >>
> >> On Fri, Jun 4, 2021 at 3:04 PM Fāng-ruì Sòng  wrote:
> >> >
> >> > 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  wrote:
> >> > >
> >> > > Ping https://gcc.gnu.org/pipermail/gcc-patches/2021-May/570139.html
> >> > >
> >> > > On Tue, May 11, 2021 at 8:29 PM Fangrui Song  
> >> > > 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

>From x86 maintainer's PoV, the implementation is trivially correct,
but I have no idea about functionality. HJ, can you please review the
functionality and post your opinion on the patch to move it forward?

Thanks,
Uros.


Re: [PATCH] x86-64: Remove HAVE_LD_PIE_COPYRELOC

2021-09-20 Thread Fāng-ruì Sòng via Gcc-patches
PING^5 https://gcc.gnu.org/pipermail/gcc-patches/2021-May/570139.html

On Sat, Sep 4, 2021 at 12:11 PM Fāng-ruì Sòng  wrote:
>
> PING^4 https://gcc.gnu.org/pipermail/gcc-patches/2021-May/570139.html
>
> One major design goal of PIE was to avoid copy relocations.
> The original patch for GCC 5 caused problems for many years.
>
> On Wed, Aug 18, 2021 at 11:54 PM Fāng-ruì Sòng  wrote:
>>
>> PING^3 https://gcc.gnu.org/pipermail/gcc-patches/2021-May/570139.html
>>
>> On Fri, Jun 4, 2021 at 3:04 PM Fāng-ruì Sòng  wrote:
>> >
>> > 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  wrote:
>> > >
>> > > Ping https://gcc.gnu.org/pipermail/gcc-patches/2021-May/570139.html
>> > >
>> > > On Tue, May 11, 2021 at 8:29 PM Fangrui Song  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

Re: [PATCH] x86-64: Remove HAVE_LD_PIE_COPYRELOC

2021-09-04 Thread Fāng-ruì Sòng via Gcc-patches
PING^4 https://gcc.gnu.org/pipermail/gcc-patches/2021-May/570139.html

One major design goal of PIE was to avoid copy relocations.
The original patch for GCC 5 caused problems for many years.

On Wed, Aug 18, 2021 at 11:54 PM Fāng-ruì Sòng  wrote:

> PING^3 https://gcc.gnu.org/pipermail/gcc-patches/2021-May/570139.html
>
> On Fri, Jun 4, 2021 at 3:04 PM Fāng-ruì Sòng  wrote:
> >
> > 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 
> wrote:
> > >
> > > Ping https://gcc.gnu.org/pipermail/gcc-patches/2021-May/570139.html
> > >
> > > On Tue, May 11, 2021 at 8:29 PM Fangrui Song 
> 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

Re: [PATCH] x86-64: Remove HAVE_LD_PIE_COPYRELOC

2021-08-18 Thread Fāng-ruì Sòng via Gcc-patches
PING^3 https://gcc.gnu.org/pipermail/gcc-patches/2021-May/570139.html

On Fri, Jun 4, 2021 at 3:04 PM Fāng-ruì Sòng  wrote:
>
> 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  wrote:
> >
> > Ping https://gcc.gnu.org/pipermail/gcc-patches/2021-May/570139.html
> >
> > On Tue, May 11, 2021 at 8:29 PM Fangrui Song  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_copyre

Re: [PATCH] x86-64: Remove HAVE_LD_PIE_COPYRELOC

2021-06-04 Thread Fāng-ruì Sòng via Gcc-patches
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  wrote:
>
> Ping https://gcc.gnu.org/pipermail/gcc-patches/2021-May/570139.html
>
> On Tue, May 11, 2021 at 8:29 PM Fangrui Song  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 < > -   .globl  a_glob
> > -   .data
> > -   .type   a_glob, @object
> > -   .size  

Re: [PATCH] x86-64: Remove HAVE_LD_PIE_COPYRELOC

2021-05-24 Thread Fāng-ruì Sòng via Gcc-patches
Ping https://gcc.gnu.org/pipermail/gcc-patches/2021-May/570139.html

On Tue, May 11, 2021 at 8:29 PM Fangrui Song  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 < -   .globl  a_glob
> -   .data
> -   .type   a_glob, @object
> -   .size   a_glob, 4
> -a_glob:
> -   .long   2
> -EOF
> -  cat > conftest2.s < -   .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

Re: [PATCH] x86-64: Remove HAVE_LD_PIE_COPYRELOC

2021-05-11 Thread Fangrui Song via Gcc-patches

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


Re: [PATCH] x86-64: Remove HAVE_LD_PIE_COPYRELOC

2021-05-11 Thread Rainer Orth
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

-- 
-
Rainer Orth, Center for Biotechnology, Bielefeld University


[PATCH] x86-64: Remove HAVE_LD_PIE_COPYRELOC

2021-05-11 Thread Fangrui Song via Gcc-patches
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 < conftest2.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