ruby-core@ruby-lang.org archive (unofficial mirror)
 help / color / mirror / Atom feed
* [ruby-core:103491] [Ruby master Bug#17810] addr2line.c: Some symbol names missing in C backtrace with Clang/LLVM
@ 2021-04-17  6:45 xtkoba+ruby
  2021-04-30 14:11 ` [ruby-core:103672] " xtkoba+ruby
  0 siblings, 1 reply; 2+ messages in thread
From: xtkoba+ruby @ 2021-04-17  6:45 UTC (permalink / raw)
  To: ruby-core

Issue #17810 has been reported by xtkoba (Tee KOBAYASHI).

----------------------------------------
Bug #17810: addr2line.c: Some symbol names missing in C backtrace with Clang/LLVM
https://bugs.ruby-lang.org/issues/17810

* Author: xtkoba (Tee KOBAYASHI)
* Status: Open
* Priority: Normal
* Backport: 2.6: UNKNOWN, 2.7: UNKNOWN, 3.0: UNKNOWN
----------------------------------------
When Clang/LLVM is used for compilation, some symbol names are missing in C level backtrace information. An example:
```
-- C level backtrace information -------------------------------------------
(...snip...)
/var/tmp/ruby.debug/lib/libruby.so.3.1(vm_call_method_each_type+0x6a) [0x7f73856ac33f] ../vm_insnhelper.c:3438
/var/tmp/ruby.debug/lib/libruby.so.3.1(0x7f73856ac29a) [0x7f73856ac29a]
/var/tmp/ruby.debug/lib/libruby.so.3.1(0x7f73856aadf6) [0x7f73856aadf6]
/var/tmp/ruby.debug/lib/libruby.so.3.1(vm_exec_core+0xff7) [0x7f738569c3cd] ../insns.def:792
/var/tmp/ruby.debug/lib/libruby.so.3.1(rb_vm_exec+0x5c9) [0x7f73856a78d4]
/var/tmp/ruby.debug/lib/libruby.so.3.1(rb_ec_exec_node+0xe5) [0x7f73855a1bec] ../eval.c:320
/var/tmp/ruby.debug/lib/libruby.so.3.1(ruby_run_node+0x5a) [0x7f73855a1acf] ../eval.c:379
/var/tmp/ruby.debug/bin/ruby(main+0x73) [0x55c15877ac4b] ../main.c:47
```

This seems to happen because `dladdr(3)` sometimes fills `NULL` in `dli_sname` which is then overwritten to `lines[i].sname` regardless of its previous value.

A patch is attached to fix this issue. It modifies `addr2line.c` so that it does not use `dli_sname` (and also `dli_fname`) when the value is `NULL`.

I also attach another patch that makes `addr2line.c` print source filename even when source lineno is not available (which is the case for `rb_vm_exec` in the above example).

When these two patches are applied, C level backtrace information is printed as follows.
```
-- C level backtrace information -------------------------------------------
(...snip...)
/var/tmp/ruby.debug/lib/libruby.so.3.1(vm_call_method_each_type+0x6a) [0x7fb08928231f] ../vm_insnhelper.c:3438
/var/tmp/ruby.debug/lib/libruby.so.3.1(vm_call_method+0xf6) [0x7fb08928227a] ../vm_insnhelper.c:0
/var/tmp/ruby.debug/lib/libruby.so.3.1(vm_sendish+0x334) [0x7fb089280dd6] ../vm_insnhelper.c:0
/var/tmp/ruby.debug/lib/libruby.so.3.1(vm_exec_core+0xff7) [0x7fb0892723ad] ../insns.def:792
/var/tmp/ruby.debug/lib/libruby.so.3.1(rb_vm_exec+0x5c9) [0x7fb08927d8b4] ../vm.c:0
/var/tmp/ruby.debug/lib/libruby.so.3.1(rb_ec_exec_node+0xe5) [0x7fb089177bcc] ../eval.c:320
/var/tmp/ruby.debug/lib/libruby.so.3.1(ruby_run_node+0x5a) [0x7fb089177aaf] ../eval.c:379
/var/tmp/ruby.debug/bin/ruby(main+0x73) [0x557ed1e0bc4b] ../main.c:47
```

---Files--------------------------------
ruby-addr2line-do-not-overwrite-sname-with-null.patch (1.07 KB)
ruby-addr2line-print-filename-without-lineno.patch (574 Bytes)


-- 
https://bugs.ruby-lang.org/

^ permalink raw reply	[flat|nested] 2+ messages in thread

* [ruby-core:103672] [Ruby master Bug#17810] addr2line.c: Some symbol names missing in C backtrace with Clang/LLVM
  2021-04-17  6:45 [ruby-core:103491] [Ruby master Bug#17810] addr2line.c: Some symbol names missing in C backtrace with Clang/LLVM xtkoba+ruby
@ 2021-04-30 14:11 ` xtkoba+ruby
  0 siblings, 0 replies; 2+ messages in thread
From: xtkoba+ruby @ 2021-04-30 14:11 UTC (permalink / raw)
  To: ruby-core

Issue #17810 has been updated by xtkoba (Tee KOBAYASHI).


PR: https://github.com/ruby/ruby/pull/4438

The second patch is omitted from the PR, because it turns out to be not very useful. The corresponding source file name should be easily guessable from the symbol name.

----------------------------------------
Bug #17810: addr2line.c: Some symbol names missing in C backtrace with Clang/LLVM
https://bugs.ruby-lang.org/issues/17810#change-91767

* Author: xtkoba (Tee KOBAYASHI)
* Status: Open
* Priority: Normal
* Backport: 2.6: UNKNOWN, 2.7: UNKNOWN, 3.0: UNKNOWN
----------------------------------------
When Clang/LLVM is used for compilation, some symbol names are missing in C level backtrace information. An example:
```
-- C level backtrace information -------------------------------------------
(...snip...)
/var/tmp/ruby.debug/lib/libruby.so.3.1(vm_call_method_each_type+0x6a) [0x7f73856ac33f] ../vm_insnhelper.c:3438
/var/tmp/ruby.debug/lib/libruby.so.3.1(0x7f73856ac29a) [0x7f73856ac29a]
/var/tmp/ruby.debug/lib/libruby.so.3.1(0x7f73856aadf6) [0x7f73856aadf6]
/var/tmp/ruby.debug/lib/libruby.so.3.1(vm_exec_core+0xff7) [0x7f738569c3cd] ../insns.def:792
/var/tmp/ruby.debug/lib/libruby.so.3.1(rb_vm_exec+0x5c9) [0x7f73856a78d4]
/var/tmp/ruby.debug/lib/libruby.so.3.1(rb_ec_exec_node+0xe5) [0x7f73855a1bec] ../eval.c:320
/var/tmp/ruby.debug/lib/libruby.so.3.1(ruby_run_node+0x5a) [0x7f73855a1acf] ../eval.c:379
/var/tmp/ruby.debug/bin/ruby(main+0x73) [0x55c15877ac4b] ../main.c:47
```

This seems to happen because `dladdr(3)` sometimes fills `NULL` in `dli_sname` which is then overwritten to `lines[i].sname` regardless of its previous value.

A patch is attached to fix this issue. It modifies `addr2line.c` so that it does not use `dli_sname` (and also `dli_fname`) when the value is `NULL`.

I also attach another patch that makes `addr2line.c` print source filename even when source lineno is not available (which is the case for `rb_vm_exec` in the above example).

When these two patches are applied, C level backtrace information is printed as follows.
```
-- C level backtrace information -------------------------------------------
(...snip...)
/var/tmp/ruby.debug/lib/libruby.so.3.1(vm_call_method_each_type+0x6a) [0x7fb08928231f] ../vm_insnhelper.c:3438
/var/tmp/ruby.debug/lib/libruby.so.3.1(vm_call_method+0xf6) [0x7fb08928227a] ../vm_insnhelper.c:0
/var/tmp/ruby.debug/lib/libruby.so.3.1(vm_sendish+0x334) [0x7fb089280dd6] ../vm_insnhelper.c:0
/var/tmp/ruby.debug/lib/libruby.so.3.1(vm_exec_core+0xff7) [0x7fb0892723ad] ../insns.def:792
/var/tmp/ruby.debug/lib/libruby.so.3.1(rb_vm_exec+0x5c9) [0x7fb08927d8b4] ../vm.c:0
/var/tmp/ruby.debug/lib/libruby.so.3.1(rb_ec_exec_node+0xe5) [0x7fb089177bcc] ../eval.c:320
/var/tmp/ruby.debug/lib/libruby.so.3.1(ruby_run_node+0x5a) [0x7fb089177aaf] ../eval.c:379
/var/tmp/ruby.debug/bin/ruby(main+0x73) [0x557ed1e0bc4b] ../main.c:47
```

---Files--------------------------------
ruby-addr2line-do-not-overwrite-sname-with-null.patch (1.07 KB)
ruby-addr2line-print-filename-without-lineno.patch (574 Bytes)


-- 
https://bugs.ruby-lang.org/

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2021-04-30 14:12 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-04-17  6:45 [ruby-core:103491] [Ruby master Bug#17810] addr2line.c: Some symbol names missing in C backtrace with Clang/LLVM xtkoba+ruby
2021-04-30 14:11 ` [ruby-core:103672] " xtkoba+ruby

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).