From d00424008feb0408f6e984e1c9b280fd8ce54fa7 Mon Sep 17 00:00:00 2001 From: Jonathan G Rennison Date: Fri, 2 Feb 2024 20:29:47 +0000 Subject: [PATCH] Crashlog: Adjust Linux stacktrace format when using BFD --- src/os/unix/crashlog_unix.cpp | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/src/os/unix/crashlog_unix.cpp b/src/os/unix/crashlog_unix.cpp index 0a6035529e..b0cb303a4e 100644 --- a/src/os/unix/crashlog_unix.cpp +++ b/src/os/unix/crashlog_unix.cpp @@ -590,18 +590,19 @@ class CrashLogUnix : public CrashLog { demangled = abi::__cxa_demangle(func_name, nullptr, 0, &status); #endif /* WITH_DEMANGLE */ const char *name = (demangled != nullptr && status == 0) ? demangled : func_name; - buffer += seprintf(buffer, last, " [%02i] %*p %-40s %s + 0x%zx\n", i, ptr_str_size, + buffer += seprintf(buffer, last, " [%02i] %*p %-40s %s + 0x%zx", i, ptr_str_size, trace[i], info.dli_fname, name, (char *)trace[i] - (char *)func_addr); free(demangled); } else if (dladdr_result && info.dli_fname) { - buffer += seprintf(buffer, last, " [%02i] %*p %-40s + 0x%zx\n", i, ptr_str_size, + buffer += seprintf(buffer, last, " [%02i] %*p %-40s + 0x%zx", i, ptr_str_size, trace[i], info.dli_fname, (char *)trace[i] - (char *)info.dli_fbase); } else { ok = false; } - if (file_name != nullptr) { - buffer += seprintf(buffer, last, "%*s%s:%u\n", 7 + ptr_str_size, "", file_name, line_num); + if (ok && file_name != nullptr) { + buffer += seprintf(buffer, last, " at %s:%u", file_name, line_num); } + if (ok) buffer += seprintf(buffer, last, "\n"); #if defined(WITH_BFD) if (ok && bfd_info.found && bfd_info.abfd) { uint iteration_limit = 32; @@ -613,15 +614,16 @@ class CrashLogUnix : public CrashLog { demangled = abi::__cxa_demangle(func_name, nullptr, 0, &status); #endif /* WITH_DEMANGLE */ const char *name = (demangled != nullptr && status == 0) ? demangled : func_name; - buffer += seprintf(buffer, last, " [inlined] %*s %s\n", ptr_str_size + 36, "", + buffer += seprintf(buffer, last, " [inlined] %*s %s", ptr_str_size + 36, "", name); free(demangled); } else if (file_name) { - buffer += seprintf(buffer, last, " [inlined]\n"); + buffer += seprintf(buffer, last, " [inlined]"); } if (file_name != nullptr) { - buffer += seprintf(buffer, last, "%*s%s:%u\n", 7 + ptr_str_size, "", file_name, line_num); + buffer += seprintf(buffer, last, " at %s:%u", file_name, line_num); } + buffer += seprintf(buffer, last, "\n"); } } #endif /* WITH_BFD */