aboutsummaryrefslogtreecommitdiff
path: root/gdbserver/server.cc
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 /gdbserver/server.cc
parent8118fd4346e353323cda683c5158f90efedf1002 (diff)
downloadgdb-ece5bc8ac303ccf03dd066ce7e1cba3a12293e40.zip
gdb-ece5bc8ac303ccf03dd066ce7e1cba3a12293e40.tar.gz
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 'gdbserver/server.cc')
-rw-r--r--gdbserver/server.cc14
1 files changed, 11 insertions, 3 deletions
diff --git a/gdbserver/server.cc b/gdbserver/server.cc
index aadcb9b..d45154d 100644
--- a/gdbserver/server.cc
+++ b/gdbserver/server.cc
@@ -3610,7 +3610,7 @@ captured_main (int argc, char *argv[])
int was_running;
bool selftest = false;
#if GDB_SELF_TEST
- const char *selftest_filter = NULL;
+ std::vector<const char *> selftest_filters;
#endif
current_directory = getcwd (NULL, 0);
@@ -3747,8 +3747,16 @@ captured_main (int argc, char *argv[])
else if (startswith (*next_arg, "--selftest="))
{
selftest = true;
+
#if GDB_SELF_TEST
- selftest_filter = *next_arg + strlen ("--selftest=");
+ const char *filter = *next_arg + strlen ("--selftest=");
+ if (*filter == '\0')
+ {
+ fprintf (stderr, _("Error: selftest filter is empty.\n"));
+ exit (1);
+ }
+
+ selftest_filters.push_back (filter);
#endif
}
else
@@ -3825,7 +3833,7 @@ captured_main (int argc, char *argv[])
if (selftest)
{
#if GDB_SELF_TEST
- selftests::run_tests (selftest_filter);
+ selftests::run_tests (selftest_filters);
#else
printf (_("Selftests have been disabled for this build.\n"));
#endif