Correctly handle DW_LLE_start_end
authorTom Tromey <tromey@adacore.com>
Mon, 8 Nov 2021 17:58:27 +0000 (10:58 -0700)
committerTom Tromey <tromey@adacore.com>
Tue, 9 Nov 2021 15:30:48 +0000 (08:30 -0700)
commit7b9f73fad09a5ec76002625d562e32c4debc2a5e
tree294a549f0c3ec2e02c0680d26b4f059fe5d4733f
parent0b03c6f03d51f441d999e0cee92f81af543d9373
Correctly handle DW_LLE_start_end

When the code to handle DW_LLE_start_end was added (as part of some
DWARF 5 work), it was written to add the base address.  However, this
seems incorrect -- the DWARF standard describes this as an address,
not an offset from the base address.

This patch changes a couple of spots in dwarf2/loc.c to fix this
problem.  It then changes decode_debug_loc_addresses to return
DEBUG_LOC_OFFSET_PAIR instead, which preserves the previous semantics.

This only showed up on the RISC-V target internally, due to the
combination of DWARF 5 and a newer version of GCC.  I've updated a
couple of existing loclists test cases to demonstrate the bug.
gdb/dwarf2/loc.c
gdb/testsuite/gdb.dwarf2/loclists-multiple-cus.exp
gdb/testsuite/gdb.dwarf2/loclists-start-end.exp
gdb/testsuite/lib/dwarf.exp