Revision dcbc9a70

b/target-ppc/helper.c
1171 1171
            break;
1172 1172
        case 0x0:
1173 1173
            if (pr != 0) {
1174
                /* Raise Zone protection fault.  */
1175
                env->spr[SPR_40x_ESR] = 1 << 22;
1174 1176
                ctx->prot = 0;
1175 1177
                ret = -2;
1176 1178
                break;
......
1183 1185
            ctx->prot = tlb->prot;
1184 1186
            ctx->prot |= PAGE_EXEC;
1185 1187
            ret = check_prot(ctx->prot, rw, access_type);
1188
            if (ret == -2)
1189
                env->spr[SPR_40x_ESR] = 0;
1186 1190
            break;
1187 1191
        }
1188 1192
        if (ret >= 0) {
......
1580 1584
                /* Access rights violation */
1581 1585
                env->exception_index = POWERPC_EXCP_DSI;
1582 1586
                env->error_code = 0;
1583
                env->spr[SPR_DAR] = address;
1584
                if (rw == 1)
1585
                    env->spr[SPR_DSISR] = 0x0A000000;
1586
                else
1587
                    env->spr[SPR_DSISR] = 0x08000000;
1587
                if (env->mmu_model == POWERPC_MMU_SOFT_4xx
1588
                    || env->mmu_model == POWERPC_MMU_SOFT_4xx_Z) {
1589
                    env->spr[SPR_40x_DEAR] = address;
1590
                    if (rw) {
1591
                        env->spr[SPR_40x_ESR] |= 0x00800000;
1592
                    }
1593
                } else {
1594
                    env->spr[SPR_DAR] = address;
1595
                    if (rw == 1) {
1596
                        env->spr[SPR_DSISR] = 0x0A000000;
1597
                    } else {
1598
                        env->spr[SPR_DSISR] = 0x08000000;
1599
                    }
1600
                }
1588 1601
                break;
1589 1602
            case -4:
1590 1603
                /* Direct store exception */

Also available in: Unified diff