[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