Skip to content

Commit 7032e50

Browse files
committed
llvm-readobj: Print AMDGPU note contents
Differential Revision: https://reviews.llvm.org/D38752 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@315819 91177308-0d34-0410-b5e6-96231b3b80d8
1 parent 256786e commit 7032e50

12 files changed

+69
-68
lines changed

test/CodeGen/AMDGPU/elf-notes.ll

+20
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@
1717

1818
; OSABI-UNK-ELF-NOT: Unknown note type
1919
; OSABI-UNK-ELF: NT_AMD_AMDGPU_ISA (ISA Version)
20+
; OSABI-UNK-ELF: ISA Version:
21+
; OSABI-UNK-ELF: amdgcn-amd-unknown--gfx800
2022
; OSABI-UNK-ELF-NOT: Unknown note type
2123
; OSABI-UNK-ELF-NOT: NT_AMD_AMDGPU_HSA_METADATA (HSA Metadata)
2224
; OSABI-UNK-ELF-NOT: Unknown note type
@@ -31,8 +33,22 @@
3133

3234
; OSABI-HSA-ELF-NOT: Unknown note type
3335
; OSABI-HSA-ELF: NT_AMD_AMDGPU_ISA (ISA Version)
36+
; OSABI-HSA-ELF: ISA Version:
37+
; OSABI-HSA-ELF: amdgcn-amd-amdhsa--gfx800
3438
; OSABI-HSA-ELF-NOT: Unknown note type
3539
; OSABI-HSA-ELF: NT_AMD_AMDGPU_HSA_METADATA (HSA Metadata)
40+
; OSABI-HSA-ELF: HSA Metadata:
41+
; OSABI-HSA-ELF: ---
42+
; OSABI-HSA-ELF: Version: [ 1, 0 ]
43+
; OSABI-HSA-ELF: Kernels:
44+
; OSABI-HSA-ELF: - Name: elf_notes
45+
; OSABI-HSA-ELF: CodeProps:
46+
; OSABI-HSA-ELF: WavefrontNumSGPRs: 96
47+
; OSABI-HSA-ELF: KernargSegmentAlign: 32
48+
; OSABI-HSA-ELF: GroupSegmentAlign: 4
49+
; OSABI-HSA-ELF: PrivateSegmentAlign: 4
50+
; OSABI-HSA-ELF: WavefrontSize: 6
51+
; OSABI-HSA-ELF: ...
3652
; OSABI-HSA-ELF-NOT: Unknown note type
3753
; OSABI-HSA-ELF-NOT: NT_AMD_AMDGPU_PAL_METADATA (PAL Metadata)
3854
; OSABI-HSA-ELF-NOT: Unknown note type
@@ -45,10 +61,14 @@
4561

4662
; OSABI-PAL-ELF-NOT: Unknown note type
4763
; OSABI-PAL-ELF: NT_AMD_AMDGPU_ISA (ISA Version)
64+
; OSABI-PAL-ELF: ISA Version:
65+
; OSABI-PAL-ELF: amdgcn-amd-amdpal--gfx800
4866
; OSABI-PAL-ELF-NOT: Unknown note type
4967
; OSABI-PAL-ELF-NOT: NT_AMD_AMDGPU_HSA_METADATA (HSA Metadata)
5068
; OSABI-PAL-ELF-NOT: Unknown note type
5169
; OSABI-PAL-ELF: NT_AMD_AMDGPU_PAL_METADATA (PAL Metadata)
70+
; OSABI-PAL-ELF: PAL Metadata:
71+
; OSABI-PAL-ELF: 0x2e12,0xac02c0,0x2e13,0x80,0x1000001b,0x1,0x10000022,0x60,0x1000003e,0x0
5272
; OSABI-PAL-ELF-NOT: Unknown note type
5373

5474
; R600-NOT: .hsa_code_object_version

test/CodeGen/AMDGPU/hsa-metadata-deduce-ro-arg.ll

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
; RUN: llc -mtriple=amdgcn-amd-amdhsa -filetype=obj -o - < %s | llvm-readobj -amdgpu-code-object-metadata -elf-output-style=GNU -notes | FileCheck %s
1+
; RUN: llc -mtriple=amdgcn-amd-amdhsa -filetype=obj -o - < %s | llvm-readobj -elf-output-style=GNU -notes | FileCheck %s
22

33
; CHECK: - Name: test_ro_arg
44
; CHECK: Args:

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

-11
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,3 @@
1-
; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx700 -filetype=obj -o - < %s | llvm-readobj -amdgpu-code-object-metadata -elf-output-style=GNU -notes | FileCheck --check-prefix=CHECK --check-prefix=GFX700 --check-prefix=NOTES %s
2-
; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx800 -filetype=obj -o - < %s | llvm-readobj -amdgpu-code-object-metadata -elf-output-style=GNU -notes | FileCheck --check-prefix=CHECK --check-prefix=GFX800 --check-prefix=NOTES %s
3-
; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx900 -filetype=obj -o - < %s | llvm-readobj -amdgpu-code-object-metadata -elf-output-style=GNU -notes | FileCheck --check-prefix=CHECK --check-prefix=GFX900 --check-prefix=NOTES %s
41
; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx700 -amdgpu-dump-hsa-metadata -amdgpu-verify-hsa-metadata -filetype=obj -o - < %s 2>&1 | FileCheck --check-prefix=PARSER %s
52
; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx800 -amdgpu-dump-hsa-metadata -amdgpu-verify-hsa-metadata -filetype=obj -o - < %s 2>&1 | FileCheck --check-prefix=PARSER %s
63
; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx900 -amdgpu-dump-hsa-metadata -amdgpu-verify-hsa-metadata -filetype=obj -o - < %s 2>&1 | FileCheck --check-prefix=PARSER %s
@@ -1292,12 +1289,4 @@ attributes #0 = { "runtime-handle"="__test_block_invoke_kernel_runtime_handle" }
12921289
!101 = !{!"2:1:8:%g\5Cn"}
12931290
!110 = !{!"__block_literal"}
12941291

1295-
; NOTES: Displaying notes found at file offset 0x{{[0-9]+}}
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)
1302-
13031292
; PARSER: AMDGPU HSA Metadata Parser Test: PASS

test/CodeGen/AMDGPU/hsa-metadata-images.ll

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx700 -filetype=obj -o - < %s | llvm-readobj -amdgpu-code-object-metadata -elf-output-style=GNU -notes | FileCheck --check-prefix=CHECK --check-prefix=GFX700 --check-prefix=NOTES %s
2-
; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx800 -filetype=obj -o - < %s | llvm-readobj -amdgpu-code-object-metadata -elf-output-style=GNU -notes | FileCheck --check-prefix=CHECK --check-prefix=GFX800 --check-prefix=NOTES %s
3-
; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx900 -filetype=obj -o - < %s | llvm-readobj -amdgpu-code-object-metadata -elf-output-style=GNU -notes | FileCheck --check-prefix=CHECK --check-prefix=GFX900 --check-prefix=NOTES %s
1+
; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx700 -filetype=obj -o - < %s | llvm-readobj -elf-output-style=GNU -notes | FileCheck --check-prefix=CHECK --check-prefix=GFX700 --check-prefix=NOTES %s
2+
; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx800 -filetype=obj -o - < %s | llvm-readobj -elf-output-style=GNU -notes | FileCheck --check-prefix=CHECK --check-prefix=GFX800 --check-prefix=NOTES %s
3+
; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx900 -filetype=obj -o - < %s | llvm-readobj -elf-output-style=GNU -notes | FileCheck --check-prefix=CHECK --check-prefix=GFX900 --check-prefix=NOTES %s
44

55
%opencl.image1d_t = type opaque
66
%opencl.image1d_array_t = type opaque

test/CodeGen/AMDGPU/hsa-metadata-invalid-ocl-version-1.ll

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
; RUN: llc -mtriple=amdgcn-amd-amdhsa -filetype=obj -o - < %s | llvm-readobj -amdgpu-code-object-metadata | FileCheck %s
1+
; RUN: llc -mtriple=amdgcn-amd-amdhsa -filetype=obj -o - < %s | llvm-readobj -elf-output-style=GNU -notes | FileCheck %s
22

33
; Make sure llc does not crash for invalid opencl version metadata.
44

test/CodeGen/AMDGPU/hsa-metadata-invalid-ocl-version-2.ll

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
; RUN: llc -mtriple=amdgcn-amd-amdhsa -filetype=obj -o - < %s | llvm-readobj -amdgpu-code-object-metadata | FileCheck %s
1+
; RUN: llc -mtriple=amdgcn-amd-amdhsa -filetype=obj -o - < %s | llvm-readobj -elf-output-style=GNU -notes | FileCheck %s
22

33
; Make sure llc does not crash for invalid opencl version metadata.
44

test/CodeGen/AMDGPU/hsa-metadata-invalid-ocl-version-3.ll

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
; RUN: llc -mtriple=amdgcn-amd-amdhsa -filetype=obj -o - < %s | llvm-readobj -amdgpu-code-object-metadata | FileCheck %s
1+
; RUN: llc -mtriple=amdgcn-amd-amdhsa -filetype=obj -o - < %s | llvm-readobj -elf-output-style=GNU -notes | FileCheck %s
22

33
; Make sure llc does not crash for invalid opencl version metadata.
44

test/CodeGen/AMDGPU/hsa-metadata-kernel-code-props.ll

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx700 -filetype=obj -o - < %s | llvm-readobj -amdgpu-code-object-metadata -elf-output-style=GNU -notes | FileCheck --check-prefix=CHECK --check-prefix=GFX700 --check-prefix=NOTES %s
2-
; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx800 -filetype=obj -o - < %s | llvm-readobj -amdgpu-code-object-metadata -elf-output-style=GNU -notes | FileCheck --check-prefix=CHECK --check-prefix=GFX800 --check-prefix=NOTES %s
3-
; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx900 -filetype=obj -o - < %s | llvm-readobj -amdgpu-code-object-metadata -elf-output-style=GNU -notes | FileCheck --check-prefix=CHECK --check-prefix=GFX900 --check-prefix=NOTES %s
1+
; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx700 -filetype=obj -o - < %s | llvm-readobj -elf-output-style=GNU -notes | FileCheck --check-prefix=CHECK --check-prefix=GFX700 --check-prefix=NOTES %s
2+
; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx800 -filetype=obj -o - < %s | llvm-readobj -elf-output-style=GNU -notes | FileCheck --check-prefix=CHECK --check-prefix=GFX800 --check-prefix=NOTES %s
3+
; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx900 -filetype=obj -o - < %s | llvm-readobj -elf-output-style=GNU -notes | FileCheck --check-prefix=CHECK --check-prefix=GFX900 --check-prefix=NOTES %s
44

55
; CHECK: ---
66
; CHECK: Version: [ 1, 0 ]

test/CodeGen/AMDGPU/hsa-metadata-kernel-debug-props.ll

+4-4
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx700 -filetype=obj -o - < %s | llvm-readobj -amdgpu-code-object-metadata -elf-output-style=GNU -notes | FileCheck --check-prefix=CHECK --check-prefix=GFX700 --check-prefix=NOTES %s
2-
; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx800 -filetype=obj -o - < %s | llvm-readobj -amdgpu-code-object-metadata -elf-output-style=GNU -notes | FileCheck --check-prefix=CHECK --check-prefix=GFX800 --check-prefix=NOTES %s
3-
; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx900 -filetype=obj -o - < %s | llvm-readobj -amdgpu-code-object-metadata -elf-output-style=GNU -notes | FileCheck --check-prefix=CHECK --check-prefix=GFX900 --check-prefix=NOTES %s
1+
; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx700 -filetype=obj -o - < %s | llvm-readobj -elf-output-style=GNU -notes | FileCheck --check-prefix=CHECK --check-prefix=GFX700 --check-prefix=NOTES %s
2+
; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx800 -filetype=obj -o - < %s | llvm-readobj -elf-output-style=GNU -notes | FileCheck --check-prefix=CHECK --check-prefix=GFX800 --check-prefix=NOTES %s
3+
; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx900 -filetype=obj -o - < %s | llvm-readobj -elf-output-style=GNU -notes | FileCheck --check-prefix=CHECK --check-prefix=GFX900 --check-prefix=NOTES %s
44

55
declare void @llvm.dbg.declare(metadata, metadata, metadata)
66

@@ -14,7 +14,7 @@ declare void @llvm.dbg.declare(metadata, metadata, metadata)
1414
; CHECK: ReservedNumVGPRs: 4
1515
; GFX700: ReservedFirstVGPR: 8
1616
; GFX800: ReservedFirstVGPR: 8
17-
; GFX9: ReservedFirstVGPR: 14
17+
; GFX900: ReservedFirstVGPR: 11
1818
; CHECK: PrivateSegmentBufferSGPR: 0
1919
; CHECK: WavefrontPrivateSegmentOffsetSGPR: 11
2020
define amdgpu_kernel void @test(i32 addrspace(1)* %A) #0 !dbg !7 !kernel_arg_addr_space !12 !kernel_arg_access_qual !13 !kernel_arg_type !14 !kernel_arg_base_type !14 !kernel_arg_type_qual !15 {

tools/llvm-readobj/ELFDumper.cpp

+35-32
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
#include "llvm/Object/Error.h"
3535
#include "llvm/Object/ObjectFile.h"
3636
#include "llvm/Object/StackMapParser.h"
37+
#include "llvm/Support/AMDGPUMetadata.h"
3738
#include "llvm/Support/ARMAttributeParser.h"
3839
#include "llvm/Support/ARMBuildAttributes.h"
3940
#include "llvm/Support/Casting.h"
@@ -156,8 +157,6 @@ class ELFDumper : public ObjDumper {
156157
void printMipsReginfo() override;
157158
void printMipsOptions() override;
158159

159-
void printAMDGPUCodeObjectMetadata() override;
160-
161160
void printStackMap() const override;
162161

163162
void printHashHistogram() override;
@@ -2353,36 +2352,6 @@ template <class ELFT> void ELFDumper<ELFT>::printMipsOptions() {
23532352
}
23542353
}
23552354

2356-
template <class ELFT> void ELFDumper<ELFT>::printAMDGPUCodeObjectMetadata() {
2357-
const Elf_Shdr *Shdr = findSectionByName(*Obj, ".note");
2358-
if (!Shdr) {
2359-
W.startLine() << "There is no .note section in the file.\n";
2360-
return;
2361-
}
2362-
ArrayRef<uint8_t> Sec = unwrapOrError(Obj->getSectionContents(Shdr));
2363-
2364-
const uint32_t CodeObjectMetadataNoteType = 10;
2365-
for (auto I = reinterpret_cast<const Elf_Word *>(&Sec[0]),
2366-
E = I + Sec.size()/4; I != E;) {
2367-
uint32_t NameSZ = I[0];
2368-
uint32_t DescSZ = I[1];
2369-
uint32_t Type = I[2];
2370-
I += 3;
2371-
2372-
StringRef Name;
2373-
if (NameSZ) {
2374-
Name = StringRef(reinterpret_cast<const char *>(I), NameSZ - 1);
2375-
I += alignTo<4>(NameSZ)/4;
2376-
}
2377-
2378-
if (Name == "AMD" && Type == CodeObjectMetadataNoteType) {
2379-
StringRef Desc(reinterpret_cast<const char *>(I), DescSZ);
2380-
W.printString(Desc);
2381-
}
2382-
I += alignTo<4>(DescSZ)/4;
2383-
}
2384-
}
2385-
23862355
template <class ELFT> void ELFDumper<ELFT>::printStackMap() const {
23872356
const Elf_Shdr *StackMapSection = nullptr;
23882357
for (const auto &Sec : unwrapOrError(Obj->sections())) {
@@ -3487,6 +3456,39 @@ static void printGNUNote(raw_ostream &OS, uint32_t NoteType,
34873456
OS << '\n';
34883457
}
34893458

3459+
template <typename ELFT>
3460+
static void printAMDGPUNote(raw_ostream &OS, uint32_t NoteType,
3461+
ArrayRef<typename ELFFile<ELFT>::Elf_Word> Words,
3462+
size_t Size) {
3463+
switch (NoteType) {
3464+
default:
3465+
return;
3466+
case ELF::NT_AMD_AMDGPU_HSA_METADATA:
3467+
OS << " HSA Metadata:\n"
3468+
<< StringRef(reinterpret_cast<const char *>(Words.data()), Size);
3469+
break;
3470+
case ELF::NT_AMD_AMDGPU_ISA:
3471+
OS << " ISA Version:\n"
3472+
<< " "
3473+
<< StringRef(reinterpret_cast<const char *>(Words.data()), Size);
3474+
break;
3475+
case ELF::NT_AMD_AMDGPU_PAL_METADATA:
3476+
const uint32_t *PALMetadataBegin = reinterpret_cast<const uint32_t *>(Words.data());
3477+
const uint32_t *PALMetadataEnd = PALMetadataBegin + Size;
3478+
std::vector<uint32_t> PALMetadata(PALMetadataBegin, PALMetadataEnd);
3479+
std::string PALMetadataString;
3480+
auto Error = AMDGPU::PALMD::toString(PALMetadata, PALMetadataString);
3481+
OS << " PAL Metadata:\n";
3482+
if (Error) {
3483+
OS << " Invalid";
3484+
return;
3485+
}
3486+
OS << PALMetadataString;
3487+
break;
3488+
}
3489+
OS.flush();
3490+
}
3491+
34903492
template <class ELFT>
34913493
void GNUStyle<ELFT>::printNotes(const ELFFile<ELFT> *Obj) {
34923494
const Elf_Ehdr *e = Obj->getHeader();
@@ -3529,6 +3531,7 @@ void GNUStyle<ELFT>::printNotes(const ELFFile<ELFT> *Obj) {
35293531
OS << getFreeBSDNoteTypeName(Type) << '\n';
35303532
} else if (Name == "AMD") {
35313533
OS << getAMDGPUNoteTypeName(Type) << '\n';
3534+
printAMDGPUNote<ELFT>(OS, Type, Descriptor, DescriptorSize);
35323535
} else {
35333536
OS << "Unknown note type: (" << format_hex(Type, 10) << ')';
35343537
}

tools/llvm-readobj/ObjDumper.h

-3
Original file line numberDiff line numberDiff line change
@@ -58,9 +58,6 @@ class ObjDumper {
5858
virtual void printMipsReginfo() { }
5959
virtual void printMipsOptions() { }
6060

61-
// Only implemented for AMDGPU ELF at this time.
62-
virtual void printAMDGPUCodeObjectMetadata() {}
63-
6461
// Only implemented for PE/COFF.
6562
virtual void printCOFFImports() { }
6663
virtual void printCOFFExports() { }

tools/llvm-readobj/llvm-readobj.cpp

-8
Original file line numberDiff line numberDiff line change
@@ -200,11 +200,6 @@ namespace opts {
200200
cl::opt<bool> MipsOptions("mips-options",
201201
cl::desc("Display the MIPS .MIPS.options section"));
202202

203-
// -amdgpu-code-object-metadata
204-
cl::opt<bool> AMDGPUCodeObjectMetadata(
205-
"amdgpu-code-object-metadata",
206-
cl::desc("Display AMDGPU code object metadata"));
207-
208203
// -coff-imports
209204
cl::opt<bool>
210205
COFFImports("coff-imports", cl::desc("Display the PE/COFF import table"));
@@ -440,9 +435,6 @@ static void dumpObject(const ObjectFile *Obj) {
440435
if (opts::MipsOptions)
441436
Dumper->printMipsOptions();
442437
}
443-
if (Obj->getArch() == llvm::Triple::amdgcn)
444-
if (opts::AMDGPUCodeObjectMetadata)
445-
Dumper->printAMDGPUCodeObjectMetadata();
446438
if (opts::SectionGroups)
447439
Dumper->printGroupSections();
448440
if (opts::HashHistogram)

0 commit comments

Comments
 (0)