|
8 | 8 |
|
9 | 9 | #include "lldb/Core/Mangled.h"
|
10 | 10 |
|
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 |
| - |
18 | 11 | #include "lldb/Core/RichManglingContext.h"
|
19 | 12 | #include "lldb/Utility/ConstString.h"
|
20 | 13 | #include "lldb/Utility/Log.h"
|
|
39 | 32 | #include <string.h>
|
40 | 33 | using namespace lldb_private;
|
41 | 34 |
|
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 |
| - |
61 | 35 | static inline Mangled::ManglingScheme cstring_mangling_scheme(const char *s) {
|
62 | 36 | if (s) {
|
63 | 37 | if (s[0] == '?')
|
@@ -218,28 +192,16 @@ void Mangled::SetValue(ConstString name) {
|
218 | 192 |
|
219 | 193 | // Local helpers for different demangling implementations.
|
220 | 194 | 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); |
226 | 196 |
|
227 | 197 | if (Log *log = lldb_private::GetLogIfAllCategoriesSet(LIBLLDB_LOG_DEMANGLE)) {
|
228 | 198 | if (demangled_cstr && demangled_cstr[0])
|
229 | 199 | LLDB_LOGF(log, "demangled msvc: %s -> \"%s\"", M, demangled_cstr);
|
230 | 200 | else
|
231 |
| - LLDB_LOGF(log, "demangled msvc: %s -> error: 0x%lu", M, result); |
| 201 | + LLDB_LOGF(log, "demangled msvc: %s -> error", M); |
232 | 202 | }
|
233 | 203 |
|
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; |
243 | 205 | }
|
244 | 206 |
|
245 | 207 | static char *GetItaniumDemangledStr(const char *M) {
|
|
0 commit comments