mirror of
https://github.com/yuzu-emu/unicorn.git
synced 2025-07-10 15:07:26 +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. */
|
/* 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;
|
||||||
|
@ -615,8 +616,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);
|
||||||
|
@ -782,7 +782,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:
|
||||||
|
@ -894,7 +894,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 a new issue