forked from Imagelibrary/binutils-gdb
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
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user