Skip to content

Commit 5376db4

Browse files
committed
llvm-readobj: Print AMDGPU note type names
Differential Revision: https://reviews.llvm.org/D38751 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@315813 91177308-0d34-0410-b5e6-96231b3b80d8
1 parent e7b2dc3 commit 5376db4

File tree

3 files changed

+61
-8
lines changed

3 files changed

+61
-8
lines changed

test/CodeGen/AMDGPU/elf-notes.ll

+28
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,10 @@
2424
; OSABI-PAL-NOT: .amd_amdgpu_hsa_metadata
2525
; OSABI-PAL: .amd_amdgpu_pal_metadata
2626

27+
; RUN: llc -mtriple=amdgcn-amd-unknown -mcpu=gfx800 -mattr=+code-object-v3 -filetype=obj < %s | llvm-readobj -elf-output-style=GNU -notes | FileCheck --check-prefix=GCN --check-prefix=OSABI-UNK-ELF --check-prefix=GFX800 %s
28+
; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx800 -mattr=+code-object-v3 -filetype=obj < %s | llvm-readobj -elf-output-style=GNU -notes | FileCheck --check-prefix=GCN --check-prefix=OSABI-HSA-ELF --check-prefix=GFX800 %s
29+
; RUN: llc -mtriple=amdgcn-amd-amdpal -mcpu=gfx800 -mattr=+code-object-v3 -filetype=obj < %s | llvm-readobj -elf-output-style=GNU -notes | FileCheck --check-prefix=GCN --check-prefix=OSABI-PAL-ELF --check-prefix=GFX800 %s
30+
2731
; R600-NOT: .hsa_code_object_version
2832
; R600-NOT: .hsa_code_object_isa
2933
; R600-NOT: .amd_amdgpu_isa
@@ -33,3 +37,27 @@
3337
define amdgpu_kernel void @elf_notes() {
3438
ret void
3539
}
40+
41+
; OSABI-UNK-ELF-NOT: Unknown note type
42+
; OSABI-UNK-ELF: NT_AMD_AMDGPU_ISA (ISA Version)
43+
; OSABI-UNK-ELF-NOT: Unknown note type
44+
; OSABI-UNK-ELF-NOT: NT_AMD_AMDGPU_HSA_METADATA (HSA Metadata)
45+
; OSABI-UNK-ELF-NOT: Unknown note type
46+
; OSABI-UNK-ELF-NOT: NT_AMD_AMDGPU_PAL_METADATA (PAL Metadata)
47+
; OSABI-UNK-ELF-NOT: Unknown note type
48+
49+
; OSABI-HSA-ELF-NOT: Unknown note type
50+
; OSABI-HSA-ELF: NT_AMD_AMDGPU_ISA (ISA Version)
51+
; OSABI-HSA-ELF-NOT: Unknown note type
52+
; OSABI-HSA-ELF: NT_AMD_AMDGPU_HSA_METADATA (HSA Metadata)
53+
; OSABI-HSA-ELF-NOT: Unknown note type
54+
; OSABI-HSA-ELF-NOT: NT_AMD_AMDGPU_PAL_METADATA (PAL Metadata)
55+
; OSABI-HSA-ELF-NOT: Unknown note type
56+
57+
; OSABI-PAL-ELF-NOT: Unknown note type
58+
; OSABI-PAL-ELF: NT_AMD_AMDGPU_ISA (ISA Version)
59+
; OSABI-PAL-ELF-NOT: Unknown note type
60+
; OSABI-PAL-ELF-NOT: NT_AMD_AMDGPU_HSA_METADATA (HSA Metadata)
61+
; OSABI-PAL-ELF-NOT: Unknown note type
62+
; OSABI-PAL-ELF: NT_AMD_AMDGPU_PAL_METADATA (PAL Metadata)
63+
; OSABI-PAL-ELF-NOT: Unknown note type

test/CodeGen/AMDGPU/hsa-metadata-from-llvm-ir-full.ll

+6-6
Original file line numberDiff line numberDiff line change
@@ -1293,11 +1293,11 @@ attributes #0 = { "runtime-handle"="__test_block_invoke_kernel_runtime_handle" }
12931293
!110 = !{!"__block_literal"}
12941294

12951295
; NOTES: Displaying notes found at file offset 0x{{[0-9]+}}
1296-
; NOTES-NEXT: Owner Data size Description
1297-
; NOTES-NEXT: AMD 0x00000008 Unknown note type: (0x00000001)
1298-
; NOTES-NEXT: AMD 0x0000001b Unknown note type: (0x00000003)
1299-
; GFX700: AMD 0x00008f64 Unknown note type: (0x0000000a)
1300-
; GFX800: AMD 0x000092e4 Unknown note type: (0x0000000a)
1301-
; GFX900: AMD 0x00008f64 Unknown note type: (0x0000000a)
1296+
; NOTES: Owner Data size Description
1297+
; NOTES: AMD 0x00000008 Unknown note type (0x00000001)
1298+
; NOTES: AMD 0x0000001b Unknown note type (0x00000003)
1299+
; GFX700: AMD 0x00008f64 NT_AMD_AMDGPU_HSA_METADATA (HSA Metadata)
1300+
; GFX800: AMD 0x000092e4 NT_AMD_AMDGPU_HSA_METADATA (HSA Metadata)
1301+
; GFX900: AMD 0x00008f64 NT_AMD_AMDGPU_HSA_METADATA (HSA Metadata)
13021302

13031303
; PARSER: AMDGPU HSA Metadata Parser Test: PASS

tools/llvm-readobj/ELFDumper.cpp

+27-2
Original file line numberDiff line numberDiff line change
@@ -3393,7 +3393,7 @@ static std::string getGNUNoteTypeName(const uint32_t NT) {
33933393
std::string string;
33943394
raw_string_ostream OS(string);
33953395
OS << format("Unknown note type (0x%08x)", NT);
3396-
return string;
3396+
return OS.str();
33973397
}
33983398

33993399
static std::string getFreeBSDNoteTypeName(const uint32_t NT) {
@@ -3421,7 +3421,30 @@ static std::string getFreeBSDNoteTypeName(const uint32_t NT) {
34213421
std::string string;
34223422
raw_string_ostream OS(string);
34233423
OS << format("Unknown note type (0x%08x)", NT);
3424-
return string;
3424+
return OS.str();
3425+
}
3426+
3427+
static std::string getAMDGPUNoteTypeName(const uint32_t NT) {
3428+
static const struct {
3429+
uint32_t ID;
3430+
const char *Name;
3431+
} Notes[] = {
3432+
{ELF::NT_AMD_AMDGPU_HSA_METADATA,
3433+
"NT_AMD_AMDGPU_HSA_METADATA (HSA Metadata)"},
3434+
{ELF::NT_AMD_AMDGPU_ISA,
3435+
"NT_AMD_AMDGPU_ISA (ISA Version)"},
3436+
{ELF::NT_AMD_AMDGPU_PAL_METADATA,
3437+
"NT_AMD_AMDGPU_PAL_METADATA (PAL Metadata)"}
3438+
};
3439+
3440+
for (const auto &Note : Notes)
3441+
if (Note.ID == NT)
3442+
return std::string(Note.Name);
3443+
3444+
std::string string;
3445+
raw_string_ostream OS(string);
3446+
OS << format("Unknown note type (0x%08x)", NT);
3447+
return OS.str();
34253448
}
34263449

34273450
template <typename ELFT>
@@ -3504,6 +3527,8 @@ void GNUStyle<ELFT>::printNotes(const ELFFile<ELFT> *Obj) {
35043527
printGNUNote<ELFT>(OS, Type, Descriptor, DescriptorSize);
35053528
} else if (Name == "FreeBSD") {
35063529
OS << getFreeBSDNoteTypeName(Type) << '\n';
3530+
} else if (Name == "AMD") {
3531+
OS << getAMDGPUNoteTypeName(Type) << '\n';
35073532
} else {
35083533
OS << "Unknown note type: (" << format_hex(Type, 10) << ')';
35093534
}

0 commit comments

Comments
 (0)