Display null bytes in DWARF debug info
authorH.J. Lu <hjl.tools@gmail.com>
Thu, 2 Aug 2012 13:42:59 +0000 (13:42 +0000)
committerH.J. Lu <hjl.tools@gmail.com>
Thu, 2 Aug 2012 13:42:59 +0000 (13:42 +0000)
binutils/

PR binutils/14420
* dwarf.c (process_abbrev_section): Add attribute terminator.
Warn missing section terminator.
(get_FORM_name): Special check for 0 value.
(get_AT_name): Likewise.
(process_debug_info): Display zero abbrev number.  Check
attribute terminator.

binutils/testsuite/

PR binutils/14420
* binutils-all/i386/compressed-1a.d: Updated.
* binutils-all/objdump.W: Likewise.
* binutils-all/readelf.wa: Likewise.
* binutils-all/x86-64/compressed-1a.d: Likewise.

gas/testsuite/

PR binutils/14420
* gas/elf/dwarf2-1.d: Updated.
* gas/elf/dwarf2-2.d: Likwise.
* gas/i386/dw2-compress-1.d: Likwise.

binutils/ChangeLog
binutils/dwarf.c
binutils/testsuite/ChangeLog
binutils/testsuite/binutils-all/i386/compressed-1a.d
binutils/testsuite/binutils-all/objdump.W
binutils/testsuite/binutils-all/readelf.wa
binutils/testsuite/binutils-all/x86-64/compressed-1a.d
gas/testsuite/ChangeLog
gas/testsuite/gas/elf/dwarf2-1.d
gas/testsuite/gas/elf/dwarf2-2.d
gas/testsuite/gas/i386/dw2-compress-1.d

index 7634de4..7594bcb 100644 (file)
@@ -1,3 +1,13 @@
+2012-08-02  H.J. Lu  <hongjiu.lu@intel.com>
+
+       PR binutils/14420
+       * dwarf.c (process_abbrev_section): Add attribute terminator.
+       Warn missing section terminator.
+       (get_FORM_name): Special check for 0 value.
+       (get_AT_name): Likewise.
+       (process_debug_info): Display zero abbrev number.  Check
+       attribute terminator.
+
 2012-07-30  Nick Clifton  <nickc@redhat.com>
 
        * po/binutils.pot: Updated template.
index 6e93906..d8050fa 100644 (file)
@@ -647,12 +647,14 @@ process_abbrev_section (unsigned char *start, unsigned char *end)
          form = read_leb128 (start, & bytes_read, 0);
          start += bytes_read;
 
-         if (attribute != 0)
-           add_abbrev_attr (attribute, form);
+         add_abbrev_attr (attribute, form);
        }
       while (attribute != 0);
     }
 
+  /* Report the missing single zero which ends the section.  */
+  error (_(".debug_abbrev section not zero terminated\n"));
+
   return NULL;
 }
 
@@ -675,8 +677,12 @@ get_TAG_name (unsigned long tag)
 static const char *
 get_FORM_name (unsigned long form)
 {
-  const char *name = get_DW_FORM_name (form);
+  const char *name;
+  
+  if (form == 0)
+    return "DW_FORM value: 0";
 
+  name = get_DW_FORM_name (form);
   if (name == NULL)
     {
       static char buffer[100];
@@ -1860,6 +1866,9 @@ get_AT_name (unsigned long attribute)
 {
   const char *name;
 
+  if (attribute == 0)
+    return "DW_AT value: 0";
+
   /* One value is shared by the MIPS and HP extensions:  */
   if (attribute == DW_AT_MIPS_fde)
     return "DW_AT_MIPS_fde or DW_AT_HP_unmodifiable";
@@ -2161,6 +2170,10 @@ process_debug_info (struct dwarf_section *section,
                    break;
                }
 
+             if (!do_loc && die_offset >= dwarf_start_die)
+               printf (_(" <%d><%lx>: Abbrev Number: 0\n"),
+                       level, die_offset);
+
              --level;
              if (level < 0)
                {
@@ -2238,7 +2251,9 @@ process_debug_info (struct dwarf_section *section,
              break;
            }
 
-         for (attr = entry->first_attr; attr; attr = attr->next)
+         for (attr = entry->first_attr;
+              attr && attr->attribute;
+              attr = attr->next)
            {
              debug_info *arg;
 
index b82624a..7d4de5a 100644 (file)
@@ -1,3 +1,11 @@
+2012-08-02  H.J. Lu  <hongjiu.lu@intel.com>
+
+       PR binutils/14420
+       * binutils-all/i386/compressed-1a.d: Updated.
+       * binutils-all/objdump.W: Likewise.
+       * binutils-all/readelf.wa: Likewise.
+       * binutils-all/x86-64/compressed-1a.d: Likewise.
+
 2012-07-28  Kai Tietz  <ktietz@redhat.com>
 
        * binutils-all/windres/version_small.rc: New test.
index aa0284a..bb609dd 100644 (file)
@@ -16,6 +16,7 @@ Contents of the .[z]?debug_abbrev section:
     DW_AT_low_pc       DW_FORM_addr
     DW_AT_high_pc      DW_FORM_addr
     DW_AT_stmt_list    DW_FORM_data4
+    DW_AT value: 0     DW_FORM value: 0
    2      DW_TAG_subprogram    \[no children\]
     DW_AT_external     DW_FORM_flag
     DW_AT_name         DW_FORM_strp
@@ -24,6 +25,7 @@ Contents of the .[z]?debug_abbrev section:
     DW_AT_low_pc       DW_FORM_addr
     DW_AT_high_pc      DW_FORM_addr
     DW_AT_frame_base   DW_FORM_block1
+    DW_AT value: 0     DW_FORM value: 0
 
 Contents of the .[z]?debug_info section:
 
@@ -56,6 +58,7 @@ Contents of the .[z]?debug_info section:
     <3f>   DW_AT_low_pc      : 0x10    
     <43>   DW_AT_high_pc     : 0x1b    
     <47>   DW_AT_frame_base  : 1 byte block: 9c        \(DW_OP_call_frame_cfa\)
+ <1><49>: Abbrev Number: 0
 
 Raw dump of debug contents of section .[z]?debug_line:
 
index 449372e..43c2451 100644 (file)
@@ -28,6 +28,7 @@ Contents of the .debug_info section:
     <4b>   DW_AT_name        : int     
     <4f>   DW_AT_byte_size   : 4       
     <50>   DW_AT_encoding    : 5       \(signed\)
+ <1><51>: Abbrev Number: 0
 
 Raw dump of debug contents of section .debug_line:
 
@@ -83,6 +84,7 @@ Contents of the .debug_abbrev section:
     DW_AT_name         DW_FORM_string
     DW_AT_producer     DW_FORM_string
     DW_AT_language     DW_FORM_data1
+    DW_AT value: 0     DW_FORM value: 0
    2      DW_TAG_subprogram    \[no children\]
     DW_AT_external     DW_FORM_flag
     DW_AT_decl_file    DW_FORM_data1
@@ -92,8 +94,10 @@ Contents of the .debug_abbrev section:
     DW_AT_low_pc       DW_FORM_addr
     DW_AT_high_pc      DW_FORM_addr
     DW_AT_frame_base   DW_FORM_block1
+    DW_AT value: 0     DW_FORM value: 0
    3      DW_TAG_base_type    \[no children\]
     DW_AT_name         DW_FORM_string
     DW_AT_byte_size    DW_FORM_data1
     DW_AT_encoding     DW_FORM_data1
+    DW_AT value: 0     DW_FORM value: 0
 
index e1e158c..43d60b1 100644 (file)
@@ -8,6 +8,7 @@ Contents of the .zdebug_abbrev section:
     DW_AT_name         DW_FORM_string
     DW_AT_producer     DW_FORM_string
     DW_AT_language     DW_FORM_data1
+    DW_AT value: 0     DW_FORM value: 0
    2      DW_TAG_subprogram    [no children]
     DW_AT_external     DW_FORM_flag
     DW_AT_decl_file    DW_FORM_data1
@@ -17,8 +18,10 @@ Contents of the .zdebug_abbrev section:
     DW_AT_low_pc       DW_FORM_addr
     DW_AT_high_pc      DW_FORM_addr
     DW_AT_frame_base   DW_FORM_block1
+    DW_AT value: 0     DW_FORM value: 0
    3      DW_TAG_base_type    [no children]
     DW_AT_name         DW_FORM_string
     DW_AT_byte_size    DW_FORM_data1
     DW_AT_encoding     DW_FORM_data1
+    DW_AT value: 0     DW_FORM value: 0
 
index 98115af..06ab011 100644 (file)
@@ -16,6 +16,7 @@ Contents of the .[z]?debug_abbrev section:
     DW_AT_low_pc       DW_FORM_addr
     DW_AT_high_pc      DW_FORM_addr
     DW_AT_stmt_list    DW_FORM_data4
+    DW_AT value: 0     DW_FORM value: 0
    2      DW_TAG_subprogram    \[no children\]
     DW_AT_external     DW_FORM_flag
     DW_AT_name         DW_FORM_strp
@@ -24,6 +25,7 @@ Contents of the .[z]?debug_abbrev section:
     DW_AT_low_pc       DW_FORM_addr
     DW_AT_high_pc      DW_FORM_addr
     DW_AT_frame_base   DW_FORM_block1
+    DW_AT value: 0     DW_FORM value: 0
 
 Contents of the .[z]?debug_info section:
 
@@ -56,6 +58,7 @@ Contents of the .[z]?debug_info section:
     <4f>   DW_AT_low_pc      : 0x10    
     <57>   DW_AT_high_pc     : 0x15    
     <5f>   DW_AT_frame_base  : 1 byte block: 9c        \(DW_OP_call_frame_cfa\)
+ <1><61>: Abbrev Number: 0
 
 Raw dump of debug contents of section .[z]?debug_line:
 
index 2601cc1..b9635ac 100644 (file)
@@ -1,3 +1,10 @@
+2012-08-02  H.J. Lu  <hongjiu.lu@intel.com>
+
+       PR binutils/14420
+       * gas/elf/dwarf2-1.d: Updated.
+       * gas/elf/dwarf2-2.d: Likwise.
+       * gas/i386/dw2-compress-1.d: Likwise.
+
 2012-08-01  James Lemke  <jwlemke@codesourcery.com>
 
        * gas/cfi/cfi-ppc-1.d: Allow for code alignment of 2 or 4.
index ff0ff74..1a6b0ca 100644 (file)
@@ -30,6 +30,7 @@ Contents of the .[z]?debug_info section:
     <4b>   DW_AT_name        : int     
     <4f>   DW_AT_byte_size   : 4       
     <50>   DW_AT_encoding    : 5       \(signed\)
+ <1><51>: Abbrev Number: 0
 
 Raw dump of debug contents of section .[z]?debug_line:
 
@@ -85,6 +86,7 @@ Contents of the .[z]?debug_abbrev section:
     DW_AT_name         DW_FORM_string
     DW_AT_producer     DW_FORM_string
     DW_AT_language     DW_FORM_data1
+    DW_AT value: 0     DW_FORM value: 0
    2      DW_TAG_subprogram    \[no children\]
     DW_AT_external     DW_FORM_flag
     DW_AT_decl_file    DW_FORM_data1
@@ -94,8 +96,10 @@ Contents of the .[z]?debug_abbrev section:
     DW_AT_low_pc       DW_FORM_addr
     DW_AT_high_pc      DW_FORM_addr
     DW_AT_frame_base   DW_FORM_block1
+    DW_AT value: 0     DW_FORM value: 0
    3      DW_TAG_base_type    \[no children\]
     DW_AT_name         DW_FORM_string
     DW_AT_byte_size    DW_FORM_data1
     DW_AT_encoding     DW_FORM_data1
+    DW_AT value: 0     DW_FORM value: 0
 
index 2feafa6..a463acc 100644 (file)
@@ -30,6 +30,7 @@ Contents of the .[z]?debug_info section:
     <4b>   DW_AT_name        : int     
     <4f>   DW_AT_byte_size   : 4       
     <50>   DW_AT_encoding    : 5       \(signed\)
+ <1><51>: Abbrev Number: 0
 
 Raw dump of debug contents of section .[z]?debug_line:
 
@@ -85,6 +86,7 @@ Contents of the .[z]?debug_abbrev section:
     DW_AT_name         DW_FORM_string
     DW_AT_producer     DW_FORM_string
     DW_AT_language     DW_FORM_data1
+    DW_AT value: 0     DW_FORM value: 0
    2      DW_TAG_subprogram    \[no children\]
     DW_AT_external     DW_FORM_flag
     DW_AT_decl_file    DW_FORM_data1
@@ -94,8 +96,10 @@ Contents of the .[z]?debug_abbrev section:
     DW_AT_low_pc       DW_FORM_addr
     DW_AT_high_pc      DW_FORM_addr
     DW_AT_frame_base   DW_FORM_block1
+    DW_AT value: 0     DW_FORM value: 0
    3      DW_TAG_base_type    \[no children\]
     DW_AT_name         DW_FORM_string
     DW_AT_byte_size    DW_FORM_data1
     DW_AT_encoding     DW_FORM_data1
+    DW_AT value: 0     DW_FORM value: 0
 
index 06057ca..64e2559 100644 (file)
@@ -29,6 +29,7 @@ Contents of the .zdebug_info section:
     <4b>   DW_AT_name        : int     
     <4f>   DW_AT_byte_size   : 4       
     <50>   DW_AT_encoding    : 5       \(signed\)
+ <1><51>: Abbrev Number: 0
 
 Contents of the .zdebug_abbrev section:
 
@@ -40,6 +41,7 @@ Contents of the .zdebug_abbrev section:
     DW_AT_name         DW_FORM_string
     DW_AT_producer     DW_FORM_string
     DW_AT_language     DW_FORM_data1
+    DW_AT value: 0     DW_FORM value: 0
    2      DW_TAG_subprogram    \[no children\]
     DW_AT_external     DW_FORM_flag
     DW_AT_decl_file    DW_FORM_data1
@@ -49,10 +51,12 @@ Contents of the .zdebug_abbrev section:
     DW_AT_low_pc       DW_FORM_addr
     DW_AT_high_pc      DW_FORM_addr
     DW_AT_frame_base   DW_FORM_block1
+    DW_AT value: 0     DW_FORM value: 0
    3      DW_TAG_base_type    \[no children\]
     DW_AT_name         DW_FORM_string
     DW_AT_byte_size    DW_FORM_data1
     DW_AT_encoding     DW_FORM_data1
+    DW_AT value: 0     DW_FORM value: 0
 
 Raw dump of debug contents of section .zdebug_line: