build: Move all demangler uses into the trace library

This commit is contained in:
WerWolv
2025-07-30 20:57:53 +02:00
parent ec9461741c
commit 6fcc3e8cb3
12 changed files with 28 additions and 59 deletions

View File

@@ -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);