From: Richard Henderson Date: Wed, 23 Oct 2019 15:00:52 +0000 (-0400) Subject: target/arm: Rebuild hflags at Xscale SCTLR writes X-Git-Url: http://git.maquefel.me/?a=commitdiff_plain;h=2e5dcf36280910b4c89662559c0db242d61ca8d0;p=qemu.git target/arm: Rebuild hflags at Xscale SCTLR writes Continue setting, but not relying upon, env->hflags. Signed-off-by: Richard Henderson Message-id: 20191023150057.25731-20-richard.henderson@linaro.org Signed-off-by: Peter Maydell --- diff --git a/target/arm/helper.c b/target/arm/helper.c index aae7b62458..c55783e540 100644 --- a/target/arm/helper.c +++ b/target/arm/helper.c @@ -4174,6 +4174,16 @@ static void sctlr_write(CPUARMState *env, const ARMCPRegInfo *ri, /* ??? Lots of these bits are not implemented. */ /* This may enable/disable the MMU, so do a TLB flush. */ tlb_flush(CPU(cpu)); + + if (ri->type & ARM_CP_SUPPRESS_TB_END) { + /* + * Normally we would always end the TB on an SCTLR write; see the + * comment in ARMCPRegInfo sctlr initialization below for why Xscale + * is special. Setting ARM_CP_SUPPRESS_TB_END also stops the rebuild + * of hflags from the translator, so do it here. + */ + arm_rebuild_hflags(env); + } } static CPAccessResult fpexc32_access(CPUARMState *env, const ARMCPRegInfo *ri,