Use consistent type in binutils/dwarf.c

If you look at the type used for implicit_const objects in binutils/dwarf.c,
you'll get sometimes bfd_signed_vma and sometimes dwarf_signed_vma.

They are the same on 64-bit hosts, but not on 32-bit hosts, and the latter
discrepancy, in particular in process_abbrev_set, is responsible for the
following error issued by objdump on some object files containing DWARF 5:

binutils/dwarf.c:1108: read LEB value is too large to store in destination
variable

binutis/
	* dwarf.c (struct abbrev_attr): Change type of implicit_const.
	(add_abbrev_attr): Likewise.
	(process_abbrev_set): Likewise.
	(display_debug_abbrev): Adjust to above change.
This commit is contained in:
Eric Botcazou
2021-06-14 15:43:19 +02:00
parent 90d3edf016
commit 0121f438e8
2 changed files with 17 additions and 10 deletions

View File

@ -1,3 +1,10 @@
2021-06-14 Eric Botcazou <ebotcazou@adacore.com>
* dwarf.c (struct abbrev_attr): Change type of implicit_const.
(add_abbrev_attr): Likewise.
(process_abbrev_set): Likewise.
(display_debug_abbrev): Adjust to above change.
2021-06-12 Alan Modra <amodra@gmail.com> 2021-06-12 Alan Modra <amodra@gmail.com>
* readelf.c (process_file_header): Don't clear section_headers. * readelf.c (process_file_header): Don't clear section_headers.

View File

@ -823,7 +823,7 @@ typedef struct abbrev_attr
{ {
unsigned long attribute; unsigned long attribute;
unsigned long form; unsigned long form;
bfd_signed_vma implicit_const; dwarf_signed_vma implicit_const;
struct abbrev_attr * next; struct abbrev_attr * next;
} }
abbrev_attr; abbrev_attr;
@ -1000,7 +1000,7 @@ add_abbrev (unsigned long number,
static void static void
add_abbrev_attr (unsigned long attribute, add_abbrev_attr (unsigned long attribute,
unsigned long form, unsigned long form,
bfd_signed_vma implicit_const, dwarf_signed_vma implicit_const,
abbrev_list * list) abbrev_list * list)
{ {
abbrev_attr *attr; abbrev_attr *attr;
@ -1085,7 +1085,7 @@ process_abbrev_set (struct dwarf_section *section,
{ {
unsigned long form; unsigned long form;
/* Initialize it due to a false compiler warning. */ /* Initialize it due to a false compiler warning. */
bfd_signed_vma implicit_const = -1; dwarf_signed_vma implicit_const = -1;
READ_ULEB (attribute, start, end); READ_ULEB (attribute, start, end);
if (start == end) if (start == end)
@ -6255,7 +6255,7 @@ display_debug_abbrev (struct dwarf_section *section,
get_AT_name (attr->attribute), get_AT_name (attr->attribute),
get_FORM_name (attr->form)); get_FORM_name (attr->form));
if (attr->form == DW_FORM_implicit_const) if (attr->form == DW_FORM_implicit_const)
printf (": %" BFD_VMA_FMT "d", attr->implicit_const); printf (": %s", dwarf_vmatoa ("d", attr->implicit_const));
putchar ('\n'); putchar ('\n');
} }
} }