On 10/30/26 07:54, Alex Bennée wrote:
Richard Henderson <[email protected]> writes:
On 10/29/26 12:17, Alex Bennée wrote:
End the block the same way that gen_WRMSR does so an IO access under
icount. While this fixes this particular case I suspect there are more
IO like accesses the x86 TCG front-end should take care off.
Resolves: https://gitlab.com/qemu-project/qemu/-/issues/4779
Signed-off-by: Alex Bennée <[email protected]>
---
target/i386/tcg/emit.c.inc | 1 +
1 file changed, 1 insertion(+)
diff --git a/target/i386/tcg/emit.c.inc b/target/i386/tcg/emit.c.inc
index ed56edf8a3a..911bce5f539 100644
--- a/target/i386/tcg/emit.c.inc
+++ b/target/i386/tcg/emit.c.inc
@@ -3783,6 +3783,7 @@ static void gen_RDMSR(DisasContext *s, X86DecodedInsn
*decode)
gen_update_cc_op(s);
gen_update_eip_cur(s);
gen_helper_rdmsr(tcg_env);
+ s->base.is_jmp = DISAS_EOB_NEXT;
}
#else
#define gen_RDMSR gen_unreachable
You've done nothing to update state. I think you want
translator_io_start(&s->base);
which will go though DISAS_TOO_MANY.
Should WRMSR do the same? If not why is it different?
Oops, mis-read that. Just above is updating.
Reviewed-by: Richard Henderson <[email protected]>
r~