diff options
-rw-r--r-- | llvm/include/llvm/Support/ELF.h | 5 | ||||
-rw-r--r-- | llvm/include/llvm/Support/ELFRelocs/AMDGPU.def | 11 | ||||
-rw-r--r-- | llvm/lib/Object/ELF.cpp | 7 | ||||
-rw-r--r-- | llvm/lib/ObjectYAML/ELFYAML.cpp | 3 | ||||
-rw-r--r-- | llvm/test/Object/AMDGPU/elf64-relocs.yaml | 65 |
5 files changed, 91 insertions, 0 deletions
diff --git a/llvm/include/llvm/Support/ELF.h b/llvm/include/llvm/Support/ELF.h index 5c9acc008dd..e3c77f4a21b 100644 --- a/llvm/include/llvm/Support/ELF.h +++ b/llvm/include/llvm/Support/ELF.h @@ -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/llvm/include/llvm/Support/ELFRelocs/AMDGPU.def b/llvm/include/llvm/Support/ELFRelocs/AMDGPU.def new file mode 100644 index 00000000000..cb3a7050b77 --- /dev/null +++ b/llvm/include/llvm/Support/ELFRelocs/AMDGPU.def @@ -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) diff --git a/llvm/lib/Object/ELF.cpp b/llvm/lib/Object/ELF.cpp index 95093894237..4002eb7b459 100644 --- a/llvm/lib/Object/ELF.cpp +++ b/llvm/lib/Object/ELF.cpp @@ -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; } diff --git a/llvm/lib/ObjectYAML/ELFYAML.cpp b/llvm/lib/ObjectYAML/ELFYAML.cpp index 8e39a24e4fe..a480783e44c 100644 --- a/llvm/lib/ObjectYAML/ELFYAML.cpp +++ b/llvm/lib/ObjectYAML/ELFYAML.cpp @@ -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/llvm/test/Object/AMDGPU/elf64-relocs.yaml b/llvm/test/Object/AMDGPU/elf64-relocs.yaml new file mode 100644 index 00000000000..8ccf25b8605 --- /dev/null +++ b/llvm/test/Object/AMDGPU/elf64-relocs.yaml @@ -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 |