translator: always pair plugin_gen_insn_{start, end} calls
Related: #1381 Signed-off-by: Emilio Cota <cota@braap.org> Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org> Reviewed-by: Richard Henderson <richard.henderson@linaro.org> Message-Id: <20230108164731.61469-3-cota@braap.org> Signed-off-by: Alex Bennée <alex.bennee@linaro.org> Message-Id: <20230124180127.1881110-33-alex.bennee@linaro.org>
This commit is contained in:
parent
3fd62e73ad
commit
0f92d94ae3
@ -100,19 +100,24 @@ void translator_loop(CPUState *cpu, TranslationBlock *tb, int max_insns,
|
|||||||
ops->translate_insn(db, cpu);
|
ops->translate_insn(db, cpu);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Stop translation if translate_insn so indicated. */
|
|
||||||
if (db->is_jmp != DISAS_NEXT) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* We can't instrument after instructions that change control
|
* We can't instrument after instructions that change control
|
||||||
* flow although this only really affects post-load operations.
|
* flow although this only really affects post-load operations.
|
||||||
|
*
|
||||||
|
* Calling plugin_gen_insn_end() before we possibly stop translation
|
||||||
|
* is important. Even if this ends up as dead code, plugin generation
|
||||||
|
* needs to see a matching plugin_gen_insn_{start,end}() pair in order
|
||||||
|
* to accurately track instrumented helpers that might access memory.
|
||||||
*/
|
*/
|
||||||
if (plugin_enabled) {
|
if (plugin_enabled) {
|
||||||
plugin_gen_insn_end();
|
plugin_gen_insn_end();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Stop translation if translate_insn so indicated. */
|
||||||
|
if (db->is_jmp != DISAS_NEXT) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
/* Stop translation if the output buffer is full,
|
/* Stop translation if the output buffer is full,
|
||||||
or we have executed all of the allowed instructions. */
|
or we have executed all of the allowed instructions. */
|
||||||
if (tcg_op_buf_full() || db->num_insns >= db->max_insns) {
|
if (tcg_op_buf_full() || db->num_insns >= db->max_insns) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user