Blame SOURCES/gdb-rhbz202487-rework-set-debuginfod.patch

ed07ac
From FEDORA_PATCHES Mon Sep 17 00:00:00 2001
ed07ac
From: =?UTF-8?q?Alexandra=20H=C3=A1jkov=C3=A1?= <ahajkova@redhat.com>
ed07ac
Date: Tue, 11 Jan 2022 12:46:05 +0100
ed07ac
Subject: gdb-rhbz202487-rework-set-debuginfod.patch
ed07ac
ed07ac
;;Backport upstream commit from  Simon Marchi
ed07ac
;;333f35b6315 gdb: pass/return setting setter/getter
ed07ac
;;scalar values by value
ed07ac
ed07ac
gdb: rework "set debuginfod" commands
ed07ac
ed07ac
As discussed here [1], do some re-work in the "set debuginfod commands".
ed07ac
ed07ac
First, use "set debuginfod enabled on/off/ask" instead of "set
ed07ac
debuginfod on/off/ask".  This is more MI-friendly, and it gives an
ed07ac
output that makes more sense in "info set", for example.
ed07ac
ed07ac
Then, make the show commands not call "error" when debuginfod support is
ed07ac
not compiled in.  This makes the commands "show" and "show debuginfod"
ed07ac
stop early, breaking gdb.base/default.exp:
ed07ac
ed07ac
    Running /home/smarchi/src/binutils-gdb/gdb/testsuite/gdb.base/default.exp ...
ed07ac
    FAIL: gdb.base/default.exp: info set
ed07ac
    FAIL: gdb.base/default.exp: show
ed07ac
ed07ac
 - Make the "debuginfod enabled" setting default to "off" when debuginfod
ed07ac
   support is not compiled in, and "ask" otherwise.
ed07ac
 - Make the setter of "debuginfod enabled" error out when debuginfod
ed07ac
   support is not compiled in, so that "debuginfod enabled" will always
ed07ac
   remain "off" in that case.
ed07ac
 - Make the setter of "debuginfod verbose" work in any case.  I don't
ed07ac
   see the harm in letting the user change that setting, since the user will
ed07ac
   hit an error if they try to enable the use of debuginfod.
ed07ac
 - I would do the same for the "debuginfod urls" setter, but because
ed07ac
   this one needs to see the DEBUGINFOD_URLS_ENV_VAR macro, provided by
ed07ac
   libdebuginfod, I made that one error out as well if debuginfod
ed07ac
   support is not compiled it (otherwise, I would have left it like
ed07ac
   "debuginfod verbose".  Alternatively, we could hard-code
ed07ac
   "DEBUGINFOD_URLS" in the code (in fact, it was prior to this patch,
ed07ac
   but I think it was an oversight, as other spots use
ed07ac
   DEBUGINFOD_URLS_ENV_VAR), or use a dummy string to store the setting,
ed07ac
   but I don't really see the value in that.
ed07ac
ed07ac
Rename debuginfod_enable to debuginfod_enabled, just so it matches the
ed07ac
setting name.
ed07ac
ed07ac
[1] https://sourceware.org/pipermail/gdb-patches/2021-October/182937.html
ed07ac
ed07ac
Change-Id: I45fdb2993f668226a5639228951362b7800f09d5
ed07ac
Co-Authored-By: Aaron Merey <amerey@redhat.com>
ed07ac
ed07ac
diff --git a/gdb/debuginfod-support.c b/gdb/debuginfod-support.c
ed07ac
--- a/gdb/debuginfod-support.c
ed07ac
+++ b/gdb/debuginfod-support.c
ed07ac
@@ -32,8 +32,22 @@ static const char debuginfod_on[] = "on";
ed07ac
 static const char debuginfod_off[] = "off";
ed07ac
 static const char debuginfod_ask[] = "ask";
ed07ac
 
ed07ac
-static const char *debuginfod_enable = debuginfod_ask;
ed07ac
-static unsigned debuginfod_verbose = 1;
ed07ac
+static const char *debuginfod_enabled_enum[] =
ed07ac
+{
ed07ac
+  debuginfod_on,
ed07ac
+  debuginfod_off,
ed07ac
+  debuginfod_ask,
ed07ac
+  nullptr
ed07ac
+};
ed07ac
+
ed07ac
+static const char *debuginfod_enabled =
ed07ac
+#if defined(HAVE_LIBDEBUGINFOD)
ed07ac
+  debuginfod_ask;
ed07ac
+#else
ed07ac
+  debuginfod_off;
ed07ac
+#endif
ed07ac
+
ed07ac
+static unsigned int debuginfod_verbose = 1;
ed07ac
 
ed07ac
 /* This is never actually used.  URLs are always pulled from the
ed07ac
    environment.  */
ed07ac
@@ -60,64 +74,6 @@ debuginfod_debuginfo_query (const unsigned char *build_id,
ed07ac
 
ed07ac
 #define NO_IMPL _("Support for debuginfod is not compiled into GDB.")
ed07ac
 
ed07ac
-/* Stub set/show commands that indicate debuginfod is not supported.  */
ed07ac
-
ed07ac
-static void
ed07ac
-set_debuginfod_on_command (const char *args, int from_tty)
ed07ac
-{
ed07ac
-  error (NO_IMPL);
ed07ac
-  debuginfod_enable = debuginfod_off;
ed07ac
-}
ed07ac
-
ed07ac
-static void
ed07ac
-set_debuginfod_off_command (const char *args, int from_tty)
ed07ac
-{
ed07ac
-  error (NO_IMPL);
ed07ac
-  debuginfod_enable = debuginfod_off;
ed07ac
-}
ed07ac
-
ed07ac
-static void
ed07ac
-set_debuginfod_ask_command (const char *args, int from_tty)
ed07ac
-{
ed07ac
-  error (NO_IMPL);
ed07ac
-  debuginfod_enable = debuginfod_off;
ed07ac
-}
ed07ac
-
ed07ac
-static void
ed07ac
-show_debuginfod_status_command (const char *args, int from_tty)
ed07ac
-{
ed07ac
-  error (NO_IMPL);
ed07ac
-}
ed07ac
-
ed07ac
-static void
ed07ac
-set_debuginfod_urls_command (const char *ignore, int from_tty,
ed07ac
-                             struct cmd_list_element *c)
ed07ac
-{
ed07ac
-  error (NO_IMPL);
ed07ac
-}
ed07ac
-
ed07ac
-static void
ed07ac
-show_debuginfod_urls_command (struct ui_file *file, int from_tty,
ed07ac
-			      struct cmd_list_element *cmd, const char *value)
ed07ac
-{
ed07ac
-  error (NO_IMPL);
ed07ac
-}
ed07ac
-
ed07ac
-static void
ed07ac
-set_debuginfod_verbose_command (const char *args, int from_tty,
ed07ac
-				struct cmd_list_element *c)
ed07ac
-{
ed07ac
-  error (NO_IMPL);
ed07ac
-  debuginfod_verbose = 0;
ed07ac
-}
ed07ac
-
ed07ac
-static void
ed07ac
-show_debuginfod_verbose_command (struct ui_file *file, int from_tty,
ed07ac
-				 struct cmd_list_element *cmd,
ed07ac
-				 const char *value)
ed07ac
-{
ed07ac
-  error (NO_IMPL);
ed07ac
-}
ed07ac
 #else
ed07ac
 #include <elfutils/debuginfod.h>
ed07ac
 
ed07ac
@@ -145,82 +101,6 @@ struct debuginfod_client_deleter
ed07ac
 using debuginfod_client_up
ed07ac
   = std::unique_ptr<debuginfod_client, debuginfod_client_deleter>;
ed07ac
 
ed07ac
-/* Enable debuginfod.  */
ed07ac
-
ed07ac
-static void
ed07ac
-set_debuginfod_on_command (const char *args, int from_tty)
ed07ac
-{
ed07ac
-  debuginfod_enable = debuginfod_on;
ed07ac
-}
ed07ac
-
ed07ac
-/* Disable debuginfod.  */
ed07ac
-
ed07ac
-static void
ed07ac
-set_debuginfod_off_command (const char *args, int from_tty)
ed07ac
-{
ed07ac
-  debuginfod_enable = debuginfod_off;
ed07ac
-}
ed07ac
-
ed07ac
-/* Before next query, ask user whether to enable debuginfod.  */
ed07ac
-
ed07ac
-static void
ed07ac
-set_debuginfod_ask_command (const char *args, int from_tty)
ed07ac
-{
ed07ac
-  debuginfod_enable = debuginfod_ask;
ed07ac
-}
ed07ac
-
ed07ac
-/* Show whether debuginfod is enabled.  */
ed07ac
-
ed07ac
-static void
ed07ac
-show_debuginfod_status_command (const char *args, int from_tty)
ed07ac
-{
ed07ac
-  printf_unfiltered (_("Debuginfod functionality is currently set to " \
ed07ac
-		     "\"%s\".\n"), debuginfod_enable);
ed07ac
-}
ed07ac
-
ed07ac
-/* Set the URLs that debuginfod will query.  */
ed07ac
-
ed07ac
-static void
ed07ac
-set_debuginfod_urls_command (const char *ignore, int from_tty,
ed07ac
-                             struct cmd_list_element *c)
ed07ac
-{
ed07ac
-  gdb_assert (debuginfod_urls != nullptr);
ed07ac
-  if (setenv ("DEBUGINFOD_URLS", debuginfod_urls, 1) != 0)
ed07ac
-    warning (_("Unable to set debuginfod URLs: %s"), safe_strerror (errno));
ed07ac
-}
ed07ac
-
ed07ac
-/* Show the URLs that debuginfod will query.  */
ed07ac
-
ed07ac
-static void
ed07ac
-show_debuginfod_urls_command (struct ui_file *file, int from_tty,
ed07ac
-			      struct cmd_list_element *cmd, const char *value)
ed07ac
-{
ed07ac
-  if (value == nullptr || value[0] == '\0')
ed07ac
-    fprintf_unfiltered (file, _("Debuginfod URLs have not been set.\n"));
ed07ac
-  else
ed07ac
-    fprintf_filtered (file, _("Debuginfod URLs are currently set to:\n%s\n"),
ed07ac
-		      value);
ed07ac
-}
ed07ac
-
ed07ac
-/* No-op setter used for compatibility when gdb is built without debuginfod.  */
ed07ac
-
ed07ac
-static void
ed07ac
-set_debuginfod_verbose_command (const char *args, int from_tty,
ed07ac
-				struct cmd_list_element *c)
ed07ac
-{
ed07ac
-  return;
ed07ac
-}
ed07ac
-
ed07ac
-/* Show verbosity.  */
ed07ac
-
ed07ac
-static void
ed07ac
-show_debuginfod_verbose_command (struct ui_file *file, int from_tty,
ed07ac
-				 struct cmd_list_element *cmd, const char *value)
ed07ac
-{
ed07ac
-  fprintf_filtered (file, _("Debuginfod verbose output is set to %s.\n"),
ed07ac
-		    value);
ed07ac
-}
ed07ac
-
ed07ac
 static int
ed07ac
 progressfn (debuginfod_client *c, long cur, long total)
ed07ac
 {
ed07ac
@@ -277,15 +157,15 @@ get_debuginfod_client ()
ed07ac
    whether to enable debuginfod.  */
ed07ac
 
ed07ac
 static bool
ed07ac
-debuginfod_enabled ()
ed07ac
+debuginfod_is_enabled ()
ed07ac
 {
ed07ac
   const char *urls = getenv (DEBUGINFOD_URLS_ENV_VAR);
ed07ac
 
ed07ac
   if (urls == nullptr || urls[0] == '\0'
ed07ac
-      || debuginfod_enable == debuginfod_off)
ed07ac
+      || debuginfod_enabled == debuginfod_off)
ed07ac
     return false;
ed07ac
 
ed07ac
-  if (debuginfod_enable == debuginfod_ask)
ed07ac
+  if (debuginfod_enabled == debuginfod_ask)
ed07ac
     {
ed07ac
       int resp = nquery (_("\nThis GDB supports auto-downloading debuginfo " \
ed07ac
 			   "from the following URLs:\n%s\nEnable debuginfod " \
ed07ac
@@ -294,16 +174,16 @@ debuginfod_enabled ()
ed07ac
       if (!resp)
ed07ac
 	{
ed07ac
 	  printf_filtered (_("Debuginfod has been disabled.\nTo make this " \
ed07ac
-			     "setting permanent, add \'set debuginfod off\' " \
ed07ac
-			     "to .gdbinit.\n"));
ed07ac
-	  debuginfod_enable = debuginfod_off;
ed07ac
+			     "setting permanent, add \'set debuginfod " \
ed07ac
+			     "enabled off\' to .gdbinit.\n"));
ed07ac
+	  debuginfod_enabled = debuginfod_off;
ed07ac
 	  return false;
ed07ac
 	}
ed07ac
 
ed07ac
       printf_filtered (_("Debuginfod has been enabled.\nTo make this " \
ed07ac
-			 "setting permanent, add \'set debuginfod on\' " \
ed07ac
-			 "to .gdbinit.\n"));
ed07ac
-      debuginfod_enable = debuginfod_on;
ed07ac
+			 "setting permanent, add \'set debuginfod enabled " \
ed07ac
+			 "on\' to .gdbinit.\n"));
ed07ac
+      debuginfod_enabled = debuginfod_on;
ed07ac
     }
ed07ac
 
ed07ac
   return true;
ed07ac
@@ -317,7 +197,7 @@ debuginfod_source_query (const unsigned char *build_id,
ed07ac
 			 const char *srcpath,
ed07ac
 			 gdb::unique_xmalloc_ptr<char> *destname)
ed07ac
 {
ed07ac
-  if (!debuginfod_enabled ())
ed07ac
+  if (!debuginfod_is_enabled ())
ed07ac
     return scoped_fd (-ENOSYS);
ed07ac
 
ed07ac
   debuginfod_client *c = get_debuginfod_client ();
ed07ac
@@ -354,7 +234,7 @@ debuginfod_debuginfo_query (const unsigned char *build_id,
ed07ac
 			    const char *filename,
ed07ac
 			    gdb::unique_xmalloc_ptr<char> *destname)
ed07ac
 {
ed07ac
-  if (!debuginfod_enabled ())
ed07ac
+  if (!debuginfod_is_enabled ())
ed07ac
     return scoped_fd (-ENOSYS);
ed07ac
 
ed07ac
   debuginfod_client *c = get_debuginfod_client ();
ed07ac
@@ -382,6 +262,67 @@ debuginfod_debuginfo_query (const unsigned char *build_id,
ed07ac
 }
ed07ac
 #endif
ed07ac
 
ed07ac
+/* Set callback for "set debuginfod enabled".  */
ed07ac
+
ed07ac
+static void
ed07ac
+set_debuginfod_enabled (const char *args, int from_tty,
ed07ac
+                        struct cmd_list_element *c)
ed07ac
+{
ed07ac
+#if defined(HAVE_LIBDEBUGINFOD)
ed07ac
+  /* Value is already set.  */
ed07ac
+#else
ed07ac
+  error (NO_IMPL);
ed07ac
+#endif
ed07ac
+}
ed07ac
+
ed07ac
+/* Show callback for "set debuginfod enabled".  */
ed07ac
+
ed07ac
+static void
ed07ac
+show_debuginfod_enabled (ui_file *file, int from_tty, cmd_list_element *cmd,
ed07ac
+			 const char *value)
ed07ac
+{
ed07ac
+  printf_unfiltered (_("Debuginfod functionality is currently set to "
ed07ac
+		       "\"%s\".\n"), debuginfod_enabled);
ed07ac
+}
ed07ac
+
ed07ac
+/* Set callback for "set debuginfod urls".  */
ed07ac
+
ed07ac
+static void
ed07ac
+set_debuginfod_urls (const char *args, int from_tty,
ed07ac
+                     struct cmd_list_element *c)
ed07ac
+{
ed07ac
+#if defined(HAVE_LIBDEBUGINFOD)
ed07ac
+  gdb_assert (debuginfod_urls != nullptr);
ed07ac
+  if (setenv (DEBUGINFOD_URLS_ENV_VAR, debuginfod_urls, 1) != 0)
ed07ac
+    warning (_("Unable to set debuginfod URLs: %s"), safe_strerror (errno));
ed07ac
+#else
ed07ac
+  error (NO_IMPL);
ed07ac
+#endif
ed07ac
+}
ed07ac
+
ed07ac
+/* Show callback for "set debuginfod urls".  */
ed07ac
+
ed07ac
+static void
ed07ac
+show_debuginfod_urls (ui_file *file, int from_tty, cmd_list_element *cmd,
ed07ac
+		      const char *value)
ed07ac
+{
ed07ac
+  if (value[0] == '\0')
ed07ac
+    fprintf_unfiltered (file, _("Debuginfod URLs have not been set.\n"));
ed07ac
+  else
ed07ac
+    fprintf_filtered (file, _("Debuginfod URLs are currently set to:\n%s\n"),
ed07ac
+		      value);
ed07ac
+}
ed07ac
+
ed07ac
+/* Show callback for "set debuginfod verbose".  */
ed07ac
+
ed07ac
+static void
ed07ac
+show_debuginfod_verbose_command (ui_file *file, int from_tty,
ed07ac
+				 cmd_list_element *cmd, const char *value)
ed07ac
+{
ed07ac
+  fprintf_filtered (file, _("Debuginfod verbose output is set to %s.\n"),
ed07ac
+		    value);
ed07ac
+}
ed07ac
+
ed07ac
 /* Register debuginfod commands.  */
ed07ac
 
ed07ac
 void _initialize_debuginfod ();
ed07ac
@@ -397,23 +338,17 @@ _initialize_debuginfod ()
ed07ac
                        _("Show debuginfod option."),
ed07ac
                        &show_debuginfod_prefix_list, 0, &showlist);
ed07ac
 
ed07ac
-  /* set debuginfod on */
ed07ac
-  add_cmd ("on", class_run, set_debuginfod_on_command,
ed07ac
-	   _("Enable debuginfod."), &set_debuginfod_prefix_list);
ed07ac
-
ed07ac
-  /* set debuginfod off */
ed07ac
-  add_cmd ("off", class_run, set_debuginfod_off_command,
ed07ac
-	   _("Disable debuginfod."), &set_debuginfod_prefix_list);
ed07ac
-
ed07ac
-  /* set debuginfod ask */
ed07ac
-  add_cmd ("ask", class_run, set_debuginfod_ask_command, _("\
ed07ac
-Ask the user whether to enable debuginfod before performing the next query."),
ed07ac
-	   &set_debuginfod_prefix_list);
ed07ac
-
ed07ac
-  /* show debuginfod status */
ed07ac
-  add_cmd ("status", class_run, show_debuginfod_status_command,
ed07ac
-	   _("Show whether debuginfod is set to \"on\", \"off\" or \"ask\"."),
ed07ac
-	   &show_debuginfod_prefix_list);
ed07ac
+  add_setshow_enum_cmd ("enabled", class_run, debuginfod_enabled_enum,
ed07ac
+                        &debuginfod_enabled,
ed07ac
+			_("Set whether to use debuginfod."),
ed07ac
+			_("Show whether to use debuginfod."),
ed07ac
+			_("\
ed07ac
+When on, enable the use of debuginfod to download missing debug info and\n\
ed07ac
+source files."),
ed07ac
+			set_debuginfod_enabled,
ed07ac
+			show_debuginfod_enabled,
ed07ac
+			&set_debuginfod_prefix_list,
ed07ac
+			&show_debuginfod_prefix_list);
ed07ac
 
ed07ac
   /* set/show debuginfod urls */
ed07ac
   add_setshow_string_noescape_cmd ("urls", class_run, &debuginfod_urls, _("\
ed07ac
@@ -422,8 +357,8 @@ Show the list of debuginfod server URLs."), _("\
ed07ac
 Manage the space-separated list of debuginfod server URLs that GDB will query \
ed07ac
 when missing debuginfo, executables or source files.\nThe default value is \
ed07ac
 copied from the DEBUGINFOD_URLS environment variable."),
ed07ac
-				   set_debuginfod_urls_command,
ed07ac
-				   show_debuginfod_urls_command,
ed07ac
+				   set_debuginfod_urls,
ed07ac
+				   show_debuginfod_urls,
ed07ac
 				   &set_debuginfod_prefix_list,
ed07ac
 				   &show_debuginfod_prefix_list);
ed07ac
   if (getenv ("DEBUGINFOD_URLS") != nullptr)
ed07ac
@@ -436,7 +371,7 @@ Set verbosity of debuginfod output."), _("\
ed07ac
 Show debuginfod debugging."), _("\
ed07ac
 When set to a non-zero value, display verbose output for each debuginfod \
ed07ac
 query.\nTo disable, set to zero.  Verbose output is displayed by default."),
ed07ac
-			     set_debuginfod_verbose_command,
ed07ac
+			     nullptr,
ed07ac
 			     show_debuginfod_verbose_command,
ed07ac
 			     &set_debuginfod_prefix_list,
ed07ac
 			     &show_debuginfod_prefix_list);
ed07ac
diff --git a/gdb/doc/gdb.texinfo b/gdb/doc/gdb.texinfo
ed07ac
--- a/gdb/doc/gdb.texinfo
ed07ac
+++ b/gdb/doc/gdb.texinfo
ed07ac
@@ -47046,27 +47046,28 @@ regarding @code{debuginfod}.
ed07ac
 @value{GDBN} provides the following commands for configuring @code{debuginfod}.
ed07ac
 
ed07ac
 @table @code
ed07ac
-@kindex set debuginfod
ed07ac
-@anchor{set debuginfod}
ed07ac
-@item set debuginfod
ed07ac
-@itemx set debuginfod on
ed07ac
+@kindex set debuginfod enabled
ed07ac
+@anchor{set debuginfod enabled}
ed07ac
+@item set debuginfod enabled
ed07ac
+@itemx set debuginfod enabled on
ed07ac
 @cindex enable debuginfod
ed07ac
 @value{GDBN} will attempt to query @code{debuginfod} servers when missing debug
ed07ac
 info or source files.
ed07ac
 
ed07ac
-@item set debuginfod off
ed07ac
+@item set debuginfod enabled off
ed07ac
 @value{GDBN} will not attempt to query @code{debuginfod} servers when missing
ed07ac
-debug info or source files.  By default, @code{debuginfod} is set to @code{off}
ed07ac
-for non-interactive sessions.
ed07ac
+debug info or source files.  By default, @code{debuginfod enabled} is set to
ed07ac
+@code{off} for non-interactive sessions.
ed07ac
 
ed07ac
-@item set debuginfod ask
ed07ac
+@item set debuginfod enabled ask
ed07ac
 @value{GDBN} will prompt the user to enable or disable @code{debuginfod} before
ed07ac
-attempting to perform the next query.  By default, @code{debuginfod} is set to
ed07ac
-@code{ask} for interactive sessions.
ed07ac
+attempting to perform the next query.  By default, @code{debuginfod enabled}
ed07ac
+is set to @code{ask} for interactive sessions.
ed07ac
 
ed07ac
-@kindex show debuginfod status
ed07ac
-@item show debuginfod status
ed07ac
-Show whether @code{debuginfod} is set to @code{on}, @code{off} or @code{ask}.
ed07ac
+@kindex show debuginfod enabled
ed07ac
+@item show debuginfod enabled
ed07ac
+Display whether @code{debuginfod enabled} is set to @code{on}, @code{off} or
ed07ac
+@code{ask}.
ed07ac
 
ed07ac
 @kindex set debuginfod urls
ed07ac
 @cindex configure debuginfod URLs
ed07ac
diff --git a/gdb/testsuite/gdb.debuginfod/fetch_src_and_symbols.exp b/gdb/testsuite/gdb.debuginfod/fetch_src_and_symbols.exp
ed07ac
--- a/gdb/testsuite/gdb.debuginfod/fetch_src_and_symbols.exp
ed07ac
+++ b/gdb/testsuite/gdb.debuginfod/fetch_src_and_symbols.exp
ed07ac
@@ -236,7 +236,7 @@ proc local_url { } {
ed07ac
     clean_restart
ed07ac
     gdb_test "file $binfile" ".*No debugging symbols.*" \
ed07ac
 	"file [file tail $binfile] cmd"
ed07ac
-    gdb_test_no_output "set debuginfod off"
ed07ac
+    gdb_test_no_output "set debuginfod enabled off"
ed07ac
     gdb_test_no_output "set debuginfod urls http://127.0.0.1:$port"
ed07ac
 
ed07ac
     # gdb shouldn't find the debuginfo since debuginfod has been disabled
ed07ac
@@ -244,7 +244,7 @@ proc local_url { } {
ed07ac
 	"file [file tail $binfile] cmd off"
ed07ac
 
ed07ac
     # Enable debuginfod and fetch the debuginfo
ed07ac
-    gdb_test_no_output "set debuginfod on"
ed07ac
+    gdb_test_no_output "set debuginfod enabled on"
ed07ac
     gdb_test "file $binfile" ".*Reading symbols from.*debuginfo.*" \
ed07ac
 	"file [file tail $binfile] cmd on"
ed07ac
 }