btrace: remove leftover comment
[deliverable/binutils-gdb.git] / bfd / dwarf2.c
index 4d6f8fcae19b0ce33aa6230e7bff7bcea0a46a58..51f3de14889ccd11628489d2e6e5628d43316e1a 100644 (file)
@@ -517,8 +517,8 @@ read_section (bfd *           abfd,
        }
       if (! msec)
        {
-         (*_bfd_error_handler) (_("Dwarf Error: Can't find %s section."),
-                                sec->uncompressed_name);
+         _bfd_error_handler (_("Dwarf Error: Can't find %s section."),
+                             sec->uncompressed_name);
          bfd_set_error (bfd_error_bad_value);
          return FALSE;
        }
@@ -546,9 +546,9 @@ read_section (bfd *           abfd,
      that the client wants.  Validate it here to avoid trouble later.  */
   if (offset != 0 && offset >= *section_size)
     {
-      (*_bfd_error_handler) (_("Dwarf Error: Offset (%lu)"
-                              " greater than or equal to %s size (%lu)."),
-                            (long) offset, section_name, *section_size);
+      _bfd_error_handler (_("Dwarf Error: Offset (%lu)"
+                           " greater than or equal to %s size (%lu)."),
+                         (long) offset, section_name, *section_size);
       bfd_set_error (bfd_error_bad_value);
       return FALSE;
     }
@@ -1003,9 +1003,9 @@ read_attribute_value (struct attribute *  attr,
   struct dwarf_block *blk;
   bfd_size_type amt;
 
-  if (info_ptr >= info_ptr_end)
+  if (info_ptr >= info_ptr_end && form != DW_FORM_flag_present)
     {
-      (*_bfd_error_handler) (_("Dwarf Error: Info pointer extends beyond end of attributes"));
+      _bfd_error_handler (_("Dwarf Error: Info pointer extends beyond end of attributes"));
       bfd_set_error (bfd_error_bad_value);
       return info_ptr;
     }
@@ -1157,8 +1157,8 @@ read_attribute_value (struct attribute *  attr,
       info_ptr = read_attribute_value (attr, form, unit, info_ptr, info_ptr_end);
       break;
     default:
-      (*_bfd_error_handler) (_("Dwarf Error: Invalid or unhandled FORM value: %#x."),
-                            form);
+      _bfd_error_handler (_("Dwarf Error: Invalid or unhandled FORM value: %#x."),
+                         form);
       bfd_set_error (bfd_error_bad_value);
       return NULL;
     }
@@ -1446,7 +1446,7 @@ concat_filename (struct line_info_table *table, unsigned int file)
     {
       /* FILE == 0 means unknown.  */
       if (file)
-       (*_bfd_error_handler)
+       _bfd_error_handler
          (_("Dwarf Error: mangled line number section (bad file number)."));
       return strdup ("<unknown>");
     }
@@ -1687,7 +1687,7 @@ decode_line_info (struct comp_unit *unit, struct dwarf2_debug *stash)
 
   if (stash->dwarf_line_size < 16)
     {
-      (*_bfd_error_handler)
+      _bfd_error_handler
        (_("Dwarf Error: Line info section is too small (%ld)"),
         (long) stash->dwarf_line_size);
       bfd_set_error (bfd_error_bad_value);
@@ -1716,7 +1716,7 @@ decode_line_info (struct comp_unit *unit, struct dwarf2_debug *stash)
 
   if (lh.total_length > stash->dwarf_line_size)
     {
-      (*_bfd_error_handler)
+      _bfd_error_handler
        (_("Dwarf Error: Line info data is bigger (0x%lx) than the section (0x%lx)"),
         (long) lh.total_length, (long) stash->dwarf_line_size);
       bfd_set_error (bfd_error_bad_value);
@@ -1728,7 +1728,7 @@ decode_line_info (struct comp_unit *unit, struct dwarf2_debug *stash)
   lh.version = read_2_bytes (abfd, line_ptr, line_end);
   if (lh.version < 2 || lh.version > 4)
     {
-      (*_bfd_error_handler)
+      _bfd_error_handler
        (_("Dwarf Error: Unhandled .debug_line version %d."), lh.version);
       bfd_set_error (bfd_error_bad_value);
       return NULL;
@@ -1737,7 +1737,7 @@ decode_line_info (struct comp_unit *unit, struct dwarf2_debug *stash)
 
   if (line_ptr + offset_size + (lh.version >=4 ? 6 : 5) >= line_end)
     {
-      (*_bfd_error_handler)
+      _bfd_error_handler
        (_("Dwarf Error: Ran out of room reading prologue"));
       bfd_set_error (bfd_error_bad_value);
       return NULL;
@@ -1762,7 +1762,7 @@ decode_line_info (struct comp_unit *unit, struct dwarf2_debug *stash)
 
   if (lh.maximum_ops_per_insn == 0)
     {
-      (*_bfd_error_handler)
+      _bfd_error_handler
        (_("Dwarf Error: Invalid maximum operations per instruction."));
       bfd_set_error (bfd_error_bad_value);
       return NULL;
@@ -1782,7 +1782,7 @@ decode_line_info (struct comp_unit *unit, struct dwarf2_debug *stash)
 
   if (line_ptr + (lh.opcode_base - 1) >= line_end)
     {
-      (*_bfd_error_handler) (_("Dwarf Error: Ran out of room reading opcodes"));
+      _bfd_error_handler (_("Dwarf Error: Ran out of room reading opcodes"));
       bfd_set_error (bfd_error_bad_value);
       return NULL;
     }
@@ -1969,7 +1969,7 @@ decode_line_info (struct comp_unit *unit, struct dwarf2_debug *stash)
                  line_ptr += exop_len - 1;
                  break;
                default:
-                 (*_bfd_error_handler)
+                 _bfd_error_handler
                    (_("Dwarf Error: mangled line number section."));
                  bfd_set_error (bfd_error_bad_value);
                line_fail:
@@ -2326,7 +2326,7 @@ find_abstract_instance_name (struct comp_unit *unit,
       info_ptr = read_alt_indirect_ref (unit, die_ref);
       if (info_ptr == NULL)
        {
-         (*_bfd_error_handler)
+         _bfd_error_handler
            (_("Dwarf Error: Unable to read alt ref %u."), die_ref);
          bfd_set_error (bfd_error_bad_value);
          return NULL;
@@ -2350,7 +2350,7 @@ find_abstract_instance_name (struct comp_unit *unit,
       abbrev = lookup_abbrev (abbrev_number, unit->abbrevs);
       if (! abbrev)
        {
-         (*_bfd_error_handler)
+         _bfd_error_handler
            (_("Dwarf Error: Could not find abbrev number %u."), abbrev_number);
          bfd_set_error (bfd_error_bad_value);
        }
@@ -2494,7 +2494,7 @@ scan_unit_for_symbols (struct comp_unit *unit)
       abbrev = lookup_abbrev (abbrev_number,unit->abbrevs);
       if (! abbrev)
        {
-         (*_bfd_error_handler)
+         _bfd_error_handler
            (_("Dwarf Error: Could not find abbrev number %u."),
             abbrev_number);
          bfd_set_error (bfd_error_bad_value);
@@ -2757,55 +2757,63 @@ parse_comp_unit (struct dwarf2_debug *stash,
 
   if (version != 2 && version != 3 && version != 4)
     {
-      (*_bfd_error_handler)
-       (_("Dwarf Error: found dwarf version '%u', this reader"
-          " only handles version 2, 3 and 4 information."), version);
-      bfd_set_error (bfd_error_bad_value);
-      return 0;
+      /* PR 19872: A version number of 0 probably means that there is padding
+        at the end of the .debug_info section.  Gold puts it there when
+        performing an incremental link, for example.  So do not generate
+        an error, just return a NULL.  */
+      if (version)
+       {
+         _bfd_error_handler
+           (_("Dwarf Error: found dwarf version '%u', this reader"
+              " only handles version 2, 3 and 4 information."), version);
+         bfd_set_error (bfd_error_bad_value);
+       }
+      return NULL;
     }
 
   if (addr_size > sizeof (bfd_vma))
     {
-      (*_bfd_error_handler)
+      _bfd_error_handler
        (_("Dwarf Error: found address size '%u', this reader"
           " can not handle sizes greater than '%u'."),
         addr_size,
         (unsigned int) sizeof (bfd_vma));
       bfd_set_error (bfd_error_bad_value);
-      return 0;
+      return NULL;
     }
 
   if (addr_size != 2 && addr_size != 4 && addr_size != 8)
     {
-      (*_bfd_error_handler)
+      _bfd_error_handler
        ("Dwarf Error: found address size '%u', this reader"
         " can only handle address sizes '2', '4' and '8'.", addr_size);
       bfd_set_error (bfd_error_bad_value);
-      return 0;
+      return NULL;
     }
 
   /* Read the abbrevs for this compilation unit into a table.  */
   abbrevs = read_abbrevs (abfd, abbrev_offset, stash);
   if (! abbrevs)
-    return 0;
+    return NULL;
 
   abbrev_number = safe_read_leb128 (abfd, info_ptr, &bytes_read, FALSE, end_ptr);
   info_ptr += bytes_read;
   if (! abbrev_number)
     {
-      (*_bfd_error_handler) (_("Dwarf Error: Bad abbrev number: %u."),
-                            abbrev_number);
-      bfd_set_error (bfd_error_bad_value);
-      return 0;
+      /* PR 19872: An abbrev number of 0 probably means that there is padding
+        at the end of the .debug_abbrev section.  Gold puts it there when
+        performing an incremental link, for example.  So do not generate
+        an error, just return a NULL.  */
+      return NULL;
     }
 
   abbrev = lookup_abbrev (abbrev_number, abbrevs);
   if (! abbrev)
     {
-      (*_bfd_error_handler) (_("Dwarf Error: Could not find abbrev number %u."),
-                            abbrev_number);
+      _bfd_error_handler (_("Dwarf Error: Could not find abbrev number %u."),
+                         abbrev_number);
       bfd_set_error (bfd_error_bad_value);
-      return 0;
+      return NULL;
     }
 
   amt = sizeof (struct comp_unit);
@@ -2867,7 +2875,7 @@ parse_comp_unit (struct dwarf2_debug *stash,
            /* PR 17512: file: 1fe726be.  */
            if (! is_str_attr (attr.form))
              {
-               (*_bfd_error_handler)
+               _bfd_error_handler
                  (_("Dwarf Error: DW_AT_comp_dir attribute encountered with a non-string form."));
                comp_dir = NULL;
              }
This page took 0.025982 seconds and 4 git commands to generate.