summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPedro Alves <palves@redhat.com>2017-02-21 18:40:02 +0000
committerPedro Alves <palves@redhat.com>2017-02-21 18:40:02 +0000
commit187a94196e6188c22bd2e7ed77771834f629ebab (patch)
tree09c99b919cf982297822d95d5cc65168dd309af2
parent1b90b1390679473dd84416e462afa1587769ceec (diff)
downloadbinutils-gdb-users/palves/dwarf5-regression-for-jan.tar.gz
-rw-r--r--gdb/dwarf2read.c23
1 files changed, 16 insertions, 7 deletions
diff --git a/gdb/dwarf2read.c b/gdb/dwarf2read.c
index 8a6e1f3dced..c642433f57c 100644
--- a/gdb/dwarf2read.c
+++ b/gdb/dwarf2read.c
@@ -12167,7 +12167,7 @@ dwarf2_rnglists_process (unsigned offset, struct dwarf2_cu *cu,
template <typename Callback>
static int
-dwarf2_ranges_process (unsigned offset, struct dwarf2_cu *cu,
+dwarf2_ranges_process (int mode, unsigned offset, struct dwarf2_cu *cu,
Callback &&callback)
{
struct objfile *objfile = cu->objfile;
@@ -12209,7 +12209,8 @@ dwarf2_ranges_process (unsigned offset, struct dwarf2_cu *cu,
buffer += addr_size;
range_end = read_address (obfd, buffer, cu, &dummy);
buffer += addr_size;
- offset += 2 * addr_size;
+ // not used anywhere.
+ // offset += 2 * addr_size;
/* An end of list marker is a pair of zero addresses. */
if (range_beginning == 0 && range_end == 0)
@@ -12249,12 +12250,20 @@ dwarf2_ranges_process (unsigned offset, struct dwarf2_cu *cu,
if (range_beginning == range_end)
continue;
- range_beginning += base;
- range_end += base;
+ if (mode == 0)
+ {
+ range_beginning += base;
+ range_end += base;
+ }
+ else
+ {
+ range_beginning += base + baseaddr;
+ range_end += base + baseaddr;
+ }
/* A not-uncommon case of bad debug info.
Don't pollute the addrmap with bad data. */
- if (range_beginning + baseaddr == 0
+ if (range_beginning + baseaddr == 0 // probably this "+ baseaddr" should be removed?
&& !dwarf2_per_objfile->has_section_at_zero)
{
complaint (&symfile_complaints,
@@ -12287,7 +12296,7 @@ dwarf2_ranges_read (unsigned offset, CORE_ADDR *low_return,
CORE_ADDR high = 0;
int retval;
- retval = dwarf2_ranges_process (offset, cu,
+ retval = dwarf2_ranges_process (0, offset, cu,
[&] (CORE_ADDR range_beginning, CORE_ADDR range_end)
{
if (ranges_pst != NULL)
@@ -12574,7 +12583,7 @@ dwarf2_record_block_ranges (struct die_info *die, struct block *block,
CORE_ADDR base = cu->base_address;
int base_known = cu->base_known;
- dwarf2_ranges_process (offset, cu,
+ dwarf2_ranges_process (1, offset, cu,
[&] (CORE_ADDR start, CORE_ADDR end)
{
start = gdbarch_adjust_dwarf2_addr (gdbarch, start);