mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-07-21 22:47:51 -04:00
tools/nolibc: add a helper to split a 64-bit argument into 32-bit halves
On 32-bit architectures some system calls require a single 64-bit argument to be passed as two 32-bit halves. Add a helper to easily split such arguments. This works on little and bit endian. Signed-off-by: Daniel Palmer <daniel@thingy.jp> Acked-by: Willy Tarreau <w@1wt.eu> Link: https://patch.msgid.link/20260521-nolibc-ftruncate-v1-2-5384a83b2402@weissschuh.net Signed-off-by: Thomas Weißschuh <linux@weissschuh.net>
This commit is contained in:
committed by
Thomas Weißschuh
parent
f66d6bc35e
commit
acbbec1519
@@ -70,6 +70,17 @@ static __inline__ int __nolibc_enosys(const char *syscall, ...)
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
/*
|
||||
* Helper for 32-bit machines where a 64-bit syscall arg needs to be split into
|
||||
* two 32-bit parts while making sure the order of the low/high parts are correct
|
||||
* for the endianness:
|
||||
* __NOLIBC_LLARGPART(x, 0), __NOLIBC_LLARGPART(x, 1)
|
||||
*/
|
||||
#define __NOLIBC_LLARGPART(_arg, _part) \
|
||||
(((union { long long ll; long l[2]; }) { .ll = _arg }).l[_part])
|
||||
|
||||
|
||||
/* Functions in this file only describe syscalls. They're declared static so
|
||||
* that the compiler usually decides to inline them while still being allowed
|
||||
* to pass a pointer to one of their instances. Each syscall exists in two
|
||||
|
||||
Reference in New Issue
Block a user