Hi Eugene, On 09/19/2018 07:12 PM, Eugene Syromyatnikov wrote: > Signed-off-by: Eugene Syromyatnikov <evgsyr@xxxxxxxxx> > --- > man2/syscall.2 | 42 +++++++++++++++++++++++++++++++++++------- > 1 file changed, 35 insertions(+), 7 deletions(-) Great stuff! Patch applied. But I have a question below. > diff --git a/man2/syscall.2 b/man2/syscall.2 > index 78a91ba..da4173e 100644 > --- a/man2/syscall.2 > +++ b/man2/syscall.2 > @@ -240,14 +240,42 @@ and so on up to > .IR "trap #0x17" > for 7-argument system calls. > .IP [5] > -The x32 ABI uses the same instruction as the x86-64 ABI and is used on > -the same processors. > -To differentiate between them, the bit mask > +The x32 ABI shares syscall table with x86-64 ABI, however, there are some > +nuances: > +.RS > +.IP \(bu 3 > +In order to signalise that a system call is called under the x32 ABI, additional > .I __X32_SYSCALL_BIT > -is bitwise-ORed into the system call number for system calls > -under the x32 ABI. > -Both system call tables are available though, > -so setting the bit is not a hard requirement. > +is bitwise-ORed with the system call number. > +The ABI used by a process affects some things, signal handling or syscall > +restarting, for example. > +.IP \(bu > +Since x32 has different sizes for > +.I long > +and pointer types, layouts of some (but not all; > +.B struct timeval > +or > +.B struct rlimit > +are 64-bit, for example) structures are different, and, in order to handle this, > +additional syscalls are added to the syscall table, starting from number 512 > +(without the > +.IR __X32_SYSCALL_BIT ); > +for example, > +.B __NR_readv > +is defined to 19 for x86-64 ABI and to > +.IR __X32_SYSCALL_BIT " | " \fB515\fP > +for x32 ABI. > +Most of there additional system calls are actually identical to the syscalls > +used for providing i386 compat; there are some notable exceptions, however, > +such as > +.BR preadv2 (2), > +that uses > +.B struct iovec > +entities with 4-byte pointers and sizes ("compat_iovec" in kernel's terms), but > +passes 8-byte > +.I pos > +argument in a single register and not two, as it is implemented in every other > +ABI. You say here "every other ABI". Do you mean rather, every other *32-bit* ABI? Thanks, Michael -- Michael Kerrisk Linux man-pages maintainer; http://www.kernel.org/doc/man-pages/ Linux/UNIX System Programming Training: http://man7.org/training/