[2/2] gdb/testsuite: add a new check-all-boards target

Message ID c93d5b470e34f6e725f31c21c32cfe6c4542f5db.1699381067.git.aburgess@redhat.com
State New
Headers
Series Make make-check-all.sh more accessible |

Checks

Context Check Description
linaro-tcwg-bot/tcwg_gdb_build--master-arm success Testing passed
linaro-tcwg-bot/tcwg_gdb_build--master-aarch64 success Testing passed

Commit Message

Andrew Burgess Nov. 7, 2023, 6:18 p.m. UTC
  The make-check-all.sh script (gdb/testsuite/make-check-all.sh) is
great, it makes it super easy to run some test(s) using all the
available board files.

This commit aims to make this script even easier to access by adding a
check-all-boards target to the GDB Makefile.  This new target checks
for (and requires) a number of environment variables, so the target
should be used like this:

  make check-all-boards GDB_TARGET_USERNAME=remote-target \
                        GDB_HOST_USERNAME=remote-host \
			TESTS="gdb.base/break.exp"

Where GDB_TARGET_USERNAME and GDB_HOST_USERNAME are the user names
that should be passed to the make-check-all.sh --target-user and
--host-user command line options respectively.

My personal intention is to set these variables in my environment, so
all I'll need to do is:

  make check-all-boards TESTS="gdb.base/break.exp"

The make rule always passes --keep-results to the make-check-all.sh
script, as I find that the most useful.  It's super frustrating to run
the tests and realise you forgot that option and the results have been
discarded.
---
 gdb/Makefile.in           |  8 ++++++++
 gdb/testsuite/Makefile.in | 19 ++++++++++++++++++
 gdb/testsuite/README      | 42 +++++++++++++++++++++++++++++++++++++++
 3 files changed, 69 insertions(+)
  

Comments

Tom de Vries Nov. 24, 2023, 4:14 p.m. UTC | #1
On 11/7/23 19:18, Andrew Burgess wrote:

Hi Andrew,

just a review of the documentation in this reply.

> +GDB_TARGET_USERNAME
> +GDB_HOST_USERNAME
> +
> +These settings are only used with the check-all-boards target, and
> +should be the usernames of two separate users on the local machine,
> +both of which the current user can be ssh to without a password.

can ssh to

> +
> +These users will be used when by board files that simulate remote

used by board files

> +targets by switching to a different user on the same machine.  These
> +users will have random files copied into their $HOME directories, so
> +it is a good idea to setup new users just for this purpose.
> +
> +Testing All Simple Boards
> +*************************
> +
> +There are a number of boards that ship with GDB that simulate common
> +debug scenarios.  For example by sshing to a different user on the
> +local machine and running gdbserver as this alternative user we aim to
> +simulate a true remote debug experience.
> +
> +There is a script binutils-gdb/gdb/testssuite/make-check-all.sh which
> +can be used to run a defined set of tests using all of the available
> +simple board files.  Support for using this script is also included in
> +GDB's makefile, and can be used as:
> +
> +  make check-all-boards GDB_TARGET_USERNAME=remote-target \
> +			GDB_HOST_USERNAME=remote-host \
> +			TESTS="gdb.base/break.exp"
> +
> +The 'remote-target' and 'remote-host' can be replaced with any user
> +names on the local machine, the only requirements are that the current
> +user must be able to ssh to these users without a password, and these
> +users must be happy to have arbitrary files copied into their $HOME
> +directory.  Ideally, these users would be setup just for GDB testing.
> +
> +The check-all-boards target requires that TESTS be defined, though it
> +is fine to include multiple tests.
> +
> +There results are preserved and can be found in

The results

> +gdb/testsuite/check-all/, within this directory the results are split
> +by the board file used.
> +

Thanks,
- Tom
  

Patch

diff --git a/gdb/Makefile.in b/gdb/Makefile.in
index 9c0a0bff2cd..491003c7543 100644
--- a/gdb/Makefile.in
+++ b/gdb/Makefile.in
@@ -1971,6 +1971,14 @@  check-parallel: force
 	  $(MAKE) $(TARGET_FLAGS_TO_PASS) check-parallel; \
 	else true; fi
 
+check-all-boards: force
+	@if [ -f testsuite/Makefile ]; then \
+	  rootme=`pwd`; export rootme; \
+	  rootsrc=`cd $(srcdir); pwd`; export rootsrc; \
+	  cd testsuite; \
+	  $(MAKE) $(TARGET_FLAGS_TO_PASS) check-all-boards; \
+	else true; fi
+
 # The idea is to parallelize testing of multilibs, for example:
 #   make -j3 check//sh-hms-sim/{-m1,-m2,-m3,-m3e,-m4}/{,-nofpu}
 # will run 3 concurrent sessions of check, eventually testing all 10
diff --git a/gdb/testsuite/Makefile.in b/gdb/testsuite/Makefile.in
index 3fc9a907f5b..3488e6acc48 100644
--- a/gdb/testsuite/Makefile.in
+++ b/gdb/testsuite/Makefile.in
@@ -368,6 +368,25 @@  check-perf: all $(abs_builddir)/site.exp
 	@if test ! -d gdb.perf; then mkdir gdb.perf; fi
 	$(DO_RUNTEST) --directory=gdb.perf --outdir gdb.perf GDB_PERFTEST_MODE=$(GDB_PERFTEST_MODE) $(RUNTESTFLAGS) $(TIMESTAMP)
 
+
+check-all-boards: all $(abs_builddir)/site.exp
+	@if [ -z "$(GDB_TARGET_USERNAME)" ]; then \
+		echo "Must define GDB_TARGET_USERNAME"; \
+		false; \
+	fi
+	@if [ -z "$(GDB_HOST_USERNAME)" ]; then \
+		echo "Must define GDB_HOST_USERNAME"; \
+		false; \
+	fi
+	@if [ -z "$(TESTS)" ]; then \
+		echo "Must define TESTS"; \
+		false; \
+	fi
+	${abs_srcdir}/make-check-all.sh --keep-results \
+		--host-user "$(GDB_HOST_USERNAME)" \
+		--target-user "$(GDB_TARGET_USERNAME)" \
+		"$(TESTS)"
+
 force:;
 
 clean mostlyclean:
diff --git a/gdb/testsuite/README b/gdb/testsuite/README
index 330a385f349..5ad0293649e 100644
--- a/gdb/testsuite/README
+++ b/gdb/testsuite/README
@@ -328,6 +328,48 @@  For example, to turn on gdbserver debugging, you can do:
 
 	make check GDBSERVER_DEBUG="debug,replay"
 
+GDB_TARGET_USERNAME
+GDB_HOST_USERNAME
+
+These settings are only used with the check-all-boards target, and
+should be the usernames of two separate users on the local machine,
+both of which the current user can be ssh to without a password.
+
+These users will be used when by board files that simulate remote
+targets by switching to a different user on the same machine.  These
+users will have random files copied into their $HOME directories, so
+it is a good idea to setup new users just for this purpose.
+
+Testing All Simple Boards
+*************************
+
+There are a number of boards that ship with GDB that simulate common
+debug scenarios.  For example by sshing to a different user on the
+local machine and running gdbserver as this alternative user we aim to
+simulate a true remote debug experience.
+
+There is a script binutils-gdb/gdb/testssuite/make-check-all.sh which
+can be used to run a defined set of tests using all of the available
+simple board files.  Support for using this script is also included in
+GDB's makefile, and can be used as:
+
+  make check-all-boards GDB_TARGET_USERNAME=remote-target \
+			GDB_HOST_USERNAME=remote-host \
+			TESTS="gdb.base/break.exp"
+
+The 'remote-target' and 'remote-host' can be replaced with any user
+names on the local machine, the only requirements are that the current
+user must be able to ssh to these users without a password, and these
+users must be happy to have arbitrary files copied into their $HOME
+directory.  Ideally, these users would be setup just for GDB testing.
+
+The check-all-boards target requires that TESTS be defined, though it
+is fine to include multiple tests.
+
+There results are preserved and can be found in
+gdb/testsuite/check-all/, within this directory the results are split
+by the board file used.
+
 Architecture-specific Parameters
 ******************************