[PATCH] D38909: [AMDGPU] Add RELATIVE64 relocation record.

Tony Tye via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Fri Oct 13 16:31:22 PDT 2017


t-tye created this revision.
Herald added subscribers: Anastasia, tpr, dstuttard, yaxunl, nhaehnle, wdng.

Add base relative relocation record that can be used for the following case (OpenCL example):

  static __global int Var = 0; 
  __global int* Ptr[] = {&Var};
  ...

In this case Var is a non premptable symbol and so its address can be used as the value of Ptr, with a base relative relocation that will add the delta between the ELF address and the actual load address. Such relocations do not require a symbol.


https://reviews.llvm.org/D38909

Files:
  docs/AMDGPUUsage.rst
  include/llvm/BinaryFormat/ELFRelocs/AMDGPU.def
  test/Object/AMDGPU/elf64-relocs.yaml


Index: test/Object/AMDGPU/elf64-relocs.yaml
===================================================================
--- test/Object/AMDGPU/elf64-relocs.yaml
+++ test/Object/AMDGPU/elf64-relocs.yaml
@@ -15,6 +15,7 @@
 # CHECK:     0x18 R_AMDGPU_GOTPCREL32_HI  - 0x0
 # CHECK:     0x20 R_AMDGPU_REL32_LO       - 0x0
 # CHECK:     0x22 R_AMDGPU_REL32_HI       - 0x0
+# CHECK:     0x24 R_AMDGPU_RELATIVE64     - 0x0
 # CHECK:   }
 # CHECK: ]
 
@@ -72,6 +73,9 @@
       - Offset:          0x22
         Symbol:          s11
         Type:            R_AMDGPU_REL32_HI
+      - Offset:          0x24
+        Symbol:          s12
+        Type:            R_AMDGPU_RELATIVE64
 
 Symbols:
   Local:
Index: include/llvm/BinaryFormat/ELFRelocs/AMDGPU.def
===================================================================
--- include/llvm/BinaryFormat/ELFRelocs/AMDGPU.def
+++ include/llvm/BinaryFormat/ELFRelocs/AMDGPU.def
@@ -14,3 +14,4 @@
 ELF_RELOC(R_AMDGPU_GOTPCREL32_HI,  9)
 ELF_RELOC(R_AMDGPU_REL32_LO,      10)
 ELF_RELOC(R_AMDGPU_REL32_HI,      11)
+ELF_RELOC(R_AMDGPU_RELATIVE64,    13)
Index: docs/AMDGPUUsage.rst
===================================================================
--- docs/AMDGPUUsage.rst
+++ docs/AMDGPUUsage.rst
@@ -684,7 +684,12 @@
 
 **S**
   Represents the value of the symbol whose index resides in the relocation
-  entry.
+  entry. Relocations not using this must specify a symbol index of ``STN_UNDEF``.
+
+**B**
+  Represents the base address of a loaded executable or shared object which is
+  the difference between the ELF address and the actual load address. Relocations
+  using this are only valid in executable or shared objects.
 
 The following relocation types are supported:
 
@@ -706,6 +711,8 @@
      ``R_AMDGPU_GOTPCREL32_HI``  9      ``word32``  (G + GOT + A - P) >> 32
      ``R_AMDGPU_REL32_LO``       10     ``word32``  (S + A - P) & 0xFFFFFFFF
      ``R_AMDGPU_REL32_HI``       11     ``word32``  (S + A - P) >> 32
+     *reserved*                  12
+     ``R_AMDGPU_RELATIVE64``     13     ``word64``  B + A
      ==========================  =====  ==========  ==============================
 
 .. _amdgpu-dwarf:


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D38909.118985.patch
Type: text/x-patch
Size: 2163 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20171013/e0a15bf3/attachment.bin>


More information about the llvm-commits mailing list