aboutsummaryrefslogtreecommitdiff
path: root/binutils/dwarf.c
diff options
context:
space:
mode:
Diffstat (limited to 'binutils/dwarf.c')
-rw-r--r--binutils/dwarf.c23
1 files changed, 19 insertions, 4 deletions
diff --git a/binutils/dwarf.c b/binutils/dwarf.c
index 6e93906..d8050fa 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,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;