Project

General

Profile

Actions

Bug #17656

closed

Improper functions shown in C level backtrace information

Added by xtkoba (Tee KOBAYASHI) about 3 years ago. Updated almost 2 years ago.

Status:
Feedback
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
Actions

Also available in: Atom PDF

Like0
Like0Like0Like0