[v2,09/18] Add "maint set dwarf synchronous"

Message ID 20231112-t-bg-dwarf-reading-v2-9-70fb170012ba@tromey.com
State New
Headers
Series Index DWARf in the background |

Commit Message

Tom Tromey Nov. 12, 2023, 8:25 p.m. UTC
  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.
---
 gdb/NEWS            |  3 +++
 gdb/doc/gdb.texinfo | 14 ++++++++++++++
 gdb/dwarf2/read.c   | 23 +++++++++++++++++++++++
 3 files changed, 40 insertions(+)
  

Comments

Eli Zaretskii Nov. 13, 2023, 1:43 p.m. UTC | #1
> From: Tom Tromey <tom@tromey.com>
> Date: Sun, 12 Nov 2023 13:25:46 -0700
> 
> 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.
> ---
>  gdb/NEWS            |  3 +++
>  gdb/doc/gdb.texinfo | 14 ++++++++++++++
>  gdb/dwarf2/read.c   | 23 +++++++++++++++++++++++
>  3 files changed, 40 insertions(+)

Seems like my review comments in

  https://sourceware.org/pipermail/gdb-patches/2023-October/203615.html

were overlooked or something?
  

Patch

diff --git a/gdb/NEWS b/gdb/NEWS
index 3851114a9f7..ef87509c48b 100644
--- a/gdb/NEWS
+++ b/gdb/NEWS
@@ -9,6 +9,9 @@ 
 * GDB index now contains information about the main function.  This speeds up
   startup when it is being used for some large binaries.
 
+* 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 2cd565ed5b4..36a83e94528 100644
--- a/gdb/doc/gdb.texinfo
+++ b/gdb/doc/gdb.texinfo
@@ -41700,6 +41700,20 @@  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.
+
+By default, 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.
+
 @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 58d13e880fd..7669af36b37 100644
--- a/gdb/dwarf2/read.c
+++ b/gdb/dwarf2/read.c
@@ -741,6 +741,16 @@  show_dwarf_max_cache_age (struct ui_file *file, int from_tty,
 		      "DWARF compilation units is %s.\n"),
 	      value);
 }
+
+/* Wait for DWARF reading to be complete.  */
+static bool dwarf_synchronous = false;
+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 */
 
@@ -21941,6 +21951,19 @@  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 DWARF is read synchronously."), _("\
+By default, DWARF information is read in worker threads,\n\
+and gdb will not generally wait for this process to complete.\n\
+Enabling this setting will cause the DWARF reader to always wait\n\
+for completion 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."), _("\