Add "maint set dwarf synchronous"

For testing, it's sometimes convenient to be able to request that
DWARF reading be done synchronously.  This patch adds a new "maint"
setting for this purpose.

Reviewed-By: Eli Zaretskii <eliz@gnu.org>
This commit is contained in:
Tom Tromey 2023-10-21 15:22:09 -06:00
parent a274da12ea
commit 9b595a2641
3 changed files with 49 additions and 0 deletions

View File

@ -9,6 +9,10 @@
* GDB index now contains information about the main function. This speeds up
startup when it is being used for some large binaries.
* On hosts where threading is available, DWARF reading is now done in
the background, resulting in faster startup. This can be controlled
using "maint set dwarf synchronous".
* Changed commands
disassemble

View File

@ -41833,6 +41833,24 @@ compilation units will be stored in memory longer, and more total
memory will be used. Setting it to zero disables caching, which will
slow down @value{GDBN} startup, but reduce memory consumption.
@kindex maint set dwarf synchronous
@kindex maint show dwarf synchronous
@item maint set dwarf synchronous
@itemx maint show dwarf synchronous
Control whether DWARF is read asynchronously.
On hosts where threading is available, the DWARF reader is mostly
asynchronous with respect to the rest of @value{GDBN}. That is, the
bulk of the reading is done in the background, and @value{GDBN} will
only pause for completion of this task when absolutely necessary.
When this setting is enabled, @value{GDBN} will instead wait for DWARF
processing to complete before continuing.
On hosts without threading, or where worker threads have been disabled
at runtime, this setting has no effect, as DWARF reading is always
done on the main thread, and is therefore always synchronous.
@kindex maint set dwarf unwinders
@kindex maint show dwarf unwinders
@item maint set dwarf unwinders

View File

@ -736,6 +736,18 @@ show_dwarf_max_cache_age (struct ui_file *file, int from_tty,
"DWARF compilation units is %s.\n"),
value);
}
/* When true, wait for DWARF reading to be complete. */
static bool dwarf_synchronous = false;
/* "Show" callback for "maint set dwarf synchronous". */
static void
show_dwarf_synchronous (struct ui_file *file, int from_tty,
struct cmd_list_element *c, const char *value)
{
gdb_printf (file, _("Whether DWARF reading is synchronous is %s.\n"),
value);
}
/* local function prototypes */
@ -21938,6 +21950,21 @@ caching, which can slow down startup."),
&set_dwarf_cmdlist,
&show_dwarf_cmdlist);
add_setshow_boolean_cmd ("synchronous", class_obscure,
&dwarf_synchronous, _("\
Set whether DWARF is read synchronously."), _("\
Show whether DWARF is read synchronously."), _("\
By default, DWARF information is read in worker threads,\n\
and gdb will not generally wait for the reading to complete\n\
before continuing with other work, for example presenting a\n\
prompt to the user.\n\
Enabling this setting will cause the DWARF reader to always wait\n\
for debug info processing to be finished before gdb can proceed."),
nullptr,
show_dwarf_synchronous,
&set_dwarf_cmdlist,
&show_dwarf_cmdlist);
add_setshow_zuinteger_cmd ("dwarf-read", no_class, &dwarf_read_debug, _("\
Set debugging of the DWARF reader."), _("\
Show debugging of the DWARF reader."), _("\