aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gdb/debuginfod-support.c314
-rw-r--r--gdb/doc/gdb.texinfo27
-rw-r--r--gdb/testsuite/gdb.debuginfod/fetch_src_and_symbols.exp4
3 files changed, 142 insertions, 203 deletions
diff --git a/gdb/debuginfod-support.c b/gdb/debuginfod-support.c
index a126977..2e1837d 100644
--- a/gdb/debuginfod-support.c
+++ b/gdb/debuginfod-support.c
@@ -32,8 +32,22 @@ static const char debuginfod_on[] = "on";
static const char debuginfod_off[] = "off";
static const char debuginfod_ask[] = "ask";
-static const char *debuginfod_enable = debuginfod_ask;
-static unsigned debuginfod_verbose = 1;
+static const char *debuginfod_enabled_enum[] =
+{
+ debuginfod_on,
+ debuginfod_off,
+ debuginfod_ask,
+ nullptr
+};
+
+static const char *debuginfod_enabled =
+#if defined(HAVE_LIBDEBUGINFOD)
+ debuginfod_ask;
+#else
+ debuginfod_off;
+#endif
+
+static unsigned int debuginfod_verbose = 1;
#ifndef HAVE_LIBDEBUGINFOD
scoped_fd
@@ -56,70 +70,6 @@ debuginfod_debuginfo_query (const unsigned char *build_id,
#define NO_IMPL _("Support for debuginfod is not compiled into GDB.")
-/* Stub set/show commands that indicate debuginfod is not supported. */
-
-static void
-set_debuginfod_on_command (const char *args, int from_tty)
-{
- error (NO_IMPL);
- debuginfod_enable = debuginfod_off;
-}
-
-static void
-set_debuginfod_off_command (const char *args, int from_tty)
-{
- error (NO_IMPL);
- debuginfod_enable = debuginfod_off;
-}
-
-static void
-set_debuginfod_ask_command (const char *args, int from_tty)
-{
- error (NO_IMPL);
- debuginfod_enable = debuginfod_off;
-}
-
-static void
-show_debuginfod_status_command (const char *args, int from_tty)
-{
- error (NO_IMPL);
-}
-
-static void
-set_debuginfod_urls_command (const std::string& urls)
-{
- error (NO_IMPL);
-}
-
-static const std::string&
-get_debuginfod_urls_command ()
-{
- static std::string empty;
- return empty;
-}
-
-static void
-show_debuginfod_urls_command (struct ui_file *file, int from_tty,
- struct cmd_list_element *cmd, const char *value)
-{
- error (NO_IMPL);
-}
-
-static void
-set_debuginfod_verbose_command (const char *args, int from_tty,
- struct cmd_list_element *c)
-{
- error (NO_IMPL);
- debuginfod_verbose = 0;
-}
-
-static void
-show_debuginfod_verbose_command (struct ui_file *file, int from_tty,
- struct cmd_list_element *cmd,
- const char *value)
-{
- error (NO_IMPL);
-}
#else
#include <elfutils/debuginfod.h>
@@ -147,96 +97,6 @@ struct debuginfod_client_deleter
using debuginfod_client_up
= std::unique_ptr<debuginfod_client, debuginfod_client_deleter>;
-/* Enable debuginfod. */
-
-static void
-set_debuginfod_on_command (const char *args, int from_tty)
-{
- debuginfod_enable = debuginfod_on;
-}
-
-/* Disable debuginfod. */
-
-static void
-set_debuginfod_off_command (const char *args, int from_tty)
-{
- debuginfod_enable = debuginfod_off;
-}
-
-/* Before next query, ask user whether to enable debuginfod. */
-
-static void
-set_debuginfod_ask_command (const char *args, int from_tty)
-{
- debuginfod_enable = debuginfod_ask;
-}
-
-/* Show whether debuginfod is enabled. */
-
-static void
-show_debuginfod_status_command (const char *args, int from_tty)
-{
- printf_unfiltered (_("Debuginfod functionality is currently set to " \
- "\"%s\".\n"), debuginfod_enable);
-}
-
-/* Set the URLs that debuginfod will query. */
-
-static void
-set_debuginfod_urls_command (const std::string& urls)
-{
- if (setenv ("DEBUGINFOD_URLS", urls.c_str (), 1) != 0)
- warning (_("Unable to set debuginfod URLs: %s"), safe_strerror (errno));
-}
-
-/* Get current debuginfod URLs. */
-
-static const std::string&
-get_debuginfod_urls_command ()
-{
- static std::string urls;
- const char *envvar = getenv (DEBUGINFOD_URLS_ENV_VAR);
-
- if (envvar != nullptr)
- urls = envvar;
- else
- urls.clear ();
-
- return urls;
-}
-
-/* Show the URLs that debuginfod will query. */
-
-static void
-show_debuginfod_urls_command (struct ui_file *file, int from_tty,
- struct cmd_list_element *cmd, const char *value)
-{
- if (value == nullptr || value[0] == '\0')
- fprintf_unfiltered (file, _("Debuginfod URLs have not been set.\n"));
- else
- fprintf_filtered (file, _("Debuginfod URLs are currently set to:\n%s\n"),
- value);
-}
-
-/* No-op setter used for compatibility when gdb is built without debuginfod. */
-
-static void
-set_debuginfod_verbose_command (const char *args, int from_tty,
- struct cmd_list_element *c)
-{
- return;
-}
-
-/* Show verbosity. */
-
-static void
-show_debuginfod_verbose_command (struct ui_file *file, int from_tty,
- struct cmd_list_element *cmd, const char *value)
-{
- fprintf_filtered (file, _("Debuginfod verbose output is set to %s.\n"),
- value);
-}
-
static int
progressfn (debuginfod_client *c, long cur, long total)
{
@@ -293,15 +153,15 @@ get_debuginfod_client ()
whether to enable debuginfod. */
static bool
-debuginfod_enabled ()
+debuginfod_is_enabled ()
{
const char *urls = getenv (DEBUGINFOD_URLS_ENV_VAR);
if (urls == nullptr || urls[0] == '\0'
- || debuginfod_enable == debuginfod_off)
+ || debuginfod_enabled == debuginfod_off)
return false;
- if (debuginfod_enable == debuginfod_ask)
+ if (debuginfod_enabled == debuginfod_ask)
{
int resp = nquery (_("\nThis GDB supports auto-downloading debuginfo " \
"from the following URLs:\n%s\nEnable debuginfod " \
@@ -310,16 +170,16 @@ debuginfod_enabled ()
if (!resp)
{
printf_filtered (_("Debuginfod has been disabled.\nTo make this " \
- "setting permanent, add \'set debuginfod off\' " \
- "to .gdbinit.\n"));
- debuginfod_enable = debuginfod_off;
+ "setting permanent, add \'set debuginfod " \
+ "enabled off\' to .gdbinit.\n"));
+ debuginfod_enabled = debuginfod_off;
return false;
}
printf_filtered (_("Debuginfod has been enabled.\nTo make this " \
- "setting permanent, add \'set debuginfod on\' " \
- "to .gdbinit.\n"));
- debuginfod_enable = debuginfod_on;
+ "setting permanent, add \'set debuginfod enabled " \
+ "on\' to .gdbinit.\n"));
+ debuginfod_enabled = debuginfod_on;
}
return true;
@@ -333,7 +193,7 @@ debuginfod_source_query (const unsigned char *build_id,
const char *srcpath,
gdb::unique_xmalloc_ptr<char> *destname)
{
- if (!debuginfod_enabled ())
+ if (!debuginfod_is_enabled ())
return scoped_fd (-ENOSYS);
debuginfod_client *c = get_debuginfod_client ();
@@ -370,7 +230,7 @@ debuginfod_debuginfo_query (const unsigned char *build_id,
const char *filename,
gdb::unique_xmalloc_ptr<char> *destname)
{
- if (!debuginfod_enabled ())
+ if (!debuginfod_is_enabled ())
return scoped_fd (-ENOSYS);
debuginfod_client *c = get_debuginfod_client ();
@@ -398,6 +258,90 @@ debuginfod_debuginfo_query (const unsigned char *build_id,
}
#endif
+/* Set callback for "set debuginfod enabled". */
+
+static void
+set_debuginfod_enabled (const char *value)
+{
+#if defined(HAVE_LIBDEBUGINFOD)
+ debuginfod_enabled = value;
+#else
+ error (NO_IMPL);
+#endif
+}
+
+/* Get callback for "set debuginfod enabled". */
+
+static const char *
+get_debuginfod_enabled ()
+{
+ return debuginfod_enabled;
+}
+
+/* Show callback for "set debuginfod enabled". */
+
+static void
+show_debuginfod_enabled (ui_file *file, int from_tty, cmd_list_element *cmd,
+ const char *value)
+{
+ printf_unfiltered (_("Debuginfod functionality is currently set to "
+ "\"%s\".\n"), debuginfod_enabled);
+}
+
+/* Set callback for "set debuginfod urls". */
+
+static void
+set_debuginfod_urls (const std::string &urls)
+{
+#if defined(HAVE_LIBDEBUGINFOD)
+ if (setenv (DEBUGINFOD_URLS_ENV_VAR, urls.c_str (), 1) != 0)
+ warning (_("Unable to set debuginfod URLs: %s"), safe_strerror (errno));
+#else
+ error (NO_IMPL);
+#endif
+}
+
+/* Get callback for "set debuginfod urls". */
+
+static const std::string&
+get_debuginfod_urls ()
+{
+ static std::string urls;
+#if defined(HAVE_LIBDEBUGINFOD)
+ const char *envvar = getenv (DEBUGINFOD_URLS_ENV_VAR);
+
+ if (envvar != nullptr)
+ urls = envvar;
+ else
+ urls.clear ();
+#endif
+
+ return urls;
+}
+
+/* Show callback for "set debuginfod urls". */
+
+static void
+show_debuginfod_urls (ui_file *file, int from_tty, cmd_list_element *cmd,
+ const char *value)
+{
+ if (value[0] == '\0')
+ fprintf_unfiltered (file, _("Debuginfod URLs have not been set.\n"));
+ else
+ fprintf_filtered (file, _("Debuginfod URLs are currently set to:\n%s\n"),
+ value);
+}
+
+/* Show callback for "set debuginfod verbose". */
+
+static void
+show_debuginfod_verbose_command (ui_file *file, int from_tty,
+ cmd_list_element *cmd, const char *value)
+{
+ fprintf_filtered (file, _("Debuginfod verbose output is set to %s.\n"),
+ value);
+}
+
/* Register debuginfod commands. */
void _initialize_debuginfod ();
@@ -412,23 +356,17 @@ _initialize_debuginfod ()
&show_debuginfod_prefix_list,
&setlist, &showlist);
- /* set debuginfod on */
- add_cmd ("on", class_run, set_debuginfod_on_command,
- _("Enable debuginfod."), &set_debuginfod_prefix_list);
-
- /* set debuginfod off */
- add_cmd ("off", class_run, set_debuginfod_off_command,
- _("Disable debuginfod."), &set_debuginfod_prefix_list);
-
- /* set debuginfod ask */
- add_cmd ("ask", class_run, set_debuginfod_ask_command, _("\
-Ask the user whether to enable debuginfod before performing the next query."),
- &set_debuginfod_prefix_list);
-
- /* show debuginfod status */
- add_cmd ("status", class_run, show_debuginfod_status_command,
- _("Show whether debuginfod is set to \"on\", \"off\" or \"ask\"."),
- &show_debuginfod_prefix_list);
+ add_setshow_enum_cmd ("enabled", class_run, debuginfod_enabled_enum,
+ _("Set whether to use debuginfod."),
+ _("Show whether to use debuginfod."),
+ _("\
+When on, enable the use of debuginfod to download missing debug info and\n\
+source files."),
+ set_debuginfod_enabled,
+ get_debuginfod_enabled,
+ show_debuginfod_enabled,
+ &set_debuginfod_prefix_list,
+ &show_debuginfod_prefix_list);
/* set/show debuginfod urls */
add_setshow_string_noescape_cmd ("urls", class_run, _("\
@@ -437,9 +375,9 @@ Show the list of debuginfod server URLs."), _("\
Manage the space-separated list of debuginfod server URLs that GDB will query \
when missing debuginfo, executables or source files.\nThe default value is \
copied from the DEBUGINFOD_URLS environment variable."),
- set_debuginfod_urls_command,
- get_debuginfod_urls_command,
- show_debuginfod_urls_command,
+ set_debuginfod_urls,
+ get_debuginfod_urls,
+ show_debuginfod_urls,
&set_debuginfod_prefix_list,
&show_debuginfod_prefix_list);
@@ -450,7 +388,7 @@ Set verbosity of debuginfod output."), _("\
Show debuginfod debugging."), _("\
When set to a non-zero value, display verbose output for each debuginfod \
query.\nTo disable, set to zero. Verbose output is displayed by default."),
- set_debuginfod_verbose_command,
+ nullptr,
show_debuginfod_verbose_command,
&set_debuginfod_prefix_list,
&show_debuginfod_prefix_list);
diff --git a/gdb/doc/gdb.texinfo b/gdb/doc/gdb.texinfo
index fc8e5bd..f6d221f 100644
--- a/gdb/doc/gdb.texinfo
+++ b/gdb/doc/gdb.texinfo
@@ -47114,27 +47114,28 @@ regarding @code{debuginfod}.
@value{GDBN} provides the following commands for configuring @code{debuginfod}.
@table @code
-@kindex set debuginfod
-@anchor{set debuginfod}
-@item set debuginfod
-@itemx set debuginfod on
+@kindex set debuginfod enabled
+@anchor{set debuginfod enabled}
+@item set debuginfod enabled
+@itemx set debuginfod enabled on
@cindex enable debuginfod
@value{GDBN} will attempt to query @code{debuginfod} servers when missing debug
info or source files.
-@item set debuginfod off
+@item set debuginfod enabled off
@value{GDBN} will not attempt to query @code{debuginfod} servers when missing
-debug info or source files. By default, @code{debuginfod} is set to @code{off}
-for non-interactive sessions.
+debug info or source files. By default, @code{debuginfod enabled} is set to
+@code{off} for non-interactive sessions.
-@item set debuginfod ask
+@item set debuginfod enabled ask
@value{GDBN} will prompt the user to enable or disable @code{debuginfod} before
-attempting to perform the next query. By default, @code{debuginfod} is set to
-@code{ask} for interactive sessions.
+attempting to perform the next query. By default, @code{debuginfod enabled}
+is set to @code{ask} for interactive sessions.
-@kindex show debuginfod status
-@item show debuginfod status
-Show whether @code{debuginfod} is set to @code{on}, @code{off} or @code{ask}.
+@kindex show debuginfod enabled
+@item show debuginfod enabled
+Display whether @code{debuginfod enabled} is set to @code{on}, @code{off} or
+@code{ask}.
@kindex set debuginfod urls
@cindex configure debuginfod URLs
diff --git a/gdb/testsuite/gdb.debuginfod/fetch_src_and_symbols.exp b/gdb/testsuite/gdb.debuginfod/fetch_src_and_symbols.exp
index 31e9e4a..757bd20 100644
--- a/gdb/testsuite/gdb.debuginfod/fetch_src_and_symbols.exp
+++ b/gdb/testsuite/gdb.debuginfod/fetch_src_and_symbols.exp
@@ -246,7 +246,7 @@ proc local_url { } {
clean_restart
gdb_test "file $binfile" ".*No debugging symbols.*" \
"file [file tail $binfile] cmd"
- gdb_test_no_output "set debuginfod off"
+ gdb_test_no_output "set debuginfod enabled off"
gdb_test_no_output "set debuginfod urls http://127.0.0.1:$port"
# gdb shouldn't find the debuginfo since debuginfod has been disabled
@@ -254,7 +254,7 @@ proc local_url { } {
"file [file tail $binfile] cmd off"
# Enable debuginfod and fetch the debuginfo
- gdb_test_no_output "set debuginfod on"
+ gdb_test_no_output "set debuginfod enabled on"
gdb_test "file $binfile" ".*Reading symbols from.*debuginfo.*" \
"file [file tail $binfile] cmd on"
}