[llvm-commits] [llvm] r139821 - in /llvm/trunk/lib/MC/MCDisassembler: Disassembler.cpp Disassembler.h
Owen Anderson
resistor at mac.com
Thu Sep 15 11:37:20 PDT 2011
Author: resistor
Date: Thu Sep 15 13:37:20 2011
New Revision: 139821
URL: http://llvm.org/viewvc/llvm-project?rev=139821&view=rev
Log:
The the MC disassembler C API to print in verbose mode. Perhaps there should be a parameter to request verbose mode?
Modified:
llvm/trunk/lib/MC/MCDisassembler/Disassembler.cpp
llvm/trunk/lib/MC/MCDisassembler/Disassembler.h
Modified: llvm/trunk/lib/MC/MCDisassembler/Disassembler.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/MC/MCDisassembler/Disassembler.cpp?rev=139821&r1=139820&r2=139821&view=diff
==============================================================================
--- llvm/trunk/lib/MC/MCDisassembler/Disassembler.cpp (original)
+++ llvm/trunk/lib/MC/MCDisassembler/Disassembler.cpp Thu Sep 15 13:37:20 2011
@@ -81,6 +81,9 @@
TheTarget, MAI, MRI,
Ctx, DisAsm, IP);
assert(DC && "Allocation failure!");
+
+ IP->setCommentStream(DC->CommentStream);
+
return DC;
}
@@ -154,6 +157,25 @@
IP->printInst(&Inst, OS);
OS.flush();
+ DC->CommentStream.flush();
+ assert(DC->CommentsToEmit.back() == '\n');
+
+ DC->CommentsToEmit.push_back('\n');
+ StringRef Comments = DC->CommentsToEmit.str();
+
+ do {
+ // Emit a line of comments.
+ size_t Position = Comments.find('\n');
+ OS << ' ' << DC->getAsmInfo()->getCommentString()
+ << ' ' << Comments.substr(0, Position) << '\n';
+
+ Comments = Comments.substr(Position+1);
+ } while (!Comments.empty());
+
+ DC->CommentsToEmit.clear();
+ // Tell the comment stream that the vector changed underneath it.
+ DC->CommentStream.resync();
+
assert(OutStringSize != 0 && "Output buffer cannot be zero size");
size_t OutputSize = std::min(OutStringSize-1, InsnStr.size());
std::memcpy(OutString, InsnStr.data(), OutputSize);
Modified: llvm/trunk/lib/MC/MCDisassembler/Disassembler.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/MC/MCDisassembler/Disassembler.h?rev=139821&r1=139820&r2=139821&view=diff
==============================================================================
--- llvm/trunk/lib/MC/MCDisassembler/Disassembler.h (original)
+++ llvm/trunk/lib/MC/MCDisassembler/Disassembler.h Thu Sep 15 13:37:20 2011
@@ -20,6 +20,8 @@
#include "llvm-c/Disassembler.h"
#include <string>
#include "llvm/ADT/OwningPtr.h"
+#include "llvm/ADT/SmallString.h"
+#include "llvm/Support/raw_ostream.h"
namespace llvm {
class MCContext;
@@ -67,6 +69,10 @@
llvm::OwningPtr<llvm::MCInstPrinter> IP;
public:
+ // Comment stream and backing vector.
+ SmallString<128> CommentsToEmit;
+ raw_svector_ostream CommentStream;
+
LLVMDisasmContext(std::string tripleName, void *disInfo, int tagType,
LLVMOpInfoCallback getOpInfo,
LLVMSymbolLookupCallback symbolLookUp,
@@ -75,7 +81,8 @@
llvm::MCContext *ctx, const MCDisassembler *disAsm,
MCInstPrinter *iP) : TripleName(tripleName),
DisInfo(disInfo), TagType(tagType), GetOpInfo(getOpInfo),
- SymbolLookUp(symbolLookUp), TheTarget(theTarget) {
+ SymbolLookUp(symbolLookUp), TheTarget(theTarget),
+ CommentStream(CommentsToEmit) {
MAI.reset(mAI);
MRI.reset(mRI);
Ctx.reset(ctx);
@@ -83,6 +90,7 @@
IP.reset(iP);
}
const MCDisassembler *getDisAsm() const { return DisAsm.get(); }
+ const MCAsmInfo *getAsmInfo() const { return MAI.get(); }
MCInstPrinter *getIP() { return IP.get(); }
};
More information about the llvm-commits
mailing list