mirror of https://gitee.com/openkylin/qemu.git
target/arm: Pass the entire mte descriptor to mte_check_fail
We need more information than just the mmu_idx in order to create the proper exception syndrome. Only change the function signature so far. Signed-off-by: Richard Henderson <richard.henderson@linaro.org> Message-id: 20200813200816.3037186-2-richard.henderson@linaro.org Reviewed-by: Peter Maydell <peter.maydell@linaro.org> Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
parent
0e5aac18bc
commit
dbf8c32178
|
@ -514,9 +514,10 @@ void HELPER(stzgm_tags)(CPUARMState *env, uint64_t ptr, uint64_t val)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Record a tag check failure. */
|
/* Record a tag check failure. */
|
||||||
static void mte_check_fail(CPUARMState *env, int mmu_idx,
|
static void mte_check_fail(CPUARMState *env, uint32_t desc,
|
||||||
uint64_t dirty_ptr, uintptr_t ra)
|
uint64_t dirty_ptr, uintptr_t ra)
|
||||||
{
|
{
|
||||||
|
int mmu_idx = FIELD_EX32(desc, MTEDESC, MIDX);
|
||||||
ARMMMUIdx arm_mmu_idx = core_to_aa64_mmu_idx(mmu_idx);
|
ARMMMUIdx arm_mmu_idx = core_to_aa64_mmu_idx(mmu_idx);
|
||||||
int el, reg_el, tcf, select;
|
int el, reg_el, tcf, select;
|
||||||
uint64_t sctlr;
|
uint64_t sctlr;
|
||||||
|
@ -639,8 +640,7 @@ uint64_t mte_check1(CPUARMState *env, uint32_t desc,
|
||||||
}
|
}
|
||||||
|
|
||||||
if (unlikely(!mte_probe1_int(env, desc, ptr, ra, bit55))) {
|
if (unlikely(!mte_probe1_int(env, desc, ptr, ra, bit55))) {
|
||||||
int mmu_idx = FIELD_EX32(desc, MTEDESC, MIDX);
|
mte_check_fail(env, desc, ptr, ra);
|
||||||
mte_check_fail(env, mmu_idx, ptr, ra);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return useronly_clean_ptr(ptr);
|
return useronly_clean_ptr(ptr);
|
||||||
|
@ -810,7 +810,7 @@ uint64_t mte_checkN(CPUARMState *env, uint32_t desc,
|
||||||
|
|
||||||
fail_ofs = tag_first + n * TAG_GRANULE - ptr;
|
fail_ofs = tag_first + n * TAG_GRANULE - ptr;
|
||||||
fail_ofs = ROUND_UP(fail_ofs, esize);
|
fail_ofs = ROUND_UP(fail_ofs, esize);
|
||||||
mte_check_fail(env, mmu_idx, ptr + fail_ofs, ra);
|
mte_check_fail(env, desc, ptr + fail_ofs, ra);
|
||||||
}
|
}
|
||||||
|
|
||||||
done:
|
done:
|
||||||
|
@ -922,7 +922,7 @@ uint64_t HELPER(mte_check_zva)(CPUARMState *env, uint32_t desc, uint64_t ptr)
|
||||||
fail:
|
fail:
|
||||||
/* Locate the first nibble that differs. */
|
/* Locate the first nibble that differs. */
|
||||||
i = ctz64(mem_tag ^ ptr_tag) >> 4;
|
i = ctz64(mem_tag ^ ptr_tag) >> 4;
|
||||||
mte_check_fail(env, mmu_idx, align_ptr + i * TAG_GRANULE, ra);
|
mte_check_fail(env, desc, align_ptr + i * TAG_GRANULE, ra);
|
||||||
|
|
||||||
done:
|
done:
|
||||||
return useronly_clean_ptr(ptr);
|
return useronly_clean_ptr(ptr);
|
||||||
|
|
Loading…
Reference in New Issue