On Thu, 7 Jan 2021 at 19:10, Richard Henderson <richard.hender...@linaro.org> wrote: > > On 1/7/21 7:54 AM, Peter Maydell wrote: > >> - && (sctlr & SCTLR_TCF0) > >> + && (sctlr & SCTLR_TCF) > >> && allocation_tag_access_enabled(env, 0, sctlr)) { > >> flags = FIELD_DP32(flags, TBFLAG_A64, MTE0_ACTIVE, 1); > >> } > > > > > > I don't understand this change, could you explain a bit more? > > In commit 50244cc76abcac we change to looking at the TCF > > field corresponding to the actual current EL instead of the > > EL for the memory-access. > > Correct. > > > But if we're doing that then why > > should we be looking at exclusively SCTLR_TCF0 in this > > for-unpriv-access code rather than doing the same thing we do > > for normal accesses and checking > > (sctlr & (el == 0 ? SCTLR_TCF0 : SCTLR_TCF)) > > Because this is for the UNPRIV instructions which are UNDEF at el == 0.
Ah, right. (It didn't help that I'd read the diff backwards: the new code looks at SCTLR_TCF, not SCTLR_TCF0.) Further, the SCTLR_*.ATA/ATA0 checks *are* based on the privilege of the access, which is why calling allocation_tag_access_enabled(env, 0, sctlr) is still correct. Applied to target-arm.next, thanks. -- PMM