diff options
author | Sam Kolton <Sam.Kolton@amd.com> | 2016-10-06 13:46:08 +0000 |
---|---|---|
committer | Sam Kolton <Sam.Kolton@amd.com> | 2016-10-06 13:46:08 +0000 |
commit | 3381d7a21624b403b879c1261a82bb344710d7c7 (patch) | |
tree | 83e63e81c04ce193a8e6c413bbfcc36cffa2332a /llvm/tools/llvm-objdump/llvm-objdump.cpp | |
parent | 488c05763c41647c4b89d7e6d56d6854d6de463a (diff) | |
download | bcm5719-llvm-3381d7a21624b403b879c1261a82bb344710d7c7.tar.gz bcm5719-llvm-3381d7a21624b403b879c1261a82bb344710d7c7.zip |
[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
Diffstat (limited to 'llvm/tools/llvm-objdump/llvm-objdump.cpp')
-rw-r--r-- | llvm/tools/llvm-objdump/llvm-objdump.cpp | 18 |
1 files changed, 16 insertions, 2 deletions
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<const MCInstrInfo> MII(TheTarget->createMCInstrInfo()); if (!MII) report_fatal_error("error: no instruction info for target " + TripleName); - std::unique_ptr<const MCObjectFileInfo> 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<MCDisassembler> 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<MCRelocationInfo> RelInfo( + TheTarget->createMCRelocationInfo(TripleName, Ctx)); + if (RelInfo) { + std::unique_ptr<MCSymbolizer> 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<RelocationRef> Rels; if (InlineRelocs) { |