Revert "[LLDB] Use the llvm microsoft demangler instead of the windows dbghelp api. NFC."

This reverts SVN r373144, as it changed the demangled output a little, see
http://lab.llvm.org:8011/builders/lldb-x64-windows-ninja/builds/9306.

llvm-svn: 373146
This commit is contained in:
Martin Storsjo 2019-09-28 10:25:22 +00:00
parent ac7c6d554d
commit b1cd91815e

View File

@ -8,6 +8,13 @@
#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"
@ -32,6 +39,25 @@
#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] == '?')
@ -192,16 +218,28 @@ void Mangled::SetValue(ConstString name) {
// Local helpers for different demangling implementations.
static char *GetMSVCDemangledStr(const char *M) {
char *demangled_cstr = llvm::microsoftDemangle(M, nullptr, nullptr, nullptr);
#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);
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", M);
LLDB_LOGF(log, "demangled msvc: %s -> error: 0x%lu", M, result);
}
return demangled_cstr;
if (result != 0) {
return demangled_cstr;
} else {
::free(demangled_cstr);
return nullptr;
}
#else
return nullptr;
#endif
}
static char *GetItaniumDemangledStr(const char *M) {