diff options
author | Martin Storsjo <martin@martin.st> | 2019-09-28 09:33:44 +0000 |
---|---|---|
committer | Martin Storsjo <martin@martin.st> | 2019-09-28 09:33:44 +0000 |
commit | c20fd856d92f7f83d3568a3d8e27eea2cce8f946 (patch) | |
tree | 648b3ff66b60353fa36bcb8d51fd3d16b3bcd79b | |
parent | 7d62e480b5c7f6c8ef8e41cbf9f22c025d7aea73 (diff) | |
download | bcm5719-llvm-c20fd856d92f7f83d3568a3d8e27eea2cce8f946.tar.gz bcm5719-llvm-c20fd856d92f7f83d3568a3d8e27eea2cce8f946.zip |
[LLDB] Use the llvm microsoft demangler instead of the windows dbghelp api. NFC.
If there's any testcases that only do demangling (I didn't find any),
they could be made available for all platforms now.
Differential Revision: https://reviews.llvm.org/D68134
llvm-svn: 373144
-rw-r--r-- | lldb/source/Core/Mangled.cpp | 44 |
1 files changed, 3 insertions, 41 deletions
diff --git a/lldb/source/Core/Mangled.cpp b/lldb/source/Core/Mangled.cpp index 944c7b0bcfe..82438b561f1 100644 --- a/lldb/source/Core/Mangled.cpp +++ b/lldb/source/Core/Mangled.cpp @@ -8,13 +8,6 @@ #include "lldb/Core/Mangled.h" -#if defined(_WIN32) -#include "lldb/Host/windows/windows.h" - -#include <dbghelp.h> -#pragma comment(lib, "dbghelp.lib") -#endif - #include "lldb/Core/RichManglingContext.h" #include "lldb/Utility/ConstString.h" #include "lldb/Utility/Log.h" @@ -39,25 +32,6 @@ #include <string.h> using namespace lldb_private; -#if defined(_MSC_VER) -static DWORD safeUndecorateName(const char *Mangled, char *Demangled, - DWORD DemangledLength) { - static std::mutex M; - std::lock_guard<std::mutex> Lock(M); - return ::UnDecorateSymbolName( - Mangled, Demangled, DemangledLength, - UNDNAME_NO_ACCESS_SPECIFIERS | // Strip public, private, protected - // keywords - UNDNAME_NO_ALLOCATION_LANGUAGE | // Strip __thiscall, __stdcall, - // etc keywords - UNDNAME_NO_THROW_SIGNATURES | // Strip throw() specifications - UNDNAME_NO_MEMBER_TYPE | // Strip virtual, static, etc - // specifiers - UNDNAME_NO_MS_KEYWORDS // Strip all MS extension keywords - ); -} -#endif - static inline Mangled::ManglingScheme cstring_mangling_scheme(const char *s) { if (s) { if (s[0] == '?') @@ -218,28 +192,16 @@ void Mangled::SetValue(ConstString name) { // Local helpers for different demangling implementations. static char *GetMSVCDemangledStr(const char *M) { -#if defined(_MSC_VER) - const size_t demangled_length = 2048; - char *demangled_cstr = static_cast<char *>(::malloc(demangled_length)); - ::ZeroMemory(demangled_cstr, demangled_length); - DWORD result = safeUndecorateName(M, demangled_cstr, demangled_length); + char *demangled_cstr = llvm::microsoftDemangle(M, nullptr, nullptr, nullptr); if (Log *log = lldb_private::GetLogIfAllCategoriesSet(LIBLLDB_LOG_DEMANGLE)) { if (demangled_cstr && demangled_cstr[0]) LLDB_LOGF(log, "demangled msvc: %s -> \"%s\"", M, demangled_cstr); else - LLDB_LOGF(log, "demangled msvc: %s -> error: 0x%lu", M, result); + LLDB_LOGF(log, "demangled msvc: %s -> error", M); } - if (result != 0) { - return demangled_cstr; - } else { - ::free(demangled_cstr); - return nullptr; - } -#else - return nullptr; -#endif + return demangled_cstr; } static char *GetItaniumDemangledStr(const char *M) { |