All of lore.kernel.org
 help / color / mirror / Atom feed
* [PULL 00/19] testing updates (tcg, gdbstub)
@ 2026-10-23 18:05 Alex Bennée
  2026-10-23 18:05 ` [PULL 01/19] tests/functional: test_acpi_bits requires TCG Alex Bennée
                   ` (19 more replies)
  0 siblings, 20 replies; 26+ messages in thread
From: Alex Bennée @ 2026-10-23 18:05 UTC (permalink / raw)
  To: qemu-devel; +Cc: Alex Bennée

The following changes since commit b6c4b7e86dec12d07f5cac65265b986d38ee9002:

  Merge tag 'pbouvier/pr/tcg_tests-20261022' of https://gitlab.com/p-b-o/qemu into staging (2026-10-23 09:09:11 +0200)

are available in the Git repository at:

  https://gitlab.com/stsquad/qemu.git tags/pull-11.2-gdbstub-kvm-231026-1

for you to fetch changes up to e0a7139b213487a59023d88e7d56b7e95d90d553:

  tests/functional: add tuxrun kvm gdb test for s390x (2026-10-23 17:32:05 +0100)

----------------------------------------------------------------
testing updates (tcg, gdbstub):

  - make sure we have TCG to run test_acpi_bits
  - fix overflow in linux-sigrtminmax
  - make .dir-locals aware of PYTHONPATH
  - detect gdb in top-level meson
  - fetch kernel assets with symbols for x86, aarch64 and s390 tuxruns
  - use arrays in gdb run-test to make quoting less messy
  - add support for --symbols and --kargs to gdbstub run-test.py
  - restore old kvm gdb test script with a few fixes
  - add tuxrun_kvm_gdb tests for x86,aarch64 and s390

----------------------------------------------------------------
Alex Bennée (18):
      tests/functional: test_acpi_bits requires TCG
      .dir-locals: include QEMU code in PYTHONPATH
      meson: move gdb detection into the top level build file
      tests/functional: allow tuxrun tests to be passed "accel"
      tests/functional: split x86_64 tuxrun into tcg and kvm run
      tests/functional: update x86_64 tuxrun images
      tests/guest-debug: convert gdb_cmd to an array
      tests/guest-debug: convert cmd to an qemu_cmd array
      tests/guest-debug: add --kargs option to run-test
      tests/guest-debug: add --symbols option to run-test
      tests/functional: teach tuxrun about launching gdb tests
      tests/functional: add tuxrun kvm gdb test for x86_64
      tests/functional: split aarch64 tuxrun into tcg and kvm run
      tests/functional: update arm64 tuxrun images
      tests/functional: add tuxrun kvm gdb test for arm64
      tests/functional: split s390x tuxrun into tcg and kvm run
      tests/functional: update s390x tuxrun images
      tests/functional: add tuxrun kvm gdb test for s390x

Max Filippov (1):
      tests/tcg: fix buffer overflow in multiarch/linux/linux-sigrtminmax

 meson.build                                     |  15 +--
 tests/tcg/multiarch/linux/linux-sigrtminmax.c   |   2 +-
 .dir-locals.el                                  |   8 +-
 tests/functional/aarch64/test_tuxrun.py         |  35 ++++-
 tests/functional/gdb-scripts/kernel_gdb_test.py | 164 ++++++++++++++++++++++++
 tests/functional/meson.build                    |   5 +-
 tests/functional/qemu_test/tuxruntest.py        | 108 ++++++++++++++--
 tests/functional/s390x/test_tuxrun.py           |  37 +++++-
 tests/functional/sh4/test_tuxrun.py             |   6 +-
 tests/functional/x86_64/test_acpi_bits.py       |   3 +
 tests/functional/x86_64/test_tuxrun.py          |  45 ++++++-
 tests/guest-debug/run-test.py                   |  83 ++++++++----
 tests/tcg/meson.build                           |   5 -
 13 files changed, 443 insertions(+), 73 deletions(-)
 create mode 100644 tests/functional/gdb-scripts/kernel_gdb_test.py

-- 
2.47.3



^ permalink raw reply	[flat|nested] 26+ messages in thread

* [PULL 01/19] tests/functional: test_acpi_bits requires TCG
  2026-10-23 18:05 [PULL 00/19] testing updates (tcg, gdbstub) Alex Bennée
@ 2026-10-23 18:05 ` Alex Bennée
  2026-10-23 18:05 ` [PULL 02/19] tests/tcg: fix buffer overflow in multiarch/linux/linux-sigrtminmax Alex Bennée
                   ` (18 subsequent siblings)
  19 siblings, 0 replies; 26+ messages in thread
From: Alex Bennée @ 2026-10-23 18:05 UTC (permalink / raw)
  To: qemu-devel
  Cc: Alex Bennée, Marc-André Lureau, Thomas Huth,
	Philippe Mathieu-Daudé, Ilya Leoshkevich, Ani Sinha,
	Michael S. Tsirkin, Paolo Bonzini, Zhao Liu

Running a full thorough test suite on a KVM-only build fails due to
acpi bits needing icount, therefore tcg. Declare the restriction so
the test harness can skip it.

Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Reviewed-by: Thomas Huth <thuth@redhat.com>
Reviewed-by: Philippe Mathieu-Daudé <philmd@oss.qualcomm.com>
Reviewed-by: Ilya Leoshkevich <iii@linux.ibm.com>
Message-ID: <20261019192704.3220373-2-alex.bennee@linaro.org>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>

diff --git a/tests/functional/x86_64/test_acpi_bits.py b/tests/functional/x86_64/test_acpi_bits.py
index ec716d643bf..d445660f0ed 100755
--- a/tests/functional/x86_64/test_acpi_bits.py
+++ b/tests/functional/x86_64/test_acpi_bits.py
@@ -303,6 +303,9 @@ def test_acpi_smbios_bits(self):
         """The main test case implementation."""
 
         self.set_machine('pc')
+        # see icount comment below
+        self.require_accelerator('tcg')
+
         iso_file = self.scratch_file('bits-%d.iso' % self.BITS_INTERNAL_VER)
 
         self.assertTrue(os.access(iso_file, os.R_OK))
-- 
2.47.3



^ permalink raw reply related	[flat|nested] 26+ messages in thread

* [PULL 02/19] tests/tcg: fix buffer overflow in multiarch/linux/linux-sigrtminmax
  2026-10-23 18:05 [PULL 00/19] testing updates (tcg, gdbstub) Alex Bennée
  2026-10-23 18:05 ` [PULL 01/19] tests/functional: test_acpi_bits requires TCG Alex Bennée
@ 2026-10-23 18:05 ` Alex Bennée
  2026-10-23 18:05 ` [PULL 03/19] .dir-locals: include QEMU code in PYTHONPATH Alex Bennée
                   ` (17 subsequent siblings)
  19 siblings, 0 replies; 26+ messages in thread
From: Alex Bennée @ 2026-10-23 18:05 UTC (permalink / raw)
  To: qemu-devel
  Cc: Max Filippov, Alex Bennée, Richard Henderson,
	Philippe Mathieu-Daudé, Ilya Leoshkevich,
	Marc-André Lureau, Pierrick Bouvier

From: Max Filippov <jcmvbkbc@gmail.com>

Fix new_argv allocation size to be `(argc + 2) * sizeof(char *)` bytes,
which matches the way it's used to store `argc + 2` pointers.

This fixes the test for me, which otherwise fails on xtensa with the
following message

  linux-sigrtminmax.c: 59: main: Assertion `execve(new_argv[0], new_argv, environ) == 0' failed.'.

Signed-off-by: Max Filippov <jcmvbkbc@gmail.com>
Reviewed-by: Alex Bennée <alex.bennee@linaro.org>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Fixes: 6f58b090328 ("tests/tcg: Add SIGRTMIN/SIGRTMAX test")
Reviewed-by: Philippe Mathieu-Daudé <philmd@oss.qualcomm.com>
Reviewed-by: Ilya Leoshkevich <iii@linux.ibm.com>
Message-ID: <20260708150541.2137546-1-jcmvbkbc@gmail.com>
Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Message-ID: <20261019192704.3220373-3-alex.bennee@linaro.org>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>

diff --git a/tests/tcg/multiarch/linux/linux-sigrtminmax.c b/tests/tcg/multiarch/linux/linux-sigrtminmax.c
index a7059aacd9c..b5ea65f3d39 100644
--- a/tests/tcg/multiarch/linux/linux-sigrtminmax.c
+++ b/tests/tcg/multiarch/linux/linux-sigrtminmax.c
@@ -39,7 +39,7 @@ int main(int argc, char **argv)
     assert(qemu);
 
     if (!getenv("QEMU_RTSIG_MAP")) {
-        char **new_argv = malloc((argc + 2) + sizeof(char *));
+        char **new_argv = malloc((argc + 2) * sizeof(char *));
         int tsig1, hsig1, count1, tsig2, hsig2, count2;
         char rt_sigmap[64];
 
-- 
2.47.3



^ permalink raw reply related	[flat|nested] 26+ messages in thread

* [PULL 03/19] .dir-locals: include QEMU code in PYTHONPATH
  2026-10-23 18:05 [PULL 00/19] testing updates (tcg, gdbstub) Alex Bennée
  2026-10-23 18:05 ` [PULL 01/19] tests/functional: test_acpi_bits requires TCG Alex Bennée
  2026-10-23 18:05 ` [PULL 02/19] tests/tcg: fix buffer overflow in multiarch/linux/linux-sigrtminmax Alex Bennée
@ 2026-10-23 18:05 ` Alex Bennée
  2026-11-12 11:06   ` Peter Maydell
  2026-10-23 18:05 ` [PULL 04/19] meson: move gdb detection into the top level build file Alex Bennée
                   ` (16 subsequent siblings)
  19 siblings, 1 reply; 26+ messages in thread
From: Alex Bennée @ 2026-10-23 18:05 UTC (permalink / raw)
  To: qemu-devel; +Cc: Alex Bennée, Daniel P. Berrangé

When editing python code the linters tools have a hard time with our
imports as they can't be found. To ease this we can expand a
PYTHONPATH in .dir-locals so at least Emacs users can have less
warnings in their editor.

I still get complaints from python-mypy about missing library stubs
that mean it can't do proper type analysis though.

Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
Message-ID: <20261019192704.3220373-4-alex.bennee@linaro.org>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>

diff --git a/.dir-locals.el b/.dir-locals.el
index 3ac0cfc6f0d..51871619422 100644
--- a/.dir-locals.el
+++ b/.dir-locals.el
@@ -1,2 +1,8 @@
 ((c-mode . ((c-file-style . "stroustrup")
-	    (indent-tabs-mode . nil))))
+	    (indent-tabs-mode . nil)))
+ (python-mode .
+              ((eval . (when-let* ((root (locate-dominating-file default-directory ".dir-locals.el")))
+                         (setq-local process-environment (copy-sequence process-environment))
+                         (setenv "PYTHONPATH"
+                                 (concat (expand-file-name "python" root) ":"
+                                         (expand-file-name "tests/functional" root))))))))
-- 
2.47.3



^ permalink raw reply related	[flat|nested] 26+ messages in thread

* [PULL 04/19] meson: move gdb detection into the top level build file
  2026-10-23 18:05 [PULL 00/19] testing updates (tcg, gdbstub) Alex Bennée
                   ` (2 preceding siblings ...)
  2026-10-23 18:05 ` [PULL 03/19] .dir-locals: include QEMU code in PYTHONPATH Alex Bennée
@ 2026-10-23 18:05 ` Alex Bennée
  2026-10-23 18:05 ` [PULL 05/19] tests/functional: allow tuxrun tests to be passed "accel" Alex Bennée
                   ` (15 subsequent siblings)
  19 siblings, 0 replies; 26+ messages in thread
From: Alex Bennée @ 2026-10-23 18:05 UTC (permalink / raw)
  To: qemu-devel
  Cc: Alex Bennée, Pierrick Bouvier, Marc-André Lureau,
	Paolo Bonzini, Daniel P. Berrangé, Thomas Huth,
	Philippe Mathieu-Daudé

Currently gdb is only used by TCG based tests but hypervisors want to
use gdbstub too. To be able to test this case we need to always probe
and report the gdb we have.

Reviewed-by: Pierrick Bouvier <pierrick.bouvier@oss.qualcomm.com>
Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Message-ID: <20261019192704.3220373-5-alex.bennee@linaro.org>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>

diff --git a/meson.build b/meson.build
index bbef9d9c293..4f29bc6cc33 100644
--- a/meson.build
+++ b/meson.build
@@ -163,6 +163,12 @@ else
   iasl = find_program(get_option('iasl'), required: true)
 endif
 
+if get_option('gdb') == ''
+  gdb = find_program(['gdb-multiarch', 'gdb'], required: false)
+else
+  gdb = find_program(get_option('gdb'), required: true)
+endif
+
 edk2_targets = [ 'arm-softmmu', 'aarch64-softmmu', 'i386-softmmu', 'x86_64-softmmu', 'riscv64-softmmu', 'loongarch64-softmmu' ]
 unpack_edk2_blobs = false
 foreach target : edk2_targets
@@ -4710,14 +4716,7 @@ summary(summary_info, bool_yn: true, section: 'Directories')
 summary_info = {}
 summary_info += {'python':            '@0@ (version: @1@)'.format(python.full_path(), python.language_version())}
 summary_info += {'sphinx-build':      sphinx_build}
-
-# FIXME: the [binaries] section of machine files, which can be probed
-# with find_program(), would be great for passing gdb and genisoimage
-# paths from configure to Meson.  However, there seems to be no way to
-# hide a program (for example if gdb is too old).
-if config_host.has_key('GDB')
-  summary_info += {'gdb':             config_host['GDB']}
-endif
+summary_info += {'gdb':               gdb}
 summary_info += {'iasl':              iasl}
 summary_info += {'genisoimage':       config_host['GENISOIMAGE']}
 if host_os == 'windows' and have_ga
diff --git a/tests/functional/meson.build b/tests/functional/meson.build
index c7362dd00ef..68c601d4036 100644
--- a/tests/functional/meson.build
+++ b/tests/functional/meson.build
@@ -83,9 +83,8 @@ foreach speed : ['quick', 'thorough']
                      separator : ':')
 
     # Define the GDB environment variable if gdb is available.
-    gdb = get_option('gdb')
-    if gdb != ''
-      test_env.set('QEMU_TEST_GDB', gdb)
+    if gdb.found()
+      test_env.set('QEMU_TEST_GDB', gdb.full_path())
     endif
 
     foreach test : target_tests
diff --git a/tests/tcg/meson.build b/tests/tcg/meson.build
index 1cd2d421cea..06f013fbe3d 100644
--- a/tests/tcg/meson.build
+++ b/tests/tcg/meson.build
@@ -1,11 +1,6 @@
 env = find_program('env')
 
 docker_wrapper = find_program('../docker/docker.py')
-if get_option('gdb') != ''
-  gdb = find_program(get_option('gdb'), required: true)
-else
-  gdb = find_program(['gdb-multiarch', 'gdb'], required: false)
-endif
 prog_check_plugin_output = find_program('./scripts/check_plugin_output.sh')
 prog_gdb_test = find_program('../guest-debug/run-test.py')
 prog_record_replay = find_program('./scripts/record_replay.sh')
-- 
2.47.3



^ permalink raw reply related	[flat|nested] 26+ messages in thread

* [PULL 05/19] tests/functional: allow tuxrun tests to be passed "accel"
  2026-10-23 18:05 [PULL 00/19] testing updates (tcg, gdbstub) Alex Bennée
                   ` (3 preceding siblings ...)
  2026-10-23 18:05 ` [PULL 04/19] meson: move gdb detection into the top level build file Alex Bennée
@ 2026-10-23 18:05 ` Alex Bennée
  2026-10-23 18:05 ` [PULL 06/19] tests/functional: split x86_64 tuxrun into tcg and kvm run Alex Bennée
                   ` (14 subsequent siblings)
  19 siblings, 0 replies; 26+ messages in thread
From: Alex Bennée @ 2026-10-23 18:05 UTC (permalink / raw)
  To: qemu-devel
  Cc: Alex Bennée, Ilya Leoshkevich, Marc-André Lureau,
	Thomas Huth, Philippe Mathieu-Daudé, Daniel P. Berrangé,
	Pierrick Bouvier, Yoshinori Sato

For some tests we are about to add we want the flexibility to force
"kvm" so give them that ability.

Reviewed-by: Ilya Leoshkevich <iii@linux.ibm.com>
Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Message-ID: <20261019192704.3220373-6-alex.bennee@linaro.org>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>

diff --git a/tests/functional/qemu_test/tuxruntest.py b/tests/functional/qemu_test/tuxruntest.py
index 6c442ff0dc4..ca1589fea37 100644
--- a/tests/functional/qemu_test/tuxruntest.py
+++ b/tests/functional/qemu_test/tuxruntest.py
@@ -65,7 +65,7 @@ def fetch_tuxrun_assets(self, kernel_asset, rootfs_asset, dtb_asset=None):
 
         return (kernel_image, disk_image, dtb)
 
-    def prepare_run(self, kernel, disk, drive, dtb=None, console_index=0):
+    def prepare_run(self, accel, kernel, disk, drive, dtb=None, console_index=0):
         """
         Setup to run and add the common parameters to the system
         """
@@ -79,6 +79,10 @@ def prepare_run(self, kernel, disk, drive, dtb=None, console_index=0):
         self.kcmd_line += f" root=/dev/{self.root}"
         self.kcmd_line += f" console={self.console}"
 
+        # have we specified an accelerator?
+        if accel:
+            self.vm.add_args('-accel', accel)
+
         self.vm.add_args('-kernel', kernel,
                          '-append', self.kcmd_line,
                          '-blockdev', blockdev)
@@ -118,6 +122,7 @@ def run_tuxtest_tests(self, haltmsg):
     def common_tuxrun(self,
                       kernel_asset,
                       rootfs_asset,
+                      accel=None,
                       dtb_asset=None,
                       drive="virtio-blk-device",
                       haltmsg="reboot: System halted",
@@ -130,7 +135,7 @@ def common_tuxrun(self,
         (kernel, disk, dtb) = self.fetch_tuxrun_assets(kernel_asset, rootfs_asset,
                                                        dtb_asset)
 
-        self.prepare_run(kernel, disk, drive, dtb, console_index)
+        self.prepare_run(accel, kernel, disk, drive, dtb, console_index)
         self.vm.launch()
         self.run_tuxtest_tests(haltmsg)
         os.remove(disk)
diff --git a/tests/functional/sh4/test_tuxrun.py b/tests/functional/sh4/test_tuxrun.py
index 1748f8c7eff..42b503585b2 100755
--- a/tests/functional/sh4/test_tuxrun.py
+++ b/tests/functional/sh4/test_tuxrun.py
@@ -35,7 +35,7 @@ def test_sh4(self):
                                                        self.ASSET_SH4_ROOTFS)
 
         # the console comes on the second serial port
-        self.prepare_run(kernel, disk,
+        self.prepare_run(None, kernel, disk,
                          "driver=ide-hd,bus=ide.0,unit=0",
                          console_index=1)
         self.vm.launch()
-- 
2.47.3



^ permalink raw reply related	[flat|nested] 26+ messages in thread

* [PULL 06/19] tests/functional: split x86_64 tuxrun into tcg and kvm run
  2026-10-23 18:05 [PULL 00/19] testing updates (tcg, gdbstub) Alex Bennée
                   ` (4 preceding siblings ...)
  2026-10-23 18:05 ` [PULL 05/19] tests/functional: allow tuxrun tests to be passed "accel" Alex Bennée
@ 2026-10-23 18:05 ` Alex Bennée
  2026-10-23 18:05 ` [PULL 07/19] tests/functional: update x86_64 tuxrun images Alex Bennée
                   ` (13 subsequent siblings)
  19 siblings, 0 replies; 26+ messages in thread
From: Alex Bennée @ 2026-10-23 18:05 UTC (permalink / raw)
  To: qemu-devel
  Cc: Alex Bennée, Marc-André Lureau, Pierrick Bouvier,
	Michael S. Tsirkin, Paolo Bonzini, Zhao Liu

Add an explicit "kvm" run to the tuxrun tests. Although running on an
x86_64 host would probably have defaulted to "kvm" anyway we want to
exercise specific features later.

Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Message-ID: <20261019192704.3220373-7-alex.bennee@linaro.org>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>

diff --git a/tests/functional/x86_64/test_tuxrun.py b/tests/functional/x86_64/test_tuxrun.py
index fcbc62b1b0f..729f6447d05 100755
--- a/tests/functional/x86_64/test_tuxrun.py
+++ b/tests/functional/x86_64/test_tuxrun.py
@@ -24,13 +24,28 @@ class TuxRunX86Test(TuxRunBaselineTest):
         '4b8b2a99117519c5290e1202cb36eb6c7aaba92b357b5160f5970cf5fb78a751')
 
     def test_x86_64(self):
+        self.require_accelerator("tcg")
+
+        self.set_machine('q35')
+        self.cpu="Nehalem"
+        self.root='sda'
+        self.wait_for_shutdown=False
+        self.common_tuxrun(kernel_asset=self.ASSET_X86_64_KERNEL,
+                           rootfs_asset=self.ASSET_X86_64_ROOTFS,
+                           drive="driver=ide-hd,bus=ide.0,unit=0",
+                           accel="tcg")
+
+    def test_x86_64_kvm(self):
+        self.require_accelerator("kvm")
+
         self.set_machine('q35')
         self.cpu="Nehalem"
         self.root='sda'
         self.wait_for_shutdown=False
         self.common_tuxrun(kernel_asset=self.ASSET_X86_64_KERNEL,
                            rootfs_asset=self.ASSET_X86_64_ROOTFS,
-                           drive="driver=ide-hd,bus=ide.0,unit=0")
+                           drive="driver=ide-hd,bus=ide.0,unit=0",
+                           accel="kvm")
 
 if __name__ == '__main__':
     TuxRunBaselineTest.main()
-- 
2.47.3



^ permalink raw reply related	[flat|nested] 26+ messages in thread

* [PULL 07/19] tests/functional: update x86_64 tuxrun images
  2026-10-23 18:05 [PULL 00/19] testing updates (tcg, gdbstub) Alex Bennée
                   ` (5 preceding siblings ...)
  2026-10-23 18:05 ` [PULL 06/19] tests/functional: split x86_64 tuxrun into tcg and kvm run Alex Bennée
@ 2026-10-23 18:05 ` Alex Bennée
  2026-10-23 18:05 ` [PULL 08/19] tests/guest-debug: convert gdb_cmd to an array Alex Bennée
                   ` (12 subsequent siblings)
  19 siblings, 0 replies; 26+ messages in thread
From: Alex Bennée @ 2026-10-23 18:05 UTC (permalink / raw)
  To: qemu-devel
  Cc: Alex Bennée, Marc-André Lureau, Michael S. Tsirkin,
	Pierrick Bouvier, Paolo Bonzini, Zhao Liu

We now split the fetching of the buildroot image from the kernel
itself. This is because we will want to access additional metadata in
future tests.

Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Message-ID: <20261019192704.3220373-8-alex.bennee@linaro.org>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>

diff --git a/tests/functional/x86_64/test_tuxrun.py b/tests/functional/x86_64/test_tuxrun.py
index 729f6447d05..026b373accb 100755
--- a/tests/functional/x86_64/test_tuxrun.py
+++ b/tests/functional/x86_64/test_tuxrun.py
@@ -17,11 +17,11 @@
 class TuxRunX86Test(TuxRunBaselineTest):
 
     ASSET_X86_64_KERNEL = Asset(
-        'https://storage.tuxboot.com/buildroot/20241119/x86_64/bzImage',
-        'f57bfc6553bcd6e0a54aab86095bf642b33b5571d14e3af1731b18c87ed5aef8')
+        'https://storage.tuxboot.com/kernels/6.18.54/x86_64/bzImage',
+        '24a3ade610c2cc426ff821050de8a35930b0371357d94cc2c334abac6658552b')
     ASSET_X86_64_ROOTFS = Asset(
-        'https://storage.tuxboot.com/buildroot/20241119/x86_64/rootfs.ext4.zst',
-        '4b8b2a99117519c5290e1202cb36eb6c7aaba92b357b5160f5970cf5fb78a751')
+        'https://storage.tuxboot.com/buildroot/20260924/x86_64/rootfs.ext4.zst',
+        '8e310455b0244414ccff29c507f7ccfd4032e3587cc405e49ab0322738e3e27c')
 
     def test_x86_64(self):
         self.require_accelerator("tcg")
-- 
2.47.3



^ permalink raw reply related	[flat|nested] 26+ messages in thread

* [PULL 08/19] tests/guest-debug: convert gdb_cmd to an array
  2026-10-23 18:05 [PULL 00/19] testing updates (tcg, gdbstub) Alex Bennée
                   ` (6 preceding siblings ...)
  2026-10-23 18:05 ` [PULL 07/19] tests/functional: update x86_64 tuxrun images Alex Bennée
@ 2026-10-23 18:05 ` Alex Bennée
  2026-10-23 18:05 ` [PULL 09/19] tests/guest-debug: convert cmd to an qemu_cmd array Alex Bennée
                   ` (11 subsequent siblings)
  19 siblings, 0 replies; 26+ messages in thread
From: Alex Bennée @ 2026-10-23 18:05 UTC (permalink / raw)
  To: qemu-devel; +Cc: Alex Bennée, Ilya Leoshkevich, Thomas Huth

Passing a plain string to subprocess involves making sure the escaping
is correct so the underlying shell doesn't get confused. This can be
tricky to track across multiple  processes. To simplify this build the
command as an array and execute gdb directly without involving the
shell.

We add a mini-helper to make the log output a bit more copy and paste
friendly.

Suggested-by: Ilya Leoshkevich <iii@linux.ibm.com>
Reviewed-by: Thomas Huth <thuth@redhat.com>
Reviewed-by: Ilya Leoshkevich <iii@linux.ibm.com>
Message-ID: <20261019192704.3220373-9-alex.bennee@linaro.org>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>

diff --git a/tests/guest-debug/run-test.py b/tests/guest-debug/run-test.py
index 838c1c26971..ab3e3dc9ed5 100755
--- a/tests/guest-debug/run-test.py
+++ b/tests/guest-debug/run-test.py
@@ -51,6 +51,10 @@ def log(output, msg):
         print(msg)
 
 
+def format_cmd(cmd):
+    return " ".join(shlex.quote(arg) for arg in cmd)
+
+
 if __name__ == '__main__':
     args = get_args()
 
@@ -98,32 +102,32 @@ def log(output, msg):
     inferior = subprocess.Popen(shlex.split(cmd))
 
     # Now launch gdb with our test and collect the result
-    gdb_cmd = "%s %s" % (args.gdb, args.binary)
+    gdb_cmd = [args.gdb, args.binary]
     if args.gdb_args:
-        gdb_cmd += " %s" % (args.gdb_args)
+        gdb_cmd.extend(shlex.split(args.gdb_args))
+
     # run quietly and ignore .gdbinit
-    gdb_cmd += " -q -n -batch"
+    gdb_cmd.extend(["-q", "-n", "-batch"])
     # disable pagination
-    gdb_cmd += " -ex 'set pagination off'"
+    gdb_cmd.extend(["-ex", "set pagination off"])
     # disable prompts in case of crash
-    gdb_cmd += " -ex 'set confirm off'"
+    gdb_cmd.extend(["-ex", "set confirm off"])
     # connect to remote
-    gdb_cmd += " -ex 'target remote %s'" % (socket_name)
+    gdb_cmd.extend(["-ex", f"target remote {socket_name}"])
     # finally the test script itself
     if args.test:
         if args.test_args:
-            gdb_cmd += f" -ex \"py sys.argv={args.test_args}\""
-        gdb_cmd += " -x %s" % (args.test)
-
+            gdb_cmd.extend(["-ex", f"py sys.argv={args.test_args}"])
+        gdb_cmd.extend(["-x", args.test])
 
     sleep(1)
-    log(output, "GDB CMD: %s" % (gdb_cmd))
+    log(output, "GDB CMD: %s" % (format_cmd(gdb_cmd)))
 
     gdb_env = dict(os.environ)
     gdb_pythonpath = gdb_env.get("PYTHONPATH", "").split(os.pathsep)
     gdb_pythonpath.append(os.path.dirname(os.path.realpath(__file__)))
     gdb_env["PYTHONPATH"] = os.pathsep.join(gdb_pythonpath)
-    result = subprocess.call(gdb_cmd, shell=True, stdout=output, stderr=stderr,
+    result = subprocess.call(gdb_cmd, stdout=output, stderr=stderr,
                              env=gdb_env)
 
     # A result of greater than 128 indicates a fatal signal (likely a
-- 
2.47.3



^ permalink raw reply related	[flat|nested] 26+ messages in thread

* [PULL 09/19] tests/guest-debug: convert cmd to an qemu_cmd array
  2026-10-23 18:05 [PULL 00/19] testing updates (tcg, gdbstub) Alex Bennée
                   ` (7 preceding siblings ...)
  2026-10-23 18:05 ` [PULL 08/19] tests/guest-debug: convert gdb_cmd to an array Alex Bennée
@ 2026-10-23 18:05 ` Alex Bennée
  2026-10-23 18:05 ` [PULL 10/19] tests/guest-debug: add --kargs option to run-test Alex Bennée
                   ` (10 subsequent siblings)
  19 siblings, 0 replies; 26+ messages in thread
From: Alex Bennée @ 2026-10-23 18:05 UTC (permalink / raw)
  To: qemu-devel; +Cc: Alex Bennée, Ilya Leoshkevich, Thomas Huth

As with gdb_cmd passing a plain string to a subprocess involves making
sure the escaping is correct so the underlying shell doesn't get
confused. Do the same as gdb_cmd and make the whole thing an array.

There are a few minor wrinkles with when args.binary is expected so
add some comments for that.

Suggested-by: Ilya Leoshkevich <iii@linux.ibm.com>
Reviewed-by: Thomas Huth <thuth@redhat.com>
Reviewed-by: Ilya Leoshkevich <iii@linux.ibm.com>
Message-ID: <20261019192704.3220373-10-alex.bennee@linaro.org>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>

diff --git a/tests/guest-debug/run-test.py b/tests/guest-debug/run-test.py
index ab3e3dc9ed5..5a8ec8a68b4 100755
--- a/tests/guest-debug/run-test.py
+++ b/tests/guest-debug/run-test.py
@@ -79,27 +79,32 @@ def format_cmd(cmd):
     socket_name = os.path.join(socket_dir.name, "gdbstub.socket")
 
     # Launch QEMU with binary
+    qemu_cmd = [args.qemu]
+    if args.qargs:
+        qemu_cmd.extend(shlex.split(args.qargs))
+
     if "system" in args.qemu:
-        if args.no_suspend:
-            suspend = ''
-        else:
-            suspend = ' -S'
-        cmd = f'{args.qemu} {args.qargs} {args.binary}' \
-            f'{suspend} -gdb unix:path={socket_name},server=on'
+        # for system mode we assume qargs has set-up for binary
+        qemu_cmd.append(args.binary)
+        if not args.no_suspend:
+            qemu_cmd.append("-S")
+        qemu_cmd.extend(["-gdb", f"unix:path={socket_name},server=on"])
         # There is no guest program command-line in system mode.
         assert not args.pargs
     else:
+        qemu_cmd.append("-g")
         if args.no_suspend:
-            suspend = ',suspend=n'
+            qemu_cmd.append(f"{socket_name},suspend=n")
         else:
-            suspend = ''
-        cmd = f'{args.qemu} {args.qargs} -g {socket_name}{suspend}' \
-            f' {args.binary}'
+            qemu_cmd.append(f"{socket_name}")
+
+        # for user mode binary and args always go at the end
+        qemu_cmd.append(args.binary)
         if args.pargs:
-            cmd += f' {args.pargs}'
+            qemu_cmd.extend(shlex.split(args.pargs))
 
-    log(output, "QEMU CMD: %s" % (cmd))
-    inferior = subprocess.Popen(shlex.split(cmd))
+    log(output, "QEMU CMD: %s" % (format_cmd(qemu_cmd)))
+    inferior = subprocess.Popen(qemu_cmd)
 
     # Now launch gdb with our test and collect the result
     gdb_cmd = [args.gdb, args.binary]
-- 
2.47.3



^ permalink raw reply related	[flat|nested] 26+ messages in thread

* [PULL 10/19] tests/guest-debug: add --kargs option to run-test
  2026-10-23 18:05 [PULL 00/19] testing updates (tcg, gdbstub) Alex Bennée
                   ` (8 preceding siblings ...)
  2026-10-23 18:05 ` [PULL 09/19] tests/guest-debug: convert cmd to an qemu_cmd array Alex Bennée
@ 2026-10-23 18:05 ` Alex Bennée
  2026-10-23 18:05 ` [PULL 11/19] tests/guest-debug: add --symbols " Alex Bennée
                   ` (9 subsequent siblings)
  19 siblings, 0 replies; 26+ messages in thread
From: Alex Bennée @ 2026-10-23 18:05 UTC (permalink / raw)
  To: qemu-devel; +Cc: Alex Bennée, Marc-André Lureau, Ilya Leoshkevich

When passing kernel arguments to QEMU with --append we need to take
care that things are properly escaped. It's easier if we get the run
script to do it for us that constructed the nested escaped --qargs.

Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Reviewed-by: Ilya Leoshkevich <iii@linux.ibm.com>
Message-ID: <20261019192704.3220373-11-alex.bennee@linaro.org>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>

diff --git a/tests/guest-debug/run-test.py b/tests/guest-debug/run-test.py
index 5a8ec8a68b4..48f9512d21b 100755
--- a/tests/guest-debug/run-test.py
+++ b/tests/guest-debug/run-test.py
@@ -25,6 +25,7 @@ def get_args():
                         required=True)
     parser.add_argument("--qargs", help="Qemu arguments for test")
     parser.add_argument("--pargs", help="Program arguments for test")
+    parser.add_argument("--kargs", help="Kernel args to --append")
     parser.add_argument("--binary", help="Binary to debug",
                         required=True)
     parser.add_argument("--test", help="GDB test script")
@@ -89,6 +90,10 @@ def format_cmd(cmd):
         if not args.no_suspend:
             qemu_cmd.append("-S")
         qemu_cmd.extend(["-gdb", f"unix:path={socket_name},server=on"])
+
+        if args.kargs:
+            qemu_cmd.extend(["--append", args.kargs])
+
         # There is no guest program command-line in system mode.
         assert not args.pargs
     else:
@@ -98,6 +103,9 @@ def format_cmd(cmd):
         else:
             qemu_cmd.append(f"{socket_name}")
 
+        # There are no appended args in user-mode
+        assert not args.kargs
+
         # for user mode binary and args always go at the end
         qemu_cmd.append(args.binary)
         if args.pargs:
-- 
2.47.3



^ permalink raw reply related	[flat|nested] 26+ messages in thread

* [PULL 11/19] tests/guest-debug: add --symbols option to run-test
  2026-10-23 18:05 [PULL 00/19] testing updates (tcg, gdbstub) Alex Bennée
                   ` (9 preceding siblings ...)
  2026-10-23 18:05 ` [PULL 10/19] tests/guest-debug: add --kargs option to run-test Alex Bennée
@ 2026-10-23 18:05 ` Alex Bennée
  2026-10-23 18:05 ` [PULL 12/19] tests/functional: teach tuxrun about launching gdb tests Alex Bennée
                   ` (8 subsequent siblings)
  19 siblings, 0 replies; 26+ messages in thread
From: Alex Bennée @ 2026-10-23 18:05 UTC (permalink / raw)
  To: qemu-devel; +Cc: Alex Bennée, Marc-André Lureau, Ilya Leoshkevich

Sometimes the debug symbols are not in the kernel binary image but in
a separate elf blob. Provide --symbols to facilitate using them.

Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Reviewed-by: Ilya Leoshkevich <iii@linux.ibm.com>
Message-ID: <20261019192704.3220373-12-alex.bennee@linaro.org>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>

diff --git a/tests/guest-debug/run-test.py b/tests/guest-debug/run-test.py
index 48f9512d21b..afde0e2c008 100755
--- a/tests/guest-debug/run-test.py
+++ b/tests/guest-debug/run-test.py
@@ -28,6 +28,7 @@ def get_args():
     parser.add_argument("--kargs", help="Kernel args to --append")
     parser.add_argument("--binary", help="Binary to debug",
                         required=True)
+    parser.add_argument("--symbols", help="Symbol file for binary to debug")
     parser.add_argument("--test", help="GDB test script")
     parser.add_argument('test_args', nargs='*',
                         help="Additional args for GDB test script. "
@@ -127,6 +128,10 @@ def format_cmd(cmd):
     gdb_cmd.extend(["-ex", "set confirm off"])
     # connect to remote
     gdb_cmd.extend(["-ex", f"target remote {socket_name}"])
+
+    if args.symbols:
+        gdb_cmd.extend(["-ex", f"symbol-file {args.symbols}"])
+
     # finally the test script itself
     if args.test:
         if args.test_args:
-- 
2.47.3



^ permalink raw reply related	[flat|nested] 26+ messages in thread

* [PULL 12/19] tests/functional: teach tuxrun about launching gdb tests
  2026-10-23 18:05 [PULL 00/19] testing updates (tcg, gdbstub) Alex Bennée
                   ` (10 preceding siblings ...)
  2026-10-23 18:05 ` [PULL 11/19] tests/guest-debug: add --symbols " Alex Bennée
@ 2026-10-23 18:05 ` Alex Bennée
  2026-10-23 18:05 ` [PULL 13/19] tests/functional: add tuxrun kvm gdb test for x86_64 Alex Bennée
                   ` (7 subsequent siblings)
  19 siblings, 0 replies; 26+ messages in thread
From: Alex Bennée @ 2026-10-23 18:05 UTC (permalink / raw)
  To: qemu-devel
  Cc: Alex Bennée, Ilya Leoshkevich, Thomas Huth,
	Philippe Mathieu-Daudé, Daniel P. Berrangé,
	Pierrick Bouvier, Yoshinori Sato

This resurrects the hand run test script from d84842be6c5 (tests:
remove test-gdbstub.py) and modernises it to use the shared test
infrastructure for run-test.

We then tweak the common tuxrun code to offer an alternative "launch
via gdbstub" helper which reuses the existing code but:

  - needs a vmlinux with symbols
  - drops kaslr because it doesn't play nice with symbols
  - extend qargs with stuff normally added by vm.launch
  - passes kargs directly
  - runs with the gdb run-test script
  - log the run-test output to the console log
  - makes --binary not mandatory

Reviewed-by: Ilya Leoshkevich <iii@linux.ibm.com>
Message-ID: <20261019192704.3220373-13-alex.bennee@linaro.org>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>

diff --git a/tests/functional/gdb-scripts/kernel_gdb_test.py b/tests/functional/gdb-scripts/kernel_gdb_test.py
new file mode 100644
index 00000000000..f457ccdcbf4
--- /dev/null
+++ b/tests/functional/gdb-scripts/kernel_gdb_test.py
@@ -0,0 +1,162 @@
+# SPDX-License-Identifier: GPL-2.0-or-later
+#
+# Generic Kernel GDB script to verify functionality:
+#  - Single-stepping
+#  - Hardware breakpoints
+#  - Software breakpoints
+#  - Watchpoints
+#
+# It relies on fairly common kernel points to break at and symbols for
+# the kernel. Address space randomisation (kaslr) needs to be disabled.
+#
+# Copyright (c) 2026 Linaro Limited
+#
+# Author:
+#  Alex Bennée <alex.bennee@linaro.org>
+#
+# This is launched by the tuxrun functional tests via tests/guest-debug/run-test.py
+
+import gdb
+from test_gdbstub import main, report
+
+def parse_registers():
+    """Parse 'info registers' into a name -> value dictionary."""
+    regs = {}
+    for line in gdb.execute("info registers", to_string=True).splitlines():
+        parts = line.split()
+        if len(parts) >= 2:
+            regs[parts[0]] = parts[1]
+    return regs
+
+
+def check_step():
+    "Step an instruction, check it moved."
+    start_pc = gdb.parse_and_eval('$pc')
+    gdb.execute("si")
+    end_pc = gdb.parse_and_eval('$pc')
+
+    return not (start_pc == end_pc)
+
+
+def check_reg_updates(regs_start):
+    regs_end = parse_registers()
+
+    changed = [k for k in regs_start
+               if k in regs_end and regs_start[k] != regs_end[k]]
+
+    report(len(changed) > 0, f"{len(changed)} registers changed.")
+
+
+def check_break(sym_name):
+    "Setup breakpoint, continue and check we stopped."
+    bp = gdb.Breakpoint(sym_name)
+    gdb.execute("c")
+    res = bp.hit_count == 1
+    bp.delete()
+
+    return res
+
+
+def check_hbreak(sym_name):
+    "Setup hardware breakpoint, continue and check we stopped."
+    bp = gdb.Breakpoint(sym_name, type = gdb.BP_HARDWARE_BREAKPOINT)
+    gdb.execute("c")
+    res = bp.hit_count == 1
+    bp.delete()
+
+    return res
+
+
+class WatchPoint(gdb.Breakpoint):
+
+    def __init__(self, sym_name, type):
+        super(WatchPoint, self).__init__(sym_name, gdb.BP_WATCHPOINT, type)
+
+    def stop(self):
+        end_pc = gdb.parse_and_eval('$pc')
+        print("HIT WP @ %s" % (end_pc))
+        return True
+
+
+def do_one_watch(sym, wtype, text):
+
+    wp = WatchPoint(sym, wtype)
+    gdb.execute("c")
+    report_str = "%s for %s" % (text, sym)
+
+    if wp.hit_count > 0:
+        report(True, report_str)
+    else:
+        report(False, report_str)
+
+    wp.delete()
+
+
+def check_watches(sym_name):
+    "Watch a symbol for any access."
+
+    # Should hit for any read
+    do_one_watch(sym_name, gdb.WP_ACCESS, "awatch")
+
+    # Again should hit for reads
+    do_one_watch(sym_name, gdb.WP_READ, "rwatch")
+
+    # Finally when it is written
+    do_one_watch(sym_name, gdb.WP_WRITE, "watch")
+
+
+class CatchBreakpoint(gdb.Breakpoint):
+    def __init__(self, sym_name):
+        super(CatchBreakpoint, self).__init__(sym_name, type = gdb.BP_BREAKPOINT)
+        self.sym, ok = gdb.lookup_symbol(sym_name)
+
+    def stop(self):
+        end_pc = gdb.parse_and_eval('$pc')
+        print("CB: %s == %s" % (end_pc, self.sym.value()))
+        if end_pc == self.sym.value():
+            report(False, "Hit final catchpoint")
+
+
+def run_test():
+    "Run through the tests one by one"
+
+    # get the initial register state
+    regs_start = parse_registers()
+
+    print("Checking we can step the first few instructions")
+    step_ok = 0
+    for i in range(3):
+        if check_step():
+            step_ok += 1
+
+    report(step_ok == 3, "single step in boot code")
+
+    # check some registers changed
+    print("Checking register access works")
+    check_reg_updates(regs_start)
+
+    print("Checking HW breakpoint works")
+    break_ok = check_hbreak("kernel_init")
+    report(break_ok, "hbreak @ kernel_init")
+
+    # Can't set this up until we are in the kernel proper
+    # if we make it to run_init_process we've over-run and
+    # one of the tests failed
+
+    print("Setup catch-all for run_init_process")
+    cbp = CatchBreakpoint("run_init_process")
+
+    # We should see wait_for_completion called right at the start of
+    # kernel_init
+    print("Checking Normal breakpoint works")
+    break_ok = check_break("wait_for_completion")
+    report(break_ok, "break @ wait_for_completion")
+
+    print("Checking watchpoint works")
+    check_watches("system_state")
+
+    # check we didn't hit the end
+    report(cbp.hit_count == 0, "CatchBreakpoint not hit")
+
+
+main(run_test)
diff --git a/tests/functional/qemu_test/tuxruntest.py b/tests/functional/qemu_test/tuxruntest.py
index ca1589fea37..44b14ab6d48 100644
--- a/tests/functional/qemu_test/tuxruntest.py
+++ b/tests/functional/qemu_test/tuxruntest.py
@@ -9,7 +9,10 @@
 #
 # SPDX-License-Identifier: GPL-2.0-or-later
 
+import logging
 import os
+import shlex
+import subprocess
 
 from qemu_test import QemuSystemTest
 from qemu_test import exec_command_and_wait_for_pattern
@@ -18,7 +21,8 @@
 
 class TuxRunBaselineTest(QemuSystemTest):
 
-    KERNEL_COMMON_COMMAND_LINE = 'printk.time=0'
+    # nokaslr is needed for gdb tests but it makes things simpler anyway
+    KERNEL_COMMON_COMMAND_LINE = 'printk.time=0 nokaslr'
     # Tests are ~10-40s, allow for --debug/--enable-gcov overhead
     timeout = 100
 
@@ -55,17 +59,20 @@ def wait_for_console_pattern(self, success_message, vm=None):
                                  failure_message='Kernel panic - not syncing',
                                  vm=vm)
 
-    def fetch_tuxrun_assets(self, kernel_asset, rootfs_asset, dtb_asset=None):
+    def fetch_tuxrun_assets(self, kernel_asset, rootfs_asset,
+                            dtb_asset=None, vmlinux_asset=None):
         """
         Fetch the TuxBoot assets.
         """
         kernel_image =  kernel_asset.fetch()
         disk_image = self.uncompress(rootfs_asset)
         dtb = dtb_asset.fetch() if dtb_asset is not None else None
+        vmlinux = self.uncompress(vmlinux_asset) if vmlinux_asset is not None else None
 
-        return (kernel_image, disk_image, dtb)
+        return (kernel_image, disk_image, dtb, vmlinux)
 
-    def prepare_run(self, accel, kernel, disk, drive, dtb=None, console_index=0):
+    def prepare_run(self, accel, kernel, disk, drive,
+                    dtb=None, console_index=0, append = True):
         """
         Setup to run and add the common parameters to the system
         """
@@ -83,9 +90,15 @@ def prepare_run(self, accel, kernel, disk, drive, dtb=None, console_index=0):
         if accel:
             self.vm.add_args('-accel', accel)
 
-        self.vm.add_args('-kernel', kernel,
-                         '-append', self.kcmd_line,
-                         '-blockdev', blockdev)
+        if kernel:
+            self.vm.add_args('-kernel', kernel)
+
+        # When using the gdb run script we might not want to include
+        # the kcmd line directly in the QEMU args.
+        if append:
+            self.vm.add_args('-append', self.kcmd_line)
+
+        self.vm.add_args('-blockdev', blockdev)
 
         # Sometimes we need extra devices attached
         if self.extradev:
@@ -132,10 +145,76 @@ def common_tuxrun(self,
         special with the command line we can process most things using
         the tag metadata.
         """
-        (kernel, disk, dtb) = self.fetch_tuxrun_assets(kernel_asset, rootfs_asset,
-                                                       dtb_asset)
+        (kernel, disk, dtb, _) = self.fetch_tuxrun_assets(kernel_asset,
+                                                          rootfs_asset,
+                                                          dtb_asset)
 
         self.prepare_run(accel, kernel, disk, drive, dtb, console_index)
         self.vm.launch()
         self.run_tuxtest_tests(haltmsg)
         os.remove(disk)
+
+    def common_tuxrun_gdb(self,
+                          kernel_asset,
+                          vmlinux_asset,
+                          rootfs_asset,
+                          accel=None,
+                          dtb_asset=None,
+                          drive="virtio-blk-device",
+                          console_index=0):
+        """
+        Common path for LKFT tests under gdb. Unlike the common_tuxrun
+        function we need to launch with the gdb test script and deal
+        with munging the arguments for that especially.
+        """
+        (kernel, disk, dtb, vmlinux) = self.fetch_tuxrun_assets(kernel_asset,
+                                                                rootfs_asset,
+                                                                dtb_asset,
+                                                                vmlinux_asset)
+
+        gdb_path = os.getenv("QEMU_TEST_GDB")
+        run_script = self.data_file('..', 'guest-debug','run-test.py')
+        test_script = self.data_file('gdb-scripts', 'kernel_gdb_test.py')
+
+        # Instead of launching QEMU via the functional test machinery
+        # we need to launch it with the gdb run script. We utilise the
+        # existing prepare_run machinery to build the command line but
+        # we pass the kernel args separately to avoid horrible string
+        # escaping.
+
+        self.prepare_run(accel, kernel, disk, drive, dtb,
+                         console_index, append = False)
+
+        # the functional test machinery adds more stuff for handling
+        # console redirection which we need to do manually.
+
+        qargs = self.vm.args
+        qargs.extend(["-display", "none", "-serial", "stdio"])
+
+        # and the machine type
+        if self.vm._machine is not None:
+            qargs.extend(["-machine", self.vm._machine])
+
+        cmd = [
+            str(run_script),
+            "--qemu", self.qemu_bin,
+            "--qargs", shlex.join(qargs),
+            "--kargs", self.kcmd_line,
+            "--symbols", str(vmlinux),
+            "--test", str(test_script),
+            "--gdb", gdb_path,
+        ]
+
+        log_cmd = " ".join(f'"{arg}"' if ' ' in arg else arg for arg in cmd)
+        self.log.info(f"run-test: {log_cmd}")
+
+        res = subprocess.run(cmd, text=True,
+                             stdout=subprocess.PIPE,
+                             stderr=subprocess.STDOUT)
+
+        if res.stdout:
+            console_logger = logging.getLogger('console')
+            console_logger.info(res.stdout)
+
+        self.assertEqual(res.returncode, 0,
+                         f"run-test.py failed ({res.returncode}):\n")
diff --git a/tests/functional/sh4/test_tuxrun.py b/tests/functional/sh4/test_tuxrun.py
index 42b503585b2..07c7ee6e03b 100755
--- a/tests/functional/sh4/test_tuxrun.py
+++ b/tests/functional/sh4/test_tuxrun.py
@@ -31,8 +31,8 @@ def test_sh4(self):
 
         # The test is currently too unstable to do much in userspace
         # so we skip common_tuxrun and do a minimal boot and shutdown.
-        (kernel, disk, dtb) = self.fetch_tuxrun_assets(self.ASSET_SH4_KERNEL,
-                                                       self.ASSET_SH4_ROOTFS)
+        (kernel, disk, dtb, _) = self.fetch_tuxrun_assets(self.ASSET_SH4_KERNEL,
+                                                          self.ASSET_SH4_ROOTFS)
 
         # the console comes on the second serial port
         self.prepare_run(None, kernel, disk,
diff --git a/tests/guest-debug/run-test.py b/tests/guest-debug/run-test.py
index afde0e2c008..6f858f2d0b7 100755
--- a/tests/guest-debug/run-test.py
+++ b/tests/guest-debug/run-test.py
@@ -26,8 +26,7 @@ def get_args():
     parser.add_argument("--qargs", help="Qemu arguments for test")
     parser.add_argument("--pargs", help="Program arguments for test")
     parser.add_argument("--kargs", help="Kernel args to --append")
-    parser.add_argument("--binary", help="Binary to debug",
-                        required=True)
+    parser.add_argument("--binary", help="Binary to debug")
     parser.add_argument("--symbols", help="Symbol file for binary to debug")
     parser.add_argument("--test", help="GDB test script")
     parser.add_argument('test_args', nargs='*',
@@ -86,8 +85,10 @@ def format_cmd(cmd):
         qemu_cmd.extend(shlex.split(args.qargs))
 
     if "system" in args.qemu:
-        # for system mode we assume qargs has set-up for binary
-        qemu_cmd.append(args.binary)
+        # for system mode we assume qargs has set-up for binary if
+        # indeed we have set one.
+        if args.binary:
+            qemu_cmd.append(args.binary)
         if not args.no_suspend:
             qemu_cmd.append("-S")
         qemu_cmd.extend(["-gdb", f"unix:path={socket_name},server=on"])
@@ -116,7 +117,10 @@ def format_cmd(cmd):
     inferior = subprocess.Popen(qemu_cmd)
 
     # Now launch gdb with our test and collect the result
-    gdb_cmd = [args.gdb, args.binary]
+    gdb_cmd = [args.gdb]
+
+    if args.binary:
+        gdb_cmd.append(args.binary)
     if args.gdb_args:
         gdb_cmd.extend(shlex.split(args.gdb_args))
 
-- 
2.47.3



^ permalink raw reply related	[flat|nested] 26+ messages in thread

* [PULL 13/19] tests/functional: add tuxrun kvm gdb test for x86_64
  2026-10-23 18:05 [PULL 00/19] testing updates (tcg, gdbstub) Alex Bennée
                   ` (11 preceding siblings ...)
  2026-10-23 18:05 ` [PULL 12/19] tests/functional: teach tuxrun about launching gdb tests Alex Bennée
@ 2026-10-23 18:05 ` Alex Bennée
  2026-10-23 18:05 ` [PULL 14/19] tests/functional: split aarch64 tuxrun into tcg and kvm run Alex Bennée
                   ` (6 subsequent siblings)
  19 siblings, 0 replies; 26+ messages in thread
From: Alex Bennée @ 2026-10-23 18:05 UTC (permalink / raw)
  To: qemu-devel
  Cc: Alex Bennée, Marc-André Lureau, Michael S. Tsirkin,
	Pierrick Bouvier, Paolo Bonzini, Zhao Liu

With all the bits in place we can now exercise the KVM gdb interfaces.

Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Message-ID: <20261019192704.3220373-14-alex.bennee@linaro.org>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>

diff --git a/tests/functional/x86_64/test_tuxrun.py b/tests/functional/x86_64/test_tuxrun.py
index 026b373accb..1a1138d16ae 100755
--- a/tests/functional/x86_64/test_tuxrun.py
+++ b/tests/functional/x86_64/test_tuxrun.py
@@ -11,7 +11,7 @@
 #
 # SPDX-License-Identifier: GPL-2.0-or-later
 
-from qemu_test import Asset
+from qemu_test import Asset, skipIfMissingEnv
 from qemu_test.tuxruntest import TuxRunBaselineTest
 
 class TuxRunX86Test(TuxRunBaselineTest):
@@ -19,6 +19,9 @@ class TuxRunX86Test(TuxRunBaselineTest):
     ASSET_X86_64_KERNEL = Asset(
         'https://storage.tuxboot.com/kernels/6.18.54/x86_64/bzImage',
         '24a3ade610c2cc426ff821050de8a35930b0371357d94cc2c334abac6658552b')
+    ASSET_X86_64_VMLINUX = Asset(
+        'https://storage.tuxboot.com/kernels/6.18.54/x86_64/vmlinux.xz',
+        '77bf44cca48c9c1b9c142e16a2311d58b8ae3462b61bce44bcaf9243b5f26628')
     ASSET_X86_64_ROOTFS = Asset(
         'https://storage.tuxboot.com/buildroot/20260924/x86_64/rootfs.ext4.zst',
         '8e310455b0244414ccff29c507f7ccfd4032e3587cc405e49ab0322738e3e27c')
@@ -47,5 +50,20 @@ def test_x86_64_kvm(self):
                            drive="driver=ide-hd,bus=ide.0,unit=0",
                            accel="kvm")
 
+    @skipIfMissingEnv("QEMU_TEST_GDB")
+    def test_x86_64_kvm_gdb(self):
+        self.require_accelerator("kvm")
+
+        self.set_machine('q35')
+        self.cpu="Nehalem"
+        self.root='sda'
+        self.wait_for_shutdown=False
+        self.common_tuxrun_gdb(kernel_asset=self.ASSET_X86_64_KERNEL,
+                               vmlinux_asset=self.ASSET_X86_64_VMLINUX,
+                               rootfs_asset=self.ASSET_X86_64_ROOTFS,
+                               drive="driver=ide-hd,bus=ide.0,unit=0",
+                               accel="kvm")
+
+
 if __name__ == '__main__':
     TuxRunBaselineTest.main()
-- 
2.47.3



^ permalink raw reply related	[flat|nested] 26+ messages in thread

* [PULL 14/19] tests/functional: split aarch64 tuxrun into tcg and kvm run
  2026-10-23 18:05 [PULL 00/19] testing updates (tcg, gdbstub) Alex Bennée
                   ` (12 preceding siblings ...)
  2026-10-23 18:05 ` [PULL 13/19] tests/functional: add tuxrun kvm gdb test for x86_64 Alex Bennée
@ 2026-10-23 18:05 ` Alex Bennée
  2026-10-23 18:05 ` [PULL 15/19] tests/functional: update arm64 tuxrun images Alex Bennée
                   ` (5 subsequent siblings)
  19 siblings, 0 replies; 26+ messages in thread
From: Alex Bennée @ 2026-10-23 18:05 UTC (permalink / raw)
  To: qemu-devel
  Cc: Alex Bennée, Marc-André Lureau, Peter Maydell,
	Pierrick Bouvier, open list:Virt

Add an explicit "kvm" run to the tuxrun tests. Although running on an
aarch64 host would probably have defaulted to "kvm" anyway we want to
exercise specific features later.

Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Message-ID: <20261019192704.3220373-15-alex.bennee@linaro.org>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>

diff --git a/tests/functional/aarch64/test_tuxrun.py b/tests/functional/aarch64/test_tuxrun.py
index 7dd50c3de17..0ef1b126fae 100755
--- a/tests/functional/aarch64/test_tuxrun.py
+++ b/tests/functional/aarch64/test_tuxrun.py
@@ -32,6 +32,16 @@ def test_arm64(self):
         self.common_tuxrun(kernel_asset=self.ASSET_ARM64_KERNEL,
                            rootfs_asset=self.ASSET_ARM64_ROOTFS)
 
+    def test_arm64_kvm(self):
+        self.set_machine('virt')
+        self.require_accelerator('kvm')
+        self.cpu='host'
+        self.console='ttyAMA0'
+        self.wait_for_shutdown=False
+        self.common_tuxrun(kernel_asset=self.ASSET_ARM64_KERNEL,
+                           rootfs_asset=self.ASSET_ARM64_ROOTFS,
+                           accel="kvm")
+
     ASSET_ARM64BE_KERNEL = Asset(
         'https://storage.tuxboot.com/buildroot/20241119/arm64be/Image',
         'fd6af4f16689d17a2c24fe0053cc212edcdf77abdcaf301800b8d38fa9f6e109')
-- 
2.47.3



^ permalink raw reply related	[flat|nested] 26+ messages in thread

* [PULL 15/19] tests/functional: update arm64 tuxrun images
  2026-10-23 18:05 [PULL 00/19] testing updates (tcg, gdbstub) Alex Bennée
                   ` (13 preceding siblings ...)
  2026-10-23 18:05 ` [PULL 14/19] tests/functional: split aarch64 tuxrun into tcg and kvm run Alex Bennée
@ 2026-10-23 18:05 ` Alex Bennée
  2026-10-23 18:05 ` [PULL 16/19] tests/functional: add tuxrun kvm gdb test for arm64 Alex Bennée
                   ` (4 subsequent siblings)
  19 siblings, 0 replies; 26+ messages in thread
From: Alex Bennée @ 2026-10-23 18:05 UTC (permalink / raw)
  To: qemu-devel
  Cc: Alex Bennée, Marc-André Lureau, Pierrick Bouvier,
	Peter Maydell, open list:Virt

We now fetch the kernel from a different location to the buildroot
image itself. This is because we will want to access additional kernel
metadata in future tests.

Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Message-ID: <20261019192704.3220373-16-alex.bennee@linaro.org>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>

diff --git a/tests/functional/aarch64/test_tuxrun.py b/tests/functional/aarch64/test_tuxrun.py
index 0ef1b126fae..6de02e1d8b2 100755
--- a/tests/functional/aarch64/test_tuxrun.py
+++ b/tests/functional/aarch64/test_tuxrun.py
@@ -17,11 +17,11 @@
 class TuxRunAarch64Test(TuxRunBaselineTest):
 
     ASSET_ARM64_KERNEL = Asset(
-        'https://storage.tuxboot.com/buildroot/20241119/arm64/Image',
-        'b74743c5e89e1cea0f73368d24ae0ae85c5204ff84be3b5e9610417417d2f235')
+        'https://storage.tuxboot.com/kernels/6.18.54/arm64/Image.gz',
+        '39f4633bbcb444267d4d829bd28d8868a287c4c160cda64b0fd23fb090571c4e')
     ASSET_ARM64_ROOTFS = Asset(
-        'https://storage.tuxboot.com/buildroot/20241119/arm64/rootfs.ext4.zst',
-        'a1acaaae2068df4648d04ff75f532aaa8c5edcd6b936122b6f0db4848a07b465')
+        'https://storage.tuxboot.com/buildroot/20260924/arm64/rootfs.ext4.zst',
+        '4ab8cec9d1e17dbb1abdf2ae1939ad4f9d0dc2466230f6a119a7c1845cdef0b1')
 
     def test_arm64(self):
         self.set_machine('virt')
-- 
2.47.3



^ permalink raw reply related	[flat|nested] 26+ messages in thread

* [PULL 16/19] tests/functional: add tuxrun kvm gdb test for arm64
  2026-10-23 18:05 [PULL 00/19] testing updates (tcg, gdbstub) Alex Bennée
                   ` (14 preceding siblings ...)
  2026-10-23 18:05 ` [PULL 15/19] tests/functional: update arm64 tuxrun images Alex Bennée
@ 2026-10-23 18:05 ` Alex Bennée
  2026-10-23 18:05 ` [PULL 17/19] tests/functional: split s390x tuxrun into tcg and kvm run Alex Bennée
                   ` (3 subsequent siblings)
  19 siblings, 0 replies; 26+ messages in thread
From: Alex Bennée @ 2026-10-23 18:05 UTC (permalink / raw)
  To: qemu-devel
  Cc: Alex Bennée, Marc-André Lureau, Peter Maydell,
	Pierrick Bouvier, open list:Virt

As with x86_64 we now have the bits to add a KVM gdb test

Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Message-ID: <20261019192704.3220373-17-alex.bennee@linaro.org>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>

diff --git a/tests/functional/aarch64/test_tuxrun.py b/tests/functional/aarch64/test_tuxrun.py
index 6de02e1d8b2..2ff321582d3 100755
--- a/tests/functional/aarch64/test_tuxrun.py
+++ b/tests/functional/aarch64/test_tuxrun.py
@@ -11,7 +11,7 @@
 #
 # SPDX-License-Identifier: GPL-2.0-or-later
 
-from qemu_test import Asset
+from qemu_test import Asset, skipIfMissingEnv
 from qemu_test.tuxruntest import TuxRunBaselineTest
 
 class TuxRunAarch64Test(TuxRunBaselineTest):
@@ -19,6 +19,9 @@ class TuxRunAarch64Test(TuxRunBaselineTest):
     ASSET_ARM64_KERNEL = Asset(
         'https://storage.tuxboot.com/kernels/6.18.54/arm64/Image.gz',
         '39f4633bbcb444267d4d829bd28d8868a287c4c160cda64b0fd23fb090571c4e')
+    ASSET_ARM64_VMLINUX = Asset(
+        'https://storage.tuxboot.com/kernels/6.18.54/arm64/vmlinux.xz',
+        '6487eb113ef6e841aedab6cb6fa704006377d68f64dd544570aa42f462a52b85')
     ASSET_ARM64_ROOTFS = Asset(
         'https://storage.tuxboot.com/buildroot/20260924/arm64/rootfs.ext4.zst',
         '4ab8cec9d1e17dbb1abdf2ae1939ad4f9d0dc2466230f6a119a7c1845cdef0b1')
@@ -42,6 +45,18 @@ def test_arm64_kvm(self):
                            rootfs_asset=self.ASSET_ARM64_ROOTFS,
                            accel="kvm")
 
+    @skipIfMissingEnv("QEMU_TEST_GDB")
+    def test_arm64_kvm_gdb(self):
+        self.set_machine('virt')
+        self.require_accelerator('kvm')
+        self.cpu='host'
+        self.console='ttyAMA0'
+        self.wait_for_shutdown=False
+        self.common_tuxrun_gdb(kernel_asset=self.ASSET_ARM64_KERNEL,
+                               vmlinux_asset=self.ASSET_ARM64_VMLINUX,
+                               rootfs_asset=self.ASSET_ARM64_ROOTFS,
+                               accel="kvm")
+
     ASSET_ARM64BE_KERNEL = Asset(
         'https://storage.tuxboot.com/buildroot/20241119/arm64be/Image',
         'fd6af4f16689d17a2c24fe0053cc212edcdf77abdcaf301800b8d38fa9f6e109')
-- 
2.47.3



^ permalink raw reply related	[flat|nested] 26+ messages in thread

* [PULL 17/19] tests/functional: split s390x tuxrun into tcg and kvm run
  2026-10-23 18:05 [PULL 00/19] testing updates (tcg, gdbstub) Alex Bennée
                   ` (15 preceding siblings ...)
  2026-10-23 18:05 ` [PULL 16/19] tests/functional: add tuxrun kvm gdb test for arm64 Alex Bennée
@ 2026-10-23 18:05 ` Alex Bennée
  2026-10-23 18:05 ` [PULL 18/19] tests/functional: update s390x tuxrun images Alex Bennée
                   ` (2 subsequent siblings)
  19 siblings, 0 replies; 26+ messages in thread
From: Alex Bennée @ 2026-10-23 18:05 UTC (permalink / raw)
  To: qemu-devel
  Cc: Alex Bennée, Marc-André Lureau, Ilya Leoshkevich,
	Pierrick Bouvier, Halil Pasic, Christian Borntraeger, Eric Farman,
	Matthew Rosato, Cornelia Huck, open list:S390 Virtio-ccw

Add an explicit "kvm" run to the tuxrun tests. Although running on an
s390x host would probably have defaulted to "kvm" anyway we want to
exercise specific features later.

Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Reviewed-by: Ilya Leoshkevich <iii@linux.ibm.com>
Message-ID: <20261019192704.3220373-18-alex.bennee@linaro.org>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>

diff --git a/tests/functional/s390x/test_tuxrun.py b/tests/functional/s390x/test_tuxrun.py
index 8df3c6893b7..086466af81f 100755
--- a/tests/functional/s390x/test_tuxrun.py
+++ b/tests/functional/s390x/test_tuxrun.py
@@ -25,11 +25,22 @@ class TuxRunS390xTest(TuxRunBaselineTest):
 
     def test_s390(self):
         self.set_machine('s390-ccw-virtio')
+        self.require_accelerator('tcg')
         self.wait_for_shutdown=False
         self.common_tuxrun(kernel_asset=self.ASSET_S390X_KERNEL,
                            rootfs_asset=self.ASSET_S390X_ROOTFS,
                            drive="virtio-blk-ccw",
                            haltmsg="Requesting system halt")
 
+    def test_s390_kvm(self):
+        self.set_machine('s390-ccw-virtio')
+        self.require_accelerator('kvm')
+        self.wait_for_shutdown=False
+        self.common_tuxrun(kernel_asset=self.ASSET_S390X_KERNEL,
+                           rootfs_asset=self.ASSET_S390X_ROOTFS,
+                           drive="virtio-blk-ccw",
+                           haltmsg="Requesting system halt",
+                           accel="kvm")
+
 if __name__ == '__main__':
     TuxRunBaselineTest.main()
-- 
2.47.3



^ permalink raw reply related	[flat|nested] 26+ messages in thread

* [PULL 18/19] tests/functional: update s390x tuxrun images
  2026-10-23 18:05 [PULL 00/19] testing updates (tcg, gdbstub) Alex Bennée
                   ` (16 preceding siblings ...)
  2026-10-23 18:05 ` [PULL 17/19] tests/functional: split s390x tuxrun into tcg and kvm run Alex Bennée
@ 2026-10-23 18:05 ` Alex Bennée
  2026-10-23 18:05 ` [PULL 19/19] tests/functional: add tuxrun kvm gdb test for s390x Alex Bennée
  2026-10-24 15:12 ` [PULL 00/19] testing updates (tcg, gdbstub) Richard Henderson
  19 siblings, 0 replies; 26+ messages in thread
From: Alex Bennée @ 2026-10-23 18:05 UTC (permalink / raw)
  To: qemu-devel
  Cc: Alex Bennée, Marc-André Lureau, Ilya Leoshkevich,
	Pierrick Bouvier, Halil Pasic, Christian Borntraeger, Eric Farman,
	Matthew Rosato, Cornelia Huck, open list:S390 Virtio-ccw

We now fetch the kernel from a different location to the buildroot
image itself. This is because we will want to access additional kernel
metadata in future tests.

Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Reviewed-by: Ilya Leoshkevich <iii@linux.ibm.com>
Message-ID: <20261019192704.3220373-19-alex.bennee@linaro.org>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>

diff --git a/tests/functional/s390x/test_tuxrun.py b/tests/functional/s390x/test_tuxrun.py
index 086466af81f..8e0261e2b7f 100755
--- a/tests/functional/s390x/test_tuxrun.py
+++ b/tests/functional/s390x/test_tuxrun.py
@@ -17,11 +17,11 @@
 class TuxRunS390xTest(TuxRunBaselineTest):
 
     ASSET_S390X_KERNEL = Asset(
-        'https://storage.tuxboot.com/buildroot/20241119/s390/bzImage',
-        'ee67e91db52a2aed104a7c72b2a08987c678f8179c029626789c35d6dd0fedf1')
+        'https://storage.tuxboot.com/kernels/6.18.54/s390/bzImage',
+        '5efeb31754b211440e1595ab11355bb006fe78a2c0604ed0a8c55c4598b71aec')
     ASSET_S390X_ROOTFS = Asset(
-        'https://storage.tuxboot.com/buildroot/20241119/s390/rootfs.ext4.zst',
-        'bff7971fc2fef56372d98afe4557b82fd0a785a241e44c29b058e577ad1bbb44')
+        'https://storage.tuxboot.com/buildroot/20260924/s390/rootfs.ext4.zst',
+        '5ba18c4d18831c50a0c743990f7bdee1d3b520629d423c55b668d8fbbac9c6f5')
 
     def test_s390(self):
         self.set_machine('s390-ccw-virtio')
-- 
2.47.3



^ permalink raw reply related	[flat|nested] 26+ messages in thread

* [PULL 19/19] tests/functional: add tuxrun kvm gdb test for s390x
  2026-10-23 18:05 [PULL 00/19] testing updates (tcg, gdbstub) Alex Bennée
                   ` (17 preceding siblings ...)
  2026-10-23 18:05 ` [PULL 18/19] tests/functional: update s390x tuxrun images Alex Bennée
@ 2026-10-23 18:05 ` Alex Bennée
  2026-10-24 15:12 ` [PULL 00/19] testing updates (tcg, gdbstub) Richard Henderson
  19 siblings, 0 replies; 26+ messages in thread
From: Alex Bennée @ 2026-10-23 18:05 UTC (permalink / raw)
  To: qemu-devel
  Cc: Alex Bennée, Marc-André Lureau, Ilya Leoshkevich,
	Thomas Huth, Philippe Mathieu-Daudé, Daniel P. Berrangé,
	Pierrick Bouvier, Halil Pasic, Christian Borntraeger, Eric Farman,
	Matthew Rosato, Cornelia Huck, open list:S390 Virtio-ccw

As with x86_64 we now have the bits to add a KVM gdb test. A couple of
minor wrinkles need to be handled.

The first is applying an offset when loading the symbols to take into
account the relocation that happens.

The other minor wrinkle is the s390x only supports WP_WRITE watch
points so we skip the other watch point tests lest we get confusing
messages about failing to insert HW breakpoints.

Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Reviewed-by: Ilya Leoshkevich <iii@linux.ibm.com>
Message-ID: <20261019192704.3220373-20-alex.bennee@linaro.org>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>

diff --git a/tests/functional/gdb-scripts/kernel_gdb_test.py b/tests/functional/gdb-scripts/kernel_gdb_test.py
index f457ccdcbf4..975faf3d284 100644
--- a/tests/functional/gdb-scripts/kernel_gdb_test.py
+++ b/tests/functional/gdb-scripts/kernel_gdb_test.py
@@ -95,11 +95,13 @@ def do_one_watch(sym, wtype, text):
 def check_watches(sym_name):
     "Watch a symbol for any access."
 
-    # Should hit for any read
-    do_one_watch(sym_name, gdb.WP_ACCESS, "awatch")
+    # s390 only supports write watchpoints
+    if "s390" not in gdb.selected_frame().architecture().name():
+        # Should hit for any read
+        do_one_watch(sym_name, gdb.WP_ACCESS, "awatch")
 
-    # Again should hit for reads
-    do_one_watch(sym_name, gdb.WP_READ, "rwatch")
+        # Again should hit for reads
+        do_one_watch(sym_name, gdb.WP_READ, "rwatch")
 
     # Finally when it is written
     do_one_watch(sym_name, gdb.WP_WRITE, "watch")
diff --git a/tests/functional/qemu_test/tuxruntest.py b/tests/functional/qemu_test/tuxruntest.py
index 44b14ab6d48..40b0907ff3e 100644
--- a/tests/functional/qemu_test/tuxruntest.py
+++ b/tests/functional/qemu_test/tuxruntest.py
@@ -160,6 +160,7 @@ def common_tuxrun_gdb(self,
                           rootfs_asset,
                           accel=None,
                           dtb_asset=None,
+                          symbol_off = None,
                           drive="virtio-blk-device",
                           console_index=0):
         """
@@ -205,6 +206,9 @@ def common_tuxrun_gdb(self,
             "--gdb", gdb_path,
         ]
 
+        if symbol_off is not None:
+            cmd.extend(["--symbol-offset", f"{symbol_off}"])
+
         log_cmd = " ".join(f'"{arg}"' if ' ' in arg else arg for arg in cmd)
         self.log.info(f"run-test: {log_cmd}")
 
diff --git a/tests/functional/s390x/test_tuxrun.py b/tests/functional/s390x/test_tuxrun.py
index 8e0261e2b7f..3821f985196 100755
--- a/tests/functional/s390x/test_tuxrun.py
+++ b/tests/functional/s390x/test_tuxrun.py
@@ -11,7 +11,7 @@
 #
 # SPDX-License-Identifier: GPL-2.0-or-later
 
-from qemu_test import Asset
+from qemu_test import Asset, skipIfMissingEnv
 from qemu_test.tuxruntest import TuxRunBaselineTest
 
 class TuxRunS390xTest(TuxRunBaselineTest):
@@ -19,6 +19,9 @@ class TuxRunS390xTest(TuxRunBaselineTest):
     ASSET_S390X_KERNEL = Asset(
         'https://storage.tuxboot.com/kernels/6.18.54/s390/bzImage',
         '5efeb31754b211440e1595ab11355bb006fe78a2c0604ed0a8c55c4598b71aec')
+    ASSET_S390X_VMLINUX = Asset(
+        'https://storage.tuxboot.com/kernels/6.18.54/s390/vmlinux.xz',
+        '5bbd4d34e0950f88053a9bfd16078896df4b1ee1696fc2ad62488e681a6bdd8e')
     ASSET_S390X_ROOTFS = Asset(
         'https://storage.tuxboot.com/buildroot/20260924/s390/rootfs.ext4.zst',
         '5ba18c4d18831c50a0c743990f7bdee1d3b520629d423c55b668d8fbbac9c6f5')
@@ -42,5 +45,18 @@ def test_s390_kvm(self):
                            haltmsg="Requesting system halt",
                            accel="kvm")
 
+    @skipIfMissingEnv("QEMU_TEST_GDB")
+    def test_s390_kvm_gdb(self):
+        self.set_machine('s390-ccw-virtio')
+        self.require_accelerator('kvm')
+        self.wait_for_shutdown=False
+        self.common_tuxrun_gdb(kernel_asset=self.ASSET_S390X_KERNEL,
+                               vmlinux_asset=self.ASSET_S390X_VMLINUX,
+                               rootfs_asset=self.ASSET_S390X_ROOTFS,
+                               symbol_off="0x3ffe0000000",
+                               drive="virtio-blk-ccw",
+                               haltmsg="Requesting system halt",
+                               accel="kvm")
+
 if __name__ == '__main__':
     TuxRunBaselineTest.main()
diff --git a/tests/guest-debug/run-test.py b/tests/guest-debug/run-test.py
index 6f858f2d0b7..9fdf05b55d3 100755
--- a/tests/guest-debug/run-test.py
+++ b/tests/guest-debug/run-test.py
@@ -28,6 +28,7 @@ def get_args():
     parser.add_argument("--kargs", help="Kernel args to --append")
     parser.add_argument("--binary", help="Binary to debug")
     parser.add_argument("--symbols", help="Symbol file for binary to debug")
+    parser.add_argument("--symbol-offset", help="offset to apply to symbols")
     parser.add_argument("--test", help="GDB test script")
     parser.add_argument('test_args', nargs='*',
                         help="Additional args for GDB test script. "
@@ -134,7 +135,11 @@ def format_cmd(cmd):
     gdb_cmd.extend(["-ex", f"target remote {socket_name}"])
 
     if args.symbols:
-        gdb_cmd.extend(["-ex", f"symbol-file {args.symbols}"])
+        sym_arg = f"symbol-file {args.symbols}"
+        if args.symbol_offset:
+            sym_arg += f" -o {args.symbol_offset}"
+
+        gdb_cmd.extend(["-ex", sym_arg])
 
     # finally the test script itself
     if args.test:
-- 
2.47.3



^ permalink raw reply related	[flat|nested] 26+ messages in thread

* Re: [PULL 00/19] testing updates (tcg, gdbstub)
  2026-10-23 18:05 [PULL 00/19] testing updates (tcg, gdbstub) Alex Bennée
                   ` (18 preceding siblings ...)
  2026-10-23 18:05 ` [PULL 19/19] tests/functional: add tuxrun kvm gdb test for s390x Alex Bennée
@ 2026-10-24 15:12 ` Richard Henderson
  19 siblings, 0 replies; 26+ messages in thread
From: Richard Henderson @ 2026-10-24 15:12 UTC (permalink / raw)
  To: Alex Bennée, qemu-devel

On 10/23/26 20:05, Alex Bennée wrote:
> The following changes since commit b6c4b7e86dec12d07f5cac65265b986d38ee9002:
> 
>    Merge tag 'pbouvier/pr/tcg_tests-20261022' ofhttps://gitlab.com/p-b-o/qemu into staging (2026-10-23 09:09:11 +0200)
> 
> are available in the Git repository at:
> 
>    https://gitlab.com/stsquad/qemu.git tags/pull-11.2-gdbstub-kvm-231026-1
> 
> for you to fetch changes up to e0a7139b213487a59023d88e7d56b7e95d90d553:
> 
>    tests/functional: add tuxrun kvm gdb test for s390x (2026-10-23 17:32:05 +0100)
> 
> ----------------------------------------------------------------
> testing updates (tcg, gdbstub):
> 
>    - make sure we have TCG to run test_acpi_bits
>    - fix overflow in linux-sigrtminmax
>    - make .dir-locals aware of PYTHONPATH
>    - detect gdb in top-level meson
>    - fetch kernel assets with symbols for x86, aarch64 and s390 tuxruns
>    - use arrays in gdb run-test to make quoting less messy
>    - add support for --symbols and --kargs to gdbstub run-test.py
>    - restore old kvm gdb test script with a few fixes
>    - add tuxrun_kvm_gdb tests for x86,aarch64 and s390

Applied, thanks.

r~


^ permalink raw reply	[flat|nested] 26+ messages in thread

* Re: [PULL 03/19] .dir-locals: include QEMU code in PYTHONPATH
  2026-10-23 18:05 ` [PULL 03/19] .dir-locals: include QEMU code in PYTHONPATH Alex Bennée
@ 2026-11-12 11:06   ` Peter Maydell
  2026-11-12 12:19     ` Markus Armbruster
  0 siblings, 1 reply; 26+ messages in thread
From: Peter Maydell @ 2026-11-12 11:06 UTC (permalink / raw)
  To: Alex Bennée; +Cc: qemu-devel, Daniel P. Berrangé

On Fri, 23 Oct 2026 at 19:06, Alex Bennée <alex.bennee@linaro.org> wrote:
>
> When editing python code the linters tools have a hard time with our
> imports as they can't be found. To ease this we can expand a
> PYTHONPATH in .dir-locals so at least Emacs users can have less
> warnings in their editor.
>
> I still get complaints from python-mypy about missing library stubs
> that mean it can't do proper type analysis though.
>
> Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
> Message-ID: <20261019192704.3220373-4-alex.bennee@linaro.org>
> Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
>
> diff --git a/.dir-locals.el b/.dir-locals.el
> index 3ac0cfc6f0d..51871619422 100644
> --- a/.dir-locals.el
> +++ b/.dir-locals.el
> @@ -1,2 +1,8 @@
>  ((c-mode . ((c-file-style . "stroustrup")
> -           (indent-tabs-mode . nil))))
> +           (indent-tabs-mode . nil)))
> + (python-mode .
> +              ((eval . (when-let* ((root (locate-dominating-file default-directory ".dir-locals.el")))
> +                         (setq-local process-environment (copy-sequence process-environment))
> +                         (setenv "PYTHONPATH"
> +                                 (concat (expand-file-name "python" root) ":"
> +                                         (expand-file-name "tests/functional" root))))))))

With this change, emacs now complains and prompts for input every
time I open a Python file inside the QEMU source tree:

===begin===
The local variables list in /home/pm215/qemu/
or .dir-locals.el contains values that may not be safe (*).

Do you want to apply it?  You can type
y  -- to apply the local variables list.
n  -- to ignore the local variables list.
!  -- to apply the local variables list, and permanently mark these
      values (*) as safe (in the future, they will be set automatically.)
i  -- to ignore the local variables list, and permanently mark these
      values (*) as ignored

  * eval : (when-let* ((root (locate-dominating-file default-directory
".dir-locals.el"))) (setq-local process-environment (copy-sequence
process-environment)) (setenv "PYTHONPATH" (concat (expand-file-name
"python" root) ":" (expand-file-name "tests/functional" root))))
===endit===

The commit messages says "so Emacs users can have less warnings"
but from my POV this is "more warnings" (and previously I didn't
notice any warnings at all).

I think emacs is correct to warn about files and configs that
try to automatically update PYTHONPATH, so I would favour reverting
this commit.

thanks
-- PMM


^ permalink raw reply	[flat|nested] 26+ messages in thread

* Re: [PULL 03/19] .dir-locals: include QEMU code in PYTHONPATH
  2026-11-12 11:06   ` Peter Maydell
@ 2026-11-12 12:19     ` Markus Armbruster
  2026-11-12 17:19       ` Alex Bennée
  0 siblings, 1 reply; 26+ messages in thread
From: Markus Armbruster @ 2026-11-12 12:19 UTC (permalink / raw)
  To: Peter Maydell; +Cc: Alex Bennée, qemu-devel, Daniel P. Berrangé

Peter Maydell <peter.maydell@linaro.org> writes:

> On Fri, 23 Oct 2026 at 19:06, Alex Bennée <alex.bennee@linaro.org> wrote:
>>
>> When editing python code the linters tools have a hard time with our
>> imports as they can't be found. To ease this we can expand a
>> PYTHONPATH in .dir-locals so at least Emacs users can have less
>> warnings in their editor.
>>
>> I still get complaints from python-mypy about missing library stubs
>> that mean it can't do proper type analysis though.
>>
>> Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
>> Message-ID: <20261019192704.3220373-4-alex.bennee@linaro.org>
>> Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
>>
>> diff --git a/.dir-locals.el b/.dir-locals.el
>> index 3ac0cfc6f0d..51871619422 100644
>> --- a/.dir-locals.el
>> +++ b/.dir-locals.el
>> @@ -1,2 +1,8 @@
>>  ((c-mode . ((c-file-style . "stroustrup")
>> -           (indent-tabs-mode . nil))))
>> +           (indent-tabs-mode . nil)))
>> + (python-mode .
>> +              ((eval . (when-let* ((root (locate-dominating-file default-directory ".dir-locals.el")))
>> +                         (setq-local process-environment (copy-sequence process-environment))
>> +                         (setenv "PYTHONPATH"
>> +                                 (concat (expand-file-name "python" root) ":"
>> +                                         (expand-file-name "tests/functional" root))))))))
>
> With this change, emacs now complains and prompts for input every
> time I open a Python file inside the QEMU source tree:
>
> ===begin===
> The local variables list in /home/pm215/qemu/
> or .dir-locals.el contains values that may not be safe (*).
>
> Do you want to apply it?  You can type
> y  -- to apply the local variables list.
> n  -- to ignore the local variables list.
> !  -- to apply the local variables list, and permanently mark these
>       values (*) as safe (in the future, they will be set automatically.)
> i  -- to ignore the local variables list, and permanently mark these
>       values (*) as ignored
>
>   * eval : (when-let* ((root (locate-dominating-file default-directory
> ".dir-locals.el"))) (setq-local process-environment (copy-sequence
> process-environment)) (setenv "PYTHONPATH" (concat (expand-file-name
> "python" root) ":" (expand-file-name "tests/functional" root))))
> ===endit===
>
> The commit messages says "so Emacs users can have less warnings"
> but from my POV this is "more warnings" (and previously I didn't
> notice any warnings at all).

Same here.

What exactly was the problem this patch tried to solve?

> I think emacs is correct to warn about files and configs that
> try to automatically update PYTHONPATH, so I would favour reverting
> this commit.



^ permalink raw reply	[flat|nested] 26+ messages in thread

* Re: [PULL 03/19] .dir-locals: include QEMU code in PYTHONPATH
  2026-11-12 12:19     ` Markus Armbruster
@ 2026-11-12 17:19       ` Alex Bennée
  2026-11-12 17:52         ` Peter Maydell
  0 siblings, 1 reply; 26+ messages in thread
From: Alex Bennée @ 2026-11-12 17:19 UTC (permalink / raw)
  To: Markus Armbruster; +Cc: Peter Maydell, qemu-devel, Daniel P. Berrangé

Markus Armbruster <armbru@redhat.com> writes:

> Peter Maydell <peter.maydell@linaro.org> writes:
>
>> On Fri, 23 Oct 2026 at 19:06, Alex Bennée <alex.bennee@linaro.org> wrote:
>>>
>>> When editing python code the linters tools have a hard time with our
>>> imports as they can't be found. To ease this we can expand a
>>> PYTHONPATH in .dir-locals so at least Emacs users can have less
>>> warnings in their editor.
>>>
>>> I still get complaints from python-mypy about missing library stubs
>>> that mean it can't do proper type analysis though.
>>>
>>> Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
>>> Message-ID: <20261019192704.3220373-4-alex.bennee@linaro.org>
>>> Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
>>>
>>> diff --git a/.dir-locals.el b/.dir-locals.el
>>> index 3ac0cfc6f0d..51871619422 100644
>>> --- a/.dir-locals.el
>>> +++ b/.dir-locals.el
>>> @@ -1,2 +1,8 @@
>>>  ((c-mode . ((c-file-style . "stroustrup")
>>> -           (indent-tabs-mode . nil))))
>>> +           (indent-tabs-mode . nil)))
>>> + (python-mode .
>>> +              ((eval . (when-let* ((root (locate-dominating-file default-directory ".dir-locals.el")))
>>> +                         (setq-local process-environment (copy-sequence process-environment))
>>> +                         (setenv "PYTHONPATH"
>>> +                                 (concat (expand-file-name "python" root) ":"
>>> +                                         (expand-file-name "tests/functional" root))))))))
>>
>> With this change, emacs now complains and prompts for input every
>> time I open a Python file inside the QEMU source tree:
>>
>> ===begin===
>> The local variables list in /home/pm215/qemu/
>> or .dir-locals.el contains values that may not be safe (*).
>>
>> Do you want to apply it?  You can type
>> y  -- to apply the local variables list.
>> n  -- to ignore the local variables list.
>> !  -- to apply the local variables list, and permanently mark these
>>       values (*) as safe (in the future, they will be set
>> automatically.)

It should mark them as safe for this particular directory, not generally
for setting PYTHONPATH.

>> i  -- to ignore the local variables list, and permanently mark these
>>       values (*) as ignored
>>
>>   * eval : (when-let* ((root (locate-dominating-file default-directory
>> ".dir-locals.el"))) (setq-local process-environment (copy-sequence
>> process-environment)) (setenv "PYTHONPATH" (concat (expand-file-name
>> "python" root) ":" (expand-file-name "tests/functional" root))))
>> ===endit===
>>
>> The commit messages says "so Emacs users can have less warnings"
>> but from my POV this is "more warnings" (and previously I didn't
>> notice any warnings at all).
>
> Same here.
>
> What exactly was the problem this patch tried to solve?

It ensures the python lsp's don't complain about invalid imports because
they don't have visibility of the PYTHONPATH set by ./run.

>
>> I think emacs is correct to warn about files and configs that
>> try to automatically update PYTHONPATH, so I would favour reverting
>> this commit.

-- 
Alex Bennée
Virtualisation Tech Lead @ Linaro


^ permalink raw reply	[flat|nested] 26+ messages in thread

* Re: [PULL 03/19] .dir-locals: include QEMU code in PYTHONPATH
  2026-11-12 17:19       ` Alex Bennée
@ 2026-11-12 17:52         ` Peter Maydell
  2026-11-12 19:26           ` Alex Bennée
  0 siblings, 1 reply; 26+ messages in thread
From: Peter Maydell @ 2026-11-12 17:52 UTC (permalink / raw)
  To: Alex Bennée; +Cc: Markus Armbruster, qemu-devel, Daniel P. Berrangé

On Thu, 12 Nov 2026 at 17:19, Alex Bennée <alex.bennee@linaro.org> wrote:
>
> Markus Armbruster <armbru@redhat.com> writes:
>
> > Peter Maydell <peter.maydell@linaro.org> writes:
> >
> >> On Fri, 23 Oct 2026 at 19:06, Alex Bennée <alex.bennee@linaro.org> wrote:
> >>>
> >>> When editing python code the linters tools have a hard time with our
> >>> imports as they can't be found. To ease this we can expand a
> >>> PYTHONPATH in .dir-locals so at least Emacs users can have less
> >>> warnings in their editor.
> >>>
> >>> I still get complaints from python-mypy about missing library stubs
> >>> that mean it can't do proper type analysis though.

> >> With this change, emacs now complains and prompts for input every
> >> time I open a Python file inside the QEMU source tree:
> >>
> >> ===begin===
> >> The local variables list in /home/pm215/qemu/
> >> or .dir-locals.el contains values that may not be safe (*).
> >>
> >> Do you want to apply it?  You can type
> >> y  -- to apply the local variables list.
> >> n  -- to ignore the local variables list.
> >> !  -- to apply the local variables list, and permanently mark these
> >>       values (*) as safe (in the future, they will be set
> >> automatically.)
>
> It should mark them as safe for this particular directory, not generally
> for setting PYTHONPATH.
>
> >> i  -- to ignore the local variables list, and permanently mark these
> >>       values (*) as ignored
> >>
> >>   * eval : (when-let* ((root (locate-dominating-file default-directory
> >> ".dir-locals.el"))) (setq-local process-environment (copy-sequence
> >> process-environment)) (setenv "PYTHONPATH" (concat (expand-file-name
> >> "python" root) ":" (expand-file-name "tests/functional" root))))
> >> ===endit===
> >>
> >> The commit messages says "so Emacs users can have less warnings"
> >> but from my POV this is "more warnings" (and previously I didn't
> >> notice any warnings at all).
> >
> > Same here.
> >
> > What exactly was the problem this patch tried to solve?
>
> It ensures the python lsp's don't complain about invalid imports because
> they don't have visibility of the PYTHONPATH set by ./run

That's a bit unfortunate, but I think it's a lot less bad
than emacs complaining every single time you open a python file.

-- PMM


^ permalink raw reply	[flat|nested] 26+ messages in thread

* Re: [PULL 03/19] .dir-locals: include QEMU code in PYTHONPATH
  2026-11-12 17:52         ` Peter Maydell
@ 2026-11-12 19:26           ` Alex Bennée
  0 siblings, 0 replies; 26+ messages in thread
From: Alex Bennée @ 2026-11-12 19:26 UTC (permalink / raw)
  To: Peter Maydell; +Cc: Markus Armbruster, qemu-devel, Daniel P. Berrangé

Peter Maydell <peter.maydell@linaro.org> writes:

> On Thu, 12 Nov 2026 at 17:19, Alex Bennée <alex.bennee@linaro.org> wrote:
>>
>> Markus Armbruster <armbru@redhat.com> writes:
>>
>> > Peter Maydell <peter.maydell@linaro.org> writes:
>> >
>> >> On Fri, 23 Oct 2026 at 19:06, Alex Bennée <alex.bennee@linaro.org> wrote:
>> >>>
>> >>> When editing python code the linters tools have a hard time with our
>> >>> imports as they can't be found. To ease this we can expand a
>> >>> PYTHONPATH in .dir-locals so at least Emacs users can have less
>> >>> warnings in their editor.
>> >>>
>> >>> I still get complaints from python-mypy about missing library stubs
>> >>> that mean it can't do proper type analysis though.
>
>> >> With this change, emacs now complains and prompts for input every
>> >> time I open a Python file inside the QEMU source tree:
>> >>
>> >> ===begin===
>> >> The local variables list in /home/pm215/qemu/
>> >> or .dir-locals.el contains values that may not be safe (*).
>> >>
>> >> Do you want to apply it?  You can type
>> >> y  -- to apply the local variables list.
>> >> n  -- to ignore the local variables list.
>> >> !  -- to apply the local variables list, and permanently mark these
>> >>       values (*) as safe (in the future, they will be set
>> >> automatically.)
>>
>> It should mark them as safe for this particular directory, not generally
>> for setting PYTHONPATH.
>>
>> >> i  -- to ignore the local variables list, and permanently mark these
>> >>       values (*) as ignored
>> >>
>> >>   * eval : (when-let* ((root (locate-dominating-file default-directory
>> >> ".dir-locals.el"))) (setq-local process-environment (copy-sequence
>> >> process-environment)) (setenv "PYTHONPATH" (concat (expand-file-name
>> >> "python" root) ":" (expand-file-name "tests/functional" root))))
>> >> ===endit===
>> >>
>> >> The commit messages says "so Emacs users can have less warnings"
>> >> but from my POV this is "more warnings" (and previously I didn't
>> >> notice any warnings at all).
>> >
>> > Same here.
>> >
>> > What exactly was the problem this patch tried to solve?
>>
>> It ensures the python lsp's don't complain about invalid imports because
>> they don't have visibility of the PYTHONPATH set by ./run
>
> That's a bit unfortunate, but I think it's a lot less bad
> than emacs complaining every single time you open a python file.

If you trust a project not to do bad things you can set:

  safe-local-variable-directories

which for me is set to:

  ("/home/alex/lsrc/qemu.git/")

But I take your point. I'll figure out how to do this without
.dir-locals and send a revert documenting it.

>
> -- PMM

-- 
Alex Bennée
Virtualisation Tech Lead @ Linaro


^ permalink raw reply	[flat|nested] 26+ messages in thread

end of thread, other threads:[~2026-11-12 19:26 UTC | newest]

Thread overview: 26+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-10-23 18:05 [PULL 00/19] testing updates (tcg, gdbstub) Alex Bennée
2026-10-23 18:05 ` [PULL 01/19] tests/functional: test_acpi_bits requires TCG Alex Bennée
2026-10-23 18:05 ` [PULL 02/19] tests/tcg: fix buffer overflow in multiarch/linux/linux-sigrtminmax Alex Bennée
2026-10-23 18:05 ` [PULL 03/19] .dir-locals: include QEMU code in PYTHONPATH Alex Bennée
2026-11-12 11:06   ` Peter Maydell
2026-11-12 12:19     ` Markus Armbruster
2026-11-12 17:19       ` Alex Bennée
2026-11-12 17:52         ` Peter Maydell
2026-11-12 19:26           ` Alex Bennée
2026-10-23 18:05 ` [PULL 04/19] meson: move gdb detection into the top level build file Alex Bennée
2026-10-23 18:05 ` [PULL 05/19] tests/functional: allow tuxrun tests to be passed "accel" Alex Bennée
2026-10-23 18:05 ` [PULL 06/19] tests/functional: split x86_64 tuxrun into tcg and kvm run Alex Bennée
2026-10-23 18:05 ` [PULL 07/19] tests/functional: update x86_64 tuxrun images Alex Bennée
2026-10-23 18:05 ` [PULL 08/19] tests/guest-debug: convert gdb_cmd to an array Alex Bennée
2026-10-23 18:05 ` [PULL 09/19] tests/guest-debug: convert cmd to an qemu_cmd array Alex Bennée
2026-10-23 18:05 ` [PULL 10/19] tests/guest-debug: add --kargs option to run-test Alex Bennée
2026-10-23 18:05 ` [PULL 11/19] tests/guest-debug: add --symbols " Alex Bennée
2026-10-23 18:05 ` [PULL 12/19] tests/functional: teach tuxrun about launching gdb tests Alex Bennée
2026-10-23 18:05 ` [PULL 13/19] tests/functional: add tuxrun kvm gdb test for x86_64 Alex Bennée
2026-10-23 18:05 ` [PULL 14/19] tests/functional: split aarch64 tuxrun into tcg and kvm run Alex Bennée
2026-10-23 18:05 ` [PULL 15/19] tests/functional: update arm64 tuxrun images Alex Bennée
2026-10-23 18:05 ` [PULL 16/19] tests/functional: add tuxrun kvm gdb test for arm64 Alex Bennée
2026-10-23 18:05 ` [PULL 17/19] tests/functional: split s390x tuxrun into tcg and kvm run Alex Bennée
2026-10-23 18:05 ` [PULL 18/19] tests/functional: update s390x tuxrun images Alex Bennée
2026-10-23 18:05 ` [PULL 19/19] tests/functional: add tuxrun kvm gdb test for s390x Alex Bennée
2026-10-24 15:12 ` [PULL 00/19] testing updates (tcg, gdbstub) Richard Henderson

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.