CrashReporter: Fix compilation with musl libc (#4805)

It can be assumed this doesn't function correctly:
my 'configuration does not support execinfo.h', so I have no backtrace to test against
This commit is contained in:
Zach DeCook 2024-03-05 17:51:34 -05:00 committed by GitHub
parent 05dd204c5f
commit b1e2ca04a0
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -108,18 +108,23 @@ void CrashReporter::createAndSaveCrash(int sig) {
std::string addrs = ""; std::string addrs = "";
for (size_t i = 0; i < CALLSTACK.size(); ++i) { for (size_t i = 0; i < CALLSTACK.size(); ++i) {
#ifdef __GLIBC__
// convert in memory address to VMA address // convert in memory address to VMA address
Dl_info info; Dl_info info;
struct link_map* linkMap; struct link_map* linkMap;
dladdr1((void*)CALLSTACK[i].adr, &info, (void**)&linkMap, RTLD_DL_LINKMAP); dladdr1((void*)CALLSTACK[i].adr, &info, (void**)&linkMap, RTLD_DL_LINKMAP);
size_t vmaAddr = (size_t)CALLSTACK[i].adr - linkMap->l_addr; size_t vmaAddr = (size_t)CALLSTACK[i].adr - linkMap->l_addr;
#else
// musl doesn't define dladdr1
size_t vmaAddr = (size_t)CALLSTACK[i].adr;
#endif
addrs += std::format("0x{:x} ", vmaAddr); addrs += std::format("0x{:x} ", vmaAddr);
} }
#ifdef __clang__ #ifdef __clang__
const auto CMD = std::format("llvm-addr2line -e {} -Cf {}", FPATH.c_str(), addrs); const auto CMD = std::format("llvm-addr2line -e {} -Cf {}", FPATH.c_str(), addrs);
#else #else
const auto CMD = std::format("addr2line -e {} -Cf {}", FPATH.c_str(), addrs); const auto CMD = std::format("addr2line -e {} -Cf {}", FPATH.c_str(), addrs);
#endif #endif
const auto ADDR2LINE = execAndGet(CMD.c_str()); const auto ADDR2LINE = execAndGet(CMD.c_str());