mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-05 00:33:55 -06:00
target/arm: Implement MTE tag-checking functions for FEAT_MOPS copies
The FEAT_MOPS memory copy operations need an extra helper routine for checking for MTE tag checking failures beyond the ones we already added for memory set operations: * mte_mops_probe_rev() does the same job as mte_mops_probe(), but it checks tags starting at the provided address and working backwards, rather than forwards Signed-off-by: Peter Maydell <peter.maydell@linaro.org> Reviewed-by: Richard Henderson <richard.henderson@linaro.org> Message-id: 20230912140434.1333369-11-peter.maydell@linaro.org
This commit is contained in:
parent
6087df5744
commit
69c51dc372
2 changed files with 116 additions and 0 deletions
|
@ -1288,6 +1288,23 @@ uint64_t mte_check(CPUARMState *env, uint32_t desc, uint64_t ptr, uintptr_t ra);
|
|||
uint64_t mte_mops_probe(CPUARMState *env, uint64_t ptr, uint64_t size,
|
||||
uint32_t desc);
|
||||
|
||||
/**
|
||||
* mte_mops_probe_rev: Check where the next MTE failure is for a FEAT_MOPS
|
||||
* operation going in the reverse direction
|
||||
* @env: CPU env
|
||||
* @ptr: *end* address of memory region (dirty pointer)
|
||||
* @size: length of region (guaranteed not to cross a page boundary)
|
||||
* @desc: MTEDESC descriptor word (0 means no MTE checks)
|
||||
* Returns: the size of the region that can be copied without hitting
|
||||
* an MTE tag failure
|
||||
*
|
||||
* Note that we assume that the caller has already checked the TBI
|
||||
* and TCMA bits with mte_checks_needed() and an MTE check is definitely
|
||||
* required.
|
||||
*/
|
||||
uint64_t mte_mops_probe_rev(CPUARMState *env, uint64_t ptr, uint64_t size,
|
||||
uint32_t desc);
|
||||
|
||||
/**
|
||||
* mte_check_fail: Record an MTE tag check failure
|
||||
* @env: CPU env
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue