[gdb] Add maint selftest -verbose option
authorTom de Vries <tdevries@suse.de>
Wed, 22 Sep 2021 09:47:50 +0000 (11:47 +0200)
committerTom de Vries <tdevries@suse.de>
Wed, 22 Sep 2021 09:47:50 +0000 (11:47 +0200)
The print_one_insn selftest in gdb/disasm-selftests.c contains:
...
  /* If you want to see the disassembled instruction printed to gdb_stdout,
     set verbose to true.  */
  static const bool verbose = false;
...

Make this parameter available in the maint selftest command using a new option
-verbose, such that we can do:
...
(gdb) maint selftest -verbose print_one_insn
...

Tested on x86_64-linux.

gdb/disasm-selftests.c
gdb/doc/gdb.texinfo
gdb/maint.c
gdbsupport/selftest.cc
gdbsupport/selftest.h

index ae71e711bba44373024cf83e0e36baa90602f70e..0a383d6b79590522514700e32430e9e7392107a3 100644 (file)
@@ -103,8 +103,7 @@ print_one_insn_test (struct gdbarch *gdbarch)
 
   /* Test gdb_disassembler for a given gdbarch by reading data from a
      pre-allocated buffer.  If you want to see the disassembled
-     instruction printed to gdb_stdout, set verbose to true.  */
-  static const bool verbose = false;
+     instruction printed to gdb_stdout, use maint selftest -verbose.  */
 
   class gdb_disassembler_test : public gdb_disassembler
   {
@@ -114,7 +113,7 @@ print_one_insn_test (struct gdbarch *gdbarch)
                                    const gdb_byte *insn,
                                    size_t len)
       : gdb_disassembler (gdbarch,
-                         (verbose ? gdb_stdout : &null_stream),
+                         (run_verbose () ? gdb_stdout : &null_stream),
                          gdb_disassembler_test::read_memory),
        m_insn (insn), m_len (len)
     {
@@ -123,7 +122,7 @@ print_one_insn_test (struct gdbarch *gdbarch)
     int
     print_insn (CORE_ADDR memaddr)
     {
-      if (verbose)
+      if (run_verbose ())
        {
          fprintf_unfiltered (stream (), "%s ",
                              gdbarch_bfd_arch_info (arch ())->arch_name);
@@ -131,7 +130,7 @@ print_one_insn_test (struct gdbarch *gdbarch)
 
       int len = gdb_disassembler::print_insn (memaddr);
 
-      if (verbose)
+      if (run_verbose ())
        fprintf_unfiltered (stream (), "\n");
 
       return len;
index 3eafcfbb7dd0a73abc0e23cb302f6928c1242ff1..bf731a1feb5f47ffef97789891e9bfcb67e93bb8 100644 (file)
@@ -39433,11 +39433,12 @@ data structures, including its flags and contained types.
 
 @kindex maint selftest
 @cindex self tests
-@item maint selftest @r{[}@var{filter}@r{]}
+@item maint selftest @r{[}-verbose@r{]} @r{[}@var{filter}@r{]}
 Run any self tests that were compiled in to @value{GDBN}.  This will
 print a message showing how many tests were run, and how many failed.
 If a @var{filter} is passed, only the tests with @var{filter} in their
-name will be ran.
+name will be ran.  If @code{-verbose} is passed, the self tests can be
+more verbose.
 
 @kindex maint info selftests
 @cindex self tests
index 8f8bdc87be8223908c00134b314fb8e10cf11c37..c6d13a3a732ccd0c2fadcf7502990e19d4459461 100644 (file)
@@ -1127,8 +1127,9 @@ static void
 maintenance_selftest (const char *args, int from_tty)
 {
 #if GDB_SELF_TEST
+  bool verbose = args != nullptr && check_for_argument (&args, "-verbose");
   gdb_argv argv (args);
-  selftests::run_tests (argv.as_array_view ());
+  selftests::run_tests (argv.as_array_view (), verbose);
 #else
   printf_filtered (_("\
 Selftests have been disabled for this build.\n"));
index 55f530ad98e7f796e1edb58990bfe4e0dad742e7..589ef1e6797659401836d044ce3186f1e9a758ad 100644 (file)
@@ -70,10 +70,23 @@ register_test (const std::string &name,
 
 /* See selftest.h.  */
 
+static bool run_verbose_ = false;
+
+/* See selftest.h.  */
+
+bool
+run_verbose ()
+{
+  return run_verbose_;
+}
+
+/* See selftest.h.  */
+
 void
-run_tests (gdb::array_view<const char *const> filters)
+run_tests (gdb::array_view<const char *const> filters, bool verbose)
 {
   int ran = 0, failed = 0;
+  run_verbose_ = verbose;
 
   for (const auto &pair : tests)
     {
index b75e01e197fcb561e68c75263019ea22b968770b..d76fc4b37d368c7516ae1417df551c8102c55a31 100644 (file)
@@ -37,6 +37,10 @@ struct selftest
   virtual void operator() () const = 0;
 };
 
+/* True if selftest should run verbosely.  */
+
+extern bool run_verbose ();
+
 /* Register a new self-test.  */
 
 extern void register_test (const std::string &name, selftest *test);
@@ -52,7 +56,8 @@ extern void register_test (const std::string &name,
    If FILTERS is not empty, only run tests with names containing one of the
    element of FILTERS.  */
 
-extern void run_tests (gdb::array_view<const char *const> filters);
+extern void run_tests (gdb::array_view<const char *const> filters,
+                      bool verbose = false);
 
 /* Reset GDB or GDBserver's internal state.  */
 extern void reset ();