mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-06-17 16:05:56 +08:00
* 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:
@ -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>
|
2013-10-01 Cory Fields <cory@coryfields.com>
|
||||||
|
|
||||||
* arsup.c (ar_save): Respect the deterministic setting when
|
* 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;
|
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 *
|
static unsigned char *
|
||||||
read_and_display_attr_value (unsigned long attribute,
|
read_and_display_attr_value (unsigned long attribute,
|
||||||
unsigned long form,
|
unsigned long form,
|
||||||
@ -1567,15 +1595,17 @@ read_and_display_attr_value (unsigned long attribute,
|
|||||||
|
|
||||||
case DW_FORM_ref8:
|
case DW_FORM_ref8:
|
||||||
case DW_FORM_data8:
|
case DW_FORM_data8:
|
||||||
if (!do_loc)
|
|
||||||
{
|
{
|
||||||
dwarf_vma high_bits;
|
dwarf_vma high_bits;
|
||||||
|
dwarf_vma utmp;
|
||||||
char buf[64];
|
char buf[64];
|
||||||
|
|
||||||
SAFE_BYTE_GET64 (data, &high_bits, &uvalue, end);
|
SAFE_BYTE_GET64 (data, &high_bits, &uvalue, end);
|
||||||
|
utmp = uvalue;
|
||||||
|
if (form == DW_FORM_ref8)
|
||||||
|
add64 (& high_bits, & utmp, cu_offset);
|
||||||
printf (" 0x%s",
|
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)
|
if ((do_loc || do_debug_loc || do_debug_ranges)
|
||||||
|
Reference in New Issue
Block a user