https://sourceware.org/bugzilla/show_bug.cgi?id=33154
Bug ID: 33154
Summary: addr2line ignores subroutines with DW_AT_ranges of
form DW_FORM_rnglistx
Product: binutils
Version: 2.46 (HEAD)
Status: UNCONFIRMED
Severity: normal
Priority: P2
Component: binutils
Assignee: unassigned at sourceware dot org
Reporter: michal.chojnowski at scylladb dot com
Target Milestone: ---
In dwarf 5, DW_AT_ranges might have form DW_FORM_rnglistx. But addr2line (bfd)
can't handle this form. (If it sees a non-integer form for DW_AT_ranges, it
ignores the entry. IIUC, this happens here, in the `is_int_form` call:
https://sourceware.org/git/?p=binutils-gdb.git;a=blob;f=bfd/dwarf2.c;h=a62c952374378a39c8d7896e0728ff9581ada349;hb=HEAD#l4172
)
This results in missing entries in the output of `addr2line`. In particular, we
have seen things like
```
func_a() at c.hh:123
```
being output instead of the expected
```
func_c() at c.hh:123
(inlined by) func_b() at b.hh:456
(inlined by) func_a() at a.hh:789
```
Unlike addr2line 2.46, llvm-addr2line 20.1.7 shows those inlined function
frames correctly.
We started seeing the problem right after upgrading our application from clang
19 to clang 20. If that's not just a coincidence, maybe something changed in
LLVM 20 which causes it to emit DW_FORM_rnglistx more often (or to emit it at
all).
I haven't attached a reproducer because I don't know how to nudge the compiler
to generate DW_FORM_rnglistx reliably, I don't know how to write a DWARF tests
sample manually, and I hope that the issue is clear enough from the
description. (A test isn't needed to prove that bfd just doesn't have any logic
to handle DW_FORM_rnglistx, right)?
But I could try finding some decently small C++ reproducer, (or link a big
application executable which exhibits the problem), if that's helpful.
--
You are receiving this mail because:
You are on the CC list for the bug.