aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/MC/MCDisassembler/Disassembler.cpp
diff options
context:
space:
mode:
authorOwen Anderson <resistor@mac.com>2011-09-15 18:37:20 +0000
committerOwen Anderson <resistor@mac.com>2011-09-15 18:37:20 +0000
commit233f130101760846a8111d2a845a771c453edd50 (patch)
tree16fdcd0910212eb7ffa7842c025665c9511236c6 /llvm/lib/MC/MCDisassembler/Disassembler.cpp
parentd1814791ade377c9020669e372066d7319773833 (diff)
downloadllvm-233f130101760846a8111d2a845a771c453edd50.zip
llvm-233f130101760846a8111d2a845a771c453edd50.tar.gz
llvm-233f130101760846a8111d2a845a771c453edd50.tar.bz2
The the MC disassembler C API to print in verbose mode. Perhaps there should be a parameter to request verbose mode?
llvm-svn: 139821
Diffstat (limited to 'llvm/lib/MC/MCDisassembler/Disassembler.cpp')
-rw-r--r--llvm/lib/MC/MCDisassembler/Disassembler.cpp22
1 files changed, 22 insertions, 0 deletions
diff --git a/llvm/lib/MC/MCDisassembler/Disassembler.cpp b/llvm/lib/MC/MCDisassembler/Disassembler.cpp
index fd462f8..858a58c 100644
--- a/llvm/lib/MC/MCDisassembler/Disassembler.cpp
+++ b/llvm/lib/MC/MCDisassembler/Disassembler.cpp
@@ -81,6 +81,9 @@ LLVMDisasmContextRef LLVMCreateDisasm(const char *TripleName, void *DisInfo,
TheTarget, MAI, MRI,
Ctx, DisAsm, IP);
assert(DC && "Allocation failure!");
+
+ IP->setCommentStream(DC->CommentStream);
+
return DC;
}
@@ -154,6 +157,25 @@ size_t LLVMDisasmInstruction(LLVMDisasmContextRef DCR, uint8_t *Bytes,
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);