From a7f6fd976c17b82dc198290b4ab7087f35855a0e Mon Sep 17 00:00:00 2001 From: Yury Khrustalev Date: Mon, 28 Apr 2025 15:12:04 +0100 Subject: [PATCH] aarch64: Disable ZA state of SME in setjmp and sigsetjmp Due to the nature of the ZA state, setjmp() should clear it in the same manner as it is already done by longjmp. Reviewed-by: Wilco Dijkstra --- sysdeps/aarch64/setjmp.S | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/sysdeps/aarch64/setjmp.S b/sysdeps/aarch64/setjmp.S index d82d62c0a1..83d1e342bc 100644 --- a/sysdeps/aarch64/setjmp.S +++ b/sysdeps/aarch64/setjmp.S @@ -35,6 +35,29 @@ libc_hidden_def (_setjmp) ENTRY_ALIGN (__sigsetjmp, 2) 1: + +#if IS_IN(libc) + /* Disable ZA state of SME in libc.a and libc.so, but not in ld.so. */ +# if HAVE_AARCH64_PAC_RET + PACIASP + cfi_window_save +# endif + stp x29, x30, [sp, -16]! + cfi_adjust_cfa_offset (16) + cfi_rel_offset (x29, 0) + cfi_rel_offset (x30, 8) + mov x29, sp + bl __libc_arm_za_disable + ldp x29, x30, [sp], 16 + cfi_adjust_cfa_offset (-16) + cfi_restore (x29) + cfi_restore (x30) +# if HAVE_AARCH64_PAC_RET + AUTIASP + cfi_window_save +# endif +#endif + stp x19, x20, [x0, #JB_X19<<3] stp x21, x22, [x0, #JB_X21<<3] stp x23, x24, [x0, #JB_X23<<3] -- 2.47.2