<div dir="ltr">Thanks!</div><div class="gmail_extra"><br><br><div class="gmail_quote">On Mon, Jan 6, 2014 at 2:08 PM, Kevin Enderby <span dir="ltr"><<a href="mailto:enderby@apple.com" target="_blank">enderby@apple.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: enderby<br>
Date: Mon Jan  6 16:08:08 2014<br>
New Revision: 198637<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=198637&view=rev" target="_blank">http://llvm.org/viewvc/llvm-project?rev=198637&view=rev</a><br>
Log:<br>
For the 'C' disassembler API, add a new ReferenceType for the<br>
SymbolLookUp() call back to return a demangled C++ name to<br>
be used as a comment.<br>
<br>
For example darwin's otool(1) program the uses the llvm<br>
disassembler now can produce disassembly like:<br>
<br>
callq   __ZNK4llvm6Target20createMCDisassemblerERKNS_15MCSubtargetInfoE ## llvm::Target::createMCDisassembler(llvm::MCSubtargetInfo const&) const<br>
<br>
Also fix a bug in LLVMDisasmInstruction() that was not flushing<br>
the raw_svector_ostream for the disassembled instruction string<br>
before copying it to the output buffer that was causing truncation<br>
of the output.<br>
<br>
rdar://10173828<br>
<br>
Modified:<br>
    llvm/trunk/include/llvm-c/Disassembler.h<br>
    llvm/trunk/lib/MC/MCDisassembler/Disassembler.cpp<br>
    llvm/trunk/lib/MC/MCExternalSymbolizer.cpp<br>
<br>
Modified: llvm/trunk/include/llvm-c/Disassembler.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm-c/Disassembler.h?rev=198637&r1=198636&r2=198637&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm-c/Disassembler.h?rev=198637&r1=198636&r2=198637&view=diff</a><br>

==============================================================================<br>
--- llvm/trunk/include/llvm-c/Disassembler.h (original)<br>
+++ llvm/trunk/include/llvm-c/Disassembler.h Mon Jan  6 16:08:08 2014<br>
@@ -141,6 +141,9 @@ typedef const char *(*LLVMSymbolLookupCa<br>
 /* The output reference is to a Objective-C class ref. */<br>
 #define LLVMDisassembler_ReferenceType_Out_Objc_Class_Ref 8<br>
<br>
+/* The output reference is to a C++ symbol name. */<br>
+#define LLVMDisassembler_ReferenceType_DeMangled_Name 9<br>
+<br>
 #ifdef __cplusplus<br>
 extern "C" {<br>
 #endif /* !defined(__cplusplus) */<br>
<br>
Modified: llvm/trunk/lib/MC/MCDisassembler/Disassembler.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/MC/MCDisassembler/Disassembler.cpp?rev=198637&r1=198636&r2=198637&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/MC/MCDisassembler/Disassembler.cpp?rev=198637&r1=198636&r2=198637&view=diff</a><br>

==============================================================================<br>
--- llvm/trunk/lib/MC/MCDisassembler/Disassembler.cpp (original)<br>
+++ llvm/trunk/lib/MC/MCDisassembler/Disassembler.cpp Mon Jan  6 16:08:08 2014<br>
@@ -298,6 +298,7 @@ size_t LLVMDisasmInstruction(LLVMDisasmC<br>
       emitLatency(DC, Inst);<br>
<br>
     emitComments(DC, FormattedOS);<br>
+    OS.flush();<br>
<br>
     assert(OutStringSize != 0 && "Output buffer cannot be zero size");<br>
     size_t OutputSize = std::min(OutStringSize-1, InsnStr.size());<br>
<br>
Modified: llvm/trunk/lib/MC/MCExternalSymbolizer.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/MC/MCExternalSymbolizer.cpp?rev=198637&r1=198636&r2=198637&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/MC/MCExternalSymbolizer.cpp?rev=198637&r1=198636&r2=198637&view=diff</a><br>

==============================================================================<br>
--- llvm/trunk/lib/MC/MCExternalSymbolizer.cpp (original)<br>
+++ llvm/trunk/lib/MC/MCExternalSymbolizer.cpp Mon Jan  6 16:08:08 2014<br>
@@ -56,6 +56,9 @@ bool MCExternalSymbolizer::tryAddingSymb<br>
     if (Name) {<br>
       <a href="http://SymbolicOp.AddSymbol.Name" target="_blank">SymbolicOp.AddSymbol.Name</a> = Name;<br>
       SymbolicOp.AddSymbol.Present = true;<br>
+      // If Name is a C++ symbol name put the human readable name in a comment.<br>
+      if(ReferenceType == LLVMDisassembler_ReferenceType_DeMangled_Name)<br>
+        cStream << ReferenceName;<br>
     }<br>
     // For branches always create an MCExpr so it gets printed as hex address.<br>
     else if (IsBranch) {<br>
<br>
<br>
_______________________________________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@cs.uiuc.edu">llvm-commits@cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits</a><br>
</blockquote></div><br></div>