diff options
-rw-r--r-- | gdb/NEWS | 4 | ||||
-rw-r--r-- | gdb/doc/gdb.texinfo | 18 | ||||
-rw-r--r-- | gdb/dwarf2/read.c | 27 |
3 files changed, 49 insertions, 0 deletions
@@ -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 diff --git a/gdb/doc/gdb.texinfo b/gdb/doc/gdb.texinfo index 4ada257..8e5922f 100644 --- a/gdb/doc/gdb.texinfo +++ b/gdb/doc/gdb.texinfo @@ -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 diff --git a/gdb/dwarf2/read.c b/gdb/dwarf2/read.c index eef0b06..507b152 100644 --- a/gdb/dwarf2/read.c +++ b/gdb/dwarf2/read.c @@ -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."), _("\ |