From 7032e50fbc7c48b49c161e8fea1aff5e71c48c22 Mon Sep 17 00:00:00 2001 From: Konstantin Zhuravlyov Date: Sat, 14 Oct 2017 18:21:42 +0000 Subject: [PATCH] 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 --- test/CodeGen/AMDGPU/elf-notes.ll | 20 +++++++ test/CodeGen/AMDGPU/hsa-metadata-deduce-ro-arg.ll | 2 +- .../AMDGPU/hsa-metadata-from-llvm-ir-full.ll | 11 ---- test/CodeGen/AMDGPU/hsa-metadata-images.ll | 6 +- .../AMDGPU/hsa-metadata-invalid-ocl-version-1.ll | 2 +- .../AMDGPU/hsa-metadata-invalid-ocl-version-2.ll | 2 +- .../AMDGPU/hsa-metadata-invalid-ocl-version-3.ll | 2 +- .../AMDGPU/hsa-metadata-kernel-code-props.ll | 6 +- .../AMDGPU/hsa-metadata-kernel-debug-props.ll | 8 +-- tools/llvm-readobj/ELFDumper.cpp | 67 +++++++++++----------- tools/llvm-readobj/ObjDumper.h | 3 - tools/llvm-readobj/llvm-readobj.cpp | 8 --- 12 files changed, 69 insertions(+), 68 deletions(-) diff --git a/test/CodeGen/AMDGPU/elf-notes.ll b/test/CodeGen/AMDGPU/elf-notes.ll index ab6ff2ad210..5ed14ead646 100644 --- a/test/CodeGen/AMDGPU/elf-notes.ll +++ b/test/CodeGen/AMDGPU/elf-notes.ll @@ -17,6 +17,8 @@ ; OSABI-UNK-ELF-NOT: Unknown note type ; OSABI-UNK-ELF: NT_AMD_AMDGPU_ISA (ISA Version) +; OSABI-UNK-ELF: ISA Version: +; OSABI-UNK-ELF: amdgcn-amd-unknown--gfx800 ; OSABI-UNK-ELF-NOT: Unknown note type ; OSABI-UNK-ELF-NOT: NT_AMD_AMDGPU_HSA_METADATA (HSA Metadata) ; OSABI-UNK-ELF-NOT: Unknown note type @@ -31,8 +33,22 @@ ; OSABI-HSA-ELF-NOT: Unknown note type ; OSABI-HSA-ELF: NT_AMD_AMDGPU_ISA (ISA Version) +; OSABI-HSA-ELF: ISA Version: +; OSABI-HSA-ELF: amdgcn-amd-amdhsa--gfx800 ; OSABI-HSA-ELF-NOT: Unknown note type ; OSABI-HSA-ELF: NT_AMD_AMDGPU_HSA_METADATA (HSA Metadata) +; OSABI-HSA-ELF: HSA Metadata: +; OSABI-HSA-ELF: --- +; OSABI-HSA-ELF: Version: [ 1, 0 ] +; OSABI-HSA-ELF: Kernels: +; OSABI-HSA-ELF: - Name: elf_notes +; OSABI-HSA-ELF: CodeProps: +; OSABI-HSA-ELF: WavefrontNumSGPRs: 96 +; OSABI-HSA-ELF: KernargSegmentAlign: 32 +; OSABI-HSA-ELF: GroupSegmentAlign: 4 +; OSABI-HSA-ELF: PrivateSegmentAlign: 4 +; OSABI-HSA-ELF: WavefrontSize: 6 +; OSABI-HSA-ELF: ... ; OSABI-HSA-ELF-NOT: Unknown note type ; OSABI-HSA-ELF-NOT: NT_AMD_AMDGPU_PAL_METADATA (PAL Metadata) ; OSABI-HSA-ELF-NOT: Unknown note type @@ -45,10 +61,14 @@ ; OSABI-PAL-ELF-NOT: Unknown note type ; OSABI-PAL-ELF: NT_AMD_AMDGPU_ISA (ISA Version) +; OSABI-PAL-ELF: ISA Version: +; OSABI-PAL-ELF: amdgcn-amd-amdpal--gfx800 ; OSABI-PAL-ELF-NOT: Unknown note type ; OSABI-PAL-ELF-NOT: NT_AMD_AMDGPU_HSA_METADATA (HSA Metadata) ; OSABI-PAL-ELF-NOT: Unknown note type ; OSABI-PAL-ELF: NT_AMD_AMDGPU_PAL_METADATA (PAL Metadata) +; OSABI-PAL-ELF: PAL Metadata: +; OSABI-PAL-ELF: 0x2e12,0xac02c0,0x2e13,0x80,0x1000001b,0x1,0x10000022,0x60,0x1000003e,0x0 ; OSABI-PAL-ELF-NOT: Unknown note type ; R600-NOT: .hsa_code_object_version diff --git a/test/CodeGen/AMDGPU/hsa-metadata-deduce-ro-arg.ll b/test/CodeGen/AMDGPU/hsa-metadata-deduce-ro-arg.ll index a33c3646e25..508bef0b22f 100644 --- a/test/CodeGen/AMDGPU/hsa-metadata-deduce-ro-arg.ll +++ b/test/CodeGen/AMDGPU/hsa-metadata-deduce-ro-arg.ll @@ -1,4 +1,4 @@ -; RUN: llc -mtriple=amdgcn-amd-amdhsa -filetype=obj -o - < %s | llvm-readobj -amdgpu-code-object-metadata -elf-output-style=GNU -notes | FileCheck %s +; RUN: llc -mtriple=amdgcn-amd-amdhsa -filetype=obj -o - < %s | llvm-readobj -elf-output-style=GNU -notes | FileCheck %s ; CHECK: - Name: test_ro_arg ; CHECK: Args: diff --git a/test/CodeGen/AMDGPU/hsa-metadata-from-llvm-ir-full.ll b/test/CodeGen/AMDGPU/hsa-metadata-from-llvm-ir-full.ll index 9e899000b91..da7be20bb8b 100644 --- a/test/CodeGen/AMDGPU/hsa-metadata-from-llvm-ir-full.ll +++ b/test/CodeGen/AMDGPU/hsa-metadata-from-llvm-ir-full.ll @@ -1,6 +1,3 @@ -; 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 -; 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 -; 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 ; 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 ; 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 ; 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" } !101 = !{!"2:1:8:%g\5Cn"} !110 = !{!"__block_literal"} -; NOTES: Displaying notes found at file offset 0x{{[0-9]+}} -; NOTES: Owner Data size Description -; NOTES: AMD 0x00000008 Unknown note type (0x00000001) -; NOTES: AMD 0x0000001b Unknown note type (0x00000003) -; GFX700: AMD 0x00008f64 NT_AMD_AMDGPU_HSA_METADATA (HSA Metadata) -; GFX800: AMD 0x000092e4 NT_AMD_AMDGPU_HSA_METADATA (HSA Metadata) -; GFX900: AMD 0x00008f64 NT_AMD_AMDGPU_HSA_METADATA (HSA Metadata) - ; PARSER: AMDGPU HSA Metadata Parser Test: PASS diff --git a/test/CodeGen/AMDGPU/hsa-metadata-images.ll b/test/CodeGen/AMDGPU/hsa-metadata-images.ll index 91856046985..a29f86d0170 100644 --- a/test/CodeGen/AMDGPU/hsa-metadata-images.ll +++ b/test/CodeGen/AMDGPU/hsa-metadata-images.ll @@ -1,6 +1,6 @@ -; 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 -; 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 -; 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 +; 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 +; 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 +; 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 %opencl.image1d_t = type opaque %opencl.image1d_array_t = type opaque diff --git a/test/CodeGen/AMDGPU/hsa-metadata-invalid-ocl-version-1.ll b/test/CodeGen/AMDGPU/hsa-metadata-invalid-ocl-version-1.ll index f41da9f9213..f46b07d80b5 100644 --- a/test/CodeGen/AMDGPU/hsa-metadata-invalid-ocl-version-1.ll +++ b/test/CodeGen/AMDGPU/hsa-metadata-invalid-ocl-version-1.ll @@ -1,4 +1,4 @@ -; RUN: llc -mtriple=amdgcn-amd-amdhsa -filetype=obj -o - < %s | llvm-readobj -amdgpu-code-object-metadata | FileCheck %s +; RUN: llc -mtriple=amdgcn-amd-amdhsa -filetype=obj -o - < %s | llvm-readobj -elf-output-style=GNU -notes | FileCheck %s ; Make sure llc does not crash for invalid opencl version metadata. diff --git a/test/CodeGen/AMDGPU/hsa-metadata-invalid-ocl-version-2.ll b/test/CodeGen/AMDGPU/hsa-metadata-invalid-ocl-version-2.ll index 0509663d984..f4e584b5ae3 100644 --- a/test/CodeGen/AMDGPU/hsa-metadata-invalid-ocl-version-2.ll +++ b/test/CodeGen/AMDGPU/hsa-metadata-invalid-ocl-version-2.ll @@ -1,4 +1,4 @@ -; RUN: llc -mtriple=amdgcn-amd-amdhsa -filetype=obj -o - < %s | llvm-readobj -amdgpu-code-object-metadata | FileCheck %s +; RUN: llc -mtriple=amdgcn-amd-amdhsa -filetype=obj -o - < %s | llvm-readobj -elf-output-style=GNU -notes | FileCheck %s ; Make sure llc does not crash for invalid opencl version metadata. diff --git a/test/CodeGen/AMDGPU/hsa-metadata-invalid-ocl-version-3.ll b/test/CodeGen/AMDGPU/hsa-metadata-invalid-ocl-version-3.ll index 7404cec5d78..5e951dd3f8f 100644 --- a/test/CodeGen/AMDGPU/hsa-metadata-invalid-ocl-version-3.ll +++ b/test/CodeGen/AMDGPU/hsa-metadata-invalid-ocl-version-3.ll @@ -1,4 +1,4 @@ -; RUN: llc -mtriple=amdgcn-amd-amdhsa -filetype=obj -o - < %s | llvm-readobj -amdgpu-code-object-metadata | FileCheck %s +; RUN: llc -mtriple=amdgcn-amd-amdhsa -filetype=obj -o - < %s | llvm-readobj -elf-output-style=GNU -notes | FileCheck %s ; Make sure llc does not crash for invalid opencl version metadata. diff --git a/test/CodeGen/AMDGPU/hsa-metadata-kernel-code-props.ll b/test/CodeGen/AMDGPU/hsa-metadata-kernel-code-props.ll index 3b232e40cf2..c10c69a92c7 100644 --- a/test/CodeGen/AMDGPU/hsa-metadata-kernel-code-props.ll +++ b/test/CodeGen/AMDGPU/hsa-metadata-kernel-code-props.ll @@ -1,6 +1,6 @@ -; 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 -; 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 -; 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 +; 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 +; 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 +; 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 ; CHECK: --- ; CHECK: Version: [ 1, 0 ] diff --git a/test/CodeGen/AMDGPU/hsa-metadata-kernel-debug-props.ll b/test/CodeGen/AMDGPU/hsa-metadata-kernel-debug-props.ll index 0ffc9220315..a8639453485 100644 --- a/test/CodeGen/AMDGPU/hsa-metadata-kernel-debug-props.ll +++ b/test/CodeGen/AMDGPU/hsa-metadata-kernel-debug-props.ll @@ -1,6 +1,6 @@ -; 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 -; 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 -; 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 +; 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 +; 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 +; 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 declare void @llvm.dbg.declare(metadata, metadata, metadata) @@ -14,7 +14,7 @@ declare void @llvm.dbg.declare(metadata, metadata, metadata) ; CHECK: ReservedNumVGPRs: 4 ; GFX700: ReservedFirstVGPR: 8 ; GFX800: ReservedFirstVGPR: 8 -; GFX9: ReservedFirstVGPR: 14 +; GFX900: ReservedFirstVGPR: 11 ; CHECK: PrivateSegmentBufferSGPR: 0 ; CHECK: WavefrontPrivateSegmentOffsetSGPR: 11 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 { diff --git a/tools/llvm-readobj/ELFDumper.cpp b/tools/llvm-readobj/ELFDumper.cpp index 24139d66b1f..be976ca8826 100644 --- a/tools/llvm-readobj/ELFDumper.cpp +++ b/tools/llvm-readobj/ELFDumper.cpp @@ -34,6 +34,7 @@ #include "llvm/Object/Error.h" #include "llvm/Object/ObjectFile.h" #include "llvm/Object/StackMapParser.h" +#include "llvm/Support/AMDGPUMetadata.h" #include "llvm/Support/ARMAttributeParser.h" #include "llvm/Support/ARMBuildAttributes.h" #include "llvm/Support/Casting.h" @@ -156,8 +157,6 @@ public: void printMipsReginfo() override; void printMipsOptions() override; - void printAMDGPUCodeObjectMetadata() override; - void printStackMap() const override; void printHashHistogram() override; @@ -2353,36 +2352,6 @@ template void ELFDumper::printMipsOptions() { } } -template void ELFDumper::printAMDGPUCodeObjectMetadata() { - const Elf_Shdr *Shdr = findSectionByName(*Obj, ".note"); - if (!Shdr) { - W.startLine() << "There is no .note section in the file.\n"; - return; - } - ArrayRef Sec = unwrapOrError(Obj->getSectionContents(Shdr)); - - const uint32_t CodeObjectMetadataNoteType = 10; - for (auto I = reinterpret_cast(&Sec[0]), - E = I + Sec.size()/4; I != E;) { - uint32_t NameSZ = I[0]; - uint32_t DescSZ = I[1]; - uint32_t Type = I[2]; - I += 3; - - StringRef Name; - if (NameSZ) { - Name = StringRef(reinterpret_cast(I), NameSZ - 1); - I += alignTo<4>(NameSZ)/4; - } - - if (Name == "AMD" && Type == CodeObjectMetadataNoteType) { - StringRef Desc(reinterpret_cast(I), DescSZ); - W.printString(Desc); - } - I += alignTo<4>(DescSZ)/4; - } -} - template void ELFDumper::printStackMap() const { const Elf_Shdr *StackMapSection = nullptr; for (const auto &Sec : unwrapOrError(Obj->sections())) { @@ -3487,6 +3456,39 @@ static void printGNUNote(raw_ostream &OS, uint32_t NoteType, OS << '\n'; } +template +static void printAMDGPUNote(raw_ostream &OS, uint32_t NoteType, + ArrayRef::Elf_Word> Words, + size_t Size) { + switch (NoteType) { + default: + return; + case ELF::NT_AMD_AMDGPU_HSA_METADATA: + OS << " HSA Metadata:\n" + << StringRef(reinterpret_cast(Words.data()), Size); + break; + case ELF::NT_AMD_AMDGPU_ISA: + OS << " ISA Version:\n" + << " " + << StringRef(reinterpret_cast(Words.data()), Size); + break; + case ELF::NT_AMD_AMDGPU_PAL_METADATA: + const uint32_t *PALMetadataBegin = reinterpret_cast(Words.data()); + const uint32_t *PALMetadataEnd = PALMetadataBegin + Size; + std::vector PALMetadata(PALMetadataBegin, PALMetadataEnd); + std::string PALMetadataString; + auto Error = AMDGPU::PALMD::toString(PALMetadata, PALMetadataString); + OS << " PAL Metadata:\n"; + if (Error) { + OS << " Invalid"; + return; + } + OS << PALMetadataString; + break; + } + OS.flush(); +} + template void GNUStyle::printNotes(const ELFFile *Obj) { const Elf_Ehdr *e = Obj->getHeader(); @@ -3529,6 +3531,7 @@ void GNUStyle::printNotes(const ELFFile *Obj) { OS << getFreeBSDNoteTypeName(Type) << '\n'; } else if (Name == "AMD") { OS << getAMDGPUNoteTypeName(Type) << '\n'; + printAMDGPUNote(OS, Type, Descriptor, DescriptorSize); } else { OS << "Unknown note type: (" << format_hex(Type, 10) << ')'; } diff --git a/tools/llvm-readobj/ObjDumper.h b/tools/llvm-readobj/ObjDumper.h index 43883c2d217..f283e559e2a 100644 --- a/tools/llvm-readobj/ObjDumper.h +++ b/tools/llvm-readobj/ObjDumper.h @@ -58,9 +58,6 @@ public: virtual void printMipsReginfo() { } virtual void printMipsOptions() { } - // Only implemented for AMDGPU ELF at this time. - virtual void printAMDGPUCodeObjectMetadata() {} - // Only implemented for PE/COFF. virtual void printCOFFImports() { } virtual void printCOFFExports() { } diff --git a/tools/llvm-readobj/llvm-readobj.cpp b/tools/llvm-readobj/llvm-readobj.cpp index f24ce67da84..05b7c800cc1 100644 --- a/tools/llvm-readobj/llvm-readobj.cpp +++ b/tools/llvm-readobj/llvm-readobj.cpp @@ -200,11 +200,6 @@ namespace opts { cl::opt MipsOptions("mips-options", cl::desc("Display the MIPS .MIPS.options section")); - // -amdgpu-code-object-metadata - cl::opt AMDGPUCodeObjectMetadata( - "amdgpu-code-object-metadata", - cl::desc("Display AMDGPU code object metadata")); - // -coff-imports cl::opt COFFImports("coff-imports", cl::desc("Display the PE/COFF import table")); @@ -440,9 +435,6 @@ static void dumpObject(const ObjectFile *Obj) { if (opts::MipsOptions) Dumper->printMipsOptions(); } - if (Obj->getArch() == llvm::Triple::amdgcn) - if (opts::AMDGPUCodeObjectMetadata) - Dumper->printAMDGPUCodeObjectMetadata(); if (opts::SectionGroups) Dumper->printGroupSections(); if (opts::HashHistogram) -- 2.11.0