[binutils-gdb] Use consistent type in binutils/dwarf.c

Eric Botcazou ebotcazou@sourceware.org
Mon Jun 14 13:46:50 GMT 2021


https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=0121f438e83e06efd29e43779edf4a01004a39ff

commit 0121f438e83e06efd29e43779edf4a01004a39ff
Author: Eric Botcazou <ebotcazou@gcc.gnu.org>
Date:   Mon Jun 14 15:43:19 2021 +0200

    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.

Diff:
---
 binutils/ChangeLog |  7 +++++++
 binutils/dwarf.c   | 20 ++++++++++----------
 2 files changed, 17 insertions(+), 10 deletions(-)

diff --git a/binutils/ChangeLog b/binutils/ChangeLog
index 1297d275e80..7a9fa1de064 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 b3ec8909054..ebc7b023e3b 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');
 	    }
 	}


More information about the Binutils-cvs mailing list