Pierrick Bouvier and Alex Bennée
8ac1719df7
plugins: eradicate qemu-plugins.symbols static file
...
Signed-off-by: Pierrick Bouvier <pierrick.bouvier@linaro.org >
Message-Id: <20241112212622.3590693-4-pierrick.bouvier@linaro.org >
Signed-off-by: Alex Bennée <alex.bennee@linaro.org >
Message-Id: <20241121165806.476008-38-alex.bennee@linaro.org >
2024-11-25 10:27:45 +00:00
Pierrick Bouvier and Alex Bennée
1ef08e341f
plugins: detect qemu plugin API symbols from header
...
Instead of using a static file (error prone and hard to keep in sync),
we generate it using a script.
Note: if a symbol is not exported, we'll now notice it when linking for
Windows/MacOS platforms.
Signed-off-by: Pierrick Bouvier <pierrick.bouvier@linaro.org >
Message-Id: <20241112212622.3590693-3-pierrick.bouvier@linaro.org >
Signed-off-by: Alex Bennée <alex.bennee@linaro.org >
Message-Id: <20241121165806.476008-37-alex.bennee@linaro.org >
2024-11-25 10:27:43 +00:00
Rowan Hart and Alex Bennée
595cd9ce2e
plugins: add plugin API to read guest memory
...
Signed-off-by: Rowan Hart <rowanbhart@gmail.com >
Reviewed-by: Pierrick Bouvier <pierrick.bouvier@linaro.org >
Message-Id: <20240827215329.248434-2-rowanbhart@gmail.com >
[AJB: tweaked cpu_memory_rw_debug call]
Signed-off-by: Alex Bennée <alex.bennee@linaro.org >
Message-Id: <20240916085400.1046925-17-alex.bennee@linaro.org >
2024-09-19 15:58:01 +01:00
Pierrick Bouvier and Alex Bennée
9505f85e2d
plugins: extend API to get latest memory value accessed
...
This value can be accessed only during a memory callback, using
new qemu_plugin_mem_get_value function.
Returned value can be extended when QEMU will support accesses wider
than 128 bits.
Resolves: https://gitlab.com/qemu-project/qemu/-/issues/1719
Resolves: https://gitlab.com/qemu-project/qemu/-/issues/2152
Reviewed-by: Richard Henderson <richard.henderson@linaro.org >
Reviewed-by: Xingtao Yao <yaoxt.fnst@fujitsu.com >
Reviewed-by: Alex Bennée <alex.bennee@linaro.org >
Signed-off-by: Pierrick Bouvier <pierrick.bouvier@linaro.org >
Message-Id: <20240724194708.1843704-3-pierrick.bouvier@linaro.org >
Signed-off-by: Alex Bennée <alex.bennee@linaro.org >
Message-Id: <20240916085400.1046925-6-alex.bennee@linaro.org >
2024-09-19 15:58:01 +01:00
Pierrick Bouvier and Alex Bennée
b709da5d29
plugins: save value during memory accesses
...
Different code paths handle memory accesses:
- tcg generated code
- load/store helpers
- atomic helpers
This value is saved in cpu->neg.plugin_mem_value_{high,low}. Values are
written only for accessed word size (upper bits are not set).
Atomic operations are doing read/write at the same time, so we generate
two memory callbacks instead of one, to allow plugins to access distinct
values.
For now, we can have access only up to 128 bits, thus split this in two
64 bits words. When QEMU will support wider operations, we'll be able to
reconsider this.
Reviewed-by: Richard Henderson <richard.henderson@linaro.org >
Reviewed-by: Alex Bennée <alex.bennee@linaro.org >
Signed-off-by: Pierrick Bouvier <pierrick.bouvier@linaro.org >
Message-Id: <20240724194708.1843704-2-pierrick.bouvier@linaro.org >
Signed-off-by: Alex Bennée <alex.bennee@linaro.org >
Message-Id: <20240916085400.1046925-5-alex.bennee@linaro.org >
2024-09-19 15:58:01 +01:00
Pierrick Bouvier and Alex Bennée
278035fc81
plugins: fix race condition with scoreboards
...
A deadlock can be created if a new vcpu (a) triggers a scoreboard
reallocation, and another vcpu (b) wants to create a new scoreboard at
the same time.
In this case, (a) holds the plugin lock, and starts an exclusive
section, waiting for (b). But at the same time, (b) is waiting for
plugin lock.
The solution is to drop the lock before entering the exclusive section.
This bug can be easily reproduced by creating a callback for any tb
exec, that allocates a new scoreboard. In this case, as soon as we reach
more than 16 vcpus, the deadlock occurs.
Resolves: https://gitlab.com/qemu-project/qemu/-/issues/2344
Signed-off-by: Pierrick Bouvier <pierrick.bouvier@linaro.org >
Message-Id: <20240812220748.95167-2-pierrick.bouvier@linaro.org >
[AJB: tweak var position to meet coding style]
Signed-off-by: Alex Bennée <alex.bennee@linaro.org >
Reviewed-by: Richard Henderson <richard.henderson@linaro.org >
Message-Id: <20240813202329.1237572-22-alex.bennee@linaro.org >
2024-08-16 14:13:07 +01:00
Philippe Mathieu-Daudé and Alex Bennée
20fdd01e51
buildsys: Fix building without plugins on Darwin
...
Since commit 0082475e26 the plugin symbol list is unconditionally
added to the linker flags, leading to a build failure:
Undefined symbols for architecture arm64:
"_qemu_plugin_entry_code", referenced from:
<initial-undefines>
...
ld: symbol(s) not found for architecture arm64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
ninja: build stopped: subcommand failed.
Fix by restricting the whole meson file to the --enable-plugins
configure argument.
Fixes: 0082475e26 ("meson: merge plugin_ldflags into emulator_link_args")
Resolves: https://gitlab.com/qemu-project/qemu/-/issues/2476
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org >
Acked-by: Richard Henderson <richard.henderson@linaro.org >
Message-Id: <20240813112457.92560-1-philmd@linaro.org >
Signed-off-by: Alex Bennée <alex.bennee@linaro.org >
Message-Id: <20240813202329.1237572-9-alex.bennee@linaro.org >
2024-08-16 14:04:19 +01:00
Alex Bennée
7b690fd3d0
plugin/loader: handle basic help query
...
As the list of options isn't fixed we do all the parsing by hand.
Without any named arguments we automatically fill the "file" option
with the value give so check if it is requesting help and dump some
basic usage text.
Signed-off-by: Alex Bennée <alex.bennee@linaro.org >
Message-Id: <20240729144414.830369-15-alex.bennee@linaro.org >
2024-07-30 11:44:21 +01:00
Philippe Mathieu-Daudé and Alex Bennée
0f3974b64c
accel/tcg: Move qemu_plugin_vcpu_init__async() to plugins/
...
Calling qemu_plugin_vcpu_init__async() on the vCPU thread
is a detail of plugins, not relevant to TCG vCPU management.
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org >
Reviewed-by: Richard Henderson <richard.henderson@linaro.org >
Reviewed-by: Pierrick Bouvier <pierrick.bouvier@linaro.org >
Message-Id: <20240606124010.2460-4-philmd@linaro.org >
Signed-off-by: Alex Bennée <alex.bennee@linaro.org >
Message-Id: <20240705084047.857176-30-alex.bennee@linaro.org >
2024-07-05 12:34:55 +01:00
Philippe Mathieu-Daudé and Alex Bennée
2089a2e5bb
plugins: Ensure vCPU index is assigned in init/exit hooks
...
Since vCPUs are hashed by their index, this index can't
be uninitialized (UNASSIGNED_CPU_INDEX).
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org >
Reviewed-by: Pierrick Bouvier <pierrick.bouvier@linaro.org >
Message-Id: <20240606124010.2460-2-philmd@linaro.org >
Signed-off-by: Alex Bennée <alex.bennee@linaro.org >
Message-Id: <20240705084047.857176-28-alex.bennee@linaro.org >
2024-07-05 12:34:48 +01:00
Paolo Bonzini
0082475e26
meson: merge plugin_ldflags into emulator_link_args
...
These serve the same purpose, except plugin_ldflags ends up in the linker
command line in a more roundabout way (through specific_ss). Simplify.
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com >
2024-07-03 18:41:25 +02:00
Pierrick Bouvier and Alex Bennée
ca7d7f4276
plugins: fix inject_mem_cb rw masking
...
These are not booleans, but masks.
Issue found by Richard Henderson.
Fixes: f86fd4d872 ("plugins: distinct types for callbacks")
Signed-off-by: Richard Henderson <richard.henderson@linaro.org >
Signed-off-by: Pierrick Bouvier <pierrick.bouvier@linaro.org >
Message-Id: <20240612195147.93121-3-pierrick.bouvier@linaro.org >
Signed-off-by: Alex Bennée <alex.bennee@linaro.org >
Message-Id: <20240620152220.2192768-12-alex.bennee@linaro.org >
2024-06-24 10:15:16 +01:00
Alex Bennée
508036532c
plugins: add migration blocker
...
If the plugin in controlling time there is some state that might be
missing from the plugin tracking it. Migration is unlikely to work in
this case so lets put a migration blocker in to let the user know if
they try.
Suggested-by: Dr. David Alan Gilbert <dave@treblig.org >
Reviewed-by: Thomas Huth <thuth@redhat.com >
Reviewed-by: Richard Henderson <richard.henderson@linaro.org >
Signed-off-by: Alex Bennée <alex.bennee@linaro.org >
Message-Id: <20240620152220.2192768-10-alex.bennee@linaro.org >
2024-06-24 10:15:10 +01:00
Alex Bennée
847a65dd76
plugins: add time control API
...
Expose the ability to control time through the plugin API. Only one
plugin can control time so it has to request control when loaded.
There are probably more corner cases to catch here.
Signed-off-by: Pierrick Bouvier <pierrick.bouvier@linaro.org >
[AJB: tweaked user-mode handling, merged QEMU_PLUGIN_API fix]
Message-Id: <20240530220610.1245424-6-pierrick.bouvier@linaro.org >
Signed-off-by: Alex Bennée <alex.bennee@linaro.org >
Message-Id: <20240620152220.2192768-9-alex.bennee@linaro.org >
2024-06-24 10:15:04 +01:00
Akihiko Odaki and Alex Bennée
ad59d5caee
plugins: Ensure register handles are not NULL
...
Ensure register handles are not NULL so that a plugin can assume NULL is
invalid as a register handle.
Signed-off-by: Akihiko Odaki <akihiko.odaki@daynix.com >
Reviewed-by: Pierrick Bouvier <pierrick.bouvier@linaro.org >
Message-Id: <20240229-null-v1-1-e716501d981e@daynix.com >
Signed-off-by: Alex Bennée <alex.bennee@linaro.org >
Reviewed-by: Richard Henderson <richard.henderson@linaro.org >
Message-Id: <20240620152220.2192768-4-alex.bennee@linaro.org >
2024-06-24 10:14:22 +01:00
Alex Bennée and Philippe Mathieu-Daudé
2fa16246dd
plugins: remove special casing for cpu->realized
...
Now the condition variable is initialised early on we don't need to go
through hoops to avoid calling async_run_on_cpu.
Signed-off-by: Alex Bennée <alex.bennee@linaro.org >
Reviewed-by: Pierrick Bouvier <pierrick.bouvier@linaro.org >
Message-ID: <20240530194250.1801701-5-alex.bennee@linaro.org >
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org >
2024-06-04 10:02:39 +02:00
Pierrick Bouvier and Alex Bennée
09afe9677e
plugins: remove op from qemu_plugin_inline_cb
...
This field is not needed as the callback type already holds this
information.
Reviewed-by: Richard Henderson <richard.henderson@linaro.org >
Signed-off-by: Pierrick Bouvier <pierrick.bouvier@linaro.org >
Message-Id: <20240502211522.346467-10-pierrick.bouvier@linaro.org >
Reviewed-by: Michael S. Tsirkin <mst@redhat.com >
Signed-off-by: Alex Bennée <alex.bennee@linaro.org >
Message-Id: <20240514174253.694591-12-alex.bennee@linaro.org >
2024-05-16 08:55:23 +01:00
Pierrick Bouvier and Alex Bennée
f86fd4d872
plugins: distinct types for callbacks
...
To prevent errors when writing new types of callbacks or inline
operations, we split callbacks data to distinct types.
Reviewed-by: Richard Henderson <richard.henderson@linaro.org >
Signed-off-by: Pierrick Bouvier <pierrick.bouvier@linaro.org >
Message-Id: <20240502211522.346467-8-pierrick.bouvier@linaro.org >
Reviewed-by: Michael S. Tsirkin <mst@redhat.com >
Signed-off-by: Alex Bennée <alex.bennee@linaro.org >
Message-Id: <20240514174253.694591-10-alex.bennee@linaro.org >
2024-05-16 08:55:23 +01:00
Pierrick Bouvier and Alex Bennée
7de77d3788
plugins: conditional callbacks
...
Extend plugins API to support callback called with a given criteria
(evaluated inline).
Added functions:
- qemu_plugin_register_vcpu_tb_exec_cond_cb
- qemu_plugin_register_vcpu_insn_exec_cond_cb
They expect as parameter a condition, a qemu_plugin_u64_t (op1) and an
immediate (op2). Callback is called if op1 |cond| op2 is true.
Reviewed-by: Richard Henderson <richard.henderson@linaro.org >
Signed-off-by: Pierrick Bouvier <pierrick.bouvier@linaro.org >
Message-Id: <20240502211522.346467-6-pierrick.bouvier@linaro.org >
Reviewed-by: Michael S. Tsirkin <mst@redhat.com >
[AJB: fix re-base conflict with tb_is_mem_only()]
Signed-off-by: Alex Bennée <alex.bennee@linaro.org >
Message-Id: <20240514174253.694591-8-alex.bennee@linaro.org >
2024-05-16 08:55:02 +01:00
Pierrick Bouvier and Alex Bennée
36a1d8e710
plugins: add new inline op STORE_U64
...
This new operation can store an immediate u64 value to a given
scoreboard.
Reviewed-by: Richard Henderson <richard.henderson@linaro.org >
Signed-off-by: Pierrick Bouvier <pierrick.bouvier@linaro.org >
Message-Id: <20240502211522.346467-4-pierrick.bouvier@linaro.org >
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org >
Reviewed-by: Michael S. Tsirkin <mst@redhat.com >
Signed-off-by: Alex Bennée <alex.bennee@linaro.org >
Message-Id: <20240514174253.694591-6-alex.bennee@linaro.org >
2024-05-16 08:47:01 +01:00
Pierrick Bouvier and Alex Bennée
21032784e5
plugins: prepare introduction of new inline ops
...
Until now, only add_u64 was available, and all functions assumed this or
were named uniquely.
Reviewed-by: Richard Henderson <richard.henderson@linaro.org >
Signed-off-by: Pierrick Bouvier <pierrick.bouvier@linaro.org >
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org >
Reviewed-by: Michael S. Tsirkin <mst@redhat.com >
Signed-off-by: Alex Bennée <alex.bennee@linaro.org >
Message-Id: <20240514174253.694591-4-alex.bennee@linaro.org >
2024-05-16 08:47:01 +01:00
Richard Henderson
4c833c60e0
disas: Use translator_st to get disassembly data
...
Read from already translated pages, or saved mmio data.
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org >
Signed-off-by: Richard Henderson <richard.henderson@linaro.org >
2024-05-15 08:55:19 +02:00
Richard Henderson
e763953a24
plugins: Use DisasContextBase for qemu_plugin_tb_vaddr
...
We do not need to separately record the start of the TB.
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org >
Signed-off-by: Richard Henderson <richard.henderson@linaro.org >
2024-05-15 08:55:18 +02:00
Richard Henderson
d3ace10590
plugins: Use DisasContextBase for qemu_plugin_insn_haddr
...
We can delay the computation of haddr until the plugin
actually requests it.
Reviewed-by: Pierrick Bouvier <pierrick.bouvier@linaro.org >
Signed-off-by: Richard Henderson <richard.henderson@linaro.org >
2024-05-15 08:55:18 +02:00
Richard Henderson
e501325991
plugins: Read mem_only directly from TB cflags
...
Do not pass around a boolean between multiple structures,
just read it from the TranslationBlock in the TCGContext.
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org >
Signed-off-by: Richard Henderson <richard.henderson@linaro.org >
2024-05-15 08:55:18 +02:00