Hi Aleksandar, On 07/04/2018 04:30 PM, Aleksandar Markovic wrote: > From: Yongbok Kim <yongbok....@mips.com> > > BadVAddr should not be updated if (env->hflags & MIPS_HFLAG_DM) is > set. > > Signed-off-by: Yongbok Kim <yongbok....@mips.com> > Signed-off-by: Aleksandar Markovic <amarko...@wavecomp.com> > Reviewed-by: Philippe Mathieu-Daudé <philippe.mathieu.da...@gmail.com>
Watch out in http://lists.nongnu.org/archive/html/qemu-devel/2018-06/msg06407.html I used another email: Reviewed-by: Philippe Mathieu-Daudé <f4...@amsat.org> > --- > target/mips/helper.c | 4 +++- > target/mips/op_helper.c | 12 +++++++++--- > 2 files changed, 12 insertions(+), 4 deletions(-) > > diff --git a/target/mips/helper.c b/target/mips/helper.c > index 8cf91ce..e215af9 100644 > --- a/target/mips/helper.c > +++ b/target/mips/helper.c > @@ -502,7 +502,9 @@ static void raise_mmu_exception(CPUMIPSState *env, > target_ulong address, > break; > } > /* Raise exception */ > - env->CP0_BadVAddr = address; > + if (!(env->hflags & MIPS_HFLAG_DM)) { > + env->CP0_BadVAddr = address; > + } > env->CP0_Context = (env->CP0_Context & ~0x007fffff) | > ((address >> 9) & 0x007ffff0); > env->CP0_EntryHi = (env->CP0_EntryHi & env->CP0_EntryHi_ASID_mask) | > diff --git a/target/mips/op_helper.c b/target/mips/op_helper.c > index 0b8ec7d..a6a57bd 100644 > --- a/target/mips/op_helper.c > +++ b/target/mips/op_helper.c > @@ -271,7 +271,9 @@ static inline hwaddr do_translate_address(CPUMIPSState > *env, > target_ulong helper_##name(CPUMIPSState *env, target_ulong arg, int mem_idx) > \ > { > \ > if (arg & almask) { > \ > - env->CP0_BadVAddr = arg; > \ > + if (!(env->hflags & MIPS_HFLAG_DM)) { > \ > + env->CP0_BadVAddr = arg; > \ > + } > \ > do_raise_exception(env, EXCP_AdEL, GETPC()); > \ > } > \ > env->lladdr = do_translate_address(env, arg, 0, GETPC()); > \ > @@ -291,7 +293,9 @@ target_ulong helper_##name(CPUMIPSState *env, > target_ulong arg1, \ > target_long tmp; > \ > > \ > if (arg2 & almask) { > \ > - env->CP0_BadVAddr = arg2; > \ > + if (!(env->hflags & MIPS_HFLAG_DM)) { > \ > + env->CP0_BadVAddr = arg2; > \ > + } > \ > do_raise_exception(env, EXCP_AdES, GETPC()); > \ > } > \ > if (do_translate_address(env, arg2, 1, GETPC()) == env->lladdr) { > \ > @@ -2456,7 +2460,9 @@ void mips_cpu_do_unaligned_access(CPUState *cs, vaddr > addr, > int error_code = 0; > int excp; > > - env->CP0_BadVAddr = addr; > + if (!(env->hflags & MIPS_HFLAG_DM)) { > + env->CP0_BadVAddr = addr; > + } > > if (access_type == MMU_DATA_STORE) { > excp = EXCP_AdES; >