mirror of
https://github.com/yuzu-emu/unicorn.git
synced 2025-01-09 01:15:40 +00:00
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. Backports dbf8c32178291169e111a6a9fd7ae17af4a3039d
This commit is contained in:
parent
d4c59cce4e
commit
6969435fb8
|
@ -490,9 +490,10 @@ void HELPER(stzgm_tags)(CPUARMState *env, uint64_t ptr, uint64_t val)
|
|||
}
|
||||
|
||||
/* 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)
|
||||
{
|
||||
int mmu_idx = FIELD_EX32(desc, MTEDESC, MIDX);
|
||||
ARMMMUIdx arm_mmu_idx = core_to_aa64_mmu_idx(mmu_idx);
|
||||
int el, reg_el, tcf, select;
|
||||
uint64_t sctlr;
|
||||
|
@ -615,8 +616,7 @@ uint64_t mte_check1_(CPUARMState *env, uint32_t desc,
|
|||
}
|
||||
|
||||
if (unlikely(!mte_probe1_int(env, desc, ptr, ra, bit55))) {
|
||||
int mmu_idx = FIELD_EX32(desc, MTEDESC, MIDX);
|
||||
mte_check_fail(env, mmu_idx, ptr, ra);
|
||||
mte_check_fail(env, desc, ptr, ra);
|
||||
}
|
||||
|
||||
return useronly_clean_ptr(ptr);
|
||||
|
@ -782,7 +782,7 @@ uint64_t mte_checkN_(CPUARMState *env, uint32_t desc,
|
|||
|
||||
fail_ofs = tag_first + n * TAG_GRANULE - ptr;
|
||||
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:
|
||||
|
@ -894,7 +894,7 @@ uint64_t HELPER(mte_check_zva)(CPUARMState *env, uint32_t desc, uint64_t ptr)
|
|||
fail:
|
||||
/* Locate the first nibble that differs. */
|
||||
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:
|
||||
return useronly_clean_ptr(ptr);
|
||||
|
|
Loading…
Reference in a new issue