[PATCH] RISC-V: Stop referencing __global_pointer$ under PIC
Fangrui Song
maskray@google.com
Mon Jun 26 20:12:41 GMT 2023
On Thu, Jun 8, 2023 at 9:45 AM Palmer Dabbelt <palmer@rivosinc.com> wrote:
>
> This has some cascading fallout related to PC-relative references to
> SHN_ABS that Jim reported in [1]. I have a workaround for that issue in
> binutils [2], but GP isn't useful in PIC so we might as well just stop
> referencing it at all.
>
> Link: https://sourceware.org/bugzilla/show_bug.cgi?id=24678
> Link: https://inbox.sourceware.org/binutils/20230608155214.32435-1-palmer@rivosinc.com/T/#u
> Signed-off-by: Palmer Dabbelt <palmer@rivosinc.com>
>
> ---
>
> I haven't tested thiis or the binutils patch. There's a handful of
> coupled issues here that might take a bit to untangle, but this came up
> in the RISC-V LLVM sync this morning so I figured it would be best to
> send something along.
> ---
> sysdeps/riscv/start.S | 2 ++
> 1 file changed, 2 insertions(+)
>
> diff --git a/sysdeps/riscv/start.S b/sysdeps/riscv/start.S
> index 6dfe65273f..5eaa8ccf2d 100644
> --- a/sysdeps/riscv/start.S
> +++ b/sysdeps/riscv/start.S
> @@ -71,7 +71,9 @@ END (ENTRY_POINT)
> load_gp:
> .option push
> .option norelax
> +#if !(defined(__PIC__) || defined(__pic__) || defined(PIC) || defined(pic))
> lla gp, __global_pointer$
> +#endif
> .option pop
> ret
>
> --
> 2.40.1
>
I haven't read all the discussion yet.. If we want to detect
-fpic/-fPIC (no distinction in LLVM for non-sparc-non-ppc32 targets).
Checking just __PIC__ is sufficient. __PIC__ seems more popular than
__pic__ for open-source software.
% riscv64-linux-gnu-gcc -fpic -dM -E -xc /dev/null | grep -i pic
#define __pic__ 1
#define __PIC__ 1
#define __riscv_cmodel_pic 1
% clang --target=riscv64 -fpic -dM -E -xc /dev/null | grep -i pic
#define __PIC__ 1
#define __pic__ 1
(-fPIC changes the macro replacements to 2.)
--
宋方睿
More information about the Libc-alpha
mailing list