Actions
Bug #17656
openImproper functions shown in C level backtrace information
Description
The following is an example of C backtrace output on aarch64-linux, where sig_do_nothing
is shown in spite of segfault:
-- C level backtrace information -------------------------------------------
/var/tmp/build.debug/aarch64.clang.O0/lib/libruby.so.3.0(rb_print_backtrace+0x24) [0x5500b86c74] vm_dump.c:758
/var/tmp/build.debug/aarch64.clang.O0/lib/libruby.so.3.0(rb_vm_bugreport+0xa8) [0x5500b86d38] vm_dump.c:999
/var/tmp/build.debug/aarch64.clang.O0/lib/libruby.so.3.0(rb_bug_for_fatal_signal+0x108) [0x550092fb7c] error.c:786
/var/tmp/build.debug/aarch64.clang.O0/lib/libruby.so.3.0(sig_do_nothing+0x0) [0x5500abfa90] signal.c:960
/var/tmp/build.debug/aarch64.clang.O0/lib/libruby.so.3.0(sigsegv) (null):0
[0x50c810]
(...)
This happens because backtrace(3)
fills the buffer with the return addresses retrieved from stack frames. A workaround is to subtract 1 from each return address [1], as in the attached patch.
[1] http://lists.dwarfstd.org/pipermail/dwarf-discuss-dwarfstd.org/2020-July/004694.html
Files
Updated by mame (Yusuke Endoh) about 1 year ago
Thank you @xtkoba (Tee KOBAYASHI) .
Could you add a comment to the #ifdef hack?
And if possible, can you send a PR to github.com/ruby/ruby? It would be useful to check if it works on the CI before I merge it.
Actions