@@ -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+
14211430void llvm::printRelocations (const ObjectFile *Obj) {
14221431 StringRef Fmt = Obj->getBytesInAddress () > 4 ? " %016" PRIx64 :
14231432 " %08" PRIx64;
0 commit comments