qemu-e2k/accel/tcg
Alex Bennée 6d03226b42 plugins: force slow path when plugins instrument memory ops
The lack of SVE memory instrumentation has been an omission in plugin
handling since it was introduced. Fortunately we can utilise the
probe_* functions to force all all memory access to follow the slow
path. We do this by checking the access type and presence of plugin
memory callbacks and if set return the TLB_MMIO flag.

We have to jump through a few hoops in user mode to re-use the flag
but it was the desired effect:

 ./qemu-system-aarch64 -display none -serial mon:stdio \
   -M virt -cpu max -semihosting-config enable=on \
   -kernel ./tests/tcg/aarch64-softmmu/memory-sve \
   -plugin ./contrib/plugins/libexeclog.so,ifilter=st1w,afilter=0x40001808 -d plugin

gives (disas doesn't currently understand st1w):

  0, 0x40001808, 0xe54342a0, ".byte 0xa0, 0x42, 0x43, 0xe5", store, 0x40213010, RAM, store, 0x40213014, RAM, store, 0x40213018, RAM

And for user-mode:

  ./qemu-aarch64 \
    -plugin contrib/plugins/libexeclog.so,afilter=0x4007c0 \
    -d plugin \
    ./tests/tcg/aarch64-linux-user/sha512-sve

gives:

  1..10
  ok 1 - do_test(&tests[i])
  0, 0x4007c0, 0xa4004b80, ".byte 0x80, 0x4b, 0x00, 0xa4", load, 0x5500800370, load, 0x5500800371, load, 0x5500800372, load, 0x5500800373, load, 0x5500800374, load, 0x5500800375, load, 0x5500800376, load, 0x5500800377, load, 0x5500800378, load, 0x5500800379, load, 0x550080037a, load, 0x550080037b, load, 0x550080037c, load, 0x550080037d, load, 0x550080037e, load, 0x550080037f, load, 0x5500800380, load, 0x5500800381, load, 0x5500800382, load, 0x5500800383, load, 0x5500800384, load, 0x5500800385, load, 0x5500800386, lo
  ad, 0x5500800387, load, 0x5500800388, load, 0x5500800389, load, 0x550080038a, load, 0x550080038b, load, 0x550080038c, load, 0x550080038d, load, 0x550080038e, load, 0x550080038f, load, 0x5500800390, load, 0x5500800391, load, 0x5500800392, load, 0x5500800393, load, 0x5500800394, load, 0x5500800395, load, 0x5500800396, load, 0x5500800397, load, 0x5500800398, load, 0x5500800399, load, 0x550080039a, load, 0x550080039b, load, 0x550080039c, load, 0x550080039d, load, 0x550080039e, load, 0x550080039f, load, 0x55008003a0, load, 0x55008003a1, load, 0x55008003a2, load, 0x55008003a3, load, 0x55008003a4, load, 0x55008003a5, load, 0x55008003a6, load, 0x55008003a7, load, 0x55008003a8, load, 0x55008003a9, load, 0x55008003aa, load, 0x55008003ab, load, 0x55008003ac, load, 0x55008003ad, load, 0x55008003ae, load, 0x55008003af

(4007c0 is the ld1b in the sha512-sve)

Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Cc: Robert Henry <robhenry@microsoft.com>
Cc: Aaron Lindsay <aaron@os.amperecomputing.com>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Message-Id: <20230630180423.558337-20-alex.bennee@linaro.org>
2023-07-03 12:51:58 +01:00
..
atomic_common.c.inc accel/tcg: Remove cpu_atomic_{ld,st}o_*_mmu 2023-05-23 18:54:55 -07:00
atomic_template.h accel/tcg: Remove prot argument to atomic_mmu_lookup 2023-05-23 18:54:55 -07:00
cpu-exec-common.c accel/tcg: Add cpu_in_serial_context 2023-05-11 09:53:41 +01:00
cpu-exec.c accel/tcg/cpu-exec.c: Widen pc to vaddr 2023-06-26 17:32:59 +02:00
cputlb.c plugins: force slow path when plugins instrument memory ops 2023-07-03 12:51:58 +01:00
debuginfo.c
debuginfo.h coroutine: Split qemu/coroutine-core.h off qemu/coroutine.h 2023-01-20 07:21:46 +01:00
internal.h tcg: Add host memory barriers to cpu_ldst.h interfaces 2023-06-26 17:33:00 +02:00
ldst_atomicity.c.inc accel/tcg: Fix undefined shift in store_whole_le16 2023-06-06 12:11:02 -07:00
ldst_common.c.inc accel/tcg: Unify cpu_{ld,st}*_{be,le}_mmu 2023-05-23 18:54:28 -07:00
meson.build meson: Replace CONFIG_SOFTMMU -> CONFIG_SYSTEM_ONLY 2023-06-20 10:01:30 +02:00
monitor.c accel/tcg: remove CONFIG_PROFILER 2023-06-26 17:33:00 +02:00
perf.c accel/tcg: Unmap perf_marker 2023-06-05 12:06:49 -07:00
perf.h tcg: add perfmap and jitdump 2023-01-16 10:14:12 -10:00
plugin-gen.c tcg: Remove target-specific headers from tcg.[ch] 2023-06-05 12:04:29 -07:00
plugin-helpers.h tcg: exclude non-memory effecting helpers from instrumentation 2023-02-02 11:48:20 +00:00
tb-context.h
tb-hash.h accel/tcg: Widen pc to vaddr in CPUJumpCache 2023-06-26 17:32:59 +02:00
tb-jmp-cache.h accel/tcg: Widen pc to vaddr in CPUJumpCache 2023-06-26 17:32:59 +02:00
tb-maint.c accel/tcg: Assert one page in tb_invalidate_phys_page_range__locked 2023-07-01 08:26:54 +02:00
tcg-accel-ops-icount.c accel/tcg/tcg-accel-ops-rr: ensure fairness with icount 2023-05-11 09:53:41 +01:00
tcg-accel-ops-icount.h accel/tcg/tcg-accel-ops-rr: ensure fairness with icount 2023-05-11 09:53:41 +01:00
tcg-accel-ops-mttcg.c accel: Remove unused hThread variable on TCG/WHPX 2023-06-28 13:55:35 +02:00
tcg-accel-ops-mttcg.h
tcg-accel-ops-rr.c accel: Remove unused hThread variable on TCG/WHPX 2023-06-28 13:55:35 +02:00
tcg-accel-ops-rr.h
tcg-accel-ops.c accel/tcg: remove CONFIG_PROFILER 2023-06-26 17:33:00 +02:00
tcg-accel-ops.h
tcg-all.c accel/tcg: Remove check_tcg_memory_orders_compatible 2023-06-26 17:33:00 +02:00
tcg-runtime-gvec.c tcg: Split helper-proto.h 2023-06-05 12:04:29 -07:00
tcg-runtime.c tcg: Split helper-proto.h 2023-06-05 12:04:29 -07:00
tcg-runtime.h accel/tcg: Unify cpu_{ld,st}*_{be,le}_mmu 2023-05-23 18:54:28 -07:00
trace-events
trace.h
translate-all.c accel/tcg: remove CONFIG_PROFILER 2023-06-26 17:33:00 +02:00
translator.c accel/tcg: Replace target_ulong with vaddr in translator_*() 2023-06-26 17:33:00 +02:00
user-exec-stub.c replay: Extract core API to 'exec/replay-core.h' 2023-02-27 22:29:01 +01:00
user-exec.c plugins: force slow path when plugins instrument memory ops 2023-07-03 12:51:58 +01:00