aboutsummaryrefslogtreecommitdiff
path: root/llvm/tools/llvm-objdump/llvm-objdump.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/tools/llvm-objdump/llvm-objdump.cpp')
-rw-r--r--llvm/tools/llvm-objdump/llvm-objdump.cpp39
1 files changed, 20 insertions, 19 deletions
diff --git a/llvm/tools/llvm-objdump/llvm-objdump.cpp b/llvm/tools/llvm-objdump/llvm-objdump.cpp
index 815759d..46be539d 100644
--- a/llvm/tools/llvm-objdump/llvm-objdump.cpp
+++ b/llvm/tools/llvm-objdump/llvm-objdump.cpp
@@ -1099,6 +1099,7 @@ PrettyPrinter &selectPrettyPrinter(Triple const &Triple) {
class DisassemblerTarget {
public:
const Target *TheTarget;
+ const Triple TheTriple;
std::unique_ptr<const MCSubtargetInfo> SubtargetInfo;
std::shared_ptr<MCContext> Context;
std::unique_ptr<MCDisassembler> DisAsm;
@@ -1122,18 +1123,19 @@ private:
DisassemblerTarget::DisassemblerTarget(const Target *TheTarget, ObjectFile &Obj,
StringRef TripleName, StringRef MCPU,
SubtargetFeatures &Features)
- : TheTarget(TheTarget), Printer(&selectPrettyPrinter(Triple(TripleName))),
- RegisterInfo(TheTarget->createMCRegInfo(TripleName)) {
+ : TheTarget(TheTarget), TheTriple(TripleName),
+ Printer(&selectPrettyPrinter(TheTriple)),
+ RegisterInfo(TheTarget->createMCRegInfo(TheTriple)) {
if (!RegisterInfo)
reportError(Obj.getFileName(), "no register info for target " + TripleName);
// Set up disassembler.
- AsmInfo.reset(TheTarget->createMCAsmInfo(*RegisterInfo, TripleName, Options));
+ AsmInfo.reset(TheTarget->createMCAsmInfo(*RegisterInfo, TheTriple, Options));
if (!AsmInfo)
reportError(Obj.getFileName(), "no assembly info for target " + TripleName);
SubtargetInfo.reset(
- TheTarget->createMCSubtargetInfo(TripleName, MCPU, Features.getString()));
+ TheTarget->createMCSubtargetInfo(TheTriple, MCPU, Features.getString()));
if (!SubtargetInfo)
reportError(Obj.getFileName(),
"no subtarget info for target " + TripleName);
@@ -1141,9 +1143,8 @@ DisassemblerTarget::DisassemblerTarget(const Target *TheTarget, ObjectFile &Obj,
if (!InstrInfo)
reportError(Obj.getFileName(),
"no instruction info for target " + TripleName);
- Context =
- std::make_shared<MCContext>(Triple(TripleName), AsmInfo.get(),
- RegisterInfo.get(), SubtargetInfo.get());
+ Context = std::make_shared<MCContext>(
+ TheTriple, AsmInfo.get(), RegisterInfo.get(), SubtargetInfo.get());
// FIXME: for now initialize MCObjectFileInfo with default values
ObjectFileInfo.reset(
@@ -1160,9 +1161,8 @@ DisassemblerTarget::DisassemblerTarget(const Target *TheTarget, ObjectFile &Obj,
InstrAnalysis.reset(TheTarget->createMCInstrAnalysis(InstrInfo.get()));
int AsmPrinterVariant = AsmInfo->getAssemblerDialect();
- InstPrinter.reset(TheTarget->createMCInstPrinter(Triple(TripleName),
- AsmPrinterVariant, *AsmInfo,
- *InstrInfo, *RegisterInfo));
+ InstPrinter.reset(TheTarget->createMCInstPrinter(
+ TheTriple, AsmPrinterVariant, *AsmInfo, *InstrInfo, *RegisterInfo));
if (!InstPrinter)
reportError(Obj.getFileName(),
"no instruction printer for target " + TripleName);
@@ -1187,8 +1187,8 @@ DisassemblerTarget::DisassemblerTarget(const Target *TheTarget, ObjectFile &Obj,
DisassemblerTarget::DisassemblerTarget(DisassemblerTarget &Other,
SubtargetFeatures &Features)
- : TheTarget(Other.TheTarget),
- SubtargetInfo(TheTarget->createMCSubtargetInfo(TripleName, MCPU,
+ : TheTarget(Other.TheTarget), TheTriple(Other.TheTriple),
+ SubtargetInfo(TheTarget->createMCSubtargetInfo(TheTriple, MCPU,
Features.getString())),
Context(Other.Context),
DisAsm(TheTarget->createMCDisassembler(*SubtargetInfo, *Context)),
@@ -1615,17 +1615,17 @@ collectLocalBranchTargets(ArrayRef<uint8_t> Bytes, MCInstrAnalysis *MIA,
// This is currently only used on AMDGPU, and assumes the format of the
// void * argument passed to AMDGPU's createMCSymbolizer.
static void addSymbolizer(
- MCContext &Ctx, const Target *Target, StringRef TripleName,
+ MCContext &Ctx, const Target *Target, const Triple &TheTriple,
MCDisassembler *DisAsm, uint64_t SectionAddr, ArrayRef<uint8_t> Bytes,
SectionSymbolsTy &Symbols,
std::vector<std::unique_ptr<std::string>> &SynthesizedLabelNames) {
std::unique_ptr<MCRelocationInfo> RelInfo(
- Target->createMCRelocationInfo(TripleName, Ctx));
+ Target->createMCRelocationInfo(TheTriple, Ctx));
if (!RelInfo)
return;
std::unique_ptr<MCSymbolizer> Symbolizer(Target->createMCSymbolizer(
- TripleName, nullptr, nullptr, &Symbols, &Ctx, std::move(RelInfo)));
+ TheTriple, nullptr, nullptr, &Symbols, &Ctx, std::move(RelInfo)));
MCSymbolizer *SymbolizerPtr = &*Symbolizer;
DisAsm->setSymbolizer(std::move(Symbolizer));
@@ -1662,9 +1662,9 @@ static void addSymbolizer(
}
llvm::stable_sort(Symbols);
// Recreate the symbolizer with the new symbols list.
- RelInfo.reset(Target->createMCRelocationInfo(TripleName, Ctx));
+ RelInfo.reset(Target->createMCRelocationInfo(TheTriple, Ctx));
Symbolizer.reset(Target->createMCSymbolizer(
- TripleName, nullptr, nullptr, &Symbols, &Ctx, std::move(RelInfo)));
+ TheTriple, nullptr, nullptr, &Symbols, &Ctx, std::move(RelInfo)));
DisAsm->setSymbolizer(std::move(Symbolizer));
}
@@ -1973,8 +1973,9 @@ disassembleObject(ObjectFile &Obj, const ObjectFile &DbgObj,
std::vector<std::unique_ptr<std::string>> SynthesizedLabelNames;
if (Obj.isELF() && Obj.getArch() == Triple::amdgcn) {
// AMDGPU disassembler uses symbolizer for printing labels
- addSymbolizer(*DT->Context, DT->TheTarget, TripleName, DT->DisAsm.get(),
- SectionAddr, Bytes, Symbols, SynthesizedLabelNames);
+ addSymbolizer(*DT->Context, DT->TheTarget, DT->TheTriple,
+ DT->DisAsm.get(), SectionAddr, Bytes, Symbols,
+ SynthesizedLabelNames);
}
StringRef SegmentName = getSegmentName(MachO, Section);