aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEric Botcazou <ebotcazou@gcc.gnu.org>2021-06-14 15:43:19 +0200
committerEric Botcazou <ebotcazou@gcc.gnu.org>2021-06-14 15:45:55 +0200
commit0121f438e83e06efd29e43779edf4a01004a39ff (patch)
treee5abd2f0fa0caee9825852dc427a8bf2227acc18
parent90d3edf01630093142e833235abea548aa78e65b (diff)
downloadfsf-binutils-gdb-0121f438e83e06efd29e43779edf4a01004a39ff.zip
fsf-binutils-gdb-0121f438e83e06efd29e43779edf4a01004a39ff.tar.gz
fsf-binutils-gdb-0121f438e83e06efd29e43779edf4a01004a39ff.tar.bz2
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.
-rw-r--r--binutils/ChangeLog7
-rw-r--r--binutils/dwarf.c20
2 files changed, 17 insertions, 10 deletions
diff --git a/binutils/ChangeLog b/binutils/ChangeLog
index 1297d27..7a9fa1d 100644
--- a/binutils/ChangeLog
+++ b/binutils/ChangeLog
@@ -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>
* readelf.c (process_file_header): Don't clear section_headers.
diff --git a/binutils/dwarf.c b/binutils/dwarf.c
index b3ec890..ebc7b02 100644
--- a/binutils/dwarf.c
+++ b/binutils/dwarf.c
@@ -823,7 +823,7 @@ typedef struct abbrev_attr
{
unsigned long attribute;
unsigned long form;
- bfd_signed_vma implicit_const;
+ dwarf_signed_vma implicit_const;
struct abbrev_attr * next;
}
abbrev_attr;
@@ -998,19 +998,19 @@ add_abbrev (unsigned long number,
}
static void
-add_abbrev_attr (unsigned long attribute,
- unsigned long form,
- bfd_signed_vma implicit_const,
- abbrev_list * list)
+add_abbrev_attr (unsigned long attribute,
+ unsigned long form,
+ dwarf_signed_vma implicit_const,
+ abbrev_list * list)
{
abbrev_attr *attr;
attr = (abbrev_attr *) xmalloc (sizeof (*attr));
- attr->attribute = attribute;
- attr->form = form;
+ attr->attribute = attribute;
+ attr->form = form;
attr->implicit_const = implicit_const;
- attr->next = NULL;
+ attr->next = NULL;
assert (list != NULL && list->last_abbrev != NULL);
@@ -1085,7 +1085,7 @@ process_abbrev_set (struct dwarf_section *section,
{
unsigned long form;
/* 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);
if (start == end)
@@ -6255,7 +6255,7 @@ display_debug_abbrev (struct dwarf_section *section,
get_AT_name (attr->attribute),
get_FORM_name (attr->form));
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');
}
}