[llvm] r238457 - [Objdump] Allow instruction pretty printing to be specialized by the target triple.
Rafael EspĂndola
rafael.espindola at gmail.com
Thu May 28 13:28:27 PDT 2015
/home/espindola/llvm/llvm/tools/llvm-objdump/llvm-objdump.cpp:205:7:
warning: '(anonymous namespace)::PrettyPrinter' has virtual functions
but non-virtual destructor [-Wnon-virtual-dtor]
class PrettyPrinter {
^
1 warning generated.
Also, this class is just a function pointer, no?
On 28 May 2015 at 15:07, Colin LeMahieu <colinl at codeaurora.org> wrote:
> Author: colinl
> Date: Thu May 28 14:07:14 2015
> New Revision: 238457
>
> URL: http://llvm.org/viewvc/llvm-project?rev=238457&view=rev
> Log:
> [Objdump] Allow instruction pretty printing to be specialized by the target triple.
>
> Differential Revision: http://reviews.llvm.org/D8427
>
> Modified:
> llvm/trunk/tools/llvm-objdump/llvm-objdump.cpp
>
> Modified: llvm/trunk/tools/llvm-objdump/llvm-objdump.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-objdump/llvm-objdump.cpp?rev=238457&r1=238456&r2=238457&view=diff
> ==============================================================================
> --- llvm/trunk/tools/llvm-objdump/llvm-objdump.cpp (original)
> +++ llvm/trunk/tools/llvm-objdump/llvm-objdump.cpp Thu May 28 14:07:14 2015
> @@ -201,6 +201,30 @@ bool llvm::RelocAddressLess(RelocationRe
> return a_addr < b_addr;
> }
>
> +namespace {
> +class PrettyPrinter {
> +public:
> + virtual void printInst(MCInstPrinter &IP, const MCInst *MI, bool ShowRawInsn,
> + ArrayRef<uint8_t> 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 @@ static void DisassembleObject(const Obje
> << '\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 @@ static void DisassembleObject(const Obje
> if (DisAsm->getInstruction(Inst, Size, Bytes.slice(Index),
> SectionAddr + Index, DebugOut,
> CommentStream)) {
> - outs() << format("%8" PRIx64 ":", SectionAddr + Index);
> - if (!NoShowRawInsn) {
> - outs() << "\t";
> - dumpBytes(ArrayRef<uint8_t>(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";
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
More information about the llvm-commits
mailing list