Write the DWARF index in the background
authorTom Tromey <tromey@adacore.com>
Wed, 13 Apr 2022 17:25:53 +0000 (11:25 -0600)
committerTom Tromey <tromey@adacore.com>
Fri, 24 Feb 2023 18:46:53 +0000 (11:46 -0700)
commit52e5e48e533dd91686d04a200a11516e90b4cab7
treed9e6d4db5256c655b5bb723d4dc20c880621315d
parent542a33e348a58e4a9ede20ce294b90d917e1e60c
Write the DWARF index in the background

The new DWARF cooked indexer interacts poorly with the DWARF index
cache.  In particular, the cache will require gdb to wait for the
cooked index to be finalized.  As this happens in the foreground, it
means that users with this setting enabled will see a slowdown.

This patch changes gdb to write the cache entry a worker thread.  (As
usual, in the absence of threads, this work is simply done immediately
in the main thread.)

Some care is taken to ensure that this can't crash, and that gdb will
not exit before the task is complete.

To avoid use-after-free problems, the DWARF per-BFD object explicitly
waits for the index cache task to complete.

To avoid gdb exiting early, an exit observer is used to wait for all
such pending tasks.

In normal use, neither of these waits will be very visible.  For users
using "-batch" to pre-generate the index, though, it would be.
However I don't think there is much to be done about this, as it was
the status quo ante.
gdb/dwarf2/cooked-index.c
gdb/dwarf2/cooked-index.h
gdb/dwarf2/mapped-index.h
gdb/dwarf2/read.c