[PATCH] D38910: [AMDGPU/LLD] Add RELATIVE64 relocation record.

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


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

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.

This also fixes LLD which was incorrectly generating a PCREL64 for this case.


https://reviews.llvm.org/D38910

Files:
  ELF/Arch/AMDGPU.cpp
  test/ELF/amdgpu-relocs.s


Index: test/ELF/amdgpu-relocs.s
===================================================================
--- test/ELF/amdgpu-relocs.s
+++ test/ELF/amdgpu-relocs.s
@@ -65,10 +65,23 @@
   .quad temp
   .size ptr, 8
 
+# R_AMDGPU_RELATIVE64:
+  .type temp2, @object
+  .local temp2
+  .size temp2, 4
+
+  .type ptr2, @object
+  .globl ptr2
+  .size ptr2, 8
+  .p2align 3
+ptr2:
+  .quad temp2
+
 # The relocation for local_var{0, 1, 2} and var should be resolved by the
 # linker.
 # CHECK: Relocations [
 # CHECK: .rela.dyn {
+# CHECK-NEXT: R_AMDGPU_RELATIVE64 - 0x0
 # CHECK-NEXT: R_AMDGPU_ABS64 common_var0 0x0
 # CHECK-NEXT: R_AMDGPU_ABS64 common_var1 0x0
 # CHECK-NEXT: R_AMDGPU_ABS64 common_var2 0x0
Index: ELF/Arch/AMDGPU.cpp
===================================================================
--- ELF/Arch/AMDGPU.cpp
+++ ELF/Arch/AMDGPU.cpp
@@ -32,7 +32,7 @@
 } // namespace
 
 AMDGPU::AMDGPU() {
-  RelativeRel = R_AMDGPU_REL64;
+  RelativeRel = R_AMDGPU_RELATIVE64;
   GotRel = R_AMDGPU_ABS64;
   GotEntrySize = 8;
 }


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D38910.118987.patch
Type: text/x-patch
Size: 1020 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20171013/2ff244f7/attachment.bin>


More information about the llvm-commits mailing list