target/arm: Allow execution from small regions

Now that we have full support for small regions, including execution,
we can remove the workarounds where we marked all small regions as
non-executable for the M-profile MPU and SAU.

Backports commit d4b6275df320cee764d56b194b1898547f545857 from qemu
This commit is contained in:
Peter Maydell 2018-11-16 21:39:29 -05:00 committed by Lioncash
parent 1301becdab
commit 680c79956d
No known key found for this signature in database
GPG key ID: 4E3C3CC1031BA9C7

View file

@ -9434,17 +9434,6 @@ static bool get_phys_addr_pmsav7(CPUARMState *env, uint32_t address,
fi->type = ARMFault_Permission;
fi->level = 1;
/*
* Core QEMU code can't handle execution from small pages yet, so
* don't try it. This way we'll get an MPU exception, rather than
* eventually causing QEMU to exit in get_page_addr_code().
*/
if (*page_size < TARGET_PAGE_SIZE && (*prot & PAGE_EXEC)) {
qemu_log_mask(LOG_UNIMP,
"MPU: No support for execution from regions "
"smaller than 1K\n");
*prot &= ~PAGE_EXEC;
}
return !(*prot & (1 << access_type));
}
@ -9674,18 +9663,6 @@ static bool pmsav8_mpu_lookup(CPUARMState *env, uint32_t address,
fi->type = ARMFault_Permission;
fi->level = 1;
/*
* Core QEMU code can't handle execution from small pages yet, so
* don't try it. This means any attempted execution will generate
* an MPU exception, rather than eventually causing QEMU to exit in
* get_page_addr_code().
*/
if (*is_subpage && (*prot & PAGE_EXEC)) {
qemu_log_mask(LOG_UNIMP,
"MPU: No support for execution from regions "
"smaller than 1K\n");
*prot &= ~PAGE_EXEC;
}
return !(*prot & (1 << access_type));
}