Skip to content

Commit

Permalink
plugins: fix qemu_plugin_reset
Browse files Browse the repository at this point in the history
34e5e1 refactored the plugin context initialization. After this change,
tcg_ctx->plugin_insn is not reset inconditionnally anymore, but only if
one plugin at least is active.

When uninstalling the last plugin active, we stopped reinitializing
tcg_ctx->plugin_insn, which leads to memory callbacks being emitted.
This results in an error as they don't appear in a plugin op sequence as
expected.

The correct fix is to make sure we reset plugin translation variables
after current block translation ends. This way, we can catch any
potential misuse of those after a given block, in more than fixing the
current bug.

v2: do not reset tcg_ctx->plugin_tb as it gets reused between
translations.

Fixes: https://gitlab.com/qemu-project/qemu/-/issues/2570
Reviewed-by: Richard Henderson <[email protected]>
Signed-off-by: Pierrick Bouvier <[email protected]>
  • Loading branch information
pbo-linaro committed Oct 16, 2024
1 parent 71c63ee commit 9b9cbca
Showing 1 changed file with 4 additions and 0 deletions.
4 changes: 4 additions & 0 deletions accel/tcg/plugin-gen.c
Original file line number Diff line number Diff line change
Expand Up @@ -467,4 +467,8 @@ void plugin_gen_tb_end(CPUState *cpu, size_t num_insns)

/* inject the instrumentation at the appropriate places */
plugin_gen_inject(ptb);

/* reset plugin translation state (plugin_tb is reused between blocks) */
tcg_ctx->plugin_db = NULL;
tcg_ctx->plugin_insn = NULL;
}

0 comments on commit 9b9cbca

Please sign in to comment.