Skip to content

Commit c20fd85

Browse files
committed
[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
1 parent 7d62e48 commit c20fd85

File tree

1 file changed

+3
-41
lines changed

1 file changed

+3
-41
lines changed

lldb/source/Core/Mangled.cpp

Lines changed: 3 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,6 @@
88

99
#include "lldb/Core/Mangled.h"
1010

11-
#if defined(_WIN32)
12-
#include "lldb/Host/windows/windows.h"
13-
14-
#include <dbghelp.h>
15-
#pragma comment(lib, "dbghelp.lib")
16-
#endif
17-
1811
#include "lldb/Core/RichManglingContext.h"
1912
#include "lldb/Utility/ConstString.h"
2013
#include "lldb/Utility/Log.h"
@@ -39,25 +32,6 @@
3932
#include <string.h>
4033
using namespace lldb_private;
4134

42-
#if defined(_MSC_VER)
43-
static DWORD safeUndecorateName(const char *Mangled, char *Demangled,
44-
DWORD DemangledLength) {
45-
static std::mutex M;
46-
std::lock_guard<std::mutex> Lock(M);
47-
return ::UnDecorateSymbolName(
48-
Mangled, Demangled, DemangledLength,
49-
UNDNAME_NO_ACCESS_SPECIFIERS | // Strip public, private, protected
50-
// keywords
51-
UNDNAME_NO_ALLOCATION_LANGUAGE | // Strip __thiscall, __stdcall,
52-
// etc keywords
53-
UNDNAME_NO_THROW_SIGNATURES | // Strip throw() specifications
54-
UNDNAME_NO_MEMBER_TYPE | // Strip virtual, static, etc
55-
// specifiers
56-
UNDNAME_NO_MS_KEYWORDS // Strip all MS extension keywords
57-
);
58-
}
59-
#endif
60-
6135
static inline Mangled::ManglingScheme cstring_mangling_scheme(const char *s) {
6236
if (s) {
6337
if (s[0] == '?')
@@ -218,28 +192,16 @@ void Mangled::SetValue(ConstString name) {
218192

219193
// Local helpers for different demangling implementations.
220194
static char *GetMSVCDemangledStr(const char *M) {
221-
#if defined(_MSC_VER)
222-
const size_t demangled_length = 2048;
223-
char *demangled_cstr = static_cast<char *>(::malloc(demangled_length));
224-
::ZeroMemory(demangled_cstr, demangled_length);
225-
DWORD result = safeUndecorateName(M, demangled_cstr, demangled_length);
195+
char *demangled_cstr = llvm::microsoftDemangle(M, nullptr, nullptr, nullptr);
226196

227197
if (Log *log = lldb_private::GetLogIfAllCategoriesSet(LIBLLDB_LOG_DEMANGLE)) {
228198
if (demangled_cstr && demangled_cstr[0])
229199
LLDB_LOGF(log, "demangled msvc: %s -> \"%s\"", M, demangled_cstr);
230200
else
231-
LLDB_LOGF(log, "demangled msvc: %s -> error: 0x%lu", M, result);
201+
LLDB_LOGF(log, "demangled msvc: %s -> error", M);
232202
}
233203

234-
if (result != 0) {
235-
return demangled_cstr;
236-
} else {
237-
::free(demangled_cstr);
238-
return nullptr;
239-
}
240-
#else
241-
return nullptr;
242-
#endif
204+
return demangled_cstr;
243205
}
244206

245207
static char *GetItaniumDemangledStr(const char *M) {

0 commit comments

Comments
 (0)