[llvm] r198441 - For disassembly when adding a symbolic operand that is a C++

Kevin Enderby enderby at apple.com
Fri Jan 3 12:02:13 PST 2014


Hi Reid,

Sorry about that.  I'll revert my change.

Not sure the best way to get this done if an ifdef is not acceptable.  Maybe Howard or others will have better suggestions.

It does not have any tests as this is used by darwin's otool(1) that links with the llvm disassembler.  We have had this problem with this part of the disassembler since day one.  So I'm not sure the best way to address that either.

Kev

On Jan 3, 2014, at 11:54 AM, Reid Kleckner <rnk at google.com> wrote:

> Microsoft doesn't ship a <cxxabi.h> header:
> http://lab.llvm.org:8011/builders/lld-x86_64-win7/builds/5504/steps/build_Lld/logs/stdio
> MCExternalSymbolizer.cpp(16): fatal error C1083: Cannot open include file: 'cxxabi.h': No such file or directory
> 
> I'm not familiar with this code, but it seems bad to make the result of LLVMDisasmInstruction dependent on the target platform, so throwing this behind a quick ifdef isn't necessarily right either.
> 
> This also doesn't have any tests.
> 
> 
> On Fri, Jan 3, 2014 at 11:33 AM, Kevin Enderby <enderby at apple.com> wrote:
> Author: enderby
> Date: Fri Jan  3 13:33:09 2014
> New Revision: 198441
> 
> URL: http://llvm.org/viewvc/llvm-project?rev=198441&view=rev
> Log:
> For disassembly when adding a symbolic operand that is a C++
> symbol name, also put the human readable name in a comment.
> 
> Also fix a bug in LLVMDisasmInstruction() that was not flushing
> the raw_svector_ostream for the disassembled instruction string
> before copying it to the output buffer that was causing truncation
> of the output.
> 
> rdar://10173828
> 
> Modified:
>     llvm/trunk/lib/MC/MCDisassembler/Disassembler.cpp
>     llvm/trunk/lib/MC/MCExternalSymbolizer.cpp
> 
> Modified: llvm/trunk/lib/MC/MCDisassembler/Disassembler.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/MC/MCDisassembler/Disassembler.cpp?rev=198441&r1=198440&r2=198441&view=diff
> ==============================================================================
> --- llvm/trunk/lib/MC/MCDisassembler/Disassembler.cpp (original)
> +++ llvm/trunk/lib/MC/MCDisassembler/Disassembler.cpp Fri Jan  3 13:33:09 2014
> @@ -298,6 +298,7 @@ size_t LLVMDisasmInstruction(LLVMDisasmC
>        emitLatency(DC, Inst);
> 
>      emitComments(DC, FormattedOS);
> +    OS.flush();
> 
>      assert(OutStringSize != 0 && "Output buffer cannot be zero size");
>      size_t OutputSize = std::min(OutStringSize-1, InsnStr.size());
> 
> Modified: llvm/trunk/lib/MC/MCExternalSymbolizer.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/MC/MCExternalSymbolizer.cpp?rev=198441&r1=198440&r2=198441&view=diff
> ==============================================================================
> --- llvm/trunk/lib/MC/MCExternalSymbolizer.cpp (original)
> +++ llvm/trunk/lib/MC/MCExternalSymbolizer.cpp Fri Jan  3 13:33:09 2014
> @@ -13,6 +13,7 @@
>  #include "llvm/MC/MCInst.h"
>  #include "llvm/Support/raw_ostream.h"
>  #include <cstring>
> +#include <cxxabi.h>
> 
>  using namespace llvm;
> 
> @@ -56,6 +57,14 @@ bool MCExternalSymbolizer::tryAddingSymb
>      if (Name) {
>        SymbolicOp.AddSymbol.Name = Name;
>        SymbolicOp.AddSymbol.Present = true;
> +      // If Name is a C++ symbol name put the human readable name in a comment.
> +      if (strncmp(Name, "__Z", 3) == 0) {
> +        char *demangled = abi::__cxa_demangle(Name + 1, 0, 0, 0);
> +       if (demangled) {
> +          cStream << demangled;
> +          free(demangled);
> +        }
> +      }
>      }
>      // For branches always create an MCExpr so it gets printed as hex address.
>      else if (IsBranch) {
> 
> 
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
> 

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20140103/446a3194/attachment.html>


More information about the llvm-commits mailing list