Index: llvm/trunk/tools/llvm-objdump/llvm-objdump.cpp =================================================================== --- llvm/trunk/tools/llvm-objdump/llvm-objdump.cpp +++ llvm/trunk/tools/llvm-objdump/llvm-objdump.cpp @@ -201,6 +201,30 @@ return a_addr < b_addr; } +namespace { +class PrettyPrinter { +public: + virtual void printInst(MCInstPrinter &IP, const MCInst *MI, bool ShowRawInsn, + ArrayRef Bytes, uint64_t Address, + raw_ostream &OS, StringRef Annot, + MCSubtargetInfo const &STI) { + outs() << format("%8" PRIx64 ":", Address); + if (!NoShowRawInsn) { + outs() << "\t"; + dumpBytes(Bytes, outs()); + } + IP.printInst(MI, outs(), "", STI); + } +}; +PrettyPrinter PrettyPrinterInst; +PrettyPrinter &selectPrettyPrinter(Triple const &Triple, MCInstPrinter &IP) { + switch(Triple.getArch()) { + default: + return PrettyPrinterInst; + } +} +} + static void DisassembleObject(const ObjectFile *Obj, bool InlineRelocs) { const Target *TheTarget = getTarget(Obj); // getTarget() will have already issued a diagnostic if necessary, so @@ -267,6 +291,7 @@ << '\n'; return; } + PrettyPrinter &PIP = selectPrettyPrinter(Triple(TripleName), *IP); StringRef Fmt = Obj->getBytesInAddress() > 4 ? "\t\t%016" PRIx64 ": " : "\t\t\t%08" PRIx64 ": "; @@ -383,12 +408,9 @@ if (DisAsm->getInstruction(Inst, Size, Bytes.slice(Index), SectionAddr + Index, DebugOut, CommentStream)) { - outs() << format("%8" PRIx64 ":", SectionAddr + Index); - if (!NoShowRawInsn) { - outs() << "\t"; - dumpBytes(ArrayRef(Bytes.data() + Index, Size), outs()); - } - IP->printInst(&Inst, outs(), "", *STI); + PIP.printInst(*IP, &Inst, !NoShowRawInsn, + Bytes.slice(Index, Size), + SectionAddr + Index, outs(), "", *STI); outs() << CommentStream.str(); Comments.clear(); outs() << "\n";