Skip to content

Commit bcbe98b

Browse files
author
George Rimar
committed
[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
1 parent 6046d08 commit bcbe98b

File tree

1 file changed

+69
-60
lines changed

1 file changed

+69
-60
lines changed

llvm/tools/llvm-objdump/llvm-objdump.cpp

Lines changed: 69 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -885,66 +885,13 @@ getRelocsMap(llvm::object::ObjectFile const &Obj) {
885885
return Ret;
886886
}
887887

888-
static void disassembleObject(const ObjectFile *Obj, bool InlineRelocs) {
889-
if (StartAddress > StopAddress)
890-
error("Start address should be less than stop address");
891-
892-
const Target *TheTarget = getTarget(Obj);
893-
894-
// Package up features to be passed to target/subtarget
895-
SubtargetFeatures Features = Obj->getFeatures();
896-
if (!MAttrs.empty())
897-
for (unsigned I = 0; I != MAttrs.size(); ++I)
898-
Features.AddFeature(MAttrs[I]);
899-
900-
std::unique_ptr<const MCRegisterInfo> MRI(
901-
TheTarget->createMCRegInfo(TripleName));
902-
if (!MRI)
903-
report_error(Obj->getFileName(), "no register info for target " +
904-
TripleName);
905-
906-
// Set up disassembler.
907-
std::unique_ptr<const MCAsmInfo> AsmInfo(
908-
TheTarget->createMCAsmInfo(*MRI, TripleName));
909-
if (!AsmInfo)
910-
report_error(Obj->getFileName(), "no assembly info for target " +
911-
TripleName);
912-
std::unique_ptr<const MCSubtargetInfo> STI(
913-
TheTarget->createMCSubtargetInfo(TripleName, MCPU, Features.getString()));
914-
if (!STI)
915-
report_error(Obj->getFileName(), "no subtarget info for target " +
916-
TripleName);
917-
std::unique_ptr<const MCInstrInfo> MII(TheTarget->createMCInstrInfo());
918-
if (!MII)
919-
report_error(Obj->getFileName(), "no instruction info for target " +
920-
TripleName);
921-
MCObjectFileInfo MOFI;
922-
MCContext Ctx(AsmInfo.get(), MRI.get(), &MOFI);
923-
// FIXME: for now initialize MCObjectFileInfo with default values
924-
MOFI.InitMCObjectFileInfo(Triple(TripleName), false, Ctx);
925-
926-
std::unique_ptr<MCDisassembler> DisAsm(
927-
TheTarget->createMCDisassembler(*STI, Ctx));
928-
if (!DisAsm)
929-
report_error(Obj->getFileName(), "no disassembler for target " +
930-
TripleName);
931-
932-
std::unique_ptr<const MCInstrAnalysis> MIA(
933-
TheTarget->createMCInstrAnalysis(MII.get()));
934-
935-
int AsmPrinterVariant = AsmInfo->getAssemblerDialect();
936-
std::unique_ptr<MCInstPrinter> IP(TheTarget->createMCInstPrinter(
937-
Triple(TripleName), AsmPrinterVariant, *AsmInfo, *MII, *MRI));
938-
if (!IP)
939-
report_error(Obj->getFileName(), "no instruction printer for target " +
940-
TripleName);
941-
IP->setPrintImmHex(PrintImmHex);
942-
PrettyPrinter &PIP = selectPrettyPrinter(Triple(TripleName));
943-
944-
StringRef Fmt = Obj->getBytesInAddress() > 4 ? "\t\t%016" PRIx64 ": " :
945-
"\t\t\t%08" PRIx64 ": ";
946-
947-
SourcePrinter SP(Obj, TheTarget->getName());
888+
static void disassembleObject(const Target *TheTarget, const ObjectFile *Obj,
889+
MCContext &Ctx, MCDisassembler *DisAsm,
890+
const MCInstrAnalysis *MIA, MCInstPrinter *IP,
891+
const MCSubtargetInfo *STI, PrettyPrinter &PIP,
892+
SourcePrinter &SP, bool InlineRelocs) {
893+
StringRef Fmt = Obj->getBytesInAddress() > 4 ? "\t\t%016" PRIx64 ": "
894+
: "\t\t\t%08" PRIx64 ": ";
948895

949896
std::map<SectionRef, std::vector<RelocationRef>> RelocMap;
950897
if (InlineRelocs)
@@ -1418,6 +1365,68 @@ static void disassembleObject(const ObjectFile *Obj, bool InlineRelocs) {
14181365
}
14191366
}
14201367

1368+
static void disassembleObject(const ObjectFile *Obj, bool InlineRelocs) {
1369+
if (StartAddress > StopAddress)
1370+
error("Start address should be less than stop address");
1371+
1372+
const Target *TheTarget = getTarget(Obj);
1373+
1374+
// Package up features to be passed to target/subtarget
1375+
SubtargetFeatures Features = Obj->getFeatures();
1376+
if (!MAttrs.empty())
1377+
for (unsigned I = 0; I != MAttrs.size(); ++I)
1378+
Features.AddFeature(MAttrs[I]);
1379+
1380+
std::unique_ptr<const MCRegisterInfo> MRI(
1381+
TheTarget->createMCRegInfo(TripleName));
1382+
if (!MRI)
1383+
report_error(Obj->getFileName(),
1384+
"no register info for target " + TripleName);
1385+
1386+
// Set up disassembler.
1387+
std::unique_ptr<const MCAsmInfo> AsmInfo(
1388+
TheTarget->createMCAsmInfo(*MRI, TripleName));
1389+
if (!AsmInfo)
1390+
report_error(Obj->getFileName(),
1391+
"no assembly info for target " + TripleName);
1392+
std::unique_ptr<const MCSubtargetInfo> STI(
1393+
TheTarget->createMCSubtargetInfo(TripleName, MCPU, Features.getString()));
1394+
if (!STI)
1395+
report_error(Obj->getFileName(),
1396+
"no subtarget info for target " + TripleName);
1397+
std::unique_ptr<const MCInstrInfo> MII(TheTarget->createMCInstrInfo());
1398+
if (!MII)
1399+
report_error(Obj->getFileName(),
1400+
"no instruction info for target " + TripleName);
1401+
MCObjectFileInfo MOFI;
1402+
MCContext Ctx(AsmInfo.get(), MRI.get(), &MOFI);
1403+
// FIXME: for now initialize MCObjectFileInfo with default values
1404+
MOFI.InitMCObjectFileInfo(Triple(TripleName), false, Ctx);
1405+
1406+
std::unique_ptr<MCDisassembler> DisAsm(
1407+
TheTarget->createMCDisassembler(*STI, Ctx));
1408+
if (!DisAsm)
1409+
report_error(Obj->getFileName(),
1410+
"no disassembler for target " + TripleName);
1411+
1412+
std::unique_ptr<const MCInstrAnalysis> MIA(
1413+
TheTarget->createMCInstrAnalysis(MII.get()));
1414+
1415+
int AsmPrinterVariant = AsmInfo->getAssemblerDialect();
1416+
std::unique_ptr<MCInstPrinter> IP(TheTarget->createMCInstPrinter(
1417+
Triple(TripleName), AsmPrinterVariant, *AsmInfo, *MII, *MRI));
1418+
if (!IP)
1419+
report_error(Obj->getFileName(),
1420+
"no instruction printer for target " + TripleName);
1421+
IP->setPrintImmHex(PrintImmHex);
1422+
1423+
PrettyPrinter &PIP = selectPrettyPrinter(Triple(TripleName));
1424+
SourcePrinter SP(Obj, TheTarget->getName());
1425+
1426+
disassembleObject(TheTarget, Obj, Ctx, DisAsm.get(), MIA.get(), IP.get(),
1427+
STI.get(), PIP, SP, InlineRelocs);
1428+
}
1429+
14211430
void llvm::printRelocations(const ObjectFile *Obj) {
14221431
StringRef Fmt = Obj->getBytesInAddress() > 4 ? "%016" PRIx64 :
14231432
"%08" PRIx64;

0 commit comments

Comments
 (0)