From nobody Tue Jun 16 10:24:27 2026 Received: from todd.t-8ch.de (todd.t-8ch.de [159.69.126.157]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id D9D6D2E424F for ; Sat, 18 Apr 2026 10:27:00 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=159.69.126.157 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776508023; cv=none; b=YT6fTVbqqWrpkda77Lm7QR5gP5u+ZJKN9Q+GrZz1cWqq6Ovq/hUNWT1LrRbXQ7UdoSjn5s7NJVIuY/YyDy8gwf+8Y3nj7DsupxcXyXSfykgoZMfZHnXnZPr9u58waE3WovFExUv8xY9MCwkPIo7aJ+m3S4vecLNE17a0VDIZWcA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776508023; c=relaxed/simple; bh=3Rv4fmV7COTRhYcB4jDTjIlrMu1L9rbFBYAAv67W9Yw=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=cC1GZSSF6qt+hLvst2N+27gt3ecmrHk7BilEa99ieci+xX3Kmz5k2S11vNZRfy5LEiarV9c/DsFv4JwZMzWeCGJ9zROcxG4wZP/sn0beFgRZKdM88U4GmBCbW6TDEtqODayp61Z34cd7BSi3mgJxG5yVEWvOj5t1XSLrtAwKHTs= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=weissschuh.net; spf=pass smtp.mailfrom=weissschuh.net; dkim=pass (1024-bit key) header.d=weissschuh.net header.i=@weissschuh.net header.b=CCznrBvF; arc=none smtp.client-ip=159.69.126.157 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=weissschuh.net Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=weissschuh.net Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=weissschuh.net header.i=@weissschuh.net header.b="CCznrBvF" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=weissschuh.net; s=mail; t=1776507607; bh=3Rv4fmV7COTRhYcB4jDTjIlrMu1L9rbFBYAAv67W9Yw=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=CCznrBvF+JDj/6zUV9rD2nvLYAVvNJmVlY62sJketw+1OBs5cv7V5Gxx9Tfnelx5B KYvzj0/ANsL9XjI1K0QThhW+gH8StGcA5CKWAm8V8QZvu4EPwU9SF+y7kkMmgbcVbq zfYDAtaHR8Xt5P53f8/3h+QLYNZ3EnJ4XTum8/9s= From: =?utf-8?q?Thomas_Wei=C3=9Fschuh?= Date: Sat, 18 Apr 2026 12:19:56 +0200 Subject: [PATCH 1/7] tools/nolibc: also handle _llseek system call Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260418-nolibc-largefile-v1-1-b91f0775bac3@weissschuh.net> References: <20260418-nolibc-largefile-v1-0-b91f0775bac3@weissschuh.net> In-Reply-To: <20260418-nolibc-largefile-v1-0-b91f0775bac3@weissschuh.net> To: Willy Tarreau Cc: Daniel Palmer , linux-kernel@vger.kernel.org, =?utf-8?q?Thomas_Wei=C3=9Fschuh?= X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1776507606; l=1195; i=linux@weissschuh.net; s=20221212; h=from:subject:message-id; bh=3Rv4fmV7COTRhYcB4jDTjIlrMu1L9rbFBYAAv67W9Yw=; b=BbCItKkd1pBivsVEWfnjSmxAa9eZ0EZ9wk/u6e97NvfqRVEK7I6d1YwnmiccZZsHx9RgTfzeo SqcQVmbbOfeDDToFMZHdR98aRsucFOp3pdo2eML0eehgigI/DgkqHW0 X-Developer-Key: i=linux@weissschuh.net; a=ed25519; pk=KcycQgFPX2wGR5azS7RhpBqedglOZVgRPfdFSPB1LNw= On some architectures the llseek system call contains a leading underscore. Also check for that one and prefer it over the lseek system call as it is necessary for 64-bit offset handling. Signed-off-by: Thomas Wei=C3=9Fschuh Acked-by: Willy Tarreau --- tools/include/nolibc/sys.h | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/tools/include/nolibc/sys.h b/tools/include/nolibc/sys.h index 6335fd51f07f..82a1e36e7290 100644 --- a/tools/include/nolibc/sys.h +++ b/tools/include/nolibc/sys.h @@ -597,12 +597,18 @@ int link(const char *old, const char *new) static __attribute__((unused)) off_t _sys_lseek(int fd, off_t offset, int whence) { -#if defined(__NR_llseek) +#if defined(__NR_llseek) || defined(__NR__llseek) __kernel_loff_t loff =3D 0; + int ret, nr_llseek; off_t result; - int ret; =20 - ret =3D __nolibc_syscall5(__NR_llseek, fd, offset >> 32, (uint32_t)offset= , &loff, whence); +#if defined(__NR_llseek) + nr_llseek =3D __NR_llseek; +#else + nr_llseek =3D __NR__llseek; +#endif + + ret =3D __nolibc_syscall5(nr_llseek, fd, offset >> 32, (uint32_t)offset, = &loff, whence); if (ret < 0) result =3D ret; else --=20 2.53.0 From nobody Tue Jun 16 10:24:27 2026 Received: from todd.t-8ch.de (todd.t-8ch.de [159.69.126.157]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id D9DD931AAB8 for ; Sat, 18 Apr 2026 10:27:00 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=159.69.126.157 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776508022; cv=none; b=UJkqKPTuiOLNyusqJvaR+yLh2gE1wuAm5hJbtVwPW8yjD8cG7+OCyHP8xoODDJniO9G905c3HSHfxZpqhsz6LhNWIpLHkTc8ks3CXqISnyYf+7UjU+xegDhyFHmKD0Q1QLqFUZPLoDl9P6Kzybk5nIjBitKfXlC9d0lrno5/e5E= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776508022; c=relaxed/simple; bh=46SR3hflHi/uU1ysDbJkZJVO7K7vBZVC3I8o07kWVaQ=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=VAiEX1HKE5wDf59HKsdl8Y6IdUNlY7XKjzW8IEuJyLbiwTPql8ZH7v1n7FzJzEER2K7ifZgOHTfUSgwBNzacRd+9h6EFxnmoEJXSqkGyaV2RXo6a0WECO/uCrfQUFoADTlJNNFq+HH9iw+TR96qAwmQnuCGvpTucD6UjfJFPuPQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=weissschuh.net; spf=pass smtp.mailfrom=weissschuh.net; dkim=pass (1024-bit key) header.d=weissschuh.net header.i=@weissschuh.net header.b=InNJG35M; arc=none smtp.client-ip=159.69.126.157 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=weissschuh.net Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=weissschuh.net Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=weissschuh.net header.i=@weissschuh.net header.b="InNJG35M" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=weissschuh.net; s=mail; t=1776507607; bh=46SR3hflHi/uU1ysDbJkZJVO7K7vBZVC3I8o07kWVaQ=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=InNJG35M0AnGviFkNAoP7U73OGczGDKatl0w5wvoTXsbNwObac4rlm0Vlg35yOmMw zTIOIKGY68ktsnCtz+oGDPbaLHzHyb65/xivjAzh2pJv3yWSgwVaNXB/wLdND7BIFl 9NfbA4Kjfm5pPHOXe5E1VKNRJS2GabP02uKbtM+M= From: =?utf-8?q?Thomas_Wei=C3=9Fschuh?= Date: Sat, 18 Apr 2026 12:19:57 +0200 Subject: [PATCH 2/7] tools/nolibc: add __nolibc_arg_to_reg() Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260418-nolibc-largefile-v1-2-b91f0775bac3@weissschuh.net> References: <20260418-nolibc-largefile-v1-0-b91f0775bac3@weissschuh.net> In-Reply-To: <20260418-nolibc-largefile-v1-0-b91f0775bac3@weissschuh.net> To: Willy Tarreau Cc: Daniel Palmer , linux-kernel@vger.kernel.org, =?utf-8?q?Thomas_Wei=C3=9Fschuh?= X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1776507606; l=1360; i=linux@weissschuh.net; s=20221212; h=from:subject:message-id; bh=46SR3hflHi/uU1ysDbJkZJVO7K7vBZVC3I8o07kWVaQ=; b=lEdIUcuTNCA/erxOI3XvkHYiGkosqnHGrO3cqsSYkJ5uh5Y4d396zYXBGHo84zqGv6kHeWl2M FRj3bs8F3bDBgQkxx8st4CrKAKJpHnJzHiWLVKTGkqmJOKerwh3blcq X-Developer-Key: i=linux@weissschuh.net; a=ed25519; pk=KcycQgFPX2wGR5azS7RhpBqedglOZVgRPfdFSPB1LNw= In the architecture specific system call glue, all arguments are currently casted to 'long' to fit into registers. This works for pointers as 'long' has the same size as pointers. However the system call registers for X32 and MIPS N32 need to be 'long long' to work correctly for 64-bit values expected by the system call ABI. Casting a pointer to a 'long long' will produce a compiler warning while casting 64-bit integers to 'long' will truncate those. Add a helper which can be used to correctly cast both pointers and integers into 'long long' registers. Cast the pointers through 'unsigned' to avoid any sign extensions. Both builtins have been available since at least GCC 3 and clang 3. Signed-off-by: Thomas Wei=C3=9Fschuh Acked-by: Willy Tarreau --- tools/include/nolibc/crt.h | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/tools/include/nolibc/crt.h b/tools/include/nolibc/crt.h index f38590a05adf..2414114b7752 100644 --- a/tools/include/nolibc/crt.h +++ b/tools/include/nolibc/crt.h @@ -11,6 +11,10 @@ =20 #include "compiler.h" =20 +#define __nolibc_arg_to_reg(_a) \ + __builtin_choose_expr(__builtin_classify_type(_a) =3D=3D __builtin_classi= fy_type(NULL), \ + (unsigned long)(_a), (_a)) + char **environ __attribute__((weak)); const unsigned long *_auxv __attribute__((weak)); =20 --=20 2.53.0 From nobody Tue Jun 16 10:24:27 2026 Received: from todd.t-8ch.de (todd.t-8ch.de [159.69.126.157]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 74EE8233D9E for ; Sat, 18 Apr 2026 10:20:16 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=159.69.126.157 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776507618; cv=none; b=Q3BP5GiFZKOUL//+DcSW190np5lKNp3nYAwYZe54EeTwQMGW/faz/KOvUeFlF7DBkeihY98aEPo48DFuKml/naTqeOvCJrTz9qrwiy1XL7rqiCyJ/EY672FpsPW9fFSlH0ZksKKAamd7L8310qFV2bTPhUONxHelAnce1dGXguA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776507618; c=relaxed/simple; bh=0HxIU3osM2pcAakuOvyZ6GGyFCos0Rf/OEFA9aS6WXQ=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=At8V/ytCY53fvWuCDuaiJlvFmJPU/ZJefL0lxryfQZ1fTEZ8zDHOcoUF8K1Lxo3IK5clOEB5mHgoNCD0Yp6D2lY7GXOBDn0ktVnJIKOJ8MJTliO4gjZENgCmvxMcQE0YzCvnvV3qSKz83l6S4AWCX0Zyv2jiKlddn0rC9zwJOR4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=weissschuh.net; spf=pass smtp.mailfrom=weissschuh.net; dkim=pass (1024-bit key) header.d=weissschuh.net header.i=@weissschuh.net header.b=Uk6rMut5; arc=none smtp.client-ip=159.69.126.157 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=weissschuh.net Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=weissschuh.net Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=weissschuh.net header.i=@weissschuh.net header.b="Uk6rMut5" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=weissschuh.net; s=mail; t=1776507607; bh=0HxIU3osM2pcAakuOvyZ6GGyFCos0Rf/OEFA9aS6WXQ=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=Uk6rMut59iMl+UMVw5verbREejqc/h9C3wgN1X3eeEsHu2gQtHObI0aCQsSn9Y3tD pgJTcvPnP1M4g/VGkjoC9RNLAj2106xo60ZpkR7f/gCjjcCwOC3gBZBgLH+jUEGcOx HsyR4ikl83aq2WAp5rSp8nsR7dqvqFf4v7gOWRrY= From: =?utf-8?q?Thomas_Wei=C3=9Fschuh?= Date: Sat, 18 Apr 2026 12:19:58 +0200 Subject: [PATCH 3/7] tools/nolibc: cast pointers returned from system calls through integers Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260418-nolibc-largefile-v1-3-b91f0775bac3@weissschuh.net> References: <20260418-nolibc-largefile-v1-0-b91f0775bac3@weissschuh.net> In-Reply-To: <20260418-nolibc-largefile-v1-0-b91f0775bac3@weissschuh.net> To: Willy Tarreau Cc: Daniel Palmer , linux-kernel@vger.kernel.org, =?utf-8?q?Thomas_Wei=C3=9Fschuh?= X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1776507606; l=2070; i=linux@weissschuh.net; s=20221212; h=from:subject:message-id; bh=0HxIU3osM2pcAakuOvyZ6GGyFCos0Rf/OEFA9aS6WXQ=; b=p/6XU2LURCub8Z/8y8i/fkVkARSsEnOA1lg7kL/8rEKqCbfBPgG4yafhC2JvXjY813mXbzDAO bKGwH39arpCB+5KnZjoea9EdErJgWTrr9cxHt3GNDQPzGiEj5Vdbd9T X-Developer-Key: i=linux@weissschuh.net; a=ed25519; pk=KcycQgFPX2wGR5azS7RhpBqedglOZVgRPfdFSPB1LNw= Currently all system call wrappers return 'long' integers which can be directly cast to 'void *' if the returned value is actually a pointer. An upcoming change will change the system call wrappers to sometimes return 'long long' which can not be cast to a pointer directly. Add explicit cast through 'long' to prepare for this. Signed-off-by: Thomas Wei=C3=9Fschuh Acked-by: Willy Tarreau --- tools/include/nolibc/sys.h | 2 +- tools/include/nolibc/sys/mman.h | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/tools/include/nolibc/sys.h b/tools/include/nolibc/sys.h index 82a1e36e7290..e4b6ec02bf95 100644 --- a/tools/include/nolibc/sys.h +++ b/tools/include/nolibc/sys.h @@ -87,7 +87,7 @@ static __inline__ int __nolibc_enosys(const char *syscall= , ...) static __attribute__((unused)) void *_sys_brk(void *addr) { - return (void *)__nolibc_syscall1(__NR_brk, addr); + return (void *)(unsigned long)__nolibc_syscall1(__NR_brk, addr); } =20 static __attribute__((unused)) diff --git a/tools/include/nolibc/sys/mman.h b/tools/include/nolibc/sys/mma= n.h index 91d77a51412d..72bc1d43d1d4 100644 --- a/tools/include/nolibc/sys/mman.h +++ b/tools/include/nolibc/sys/mman.h @@ -27,7 +27,7 @@ void *_sys_mmap(void *addr, size_t length, int prot, int = flags, int fd, n =3D __NR_mmap; #endif =20 - return (void *)__nolibc_syscall6(n, addr, length, prot, flags, fd, offset= ); + return (void *)(unsigned long)__nolibc_syscall6(n, addr, length, prot, fl= ags, fd, offset); } #endif =20 @@ -46,8 +46,8 @@ void *mmap(void *addr, size_t length, int prot, int flags= , int fd, off_t offset) static __attribute__((unused)) void *_sys_mremap(void *old_address, size_t old_size, size_t new_size, int= flags, void *new_address) { - return (void *)__nolibc_syscall5(__NR_mremap, old_address, old_size, - new_size, flags, new_address); + return (void *)(unsigned long)__nolibc_syscall5(__NR_mremap, old_address,= old_size, + new_size, flags, new_address); } =20 static __attribute__((unused)) --=20 2.53.0 From nobody Tue Jun 16 10:24:27 2026 Received: from todd.t-8ch.de (todd.t-8ch.de [159.69.126.157]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 750B333A6F9 for ; Sat, 18 Apr 2026 10:20:16 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=159.69.126.157 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776507618; cv=none; b=JJK+mbt4PBuFk8BDNdNawrqo8SIUp8Axj1qcq5SxnutZ9eK0xwwJex6JxeTj7GiszJM/z4w9uSboJ/m5VeaivUQxutiJ+kwGUGvi+wWuta49kgLGIRxcB2lTxkmAARk/961MEKHY+YoQj2jm8dur0ZDPKeqFFx5y+WgGqhP620Y= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776507618; c=relaxed/simple; bh=h0FgW1IsIPsTqhwJm8+YInso+WHNDHu7C07Q9xSJDdU=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=eDWv2MIOnZO258yWXItgfMHElb7EVJ0FwqojMMEUdMirTvTwJ9EMa6EEVJ0fXjmFIX5dN2q+oxq1jbsGqG5VwesABwG700IkrKScdkQvsSLq5GIOdA7a63Lv68yjMJcucD67wdnv/HErQz3EVTRwbZwLl/jemvoc6QfnrsEmnOo= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=weissschuh.net; spf=pass smtp.mailfrom=weissschuh.net; dkim=pass (1024-bit key) header.d=weissschuh.net header.i=@weissschuh.net header.b=JMA5zEai; arc=none smtp.client-ip=159.69.126.157 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=weissschuh.net Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=weissschuh.net Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=weissschuh.net header.i=@weissschuh.net header.b="JMA5zEai" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=weissschuh.net; s=mail; t=1776507607; bh=h0FgW1IsIPsTqhwJm8+YInso+WHNDHu7C07Q9xSJDdU=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=JMA5zEaiOwgLAr0Vk06aRWjzJ1I4Jld7JMmDc7vGRpc2m8BDCnV9IoQxYYnG/HGlT KKHx11L8g/+nRBOmEC61vqmma1uU6FDmK3H3h2P+TKZMYpuSwqS13y10O6b8KsutJ6 tUH2fZUYSsGZ4EPYBOTf4+PMVzRI3QlUtYjq5p98= From: =?utf-8?q?Thomas_Wei=C3=9Fschuh?= Date: Sat, 18 Apr 2026 12:19:59 +0200 Subject: [PATCH 4/7] tools/nolibc: handle 64-bit system call arguments on x32 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260418-nolibc-largefile-v1-4-b91f0775bac3@weissschuh.net> References: <20260418-nolibc-largefile-v1-0-b91f0775bac3@weissschuh.net> In-Reply-To: <20260418-nolibc-largefile-v1-0-b91f0775bac3@weissschuh.net> To: Willy Tarreau Cc: Daniel Palmer , linux-kernel@vger.kernel.org, =?utf-8?q?Thomas_Wei=C3=9Fschuh?= X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1776507606; l=9027; i=linux@weissschuh.net; s=20221212; h=from:subject:message-id; bh=h0FgW1IsIPsTqhwJm8+YInso+WHNDHu7C07Q9xSJDdU=; b=UrA6tVRje6tdkKcNwJkn+MOkB0+cfbxIrqIqw4QeTgUVlsGuW4pUuULn28NQdkjeEkF3yc2d9 n8z3ZcD94pfAt1b4ezPmq/1aYFT3dAGbHHhKZaCRB2K2P9Kw0AFHa5j X-Developer-Key: i=linux@weissschuh.net; a=ed25519; pk=KcycQgFPX2wGR5azS7RhpBqedglOZVgRPfdFSPB1LNw= The x32 system call ABI expects 64-bit values directly in registers. This does not work on nolibc currently, as a 'long' is only 32 bits wide. Switch the system call wrappers to use 'long long' instead which can handle 64-bit values on x32. As on x86_64 'long' and 'long long' are the same, this does not change the behavior there. Signed-off-by: Thomas Wei=C3=9Fschuh Acked-by: Willy Tarreau --- tools/include/nolibc/arch-x86.h | 70 ++++++++++++++++++++-----------------= ---- 1 file changed, 35 insertions(+), 35 deletions(-) diff --git a/tools/include/nolibc/arch-x86.h b/tools/include/nolibc/arch-x8= 6.h index 769ba01a8629..7a0882c6e942 100644 --- a/tools/include/nolibc/arch-x86.h +++ b/tools/include/nolibc/arch-x86.h @@ -202,8 +202,8 @@ void __attribute__((weak, noreturn)) __nolibc_entrypoin= t __no_stack_protector _s =20 #define __nolibc_syscall0(num) = \ ({ = \ - long _ret; \ - register long _num __asm__ ("rax") =3D (num); \ + long long _ret; \ + register long long _num __asm__ ("rax") =3D (num); \ \ __asm__ volatile ( \ "syscall\n" \ @@ -216,9 +216,9 @@ void __attribute__((weak, noreturn)) __nolibc_entrypoin= t __no_stack_protector _s =20 #define __nolibc_syscall1(num, arg1) = \ ({ = \ - long _ret; \ - register long _num __asm__ ("rax") =3D (num); \ - register long _arg1 __asm__ ("rdi") =3D (long)(arg1); \ + long long _ret; \ + register long long _num __asm__ ("rax") =3D (num); \ + register long long _arg1 __asm__ ("rdi") =3D __nolibc_arg_to_reg(arg1); \ \ __asm__ volatile ( \ "syscall\n" \ @@ -232,10 +232,10 @@ void __attribute__((weak, noreturn)) __nolibc_entrypo= int __no_stack_protector _s =20 #define __nolibc_syscall2(num, arg1, arg2) = \ ({ = \ - long _ret; \ - register long _num __asm__ ("rax") =3D (num); \ - register long _arg1 __asm__ ("rdi") =3D (long)(arg1); \ - register long _arg2 __asm__ ("rsi") =3D (long)(arg2); \ + long long _ret; \ + register long long _num __asm__ ("rax") =3D (num); \ + register long long _arg1 __asm__ ("rdi") =3D __nolibc_arg_to_reg(arg1); \ + register long long _arg2 __asm__ ("rsi") =3D __nolibc_arg_to_reg(arg2); \ \ __asm__ volatile ( \ "syscall\n" \ @@ -249,11 +249,11 @@ void __attribute__((weak, noreturn)) __nolibc_entrypo= int __no_stack_protector _s =20 #define __nolibc_syscall3(num, arg1, arg2, arg3) = \ ({ = \ - long _ret; \ - register long _num __asm__ ("rax") =3D (num); \ - register long _arg1 __asm__ ("rdi") =3D (long)(arg1); \ - register long _arg2 __asm__ ("rsi") =3D (long)(arg2); \ - register long _arg3 __asm__ ("rdx") =3D (long)(arg3); \ + long long _ret; \ + register long long _num __asm__ ("rax") =3D (num); \ + register long long _arg1 __asm__ ("rdi") =3D __nolibc_arg_to_reg(arg1); \ + register long long _arg2 __asm__ ("rsi") =3D __nolibc_arg_to_reg(arg2); \ + register long long _arg3 __asm__ ("rdx") =3D __nolibc_arg_to_reg(arg3); \ \ __asm__ volatile ( \ "syscall\n" \ @@ -267,12 +267,12 @@ void __attribute__((weak, noreturn)) __nolibc_entrypo= int __no_stack_protector _s =20 #define __nolibc_syscall4(num, arg1, arg2, arg3, arg4) = \ ({ = \ - long _ret; \ - register long _num __asm__ ("rax") =3D (num); \ - register long _arg1 __asm__ ("rdi") =3D (long)(arg1); \ - register long _arg2 __asm__ ("rsi") =3D (long)(arg2); \ - register long _arg3 __asm__ ("rdx") =3D (long)(arg3); \ - register long _arg4 __asm__ ("r10") =3D (long)(arg4); \ + long long _ret; \ + register long long _num __asm__ ("rax") =3D (num); \ + register long long _arg1 __asm__ ("rdi") =3D __nolibc_arg_to_reg(arg1); \ + register long long _arg2 __asm__ ("rsi") =3D __nolibc_arg_to_reg(arg2); \ + register long long _arg3 __asm__ ("rdx") =3D __nolibc_arg_to_reg(arg3); \ + register long long _arg4 __asm__ ("r10") =3D __nolibc_arg_to_reg(arg4); \ \ __asm__ volatile ( \ "syscall\n" \ @@ -286,13 +286,13 @@ void __attribute__((weak, noreturn)) __nolibc_entrypo= int __no_stack_protector _s =20 #define __nolibc_syscall5(num, arg1, arg2, arg3, arg4, arg5) = \ ({ = \ - long _ret; \ - register long _num __asm__ ("rax") =3D (num); \ - register long _arg1 __asm__ ("rdi") =3D (long)(arg1); \ - register long _arg2 __asm__ ("rsi") =3D (long)(arg2); \ - register long _arg3 __asm__ ("rdx") =3D (long)(arg3); \ - register long _arg4 __asm__ ("r10") =3D (long)(arg4); \ - register long _arg5 __asm__ ("r8") =3D (long)(arg5); \ + long long _ret; \ + register long long _num __asm__ ("rax") =3D (num); \ + register long long _arg1 __asm__ ("rdi") =3D __nolibc_arg_to_reg(arg1); \ + register long long _arg2 __asm__ ("rsi") =3D __nolibc_arg_to_reg(arg2); \ + register long long _arg3 __asm__ ("rdx") =3D __nolibc_arg_to_reg(arg3); \ + register long long _arg4 __asm__ ("r10") =3D __nolibc_arg_to_reg(arg4); \ + register long long _arg5 __asm__ ("r8") =3D __nolibc_arg_to_reg(arg5); \ \ __asm__ volatile ( \ "syscall\n" \ @@ -306,14 +306,14 @@ void __attribute__((weak, noreturn)) __nolibc_entrypo= int __no_stack_protector _s =20 #define __nolibc_syscall6(num, arg1, arg2, arg3, arg4, arg5, arg6) = \ ({ = \ - long _ret; \ - register long _num __asm__ ("rax") =3D (num); \ - register long _arg1 __asm__ ("rdi") =3D (long)(arg1); \ - register long _arg2 __asm__ ("rsi") =3D (long)(arg2); \ - register long _arg3 __asm__ ("rdx") =3D (long)(arg3); \ - register long _arg4 __asm__ ("r10") =3D (long)(arg4); \ - register long _arg5 __asm__ ("r8") =3D (long)(arg5); \ - register long _arg6 __asm__ ("r9") =3D (long)(arg6); \ + long long _ret; \ + register long long _num __asm__ ("rax") =3D (num); \ + register long long _arg1 __asm__ ("rdi") =3D __nolibc_arg_to_reg(arg1); \ + register long long _arg2 __asm__ ("rsi") =3D __nolibc_arg_to_reg(arg2); \ + register long long _arg3 __asm__ ("rdx") =3D __nolibc_arg_to_reg(arg3); \ + register long long _arg4 __asm__ ("r10") =3D __nolibc_arg_to_reg(arg4); \ + register long long _arg5 __asm__ ("r8") =3D __nolibc_arg_to_reg(arg5); \ + register long long _arg6 __asm__ ("r9") =3D __nolibc_arg_to_reg(arg6); \ \ __asm__ volatile ( \ "syscall\n" \ --=20 2.53.0 From nobody Tue Jun 16 10:24:27 2026 Received: from todd.t-8ch.de (todd.t-8ch.de [159.69.126.157]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id D9E6F328B77 for ; Sat, 18 Apr 2026 10:27:00 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=159.69.126.157 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776508022; cv=none; b=Afykn6cMf02GIdkwmlwcwE7+2+BMSlD/mWde86RdnWD/Ss9s8NZZE9o7wJJ3gcc27CBskUhguLEtqHXWS/P3SRIlazvzTUfRttJovkdRYxT54WT+tPMLPHk0vse4a1fEriNmCTO9Td40KYuIDFgXFSagtcDNkrBngyOd4rggPes= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776508022; c=relaxed/simple; bh=QKmjEzlLn73fAbOtuDsEoZ0+LjZ6mquYjh2hWInLADI=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=PFDu0tVRMMF4Jsj8RC+WylzCKiuJw2c74O1B108Bo1kWTjXX0RlAAI78HiAuSiTQkK4cb0DTMivH1rqwI5J3LG4Y5uX41+NrisQ2PkUtiWk0LjJ2oOdcz4K5EfyoAHzMnVj6L1OdjrymXcH9vDXhDMS/CMHJGo3GCIokM33QYPU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=weissschuh.net; spf=pass smtp.mailfrom=weissschuh.net; dkim=pass (1024-bit key) header.d=weissschuh.net header.i=@weissschuh.net header.b=A19TOG1F; arc=none smtp.client-ip=159.69.126.157 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=weissschuh.net Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=weissschuh.net Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=weissschuh.net header.i=@weissschuh.net header.b="A19TOG1F" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=weissschuh.net; s=mail; t=1776507607; bh=QKmjEzlLn73fAbOtuDsEoZ0+LjZ6mquYjh2hWInLADI=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=A19TOG1Fn38nY9XWZWRykcA/6luq1/WBsRwtJvjvTNWNG8LUUofME3iJD26DiHm6+ Peh2kAxrgG3w4nUXFHqDXXzQjVXJIoGNZWOd/NQyvcispgkzpLZBmA5iN4EBqLyrwz wo/zzSwpdF3IaJv9ke8VdAmeuiDR66MqSe0Ioo18= From: =?utf-8?q?Thomas_Wei=C3=9Fschuh?= Date: Sat, 18 Apr 2026 12:20:00 +0200 Subject: [PATCH 5/7] tools/nolibc: handle 64-bit system call arguments on MIPS N32 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260418-nolibc-largefile-v1-5-b91f0775bac3@weissschuh.net> References: <20260418-nolibc-largefile-v1-0-b91f0775bac3@weissschuh.net> In-Reply-To: <20260418-nolibc-largefile-v1-0-b91f0775bac3@weissschuh.net> To: Willy Tarreau Cc: Daniel Palmer , linux-kernel@vger.kernel.org, =?utf-8?q?Thomas_Wei=C3=9Fschuh?= X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1776507606; l=11142; i=linux@weissschuh.net; s=20221212; h=from:subject:message-id; bh=QKmjEzlLn73fAbOtuDsEoZ0+LjZ6mquYjh2hWInLADI=; b=Qu2KVerUpcAl1E1oelIHlDPgPNWN0uFQGpDHW2ASqO+oQl+dmY3F+A+9iE0VX9ZW1d2a11vEx i0Hw5mw5kvxCH44fkFwTuuxndRAcZwhgxUkGIcLXH6iovEBub2J1aRR X-Developer-Key: i=linux@weissschuh.net; a=ed25519; pk=KcycQgFPX2wGR5azS7RhpBqedglOZVgRPfdFSPB1LNw= The N32 system call ABI expects 64-bit values directly in registers. This does not work on nolibc currently, as a 'long' is only 32 bits wide. Switch the system call wrappers to use 'long long' instead which can handle 64-bit values on N32. As on N64 'long' and 'long long' are the same, this does not change the behavior there. Signed-off-by: Thomas Wei=C3=9Fschuh Acked-by: Willy Tarreau --- tools/include/nolibc/arch-mips.h | 94 +++++++++++++++++++++---------------= ---- 1 file changed, 49 insertions(+), 45 deletions(-) diff --git a/tools/include/nolibc/arch-mips.h b/tools/include/nolibc/arch-m= ips.h index bb9d580ea1b1..557ef34d9df8 100644 --- a/tools/include/nolibc/arch-mips.h +++ b/tools/include/nolibc/arch-mips.h @@ -55,6 +55,8 @@ #define _NOLIBC_SYSCALL_STACK_RESERVE "addiu $sp, $sp, -32\n" #define _NOLIBC_SYSCALL_STACK_UNRESERVE "addiu $sp, $sp, 32\n" =20 +#define _NOLIBC_SYSCALL_REG register long + #else /* _ABIN32 || _ABI64 */ =20 /* binutils, GCC and clang disagree about register aliases, use numbers in= stead. */ @@ -66,12 +68,14 @@ #define _NOLIBC_SYSCALL_STACK_RESERVE #define _NOLIBC_SYSCALL_STACK_UNRESERVE =20 +#define _NOLIBC_SYSCALL_REG register long long + #endif /* _ABIO32 */ =20 #define __nolibc_syscall0(num) = \ ({ = \ - register long _num __asm__ ("v0") =3D (num); \ - register long _arg4 __asm__ ("a3"); \ + _NOLIBC_SYSCALL_REG _num __asm__ ("v0") =3D (num); \ + _NOLIBC_SYSCALL_REG _arg4 __asm__ ("a3"); \ \ __asm__ volatile ( \ _NOLIBC_SYSCALL_STACK_RESERVE \ @@ -86,9 +90,9 @@ =20 #define __nolibc_syscall1(num, arg1) = \ ({ = \ - register long _num __asm__ ("v0") =3D (num); \ - register long _arg1 __asm__ ("a0") =3D (long)(arg1); \ - register long _arg4 __asm__ ("a3"); \ + _NOLIBC_SYSCALL_REG _num __asm__ ("v0") =3D (num); \ + _NOLIBC_SYSCALL_REG _arg1 __asm__ ("a0") =3D __nolibc_arg_to_reg(arg1); \ + _NOLIBC_SYSCALL_REG _arg4 __asm__ ("a3"); \ \ __asm__ volatile ( \ _NOLIBC_SYSCALL_STACK_RESERVE \ @@ -104,10 +108,10 @@ =20 #define __nolibc_syscall2(num, arg1, arg2) = \ ({ = \ - register long _num __asm__ ("v0") =3D (num); \ - register long _arg1 __asm__ ("a0") =3D (long)(arg1); \ - register long _arg2 __asm__ ("a1") =3D (long)(arg2); \ - register long _arg4 __asm__ ("a3"); \ + _NOLIBC_SYSCALL_REG _num __asm__ ("v0") =3D (num); \ + _NOLIBC_SYSCALL_REG _arg1 __asm__ ("a0") =3D __nolibc_arg_to_reg(arg1); \ + _NOLIBC_SYSCALL_REG _arg2 __asm__ ("a1") =3D __nolibc_arg_to_reg(arg2); \ + _NOLIBC_SYSCALL_REG _arg4 __asm__ ("a3"); \ \ __asm__ volatile ( \ _NOLIBC_SYSCALL_STACK_RESERVE \ @@ -123,11 +127,11 @@ =20 #define __nolibc_syscall3(num, arg1, arg2, arg3) = \ ({ = \ - register long _num __asm__ ("v0") =3D (num); \ - register long _arg1 __asm__ ("a0") =3D (long)(arg1); \ - register long _arg2 __asm__ ("a1") =3D (long)(arg2); \ - register long _arg3 __asm__ ("a2") =3D (long)(arg3); \ - register long _arg4 __asm__ ("a3"); \ + _NOLIBC_SYSCALL_REG _num __asm__ ("v0") =3D (num); \ + _NOLIBC_SYSCALL_REG _arg1 __asm__ ("a0") =3D __nolibc_arg_to_reg(arg1); \ + _NOLIBC_SYSCALL_REG _arg2 __asm__ ("a1") =3D __nolibc_arg_to_reg(arg2); \ + _NOLIBC_SYSCALL_REG _arg3 __asm__ ("a2") =3D __nolibc_arg_to_reg(arg3); \ + _NOLIBC_SYSCALL_REG _arg4 __asm__ ("a3"); \ \ __asm__ volatile ( \ _NOLIBC_SYSCALL_STACK_RESERVE \ @@ -143,11 +147,11 @@ =20 #define __nolibc_syscall4(num, arg1, arg2, arg3, arg4) = \ ({ = \ - register long _num __asm__ ("v0") =3D (num); \ - register long _arg1 __asm__ ("a0") =3D (long)(arg1); \ - register long _arg2 __asm__ ("a1") =3D (long)(arg2); \ - register long _arg3 __asm__ ("a2") =3D (long)(arg3); \ - register long _arg4 __asm__ ("a3") =3D (long)(arg4); \ + _NOLIBC_SYSCALL_REG _num __asm__ ("v0") =3D (num); \ + _NOLIBC_SYSCALL_REG _arg1 __asm__ ("a0") =3D __nolibc_arg_to_reg(arg1); \ + _NOLIBC_SYSCALL_REG _arg2 __asm__ ("a1") =3D __nolibc_arg_to_reg(arg2); \ + _NOLIBC_SYSCALL_REG _arg3 __asm__ ("a2") =3D __nolibc_arg_to_reg(arg3); \ + _NOLIBC_SYSCALL_REG _arg4 __asm__ ("a3") =3D __nolibc_arg_to_reg(arg4); \ \ __asm__ volatile ( \ _NOLIBC_SYSCALL_STACK_RESERVE \ @@ -165,12 +169,12 @@ =20 #define __nolibc_syscall5(num, arg1, arg2, arg3, arg4, arg5) = \ ({ = \ - register long _num __asm__ ("v0") =3D (num); \ - register long _arg1 __asm__ ("a0") =3D (long)(arg1); \ - register long _arg2 __asm__ ("a1") =3D (long)(arg2); \ - register long _arg3 __asm__ ("a2") =3D (long)(arg3); \ - register long _arg4 __asm__ ("a3") =3D (long)(arg4); \ - register long _arg5 =3D (long)(arg5); \ + _NOLIBC_SYSCALL_REG _num __asm__ ("v0") =3D (num); \ + _NOLIBC_SYSCALL_REG _arg1 __asm__ ("a0") =3D __nolibc_arg_to_reg(arg1); \ + _NOLIBC_SYSCALL_REG _arg2 __asm__ ("a1") =3D __nolibc_arg_to_reg(arg2); \ + _NOLIBC_SYSCALL_REG _arg3 __asm__ ("a2") =3D __nolibc_arg_to_reg(arg3); \ + _NOLIBC_SYSCALL_REG _arg4 __asm__ ("a3") =3D __nolibc_arg_to_reg(arg4); \ + _NOLIBC_SYSCALL_REG _arg5 =3D __nolibc_arg_to_reg(arg5); \ \ __asm__ volatile ( \ _NOLIBC_SYSCALL_STACK_RESERVE \ @@ -187,13 +191,13 @@ =20 #define __nolibc_syscall6(num, arg1, arg2, arg3, arg4, arg5, arg6) = \ ({ = \ - register long _num __asm__ ("v0") =3D (num); \ - register long _arg1 __asm__ ("a0") =3D (long)(arg1); \ - register long _arg2 __asm__ ("a1") =3D (long)(arg2); \ - register long _arg3 __asm__ ("a2") =3D (long)(arg3); \ - register long _arg4 __asm__ ("a3") =3D (long)(arg4); \ - register long _arg5 =3D (long)(arg5); \ - register long _arg6 =3D (long)(arg6); \ + _NOLIBC_SYSCALL_REG _num __asm__ ("v0") =3D (num); \ + _NOLIBC_SYSCALL_REG _arg1 __asm__ ("a0") =3D __nolibc_arg_to_reg(arg1); \ + _NOLIBC_SYSCALL_REG _arg2 __asm__ ("a1") =3D __nolibc_arg_to_reg(arg2); \ + _NOLIBC_SYSCALL_REG _arg3 __asm__ ("a2") =3D __nolibc_arg_to_reg(arg3); \ + _NOLIBC_SYSCALL_REG _arg4 __asm__ ("a3") =3D __nolibc_arg_to_reg(arg4); \ + _NOLIBC_SYSCALL_REG _arg5 =3D __nolibc_arg_to_reg(arg5); \ + _NOLIBC_SYSCALL_REG _arg6 =3D __nolibc_arg_to_reg(arg6); \ \ __asm__ volatile ( \ _NOLIBC_SYSCALL_STACK_RESERVE \ @@ -214,12 +218,12 @@ =20 #define __nolibc_syscall5(num, arg1, arg2, arg3, arg4, arg5) = \ ({ = \ - register long _num __asm__ ("v0") =3D (num); \ - register long _arg1 __asm__ ("$4") =3D (long)(arg1); \ - register long _arg2 __asm__ ("$5") =3D (long)(arg2); \ - register long _arg3 __asm__ ("$6") =3D (long)(arg3); \ - register long _arg4 __asm__ ("$7") =3D (long)(arg4); \ - register long _arg5 __asm__ ("$8") =3D (long)(arg5); \ + _NOLIBC_SYSCALL_REG _num __asm__ ("v0") =3D (num); \ + _NOLIBC_SYSCALL_REG _arg1 __asm__ ("$4") =3D __nolibc_arg_to_reg(arg1); \ + _NOLIBC_SYSCALL_REG _arg2 __asm__ ("$5") =3D __nolibc_arg_to_reg(arg2); \ + _NOLIBC_SYSCALL_REG _arg3 __asm__ ("$6") =3D __nolibc_arg_to_reg(arg3); \ + _NOLIBC_SYSCALL_REG _arg4 __asm__ ("$7") =3D __nolibc_arg_to_reg(arg4); \ + _NOLIBC_SYSCALL_REG _arg5 __asm__ ("$8") =3D __nolibc_arg_to_reg(arg5); \ \ __asm__ volatile ( \ "syscall\n" \ @@ -233,13 +237,13 @@ =20 #define __nolibc_syscall6(num, arg1, arg2, arg3, arg4, arg5, arg6) = \ ({ = \ - register long _num __asm__ ("v0") =3D (num); \ - register long _arg1 __asm__ ("$4") =3D (long)(arg1); \ - register long _arg2 __asm__ ("$5") =3D (long)(arg2); \ - register long _arg3 __asm__ ("$6") =3D (long)(arg3); \ - register long _arg4 __asm__ ("$7") =3D (long)(arg4); \ - register long _arg5 __asm__ ("$8") =3D (long)(arg5); \ - register long _arg6 __asm__ ("$9") =3D (long)(arg6); \ + _NOLIBC_SYSCALL_REG _num __asm__ ("v0") =3D (num); \ + _NOLIBC_SYSCALL_REG _arg1 __asm__ ("$4") =3D __nolibc_arg_to_reg(arg1); \ + _NOLIBC_SYSCALL_REG _arg2 __asm__ ("$5") =3D __nolibc_arg_to_reg(arg2); \ + _NOLIBC_SYSCALL_REG _arg3 __asm__ ("$6") =3D __nolibc_arg_to_reg(arg3); \ + _NOLIBC_SYSCALL_REG _arg4 __asm__ ("$7") =3D __nolibc_arg_to_reg(arg4); \ + _NOLIBC_SYSCALL_REG _arg5 __asm__ ("$8") =3D __nolibc_arg_to_reg(arg5); \ + _NOLIBC_SYSCALL_REG _arg6 __asm__ ("$9") =3D __nolibc_arg_to_reg(arg6); \ \ __asm__ volatile ( \ "syscall\n" \ --=20 2.53.0 From nobody Tue Jun 16 10:24:27 2026 Received: from todd.t-8ch.de (todd.t-8ch.de [159.69.126.157]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id D9EEE329365 for ; Sat, 18 Apr 2026 10:27:00 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=159.69.126.157 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776508023; cv=none; b=KclRDpvinnV1vt/5Gm7//MtTjh20R87uKYpTJOar5GHDbm+pvavRpUByhcn/sBp3UO4TCjZN5cguMSGxAXYNcBAGzaGHHIKzyKOw2KLoWonQ2Y/yDFdudEKjxBTGsEvvBYAKtx4hx8kLOmmnBy/KQwfhfB2ezkW3//lr/lcZA2Q= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776508023; c=relaxed/simple; bh=uhJFxTsSvVwp2VBFN56wUmMVnRpL/YuodjV9RbZcaoI=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=WnWy6UuAgOc4dKeIRTCcA/q6oNfN0UV3Jp9McoqmCgSkx6ycnLfxeYlj8t6UsO8Hppig0D2kBesJ9lUltkJAIpUevaEqbDrUaECbKzw1j07IcR5ae1ahMWOCijTLA49RSXvZ1FU396nSG8zes7BtDU18KkoZtIdw8njQ3HOt+IY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=weissschuh.net; spf=pass smtp.mailfrom=weissschuh.net; dkim=pass (1024-bit key) header.d=weissschuh.net header.i=@weissschuh.net header.b=YJGWRxoM; arc=none smtp.client-ip=159.69.126.157 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=weissschuh.net Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=weissschuh.net Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=weissschuh.net header.i=@weissschuh.net header.b="YJGWRxoM" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=weissschuh.net; s=mail; t=1776507607; bh=uhJFxTsSvVwp2VBFN56wUmMVnRpL/YuodjV9RbZcaoI=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=YJGWRxoMiLPbX0RQxW6Enx8VHqtRTBrObkUT7bkOrsriJ5ybUTl/EVEU6RZODFKI/ dY6Q5xrxo8s0K3enSpfYFO3HGQCdp+x1VjwWrHSTH9P0dFTXgHDPtkqcbAbLin3f6r HG7AK0e63jqT/hkIVlhLegUdShHHd9xmTpOpZK8o= From: =?utf-8?q?Thomas_Wei=C3=9Fschuh?= Date: Sat, 18 Apr 2026 12:20:01 +0200 Subject: [PATCH 6/7] tools/nolibc: open files with O_LARGEFILE Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260418-nolibc-largefile-v1-6-b91f0775bac3@weissschuh.net> References: <20260418-nolibc-largefile-v1-0-b91f0775bac3@weissschuh.net> In-Reply-To: <20260418-nolibc-largefile-v1-0-b91f0775bac3@weissschuh.net> To: Willy Tarreau Cc: Daniel Palmer , linux-kernel@vger.kernel.org, =?utf-8?q?Thomas_Wei=C3=9Fschuh?= X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1776507606; l=834; i=linux@weissschuh.net; s=20221212; h=from:subject:message-id; bh=uhJFxTsSvVwp2VBFN56wUmMVnRpL/YuodjV9RbZcaoI=; b=gTVlVaWZIDWWldCxKJhWnWsPDSa2TmnjCFedOzK+bo8wnThhuLCAAIHRtL8BPAB22iry36K5I swyGB3SeMI0DTmK4H3q3+N7NIG4mF6IxkHIyZhL0wGI0+ifvPFLU1mx X-Developer-Key: i=linux@weissschuh.net; a=ed25519; pk=KcycQgFPX2wGR5azS7RhpBqedglOZVgRPfdFSPB1LNw= nolibc can natively handle large files. Tell this to the kernel by always using O_LARGEFILE when opening files. This is also how other libcs do it. Signed-off-by: Thomas Wei=C3=9Fschuh Acked-by: Willy Tarreau --- tools/include/nolibc/fcntl.h | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/tools/include/nolibc/fcntl.h b/tools/include/nolibc/fcntl.h index ed2f5553c65a..235f7c92fba2 100644 --- a/tools/include/nolibc/fcntl.h +++ b/tools/include/nolibc/fcntl.h @@ -29,6 +29,8 @@ int openat(int dirfd, const char *path, int flags, ...) { mode_t mode =3D 0; =20 + flags |=3D O_LARGEFILE; + if (flags & O_CREAT) { va_list args; =20 @@ -55,6 +57,8 @@ int open(const char *path, int flags, ...) { mode_t mode =3D 0; =20 + flags |=3D O_LARGEFILE; + if (flags & O_CREAT) { va_list args; =20 --=20 2.53.0 From nobody Tue Jun 16 10:24:27 2026 Received: from todd.t-8ch.de (todd.t-8ch.de [159.69.126.157]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 7515533BBD0 for ; Sat, 18 Apr 2026 10:20:16 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=159.69.126.157 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776507618; cv=none; b=GSbcZsREje2Z80o/gE5CSmBek5N4gNyT4lfAlN3RxzKnpaLQ6ZgMEYKZvPR7pDe8eaLK4t54OlTTpBtqGYCTZQ9napjzHf8OwVOvKWxtCKDbzgz95FgOODTVcUSoAKs1UvcdbICZw0ayGfpQ0W8Kerqixn0SDz0zAO8ZTYPNQYo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776507618; c=relaxed/simple; bh=VGTf91Hb9eV9gz5xhdjfCRazMw4BwVxwD47gtLZzBVE=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=DdQacfQQCOQ2optd3XcQm9fEUVMZ67Oq+JA8BQvUoeEAxU8rIaB0uAnzi0YNwKxWrwREeI0FuFG0B0Qq25/+LSJQr1ZuHQkOF2/wG9FR2VZ/NCK3HJWZPX5MU+AmurV75QSdfqqjGAX+HxgWVSYU6hhl4YUqbWl7OYBtsX8yp8I= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=weissschuh.net; spf=pass smtp.mailfrom=weissschuh.net; dkim=pass (1024-bit key) header.d=weissschuh.net header.i=@weissschuh.net header.b=q1W+MJvn; arc=none smtp.client-ip=159.69.126.157 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=weissschuh.net Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=weissschuh.net Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=weissschuh.net header.i=@weissschuh.net header.b="q1W+MJvn" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=weissschuh.net; s=mail; t=1776507607; bh=VGTf91Hb9eV9gz5xhdjfCRazMw4BwVxwD47gtLZzBVE=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=q1W+MJvncw0xf0MdFTtvvoWphT/mWhB8PJ5Mt/7orM4DpGHdgZYlhM5YOi9JsnFVc ZtrMBY8hwhbCL8tk/hn0KPsp9tgaT3ZBLmy4hKfP1quW6RZ4vCDSWDtVnXWOzUtgkP q5FvdijkrSchHwFrBnj0bRMWOSZp4q7Ew/q1BcDc= From: =?utf-8?q?Thomas_Wei=C3=9Fschuh?= Date: Sat, 18 Apr 2026 12:20:02 +0200 Subject: [PATCH 7/7] selftests/nolibc: test large file support Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260418-nolibc-largefile-v1-7-b91f0775bac3@weissschuh.net> References: <20260418-nolibc-largefile-v1-0-b91f0775bac3@weissschuh.net> In-Reply-To: <20260418-nolibc-largefile-v1-0-b91f0775bac3@weissschuh.net> To: Willy Tarreau Cc: Daniel Palmer , linux-kernel@vger.kernel.org, =?utf-8?q?Thomas_Wei=C3=9Fschuh?= X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1776507606; l=2290; i=linux@weissschuh.net; s=20221212; h=from:subject:message-id; bh=VGTf91Hb9eV9gz5xhdjfCRazMw4BwVxwD47gtLZzBVE=; b=P+fJl/61uS5n/cWbED8n1bjikw8USApiVpm+5MLIRZDDaX3psd0TgV9flBd/nv4I5QZCnoloM ipFlNygj57uCNXZzqbFMYWskUfhAyym2mhqchvlnaJHChMLGxCsdimI X-Developer-Key: i=linux@weissschuh.net; a=ed25519; pk=KcycQgFPX2wGR5azS7RhpBqedglOZVgRPfdFSPB1LNw= Make sure nolibc correctly handles large files. Signed-off-by: Thomas Wei=C3=9Fschuh Acked-by: Willy Tarreau --- tools/testing/selftests/nolibc/nolibc-test.c | 48 ++++++++++++++++++++++++= ++++ 1 file changed, 48 insertions(+) diff --git a/tools/testing/selftests/nolibc/nolibc-test.c b/tools/testing/s= elftests/nolibc/nolibc-test.c index d3c4facb54c0..1290663df47f 100644 --- a/tools/testing/selftests/nolibc/nolibc-test.c +++ b/tools/testing/selftests/nolibc/nolibc-test.c @@ -2,6 +2,7 @@ =20 #define _GNU_SOURCE #define _LARGEFILE64_SOURCE +#define _FILE_OFFSET_BITS 64 =20 /* libc-specific include files * The program may be built in 3 ways: @@ -1364,6 +1365,52 @@ int test_namespace(void) return ret; } =20 +int test_large_file(void) +{ + off_t large_seek =3D ((off_t)UINT32_MAX) + 100; + int fd, ret, saved_errno; + ssize_t written; + off_t off; + +#if defined(__mips__) && defined(_ABIN32) + /* https://lore.kernel.org/qemu-devel/fed03914-a95a-4522-a432-f129264cb2a= c@t-8ch.de/ */ + if (getpid() !=3D 1) + return 0; +#endif + + if (large_seek < UINT32_MAX) { + errno =3D EOVERFLOW; + return -1; + } + + fd =3D open("/tmp", O_TMPFILE | O_RDWR, 0644); + if (fd =3D=3D -1) + return -1; + + off =3D lseek(fd, large_seek, SEEK_CUR); + if (off =3D=3D -1) { + ret =3D off; + goto out; + } else if (off !=3D large_seek) { + errno =3D ERANGE; + ret =3D -1; + goto out; + } + + written =3D write(fd, "1", 1); + if (written =3D=3D -1) { + ret =3D written; + goto out; + } + + ret =3D 0; +out: + saved_errno =3D errno; + close(fd); + errno =3D saved_errno; + return ret; +} + /* Run syscall tests between IDs and . * Return 0 on success, non-zero on failure. */ @@ -1508,6 +1555,7 @@ int run_syscall(int min, int max) CASE_TEST(_syscall_noargs); EXPECT_SYSEQ(is_nolibc, _syscall(__NR_getp= id), getpid()); break; CASE_TEST(_syscall_args); EXPECT_SYSEQ(is_nolibc, _syscall(__NR_stat= x, 0, NULL, 0, 0, NULL), -EFAULT); break; CASE_TEST(namespace); EXPECT_SYSZR(euid0 && proc, test_namespace= ()); break; + CASE_TEST(largefile); EXPECT_SYSZR(1, test_large_file()); break; case __LINE__: return ret; /* must be last */ /* note: do not set any defaults so as to permit holes above */ --=20 2.53.0