]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
[gdb/testsuite] Use unique portnum in parallel testing (check//% case)
authorTom de Vries <tdevries@suse.de>
Sat, 4 May 2024 08:41:09 +0000 (10:41 +0200)
committerTom de Vries <tdevries@suse.de>
Sat, 4 May 2024 08:41:09 +0000 (10:41 +0200)
Make target check//% is the gdb variant of a similar gcc make target [1].

When running tests using check//%:
...
$ cd build/gdb
$ make check//unix/{-fPIE/-pie,-fno-PIE/-no-pie} -j2 TESTS=gdb.server/*.exp
...
we get:
...
$ cat build/gdb/testsuite.unix.-fPIE.-pie/cache/portnum
2427
$ cat build/gdb/testsuite.unix.-fno-PIE.-no-pie/cache/portnum
2423
...

The problem is that there are two portnum files used in parallel.

Fix this by:
- creating a common lockdir build/gdb/testsuite.lockdir for make target
  check//%,
- passing this down to the runtests invocations using variable GDB_LOCK_DIR,
  and
- using GDB_LOCK_DIR in lock_dir.

Tested on aarch64-linux.

Approved-By: Tom Tromey <tom@tromey.com>
PR testsuite/31632
Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=31632

[1] https://gcc.gnu.org/install/test.html

gdb/Makefile.in
gdb/testsuite/lib/gdb-utils.exp

index cb19de69372d54046434ee4d78e8acedc16d6dda..234d0051f494cd9a0ad1207f8e0cb323c76bafb7 100644 (file)
@@ -2003,6 +2003,10 @@ check-all-boards: force
          $(MAKE) $(TARGET_FLAGS_TO_PASS) check-all-boards; \
        else true; fi
 
+testsuite.lockdir: force
+       rm -rf $@
+       mkdir -p $@
+
 # 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
@@ -2011,7 +2015,7 @@ check-all-boards: force
 # used, this rule will harmlessly fail to match.  Used FORCE_PARALLEL to
 # prevent serialized checking due to the passed RUNTESTFLAGS.
 # FIXME: use config.status --config not --version, when available.
-check//%: force
+check//%: force testsuite.lockdir
        @if [ -f testsuite/config.status ]; then \
          rootme=`pwd`; export rootme; \
          rootsrc=`cd $(srcdir); pwd`; export rootsrc; \
@@ -2029,7 +2033,7 @@ check//%: force
             ); \
          else :; fi && cd $$testdir && \
          $(MAKE) $(TARGET_FLAGS_TO_PASS) \
-           RUNTESTFLAGS="--target_board=$$variant $(RUNTESTFLAGS)" \
+           RUNTESTFLAGS="GDB_LOCK_DIR=$$rootme/testsuite.lockdir --target_board=$$variant $(RUNTESTFLAGS)" \
            FORCE_PARALLEL=$(if $(FORCE_PARALLEL),1,$(if $(RUNTESTFLAGS),,1)) \
            "$$target"; \
        else true; fi
index 1f30d807ff052a1987c26206d7b340320e815da4..95c53d030d880340f042cabc91bd84adcc1e9f0d 100644 (file)
@@ -180,6 +180,11 @@ proc lock_file_release {info} {
 # Return directory where we keep lock files.
 
 proc lock_dir {} {
+    if { [info exists ::GDB_LOCK_DIR] } {
+       # When using check//.
+       return $::GDB_LOCK_DIR
+    }
+
     return [make_gdb_parallel_path cache]
 }