diff --git a/llvm/include/llvm/Object/ELFObjectFile.h b/llvm/include/llvm/Object/ELFObjectFile.h index d927aace242a..b01fa1da4b3e 100644 --- a/llvm/include/llvm/Object/ELFObjectFile.h +++ b/llvm/include/llvm/Object/ELFObjectFile.h @@ -846,6 +846,8 @@ StringRef ELFObjectFile::getFileFormatName() const { return "ELF32-sparc"; case ELF::EM_WEBASSEMBLY: return "ELF32-wasm"; + case ELF::EM_AMDGPU: + return "ELF32-amdgpu"; default: return "ELF32-unknown"; } @@ -867,6 +869,10 @@ StringRef ELFObjectFile::getFileFormatName() const { return "ELF64-mips"; case ELF::EM_WEBASSEMBLY: return "ELF64-wasm"; + case ELF::EM_AMDGPU: + return (EF.getHeader()->e_ident[ELF::EI_OSABI] == ELF::ELFOSABI_AMDGPU_HSA + && IsLittleEndian) ? + "ELF64-amdgpu-hsacobj" : "ELF64-amdgpu"; default: return "ELF64-unknown"; } @@ -923,6 +929,12 @@ unsigned ELFObjectFile::getArch() const { default: return Triple::UnknownArch; } + case ELF::EM_AMDGPU: + return (EF.getHeader()->e_ident[ELF::EI_CLASS] == ELF::ELFCLASS64 + && EF.getHeader()->e_ident[ELF::EI_OSABI] == ELF::ELFOSABI_AMDGPU_HSA + && IsLittleEndian) ? + Triple::amdgcn : Triple::UnknownArch; + default: return Triple::UnknownArch; } diff --git a/llvm/lib/ObjectYAML/ELFYAML.cpp b/llvm/lib/ObjectYAML/ELFYAML.cpp index 06db57a17883..3b94fa62e1d0 100644 --- a/llvm/lib/ObjectYAML/ELFYAML.cpp +++ b/llvm/lib/ObjectYAML/ELFYAML.cpp @@ -239,6 +239,7 @@ void ScalarEnumerationTraits::enumeration( ECase(ELFOSABI_FENIXOS) ECase(ELFOSABI_CLOUDABI) ECase(ELFOSABI_C6000_ELFABI) + ECase(ELFOSABI_AMDGPU_HSA) ECase(ELFOSABI_C6000_LINUX) ECase(ELFOSABI_ARM) ECase(ELFOSABI_STANDALONE) diff --git a/llvm/test/Object/AMDGPU/elf-definitios.yaml b/llvm/test/Object/AMDGPU/elf-definitios.yaml index 5f5e200b49b3..6d535095123c 100644 --- a/llvm/test/Object/AMDGPU/elf-definitios.yaml +++ b/llvm/test/Object/AMDGPU/elf-definitios.yaml @@ -1,6 +1,8 @@ # RUN: yaml2obj -format=elf %s > %t.o # RUN: llvm-readobj -s -file-headers %t.o | FileCheck %s +# CHECK: Format: ELF64-amdgpu-hsacobj +# CHECK: Arch: amdgcn # CHECK: Machine: EM_AMDGPU (0xE0) # CHECK: Sections [ # CHECK: Section { @@ -18,6 +20,7 @@ FileHeader: Data: ELFDATA2LSB Type: ET_REL Machine: EM_AMDGPU + OSABI: ELFOSABI_AMDGPU_HSA Sections: - Name: .shf_amdgpu diff --git a/llvm/test/Object/AMDGPU/elf32-unknown.yaml b/llvm/test/Object/AMDGPU/elf32-unknown.yaml new file mode 100644 index 000000000000..708db8dc9fcd --- /dev/null +++ b/llvm/test/Object/AMDGPU/elf32-unknown.yaml @@ -0,0 +1,11 @@ +# RUN: yaml2obj -format=elf %s > %t.o +# RUN: llvm-readobj -s -file-headers %t.o | FileCheck %s + +# CHECK: Format: ELF32-amdgpu + +--- +FileHeader: + Class: ELFCLASS32 + Data: ELFDATA2LSB + Type: ET_REL + Machine: EM_AMDGPU diff --git a/llvm/test/Object/AMDGPU/elf64-unknown.yaml b/llvm/test/Object/AMDGPU/elf64-unknown.yaml new file mode 100644 index 000000000000..cae248854ad5 --- /dev/null +++ b/llvm/test/Object/AMDGPU/elf64-unknown.yaml @@ -0,0 +1,11 @@ +# RUN: yaml2obj -format=elf %s > %t.o +# RUN: llvm-readobj -s -file-headers %t.o | FileCheck %s + +# CHECK: Format: ELF64-amdgpu + +--- +FileHeader: + Class: ELFCLASS64 + Data: ELFDATA2LSB + Type: ET_REL + Machine: EM_AMDGPU