On 03/10/2025 16.18, Gustavo Romero wrote:
The goal of this series is to remove Avocado as a dependency for running the reverse_debugging functional test.After several rounds of discussions about v1 and v2, and experiments done by Daniel and Thomas (thanks for all the experiments and comments so far), I've taken a new approach and moved away from using a runner for GDB. The changes, I believe, are much simpler now. This new series uses GDB's machine interface (MI) via the pygdbmi module (thanks Manos and Peter for the inputs). pygdbmi provides a controller to start GDB and communicate with it through MI, so there is no longer a risk of version clashes between libpython in GDB and Python modules in the pyvenv, as it could, in theory, happen when GDB executes the test script via -x option. Also, as Daniel pointed out, the overall test output is pretty bad and currently does not allow one to easily follow the sequence of GDB commands used in the test. I took this opportunity to improve the output and it now prints the sequence in a format that can be copied and pasted directly into GDB. The TAP protocol is respected, and Meson correctly displays GDB's test output in testlog-thorough.txt. Because the pygdbmi "shim" is so thin, I had to write a trivial GDB class around it to easily capture and print the payloads returned by its write() method. The GDB class allows clean, single-line commands to be used in the tests through method chaining, making them easier to follow, for example: pc = gdb.cli("print $pc").get_add() The test is kept “skipped” for aarch64, ppc64, and x86_64, so it is necessary to set QEMU_TEST_FLAKY_TESTS=1 in the test environment to effectively run the test on these archs. On aarch64, the test is flaky, but there is a fix that I’ve tested while writing this series [0] that resolves it. On ppc64 and x86_64, the test always fails: on ppc64, GDB gets a bogus PC, and on x86_64, the last part of the test (reverse-continue) does not hit the last executed PC (as it should happen) but instead jumps to the beginning of the code (first PC in forward order). Thus, to effectively run the reverse_debugging test on aarch64: $ export QEMU_TEST_FLAKY_TESTS=1 $ make check-functional or: $ make check-functional-aarch64 or even, to run only the reverse_debug test after 'make check-functional': $ ./pyvenv/bin/meson test --verbose --no-rebuild -t 1 --setup thorough --suite func-thorough func-aarch64-reverse_debug Cheers, Gustavo v1: https://patchew.org/QEMU/[email protected]/ v2: https://patchew.org/QEMU/[email protected]/ v3: https://patchew.org/QEMU/[email protected]/ v4: https://patchew.org/QEMU/[email protected]/ v5: https://patchew.org/QEMU/[email protected]/ v6: - Fixed skipping test when no GDB is installed in the test environment
With this v6, the test now gets skipped in my incremental build directory, and it works when I compile QEMU in a new folder. I guess that's good enough, so from my side, it's fine to include this now:
Tested-by: Thomas Huth <[email protected]> Alex, will you queue the patches? Thomas
