]> git.ipfire.org Git - thirdparty/linux.git/commit
tools/nolibc: add __nolibc_arg_to_reg()
authorThomas Weißschuh <linux@weissschuh.net>
Sat, 18 Apr 2026 10:19:57 +0000 (12:19 +0200)
committerThomas Weißschuh <linux@weissschuh.net>
Mon, 27 Apr 2026 18:08:48 +0000 (20:08 +0200)
commit32db83195f75bda670ca9282d9868ad02b1d6185
tree580463b94dfed9c01597a623c26bd733b1246a36
parentf38a0bb74576f418f264b8d407be8de7aac1f42a
tools/nolibc: add __nolibc_arg_to_reg()

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ßschuh <linux@weissschuh.net>
Acked-by: Willy Tarreau <w@1wt.eu>
Link: https://patch.msgid.link/20260418-nolibc-largefile-v1-2-b91f0775bac3@weissschuh.net
tools/include/nolibc/crt.h