6f15c076da
We can't always guarantee we get to the end of a translator loop. Although this can happen for a variety of reasons it does happen more often on x86 system emulation when an instruction spans across to an un-faulted page. This caused confusion of the instruction tracking data resulting in apparent reverse execution (at least from the plugins point of view). Fix this by moving the reset code to plugin_gen_tb_start so we always start with a clean slate. We unconditionally reset tcg_ctx->plugin_insn as the plugin_insn_append code uses this as a proxy for knowing if plugins are enabled for the current instruction. Otherwise we can hit a race where a previously instrumented thread leaves a stale value after the main thread exits and disables instrumentation. Resolves: https://gitlab.com/qemu-project/qemu/-/issues/824 Signed-off-by: Alex Bennée <alex.bennee@linaro.org> Reviewed-by: Richard Henderson <richard.henderson@linaro.org> Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org> Message-Id: <20220204204335.1689602-27-alex.bennee@linaro.org> |
||
---|---|---|
.. | ||
atomic_common.c.inc | ||
atomic_template.h | ||
cpu-exec-common.c | ||
cpu-exec.c | ||
cputlb.c | ||
hmp.c | ||
internal.h | ||
ldst_common.c.inc | ||
meson.build | ||
plugin-gen.c | ||
plugin-helpers.h | ||
tb-context.h | ||
tb-hash.h | ||
tcg-accel-ops-icount.c | ||
tcg-accel-ops-icount.h | ||
tcg-accel-ops-mttcg.c | ||
tcg-accel-ops-mttcg.h | ||
tcg-accel-ops-rr.c | ||
tcg-accel-ops-rr.h | ||
tcg-accel-ops.c | ||
tcg-accel-ops.h | ||
tcg-all.c | ||
tcg-runtime-gvec.c | ||
tcg-runtime.c | ||
tcg-runtime.h | ||
trace-events | ||
trace.h | ||
translate-all.c | ||
translator.c | ||
user-exec-stub.c | ||
user-exec.c |