mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-15 22:21:57 -06:00
target/arm: Add allocation tag storage for user mode
Use the now-saved PAGE_ANON and PAGE_MTE bits, and the per-page saved data. Reviewed-by: Peter Maydell <peter.maydell@linaro.org> Signed-off-by: Richard Henderson <richard.henderson@linaro.org> Message-id: 20210212184902.1251044-30-richard.henderson@linaro.org Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
parent
5d70c3510b
commit
a11d3830d9
1 changed files with 27 additions and 2 deletions
|
@ -78,8 +78,33 @@ static uint8_t *allocation_tag_mem(CPUARMState *env, int ptr_mmu_idx,
|
||||||
int tag_size, uintptr_t ra)
|
int tag_size, uintptr_t ra)
|
||||||
{
|
{
|
||||||
#ifdef CONFIG_USER_ONLY
|
#ifdef CONFIG_USER_ONLY
|
||||||
/* Tag storage not implemented. */
|
uint64_t clean_ptr = useronly_clean_ptr(ptr);
|
||||||
return NULL;
|
int flags = page_get_flags(clean_ptr);
|
||||||
|
uint8_t *tags;
|
||||||
|
uintptr_t index;
|
||||||
|
|
||||||
|
if (!(flags & (ptr_access == MMU_DATA_STORE ? PAGE_WRITE : PAGE_READ))) {
|
||||||
|
/* SIGSEGV */
|
||||||
|
arm_cpu_tlb_fill(env_cpu(env), ptr, ptr_size, ptr_access,
|
||||||
|
ptr_mmu_idx, false, ra);
|
||||||
|
g_assert_not_reached();
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Require both MAP_ANON and PROT_MTE for the page. */
|
||||||
|
if (!(flags & PAGE_ANON) || !(flags & PAGE_MTE)) {
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
tags = page_get_target_data(clean_ptr);
|
||||||
|
if (tags == NULL) {
|
||||||
|
size_t alloc_size = TARGET_PAGE_SIZE >> (LOG2_TAG_GRANULE + 1);
|
||||||
|
tags = page_alloc_target_data(clean_ptr, alloc_size);
|
||||||
|
assert(tags != NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
index = extract32(ptr, LOG2_TAG_GRANULE + 1,
|
||||||
|
TARGET_PAGE_BITS - LOG2_TAG_GRANULE - 1);
|
||||||
|
return tags + index;
|
||||||
#else
|
#else
|
||||||
uintptr_t index;
|
uintptr_t index;
|
||||||
CPUIOTLBEntry *iotlbentry;
|
CPUIOTLBEntry *iotlbentry;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue