[PATCH v5 2/4] [gdb] Add debuginfod_enabled_ask_p

Tom de Vries
2026-03-14T17:38:49Z

Factor out debuginfod_is_enabled_1 out of debuginfod_is_enabled, and use it to
implement debuginfod_enabled_ask_p.
---
gdb/debuginfod-support.c | 40 +++++++++++++++++++++++++++++++---------
gdb/debuginfod-support.h | 5 +++++
2 files changed, 36 insertions(+), 9 deletions(-)

diff --git a/gdb/debuginfod-support.c b/gdb/debuginfod-support.c
index ca4a5b1a7af..9751cd64319 100644
--- a/gdb/debuginfod-support.c
+++ b/gdb/debuginfod-support.c
@@ -224,20 +224,20 @@ get_debuginfod_client ()
return global_client;
}

-/* Check if debuginfod is enabled. If configured to do so, ask the user
- whether to enable debuginfod. */
+/* Check if debuginfod is enabled. If configured to do so and ALLOW_ASK, ask
+ the user whether to enable debuginfod. */

-static bool
-debuginfod_is_enabled ()
+static const char *
+debuginfod_is_enabled_1 (bool allow_ask)
{
const char *urls = skip_spaces (getenv (DEBUGINFOD_URLS_ENV_VAR));

if (urls == nullptr
|| *urls == '\0')
- return false;
+ return debuginfod_off;

- if (debuginfod_enabled != debuginfod_ask)
- return debuginfod_enabled == debuginfod_on;
+ if (debuginfod_enabled != debuginfod_ask || !allow_ask)
+ return debuginfod_enabled;

gdb_printf (_("\nThis GDB supports auto-downloading debuginfo " \
"from the following URLs:\n"));
@@ -282,8 +282,18 @@ debuginfod_is_enabled ()
debuginfod_enabled = debuginfod_on;
}

- gdb_assert (debuginfod_enabled != debuginfod_ask);
- return debuginfod_enabled == debuginfod_on;
+ return debuginfod_enabled;
+}
+
+/* Check if debuginfod is enabled. If configured to do so, ask the user
+ whether to enable debuginfod. */
+
+static bool
+debuginfod_is_enabled ()
+{
+ const char *res = debuginfod_is_enabled_1 (true);
+ gdb_assert (res != debuginfod_ask);
+ return res == debuginfod_on;
}

/* Print the result of the most recent attempted download. */
@@ -486,6 +496,18 @@ debuginfod_section_query (const unsigned char *build_id,

#endif

+/* See debuginfod-support.h. */
+
+bool
+debuginfod_enabled_ask_p ()
+{
+#if defined(HAVE_LIBDEBUGINFOD)
+ return debuginfod_is_enabled_1 (false) == debuginfod_ask;
+#else
+ return false;
+#endif
+}
+
/* Set callback for "set debuginfod enabled". */

static void
diff --git a/gdb/debuginfod-support.h b/gdb/debuginfod-support.h
index cc5bf331812..7e7b5965c3b 100644
--- a/gdb/debuginfod-support.h
+++ b/gdb/debuginfod-support.h
@@ -105,4 +105,9 @@ extern scoped_fd debuginfod_section_query (const unsigned char *build_id,
const char *section_name,
gdb::unique_xmalloc_ptr<char>
*destname);
+
+/* Check if debuginfod enabled is set to ask. */
+
+extern bool debuginfod_enabled_ask_p ();
+
#endif /* GDB_DEBUGINFOD_SUPPORT_H */
--
2.51.0