summaryrefslogtreecommitdiff
path: root/lib/MC/MCDisassembler
diff options
context:
space:
mode:
authorOwen Anderson <resistor@mac.com>2011-09-15 23:38:46 +0000
committerOwen Anderson <resistor@mac.com>2011-09-15 23:38:46 +0000
commit98c5ddabca1debf935a07d14d0cbc9732374bdb8 (patch)
tree74e944d1e23e4ead852d53c54a5946ae6f1e56f8 /lib/MC/MCDisassembler
parent71280b55a3406c7dd4215449bf4a3ab216e78ffd (diff)
downloadllvm-98c5ddabca1debf935a07d14d0cbc9732374bdb8.tar.gz
llvm-98c5ddabca1debf935a07d14d0cbc9732374bdb8.tar.bz2
llvm-98c5ddabca1debf935a07d14d0cbc9732374bdb8.tar.xz
Don't attach annotations to MCInst's. Instead, have the disassembler return, and the printer accept, an annotation string which can be passed through if the client cares about annotations.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@139876 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/MC/MCDisassembler')
-rw-r--r--lib/MC/MCDisassembler/Disassembler.cpp24
-rw-r--r--lib/MC/MCDisassembler/EDDisassembler.cpp4
2 files changed, 8 insertions, 20 deletions
diff --git a/lib/MC/MCDisassembler/Disassembler.cpp b/lib/MC/MCDisassembler/Disassembler.cpp
index 858a58cf35..14fab08b87 100644
--- a/lib/MC/MCDisassembler/Disassembler.cpp
+++ b/lib/MC/MCDisassembler/Disassembler.cpp
@@ -144,7 +144,7 @@ size_t LLVMDisasmInstruction(LLVMDisasmContextRef DCR, uint8_t *Bytes,
MCInstPrinter *IP = DC->getIP();
MCDisassembler::DecodeStatus S;
S = DisAsm->getInstruction(Inst, Size, MemoryObject, PC,
- /*REMOVE*/ nulls());
+ /*REMOVE*/ nulls(), DC->CommentStream);
switch (S) {
case MCDisassembler::Fail:
case MCDisassembler::SoftFail:
@@ -152,28 +152,16 @@ size_t LLVMDisasmInstruction(LLVMDisasmContextRef DCR, uint8_t *Bytes,
return 0;
case MCDisassembler::Success: {
- SmallVector<char, 64> InsnStr;
- raw_svector_ostream OS(InsnStr);
- 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());
+ SmallVector<char, 64> InsnStr;
+ raw_svector_ostream OS(InsnStr);
+ IP->printInst(&Inst, OS, Comments);
+ OS.flush();
- DC->CommentsToEmit.clear();
// Tell the comment stream that the vector changed underneath it.
+ DC->CommentsToEmit.clear();
DC->CommentStream.resync();
assert(OutStringSize != 0 && "Output buffer cannot be zero size");
diff --git a/lib/MC/MCDisassembler/EDDisassembler.cpp b/lib/MC/MCDisassembler/EDDisassembler.cpp
index 70b6300d74..83362a21f7 100644
--- a/lib/MC/MCDisassembler/EDDisassembler.cpp
+++ b/lib/MC/MCDisassembler/EDDisassembler.cpp
@@ -246,7 +246,7 @@ EDInst *EDDisassembler::createInst(EDByteReaderCallback byteReader,
MCDisassembler::DecodeStatus S;
S = Disassembler->getInstruction(*inst, byteSize, memoryObject, address,
- ErrorStream);
+ ErrorStream, nulls());
switch (S) {
case MCDisassembler::Fail:
case MCDisassembler::SoftFail:
@@ -327,7 +327,7 @@ bool EDDisassembler::registerIsProgramCounter(unsigned registerID) {
int EDDisassembler::printInst(std::string &str, MCInst &inst) {
PrinterMutex.acquire();
- InstPrinter->printInst(&inst, *InstStream);
+ InstPrinter->printInst(&inst, *InstStream, "");
InstStream->flush();
str = *InstString;
InstString->clear();