mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-03 15:53:54 -06:00
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>
This commit is contained in:
parent
f63c987b05
commit
b709da5d29
7 changed files with 167 additions and 30 deletions
|
@ -350,6 +350,8 @@ typedef union IcountDecr {
|
|||
* from CPUArchState, via small negative offsets.
|
||||
* @can_do_io: True if memory-mapped IO is allowed.
|
||||
* @plugin_mem_cbs: active plugin memory callbacks
|
||||
* @plugin_mem_value_low: 64 lower bits of latest accessed mem value.
|
||||
* @plugin_mem_value_high: 64 higher bits of latest accessed mem value.
|
||||
*/
|
||||
typedef struct CPUNegativeOffsetState {
|
||||
CPUTLB tlb;
|
||||
|
@ -358,6 +360,8 @@ typedef struct CPUNegativeOffsetState {
|
|||
* The callback pointer are accessed via TCG (see gen_empty_mem_helper).
|
||||
*/
|
||||
GArray *plugin_mem_cbs;
|
||||
uint64_t plugin_mem_value_low;
|
||||
uint64_t plugin_mem_value_high;
|
||||
#endif
|
||||
IcountDecr icount_decr;
|
||||
bool can_do_io;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue