target-sh4: MMU: fix ITLB priviledge check
authorAurelien Jarno <aurelien@aurel32.net>
Mon, 1 Feb 2010 19:07:06 +0000 (20:07 +0100)
committerAurelien Jarno <aurelien@aurel32.net>
Tue, 9 Feb 2010 20:08:05 +0000 (21:08 +0100)
There is an ITLB access violation if SR_MD=0 (user mode) while
the high bit of the protection key is 0 (priviledge mode).

Signed-off-by: Aurelien Jarno <aurelien@aurel32.net>
target-sh4/helper.c

index f9bf5e20844ef916fd299271c2d3501af4301ff3..589efe40ade749942ad64db912d2151bfa27b83a 100644 (file)
@@ -377,7 +377,7 @@ static int get_mmu_address(CPUState * env, target_ulong * physical,
        n = find_itlb_entry(env, address, use_asid, 1);
        if (n >= 0) {
            matching = &env->itlb[n];
-           if ((env->sr & SR_MD) & !(matching->pr & 2))
+           if (!(env->sr & SR_MD) && !(matching->pr & 2))
                n = MMU_ITLB_VIOLATION;
            else
                *prot = PAGE_READ;