[llvm] r238457 - [Objdump] Allow instruction pretty printing to be specialized by the target triple.
Colin LeMahieu
colinl at codeaurora.org
Thu May 28 13:39:40 PDT 2015
I'll add the virtual destructor.
I'm about to add the hexagon variant which has a member function. It could be converted to a function pointer if that's desired.
-----Original Message-----
From: Rafael EspĂndola [mailto:rafael.espindola at gmail.com]
Sent: Thursday, May 28, 2015 3:28 PM
To: Colin LeMahieu
Cc: llvm-commits
Subject: Re: [llvm] r238457 - [Objdump] Allow instruction pretty printing to be specialized by the target triple.
/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