* [PATCH v3 01/19] tests/functional: test_acpi_bits requires TCG
2026-10-19 19:26 [PATCH v3 00/19] testing/next: functional testing updates for gdb (pre-PR) Alex Bennée
@ 2026-10-19 19:26 ` Alex Bennée
2026-10-20 22:49 ` Ilya Leoshkevich
2026-10-19 19:26 ` [PATCH v3 02/19] tests/tcg: fix buffer overflow in multiarch/linux/linux-sigrtminmax Alex Bennée
` (17 subsequent siblings)
18 siblings, 1 reply; 29+ messages in thread
From: Alex Bennée @ 2026-10-19 19:26 UTC (permalink / raw)
To: qemu-devel
Cc: Cornelia Huck, Thomas Huth, Ilya Leoshkevich, Paolo Bonzini,
Christian Borntraeger, Peter Xu, Warner Losh,
Marc-André Lureau, Kyle Evans, Keith Busch, Matthew Rosato,
Eric Farman, Zhao Liu, Ani Sinha, Anders Roxell, qemu-arm,
Song Gao, Peter Maydell, Daniel P. Berrangé,
Alex Bennée, Philippe Mathieu-Daudé, Laurent Vivier,
qemu-s390x, Pierrick Bouvier, Brad Smith, Brian Cain, Halil Pasic,
Richard Henderson, Michael S. Tsirkin, Yoshinori Sato,
Klaus Jensen, John Snow, Thomas Huth
Running a full thorough test suite on a KVM-only build fails due to
acpi bits needing icount, therefor 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>
Message-ID: <20260930164649.433573-2-alex.bennee@linaro.org>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
---
v2
- add comment
---
tests/functional/x86_64/test_acpi_bits.py | 3 +++
1 file changed, 3 insertions(+)
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] 29+ messages in thread* Re: [PATCH v3 01/19] tests/functional: test_acpi_bits requires TCG
2026-10-19 19:26 ` [PATCH v3 01/19] tests/functional: test_acpi_bits requires TCG Alex Bennée
@ 2026-10-20 22:49 ` Ilya Leoshkevich
0 siblings, 0 replies; 29+ messages in thread
From: Ilya Leoshkevich @ 2026-10-20 22:49 UTC (permalink / raw)
To: Alex Bennée, qemu-devel
Cc: Cornelia Huck, Thomas Huth, Paolo Bonzini, Christian Borntraeger,
Peter Xu, Warner Losh, Marc-André Lureau, Kyle Evans,
Keith Busch, Matthew Rosato, Eric Farman, Zhao Liu, Ani Sinha,
Anders Roxell, qemu-arm, Song Gao, Peter Maydell,
Daniel P. Berrangé, Philippe Mathieu-Daudé,
Laurent Vivier, qemu-s390x, Pierrick Bouvier, Brad Smith,
Brian Cain, Halil Pasic, Richard Henderson, Michael S. Tsirkin,
Yoshinori Sato, Klaus Jensen, John Snow, Thomas Huth
On 10/19/26 21:26, Alex Bennée wrote:
> Running a full thorough test suite on a KVM-only build fails due to
> acpi bits needing icount, therefor tcg. Declare the restriction so the
therefore?
> 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>
> Message-ID: <20260930164649.433573-2-alex.bennee@linaro.org>
> Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
>
> ---
> v2
> - add comment
> ---
> tests/functional/x86_64/test_acpi_bits.py | 3 +++
> 1 file changed, 3 insertions(+)
Reviewed-by: Ilya Leoshkevich <iii@linux.ibm.com>
^ permalink raw reply [flat|nested] 29+ messages in thread
* [PATCH v3 02/19] tests/tcg: fix buffer overflow in multiarch/linux/linux-sigrtminmax
2026-10-19 19:26 [PATCH v3 00/19] testing/next: functional testing updates for gdb (pre-PR) Alex Bennée
2026-10-19 19:26 ` [PATCH v3 01/19] tests/functional: test_acpi_bits requires TCG Alex Bennée
@ 2026-10-19 19:26 ` Alex Bennée
2026-10-19 19:26 ` [PATCH v3 03/19] .dir-locals: include QEMU code in PYTHONPATH Alex Bennée
` (16 subsequent siblings)
18 siblings, 0 replies; 29+ messages in thread
From: Alex Bennée @ 2026-10-19 19:26 UTC (permalink / raw)
To: qemu-devel
Cc: Cornelia Huck, Thomas Huth, Ilya Leoshkevich, Paolo Bonzini,
Christian Borntraeger, Peter Xu, Warner Losh,
Marc-André Lureau, Kyle Evans, Keith Busch, Matthew Rosato,
Eric Farman, Zhao Liu, Ani Sinha, Anders Roxell, qemu-arm,
Song Gao, Peter Maydell, Daniel P. Berrangé,
Alex Bennée, Philippe Mathieu-Daudé, Laurent Vivier,
qemu-s390x, Pierrick Bouvier, Brad Smith, Brian Cain, Halil Pasic,
Richard Henderson, Michael S. Tsirkin, Yoshinori Sato,
Klaus Jensen, John Snow, Max Filippov
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: <20260930164649.433573-4-alex.bennee@linaro.org>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
---
tests/tcg/multiarch/linux/linux-sigrtminmax.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
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] 29+ messages in thread* [PATCH v3 03/19] .dir-locals: include QEMU code in PYTHONPATH
2026-10-19 19:26 [PATCH v3 00/19] testing/next: functional testing updates for gdb (pre-PR) Alex Bennée
2026-10-19 19:26 ` [PATCH v3 01/19] tests/functional: test_acpi_bits requires TCG Alex Bennée
2026-10-19 19:26 ` [PATCH v3 02/19] tests/tcg: fix buffer overflow in multiarch/linux/linux-sigrtminmax Alex Bennée
@ 2026-10-19 19:26 ` Alex Bennée
2026-10-19 19:26 ` [PATCH v3 04/19] meson: move gdb detection into the top level build file Alex Bennée
` (15 subsequent siblings)
18 siblings, 0 replies; 29+ messages in thread
From: Alex Bennée @ 2026-10-19 19:26 UTC (permalink / raw)
To: qemu-devel
Cc: Cornelia Huck, Thomas Huth, Ilya Leoshkevich, Paolo Bonzini,
Christian Borntraeger, Peter Xu, Warner Losh,
Marc-André Lureau, Kyle Evans, Keith Busch, Matthew Rosato,
Eric Farman, Zhao Liu, Ani Sinha, Anders Roxell, qemu-arm,
Song Gao, Peter Maydell, Daniel P. Berrangé,
Alex Bennée, Philippe Mathieu-Daudé, Laurent Vivier,
qemu-s390x, Pierrick Bouvier, Brad Smith, Brian Cain, Halil Pasic,
Richard Henderson, Michael S. Tsirkin, Yoshinori Sato,
Klaus Jensen, John Snow
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: <20260930163050.426737-1-alex.bennee@linaro.org>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
---
.dir-locals.el | 8 +++++++-
1 file changed, 7 insertions(+), 1 deletion(-)
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] 29+ messages in thread* [PATCH v3 04/19] meson: move gdb detection into the top level build file
2026-10-19 19:26 [PATCH v3 00/19] testing/next: functional testing updates for gdb (pre-PR) Alex Bennée
` (2 preceding siblings ...)
2026-10-19 19:26 ` [PATCH v3 03/19] .dir-locals: include QEMU code in PYTHONPATH Alex Bennée
@ 2026-10-19 19:26 ` Alex Bennée
2026-10-19 19:26 ` [PATCH v3 05/19] tests/functional: allow tuxrun tests to be passed "accel" Alex Bennée
` (14 subsequent siblings)
18 siblings, 0 replies; 29+ messages in thread
From: Alex Bennée @ 2026-10-19 19:26 UTC (permalink / raw)
To: qemu-devel
Cc: Cornelia Huck, Thomas Huth, Ilya Leoshkevich, Paolo Bonzini,
Christian Borntraeger, Peter Xu, Warner Losh,
Marc-André Lureau, Kyle Evans, Keith Busch, Matthew Rosato,
Eric Farman, Zhao Liu, Ani Sinha, Anders Roxell, qemu-arm,
Song Gao, Peter Maydell, Daniel P. Berrangé,
Alex Bennée, Philippe Mathieu-Daudé, Laurent Vivier,
qemu-s390x, Pierrick Bouvier, Brad Smith, Brian Cain, Halil Pasic,
Richard Henderson, Michael S. Tsirkin, Yoshinori Sato,
Klaus Jensen, John Snow
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: <20260930164649.433573-5-alex.bennee@linaro.org>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
---
meson.build | 15 +++++++--------
tests/functional/meson.build | 5 ++---
tests/tcg/meson.build | 5 -----
3 files changed, 9 insertions(+), 16 deletions(-)
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] 29+ messages in thread* [PATCH v3 05/19] tests/functional: allow tuxrun tests to be passed "accel"
2026-10-19 19:26 [PATCH v3 00/19] testing/next: functional testing updates for gdb (pre-PR) Alex Bennée
` (3 preceding siblings ...)
2026-10-19 19:26 ` [PATCH v3 04/19] meson: move gdb detection into the top level build file Alex Bennée
@ 2026-10-19 19:26 ` Alex Bennée
2026-10-19 19:26 ` [PATCH v3 06/19] tests/functional: split x86_64 tuxrun into tcg and kvm run Alex Bennée
` (13 subsequent siblings)
18 siblings, 0 replies; 29+ messages in thread
From: Alex Bennée @ 2026-10-19 19:26 UTC (permalink / raw)
To: qemu-devel
Cc: Cornelia Huck, Thomas Huth, Ilya Leoshkevich, Paolo Bonzini,
Christian Borntraeger, Peter Xu, Warner Losh,
Marc-André Lureau, Kyle Evans, Keith Busch, Matthew Rosato,
Eric Farman, Zhao Liu, Ani Sinha, Anders Roxell, qemu-arm,
Song Gao, Peter Maydell, Daniel P. Berrangé,
Alex Bennée, Philippe Mathieu-Daudé, Laurent Vivier,
qemu-s390x, Pierrick Bouvier, Brad Smith, Brian Cain, Halil Pasic,
Richard Henderson, Michael S. Tsirkin, Yoshinori Sato,
Klaus Jensen, John Snow
For some tests we are about to add we want the flexibility to force
"kvm" so give them that ability.
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Message-ID: <20260930164649.433573-7-alex.bennee@linaro.org>
Reviewed-by: Ilya Leoshkevich <iii@linux.ibm.com>
Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
---
v2
- fix the sh4 direct call to prepare run.
---
tests/functional/qemu_test/tuxruntest.py | 9 +++++++--
tests/functional/sh4/test_tuxrun.py | 2 +-
2 files changed, 8 insertions(+), 3 deletions(-)
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] 29+ messages in thread* [PATCH v3 06/19] tests/functional: split x86_64 tuxrun into tcg and kvm run
2026-10-19 19:26 [PATCH v3 00/19] testing/next: functional testing updates for gdb (pre-PR) Alex Bennée
` (4 preceding siblings ...)
2026-10-19 19:26 ` [PATCH v3 05/19] tests/functional: allow tuxrun tests to be passed "accel" Alex Bennée
@ 2026-10-19 19:26 ` Alex Bennée
2026-10-19 19:26 ` [PATCH v3 07/19] tests/functional: update x86_64 tuxrun images Alex Bennée
` (12 subsequent siblings)
18 siblings, 0 replies; 29+ messages in thread
From: Alex Bennée @ 2026-10-19 19:26 UTC (permalink / raw)
To: qemu-devel
Cc: Cornelia Huck, Thomas Huth, Ilya Leoshkevich, Paolo Bonzini,
Christian Borntraeger, Peter Xu, Warner Losh,
Marc-André Lureau, Kyle Evans, Keith Busch, Matthew Rosato,
Eric Farman, Zhao Liu, Ani Sinha, Anders Roxell, qemu-arm,
Song Gao, Peter Maydell, Daniel P. Berrangé,
Alex Bennée, Philippe Mathieu-Daudé, Laurent Vivier,
qemu-s390x, Pierrick Bouvier, Brad Smith, Brian Cain, Halil Pasic,
Richard Henderson, Michael S. Tsirkin, Yoshinori Sato,
Klaus Jensen, John Snow
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: <20260930164649.433573-8-alex.bennee@linaro.org>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
---
tests/functional/x86_64/test_tuxrun.py | 17 ++++++++++++++++-
1 file changed, 16 insertions(+), 1 deletion(-)
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] 29+ messages in thread* [PATCH v3 07/19] tests/functional: update x86_64 tuxrun images
2026-10-19 19:26 [PATCH v3 00/19] testing/next: functional testing updates for gdb (pre-PR) Alex Bennée
` (5 preceding siblings ...)
2026-10-19 19:26 ` [PATCH v3 06/19] tests/functional: split x86_64 tuxrun into tcg and kvm run Alex Bennée
@ 2026-10-19 19:26 ` Alex Bennée
2026-10-19 19:26 ` [PATCH v3 08/19] tests/guest-debug: convert gdb_cmd to an array Alex Bennée
` (11 subsequent siblings)
18 siblings, 0 replies; 29+ messages in thread
From: Alex Bennée @ 2026-10-19 19:26 UTC (permalink / raw)
To: qemu-devel
Cc: Cornelia Huck, Thomas Huth, Ilya Leoshkevich, Paolo Bonzini,
Christian Borntraeger, Peter Xu, Warner Losh,
Marc-André Lureau, Kyle Evans, Keith Busch, Matthew Rosato,
Eric Farman, Zhao Liu, Ani Sinha, Anders Roxell, qemu-arm,
Song Gao, Peter Maydell, Daniel P. Berrangé,
Alex Bennée, Philippe Mathieu-Daudé, Laurent Vivier,
qemu-s390x, Pierrick Bouvier, Brad Smith, Brian Cain, Halil Pasic,
Richard Henderson, Michael S. Tsirkin, Yoshinori Sato,
Klaus Jensen, John Snow
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: <20260930164649.433573-10-alex.bennee@linaro.org>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
---
tests/functional/x86_64/test_tuxrun.py | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
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] 29+ messages in thread* [PATCH v3 08/19] tests/guest-debug: convert gdb_cmd to an array
2026-10-19 19:26 [PATCH v3 00/19] testing/next: functional testing updates for gdb (pre-PR) Alex Bennée
` (6 preceding siblings ...)
2026-10-19 19:26 ` [PATCH v3 07/19] tests/functional: update x86_64 tuxrun images Alex Bennée
@ 2026-10-19 19:26 ` Alex Bennée
2026-10-20 7:40 ` Thomas Huth
2026-10-20 11:21 ` Ilya Leoshkevich
2026-10-19 19:26 ` [PATCH v3 09/19] tests/guest-debug: convert cmd to an qemu_cmd array Alex Bennée
` (10 subsequent siblings)
18 siblings, 2 replies; 29+ messages in thread
From: Alex Bennée @ 2026-10-19 19:26 UTC (permalink / raw)
To: qemu-devel
Cc: Cornelia Huck, Thomas Huth, Ilya Leoshkevich, Paolo Bonzini,
Christian Borntraeger, Peter Xu, Warner Losh,
Marc-André Lureau, Kyle Evans, Keith Busch, Matthew Rosato,
Eric Farman, Zhao Liu, Ani Sinha, Anders Roxell, qemu-arm,
Song Gao, Peter Maydell, Daniel P. Berrangé,
Alex Bennée, Philippe Mathieu-Daudé, Laurent Vivier,
qemu-s390x, Pierrick Bouvier, Brad Smith, Brian Cain, Halil Pasic,
Richard Henderson, Michael S. Tsirkin, Yoshinori Sato,
Klaus Jensen, John Snow
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>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
---
tests/guest-debug/run-test.py | 26 +++++++++++++++-----------
1 file changed, 15 insertions(+), 11 deletions(-)
diff --git a/tests/guest-debug/run-test.py b/tests/guest-debug/run-test.py
index 838c1c26971..e8b69f85cd1 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(f'"{arg}"' if ' ' in arg else 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] 29+ messages in thread* Re: [PATCH v3 08/19] tests/guest-debug: convert gdb_cmd to an array
2026-10-19 19:26 ` [PATCH v3 08/19] tests/guest-debug: convert gdb_cmd to an array Alex Bennée
@ 2026-10-20 7:40 ` Thomas Huth
2026-10-20 11:21 ` Ilya Leoshkevich
1 sibling, 0 replies; 29+ messages in thread
From: Thomas Huth @ 2026-10-20 7:40 UTC (permalink / raw)
To: Alex Bennée, qemu-devel
Cc: Cornelia Huck, Thomas Huth, Ilya Leoshkevich, Paolo Bonzini,
Christian Borntraeger, Peter Xu, Warner Losh,
Marc-André Lureau, Kyle Evans, Keith Busch, Matthew Rosato,
Eric Farman, Zhao Liu, Ani Sinha, Anders Roxell, qemu-arm,
Song Gao, Peter Maydell, Daniel P. Berrangé,
Philippe Mathieu-Daudé, Laurent Vivier, qemu-s390x,
Pierrick Bouvier, Brad Smith, Brian Cain, Halil Pasic,
Richard Henderson, Michael S. Tsirkin, Klaus Jensen, John Snow
On 19/10/2026 21.26, Alex Bennée wrote:
> 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>
> Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
> ---
> tests/guest-debug/run-test.py | 26 +++++++++++++++-----------
> 1 file changed, 15 insertions(+), 11 deletions(-)
Reviewed-by: Thomas Huth <thuth@redhat.com>
^ permalink raw reply [flat|nested] 29+ messages in thread
* Re: [PATCH v3 08/19] tests/guest-debug: convert gdb_cmd to an array
2026-10-19 19:26 ` [PATCH v3 08/19] tests/guest-debug: convert gdb_cmd to an array Alex Bennée
2026-10-20 7:40 ` Thomas Huth
@ 2026-10-20 11:21 ` Ilya Leoshkevich
1 sibling, 0 replies; 29+ messages in thread
From: Ilya Leoshkevich @ 2026-10-20 11:21 UTC (permalink / raw)
To: Alex Bennée, qemu-devel
Cc: Cornelia Huck, Thomas Huth, Paolo Bonzini, Christian Borntraeger,
Peter Xu, Warner Losh, Marc-André Lureau, Kyle Evans,
Keith Busch, Matthew Rosato, Eric Farman, Zhao Liu, Ani Sinha,
Anders Roxell, qemu-arm, Song Gao, Peter Maydell,
Daniel P. Berrangé, Philippe Mathieu-Daudé,
Laurent Vivier, qemu-s390x, Pierrick Bouvier, Brad Smith,
Brian Cain, Halil Pasic, Richard Henderson, Michael S. Tsirkin,
Yoshinori Sato, Klaus Jensen, John Snow
On 10/19/26 21:26, Alex Bennée wrote:
> 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>
> Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
> ---
> tests/guest-debug/run-test.py | 26 +++++++++++++++-----------
> 1 file changed, 15 insertions(+), 11 deletions(-)
>
> diff --git a/tests/guest-debug/run-test.py b/tests/guest-debug/run-test.py
> index 838c1c26971..e8b69f85cd1 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(f'"{arg}"' if ' ' in arg else arg for arg in cmd)
I would use shlex.quote() here.
It doesn't do anything to strings that don't require quoting:
>>> print(shlex.quote('aaa'))
aaa
>>> print(shlex.quote('"aaa'))
'"aaa'
With that:
Reviewed-by: Ilya Leoshkevich <iii@linux.ibm.com>
[...]
^ permalink raw reply [flat|nested] 29+ messages in thread
* [PATCH v3 09/19] tests/guest-debug: convert cmd to an qemu_cmd array
2026-10-19 19:26 [PATCH v3 00/19] testing/next: functional testing updates for gdb (pre-PR) Alex Bennée
` (7 preceding siblings ...)
2026-10-19 19:26 ` [PATCH v3 08/19] tests/guest-debug: convert gdb_cmd to an array Alex Bennée
@ 2026-10-19 19:26 ` Alex Bennée
2026-10-20 7:43 ` Thomas Huth
2026-10-20 11:22 ` Ilya Leoshkevich
2026-10-19 19:26 ` [PATCH v3 10/19] tests/guest-debug: add --kargs option to run-test Alex Bennée
` (9 subsequent siblings)
18 siblings, 2 replies; 29+ messages in thread
From: Alex Bennée @ 2026-10-19 19:26 UTC (permalink / raw)
To: qemu-devel
Cc: Cornelia Huck, Thomas Huth, Ilya Leoshkevich, Paolo Bonzini,
Christian Borntraeger, Peter Xu, Warner Losh,
Marc-André Lureau, Kyle Evans, Keith Busch, Matthew Rosato,
Eric Farman, Zhao Liu, Ani Sinha, Anders Roxell, qemu-arm,
Song Gao, Peter Maydell, Daniel P. Berrangé,
Alex Bennée, Philippe Mathieu-Daudé, Laurent Vivier,
qemu-s390x, Pierrick Bouvier, Brad Smith, Brian Cain, Halil Pasic,
Richard Henderson, Michael S. Tsirkin, Yoshinori Sato,
Klaus Jensen, John Snow
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>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
---
tests/guest-debug/run-test.py | 31 ++++++++++++++++++-------------
1 file changed, 18 insertions(+), 13 deletions(-)
diff --git a/tests/guest-debug/run-test.py b/tests/guest-debug/run-test.py
index e8b69f85cd1..d5ffaaa9ffc 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] 29+ messages in thread* Re: [PATCH v3 09/19] tests/guest-debug: convert cmd to an qemu_cmd array
2026-10-19 19:26 ` [PATCH v3 09/19] tests/guest-debug: convert cmd to an qemu_cmd array Alex Bennée
@ 2026-10-20 7:43 ` Thomas Huth
2026-10-20 11:22 ` Ilya Leoshkevich
1 sibling, 0 replies; 29+ messages in thread
From: Thomas Huth @ 2026-10-20 7:43 UTC (permalink / raw)
To: Alex Bennée, qemu-devel
Cc: Cornelia Huck, Thomas Huth, Ilya Leoshkevich, Paolo Bonzini,
Christian Borntraeger, Peter Xu, Warner Losh,
Marc-André Lureau, Kyle Evans, Keith Busch, Matthew Rosato,
Eric Farman, Zhao Liu, Ani Sinha, Anders Roxell, qemu-arm,
Song Gao, Peter Maydell, Daniel P. Berrangé,
Philippe Mathieu-Daudé, Laurent Vivier, qemu-s390x,
Pierrick Bouvier, Brad Smith, Brian Cain, Halil Pasic,
Richard Henderson, Michael S. Tsirkin, Yoshinori Sato,
Klaus Jensen, John Snow
On 19/10/2026 21.26, Alex Bennée wrote:
> 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>
> Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
> ---
> tests/guest-debug/run-test.py | 31 ++++++++++++++++++-------------
> 1 file changed, 18 insertions(+), 13 deletions(-)
Reviewed-by: Thomas Huth <thuth@redhat.com>
^ permalink raw reply [flat|nested] 29+ messages in thread
* Re: [PATCH v3 09/19] tests/guest-debug: convert cmd to an qemu_cmd array
2026-10-19 19:26 ` [PATCH v3 09/19] tests/guest-debug: convert cmd to an qemu_cmd array Alex Bennée
2026-10-20 7:43 ` Thomas Huth
@ 2026-10-20 11:22 ` Ilya Leoshkevich
1 sibling, 0 replies; 29+ messages in thread
From: Ilya Leoshkevich @ 2026-10-20 11:22 UTC (permalink / raw)
To: Alex Bennée, qemu-devel
Cc: Cornelia Huck, Thomas Huth, Paolo Bonzini, Christian Borntraeger,
Peter Xu, Warner Losh, Marc-André Lureau, Kyle Evans,
Keith Busch, Matthew Rosato, Eric Farman, Zhao Liu, Ani Sinha,
Anders Roxell, qemu-arm, Song Gao, Peter Maydell,
Daniel P. Berrangé, Philippe Mathieu-Daudé,
Laurent Vivier, qemu-s390x, Pierrick Bouvier, Brad Smith,
Brian Cain, Halil Pasic, Richard Henderson, Michael S. Tsirkin,
Yoshinori Sato, Klaus Jensen, John Snow
On 10/19/26 21:26, Alex Bennée wrote:
> 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>
> Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
> ---
> tests/guest-debug/run-test.py | 31 ++++++++++++++++++-------------
> 1 file changed, 18 insertions(+), 13 deletions(-)
Reviewed-by: Ilya Leoshkevich <iii@linux.ibm.com>
^ permalink raw reply [flat|nested] 29+ messages in thread
* [PATCH v3 10/19] tests/guest-debug: add --kargs option to run-test
2026-10-19 19:26 [PATCH v3 00/19] testing/next: functional testing updates for gdb (pre-PR) Alex Bennée
` (8 preceding siblings ...)
2026-10-19 19:26 ` [PATCH v3 09/19] tests/guest-debug: convert cmd to an qemu_cmd array Alex Bennée
@ 2026-10-19 19:26 ` Alex Bennée
2026-10-20 11:23 ` Ilya Leoshkevich
2026-10-19 19:26 ` [PATCH v3 11/19] tests/guest-debug: add --symbols " Alex Bennée
` (8 subsequent siblings)
18 siblings, 1 reply; 29+ messages in thread
From: Alex Bennée @ 2026-10-19 19:26 UTC (permalink / raw)
To: qemu-devel
Cc: Cornelia Huck, Thomas Huth, Ilya Leoshkevich, Paolo Bonzini,
Christian Borntraeger, Peter Xu, Warner Losh,
Marc-André Lureau, Kyle Evans, Keith Busch, Matthew Rosato,
Eric Farman, Zhao Liu, Ani Sinha, Anders Roxell, qemu-arm,
Song Gao, Peter Maydell, Daniel P. Berrangé,
Alex Bennée, Philippe Mathieu-Daudé, Laurent Vivier,
qemu-s390x, Pierrick Bouvier, Brad Smith, Brian Cain, Halil Pasic,
Richard Henderson, Michael S. Tsirkin, Yoshinori Sato,
Klaus Jensen, John Snow
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>
Message-ID: <20260930164649.433573-11-alex.bennee@linaro.org>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
---
v3
- fix merge with array
---
tests/guest-debug/run-test.py | 8 ++++++++
1 file changed, 8 insertions(+)
diff --git a/tests/guest-debug/run-test.py b/tests/guest-debug/run-test.py
index d5ffaaa9ffc..782c0c5da19 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] 29+ messages in thread* Re: [PATCH v3 10/19] tests/guest-debug: add --kargs option to run-test
2026-10-19 19:26 ` [PATCH v3 10/19] tests/guest-debug: add --kargs option to run-test Alex Bennée
@ 2026-10-20 11:23 ` Ilya Leoshkevich
0 siblings, 0 replies; 29+ messages in thread
From: Ilya Leoshkevich @ 2026-10-20 11:23 UTC (permalink / raw)
To: Alex Bennée, qemu-devel
Cc: Cornelia Huck, Thomas Huth, Paolo Bonzini, Christian Borntraeger,
Peter Xu, Warner Losh, Marc-André Lureau, Kyle Evans,
Keith Busch, Matthew Rosato, Eric Farman, Zhao Liu, Ani Sinha,
Anders Roxell, qemu-arm, Song Gao, Peter Maydell,
Daniel P. Berrangé, Philippe Mathieu-Daudé,
Laurent Vivier, qemu-s390x, Pierrick Bouvier, Brad Smith,
Brian Cain, Halil Pasic, Richard Henderson, Michael S. Tsirkin,
Yoshinori Sato, Klaus Jensen, John Snow
On 10/19/26 21:26, Alex Bennée wrote:
> 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>
> Message-ID: <20260930164649.433573-11-alex.bennee@linaro.org>
> Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
>
> ---
> v3
> - fix merge with array
> ---
> tests/guest-debug/run-test.py | 8 ++++++++
> 1 file changed, 8 insertions(+)
Reviewed-by: Ilya Leoshkevich <iii@linux.ibm.com>
^ permalink raw reply [flat|nested] 29+ messages in thread
* [PATCH v3 11/19] tests/guest-debug: add --symbols option to run-test
2026-10-19 19:26 [PATCH v3 00/19] testing/next: functional testing updates for gdb (pre-PR) Alex Bennée
` (9 preceding siblings ...)
2026-10-19 19:26 ` [PATCH v3 10/19] tests/guest-debug: add --kargs option to run-test Alex Bennée
@ 2026-10-19 19:26 ` Alex Bennée
2026-10-20 11:23 ` Ilya Leoshkevich
2026-10-19 19:26 ` [PATCH v3 12/19] tests/functional: teach tuxrun about launching gdb tests Alex Bennée
` (7 subsequent siblings)
18 siblings, 1 reply; 29+ messages in thread
From: Alex Bennée @ 2026-10-19 19:26 UTC (permalink / raw)
To: qemu-devel
Cc: Cornelia Huck, Thomas Huth, Ilya Leoshkevich, Paolo Bonzini,
Christian Borntraeger, Peter Xu, Warner Losh,
Marc-André Lureau, Kyle Evans, Keith Busch, Matthew Rosato,
Eric Farman, Zhao Liu, Ani Sinha, Anders Roxell, qemu-arm,
Song Gao, Peter Maydell, Daniel P. Berrangé,
Alex Bennée, Philippe Mathieu-Daudé, Laurent Vivier,
qemu-s390x, Pierrick Bouvier, Brad Smith, Brian Cain, Halil Pasic,
Richard Henderson, Michael S. Tsirkin, Yoshinori Sato,
Klaus Jensen, John Snow
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>
Message-ID: <20260930164649.433573-12-alex.bennee@linaro.org>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
---
v3
- fix merge conflict now we use array for gdb_cmd
---
tests/guest-debug/run-test.py | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/tests/guest-debug/run-test.py b/tests/guest-debug/run-test.py
index 782c0c5da19..e74bb489ee1 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] 29+ messages in thread* Re: [PATCH v3 11/19] tests/guest-debug: add --symbols option to run-test
2026-10-19 19:26 ` [PATCH v3 11/19] tests/guest-debug: add --symbols " Alex Bennée
@ 2026-10-20 11:23 ` Ilya Leoshkevich
0 siblings, 0 replies; 29+ messages in thread
From: Ilya Leoshkevich @ 2026-10-20 11:23 UTC (permalink / raw)
To: Alex Bennée, qemu-devel
Cc: Cornelia Huck, Thomas Huth, Paolo Bonzini, Christian Borntraeger,
Peter Xu, Warner Losh, Marc-André Lureau, Kyle Evans,
Keith Busch, Matthew Rosato, Eric Farman, Zhao Liu, Ani Sinha,
Anders Roxell, qemu-arm, Song Gao, Peter Maydell,
Daniel P. Berrangé, Philippe Mathieu-Daudé,
Laurent Vivier, qemu-s390x, Pierrick Bouvier, Brad Smith,
Brian Cain, Halil Pasic, Richard Henderson, Michael S. Tsirkin,
Yoshinori Sato, Klaus Jensen, John Snow
On 10/19/26 21:26, Alex Bennée wrote:
> 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>
> Message-ID: <20260930164649.433573-12-alex.bennee@linaro.org>
> Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
>
> ---
> v3
> - fix merge conflict now we use array for gdb_cmd
> ---
> tests/guest-debug/run-test.py | 5 +++++
> 1 file changed, 5 insertions(+)
Reviewed-by: Ilya Leoshkevich <iii@linux.ibm.com>
^ permalink raw reply [flat|nested] 29+ messages in thread
* [PATCH v3 12/19] tests/functional: teach tuxrun about launching gdb tests
2026-10-19 19:26 [PATCH v3 00/19] testing/next: functional testing updates for gdb (pre-PR) Alex Bennée
` (10 preceding siblings ...)
2026-10-19 19:26 ` [PATCH v3 11/19] tests/guest-debug: add --symbols " Alex Bennée
@ 2026-10-19 19:26 ` Alex Bennée
2026-10-20 22:53 ` Ilya Leoshkevich
2026-10-19 19:26 ` [PATCH v3 13/19] tests/functional: add tuxrun kvm gdb test for x86_64 Alex Bennée
` (6 subsequent siblings)
18 siblings, 1 reply; 29+ messages in thread
From: Alex Bennée @ 2026-10-19 19:26 UTC (permalink / raw)
To: qemu-devel
Cc: Cornelia Huck, Thomas Huth, Ilya Leoshkevich, Paolo Bonzini,
Christian Borntraeger, Peter Xu, Warner Losh,
Marc-André Lureau, Kyle Evans, Keith Busch, Matthew Rosato,
Eric Farman, Zhao Liu, Ani Sinha, Anders Roxell, qemu-arm,
Song Gao, Peter Maydell, Daniel P. Berrangé,
Alex Bennée, Philippe Mathieu-Daudé, Laurent Vivier,
qemu-s390x, Pierrick Bouvier, Brad Smith, Brian Cain, Halil Pasic,
Richard Henderson, Michael S. Tsirkin, Yoshinori Sato,
Klaus Jensen, John Snow
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 over 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
Message-ID: <20260930164649.433573-13-alex.bennee@linaro.org>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
---
v3
- mention the nokaslr in the commit message
- add a comment about it to the shared kernel args
- drop unused failcount
- remove stale comment about hbreak
- always delete the watch point pass or fail
- fix unbalanced tuple in sh4's direct call of fetch_tuxrun_assets
- simplify the symbol to watchpoint logic
- drop the mandatory --binary
- make the command copy and paste friendly
v2
- add self.vm._machine to qargs
- drop leading spaces in print () calls
- add register read tests
- use gdb.Breakpoint for hwbreak as for swbreak
- drop flaky symbol evaluation, verify hit_count instead
- explicit gdb.BP_BREAKPOINT for CatchBreakpoint
---
.../functional/gdb-scripts/kernel_gdb_test.py | 162 ++++++++++++++++++
tests/functional/qemu_test/tuxruntest.py | 97 ++++++++++-
tests/functional/sh4/test_tuxrun.py | 4 +-
tests/guest-debug/run-test.py | 14 +-
4 files changed, 261 insertions(+), 16 deletions(-)
create mode 100644 tests/functional/gdb-scripts/kernel_gdb_test.py
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..6ad421e897d 100644
--- a/tests/functional/qemu_test/tuxruntest.py
+++ b/tests/functional/qemu_test/tuxruntest.py
@@ -9,7 +9,9 @@
#
# SPDX-License-Identifier: GPL-2.0-or-later
+import logging
import os
+import subprocess
from qemu_test import QemuSystemTest
from qemu_test import exec_command_and_wait_for_pattern
@@ -18,7 +20,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 +58,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 +89,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 +144,77 @@ 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",
+ haltmsg="reboot: System halted",
+ 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", " ".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 e74bb489ee1..48a5261618d 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] 29+ messages in thread* Re: [PATCH v3 12/19] tests/functional: teach tuxrun about launching gdb tests
2026-10-19 19:26 ` [PATCH v3 12/19] tests/functional: teach tuxrun about launching gdb tests Alex Bennée
@ 2026-10-20 22:53 ` Ilya Leoshkevich
0 siblings, 0 replies; 29+ messages in thread
From: Ilya Leoshkevich @ 2026-10-20 22:53 UTC (permalink / raw)
To: Alex Bennée, qemu-devel
Cc: Cornelia Huck, Thomas Huth, Paolo Bonzini, Christian Borntraeger,
Peter Xu, Warner Losh, Marc-André Lureau, Kyle Evans,
Keith Busch, Matthew Rosato, Eric Farman, Zhao Liu, Ani Sinha,
Anders Roxell, qemu-arm, Song Gao, Peter Maydell,
Daniel P. Berrangé, Philippe Mathieu-Daudé,
Laurent Vivier, qemu-s390x, Pierrick Bouvier, Brad Smith,
Brian Cain, Halil Pasic, Richard Henderson, Michael S. Tsirkin,
Yoshinori Sato, Klaus Jensen, John Snow
On 10/19/26 21:26, Alex Bennée wrote:
> 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 over an alternative "launch
offer?
> 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
>
> Message-ID: <20260930164649.433573-13-alex.bennee@linaro.org>
> Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
>
> ---
> v3
> - mention the nokaslr in the commit message
> - add a comment about it to the shared kernel args
> - drop unused failcount
> - remove stale comment about hbreak
> - always delete the watch point pass or fail
> - fix unbalanced tuple in sh4's direct call of fetch_tuxrun_assets
> - simplify the symbol to watchpoint logic
> - drop the mandatory --binary
> - make the command copy and paste friendly
> v2
> - add self.vm._machine to qargs
> - drop leading spaces in print () calls
> - add register read tests
> - use gdb.Breakpoint for hwbreak as for swbreak
> - drop flaky symbol evaluation, verify hit_count instead
> - explicit gdb.BP_BREAKPOINT for CatchBreakpoint
> ---
> .../functional/gdb-scripts/kernel_gdb_test.py | 162 ++++++++++++++++++
> tests/functional/qemu_test/tuxruntest.py | 97 ++++++++++-
> tests/functional/sh4/test_tuxrun.py | 4 +-
> tests/guest-debug/run-test.py | 14 +-
> 4 files changed, 261 insertions(+), 16 deletions(-)
> create mode 100644 tests/functional/gdb-scripts/kernel_gdb_test.py
[...]
> @@ -132,10 +144,77 @@ 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",
> + haltmsg="reboot: System halted",
This argument seems to be unused.
> + 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", " ".join(qargs),
I would use shlex.join() here, for symmetry with shlex.split() that
is used to handle this.
[...]
Anyhow:
Reviewed-by: Ilya Leoshkevich <iii@linux.ibm.com>
^ permalink raw reply [flat|nested] 29+ messages in thread
* [PATCH v3 13/19] tests/functional: add tuxrun kvm gdb test for x86_64
2026-10-19 19:26 [PATCH v3 00/19] testing/next: functional testing updates for gdb (pre-PR) Alex Bennée
` (11 preceding siblings ...)
2026-10-19 19:26 ` [PATCH v3 12/19] tests/functional: teach tuxrun about launching gdb tests Alex Bennée
@ 2026-10-19 19:26 ` Alex Bennée
2026-10-19 19:26 ` [PATCH v3 14/19] tests/functional: split aarch64 tuxrun into tcg and kvm run Alex Bennée
` (5 subsequent siblings)
18 siblings, 0 replies; 29+ messages in thread
From: Alex Bennée @ 2026-10-19 19:26 UTC (permalink / raw)
To: qemu-devel
Cc: Cornelia Huck, Thomas Huth, Ilya Leoshkevich, Paolo Bonzini,
Christian Borntraeger, Peter Xu, Warner Losh,
Marc-André Lureau, Kyle Evans, Keith Busch, Matthew Rosato,
Eric Farman, Zhao Liu, Ani Sinha, Anders Roxell, qemu-arm,
Song Gao, Peter Maydell, Daniel P. Berrangé,
Alex Bennée, Philippe Mathieu-Daudé, Laurent Vivier,
qemu-s390x, Pierrick Bouvier, Brad Smith, Brian Cain, Halil Pasic,
Richard Henderson, Michael S. Tsirkin, Yoshinori Sato,
Klaus Jensen, John Snow
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: <20260930164649.433573-14-alex.bennee@linaro.org>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
---
tests/functional/x86_64/test_tuxrun.py | 20 +++++++++++++++++++-
1 file changed, 19 insertions(+), 1 deletion(-)
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] 29+ messages in thread* [PATCH v3 14/19] tests/functional: split aarch64 tuxrun into tcg and kvm run
2026-10-19 19:26 [PATCH v3 00/19] testing/next: functional testing updates for gdb (pre-PR) Alex Bennée
` (12 preceding siblings ...)
2026-10-19 19:26 ` [PATCH v3 13/19] tests/functional: add tuxrun kvm gdb test for x86_64 Alex Bennée
@ 2026-10-19 19:26 ` Alex Bennée
2026-10-19 19:27 ` [PATCH v3 15/19] tests/functional: update arm64 tuxrun images Alex Bennée
` (4 subsequent siblings)
18 siblings, 0 replies; 29+ messages in thread
From: Alex Bennée @ 2026-10-19 19:26 UTC (permalink / raw)
To: qemu-devel
Cc: Cornelia Huck, Thomas Huth, Ilya Leoshkevich, Paolo Bonzini,
Christian Borntraeger, Peter Xu, Warner Losh,
Marc-André Lureau, Kyle Evans, Keith Busch, Matthew Rosato,
Eric Farman, Zhao Liu, Ani Sinha, Anders Roxell, qemu-arm,
Song Gao, Peter Maydell, Daniel P. Berrangé,
Alex Bennée, Philippe Mathieu-Daudé, Laurent Vivier,
qemu-s390x, Pierrick Bouvier, Brad Smith, Brian Cain, Halil Pasic,
Richard Henderson, Michael S. Tsirkin, Yoshinori Sato,
Klaus Jensen, John Snow
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: <20260930164649.433573-9-alex.bennee@linaro.org>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
---
v2
- pass "host" cpu type for KVM run
---
tests/functional/aarch64/test_tuxrun.py | 10 ++++++++++
1 file changed, 10 insertions(+)
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] 29+ messages in thread* [PATCH v3 15/19] tests/functional: update arm64 tuxrun images
2026-10-19 19:26 [PATCH v3 00/19] testing/next: functional testing updates for gdb (pre-PR) Alex Bennée
` (13 preceding siblings ...)
2026-10-19 19:26 ` [PATCH v3 14/19] tests/functional: split aarch64 tuxrun into tcg and kvm run Alex Bennée
@ 2026-10-19 19:27 ` Alex Bennée
2026-10-19 19:27 ` [PATCH v3 16/19] tests/functional: add tuxrun kvm gdb test for arm64 Alex Bennée
` (3 subsequent siblings)
18 siblings, 0 replies; 29+ messages in thread
From: Alex Bennée @ 2026-10-19 19:27 UTC (permalink / raw)
To: qemu-devel
Cc: Cornelia Huck, Thomas Huth, Ilya Leoshkevich, Paolo Bonzini,
Christian Borntraeger, Peter Xu, Warner Losh,
Marc-André Lureau, Kyle Evans, Keith Busch, Matthew Rosato,
Eric Farman, Zhao Liu, Ani Sinha, Anders Roxell, qemu-arm,
Song Gao, Peter Maydell, Daniel P. Berrangé,
Alex Bennée, Philippe Mathieu-Daudé, Laurent Vivier,
qemu-s390x, Pierrick Bouvier, Brad Smith, Brian Cain, Halil Pasic,
Richard Henderson, Michael S. Tsirkin, Yoshinori Sato,
Klaus Jensen, John Snow
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>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
---
v3
- reword commit to make it clearer
---
tests/functional/aarch64/test_tuxrun.py | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
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] 29+ messages in thread* [PATCH v3 16/19] tests/functional: add tuxrun kvm gdb test for arm64
2026-10-19 19:26 [PATCH v3 00/19] testing/next: functional testing updates for gdb (pre-PR) Alex Bennée
` (14 preceding siblings ...)
2026-10-19 19:27 ` [PATCH v3 15/19] tests/functional: update arm64 tuxrun images Alex Bennée
@ 2026-10-19 19:27 ` Alex Bennée
2026-10-19 19:27 ` [PATCH v3 17/19] tests/functional: split s390x tuxrun into tcg and kvm run Alex Bennée
` (2 subsequent siblings)
18 siblings, 0 replies; 29+ messages in thread
From: Alex Bennée @ 2026-10-19 19:27 UTC (permalink / raw)
To: qemu-devel
Cc: Cornelia Huck, Thomas Huth, Ilya Leoshkevich, Paolo Bonzini,
Christian Borntraeger, Peter Xu, Warner Losh,
Marc-André Lureau, Kyle Evans, Keith Busch, Matthew Rosato,
Eric Farman, Zhao Liu, Ani Sinha, Anders Roxell, qemu-arm,
Song Gao, Peter Maydell, Daniel P. Berrangé,
Alex Bennée, Philippe Mathieu-Daudé, Laurent Vivier,
qemu-s390x, Pierrick Bouvier, Brad Smith, Brian Cain, Halil Pasic,
Richard Henderson, Michael S. Tsirkin, Yoshinori Sato,
Klaus Jensen, John Snow
As with x86_64 we now have the bits to add a KVM gdb test
Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
---
tests/functional/aarch64/test_tuxrun.py | 17 ++++++++++++++++-
1 file changed, 16 insertions(+), 1 deletion(-)
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] 29+ messages in thread* [PATCH v3 17/19] tests/functional: split s390x tuxrun into tcg and kvm run
2026-10-19 19:26 [PATCH v3 00/19] testing/next: functional testing updates for gdb (pre-PR) Alex Bennée
` (15 preceding siblings ...)
2026-10-19 19:27 ` [PATCH v3 16/19] tests/functional: add tuxrun kvm gdb test for arm64 Alex Bennée
@ 2026-10-19 19:27 ` Alex Bennée
2026-10-19 19:27 ` [PATCH v3 18/19] tests/functional: update s390x tuxrun images Alex Bennée
2026-10-19 19:27 ` [PATCH v3 19/19] tests/functional: add tuxrun kvm gdb test for s390x Alex Bennée
18 siblings, 0 replies; 29+ messages in thread
From: Alex Bennée @ 2026-10-19 19:27 UTC (permalink / raw)
To: qemu-devel
Cc: Cornelia Huck, Thomas Huth, Ilya Leoshkevich, Paolo Bonzini,
Christian Borntraeger, Peter Xu, Warner Losh,
Marc-André Lureau, Kyle Evans, Keith Busch, Matthew Rosato,
Eric Farman, Zhao Liu, Ani Sinha, Anders Roxell, qemu-arm,
Song Gao, Peter Maydell, Daniel P. Berrangé,
Alex Bennée, Philippe Mathieu-Daudé, Laurent Vivier,
qemu-s390x, Pierrick Bouvier, Brad Smith, Brian Cain, Halil Pasic,
Richard Henderson, Michael S. Tsirkin, Yoshinori Sato,
Klaus Jensen, John Snow
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>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
---
tests/functional/s390x/test_tuxrun.py | 11 +++++++++++
1 file changed, 11 insertions(+)
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] 29+ messages in thread* [PATCH v3 18/19] tests/functional: update s390x tuxrun images
2026-10-19 19:26 [PATCH v3 00/19] testing/next: functional testing updates for gdb (pre-PR) Alex Bennée
` (16 preceding siblings ...)
2026-10-19 19:27 ` [PATCH v3 17/19] tests/functional: split s390x tuxrun into tcg and kvm run Alex Bennée
@ 2026-10-19 19:27 ` Alex Bennée
2026-10-19 19:27 ` [PATCH v3 19/19] tests/functional: add tuxrun kvm gdb test for s390x Alex Bennée
18 siblings, 0 replies; 29+ messages in thread
From: Alex Bennée @ 2026-10-19 19:27 UTC (permalink / raw)
To: qemu-devel
Cc: Cornelia Huck, Thomas Huth, Ilya Leoshkevich, Paolo Bonzini,
Christian Borntraeger, Peter Xu, Warner Losh,
Marc-André Lureau, Kyle Evans, Keith Busch, Matthew Rosato,
Eric Farman, Zhao Liu, Ani Sinha, Anders Roxell, qemu-arm,
Song Gao, Peter Maydell, Daniel P. Berrangé,
Alex Bennée, Philippe Mathieu-Daudé, Laurent Vivier,
qemu-s390x, Pierrick Bouvier, Brad Smith, Brian Cain, Halil Pasic,
Richard Henderson, Michael S. Tsirkin, Yoshinori Sato,
Klaus Jensen, John Snow
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>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
---
v3
- rewrote commit message for clarity
---
tests/functional/s390x/test_tuxrun.py | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
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] 29+ messages in thread* [PATCH v3 19/19] tests/functional: add tuxrun kvm gdb test for s390x
2026-10-19 19:26 [PATCH v3 00/19] testing/next: functional testing updates for gdb (pre-PR) Alex Bennée
` (17 preceding siblings ...)
2026-10-19 19:27 ` [PATCH v3 18/19] tests/functional: update s390x tuxrun images Alex Bennée
@ 2026-10-19 19:27 ` Alex Bennée
2026-10-20 22:46 ` Ilya Leoshkevich
18 siblings, 1 reply; 29+ messages in thread
From: Alex Bennée @ 2026-10-19 19:27 UTC (permalink / raw)
To: qemu-devel
Cc: Cornelia Huck, Thomas Huth, Ilya Leoshkevich, Paolo Bonzini,
Christian Borntraeger, Peter Xu, Warner Losh,
Marc-André Lureau, Kyle Evans, Keith Busch, Matthew Rosato,
Eric Farman, Zhao Liu, Ani Sinha, Anders Roxell, qemu-arm,
Song Gao, Peter Maydell, Daniel P. Berrangé,
Alex Bennée, Philippe Mathieu-Daudé, Laurent Vivier,
qemu-s390x, Pierrick Bouvier, Brad Smith, Brian Cain, Halil Pasic,
Richard Henderson, Michael S. Tsirkin, Yoshinori Sato,
Klaus Jensen, John Snow
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.
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
---
v3
- add symbol-offset handling
- limit the watchpoint tests
- add skipIfMissingEnv("QEMU_TEST_GDB") decorator
---
.../functional/gdb-scripts/kernel_gdb_test.py | 10 ++++++----
tests/functional/qemu_test/tuxruntest.py | 4 ++++
tests/functional/s390x/test_tuxrun.py | 18 +++++++++++++++++-
tests/guest-debug/run-test.py | 7 ++++++-
tests/lcitool/libvirt-ci | 2 +-
5 files changed, 34 insertions(+), 7 deletions(-)
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 6ad421e897d..c43a0b0e499 100644
--- a/tests/functional/qemu_test/tuxruntest.py
+++ b/tests/functional/qemu_test/tuxruntest.py
@@ -159,6 +159,7 @@ def common_tuxrun_gdb(self,
rootfs_asset,
accel=None,
dtb_asset=None,
+ symbol_off = None,
drive="virtio-blk-device",
haltmsg="reboot: System halted",
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 48a5261618d..0b93aae62c6 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:
diff --git a/tests/lcitool/libvirt-ci b/tests/lcitool/libvirt-ci
index f34cd57eb89..5176e136ab1 160000
--- a/tests/lcitool/libvirt-ci
+++ b/tests/lcitool/libvirt-ci
@@ -1 +1 @@
-Subproject commit f34cd57eb892259c26600187bc35cc4152f932cf
+Subproject commit 5176e136ab11e275eb9f57c3d5c80e77af6507cb
--
2.47.3
^ permalink raw reply related [flat|nested] 29+ messages in thread* Re: [PATCH v3 19/19] tests/functional: add tuxrun kvm gdb test for s390x
2026-10-19 19:27 ` [PATCH v3 19/19] tests/functional: add tuxrun kvm gdb test for s390x Alex Bennée
@ 2026-10-20 22:46 ` Ilya Leoshkevich
0 siblings, 0 replies; 29+ messages in thread
From: Ilya Leoshkevich @ 2026-10-20 22:46 UTC (permalink / raw)
To: Alex Bennée, qemu-devel
Cc: Cornelia Huck, Thomas Huth, Paolo Bonzini, Christian Borntraeger,
Peter Xu, Warner Losh, Marc-André Lureau, Kyle Evans,
Keith Busch, Matthew Rosato, Eric Farman, Zhao Liu, Ani Sinha,
Anders Roxell, qemu-arm, Song Gao, Peter Maydell,
Daniel P. Berrangé, Philippe Mathieu-Daudé,
Laurent Vivier, qemu-s390x, Pierrick Bouvier, Brad Smith,
Brian Cain, Halil Pasic, Richard Henderson, Michael S. Tsirkin,
Yoshinori Sato, Klaus Jensen, John Snow
On 10/19/26 21:27, Alex Bennée wrote:
> 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.
>
> Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
> Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
>
> ---
> v3
> - add symbol-offset handling
> - limit the watchpoint tests
> - add skipIfMissingEnv("QEMU_TEST_GDB") decorator
> ---
> .../functional/gdb-scripts/kernel_gdb_test.py | 10 ++++++----
> tests/functional/qemu_test/tuxruntest.py | 4 ++++
> tests/functional/s390x/test_tuxrun.py | 18 +++++++++++++++++-
> tests/guest-debug/run-test.py | 7 ++++++-
> tests/lcitool/libvirt-ci | 2 +-
Did you intend to bump this submodule here?
Otherwise: this now works and LGTM.
Reviewed-by: Ilya Leoshkevich <iii@linux.ibm.com>
[...]
^ permalink raw reply [flat|nested] 29+ messages in thread