summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gdb/disasm-selftests.c9
-rw-r--r--gdb/doc/gdb.texinfo5
-rw-r--r--gdb/maint.c3
-rw-r--r--gdbsupport/selftest.cc15
-rw-r--r--gdbsupport/selftest.h7
5 files changed, 29 insertions, 10 deletions
diff --git a/gdb/disasm-selftests.c b/gdb/disasm-selftests.c
index ae71e711bba..0a383d6b795 100644
--- a/gdb/disasm-selftests.c
+++ b/gdb/disasm-selftests.c
@@ -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;
diff --git a/gdb/doc/gdb.texinfo b/gdb/doc/gdb.texinfo
index 3eafcfbb7dd..bf731a1feb5 100644
--- a/gdb/doc/gdb.texinfo
+++ b/gdb/doc/gdb.texinfo
@@ -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
diff --git a/gdb/maint.c b/gdb/maint.c
index 8f8bdc87be8..c6d13a3a732 100644
--- a/gdb/maint.c
+++ b/gdb/maint.c
@@ -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"));
diff --git a/gdbsupport/selftest.cc b/gdbsupport/selftest.cc
index 55f530ad98e..589ef1e6797 100644
--- a/gdbsupport/selftest.cc
+++ b/gdbsupport/selftest.cc
@@ -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)
{
diff --git a/gdbsupport/selftest.h b/gdbsupport/selftest.h
index b75e01e197f..d76fc4b37d3 100644
--- a/gdbsupport/selftest.h
+++ b/gdbsupport/selftest.h
@@ -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 ();