From: Tom Stellard Date: Fri, 17 Jun 2016 22:38:08 +0000 (+0000) Subject: Support/ELF: Add AMDGPU relocation definitions to match documentation X-Git-Tag: android-x86-7.1-r4~31582 X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=7dc79e5898f26d031969a8702f3a7f408d051532;p=android-x86%2Fexternal-llvm.git Support/ELF: Add AMDGPU relocation definitions to match documentation 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 --- diff --git a/include/llvm/Support/ELF.h b/include/llvm/Support/ELF.h index 5c9acc008dd..e3c77f4a21b 100644 --- a/include/llvm/Support/ELF.h +++ b/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/include/llvm/Support/ELFRelocs/AMDGPU.def b/include/llvm/Support/ELFRelocs/AMDGPU.def new file mode 100644 index 00000000000..cb3a7050b77 --- /dev/null +++ b/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/lib/Object/ELF.cpp b/lib/Object/ELF.cpp index 95093894237..4002eb7b459 100644 --- a/lib/Object/ELF.cpp +++ b/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/lib/ObjectYAML/ELFYAML.cpp b/lib/ObjectYAML/ELFYAML.cpp index 8e39a24e4fe..a480783e44c 100644 --- a/lib/ObjectYAML/ELFYAML.cpp +++ b/lib/ObjectYAML/ELFYAML.cpp @@ -531,6 +531,9 @@ void ScalarEnumerationTraits::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 index 00000000000..8ccf25b8605 --- /dev/null +++ b/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