gdb: allow specifying multiple filters when running selftests
authorSimon Marchi <simon.marchi@polymtl.ca>
Thu, 13 Aug 2020 11:55:48 +0000 (07:55 -0400)
committerSimon Marchi <simon.marchi@polymtl.ca>
Thu, 13 Aug 2020 11:55:48 +0000 (07:55 -0400)
commitece5bc8ac303ccf03dd066ce7e1cba3a12293e40
treec65c56a0b7502de832cb2e6824eb21a70858123d
parent8118fd4346e353323cda683c5158f90efedf1002
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
gdb/ChangeLog
gdb/maint.c
gdbserver/ChangeLog
gdbserver/server.cc
gdbsupport/ChangeLog
gdbsupport/selftest.cc
gdbsupport/selftest.h