From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 1944) id 64E883853803; Wed, 26 Oct 2022 14:49:54 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 64E883853803 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1666795794; bh=MkGT88i9FxQ7YC4VdWCYnkFmIdgAmDMg0cf4tzWF3b4=; h=From:To:Subject:Date:From; b=tJ94GjXG/1Wwov+4beFXO1XjTWKaOT+fKYXw0VZEXX0bb55gUTWiXBOmyk1KFayPt QzglQRQzZQRgD6ka1JIQP0hWnS7Mm90bWFWtpIicgYZbvu/QkX6XhiexT7/XeVbfyX GXGYhT47URgWptB5CJEfVeUh4B6UgiVvkyQ98yyM= 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/arm/morello/main] TODO: fix variadic syscalls X-Act-Checkin: glibc X-Git-Author: Szabolcs Nagy X-Git-Refname: refs/heads/arm/morello/main X-Git-Oldrev: 0e893e3d6823f8883a5b8ed9e9b0abbff3ace340 X-Git-Newrev: a46c1b96f3949c2c15e130249094818981b06835 Message-Id: <20221026144954.64E883853803@sourceware.org> Date: Wed, 26 Oct 2022 14:49:54 +0000 (GMT) List-Id: https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=a46c1b96f3949c2c15e130249094818981b06835 commit a46c1b96f3949c2c15e130249094818981b06835 Author: Szabolcs Nagy Date: Tue Oct 25 13:10:54 2022 +0100 TODO: fix variadic syscalls Only use as many varargs as accessible according to the bounds of c9. TODO: squash into original syscall support Diff: --- sysdeps/unix/sysv/linux/aarch64/clone.S | 5 +++++ sysdeps/unix/sysv/linux/aarch64/syscall.S | 13 +++++++++++++ 2 files changed, 18 insertions(+) diff --git a/sysdeps/unix/sysv/linux/aarch64/clone.S b/sysdeps/unix/sysv/linux/aarch64/clone.S index 663853ab4a..4d7852304b 100644 --- a/sysdeps/unix/sysv/linux/aarch64/clone.S +++ b/sysdeps/unix/sysv/linux/aarch64/clone.S @@ -66,8 +66,13 @@ ENTRY(__clone) PTR_ARG (6) #else cbz x9, L(skip_args) + gclen x10, c9 ldr c4, [c9] + cmp x10, 16 + bls L(skip_args) ldr c5, [c9,16] + cmp x10, 32 + bls L(skip_args) ldr c6, [c9,32] L(skip_args): #endif diff --git a/sysdeps/unix/sysv/linux/aarch64/syscall.S b/sysdeps/unix/sysv/linux/aarch64/syscall.S index ec4688433d..43a81fc248 100644 --- a/sysdeps/unix/sysv/linux/aarch64/syscall.S +++ b/sysdeps/unix/sysv/linux/aarch64/syscall.S @@ -30,12 +30,25 @@ ENTRY (syscall) uxtw x8, w0 #ifdef __CHERI_PURE_CAPABILITY__ cbz x9, L(skip_args) + gclen x10, c9 ldr c0, [c9] + cmp x10, 16 + bls L(skip_args) ldr c1, [c9,16] + cmp x10, 32 + bls L(skip_args) ldr c2, [c9,32] + cmp x10, 48 + bls L(skip_args) ldr c3, [c9,48] + cmp x10, 64 + bls L(skip_args) ldr c4, [c9,64] + cmp x10, 80 + bls L(skip_args) ldr c5, [c9,80] + cmp x10, 96 + bls L(skip_args) ldr c6, [c9,96] L(skip_args): #else