accel/tcg/translator.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-)
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();
--
2.34.1
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>
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>
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();
© 2016 - 2024 Red Hat, Inc.