Begin conversion of get_phys_addr and all subroutines from MMUAccessType to a mask of required permissions. Notably, access_perm may be 0 in order to disable the permissions check.
Signed-off-by: Richard Henderson <richard.hender...@linaro.org> --- target/arm/ptw.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/target/arm/ptw.c b/target/arm/ptw.c index 561bf2678e..760387b4da 100644 --- a/target/arm/ptw.c +++ b/target/arm/ptw.c @@ -979,7 +979,7 @@ static int simple_ap_to_rw_prot(CPUARMState *env, ARMMMUIdx mmu_idx, int ap) } static bool get_phys_addr_v5(CPUARMState *env, S1Translate *ptw, - uint32_t address, MMUAccessType access_type, + uint32_t address, unsigned access_perm, GetPhysAddrResult *result, ARMMMUFaultInfo *fi) { int level = 1; @@ -1089,7 +1089,7 @@ static bool get_phys_addr_v5(CPUARMState *env, S1Translate *ptw, } result->f.prot = ap_to_rw_prot(env, ptw->in_mmu_idx, ap, domain_prot); result->f.prot |= result->f.prot ? PAGE_EXEC : 0; - if (!(result->f.prot & (1 << access_type))) { + if (access_perm & ~result->f.prot) { /* Access permission fault. */ fi->type = ARMFault_Permission; goto do_fault; @@ -3515,7 +3515,7 @@ static bool get_phys_addr_nogpc(CPUARMState *env, S1Translate *ptw, regime_sctlr(env, mmu_idx) & SCTLR_XP) { return get_phys_addr_v6(env, ptw, address, access_type, result, fi); } else { - return get_phys_addr_v5(env, ptw, address, access_type, result, fi); + return get_phys_addr_v5(env, ptw, address, 1 << access_type, result, fi); } } -- 2.43.0