Use consistent type in binutils/dwarf.c
authorEric Botcazou <ebotcazou@gcc.gnu.org>
Mon, 14 Jun 2021 13:43:19 +0000 (15:43 +0200)
committerEric Botcazou <ebotcazou@gcc.gnu.org>
Mon, 14 Jun 2021 13:45:55 +0000 (15:45 +0200)
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.

binutils/ChangeLog
binutils/dwarf.c

index 1297d275e8042a920c5c1d6ce9016d513b976d55..7a9fa1de0641635d1da27bd3fa9c80fb5823dd0c 100644 (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>
 
        * readelf.c (process_file_header): Don't clear section_headers.
index b3ec8909054404fb7a67fa644e248acdf27a3e3a..ebc7b023e3bb026b114f85c15f5c1e41726c988f 100644 (file)
@@ -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');
            }
        }