From 3381d7a21624b403b879c1261a82bb344710d7c7 Mon Sep 17 00:00:00 2001 From: Sam Kolton Date: Thu, 6 Oct 2016 13:46:08 +0000 Subject: [AMDGPU] Disassembler: print label names in branch instructions Summary: Add AMDGPUSymbolizer for finding names for labels from ELF symbol table. Initialize MCObjectFileInfo with some default values. Reviewers: vpykhtin, artem.tamazov, tstellarAMD Subscribers: arsenm, kzhuravl, wdng, nhaehnle, yaxunl, tony-tye Differential Revision: https://reviews.llvm.org/D24802 llvm-svn: 283450 --- llvm/tools/llvm-objdump/llvm-objdump.cpp | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) (limited to 'llvm/tools/llvm-objdump') diff --git a/llvm/tools/llvm-objdump/llvm-objdump.cpp b/llvm/tools/llvm-objdump/llvm-objdump.cpp index 2ad1a8bf2de..9dbce9726f5 100644 --- a/llvm/tools/llvm-objdump/llvm-objdump.cpp +++ b/llvm/tools/llvm-objdump/llvm-objdump.cpp @@ -1097,8 +1097,10 @@ static void DisassembleObject(const ObjectFile *Obj, bool InlineRelocs) { std::unique_ptr MII(TheTarget->createMCInstrInfo()); if (!MII) report_fatal_error("error: no instruction info for target " + TripleName); - std::unique_ptr MOFI(new MCObjectFileInfo); - MCContext Ctx(AsmInfo.get(), MRI.get(), MOFI.get()); + MCObjectFileInfo MOFI; + MCContext Ctx(AsmInfo.get(), MRI.get(), &MOFI); + // FIXME: for now initialize MCObjectFileInfo with default values + MOFI.InitMCObjectFileInfo(Triple(TripleName), false, CodeModel::Default, Ctx); std::unique_ptr DisAsm( TheTarget->createMCDisassembler(*STI, Ctx)); @@ -1229,6 +1231,18 @@ static void DisassembleObject(const ObjectFile *Obj, bool InlineRelocs) { std::sort(DataMappingSymsAddr.begin(), DataMappingSymsAddr.end()); std::sort(TextMappingSymsAddr.begin(), TextMappingSymsAddr.end()); + if (Obj->isELF() && Obj->getArch() == Triple::amdgcn) { + // AMDGPU disassembler uses symbolizer for printing labels + std::unique_ptr RelInfo( + TheTarget->createMCRelocationInfo(TripleName, Ctx)); + if (RelInfo) { + std::unique_ptr Symbolizer( + TheTarget->createMCSymbolizer( + TripleName, nullptr, nullptr, &Symbols, &Ctx, std::move(RelInfo))); + DisAsm->setSymbolizer(std::move(Symbolizer)); + } + } + // Make a list of all the relocations for this section. std::vector Rels; if (InlineRelocs) { -- cgit v1.2.3