aboutsummaryrefslogtreecommitdiff
path: root/gdbsupport
diff options
context:
space:
mode:
authorSimon Marchi <simon.marchi@polymtl.ca>2020-08-13 07:55:48 -0400
committerSimon Marchi <simon.marchi@polymtl.ca>2020-08-13 07:55:48 -0400
commitece5bc8ac303ccf03dd066ce7e1cba3a12293e40 (patch)
treec65c56a0b7502de832cb2e6824eb21a70858123d /gdbsupport
parent8118fd4346e353323cda683c5158f90efedf1002 (diff)
downloadfsf-binutils-gdb-ece5bc8ac303ccf03dd066ce7e1cba3a12293e40.zip
fsf-binutils-gdb-ece5bc8ac303ccf03dd066ce7e1cba3a12293e40.tar.gz
fsf-binutils-gdb-ece5bc8ac303ccf03dd066ce7e1cba3a12293e40.tar.bz2
gdb: allow specifying multiple filters when running selftests
I found myself wanting to run a few specific selftests while developing. I thought it would be nice to be able to provide multiple test names when running `maintenant selftests`. The arguments to that command is currently interpreted as a single filter (not split by spaces), it now becomes a list a filters, split by spaces. A test is executed when it matches at least one filter. Here's an example of the result in GDB: (gdb) maintenance selftest xml Running selftest xml_escape_text. Running selftest xml_escape_text_append. Ran 2 unit tests, 0 failed (gdb) maintenance selftest xml unord Running selftest unordered_remove. Running selftest xml_escape_text. Running selftest xml_escape_text_append. Ran 3 unit tests, 0 failed (gdb) maintenance selftest xml unord foobar Running selftest unordered_remove. Running selftest xml_escape_text. Running selftest xml_escape_text_append. Ran 3 unit tests, 0 failed Since the selftest machinery is also shared with gdbserver, I also adapted gdbserver. It accepts a `--selftest` switch, which accepts an optional filter argument. I made it so you can now pass `--selftest` multiple time to add filters. It's not so useful right now though: there's only a single selftest right now in GDB and it's for an architecture I can't compile. So I tested by adding dummy tests, here's an example of the result: $ ./gdbserver --selftest=foo Running selftest foo. foo Running selftest foobar. foobar Ran 2 unit tests, 0 failed $ ./gdbserver --selftest=foo --selftest=bar Running selftest bar. bar Running selftest foo. foo Running selftest foobar. foobar Ran 3 unit tests, 0 failed gdbsupport/ChangeLog: * selftest.h (run_tests): Change parameter to array_view. * selftest.c (run_tests): Change parameter to array_view and use it. gdb/ChangeLog: * maint.c (maintenance_selftest): Split args and pass array_view to run_tests. gdbserver/ChangeLog: * server.cc (captured_main): Accept multiple `--selftest=` options. Pass all `--selftest=` arguments to run_tests. Change-Id: I422bd49f08ea8095ae174c5d66a2dd502a59613a
Diffstat (limited to 'gdbsupport')
-rw-r--r--gdbsupport/ChangeLog6
-rw-r--r--gdbsupport/selftest.cc17
-rw-r--r--gdbsupport/selftest.h8
3 files changed, 25 insertions, 6 deletions
diff --git a/gdbsupport/ChangeLog b/gdbsupport/ChangeLog
index 2713244..a196053 100644
--- a/gdbsupport/ChangeLog
+++ b/gdbsupport/ChangeLog
@@ -1,3 +1,9 @@
+2020-08-13 Simon Marchi <simon.marchi@polymtl.ca>
+
+ * selftest.h (run_tests): Change parameter to array_view.
+ * selftest.c (run_tests): Change parameter to array_view and use
+ it.
+
2020-07-30 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
* Makefile.am (AM_CPPFLAGS): Add LARGEFILE_CPPFLAGS.
diff --git a/gdbsupport/selftest.cc b/gdbsupport/selftest.cc
index 8ab63be..2adb724 100644
--- a/gdbsupport/selftest.cc
+++ b/gdbsupport/selftest.cc
@@ -68,7 +68,7 @@ register_test (const std::string &name, self_test_function *function)
/* See selftest.h. */
void
-run_tests (const char *filter)
+run_tests (gdb::array_view<const char *const> filters)
{
int ran = 0, failed = 0;
@@ -76,9 +76,20 @@ run_tests (const char *filter)
{
const std::string &name = pair.first;
const std::unique_ptr<selftest> &test = pair.second;
+ bool run = false;
- if (filter != NULL && *filter != '\0'
- && name.find (filter) == std::string::npos)
+ if (filters.empty ())
+ run = true;
+ else
+ {
+ for (const char *filter : filters)
+ {
+ if (name.find (filter) != std::string::npos)
+ run = true;
+ }
+ }
+
+ if (!run)
continue;
try
diff --git a/gdbsupport/selftest.h b/gdbsupport/selftest.h
index 1c47fe1..e008613 100644
--- a/gdbsupport/selftest.h
+++ b/gdbsupport/selftest.h
@@ -19,6 +19,8 @@
#ifndef COMMON_SELFTEST_H
#define COMMON_SELFTEST_H
+#include "gdbsupport/array-view.h"
+
/* A test is just a function that does some checks and throws an
exception if something has gone wrong. */
@@ -47,10 +49,10 @@ extern void register_test (const std::string &name,
/* Run all the self tests. This print a message describing the number
of test and the number of failures.
- If FILTER is not NULL and not empty, only tests with names containing FILTER
- will be ran. */
+ If FILTERS is not empty, only run tests with names containing one of the
+ element of FILTERS. */
-extern void run_tests (const char *filter);
+extern void run_tests (gdb::array_view<const char *const> filters);
/* Reset GDB or GDBserver's internal state. */
extern void reset ();