[PATCH] D143673: [lld][RISCV] Implement GP relaxation for R_RISCV_HI20/R_RISCV_LO12_I/R_RISCV_LO12_S.

Fangrui Song via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Tue Apr 11 14:51:40 PDT 2023


MaskRay 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);
----------------
craig.topper wrote:
> 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?
Yes. `ElfSym::riscvGlobalPointer` can be nullptr if `config->relaxGP` is false.


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