On 03/12/2017 05:31 AM, Victor Khimenko wrote: > On Sat, Mar 11, 2017 at 8:54 PM, Mike Frysinger <vapier@xxxxxxxxxx> wrote: >> Architectures that split 64-bit values across registers pairs usually do >> so according to their C ABI calling convention (which means endianness). >> Add some notes to that effect, and change the readahead example to show >> a little endian example (since that is way more common than big endian). >> >> Also start a new list of syscalls that this issue does not apply to. >> > > Perfect. Thanks. Now it gives all the required pointers for someone to > find out the needed information, Thanks. Thanks, Victor, for your initial report and the input for this patch. Cheers, Michael >> Signed-off-by: Mike Frysinger <vapier@xxxxxxxxxx> >> --- >> v2 >> - add preadv/prwritev/preadv2/prwritev2 to the new list. >> >> man2/syscall.2 | 22 ++++++++++++++++++++-- >> 1 file changed, 20 insertions(+), 2 deletions(-) >> >> diff --git a/man2/syscall.2 b/man2/syscall.2 >> index fcb0a7e21248..f8c89b84356d 100644 >> --- a/man2/syscall.2 >> +++ b/man2/syscall.2 >> @@ -102,13 +102,14 @@ Thus, using >> instead of the wrapper provided by glibc, >> the >> .BR readahead () >> -system call would be invoked as follows on the ARM architecture with the EABI: >> +system call would be invoked as follows on the ARM architecture with the EABI >> +in little endian mode: >> >> .in +4n >> .nf >> syscall(SYS_readahead, fd, 0, >> - (unsigned int) (offset >> 32), >> (unsigned int) (offset & 0xFFFFFFFF), >> + (unsigned int) (offset >> 32), >> count); >> .fi >> .in >> @@ -124,6 +125,8 @@ register pair. >> That means inserting a dummy value into >> .I r1 >> (the second argument of 0). >> +Care also must be taken so that the split follows endian conventions >> +(according to the C ABI for the platform). >> >> Similar issues can occur on MIPS with the O32 ABI, >> on PowerPC with the 32-bit ABI, and on Xtensa. >> @@ -140,6 +143,21 @@ The affected system calls are >> .BR sync_file_range (2), >> and >> .BR truncate64 (2). >> + >> +.\" You need to look up the syscalls directly in the kernel source to see if >> +.\" they should be in this list. For example, look at fs/read_write.c and >> +.\" the function signatures that do: >> +.\" ..., unsigned long, pos_l, unsigned long, pos_h, ... >> +.\" If they use off_t, then they most likely do not belong in this list. >> +This does not affect syscalls that manually split and assemble 64-bit values >> +such as >> +.BR _llseek (2), >> +.BR preadv (2), >> +.BR preadv2 (2), >> +.BR pwritev (2). >> +and >> +.BR pwritev2 (2). >> +Welcome to the wonderful world of historical baggage. >> .SS Architecture calling conventions >> Every architecture has its own way of invoking and passing arguments to the >> kernel. >> -- >> 2.12.0 >> > -- Michael Kerrisk Linux man-pages maintainer; http://www.kernel.org/doc/man-pages/ Linux/UNIX System Programming Training: http://man7.org/training/ -- To unsubscribe from this list: send the line "unsubscribe linux-man" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html