All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v7 0/8] Enable PC diversion via the plugin API
@ 2026-03-05 10:05 Florian Hofhammer
  2026-03-05 10:05 ` [PATCH v7 1/8] plugins/core: clamp syscall arguments if target is 32-bit Florian Hofhammer
                   ` (8 more replies)
  0 siblings, 9 replies; 18+ messages in thread
From: Florian Hofhammer @ 2026-03-05 10:05 UTC (permalink / raw)
  To: qemu-devel
  Cc: Florian Hofhammer, Pierrick Bouvier, Alex Bennée,
	Warner Losh

Hi,

This patch series builds on top of the discussion from the thread at
https://lore.kernel.org/qemu-devel/e9bcd7c7-2d67-469e-b2f3-d1a68e456b2b@epfl.ch/
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 v7 of the patch series addresses the requested changes from
the previous v6 submission (details below).

Note: checkpatch.pl still reports a warning about line length violations
in patch nr. 7/8 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!

@Pierrick: you already reviewed patch 3/7 (now 4/8) previously, but I
had to change the regex in scripts/qemu-plugin-symbols.py to account for
attributes, so please re-review!

Best regards,
Florian 

Changes:
v7:
- Add Pierrick's patch to clamp 32-bit registers to prevent accidental
  sign extension
- Fix documentation build by using __attribute__((__noreturn__)) instead
  of G_NORETURN (required adjusting scripts/qemu-plugin-symbols.py).
- Rework test-plugin-set-pc test to get rid of volatile guard and make
  control flow more linear
- Link to v6: https://lore.kernel.org/qemu-devel/20260303-setpc-v5-v6-0-15c77cfe184e@epfl.ch
v6:
- update commit message for patch 4/7
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 tests 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

Pierrick Bouvier (1):
      plugins/core: clamp syscall arguments if target is 32-bit

 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                                     |  50 ++++++--
 scripts/qemu-plugin-symbols.py                     |   9 +-
 tests/tcg/arm/Makefile.target                      |   6 +
 tests/tcg/hexagon/Makefile.target                  |   8 ++
 tests/tcg/multiarch/Makefile.target                |  17 ++-
 .../multiarch/{ => plugin}/check-plugin-output.sh  |   0
 .../{ => plugin}/test-plugin-mem-access.c          |   0
 tests/tcg/multiarch/plugin/test-plugin-set-pc.c    | 134 +++++++++++++++++++++
 tests/tcg/plugins/meson.build                      |   2 +
 tests/tcg/plugins/registers.c                      |  79 ++++++++++++
 tests/tcg/plugins/setpc.c                          | 109 +++++++++++++++++
 33 files changed, 514 insertions(+), 44 deletions(-)
---
base-commit: 3fb456e9a0e9eef6a71d9b49bfff596a0f0046e9
change-id: 20260303-setpc-v5-c1df30bad07f


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

end of thread, other threads:[~2026-03-06 17:47 UTC | newest]

Thread overview: 18+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-03-05 10:05 [PATCH v7 0/8] Enable PC diversion via the plugin API Florian Hofhammer
2026-03-05 10:05 ` [PATCH v7 1/8] plugins/core: clamp syscall arguments if target is 32-bit Florian Hofhammer
2026-03-05 16:09   ` Pierrick Bouvier
2026-03-05 17:26   ` Alex Bennée
2026-03-05 17:33   ` Philippe Mathieu-Daudé
2026-03-05 17:38     ` Pierrick Bouvier
2026-03-06  7:46       ` Florian Hofhammer
2026-03-06 17:46         ` Pierrick Bouvier
2026-03-05 18:23     ` Pierrick Bouvier
2026-03-05 10:06 ` [PATCH v7 2/8] plugins: add flag to specify whether PC is rw Florian Hofhammer
2026-03-05 10:06 ` [PATCH v7 3/8] linux-user: make syscall emulation interruptible Florian Hofhammer
2026-03-05 10:06 ` [PATCH v7 4/8] plugins: add PC diversion API function Florian Hofhammer
2026-03-05 10:06 ` [PATCH v7 5/8] tests/tcg: add tests for qemu_plugin_set_pc API Florian Hofhammer
2026-03-05 18:24   ` Pierrick Bouvier
2026-03-05 10:06 ` [PATCH v7 6/8] plugins: add read-only property for registers Florian Hofhammer
2026-03-05 10:06 ` [PATCH v7 7/8] plugins: prohibit writing to read-only registers Florian Hofhammer
2026-03-05 10:06 ` [PATCH v7 8/8] tests/tcg/plugins: test register accesses Florian Hofhammer
2026-03-06 17:44 ` [PATCH v7 0/8] Enable PC diversion via the plugin API Pierrick Bouvier

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