mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2025-01-02 05:42:04 +00:00
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:
parent
ac7c6d554d
commit
b1cd91815e
@ -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) {
|
||||
|
Loading…
Reference in New Issue
Block a user