gdb: introduce "set index-cache enabled", deprecate "set index-cache on/off"
authorSimon Marchi <simon.marchi@polymtl.ca>
Thu, 4 Nov 2021 19:31:28 +0000 (15:31 -0400)
committerSimon Marchi <simon.marchi@polymtl.ca>
Thu, 4 Nov 2021 19:48:59 +0000 (15:48 -0400)
The "set index-cache" command is used at the same time as a prefix
command (prefix for "set index-cache directory", for example), and a
boolean setting for turning the index-cache on and off.  Even though I
did introduce that, I now don't think it's a good idea to do something
non-standard like this.

First, there's no dedicated CLI command to show whether the index-cache
is enabled, so it has to be custom output in the "show index-cache
handler".  Also, it means there's no good way a MI frontend can find out
if the index-cache is enabled.  "-gdb-show index-cache" doesn't show it
in the MI output record:

    (gdb) interpreter-exec mi "-gdb-show index-cache"
    ~"\n"
    ~"The index cache is currently disabled.\n"
    ^done,showlist={option={name="directory",value="/home/simark/.cache/gdb"}}

Fix this by introducing "set/show index-cache enabled on/off", regular
boolean setting commands.  Keep commands "set index-cache on" and "set
index-cache off" as deprecated aliases of "set index-cache enabled",
with respectively the default arguments "on" and "off".

Update tests using "set index-cache on/off" to use the new command.
Update the regexps in gdb.base/maint.exp to figure out whether the
index-cache is enabled or not.  Update the doc to mention the new
commands.

Change-Id: I7d5aaaf7fd22bf47bd03e0023ef4fbb4023b37b3

gdb/doc/gdb.texinfo
gdb/dwarf2/index-cache.c
gdb/testsuite/gdb.base/index-cache.exp
gdb/testsuite/gdb.base/maint.exp
gdb/testsuite/gdb.dwarf2/per-bfd-sharing.exp

index 308a97aeb82fe4d5ce016d936fff71d67d4afa7d..fc8e5bdf3db65e1c396dad08cb3ff4af3d1ae725 100644 (file)
@@ -21795,14 +21795,14 @@ Indices only work when using DWARF debugging information, not stabs.
 @cindex automatic symbol index cache
 It is possible for @value{GDBN} to automatically save a copy of this index in a
 cache on disk and retrieve it from there when loading the same binary in the
-future.  This feature can be turned on with @kbd{set index-cache on}.  The
-following commands can be used to tweak the behavior of the index cache.
+future.  This feature can be turned on with @kbd{set index-cache enabled on}.
+The following commands can be used to tweak the behavior of the index cache.
 
 @table @code
 
 @kindex set index-cache
-@item set index-cache on
-@itemx set index-cache off
+@item set index-cache enabled on
+@itemx set index-cache enabled off
 Enable or disable the use of the symbol index cache.
 
 @item set index-cache directory @var{directory}
index f439b37db5aede62750c81fc98d55bcdbb5af495..06c27db306ffb446f4355fa82458ec531fe91117 100644 (file)
@@ -22,6 +22,7 @@
 
 #include "build-id.h"
 #include "cli/cli-cmds.h"
+#include "cli/cli-decode.h"
 #include "command.h"
 #include "gdbsupport/scoped_mmap.h"
 #include "gdbsupport/pathstuff.h"
@@ -267,20 +268,32 @@ show_index_cache_command (const char *arg, int from_tty)
      global_index_cache.enabled () ? _("enabled") : _("disabled"));
 }
 
-/* "set index-cache on" handler.  */
+/* "set/show index-cache enabled" set callback.  */
 
 static void
-set_index_cache_on_command (const char *arg, int from_tty)
+set_index_cache_enabled_command (bool value)
 {
-  global_index_cache.enable ();
+  if (value)
+    global_index_cache.enable ();
+  else
+    global_index_cache.disable ();
+}
+
+/* "set/show index-cache enabled" get callback.  */
+
+static bool
+get_index_cache_enabled_command ()
+{
+  return global_index_cache.enabled ();
 }
 
-/* "set index-cache off" handler.  */
+/* "set/show index-cache enabled" show callback.  */
 
 static void
-set_index_cache_off_command (const char *arg, int from_tty)
+show_index_cache_enabled_command (ui_file *stream, int from_tty,
+                                 cmd_list_element *cmd, const char *value)
 {
-  global_index_cache.disable ();
+  fprintf_filtered (stream, _("The index cache is %s.\n"), value);
 }
 
 /* "set index-cache directory" handler.  */
@@ -342,13 +355,31 @@ _initialize_index_cache ()
                  _("Show index-cache options."), &show_index_cache_prefix_list,
                  false, &showlist);
 
+  /* set/show index-cache enabled */
+  set_show_commands setshow_index_cache_enabled_cmds
+    = add_setshow_boolean_cmd ("enabled", class_files,
+                              _("Enable the index cache."),
+                              _("Show whether the index cache is enabled."),
+                              _("help doc"),
+                              set_index_cache_enabled_command,
+                              get_index_cache_enabled_command,
+                              show_index_cache_enabled_command,
+                              &set_index_cache_prefix_list,
+                              &show_index_cache_prefix_list);
+
   /* set index-cache on */
-  add_cmd ("on", class_files, set_index_cache_on_command,
-          _("Enable the index cache."), &set_index_cache_prefix_list);
+  cmd_list_element *set_index_cache_on_cmd
+    = add_alias_cmd ("on", setshow_index_cache_enabled_cmds.set, class_files,
+                    false, &set_index_cache_prefix_list);
+  deprecate_cmd (set_index_cache_on_cmd, "set index-cache enabled on");
+  set_index_cache_on_cmd->default_args = "on";
 
   /* set index-cache off */
-  add_cmd ("off", class_files, set_index_cache_off_command,
-          _("Disable the index cache."), &set_index_cache_prefix_list);
+  cmd_list_element *set_index_cache_off_cmd
+    = add_alias_cmd ("off", setshow_index_cache_enabled_cmds.set, class_files,
+                    false, &set_index_cache_prefix_list);
+  deprecate_cmd (set_index_cache_off_cmd, "set index-cache enabled off");
+  set_index_cache_off_cmd->default_args = "off";
 
   /* set index-cache directory */
   add_setshow_filename_cmd ("directory", class_files, &index_cache_directory,
index 8dd35ad80bd76cb94b0ef5af0c8c8a6e03f4900c..c5e9ff5896d627c281221910ef5099e72f8a5ee9 100644 (file)
@@ -80,7 +80,7 @@ proc run_test_with_flags { cache_dir cache_enabled code } {
 
     save_vars { GDBFLAGS } {
        set GDBFLAGS "$GDBFLAGS -iex \"set index-cache directory $cache_dir\""
-       set GDBFLAGS "$GDBFLAGS -iex \"set index-cache $cache_enabled\""
+       set GDBFLAGS "$GDBFLAGS -iex \"set index-cache enabled $cache_enabled\""
 
        clean_restart ${testfile}
 
@@ -97,17 +97,30 @@ proc_with_prefix test_basic_stuff { } {
 
     # Check that the index cache is disabled by default.
     gdb_test \
-       "show index-cache" \
-       " is currently disabled." \
+       "show index-cache enabled" \
+       "The index cache is off." \
        "index-cache is disabled by default"
 
-    # Test that we can enable it and "show index-cache" reflects that.
-    gdb_test_no_output "set index-cache on" "enable index cache"
+    # Test that we can enable it and "show index-cache enabled" reflects that.
+    gdb_test_no_output "set index-cache enabled on" "enable index cache"
     gdb_test \
-       "show index-cache" \
-       " is currently enabled." \
+       "show index-cache enabled" \
+       "The index cache is on." \
        "index-cache is now enabled"
 
+    with_test_prefix "deprecated commands" {
+        gdb_test "set index-cache off" ".*is deprecated.*" "disable index cache"
+       gdb_test \
+           "show index-cache enabled" \
+           "The index cache is off." \
+           "index-cache is now disabled"
+        gdb_test "set index-cache on" ".*is deprecated.*" "enable index cache"
+       gdb_test \
+           "show index-cache enabled" \
+           "The index cache is on." \
+           "index-cache is now enabled"
+    }
+
     # Test the "set/show index-cache directory" commands.
     gdb_test "set index-cache directory" "Argument required.*" "set index-cache directory without arg"
     gdb_test_no_output "set index-cache directory /tmp" "change the index cache directory"
index 0a0cc0f813c8056ea560ff1259f37736910f9391..4b200879728e07b953d9fe49f90a638c281dd92a 100644 (file)
@@ -131,11 +131,11 @@ gdb_test_multiple "show index-cache stats" "check index cache stats" {
 }
 
 set using_index_cache 0
-gdb_test_multiple "show index-cache" "check index cache status" {
-    -re ".*is currently disabled.\r\n$gdb_prompt $" {
+gdb_test_multiple "show index-cache enabled" "check index cache status" {
+    -re ".*is off.\r\n$gdb_prompt $" {
        set using_index_cache 0
     }
-    -re ".*is currently enabled.\r\n$gdb_prompt $" {
+    -re ".*is on.\r\n$gdb_prompt $" {
        set using_index_cache 1
     }
 }
index 6891cd774465814db18484c1542b96386ce63a6d..47c92d9a26f2fd628338e441229de8cf08e3eb6a 100644 (file)
@@ -45,7 +45,7 @@ with_test_prefix "populate index cache" {
 
     gdb_test_no_output "set index-cache directory $cache_dir" \
        "set index-cache directory"
-    gdb_test_no_output "set index-cache on"
+    gdb_test_no_output "set index-cache enabled on"
     gdb_test "file $binfile" "Reading symbols from .*" "file"
 }
 
@@ -56,9 +56,9 @@ proc load_binary { method } {
     if { $method == "standard" } {
        gdb_test "file $binfile" "Reading symbols from .*" "file"
     } elseif { $method == "index" } {
-       gdb_test_no_output "set index-cache on"
+       gdb_test_no_output "set index-cache enabled on"
        gdb_test "file $binfile" "Reading symbols from .*" "file index"
-       gdb_test_no_output "set index-cache off"
+       gdb_test_no_output "set index-cache enabled off"
     } elseif { $method == "readnow" } {
        gdb_test "file -readnow $binfile" \
            "Reading symbols from .*Expanding full symbols from .*" \