Message ID | 20240521210604.130837-1-richard.henderson@linaro.org |
---|---|
State | Superseded |
Headers | show |
Series | accel/tcg: Init tb size and icount before plugin_gen_tb_end | expand |
Am 21. Mai 2024 21:06:04 UTC schrieb Richard Henderson <richard.henderson@linaro.org>: >When passing disassembly data to plugin callbacks, >translator_st_len relies on db->tb->size having been set. > >Fixes: 4c833c60e047 ("disas: Use translator_st to get disassembly data") Indeed! It even works better than ever by also fixing the range of the machine code. So: Tested-by: Bernhard Beschow <shentey@gmail.com> The only issue that remains is that the machine code is reversed, i.e. the first byte is output last. But that is a bug that existed before. >Reported-by: Bernhard Beschow <shentey@gmail.com> >Signed-off-by: Richard Henderson <richard.henderson@linaro.org> >--- > accel/tcg/translator.c | 8 ++++---- > 1 file changed, 4 insertions(+), 4 deletions(-) > >diff --git a/accel/tcg/translator.c b/accel/tcg/translator.c >index c56967eecd..113edcffe3 100644 >--- a/accel/tcg/translator.c >+++ b/accel/tcg/translator.c >@@ -214,14 +214,14 @@ void translator_loop(CPUState *cpu, TranslationBlock *tb, int *max_insns, > set_can_do_io(db, true); > tcg_ctx->emit_before_op = NULL; > >+ /* May be used by disas_log or plugin callbacks. */ >+ tb->size = db->pc_next - db->pc_first; >+ tb->icount = db->num_insns; >+ > if (plugin_enabled) { > plugin_gen_tb_end(cpu, db->num_insns); > } > >- /* The disas_log hook may use these values rather than recompute. */ >- tb->size = db->pc_next - db->pc_first; >- tb->icount = db->num_insns; >- > if (qemu_loglevel_mask(CPU_LOG_TB_IN_ASM) > && qemu_log_in_addr_range(db->pc_first)) { > FILE *logfile = qemu_log_trylock();
On 5/21/24 14:06, Richard Henderson wrote: > When passing disassembly data to plugin callbacks, > translator_st_len relies on db->tb->size having been set. > > Fixes: 4c833c60e047 ("disas: Use translator_st to get disassembly data") > Reported-by: Bernhard Beschow <shentey@gmail.com> > Signed-off-by: Richard Henderson <richard.henderson@linaro.org> > --- > accel/tcg/translator.c | 8 ++++---- > 1 file changed, 4 insertions(+), 4 deletions(-) > > diff --git a/accel/tcg/translator.c b/accel/tcg/translator.c > index c56967eecd..113edcffe3 100644 > --- a/accel/tcg/translator.c > +++ b/accel/tcg/translator.c > @@ -214,14 +214,14 @@ void translator_loop(CPUState *cpu, TranslationBlock *tb, int *max_insns, > set_can_do_io(db, true); > tcg_ctx->emit_before_op = NULL; > > + /* May be used by disas_log or plugin callbacks. */ > + tb->size = db->pc_next - db->pc_first; > + tb->icount = db->num_insns; > + > if (plugin_enabled) { > plugin_gen_tb_end(cpu, db->num_insns); > } > > - /* The disas_log hook may use these values rather than recompute. */ > - tb->size = db->pc_next - db->pc_first; > - tb->icount = db->num_insns; > - > if (qemu_loglevel_mask(CPU_LOG_TB_IN_ASM) > && qemu_log_in_addr_range(db->pc_first)) { > FILE *logfile = qemu_log_trylock(); Reviewed-by: Pierrick Bouvier <pierrick.bouvier@linaro.org>
On 21/5/24 23:06, Richard Henderson wrote: > When passing disassembly data to plugin callbacks, > translator_st_len relies on db->tb->size having been set. > > Fixes: 4c833c60e047 ("disas: Use translator_st to get disassembly data") > Reported-by: Bernhard Beschow <shentey@gmail.com> > Signed-off-by: Richard Henderson <richard.henderson@linaro.org> > --- > accel/tcg/translator.c | 8 ++++---- > 1 file changed, 4 insertions(+), 4 deletions(-) Oops, missed. Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
diff --git a/accel/tcg/translator.c b/accel/tcg/translator.c index c56967eecd..113edcffe3 100644 --- a/accel/tcg/translator.c +++ b/accel/tcg/translator.c @@ -214,14 +214,14 @@ void translator_loop(CPUState *cpu, TranslationBlock *tb, int *max_insns, set_can_do_io(db, true); tcg_ctx->emit_before_op = NULL; + /* May be used by disas_log or plugin callbacks. */ + tb->size = db->pc_next - db->pc_first; + tb->icount = db->num_insns; + if (plugin_enabled) { plugin_gen_tb_end(cpu, db->num_insns); } - /* The disas_log hook may use these values rather than recompute. */ - tb->size = db->pc_next - db->pc_first; - tb->icount = db->num_insns; - if (qemu_loglevel_mask(CPU_LOG_TB_IN_ASM) && qemu_log_in_addr_range(db->pc_first)) { FILE *logfile = qemu_log_trylock();
When passing disassembly data to plugin callbacks, translator_st_len relies on db->tb->size having been set. Fixes: 4c833c60e047 ("disas: Use translator_st to get disassembly data") Reported-by: Bernhard Beschow <shentey@gmail.com> Signed-off-by: Richard Henderson <richard.henderson@linaro.org> --- accel/tcg/translator.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-)