* coffread.c (coff_symfile_read): Don't try to read the line
number table from disk if the image file doesn't have a symbol table; we'll never actually look at the info anyway, and Windows ships DLL's with bogus file offsets for the line number data.
This commit is contained in:
parent
56780f18c5
commit
ebeb39fe31
2 changed files with 32 additions and 7 deletions
|
@ -1,3 +1,10 @@
|
||||||
|
2002-08-22 Jim Blandy <jimb@redhat.com>
|
||||||
|
|
||||||
|
* coffread.c (coff_symfile_read): Don't try to read the line
|
||||||
|
number table from disk if the image file doesn't have a symbol
|
||||||
|
table; we'll never actually look at the info anyway, and Windows
|
||||||
|
ships DLL's with bogus file offsets for the line number data.
|
||||||
|
|
||||||
2002-08-21 Elena Zannoni <ezannoni@redhat.com>
|
2002-08-21 Elena Zannoni <ezannoni@redhat.com>
|
||||||
|
|
||||||
* rs6000-tdep.c (rs6000_gdbarch_init): Figure out whether we have
|
* rs6000-tdep.c (rs6000_gdbarch_init): Figure out whether we have
|
||||||
|
|
|
@ -593,16 +593,34 @@ coff_symfile_read (struct objfile *objfile, int mainline)
|
||||||
|
|
||||||
/* End of warning */
|
/* End of warning */
|
||||||
|
|
||||||
/* Read the line number table, all at once. */
|
|
||||||
info->min_lineno_offset = 0;
|
info->min_lineno_offset = 0;
|
||||||
info->max_lineno_offset = 0;
|
info->max_lineno_offset = 0;
|
||||||
bfd_map_over_sections (abfd, find_linenos, (void *) info);
|
|
||||||
|
|
||||||
make_cleanup (free_linetab_cleanup, 0 /*ignore*/);
|
/* Only read line number information if we have symbols.
|
||||||
val = init_lineno (abfd, info->min_lineno_offset,
|
|
||||||
info->max_lineno_offset - info->min_lineno_offset);
|
On Windows NT, some of the system's DLL's have sections with
|
||||||
if (val < 0)
|
PointerToLinenumbers fields that are non-zero, but point at
|
||||||
error ("\"%s\": error reading line numbers\n", name);
|
random places within the image file. (In the case I found,
|
||||||
|
KERNEL32.DLL's .text section has a line number info pointer that
|
||||||
|
points into the middle of the string `lib\\i386\kernel32.dll'.)
|
||||||
|
|
||||||
|
However, these DLL's also have no symbols. The line number
|
||||||
|
tables are meaningless without symbols. And in fact, GDB never
|
||||||
|
uses the line number information unless there are symbols. So we
|
||||||
|
can avoid spurious error messages (and maybe run a little
|
||||||
|
faster!) by not even reading the line number table unless we have
|
||||||
|
symbols. */
|
||||||
|
if (num_symbols > 0)
|
||||||
|
{
|
||||||
|
/* Read the line number table, all at once. */
|
||||||
|
bfd_map_over_sections (abfd, find_linenos, (void *) info);
|
||||||
|
|
||||||
|
make_cleanup (free_linetab_cleanup, 0 /*ignore*/);
|
||||||
|
val = init_lineno (abfd, info->min_lineno_offset,
|
||||||
|
info->max_lineno_offset - info->min_lineno_offset);
|
||||||
|
if (val < 0)
|
||||||
|
error ("\"%s\": error reading line numbers\n", name);
|
||||||
|
}
|
||||||
|
|
||||||
/* Now read the string table, all at once. */
|
/* Now read the string table, all at once. */
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue