[PATCH] D44192: Proper handling of Itanium mangled names in LLVMSymbolizer on Windows
Eugene Zemtsov via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Wed Mar 7 15:10:09 PST 2018
This revision was automatically updated to reflect the committed changes.
Closed by commit rL326959: Use itaniumDemangle in llvm-symbolizer (authored by eugene, committed by ).
Changed prior to commit:
https://reviews.llvm.org/D44192?vs=137450&id=137495#toc
Repository:
rL LLVM
https://reviews.llvm.org/D44192
Files:
llvm/trunk/lib/DebugInfo/Symbolize/Symbolize.cpp
llvm/trunk/tools/llvm-symbolizer/CMakeLists.txt
Index: llvm/trunk/tools/llvm-symbolizer/CMakeLists.txt
===================================================================
--- llvm/trunk/tools/llvm-symbolizer/CMakeLists.txt
+++ llvm/trunk/tools/llvm-symbolizer/CMakeLists.txt
@@ -6,6 +6,7 @@
set(LLVM_LINK_COMPONENTS
DebugInfoDWARF
DebugInfoPDB
+ Demangle
Object
Support
Symbolize
Index: llvm/trunk/lib/DebugInfo/Symbolize/Symbolize.cpp
===================================================================
--- llvm/trunk/lib/DebugInfo/Symbolize/Symbolize.cpp
+++ llvm/trunk/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 @@
} // 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};
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D44192.137495.patch
Type: text/x-patch
Size: 2020 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20180307/7ff09067/attachment.bin>
More information about the llvm-commits
mailing list