mirror of https://github.com/mkerrisk/man-pages
syscall.2: Move "Architecture calling conventions" subsection
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
This commit is contained in:
parent
9390ee75bb
commit
08c9b3b9c8
114
man2/syscall.2
114
man2/syscall.2
|
@ -79,63 +79,6 @@ and an error code is stored in
|
|||
.BR syscall ()
|
||||
first appeared in
|
||||
4BSD.
|
||||
.SS Architecture calling conventions
|
||||
Every architecture has its own way of invoking and passing arguments to the
|
||||
kernel.
|
||||
The details for various architectures are listed in the two tables below.
|
||||
|
||||
The first table lists the instruction used to transition to kernel mode,
|
||||
(which might not be the fastest or best way to transition to the kernel,
|
||||
so you might have to refer to the VDSO),
|
||||
the register used to indicate the system call number,
|
||||
and the register used to return the system call result.
|
||||
.if t \{\
|
||||
.ft CW
|
||||
\}
|
||||
.TS
|
||||
l l1 l l1 l.
|
||||
arch/ABI instruction syscall # retval Notes
|
||||
_
|
||||
arm/OABI swi NR - a1 NR is syscall #
|
||||
arm/EABI swi 0x0 r7 r1
|
||||
blackfin excpt 0x0 P0 R0
|
||||
i386 int $0x80 eax eax
|
||||
ia64 break 0x100000 r15 r10/r8C
|
||||
parisc ble 0x100(%sr2, %r0) r20 r28
|
||||
sparc/32 t 0x10 g1 o0
|
||||
sparc/64 t 0x6d g1 o0
|
||||
x86_64 syscall rax rax
|
||||
.TE
|
||||
.if t \{\
|
||||
.in
|
||||
.ft P
|
||||
\}
|
||||
.PP
|
||||
The second table shows the registers used to pass the system call arguments.
|
||||
.if t \{\
|
||||
.ft CW
|
||||
\}
|
||||
.TS
|
||||
l l l l l l l l.
|
||||
arch/ABI arg1 arg2 arg3 arg4 arg5 arg6 arg7
|
||||
_
|
||||
arm/OABI a1 a2 a3 a4 v1 v2 v3
|
||||
arm/EABI r1 r2 r3 r4 r5 r6 r7
|
||||
blackfin R0 R1 R2 R3 R4 R5 -
|
||||
i386 ebx ecx edx esi edi ebp -
|
||||
ia64 r11 r9 r10 r14 r15 r13 -
|
||||
parisc r26 r25 r24 r23 r22 r21 -
|
||||
sparc/32 o0 o1 o2 o3 o4 o5 -
|
||||
sparc/64 o0 o1 o2 o3 o4 o5 -
|
||||
x86_64 rdi rsi rdx r10 r8 r9 -
|
||||
.TE
|
||||
.if t \{\
|
||||
.in
|
||||
.ft P
|
||||
\}
|
||||
.PP
|
||||
Note that these tables don't cover the entire calling convention\(emsome
|
||||
architectures may indiscriminately clobber other registers not listed here.
|
||||
.SS Architecture-specific requirements
|
||||
Each architecture ABI has its own requirements on how
|
||||
system call arguments are passed to the kernel.
|
||||
|
@ -195,6 +138,63 @@ The affected system calls are
|
|||
.BR sync_file_range (2),
|
||||
and
|
||||
.BR truncate64 (2).
|
||||
.SS Architecture calling conventions
|
||||
Every architecture has its own way of invoking and passing arguments to the
|
||||
kernel.
|
||||
The details for various architectures are listed in the two tables below.
|
||||
|
||||
The first table lists the instruction used to transition to kernel mode,
|
||||
(which might not be the fastest or best way to transition to the kernel,
|
||||
so you might have to refer to the VDSO),
|
||||
the register used to indicate the system call number,
|
||||
and the register used to return the system call result.
|
||||
.if t \{\
|
||||
.ft CW
|
||||
\}
|
||||
.TS
|
||||
l l1 l l1 l.
|
||||
arch/ABI instruction syscall # retval Notes
|
||||
_
|
||||
arm/OABI swi NR - a1 NR is syscall #
|
||||
arm/EABI swi 0x0 r7 r1
|
||||
blackfin excpt 0x0 P0 R0
|
||||
i386 int $0x80 eax eax
|
||||
ia64 break 0x100000 r15 r10/r8C
|
||||
parisc ble 0x100(%sr2, %r0) r20 r28
|
||||
sparc/32 t 0x10 g1 o0
|
||||
sparc/64 t 0x6d g1 o0
|
||||
x86_64 syscall rax rax
|
||||
.TE
|
||||
.if t \{\
|
||||
.in
|
||||
.ft P
|
||||
\}
|
||||
.PP
|
||||
The second table shows the registers used to pass the system call arguments.
|
||||
.if t \{\
|
||||
.ft CW
|
||||
\}
|
||||
.TS
|
||||
l l l l l l l l.
|
||||
arch/ABI arg1 arg2 arg3 arg4 arg5 arg6 arg7
|
||||
_
|
||||
arm/OABI a1 a2 a3 a4 v1 v2 v3
|
||||
arm/EABI r1 r2 r3 r4 r5 r6 r7
|
||||
blackfin R0 R1 R2 R3 R4 R5 -
|
||||
i386 ebx ecx edx esi edi ebp -
|
||||
ia64 r11 r9 r10 r14 r15 r13 -
|
||||
parisc r26 r25 r24 r23 r22 r21 -
|
||||
sparc/32 o0 o1 o2 o3 o4 o5 -
|
||||
sparc/64 o0 o1 o2 o3 o4 o5 -
|
||||
x86_64 rdi rsi rdx r10 r8 r9 -
|
||||
.TE
|
||||
.if t \{\
|
||||
.in
|
||||
.ft P
|
||||
\}
|
||||
.PP
|
||||
Note that these tables don't cover the entire calling convention\(emsome
|
||||
architectures may indiscriminately clobber other registers not listed here.
|
||||
.SH EXAMPLE
|
||||
.nf
|
||||
#define _GNU_SOURCE
|
||||
|
|
Loading…
Reference in New Issue