sparc: fix leon3 casa instruction when MMU is disabled

Since the commit af7a06bac7d3abb2da48ef3277d2a415772d2ae8:
`casa [..](10), .., ..` (and probably others alternate space instructions)
triggers a data access exception when the MMU is disabled.

When we enter get_asi(...) dc->mem_idx is set to MMU_PHYS_IDX when the MMU
is disabled. Just keep mem_idx unchanged in this case so we passthrough the
MMU when it is disabled.

Backports commit 6e10f37c86068e35151f982c976a85f1bec07ef2 from qemu
This commit is contained in:
KONRAD Frederic 2018-03-09 01:39:45 -05:00 committed by Lioncash
parent 9e72ef3b52
commit 4b9a1ceb4a
No known key found for this signature in database
GPG Key ID: 4E3C3CC1031BA9C7

View File

@ -2244,6 +2244,11 @@ static DisasASI get_asi(DisasContext *dc, int insn, TCGMemOp memop)
type = GET_ASI_BFILL; type = GET_ASI_BFILL;
break; break;
} }
/* MMU_PHYS_IDX is used when the MMU is disabled to passthrough the
* permissions check in get_physical_address(..).
*/
mem_idx = (dc->mem_idx == MMU_PHYS_IDX) ? MMU_PHYS_IDX : mem_idx;
} else { } else {
gen_exception(dc, TT_PRIV_INSN); gen_exception(dc, TT_PRIV_INSN);
type = GET_ASI_EXCP; type = GET_ASI_EXCP;