Handle multiple addresses in call_site_target
authorTom Tromey <tromey@adacore.com>
Fri, 19 Nov 2021 17:12:44 +0000 (10:12 -0700)
committerTom Tromey <tromey@adacore.com>
Mon, 28 Mar 2022 19:31:22 +0000 (13:31 -0600)
commit48ac197b0c209ccf1f2de9704eb6cdf7c5c73a8e
tree9add73f002b76696ce8dc9eb1ea5eff3678c813d
parenta0e0ca7044f240c0b56a829ed762f5efd0854fc6
Handle multiple addresses in call_site_target

A large customer program has a function that is partitioned into hot
and cold parts.  A variable in a callee of this function is described
using DW_OP_GNU_entry_value, but gdb gets confused when trying to find
the caller.  I tracked this down to dwarf2_get_pc_bounds interpreting
the function's changes so that the returned low PC is the "wrong"
function.

Intead, when processing DW_TAG_call_site, the low PC of each range in
DW_AT_ranges should be preserved in the call_site_target.  This fixes
the variable lookup in the test case I have.

I didn't write a standalone test for this as it seemed excessively
complicated.
gdb/dwarf2/loc.c
gdb/dwarf2/read.c
gdb/gdbtypes.h