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:
Simon Marchi
2020-08-13 07:55:48 -04:00
parent 8118fd4346
commit ece5bc8ac3
7 changed files with 48 additions and 10 deletions

View File

@@ -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