gdb: introduce new 'maint flush ' prefix command
authorAndrew Burgess <andrew.burgess@embecosm.com>
Fri, 20 Nov 2020 19:08:06 +0000 (19:08 +0000)
committerAndrew Burgess <andrew.burgess@embecosm.com>
Sun, 13 Dec 2020 12:36:15 +0000 (12:36 +0000)
We currently have two flushing commands 'flushregs' and 'maint
flush-symbol-cache'.  I'm planning to add at least one more so I
thought it might be nice if we bundled these together into one place.

And so I created the 'maint flush ' command prefix.  Currently there
are two commands:

  (gdb) maint flush symbol-cache
  (gdb) maint flush register-cache

Unfortunately, even though both of the existing flush commands are
maintenance commands, I don't know how keen we about deleting existing
commands for fear of breaking things in the wild.  So, both of the
existing flush commands 'maint flush-symbol-cache' and 'flushregs' are
still around as deprecated aliases to the new commands.

I've updated the testsuite to use the new command syntax, and updated
the documentation too.

gdb/ChangeLog:

* NEWS: Mention new commands, and that the old commands are now
deprecated.
* cli/cli-cmds.c (maintenanceflushlist): Define.
* cli/cli-cmds.h (maintenanceflushlist): Declare.
* maint.c (_initialize_maint_cmds): Initialise
maintenanceflushlist.
* regcache.c: Add 'cli/cli-cmds.h' include.
(reg_flush_command): Add header comment.
(_initialize_regcache): Create new 'maint flush register-cache'
command, make 'flushregs' an alias.
* symtab.c: Add 'cli/cli-cmds.h' include.
(_initialize_symtab): Create new 'maint flush symbol-cache'
command, make old command an alias.

gdb/doc/ChangeLog:

* gdb.texinfo (Symbols): Document 'maint flush symbol-cache'.
(Maintenance Commands): Document 'maint flush register-cache'.

gdb/testsuite/ChangeLog:

* gdb.base/c-linkage-name.exp: Update to use new 'maint flush ...'
commands.
* gdb.base/killed-outside.exp: Likewise.
* gdb.opt/inline-bt.exp: Likewise.
* gdb.perf/gmonster-null-lookup.py: Likewise.
* gdb.perf/gmonster-print-cerr.py: Likewise.
* gdb.perf/gmonster-ptype-string.py: Likewise.
* gdb.python/py-unwind.exp: Likewise.

17 files changed:
gdb/ChangeLog
gdb/NEWS
gdb/cli/cli-cmds.c
gdb/cli/cli-cmds.h
gdb/doc/ChangeLog
gdb/doc/gdb.texinfo
gdb/maint.c
gdb/regcache.c
gdb/symtab.c
gdb/testsuite/ChangeLog
gdb/testsuite/gdb.base/c-linkage-name.exp
gdb/testsuite/gdb.base/killed-outside.exp
gdb/testsuite/gdb.opt/inline-bt.exp
gdb/testsuite/gdb.perf/gmonster-null-lookup.py
gdb/testsuite/gdb.perf/gmonster-print-cerr.py
gdb/testsuite/gdb.perf/gmonster-ptype-string.py
gdb/testsuite/gdb.python/py-unwind.exp

index d2105e5cf02452db08fb184250f0f36c0037ad99..f7ca2c9ff7c6c554cfb87e8ace6d8535c9091d14 100644 (file)
@@ -1,3 +1,19 @@
+2020-12-13  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+       * NEWS: Mention new commands, and that the old commands are now
+       deprecated.
+       * cli/cli-cmds.c (maintenanceflushlist): Define.
+       * cli/cli-cmds.h (maintenanceflushlist): Declare.
+       * maint.c (_initialize_maint_cmds): Initialise
+       maintenanceflushlist.
+       * regcache.c: Add 'cli/cli-cmds.h' include.
+       (reg_flush_command): Add header comment.
+       (_initialize_regcache): Create new 'maint flush register-cache'
+       command, make 'flushregs' an alias.
+       * symtab.c: Add 'cli/cli-cmds.h' include.
+       (_initialize_symtab): Create new 'maint flush symbol-cache'
+       command, make old command an alias.
+
 2020-12-11  Andrew Burgess  <andrew.burgess@embecosm.com>
 
        * cli/cli-decode.c (deprecated_cmd_warning): Ignore the prefix
index d75992e78eff1a0d3fa90f3f8a0affe2715151c3..4d963880cb34d1f1ca992f79c766c25f7d4a7107 100644 (file)
--- a/gdb/NEWS
+++ b/gdb/NEWS
@@ -39,6 +39,11 @@ set debug event-loop
 show debug event-loop
   Control the display of debug output about GDB's event loop.
 
+maintenance flush symbol-cache
+maintenance flush register-cache
+  These new commands are equivalent to the already existing commands
+  'maintenance flush-symbol-cache' and 'flushregs' respectively.
+
 * Changed commands
 
 break [PROBE_MODIFIER] [LOCATION] [thread THREADNUM]
@@ -61,6 +66,12 @@ condition [-force] N COND
   GDB into defining the condition even when COND is invalid for all the
   current locations of breakpoint N.
 
+flushregs
+maintenance flush-symbol-cache
+  These commands are deprecated in favor of the new commands
+  'maintenance flush register-cache' and 'maintenance flush
+  symbol-cache' respectively.
+
 *** Changes in GDB 10
 
 * There are new feature names for ARC targets: "org.gnu.gdb.arc.core"
index 54822fad481cbe4f5dbac078b8fada4070f59467..88c83cd63198d3de569c9365559cbfd5275d3514 100644 (file)
@@ -151,6 +151,10 @@ struct cmd_list_element *maintenanceprintlist;
 
 struct cmd_list_element *maintenancechecklist;
 
+/* Chain containing all defined "maintenance flush" subcommands.  */
+
+struct cmd_list_element *maintenanceflushlist;
+
 struct cmd_list_element *setprintlist;
 
 struct cmd_list_element *showprintlist;
index 1d641520bf5cecb08d211295ebbc980faede4ac3..976cea078066294328185a495cd958759f459909 100644 (file)
@@ -89,6 +89,10 @@ extern struct cmd_list_element *maintenanceinfolist;
 
 extern struct cmd_list_element *maintenanceprintlist;
 
+/* Chain containing all defined "maintenance flush" subcommands.  */
+
+extern struct cmd_list_element *maintenanceflushlist;
+
 extern struct cmd_list_element *setprintlist;
 
 extern struct cmd_list_element *showprintlist;
index 5793ab9941b83c85809b01b6fb292f28558a0763..6ad728ea36eb77411682029f9fe8fde9fdaf0136 100644 (file)
@@ -1,3 +1,8 @@
+2020-12-13  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+       * gdb.texinfo (Symbols): Document 'maint flush symbol-cache'.
+       (Maintenance Commands): Document 'maint flush register-cache'.
+
 2020-12-04  Bernd Edlinger  <bernd.edlinger@hotmail.de>
 
        * Makefile.in: Delete GDBvn.texi and version.subst only in
index 01dcac941c2c205258db1678b4afdc23aacf9d32..5bafb9d11cd6ba03a6dbc509f51c2463020f6678 100644 (file)
@@ -19503,12 +19503,16 @@ This is useful when debugging symbol cache issues.
 Print symbol cache usage statistics.
 This helps determine how well the cache is being utilized.
 
+@kindex maint flush symbol-cache
 @kindex maint flush-symbol-cache
 @cindex symbol cache, flushing
-@item maint flush-symbol-cache
-Flush the contents of the symbol cache, all entries are removed.
-This command is useful when debugging the symbol cache.
-It is also useful when collecting performance data.
+@item maint flush symbol-cache
+@itemx maint flush-symbol-cache
+Flush the contents of the symbol cache, all entries are removed.  This
+command is useful when debugging the symbol cache.  It is also useful
+when collecting performance data.  The command @code{maint
+flush-symbol-cache} is deprecated in favor of @code{maint flush
+symbol-cache}..
 
 @end table
 
@@ -38859,9 +38863,15 @@ The register groups info looks like this:
  restore    internal
 @end smallexample
 
+@kindex maint flush register-cache
 @kindex flushregs
-@item flushregs
-This command forces @value{GDBN} to flush its internal register cache.
+@cindex register cache, flushing
+@item maint flush register-cache
+@itemx flushregs
+Flush the contents of the register cache and as a consequence the
+frame cache.  This command is useful when debugging issues related to
+register fetching, or frame unwinding.  The command @code{flushregs}
+is deprecated in favor of @code{maint flush register-cache}.
 
 @kindex maint print objfiles
 @cindex info for known object files
index 56319600ed88388bb9fb834cf08b5606d049bd59..ac2431562d301723f4e477625121398de16ece06 100644 (file)
@@ -1083,6 +1083,11 @@ lists all sections from all object files, including shared libraries."),
                        &maintenanceprintlist, "maintenance print ", 0,
                        &maintenancelist);
 
+  add_basic_prefix_cmd ("flush", class_maintenance,
+                       _("Maintenance command for flushing GDB internal caches."),
+                       &maintenanceflushlist, "maintenance flush ", 0,
+                       &maintenancelist);
+
   add_basic_prefix_cmd ("set", class_maintenance, _("\
 Set GDB internal variables used by the GDB maintainer.\n\
 Configure variables internal to GDB that aid in GDB's maintenance"),
index 91d3202b94baa87573c1b903bd6759dd83f99981..a0dff93a53afee0ad8ec912b34b4a74f33b9ee60 100644 (file)
@@ -30,6 +30,7 @@
 #include "observable.h"
 #include "regset.h"
 #include <unordered_map>
+#include "cli/cli-cmds.h"
 
 /*
  * DATA STRUCTURE
@@ -1382,6 +1383,8 @@ regcache::debug_print_register (const char *func,  int regno)
   fprintf_unfiltered (gdb_stdlog, "\n");
 }
 
+/* Implement 'maint flush register-cache' command.  */
+
 static void
 reg_flush_command (const char *command, int from_tty)
 {
@@ -2076,14 +2079,20 @@ void _initialize_regcache ();
 void
 _initialize_regcache ()
 {
+  struct cmd_list_element *c;
+
   regcache_descr_handle
     = gdbarch_data_register_post_init (init_regcache_descr);
 
   gdb::observers::target_changed.attach (regcache_observer_target_changed);
   gdb::observers::thread_ptid_changed.attach (regcache_thread_ptid_changed);
 
-  add_com ("flushregs", class_maintenance, reg_flush_command,
-          _("Force gdb to flush its register cache (maintainer command)."));
+  add_cmd ("register-cache", class_maintenance, reg_flush_command,
+          _("Force gdb to flush its register and frame cache."),
+          &maintenanceflushlist);
+  c = add_com_alias ("flushregs", "maintenance flush register-cache",
+                    class_maintenance, 0);
+  deprecate_cmd (c, "maintenance flush register-cache");
 
 #if GDB_SELF_TEST
   selftests::register_test ("get_thread_arch_aspace_regcache",
index dccc3d1e2379af30dfb286658bb45a69735bb020..3339bf7b88aa087474646e4b34547cba2b67b08b 100644 (file)
@@ -42,6 +42,7 @@
 #include "addrmap.h"
 #include "cli/cli-utils.h"
 #include "cli/cli-style.h"
+#include "cli/cli-cmds.h"
 #include "fnmatch.h"
 #include "hashtab.h"
 #include "typeprint.h"
@@ -6929,10 +6930,13 @@ If zero then the symbol cache is disabled."),
           _("Print symbol cache statistics for each program space."),
           &maintenanceprintlist);
 
-  add_cmd ("flush-symbol-cache", class_maintenance,
+  add_cmd ("symbol-cache", class_maintenance,
           maintenance_flush_symbol_cache,
           _("Flush the symbol cache for each program space."),
-          &maintenancelist);
+          &maintenanceflushlist);
+  c = add_alias_cmd ("flush-symbol-cache", "flush symbol-cache",
+                    class_maintenance, 0, &maintenancelist);
+  deprecate_cmd (c, "maintenancelist flush symbol-cache");
 
   gdb::observers::executable_changed.attach (symtab_observer_executable_changed);
   gdb::observers::new_objfile.attach (symtab_new_objfile_observer);
index 5796e61688bec5d6c44ce90b03a9e7769d9331f1..130de8ab447ca1c470e567de125d25e2e89501f3 100644 (file)
@@ -1,3 +1,14 @@
+2020-12-13  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+       * gdb.base/c-linkage-name.exp: Update to use new 'maint flush ...'
+       commands.
+       * gdb.base/killed-outside.exp: Likewise.
+       * gdb.opt/inline-bt.exp: Likewise.
+       * gdb.perf/gmonster-null-lookup.py: Likewise.
+       * gdb.perf/gmonster-print-cerr.py: Likewise.
+       * gdb.perf/gmonster-ptype-string.py: Likewise.
+       * gdb.python/py-unwind.exp: Likewise.
+
 2020-12-11  Andrew Burgess  <andrew.burgess@embecosm.com>
 
        * gdb.base/commands.exp: Update expected results.
index 6b0a014949eff07328c7a15e17e0a2e2e0b31197..c6b3b509df6e30e4866959f363ea0e09f7b69581 100644 (file)
@@ -64,7 +64,7 @@ gdb_test "maint info symtabs" "\{ symtab \[^\r\n\]*c-linkage-name-2.c.*"
 
 # Flush the symbol cache to prevent the lookup to return the same as before.
 
-gdb_test "maint flush-symbol-cache"
+gdb_test "maint flush symbol-cache"
 
 # Try to print MUNDANE using its linkage name again, after partial
 # symtab expansion.
index 3e20ad67ceeee87658e84f9ccb9f40ee0c9cfa15..645b41f4867b1dc17bedf737da703b846ed71819 100644 (file)
@@ -115,7 +115,7 @@ with_test_prefix "stepi" {
 # other commands would trigger.
 with_test_prefix "registers" {
     test {
-       gdb_test "flushregs" ".*"
+       gdb_test "maint flush register-cache" ".*"
        gdb_test "info threads" ".*"
     }
 }
index d428c39635960805bf9bbc753129a118122302eb..109627c2306465c76f2fa085f6ff009b27da6e47 100644 (file)
@@ -61,7 +61,7 @@ gdb_test "info frame" ".*inlined into frame.*" "func2 inlined (3)"
 # function.
 gdb_test_no_output "set backtrace limit 2"
 # Force flushing the frame cache.
-gdb_test "flushregs" "Register cache flushed."
+gdb_test "maint flush register-cache" "Register cache flushed."
 gdb_test "up" "#1  .*func1.*" "up from bar (4)"
 gdb_test "info frame" ".*in func1.*" "info frame still works"
 # Verify the user visible limit works as expected.
index eaf4b11c9f87501703b888c379e603f89b874fed..f4ce1ea55e932afeda677bfa08af2e731a9fa54f 100644 (file)
@@ -40,7 +40,7 @@ class NullLookup(perftest.TestCaseWithBasicMeasurements):
             utils.safe_execute("mt expand-symtabs")
             iteration = 5
             while iteration > 0:
-                utils.safe_execute("mt flush-symbol-cache")
+                utils.safe_execute("mt flush symbol-cache")
                 func = lambda: utils.safe_execute("p symbol_not_found")
                 self.measure.measure(func, run)
                 iteration -= 1
index 796380dcacd5481067962af72e090f055591d1f5..adee2e601aaadc15b4da9b3dc64ace442b48ce50 100644 (file)
@@ -46,7 +46,7 @@ class PrintCerr(perftest.TestCaseWithBasicMeasurements):
             utils.runto_main()
             iteration = 5
             while iteration > 0:
-                utils.safe_execute("mt flush-symbol-cache")
+                utils.safe_execute("mt flush symbol-cache")
                 func = lambda: utils.safe_execute("print gm_std::cerr")
                 self.measure.measure(func, run)
                 iteration -= 1
index 78fa3dfd4323b8bc266b9ecd2fa022597faea705..aa5513547e57a40cad721d1df83dae9f9340c273 100644 (file)
@@ -41,7 +41,7 @@ class GmonsterPtypeString(perftest.TestCaseWithBasicMeasurements):
             utils.safe_execute("mt expand-symtabs")
             iteration = 5
             while iteration > 0:
-                utils.safe_execute("mt flush-symbol-cache")
+                utils.safe_execute("mt flush symbol-cache")
                 func1 = lambda: utils.safe_execute("ptype hello")
                 func = lambda: utils.run_n_times(2, func1)
                 self.measure.measure(func, run)
index 4ef63bf965c6cf53991df3db50c3a5ba10b5967d..e8ae8632a8e981b6a1663e6e4df3da805b1f5ac3 100644 (file)
@@ -57,4 +57,4 @@ gdb_test_sequence "where"  "Backtrace restored by unwinder" {
 }
 
 # Check that the Python unwinder frames can be flushed / released.
-gdb_test "flushregs" "Register cache flushed\\." "flush frames"
+gdb_test "maint flush register-cache" "Register cache flushed\\." "flush frames"