[PATCH] D63132: [ELF][RISCV] Set st_shndx of __global_pointer$ to 1 if .sdata does not exist

James Clarke via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Tue Jun 11 07:30:36 PDT 2019


jrtc27 added inline comments.


================
Comment at: test/ELF/riscv-gp.s:14
+
+# SYM0: {{0*}}00000800 0 NOTYPE LOCAL HIDDEN 1 __global_pointer$
+
----------------
MaskRay wrote:
> jrtc27 wrote:
> > Should be GLOBAL DEFAULT to match GNU ld.
> glibc/musl Scrt1.o:
> ```
> .option push
> .option norelax
> 	lla   gp, __global_pointer$ # R_RISCV_PCREL_HI20+R_RISCV_PCREL_LO12_I
> 
> .option pop
> ```
> 
> Do you know why `__global_pointer$` is STB_GLOBAL STV_DEFAULT in ld.bfd?
> 
> If a shared object can have .sdata and __global_pointer$, and it does the similar `lla` (pc relative) to load gp, I think a hidden symbol makes more sense.
> 
> In a shared object, STB_GLOBAL STV_DEFAULT symbols are preemptable by default. The usage of `lla` will imply the symbols are non-preemptable, thus hidden visibility will make more sense.
The gp register is global for the entire application; the GPREL relaxations only occur for executables. Shared libraries have no `__global_pointer$`.


Repository:
  rLLD LLVM Linker

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D63132/new/

https://reviews.llvm.org/D63132





More information about the llvm-commits mailing list