+2012-04-26 Mark Wielaard <mjw@redhat.com>
+
+ * dwarf2.c (scan_unit_for_symbols): Account for DW_AT_high_pc
+ possibly being relative to DW_AT_low_pc.
+ (parse_comp_unit): Likewise.
+
2012-04-26 Andreas Schwab <schwab@linux-m68k.org>
* elf32-m68k.c (elf_m68k_check_relocs): Mark non-GOT references
struct varinfo *var;
bfd_vma low_pc = 0;
bfd_vma high_pc = 0;
+ bfd_boolean high_pc_relative = FALSE;
abbrev_number = read_unsigned_leb128 (abfd, info_ptr, &bytes_read);
info_ptr += bytes_read;
case DW_AT_high_pc:
high_pc = attr.u.val;
+ high_pc_relative = attr.form != DW_FORM_addr;
break;
case DW_AT_ranges:
}
}
+ if (high_pc_relative)
+ high_pc += low_pc;
+
if (func && high_pc != 0)
{
if (!arange_add (unit->abfd, &func->arange, low_pc, high_pc))
bfd_vma low_pc = 0;
bfd_vma high_pc = 0;
bfd *abfd = stash->bfd_ptr;
+ bfd_boolean high_pc_relative = FALSE;
version = read_2_bytes (abfd, info_ptr);
info_ptr += 2;
case DW_AT_high_pc:
high_pc = attr.u.val;
+ high_pc_relative = attr.form != DW_FORM_addr;
break;
case DW_AT_ranges:
break;
}
}
+ if (high_pc_relative)
+ high_pc += low_pc;
if (high_pc != 0)
{
if (!arange_add (unit->abfd, &unit->arange, low_pc, high_pc))