diff --git a/src/os/unix/crashlog_unix.cpp b/src/os/unix/crashlog_unix.cpp index 01ec660724..09eac92e97 100644 --- a/src/os/unix/crashlog_unix.cpp +++ b/src/os/unix/crashlog_unix.cpp @@ -426,12 +426,12 @@ class CrashLogUnix : public CrashLog { unsigned int line_num = 0; #if defined(WITH_BFD) /* subtract one to get the line before the return address, i.e. the function call line */ - sym_info_bfd bfd_info(reinterpret_cast(trace[i]) - 1); + sym_info_bfd bfd_info(reinterpret_cast(trace[i]) - reinterpret_cast(info.dli_fbase) - 1); if (dladdr_result && info.dli_fname) { lookup_addr_bfd(info.dli_fname, bfd_info); if (bfd_info.file_name != nullptr) file_name = bfd_info.file_name; if (bfd_info.function_name != nullptr) func_name = bfd_info.function_name; - if (bfd_info.function_addr != 0) func_addr = reinterpret_cast(bfd_info.function_addr); + if (bfd_info.function_addr != 0) func_addr = reinterpret_cast(bfd_info.function_addr + reinterpret_cast(info.dli_fbase)); line_num = bfd_info.line; } #endif /* WITH_BFD */