[llvm] r273628 - Support/ELF: Add R_AMDGPU_GOTPCREL relocation

Tom Stellard via llvm-commits llvm-commits at lists.llvm.org
Thu Jun 23 16:11:29 PDT 2016


Author: tstellar
Date: Thu Jun 23 18:11:29 2016
New Revision: 273628

URL: http://llvm.org/viewvc/llvm-project?rev=273628&view=rev
Log:
Support/ELF: Add R_AMDGPU_GOTPCREL relocation

Summary:
We will start generating this in a future patch.

Reviewers: arsenm, kzhuravl, rafael, ruiu, tony-tye

Subscribers: arsenm, llvm-commits, kzhuravl

Differential Revision: http://reviews.llvm.org/D21482

Modified:
    llvm/trunk/docs/CodeGenerator.rst
    llvm/trunk/include/llvm/Support/ELFRelocs/AMDGPU.def
    llvm/trunk/lib/Target/AMDGPU/MCTargetDesc/AMDGPUELFObjectWriter.cpp
    llvm/trunk/test/MC/AMDGPU/reloc.s

Modified: llvm/trunk/docs/CodeGenerator.rst
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/docs/CodeGenerator.rst?rev=273628&r1=273627&r2=273628&view=diff
==============================================================================
--- llvm/trunk/docs/CodeGenerator.rst (original)
+++ llvm/trunk/docs/CodeGenerator.rst Thu Jun 23 18:11:29 2016
@@ -2676,6 +2676,9 @@ Following notations are used for specify
 
 * **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 @@ supported relocation types:
   ``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
   =====================  =====  ==========  ====================

Modified: llvm/trunk/include/llvm/Support/ELFRelocs/AMDGPU.def
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/ELFRelocs/AMDGPU.def?rev=273628&r1=273627&r2=273628&view=diff
==============================================================================
--- llvm/trunk/include/llvm/Support/ELFRelocs/AMDGPU.def (original)
+++ llvm/trunk/include/llvm/Support/ELFRelocs/AMDGPU.def Thu Jun 23 18:11:29 2016
@@ -9,3 +9,4 @@ ELF_RELOC(R_AMDGPU_ABS64,         3)
 ELF_RELOC(R_AMDGPU_REL32,         4)
 ELF_RELOC(R_AMDGPU_REL64,         5)
 ELF_RELOC(R_AMDGPU_ABS32,         6)
+ELF_RELOC(R_AMDGPU_GOTPCREL,      7)

Modified: llvm/trunk/lib/Target/AMDGPU/MCTargetDesc/AMDGPUELFObjectWriter.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/AMDGPU/MCTargetDesc/AMDGPUELFObjectWriter.cpp?rev=273628&r1=273627&r2=273628&view=diff
==============================================================================
--- llvm/trunk/lib/Target/AMDGPU/MCTargetDesc/AMDGPUELFObjectWriter.cpp (original)
+++ llvm/trunk/lib/Target/AMDGPU/MCTargetDesc/AMDGPUELFObjectWriter.cpp Thu Jun 23 18:11:29 2016
@@ -45,6 +45,13 @@ unsigned AMDGPUELFObjectWriter::getReloc
   if (Target.getSymA()->getSymbol().getName() == "SCRATCH_RSRC_DWORD1")
     return ELF::R_AMDGPU_ABS32_HI;
 
+  switch (Target.getAccessVariant()) {
+  default:
+    break;
+  case MCSymbolRefExpr::VK_GOTPCREL:
+    return ELF::R_AMDGPU_GOTPCREL;
+  }
+
   switch (Fixup.getKind()) {
   default: break;
   case FK_PCRel_4:

Modified: llvm/trunk/test/MC/AMDGPU/reloc.s
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/AMDGPU/reloc.s?rev=273628&r1=273627&r2=273628&view=diff
==============================================================================
--- llvm/trunk/test/MC/AMDGPU/reloc.s (original)
+++ llvm/trunk/test/MC/AMDGPU/reloc.s Thu Jun 23 18:11:29 2016
@@ -3,10 +3,14 @@
 // CHECK: Relocations [
 // CHECK: R_AMDGPU_ABS32_LO SCRATCH_RSRC_DWORD0 0x0
 // CHECK: R_AMDGPU_ABS32_HI SCRATCH_RSRC_DWORD1 0x0
+// CHECK: R_AMDGPU_GOTPCREL global_var 0x0
 // CHECK: ]
 
 kernel:
   s_mov_b32 s0, SCRATCH_RSRC_DWORD0
   s_mov_b32 s1, SCRATCH_RSRC_DWORD1
+  s_mov_b32 s2, global_var at GOTPCREL
+
+.globl global_var
 
 .globl SCRATCH_RSRC_DWORD0




More information about the llvm-commits mailing list