[PATCH] D143673: [lld][RISCV] Implement GP relaxation for R_RISCV_HI20/R_RISCV_LO12_I/R_RISCV_LO12_S.
Craig Topper via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Tue Apr 11 14:08:27 PDT 2023
craig.topper added inline comments.
================
Comment at: lld/ELF/Writer.cpp:1861
OutputSection *sec = findSection(".sdata");
- addOptionalRegular("__global_pointer$", sec ? sec : Out::elfHeader, 0x800,
- STV_DEFAULT);
+ Defined *globalPointer = addOptionalRegular(
+ "__global_pointer$", sec ? sec : Out::elfHeader, 0x800, STV_DEFAULT);
----------------
MaskRay wrote:
> craig.topper wrote:
> > MaskRay wrote:
> > > Joe wrote:
> > > > If the global pointer has been defined in the linkerscript, addOptionalRegular will return nullptr and ElfSym::riscvGlobalPointer won't be set. Is it worth adding a check for this and setting it if the symbol is defined?
> > > See @Joe 's comment.
> > I don't know my way around lld's APIs. Can you tell me what I need to do?
> Sure. (Sorry I didn't make comments earlier. I had been travelling for most days in the past month and just returned and started to read more patches.)
>
> For library use cases (prevent `riscvGlobalPointer` from referencing a dangling object), ensure `riscvGlobalPointer` is always initialized even if `config->shared` is true.
>
> ```
> if (config->emachine == EM_RISCV) {
> ElfSym::riscvGlobalPointer = nullptr;
> if (!config->shared) {
> ...
> ElfSym::riscvGlobalPointer = symtab.find(...);
> addOptionalRegular(...);
> }
> }
> ```
Am I still supposed to check config->relaxGP too?
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D143673/new/
https://reviews.llvm.org/D143673
More information about the llvm-commits
mailing list