From: Yury Khrustalev Date: Mon, 28 Apr 2025 14:12:04 +0000 (+0100) Subject: aarch64: Disable ZA state of SME in setjmp and sigsetjmp X-Git-Tag: glibc-2.42~248 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=a7f6fd976c17b82dc198290b4ab7087f35855a0e;p=thirdparty%2Fglibc.git 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 --- 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]