On 02/03/2026 14:53, Florian Hofhammer wrote: > Hi, > > This patch series builds on top of the discussion from the thread at > https://lore.kernel.org/qemu-devel/[email protected]/ > and adds a plugin API function to set the program counter of the guest, > as just writing to it via qemu_plugin_write_register() has no direct > effect. > > This version v5 of the patch series addresses the requested changes from > the previous v4 submission (details below). > Note: checkpatch.pl still reports a warning about line length violations > in patch nr. 6/7 but I did not fix this, as the line was already > 80 > characters long previously, the change added only a single character, > and I think the readability of the code is better as it is now. Please > let me know if you disagree and would like me to fix this! > > Best regards, > Florian > > Changes: > v5: > - make QEMU abort via asserts instead of just returning an error from > the plugin API if preconditions are violated > - extend tests for qemu_plugin_set_pc() to different contexts > - fix issues highlighted by checkpatch.pl > v4: > - switch strcmp out in favor of g_strcmp0 > - split the patch introducing the qemu_plugin_set_pc() API into three > patches, two for preparing the plugin infrastructure and the syscall > handling code and a third introducing the actual plugin API > v3: > - make PC registers read-only across architectures > - add tests for read-only registers > - adjust test structure for qemu_plugin_set_pc() by moving > architecture-specific tests into corresponding directories > v2: > - add setjmp() in syscall handling path to allow PC redirection from > syscall callbacks (via longjmp(), the cpu_loop()'s setjmp() for > exiting a TB would not be live anymore in syscall handlers) > - add flags to ensure the qemu_plugin_set_pc() API is only called from > contexts where the CPU is live > - add test for qemu_plugin_set_pc() API > v1: > - initial version > > > Florian Hofhammer (7): > plugins: add flag to specify whether PC is rw > linux-user: make syscall emulation interruptible > plugins: add PC diversion API function > tests/tcg: add test for qemu_plugin_set_pc API > plugins: add read-only property for registers > plugins: prohibit writing to read-only registers > tests/tcg/plugins: test register accesses > > MAINTAINERS | 1 + > include/plugins/qemu-plugin.h | 19 +++ > linux-user/aarch64/cpu_loop.c | 2 +- > linux-user/alpha/cpu_loop.c | 2 +- > linux-user/arm/cpu_loop.c | 2 +- > linux-user/hexagon/cpu_loop.c | 2 +- > linux-user/hppa/cpu_loop.c | 1 + > linux-user/i386/cpu_loop.c | 8 +- > linux-user/include/special-errno.h | 8 + > linux-user/loongarch64/cpu_loop.c | 5 +- > linux-user/m68k/cpu_loop.c | 2 +- > linux-user/microblaze/cpu_loop.c | 2 +- > linux-user/mips/cpu_loop.c | 9 +- > linux-user/or1k/cpu_loop.c | 2 +- > linux-user/ppc/cpu_loop.c | 10 +- > linux-user/riscv/cpu_loop.c | 2 +- > linux-user/s390x/cpu_loop.c | 2 +- > linux-user/sh4/cpu_loop.c | 2 +- > linux-user/sparc/cpu_loop.c | 4 +- > linux-user/syscall.c | 16 ++ > linux-user/xtensa/cpu_loop.c | 1 + > plugins/api.c | 42 +++++- > plugins/core.c | 29 ++-- > tests/tcg/arm/Makefile.target | 6 + > tests/tcg/multiarch/Makefile.target | 17 ++- > .../{ => plugin}/check-plugin-output.sh | 0 > .../{ => plugin}/test-plugin-mem-access.c | 0 > .../tcg/multiarch/plugin/test-plugin-set-pc.c | 140 ++++++++++++++++++ > tests/tcg/plugins/meson.build | 2 + > tests/tcg/plugins/registers.c | 79 ++++++++++ > tests/tcg/plugins/setpc.c | 120 +++++++++++++++ > 31 files changed, 495 insertions(+), 42 deletions(-) > rename tests/tcg/multiarch/{ => plugin}/check-plugin-output.sh (100%) > rename tests/tcg/multiarch/{ => plugin}/test-plugin-mem-access.c (100%) > create mode 100644 tests/tcg/multiarch/plugin/test-plugin-set-pc.c > create mode 100644 tests/tcg/plugins/registers.c > create mode 100644 tests/tcg/plugins/setpc.c > > > base-commit: ffcf1a7981793973ffbd8100a7c3c6042d02ae23
Please ignore this patch series, I will send a v6 version soon. Sorry for the inconvenience and thanks for your understanding! Best regards, Florian
smime.p7s
Description: S/MIME Cryptographic Signature
