Index: docs/CodeGenerator.rst =================================================================== --- docs/CodeGenerator.rst +++ docs/CodeGenerator.rst @@ -2676,6 +2676,9 @@ * **A** --- Represents the addend used to compute the value of the relocatable field +* **G** --- Represents the offset into the global offset table at which the + relocation entry’s symbol will reside during execution. +* **GOT** --- Represents the address of the global offset table. * **P** --- Represents the place (section offset or address) of the storage unit being relocated (computed using ``r_offset``) * **S** --- Represents the value of the symbol whose index resides in the @@ -2694,4 +2697,5 @@ ``R_AMDGPU_REL32`` 4 ``word32`` S + A - P ``R_AMDGPU_REL64`` 5 ``word64`` S + A - P ``R_AMDGPU_ABS32`` 6 ``word32`` S + A + ``R_AMDGPU_GOTPCREL 7 ``word32`` G + GOT + A - P ===================== ===== ========== ==================== Index: include/llvm/Support/ELFRelocs/AMDGPU.def =================================================================== --- include/llvm/Support/ELFRelocs/AMDGPU.def +++ include/llvm/Support/ELFRelocs/AMDGPU.def @@ -9,3 +9,4 @@ ELF_RELOC(R_AMDGPU_REL32, 4) ELF_RELOC(R_AMDGPU_REL64, 5) ELF_RELOC(R_AMDGPU_ABS32, 6) +ELF_RELOC(R_AMDGPU_GOTPCREL, 7) Index: lib/Target/AMDGPU/MCTargetDesc/AMDGPUELFObjectWriter.cpp =================================================================== --- lib/Target/AMDGPU/MCTargetDesc/AMDGPUELFObjectWriter.cpp +++ lib/Target/AMDGPU/MCTargetDesc/AMDGPUELFObjectWriter.cpp @@ -38,6 +38,12 @@ const MCValue &Target, const MCFixup &Fixup, bool IsPCRel) const { + + switch (Target.getAccessVariant()) { + default: break; + case MCSymbolRefExpr::VK_GOTPCREL: return ELF::R_AMDGPU_GOTPCREL; + } + switch (Fixup.getKind()) { default: break; case FK_Data_4: