diff options
Diffstat (limited to 'llvm/lib/MC/MCExternalSymbolizer.cpp')
| -rw-r--r-- | llvm/lib/MC/MCExternalSymbolizer.cpp | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/llvm/lib/MC/MCExternalSymbolizer.cpp b/llvm/lib/MC/MCExternalSymbolizer.cpp index ca368b27e19..dae3f522a4f 100644 --- a/llvm/lib/MC/MCExternalSymbolizer.cpp +++ b/llvm/lib/MC/MCExternalSymbolizer.cpp @@ -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::tryAddingSymbolicOperand(MCInst &MI, 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) { |

