mirror of
https://github.com/WerWolv/ImHex.git
synced 2026-03-29 00:10:02 -05:00
build: Move all demangler uses into the trace library
This commit is contained in:
@@ -3,21 +3,23 @@
|
||||
|
||||
#include <llvm/Demangle/Demangle.h>
|
||||
|
||||
namespace {
|
||||
namespace hex::trace {
|
||||
|
||||
[[maybe_unused]] std::string tryDemangle(const std::string &symbolName) {
|
||||
if (auto variant1 = llvm::demangle(symbolName); variant1 != symbolName)
|
||||
return variant1;
|
||||
std::string demangle(const std::string &symbolName) {
|
||||
if (auto result = llvm::demangle(symbolName); result != symbolName)
|
||||
return result;
|
||||
|
||||
if (auto variant2 = llvm::demangle(std::string("_") + symbolName); variant2 != std::string("_") + symbolName)
|
||||
return variant2;
|
||||
if (auto result = llvm::demangle(std::string("_") + symbolName); result != std::string("_") + symbolName)
|
||||
return result;
|
||||
|
||||
if (auto result = llvm::demangle(std::string("_Z") + symbolName); result != std::string("_Z") + symbolName)
|
||||
return result;
|
||||
|
||||
return symbolName;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
#if defined(HEX_HAS_STD_STACKTRACE) && __has_include(<stacktrace>)
|
||||
|
||||
#include <stacktrace>
|
||||
@@ -143,7 +145,7 @@ namespace {
|
||||
fileName = "??";
|
||||
}
|
||||
|
||||
auto demangledName = tryDemangle(symbolName);
|
||||
auto demangledName = demangle(symbolName);
|
||||
stackTrace.push_back(StackFrame { fileName, demangledName, lineNumber });
|
||||
}
|
||||
|
||||
@@ -180,7 +182,7 @@ namespace {
|
||||
dladdr(addresses[i], &info);
|
||||
|
||||
auto fileName = info.dli_fname != nullptr ? std::filesystem::path(info.dli_fname).filename().string() : "??";
|
||||
auto demangledName = info.dli_sname != nullptr ? tryDemangle(info.dli_sname) : "??";
|
||||
auto demangledName = info.dli_sname != nullptr ? demangle(info.dli_sname) : "??";
|
||||
|
||||
result.push_back(StackFrame { std::move(fileName), std::move(demangledName), 0 });
|
||||
}
|
||||
@@ -222,7 +224,7 @@ namespace {
|
||||
if (function == nullptr)
|
||||
function = "??";
|
||||
|
||||
result.push_back(StackFrame { std::filesystem::path(fileName).filename().string(), tryDemangle(function), std::uint32_t(lineNumber) });
|
||||
result.push_back(StackFrame { std::filesystem::path(fileName).filename().string(), demangle(function), std::uint32_t(lineNumber) });
|
||||
|
||||
return 0;
|
||||
}, nullptr, nullptr);
|
||||
|
||||
Reference in New Issue
Block a user