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