All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v6 0/7] Enable PC diversion via the plugin API
@ 2026-03-03 13:07 Florian Hofhammer
  2026-03-03 13:07 ` [PATCH v6 1/7] plugins: add flag to specify whether PC is rw Florian Hofhammer
                   ` (7 more replies)
  0 siblings, 8 replies; 26+ messages in thread
From: Florian Hofhammer @ 2026-03-03 13:07 UTC (permalink / raw)
  To: qemu-devel
  Cc: Florian Hofhammer, Alex Bennée, Pierrick Bouvier,
	Laurent Vivier, berrange, richard.henderson, imp

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 v6 of the patch series addresses the requested changes from
the previous v4 submission and an incorrect commit message from v5
(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:
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

 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 ++-
 .../multiarch/{ => plugin}/check-plugin-output.sh  |   0
 .../{ => plugin}/test-plugin-mem-access.c          |   0
 tests/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(-)
---
base-commit: 3fb456e9a0e9eef6a71d9b49bfff596a0f0046e9
change-id: 20260303-setpc-v5-c1df30bad07f


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

end of thread, other threads:[~2026-03-05  8:30 UTC | newest]

Thread overview: 26+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-03-03 13:07 [PATCH v6 0/7] Enable PC diversion via the plugin API Florian Hofhammer
2026-03-03 13:07 ` [PATCH v6 1/7] plugins: add flag to specify whether PC is rw Florian Hofhammer
2026-03-03 18:08   ` Pierrick Bouvier
2026-03-03 13:07 ` [PATCH v6 2/7] linux-user: make syscall emulation interruptible Florian Hofhammer
2026-03-03 13:07 ` [PATCH v6 3/7] plugins: add PC diversion API function Florian Hofhammer
2026-03-03 13:07 ` [PATCH v6 4/7] tests/tcg: add tests for qemu_plugin_set_pc API Florian Hofhammer
2026-03-03 19:46   ` Pierrick Bouvier
2026-03-04 15:35     ` Florian Hofhammer
2026-03-04 15:45       ` Florian Hofhammer
2026-03-04 16:18         ` Florian Hofhammer
2026-03-04 17:56           ` Pierrick Bouvier
2026-03-04 19:38             ` Pierrick Bouvier
2026-03-05  7:14               ` Florian Hofhammer
2026-03-04 17:44       ` Pierrick Bouvier
2026-03-03 13:07 ` [PATCH v6 5/7] plugins: add read-only property for registers Florian Hofhammer
2026-03-03 18:08   ` Pierrick Bouvier
2026-03-03 13:07 ` [PATCH v6 6/7] plugins: prohibit writing to read-only registers Florian Hofhammer
2026-03-03 13:57   ` Alex Bennée
2026-03-03 18:09   ` Pierrick Bouvier
2026-03-03 13:07 ` [PATCH v6 7/7] tests/tcg/plugins: test register accesses Florian Hofhammer
2026-03-03 18:10   ` Pierrick Bouvier
2026-03-03 19:20 ` [PATCH v6 0/7] Enable PC diversion via the plugin API Pierrick Bouvier
2026-03-04 10:36   ` Florian Hofhammer
2026-03-04 17:39     ` Pierrick Bouvier
2026-03-05  7:14       ` Florian Hofhammer
2026-03-05  8:30         ` 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.