* PATCH: PR binutils/14420: readelf fails to display null bytes in DWARF info
@ 2012-07-31 21:05 H.J. Lu
2012-08-02 8:41 ` nick clifton
0 siblings, 1 reply; 2+ messages in thread
From: H.J. Lu @ 2012-07-31 21:05 UTC (permalink / raw)
To: binutils
Hi,
Null bytes are used to terminate list and table in DWARF debug info. This
patch displays null bytes in DWARF debug info so that one can tell if
DWARF debug info is properly terminated.
H.J.
--
diff --git a/binutils/ChangeLog b/binutils/ChangeLog
index 7634de4..c4eda98 100644
--- a/binutils/ChangeLog
+++ b/binutils/ChangeLog
@@ -1,3 +1,13 @@
+2012-07-31 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.
diff --git a/binutils/dwarf.c b/binutils/dwarf.c
index 6e93906..72aa2aa 100644
--- a/binutils/dwarf.c
+++ b/binutils/dwarf.c
@@ -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,13 @@ 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);
+ die_offset++;
+ }
+
--level;
if (level < 0)
{
@@ -2238,7 +2254,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;
diff --git a/binutils/testsuite/ChangeLog b/binutils/testsuite/ChangeLog
index b82624a..c021e28 100644
--- a/binutils/testsuite/ChangeLog
+++ b/binutils/testsuite/ChangeLog
@@ -1,3 +1,11 @@
+2012-07-31 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.
diff --git a/binutils/testsuite/binutils-all/i386/compressed-1a.d b/binutils/testsuite/binutils-all/i386/compressed-1a.d
index aa0284a..bb609dd 100644
--- a/binutils/testsuite/binutils-all/i386/compressed-1a.d
+++ b/binutils/testsuite/binutils-all/i386/compressed-1a.d
@@ -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:
diff --git a/binutils/testsuite/binutils-all/objdump.W b/binutils/testsuite/binutils-all/objdump.W
index 449372e..43c2451 100644
--- a/binutils/testsuite/binutils-all/objdump.W
+++ b/binutils/testsuite/binutils-all/objdump.W
@@ -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
diff --git a/binutils/testsuite/binutils-all/readelf.wa b/binutils/testsuite/binutils-all/readelf.wa
index e1e158c..43d60b1 100644
--- a/binutils/testsuite/binutils-all/readelf.wa
+++ b/binutils/testsuite/binutils-all/readelf.wa
@@ -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
diff --git a/binutils/testsuite/binutils-all/x86-64/compressed-1a.d b/binutils/testsuite/binutils-all/x86-64/compressed-1a.d
index 98115af..06ab011 100644
--- a/binutils/testsuite/binutils-all/x86-64/compressed-1a.d
+++ b/binutils/testsuite/binutils-all/x86-64/compressed-1a.d
@@ -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:
diff --git a/gas/testsuite/ChangeLog b/gas/testsuite/ChangeLog
index 6957712..4e43e4c 100644
--- a/gas/testsuite/ChangeLog
+++ b/gas/testsuite/ChangeLog
@@ -1,3 +1,10 @@
+2012-07-31 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-07-30 H.J. Lu <hongjiu.lu@intel.com>
* gas/i386/inval-equ-2.l: Updated.
diff --git a/gas/testsuite/gas/elf/dwarf2-1.d b/gas/testsuite/gas/elf/dwarf2-1.d
index ff0ff74..1a6b0ca 100644
--- a/gas/testsuite/gas/elf/dwarf2-1.d
+++ b/gas/testsuite/gas/elf/dwarf2-1.d
@@ -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
diff --git a/gas/testsuite/gas/elf/dwarf2-2.d b/gas/testsuite/gas/elf/dwarf2-2.d
index 2feafa6..a463acc 100644
--- a/gas/testsuite/gas/elf/dwarf2-2.d
+++ b/gas/testsuite/gas/elf/dwarf2-2.d
@@ -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
diff --git a/gas/testsuite/gas/i386/dw2-compress-1.d b/gas/testsuite/gas/i386/dw2-compress-1.d
index 06057ca..64e2559 100644
--- a/gas/testsuite/gas/i386/dw2-compress-1.d
+++ b/gas/testsuite/gas/i386/dw2-compress-1.d
@@ -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:
^ permalink raw reply [flat|nested] 2+ messages in thread
* Re: PATCH: PR binutils/14420: readelf fails to display null bytes in DWARF info
2012-07-31 21:05 PATCH: PR binutils/14420: readelf fails to display null bytes in DWARF info H.J. Lu
@ 2012-08-02 8:41 ` nick clifton
0 siblings, 0 replies; 2+ messages in thread
From: nick clifton @ 2012-08-02 8:41 UTC (permalink / raw)
To: H.J. Lu; +Cc: H.J. Lu, binutils
Hi H.J.
> Null bytes are used to terminate list and table in DWARF debug info. This
> patch displays null bytes in DWARF debug info so that one can tell if
> DWARF debug info is properly terminated.
Patch approved.
Cheers
Nick
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2012-08-02 8:41 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2012-07-31 21:05 PATCH: PR binutils/14420: readelf fails to display null bytes in DWARF info H.J. Lu
2012-08-02 8:41 ` nick clifton
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).