Introduce DWARF abbrev cache
authorTom Tromey <tom@tromey.com>
Tue, 3 Nov 2020 00:35:51 +0000 (17:35 -0700)
committerTom Tromey <tom@tromey.com>
Tue, 12 Apr 2022 15:31:16 +0000 (09:31 -0600)
commit8c83177441405ace08650d9d36f76311009c2ed3
tree0657df0e955e78285d9f58dfe271bb7251d7bfc5
parentc600d77cb77d6eafc15ff6b1bb34c765e3b21bcc
Introduce DWARF abbrev cache

The replacement for the DWARF psymbol reader works in a somewhat
different way.  The current reader reads and stores all the DIEs that
might be interesting.  Then, if it is missing a DIE, it re-scans the
CU and reads them all.  This approach is used for both intra- and
inter-CU references.

I instrumented the partial DIE hash to see how frequently it was used:

    [  0] -> 1538165
    [  1] ->    4912
    [  2] ->   96102
    [  3] ->     175
    [  4] ->     244

That is, most DIEs are never used, and some are looked up twice -- but
this is just an artifact of the implementation of
partial_die_info::fixup, which may do two lookups.

Based on this, the new implementation doesn't try to store any DIEs,
but instead just re-scans them on demand.  In order to do this,
though, it is convenient to have a cache of DWARF abbrevs.  This way,
if a second CU is needed to resolve an inter-CU reference, the abbrevs
for that CU need only be computed a single time.
gdb/Makefile.in
gdb/dwarf2/abbrev-cache.c [new file with mode: 0644]
gdb/dwarf2/abbrev-cache.h [new file with mode: 0644]
gdb/dwarf2/abbrev.c
gdb/dwarf2/abbrev.h