target/hppa: Perform access rights before protection id check
In Chapter 5, Interruptions, the group 3 exceptions lists "Data memory access rights trap" in priority order ahead of "Data memory protection ID trap". Swap these checks in hppa_get_physical_address. Reviewed-by: Helge Deller <deller@gmx.de> Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
This commit is contained in:
parent
4e6939c934
commit
32142b8077
@ -267,6 +267,12 @@ int hppa_get_physical_address(CPUHPPAState *env, vaddr addr, int mmu_idx,
|
||||
goto egress;
|
||||
}
|
||||
|
||||
if (unlikely(!(prot & type))) {
|
||||
/* Not allowed -- Inst/Data Memory Access Rights Fault. */
|
||||
ret = (type & PAGE_EXEC) ? EXCP_IMP : EXCP_DMAR;
|
||||
goto egress;
|
||||
}
|
||||
|
||||
/* access_id == 0 means public page and no check is performed */
|
||||
if (ent->access_id && MMU_IDX_TO_P(mmu_idx)) {
|
||||
int access_prot = (hppa_is_pa20(env)
|
||||
@ -281,12 +287,6 @@ int hppa_get_physical_address(CPUHPPAState *env, vaddr addr, int mmu_idx,
|
||||
prot &= access_prot;
|
||||
}
|
||||
|
||||
if (unlikely(!(prot & type))) {
|
||||
/* Not allowed -- Inst/Data Memory Access Rights Fault. */
|
||||
ret = (type & PAGE_EXEC) ? EXCP_IMP : EXCP_DMAR;
|
||||
goto egress;
|
||||
}
|
||||
|
||||
/*
|
||||
* In priority order, check for conditions which raise faults.
|
||||
* Remove PROT bits that cover the condition we want to check,
|
||||
|
Loading…
Reference in New Issue
Block a user