diff options
author | George Rimar <grimar@accesssoftek.com> | 2019-01-23 10:33:26 +0000 |
---|---|---|
committer | George Rimar <grimar@accesssoftek.com> | 2019-01-23 10:33:26 +0000 |
commit | bcbe98bcb9496a7881b7a29af3c488d0a855d032 (patch) | |
tree | 03973314526e9e31b8b16412e3d926229b1fe9c8 /llvm/tools/llvm-objdump/llvm-objdump.cpp | |
parent | 6046d087c5b91d997ee025f38d83405bf0668adb (diff) | |
download | llvm-bcbe98bcb9496a7881b7a29af3c488d0a855d032.zip llvm-bcbe98bcb9496a7881b7a29af3c488d0a855d032.tar.gz llvm-bcbe98bcb9496a7881b7a29af3c488d0a855d032.tar.bz2 |
[llvm-objdump] - Split disassembleObject() into two methods. NFCI.
Currently, disassembleObject() is a ~550 lines length function.
This patch splits it into two, where first do all helper objects initializations
and calls the second which does all the rest job.
This is a straightforward split.
Differential revision: https://reviews.llvm.org/D57020
llvm-svn: 351940
Diffstat (limited to 'llvm/tools/llvm-objdump/llvm-objdump.cpp')
-rw-r--r-- | llvm/tools/llvm-objdump/llvm-objdump.cpp | 129 |
1 files changed, 69 insertions, 60 deletions
diff --git a/llvm/tools/llvm-objdump/llvm-objdump.cpp b/llvm/tools/llvm-objdump/llvm-objdump.cpp index ccc4e46..fe873c0 100644 --- a/llvm/tools/llvm-objdump/llvm-objdump.cpp +++ b/llvm/tools/llvm-objdump/llvm-objdump.cpp @@ -885,66 +885,13 @@ getRelocsMap(llvm::object::ObjectFile const &Obj) { return Ret; } -static void disassembleObject(const ObjectFile *Obj, bool InlineRelocs) { - if (StartAddress > StopAddress) - error("Start address should be less than stop address"); - - const Target *TheTarget = getTarget(Obj); - - // Package up features to be passed to target/subtarget - SubtargetFeatures Features = Obj->getFeatures(); - if (!MAttrs.empty()) - for (unsigned I = 0; I != MAttrs.size(); ++I) - Features.AddFeature(MAttrs[I]); - - std::unique_ptr<const MCRegisterInfo> MRI( - TheTarget->createMCRegInfo(TripleName)); - if (!MRI) - report_error(Obj->getFileName(), "no register info for target " + - TripleName); - - // Set up disassembler. - std::unique_ptr<const MCAsmInfo> AsmInfo( - TheTarget->createMCAsmInfo(*MRI, TripleName)); - if (!AsmInfo) - report_error(Obj->getFileName(), "no assembly info for target " + - TripleName); - std::unique_ptr<const MCSubtargetInfo> STI( - TheTarget->createMCSubtargetInfo(TripleName, MCPU, Features.getString())); - if (!STI) - report_error(Obj->getFileName(), "no subtarget info for target " + - TripleName); - std::unique_ptr<const MCInstrInfo> MII(TheTarget->createMCInstrInfo()); - if (!MII) - report_error(Obj->getFileName(), "no instruction info for target " + - TripleName); - MCObjectFileInfo MOFI; - MCContext Ctx(AsmInfo.get(), MRI.get(), &MOFI); - // FIXME: for now initialize MCObjectFileInfo with default values - MOFI.InitMCObjectFileInfo(Triple(TripleName), false, Ctx); - - std::unique_ptr<MCDisassembler> DisAsm( - TheTarget->createMCDisassembler(*STI, Ctx)); - if (!DisAsm) - report_error(Obj->getFileName(), "no disassembler for target " + - TripleName); - - std::unique_ptr<const MCInstrAnalysis> MIA( - TheTarget->createMCInstrAnalysis(MII.get())); - - int AsmPrinterVariant = AsmInfo->getAssemblerDialect(); - std::unique_ptr<MCInstPrinter> IP(TheTarget->createMCInstPrinter( - Triple(TripleName), AsmPrinterVariant, *AsmInfo, *MII, *MRI)); - if (!IP) - report_error(Obj->getFileName(), "no instruction printer for target " + - TripleName); - IP->setPrintImmHex(PrintImmHex); - PrettyPrinter &PIP = selectPrettyPrinter(Triple(TripleName)); - - StringRef Fmt = Obj->getBytesInAddress() > 4 ? "\t\t%016" PRIx64 ": " : - "\t\t\t%08" PRIx64 ": "; - - SourcePrinter SP(Obj, TheTarget->getName()); +static void disassembleObject(const Target *TheTarget, const ObjectFile *Obj, + MCContext &Ctx, MCDisassembler *DisAsm, + const MCInstrAnalysis *MIA, MCInstPrinter *IP, + const MCSubtargetInfo *STI, PrettyPrinter &PIP, + SourcePrinter &SP, bool InlineRelocs) { + StringRef Fmt = Obj->getBytesInAddress() > 4 ? "\t\t%016" PRIx64 ": " + : "\t\t\t%08" PRIx64 ": "; std::map<SectionRef, std::vector<RelocationRef>> RelocMap; if (InlineRelocs) @@ -1418,6 +1365,68 @@ static void disassembleObject(const ObjectFile *Obj, bool InlineRelocs) { } } +static void disassembleObject(const ObjectFile *Obj, bool InlineRelocs) { + if (StartAddress > StopAddress) + error("Start address should be less than stop address"); + + const Target *TheTarget = getTarget(Obj); + + // Package up features to be passed to target/subtarget + SubtargetFeatures Features = Obj->getFeatures(); + if (!MAttrs.empty()) + for (unsigned I = 0; I != MAttrs.size(); ++I) + Features.AddFeature(MAttrs[I]); + + std::unique_ptr<const MCRegisterInfo> MRI( + TheTarget->createMCRegInfo(TripleName)); + if (!MRI) + report_error(Obj->getFileName(), + "no register info for target " + TripleName); + + // Set up disassembler. + std::unique_ptr<const MCAsmInfo> AsmInfo( + TheTarget->createMCAsmInfo(*MRI, TripleName)); + if (!AsmInfo) + report_error(Obj->getFileName(), + "no assembly info for target " + TripleName); + std::unique_ptr<const MCSubtargetInfo> STI( + TheTarget->createMCSubtargetInfo(TripleName, MCPU, Features.getString())); + if (!STI) + report_error(Obj->getFileName(), + "no subtarget info for target " + TripleName); + std::unique_ptr<const MCInstrInfo> MII(TheTarget->createMCInstrInfo()); + if (!MII) + report_error(Obj->getFileName(), + "no instruction info for target " + TripleName); + MCObjectFileInfo MOFI; + MCContext Ctx(AsmInfo.get(), MRI.get(), &MOFI); + // FIXME: for now initialize MCObjectFileInfo with default values + MOFI.InitMCObjectFileInfo(Triple(TripleName), false, Ctx); + + std::unique_ptr<MCDisassembler> DisAsm( + TheTarget->createMCDisassembler(*STI, Ctx)); + if (!DisAsm) + report_error(Obj->getFileName(), + "no disassembler for target " + TripleName); + + std::unique_ptr<const MCInstrAnalysis> MIA( + TheTarget->createMCInstrAnalysis(MII.get())); + + int AsmPrinterVariant = AsmInfo->getAssemblerDialect(); + std::unique_ptr<MCInstPrinter> IP(TheTarget->createMCInstPrinter( + Triple(TripleName), AsmPrinterVariant, *AsmInfo, *MII, *MRI)); + if (!IP) + report_error(Obj->getFileName(), + "no instruction printer for target " + TripleName); + IP->setPrintImmHex(PrintImmHex); + + PrettyPrinter &PIP = selectPrettyPrinter(Triple(TripleName)); + SourcePrinter SP(Obj, TheTarget->getName()); + + disassembleObject(TheTarget, Obj, Ctx, DisAsm.get(), MIA.get(), IP.get(), + STI.get(), PIP, SP, InlineRelocs); +} + void llvm::printRelocations(const ObjectFile *Obj) { StringRef Fmt = Obj->getBytesInAddress() > 4 ? "%016" PRIx64 : "%08" PRIx64; |