Project

General

Profile

Actions

Bug #17656

open

Improper functions shown in C level backtrace information

Added by xtkoba (Tee KOBAYASHI) 9 months ago. Updated 9 months ago.

Status:
Open
Priority:
Normal
Assignee:
-
Target version:
-
[ruby-core:102599]

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

ruby-backtrace-address-off-by-1.patch (470 Bytes) ruby-backtrace-address-off-by-1.patch xtkoba (Tee KOBAYASHI), 02/24/2021 11:20 PM

Updated by mame (Yusuke Endoh) 9 months 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

Also available in: Atom PDF