From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 1944) id C988B3858005; Tue, 2 Jan 2024 17:21:51 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org C988B3858005 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1704216111; bh=2nCL1GIWdbPyAN91VJaRZSBKs5BiCRuzFh1/iRSXFZc=; h=From:To:Subject:Date:From; b=HnuR9uhbHqNzBdujPPQ7Qz0FCzgHRcdRrWIeqO02bpXEkbDSP20r2rEiCtoQCHrCG 0qI5IHHdmoHJ9spqZR+A/isj44DNbaWjGwEUEwVf7V2eNVIAENWHcq5xK94TFrKe6Y esHwwcY8H/Xy0kntwzCJUWmpIg8UC6olsSzxdpzc= Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: Szabolcs Nagy To: glibc-cvs@sourceware.org Subject: [glibc] aarch64: Add longjmp support for SME X-Act-Checkin: glibc X-Git-Author: Szabolcs Nagy X-Git-Refname: refs/heads/master X-Git-Oldrev: d3c32ae207d4fc3e48bb47ce1b9f2c6cf0f35c4f X-Git-Newrev: a7373e457f0b5953d230f7756627036b1711dcc3 Message-Id: <20240102172151.C988B3858005@sourceware.org> Date: Tue, 2 Jan 2024 17:21:51 +0000 (GMT) List-Id: https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=a7373e457f0b5953d230f7756627036b1711dcc3 commit a7373e457f0b5953d230f7756627036b1711dcc3 Author: Szabolcs Nagy Date: Wed Dec 1 11:37:44 2021 +0000 aarch64: Add longjmp support for SME For the ZA lazy saving scheme to work, longjmp has to call __libc_arm_za_disable. In ld.so we assume ZA is not used so longjmp does not need special support there. Reviewed-by: Adhemerval Zanella Diff: --- sysdeps/aarch64/__longjmp.S | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/sysdeps/aarch64/__longjmp.S b/sysdeps/aarch64/__longjmp.S index 2c8ff54112..7b6add751e 100644 --- a/sysdeps/aarch64/__longjmp.S +++ b/sysdeps/aarch64/__longjmp.S @@ -49,6 +49,28 @@ ENTRY (__longjmp) PTR_ARG (0) +#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 + ldp x19, x20, [x0, #JB_X19<<3] ldp x21, x22, [x0, #JB_X21<<3] ldp x23, x24, [x0, #JB_X23<<3]