Author: mstorsjo Date: Sat Sep 28 03:25:22 2019 New Revision: 373146 URL: http://llvm.org/viewvc/llvm-project?rev=373146&view=rev Log: 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. Modified: lldb/trunk/source/Core/Mangled.cpp Modified: lldb/trunk/source/Core/Mangled.cpp URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Core/Mangled.cpp?rev=373146&r1=373145&r2=373146&view=diff ============================================================================== --- lldb/trunk/source/Core/Mangled.cpp (original) +++ lldb/trunk/source/Core/Mangled.cpp Sat Sep 28 03:25:22 2019 @@ -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) { _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits