diff options
author | Tom Tromey <tromey@redhat.com> | 2013-10-15 11:50:58 -0600 |
---|---|---|
committer | Tom Tromey <tromey@redhat.com> | 2014-02-26 12:11:18 -0700 |
commit | 5f6cac4085c95c5339b9549dc06d4f9184184fa6 (patch) | |
tree | e37ad03a89a177fcc90dca01ec5a38e73840a926 /gdb/minsyms.c | |
parent | 2750ef27997b6114da090a25a314396eaf85a87a (diff) | |
download | gdb-5f6cac4085c95c5339b9549dc06d4f9184184fa6.zip gdb-5f6cac4085c95c5339b9549dc06d4f9184184fa6.tar.gz gdb-5f6cac4085c95c5339b9549dc06d4f9184184fa6.tar.bz2 |
add short-circuit logic to elfread.c
If minimal symbols have already been read into a per-BFD object, then
a symbol reader can skip re-reading them. This changes the ELF reader
to do so.
We only skip the work if the file is ELF+DWARF. If it has stabs or
mdebug sections, then I think extra information is computed during the
minsym creation pass; and so we must still repeat it. Eventually even
this will go away, once all symbol types have switched to being
progspace-independent. In the meantime this has no negative effect --
it is just a missing optimization for a small set of users.
This change also required a somewhat non-obvious change to the OBJSTAT
accounting code. If a symbol reader skips re-reading minimal symbols,
then the corresponding OBJSTAT will not be updated. This leads to a
test failure in gdb.base/maint.exp.
To fix this, I've moved the needed stat field out of objfile and into
the per-BFD object.
2014-02-26 Tom Tromey <tromey@redhat.com>
* elfread.c (elf_read_minimal_symbols): Return early if
minimal symbols have already been read. Add "ei" parameter.
(elf_symfile_read): Call elf_read_minimal_symbols earlier.
* minsyms.c (prim_record_minimal_symbol_full): Update.
* objfiles.h (struct objstats) <n_minsyms>: Move...
(struct objfile_per_bfd_storage) <n_minsyms>: ... here.
* symmisc.c (print_objfile_statistics): Update.
Diffstat (limited to 'gdb/minsyms.c')
-rw-r--r-- | gdb/minsyms.c | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/gdb/minsyms.c b/gdb/minsyms.c index 1dc86eb..6f1fb35 100644 --- a/gdb/minsyms.c +++ b/gdb/minsyms.c @@ -977,9 +977,11 @@ prim_record_minimal_symbol_full (const char *name, int name_len, int copy_name, /* If we already read minimal symbols for this objfile, then don't ever allocate a new one. */ if (!objfile->per_bfd->minsyms_read) - msym_bunch_index++; + { + msym_bunch_index++; + objfile->per_bfd->n_minsyms++; + } msym_count++; - OBJSTAT (objfile, n_minsyms++); return msymbol; } |