public inbox for libc-alpha@sourceware.org
 help / color / mirror / Atom feed
* [PATCH] Makeconfig: Set pie-ccflag to -fPIE by default [BZ# 29514]
@ 2022-08-23 20:49 Richard Henderson
  2022-08-26 21:22 ` Carlos O'Donell
  0 siblings, 1 reply; 2+ messages in thread
From: Richard Henderson @ 2022-08-23 20:49 UTC (permalink / raw)
  To: libc-alpha

We should default to the larger code model, in order to support
larger applications built with -static -pie.  This should be
consistent with pic-ccflag, which defaults to -fPIC.

Remove the now redundant override from sysdeps/sparc/Makefile.
Note that -fno-pie and -fno-PIE have the same effect.

---

For aarch64, the code changes are small but significant:

 0000000000000000 <__libc_init_first>:
    0:  a9bd7bfd        stp     x29, x30, [sp, #-48]!
-   4:  90000003        adrp    x3, 0 <_GLOBAL_OFFSET_TABLE_>
-                       4: R_AARCH64_ADR_PREL_PG_HI21   _GLOBAL_OFFSET_TABLE_
+   4:  90000003        adrp    x3, 0 <__environ>
+                       4: R_AARCH64_ADR_GOT_PAGE       __environ
    8:  90000004        adrp    x4, 0 <__libc_init_first>
                        8: R_AARCH64_ADR_PREL_PG_HI21   .bss
    c:  910003fd        mov     x29, sp
   10:  f9400063        ldr     x3, [x3]
-                       10: R_AARCH64_LD64_GOTPAGE_LO15 __environ
+                       10: R_AARCH64_LD64_GOT_LO12_NC  __environ

In the small model, we are constrained to 15 bits of GOT, with a
single shared base, _GLOBAL_OFFSET_TABLE_.  In the large model,
each symbol has a page + offset pair.  For small functions like
this, where there are no other variable references to share the
common GOT pointer, there is no actual code change.

For s390x, I would expect changes similar to c64a10e54441, and
an eventual similar bug report if this were left unchanged.

For x86, ppc64 and riscv64, -fpie & -fPIE are identical.

r~

---
 Makeconfig             | 2 +-
 sysdeps/sparc/Makefile | 3 ---
 2 files changed, 1 insertion(+), 4 deletions(-)

diff --git a/Makeconfig b/Makeconfig
index e78cf220af..f8164a0025 100644
--- a/Makeconfig
+++ b/Makeconfig
@@ -1052,7 +1052,7 @@ pic-ccflag = -fPIC
 PIC-ccflag = -fPIC
 endif
 # This can be changed by a sysdep makefile
-pie-ccflag = -fpie
+pie-ccflag = -fPIE
 no-pie-ccflag = -fno-pie
 # This one should always stay like this unless there is a very good reason.
 PIE-ccflag = -fPIE
diff --git a/sysdeps/sparc/Makefile b/sysdeps/sparc/Makefile
index 12c2c1b085..26b4a84606 100644
--- a/sysdeps/sparc/Makefile
+++ b/sysdeps/sparc/Makefile
@@ -1,9 +1,6 @@
 # The Sparc `long double' is a distinct type we support.
 long-double-fcts = yes
 
-pie-ccflag = -fPIE
-no-pie-ccflag = -fno-PIE
-
 ifeq ($(subdir),gmon)
 sysdep_routines += sparc-mcount
 endif
-- 
2.34.1


^ permalink raw reply	[flat|nested] 2+ messages in thread

* Re: [PATCH] Makeconfig: Set pie-ccflag to -fPIE by default [BZ# 29514]
  2022-08-23 20:49 [PATCH] Makeconfig: Set pie-ccflag to -fPIE by default [BZ# 29514] Richard Henderson
@ 2022-08-26 21:22 ` Carlos O'Donell
  0 siblings, 0 replies; 2+ messages in thread
From: Carlos O'Donell @ 2022-08-26 21:22 UTC (permalink / raw)
  To: Richard Henderson, libc-alpha, Wilco Dijkstra, Adhemerval Zanella

On 8/23/22 16:49, Richard Henderson via Libc-alpha wrote:
> We should default to the larger code model, in order to support
> larger applications built with -static -pie.  This should be
> consistent with pic-ccflag, which defaults to -fPIC.
> 
> Remove the now redundant override from sysdeps/sparc/Makefile.
> Note that -fno-pie and -fno-PIE have the same effect.

This has been discussed downthread in the RESEND version.

Wilco seems happy with the patch.

This looks good to me too. Thanks for the provided analysis of the
generated code.

It is early in the release cycle and we can test this in the downstream
distributions e.g. Fedora Rawhide (s390x, ppc64le, aarch64, x86_64, i686)
and openSUSE Tumbleweed (likewise).

Passes pre-commit CI.

When it passes my internal tester I'll push this for Richard.

Reviewed-by: Carlos O'Donell <carlos@redhat.com>
 
> ---
> 
> For aarch64, the code changes are small but significant:
> 
>  0000000000000000 <__libc_init_first>:
>     0:  a9bd7bfd        stp     x29, x30, [sp, #-48]!
> -   4:  90000003        adrp    x3, 0 <_GLOBAL_OFFSET_TABLE_>
> -                       4: R_AARCH64_ADR_PREL_PG_HI21   _GLOBAL_OFFSET_TABLE_
> +   4:  90000003        adrp    x3, 0 <__environ>
> +                       4: R_AARCH64_ADR_GOT_PAGE       __environ
>     8:  90000004        adrp    x4, 0 <__libc_init_first>
>                         8: R_AARCH64_ADR_PREL_PG_HI21   .bss
>     c:  910003fd        mov     x29, sp
>    10:  f9400063        ldr     x3, [x3]
> -                       10: R_AARCH64_LD64_GOTPAGE_LO15 __environ
> +                       10: R_AARCH64_LD64_GOT_LO12_NC  __environ
> 
> In the small model, we are constrained to 15 bits of GOT, with a
> single shared base, _GLOBAL_OFFSET_TABLE_.  In the large model,
> each symbol has a page + offset pair.  For small functions like
> this, where there are no other variable references to share the
> common GOT pointer, there is no actual code change.
> 
> For s390x, I would expect changes similar to c64a10e54441, and
> an eventual similar bug report if this were left unchanged.
> 
> For x86, ppc64 and riscv64, -fpie & -fPIE are identical.
> 
> r~
> 
> ---
>  Makeconfig             | 2 +-
>  sysdeps/sparc/Makefile | 3 ---
>  2 files changed, 1 insertion(+), 4 deletions(-)
> 
> diff --git a/Makeconfig b/Makeconfig
> index e78cf220af..f8164a0025 100644
> --- a/Makeconfig
> +++ b/Makeconfig
> @@ -1052,7 +1052,7 @@ pic-ccflag = -fPIC
>  PIC-ccflag = -fPIC
>  endif
>  # This can be changed by a sysdep makefile
> -pie-ccflag = -fpie
> +pie-ccflag = -fPIE
>  no-pie-ccflag = -fno-pie
>  # This one should always stay like this unless there is a very good reason.
>  PIE-ccflag = -fPIE
> diff --git a/sysdeps/sparc/Makefile b/sysdeps/sparc/Makefile
> index 12c2c1b085..26b4a84606 100644
> --- a/sysdeps/sparc/Makefile
> +++ b/sysdeps/sparc/Makefile
> @@ -1,9 +1,6 @@
>  # The Sparc `long double' is a distinct type we support.
>  long-double-fcts = yes
>  
> -pie-ccflag = -fPIE
> -no-pie-ccflag = -fno-PIE
> -
>  ifeq ($(subdir),gmon)
>  sysdep_routines += sparc-mcount
>  endif


-- 
Cheers,
Carlos.


^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2022-08-26 21:22 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-08-23 20:49 [PATCH] Makeconfig: Set pie-ccflag to -fPIE by default [BZ# 29514] Richard Henderson
2022-08-26 21:22 ` Carlos O'Donell

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).