add short-circuit logic to elfread.c
authorTom Tromey <tromey@redhat.com>
Tue, 15 Oct 2013 17:50:58 +0000 (11:50 -0600)
committerTom Tromey <tromey@redhat.com>
Wed, 26 Feb 2014 19:11:18 +0000 (12:11 -0700)
commit5f6cac4085c95c5339b9549dc06d4f9184184fa6
treee37ad03a89a177fcc90dca01ec5a38e73840a926
parent2750ef27997b6114da090a25a314396eaf85a87a
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.
gdb/ChangeLog
gdb/elfread.c
gdb/minsyms.c
gdb/objfiles.h
gdb/symmisc.c