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