OSDN Git Service

Support/ELF: Add AMDGPU relocation definitions to match documentation
authorTom Stellard <thomas.stellard@amd.com>
Fri, 17 Jun 2016 22:38:08 +0000 (22:38 +0000)
committerTom Stellard <thomas.stellard@amd.com>
Fri, 17 Jun 2016 22:38:08 +0000 (22:38 +0000)
Reviewers: arsenm, kzhuravl, rafael

Subscribers: llvm-commits, kzhuravl

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@273066 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/Support/ELF.h
include/llvm/Support/ELFRelocs/AMDGPU.def [new file with mode: 0644]
lib/Object/ELF.cpp
lib/ObjectYAML/ELFYAML.cpp
test/Object/AMDGPU/elf64-relocs.yaml [new file with mode: 0644]

index 5c9acc0..e3c77f4 100644 (file)
@@ -615,6 +615,11 @@ enum {
 #include "ELFRelocs/WebAssembly.def"
 };
 
+// ELF Relocation types for AMDGPU
+enum {
+#include "ELFRelocs/AMDGPU.def"
+};
+
 #undef ELF_RELOC
 
 // Section header.
diff --git a/include/llvm/Support/ELFRelocs/AMDGPU.def b/include/llvm/Support/ELFRelocs/AMDGPU.def
new file mode 100644 (file)
index 0000000..cb3a705
--- /dev/null
@@ -0,0 +1,11 @@
+#ifndef ELF_RELOC
+#error "ELF_RELOC must be defined"
+#endif
+
+ELF_RELOC(R_AMDGPU_NONE,          0)
+ELF_RELOC(R_AMDGPU_ABS32_LO,      1)
+ELF_RELOC(R_AMDGPU_ABS32_HI,      2)
+ELF_RELOC(R_AMDGPU_ABS64,         3)
+ELF_RELOC(R_AMDGPU_REL32,         4)
+ELF_RELOC(R_AMDGPU_REL64,         5)
+ELF_RELOC(R_AMDGPU_ABS32,         6)
index 9509389..4002eb7 100644 (file)
@@ -105,6 +105,13 @@ StringRef getELFRelocationTypeName(uint32_t Machine, uint32_t Type) {
       break;
     }
     break;
+  case ELF::EM_AMDGPU:
+    switch (Type) {
+#include "llvm/Support/ELFRelocs/AMDGPU.def"
+    default:
+      break;
+    }
+    break;
   default:
     break;
   }
index 8e39a24..a480783 100644 (file)
@@ -531,6 +531,9 @@ void ScalarEnumerationTraits<ELFYAML::ELF_REL>::enumeration(
   case ELF::EM_LANAI:
 #include "llvm/Support/ELFRelocs/Lanai.def"
     break;
+  case ELF::EM_AMDGPU:
+#include "llvm/Support/ELFRelocs/AMDGPU.def"
+    break;
   default:
     llvm_unreachable("Unsupported architecture");
   }
diff --git a/test/Object/AMDGPU/elf64-relocs.yaml b/test/Object/AMDGPU/elf64-relocs.yaml
new file mode 100644 (file)
index 0000000..8ccf25b
--- /dev/null
@@ -0,0 +1,65 @@
+# RUN: yaml2obj -format=elf %s > %t
+# RUN: llvm-readobj -r %t | FileCheck %s
+
+# CHECK: Relocations [
+# CHECK:   Section (2) .rela.text {
+# CHECK:     0x0 R_AMDGPU_NONE main 0x0
+# CHECK:     0x8 R_AMDGPU_ABS32_LO - 0x0
+# CHECK:     0x10 R_AMDGPU_ABS32_HI - 0x0
+# CHECK:     0x18 R_AMDGPU_ABS64 - 0x0
+# CHECK:     0x20 R_AMDGPU_REL32 - 0x0
+# CHECK:     0x28 R_AMDGPU_REL64 - 0x0
+# CHECK:     0x30 R_AMDGPU_ABS32 - 0x0
+# CHECK:   }
+# CHECK: ]
+
+FileHeader:
+  Class:           ELFCLASS64
+  Data:            ELFDATA2LSB
+  Type:            ET_REL
+  Machine:         EM_AMDGPU
+Sections:
+  - Type:            SHT_PROGBITS
+    Name:            .text
+    Flags:           [ SHF_ALLOC, SHF_EXECINSTR ]
+    AddressAlign:    0x08
+    Content:         0000000000000000
+  - Type:            SHT_RELA
+    Name:            .rela.text
+    Link:            .symtab
+    Info:            .text
+    AddressAlign:    0x08
+    Relocations:
+      - Offset:          0x0
+        Symbol:          main
+        Type:            R_AMDGPU_NONE
+      - Offset:          0x8
+        Symbol:          a
+        Type:            R_AMDGPU_ABS32_LO
+      - Offset:          0x10
+        Symbol:          b
+        Type:            R_AMDGPU_ABS32_HI
+      - Offset:          0x18
+        Symbol:          c
+        Type:            R_AMDGPU_ABS64
+      - Offset:          0x20
+        Symbol:          d
+        Type:            R_AMDGPU_REL32
+      - Offset:          0x28
+        Symbol:          e
+        Type:            R_AMDGPU_REL64
+      - Offset:          0x30
+        Symbol:          f
+        Type:            R_AMDGPU_ABS32
+
+Symbols:
+  Local:
+    - Name:            .text
+      Type:            STT_SECTION
+      Section:         .text
+
+  Global:
+    - Name:            main
+      Type:            STT_FUNC
+      Section:         .text
+      Size:            0x08