diff options
author | Eugene Zemtsov <ezemtsov@google.com> | 2018-03-07 23:07:34 +0000 |
---|---|---|
committer | Eugene Zemtsov <ezemtsov@google.com> | 2018-03-07 23:07:34 +0000 |
commit | cd72cbc667d09b739a22d6b8bf0ba418187b779f (patch) | |
tree | 882cc920d27744630abb10d250feb882d175d02f /llvm/lib/DebugInfo | |
parent | 4fe52c71786bc51ae64862599dd0ef99a162bd95 (diff) | |
download | bcm5719-llvm-cd72cbc667d09b739a22d6b8bf0ba418187b779f.tar.gz bcm5719-llvm-cd72cbc667d09b739a22d6b8bf0ba418187b779f.zip |
Use itaniumDemangle in llvm-symbolizer
Currently on Windows (_MSC_VER) LLVMSymbolizer supports only Microsoft mangling.
This fix just explicitly uses itaniumDemangle when mangled name starts with _Z.
Differential Revision: https://reviews.llvm.org/D44192
llvm-svn: 326959
Diffstat (limited to 'llvm/lib/DebugInfo')
-rw-r--r-- | llvm/lib/DebugInfo/Symbolize/Symbolize.cpp | 13 |
1 files changed, 4 insertions, 9 deletions
diff --git a/llvm/lib/DebugInfo/Symbolize/Symbolize.cpp b/llvm/lib/DebugInfo/Symbolize/Symbolize.cpp index 681334bc405..c4a8b8d31db 100644 --- a/llvm/lib/DebugInfo/Symbolize/Symbolize.cpp +++ b/llvm/lib/DebugInfo/Symbolize/Symbolize.cpp @@ -21,6 +21,7 @@ #include "llvm/DebugInfo/DWARF/DWARFContext.h" #include "llvm/DebugInfo/PDB/PDB.h" #include "llvm/DebugInfo/PDB/PDBContext.h" +#include "llvm/Demangle/Demangle.h" #include "llvm/Object/COFF.h" #include "llvm/Object/MachO.h" #include "llvm/Object/MachOUniversal.h" @@ -459,28 +460,22 @@ StringRef demanglePE32ExternCFunc(StringRef SymbolName) { } // end anonymous namespace -#if !defined(_MSC_VER) -// Assume that __cxa_demangle is provided by libcxxabi (except for Windows). -extern "C" char *__cxa_demangle(const char *mangled_name, char *output_buffer, - size_t *length, int *status); -#endif - std::string LLVMSymbolizer::DemangleName(const std::string &Name, const SymbolizableModule *DbiModuleDescriptor) { -#if !defined(_MSC_VER) // We can spoil names of symbols with C linkage, so use an heuristic // approach to check if the name should be demangled. if (Name.substr(0, 2) == "_Z") { int status = 0; - char *DemangledName = __cxa_demangle(Name.c_str(), nullptr, nullptr, &status); + char *DemangledName = itaniumDemangle(Name.c_str(), nullptr, nullptr, &status); if (status != 0) return Name; std::string Result = DemangledName; free(DemangledName); return Result; } -#else + +#if defined(_MSC_VER) if (!Name.empty() && Name.front() == '?') { // Only do MSVC C++ demangling on symbols starting with '?'. char DemangledName[1024] = {0}; |