Tamar Christina <tamar.christ...@arm.com> writes:
> One question I did have not directly related to the unwinder changes,
> But the ABI mentions that if any of the reserved bytes in TPIDR2_EL0
> Block are non-zero that TPIDR2_EL0 must be left unchanged [1].

The full requirement is:

  If TPIDR2_EL0 is nonnull and if any reserved byte in the first 16 bytes
  of the TPIDR2 block has a nonzero value, the thread must do one of the
  following:

  * leave TPIDR2_EL0 unchanged;
  * abort in some platform-defined manner; or
  * handle the nonzero reserved bytes of the TPIDR2 block in accordance
    with future versions of the AAPCS64.

So...

> If that's the case what does it mean for the lazy save scheme, since it
> requires that TPIDR2_EL0 be 0 at the end of the save? I see we don't
> actually check that in e.g. __arm_za_disable, we just unconditionally
> zero TPIDR2_EL0.

...we take the second or third option (aborting or handling in line
with a future PCS version).  Currently it's always the aborting option,
since there has been no addition to TPIDR2 blocks since their original
definition.

__arm_za_disable is documented as saving in the same way as __arm_tpidr2_save,
and __arm_tpidr2_save is documented as doing:

  * If any of the reserved bytes in the first 16 bytes of the TPIDR2
    block are nonzero, the subroutine either:
    * aborts in some platform-defined manner; or
    * handles the nonzero reserved bytes of the TPIDR2 block in
      accordance with future versions of the AAPCS64.

Richard

Reply via email to