* dwarf2read.c (dwarf_decode_macros): New arg section_name.

All callers updated.
	(init_cu_die_reader): Verify the section is non-empty.
	(dwarf_decode_line_header): Don't dereference section->asection
	until we know the section is present.
This commit is contained in:
Doug Evans 2012-04-30 15:50:40 +00:00
parent 88ebb0a156
commit fceca5159f
2 changed files with 22 additions and 9 deletions

View File

@ -1,3 +1,11 @@
2012-04-30 Doug Evans <dje@google.com>
* dwarf2read.c (dwarf_decode_macros): New arg section_name.
All callers updated.
(init_cu_die_reader): Verify the section is non-empty.
(dwarf_decode_line_header): Don't dereference section->asection
until we know the section is present.
2012-04-29 Sergio Durigan Junior <sergiodj@redhat.com>
* tracepoint.c (start_tracing, stop_tracing): Checking for NULL

View File

@ -1317,7 +1317,7 @@ static struct die_info *dwarf_alloc_die (struct dwarf2_cu *, int);
static void dwarf_decode_macros (struct line_header *, unsigned int,
char *, bfd *, struct dwarf2_cu *,
struct dwarf2_section_info *,
int);
int, const char *);
static int attr_form_is_block (struct attribute *);
@ -1671,7 +1671,8 @@ zlib_decompress_section (struct objfile *objfile, asection *sectp,
#endif
}
/* A helper function that decides whether a section is empty. */
/* A helper function that decides whether a section is empty,
or not present. */
static int
dwarf2_section_empty_p (struct dwarf2_section_info *info)
@ -3588,7 +3589,7 @@ init_cu_die_reader (struct die_reader_specs *reader,
struct dwarf2_section_info *section,
struct dwo_file *dwo_file)
{
gdb_assert (section->readin);
gdb_assert (section->readin && section->buffer != NULL);
reader->abfd = section->asection->owner;
reader->cu = cu;
reader->dwo_file = dwo_file;
@ -6354,7 +6355,8 @@ read_file_scope (struct die_info *die, struct dwarf2_cu *cu)
dwarf_decode_macros (cu->line_header, DW_UNSND (attr),
comp_dir, abfd, cu,
&dwarf2_per_objfile->macro, 1);
&dwarf2_per_objfile->macro, 1,
".debug_macro");
}
else
{
@ -6365,7 +6367,8 @@ read_file_scope (struct die_info *die, struct dwarf2_cu *cu)
dwarf_decode_macros (cu->line_header, macro_offset,
comp_dir, abfd, cu,
&dwarf2_per_objfile->macinfo, 0);
&dwarf2_per_objfile->macinfo, 0,
".debug_macinfo");
}
}
@ -12317,7 +12320,6 @@ dwarf_decode_line_header (unsigned int offset, struct dwarf2_cu *cu)
section = &cu->dwo_unit->dwo_file->sections.line;
else
section = &dwarf2_per_objfile->line;
abfd = section->asection->owner;
dwarf2_read_section (dwarf2_per_objfile->objfile, section);
if (section->buffer == NULL)
@ -12329,6 +12331,10 @@ dwarf_decode_line_header (unsigned int offset, struct dwarf2_cu *cu)
return 0;
}
/* We can't do this until we know the section is non-empty.
Only then do we know we have such a section. */
abfd = section->asection->owner;
/* Make sure that at least there's room for the total_length field.
That could be 12 bytes long, but we're just going to fudge that. */
if (offset + 4 >= section->size)
@ -16894,7 +16900,7 @@ dwarf_decode_macros (struct line_header *lh, unsigned int offset,
char *comp_dir, bfd *abfd,
struct dwarf2_cu *cu,
struct dwarf2_section_info *section,
int section_is_gnu)
int section_is_gnu, const char *section_name)
{
struct objfile *objfile = dwarf2_per_objfile->objfile;
gdb_byte *mac_ptr, *mac_end;
@ -16909,8 +16915,7 @@ dwarf_decode_macros (struct line_header *lh, unsigned int offset,
dwarf2_read_section (objfile, section);
if (section->buffer == NULL)
{
complaint (&symfile_complaints, _("missing %s section"),
section->asection->name);
complaint (&symfile_complaints, _("missing %s section"), section_name);
return;
}