* dwarf2.c (find_line): Don't trust debug information after an

unparseable compilation unit.
This commit is contained in:
Nathan Sidwell 2008-02-16 10:51:38 +00:00
parent 819da74e19
commit d74e4b29eb
2 changed files with 40 additions and 34 deletions

View file

@ -1,3 +1,8 @@
2008-02-16 Nathan Sidwell <nathan@codesourcery.com>
* dwarf2.c (find_line): Don't trust debug information after an
unparseable compilation unit.
2008-02-15 Alan Modra <amodra@bigpond.net.au>
PR 5765

View file

@ -3068,6 +3068,10 @@ find_line (bfd *abfd,
{
each = parse_comp_unit (stash, length, info_ptr_unit,
offset_size);
if (!each)
/* The dwarf information is damaged, don't trust it any
more. */
break;
stash->info_ptr += length;
if ((bfd_vma) (stash->info_ptr - stash->sec_info_ptr)
@ -3077,8 +3081,6 @@ find_line (bfd *abfd,
stash->sec_info_ptr = stash->info_ptr;
}
if (each)
{
if (stash->all_comp_units)
stash->all_comp_units->prev_unit = each;
else
@ -3089,8 +3091,8 @@ find_line (bfd *abfd,
/* DW_AT_low_pc and DW_AT_high_pc are optional for
compilation units. If we don't have them (i.e.,
unit->high == 0), we need to consult the line info
table to see if a compilation unit contains the given
unit->high == 0), we need to consult the line info table
to see if a compilation unit contains the given
address. */
if (do_line)
found = (((symbol->flags & BSF_FUNCTION) == 0
@ -3112,7 +3114,6 @@ find_line (bfd *abfd,
goto done;
}
}
}
done:
if ((abfd->flags & (EXEC_P | DYNAMIC)) == 0)