* dwarf.c (add64): New function.
(read_and_display_attr_value): Add CU offset in to the value displayed for a DW_AT_ref8 attribute.
This commit is contained in:
parent
40135bb14b
commit
a69c4772a4
|
@ -1,3 +1,9 @@
|
|||
2013-10-09 Nick Clifton <nickc@redhat.com>
|
||||
|
||||
* dwarf.c (add64): New function.
|
||||
(read_and_display_attr_value): Add CU offset in to the value
|
||||
displayed for a DW_AT_ref8 attribute.
|
||||
|
||||
2013-10-01 Cory Fields <cory@coryfields.com>
|
||||
|
||||
* arsup.c (ar_save): Respect the deterministic setting when
|
||||
|
|
|
@ -1425,6 +1425,34 @@ find_cu_tu_set_v2 (dwarf_vma cu_offset, int do_types)
|
|||
return NULL;
|
||||
}
|
||||
|
||||
/* Add INC to HIGH_BITS:LOW_BITS. */
|
||||
static void
|
||||
add64 (dwarf_vma * high_bits, dwarf_vma * low_bits, dwarf_vma inc)
|
||||
{
|
||||
dwarf_vma tmp = * low_bits;
|
||||
|
||||
tmp += inc;
|
||||
|
||||
/* FIXME: There is probably a better way of handling this:
|
||||
|
||||
We need to cope with dwarf_vma being a 32-bit or 64-bit
|
||||
type. Plus regardless of its size LOW_BITS is meant to
|
||||
only hold 32-bits, so if there is overflow or wrap around
|
||||
we must propagate into HIGH_BITS. */
|
||||
if (tmp < * low_bits)
|
||||
{
|
||||
++ * high_bits;
|
||||
}
|
||||
else if (sizeof (tmp) > 8
|
||||
&& (tmp >> 31) > 1)
|
||||
{
|
||||
++ * high_bits;
|
||||
tmp &= 0xFFFFFFFF;
|
||||
}
|
||||
|
||||
* low_bits = tmp;
|
||||
}
|
||||
|
||||
static unsigned char *
|
||||
read_and_display_attr_value (unsigned long attribute,
|
||||
unsigned long form,
|
||||
|
@ -1567,15 +1595,17 @@ read_and_display_attr_value (unsigned long attribute,
|
|||
|
||||
case DW_FORM_ref8:
|
||||
case DW_FORM_data8:
|
||||
if (!do_loc)
|
||||
{
|
||||
dwarf_vma high_bits;
|
||||
dwarf_vma utmp;
|
||||
char buf[64];
|
||||
|
||||
SAFE_BYTE_GET64 (data, &high_bits, &uvalue, end);
|
||||
|
||||
utmp = uvalue;
|
||||
if (form == DW_FORM_ref8)
|
||||
add64 (& high_bits, & utmp, cu_offset);
|
||||
printf (" 0x%s",
|
||||
dwarf_vmatoa64 (high_bits, uvalue, buf, sizeof (buf)));
|
||||
dwarf_vmatoa64 (high_bits, utmp, buf, sizeof (buf)));
|
||||
}
|
||||
|
||||
if ((do_loc || do_debug_loc || do_debug_ranges)
|
||||
|
|
Loading…
Reference in New Issue