mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-11-23 18:14:13 +08:00
* 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
@ -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>
|
||||
|
||||
* 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 */
|
||||
|
||||
/* Read the line number table, all at once. */
|
||||
info->min_lineno_offset = 0;
|
||||
info->max_lineno_offset = 0;
|
||||
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);
|
||||
/* Only read line number information if we have symbols.
|
||||
|
||||
On Windows NT, some of the system's DLL's have sections with
|
||||
PointerToLinenumbers fields that are non-zero, but point at
|
||||
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. */
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user