diff options
author | Richard Henderson | 2020-06-26 05:31:06 +0200 |
---|---|---|
committer | Peter Maydell | 2020-06-26 15:31:12 +0200 |
commit | 81ae05fa2d21ac1a0054935b74342aa38a5ecef7 (patch) | |
tree | ff3b26bce99f0594f02d987155432a402e16143d /target/arm/internals.h | |
parent | target/arm: Add MTE system registers (diff) | |
download | qemu-81ae05fa2d21ac1a0054935b74342aa38a5ecef7.tar.gz qemu-81ae05fa2d21ac1a0054935b74342aa38a5ecef7.tar.xz qemu-81ae05fa2d21ac1a0054935b74342aa38a5ecef7.zip |
target/arm: Add MTE bits to tb_flags
Cache the composite ATA setting.
Cache when MTE is fully enabled, i.e. access to tags are enabled
and tag checks affect the PE. Do this for both the normal context
and the UNPRIV context.
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
Message-id: 20200626033144.790098-9-richard.henderson@linaro.org
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Diffstat (limited to 'target/arm/internals.h')
-rw-r--r-- | target/arm/internals.h | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/target/arm/internals.h b/target/arm/internals.h index 56b4672685..53e249687b 100644 --- a/target/arm/internals.h +++ b/target/arm/internals.h @@ -1198,6 +1198,24 @@ static inline int exception_target_el(CPUARMState *env) return target_el; } +/* Determine if allocation tags are available. */ +static inline bool allocation_tag_access_enabled(CPUARMState *env, int el, + uint64_t sctlr) +{ + if (el < 3 + && arm_feature(env, ARM_FEATURE_EL3) + && !(env->cp15.scr_el3 & SCR_ATA)) { + return false; + } + if (el < 2 + && arm_feature(env, ARM_FEATURE_EL2) + && !(arm_hcr_el2_eff(env) & HCR_ATA)) { + return false; + } + sctlr &= (el == 0 ? SCTLR_ATA0 : SCTLR_ATA); + return sctlr != 0; +} + #ifndef CONFIG_USER_ONLY /* Security attributes for an address, as returned by v8m_security_lookup. */ |