mirror of https://github.com/mkerrisk/man-pages
syscall.2: Improve "Architecture calling conventions" subsection
Split into tables so that the information does not render wider than 80 columns. Add some explanation of tables and table columns. Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
This commit is contained in:
parent
d1c98faff7
commit
602c75a875
|
@ -37,7 +37,7 @@
|
|||
.\" 2002-03-20 Christoph Hellwig <hch@infradead.org>
|
||||
.\" - adopted for Linux
|
||||
.\"
|
||||
.TH SYSCALL 2 2013-04-01 "Linux" "Linux Programmer's Manual"
|
||||
.TH SYSCALL 2 2013-04-07 "Linux" "Linux Programmer's Manual"
|
||||
.SH NAME
|
||||
syscall \- indirect system call
|
||||
.SH SYNOPSIS
|
||||
|
@ -80,34 +80,64 @@ and an error code is stored in
|
|||
first appeared in
|
||||
4BSD.
|
||||
.SS Architecture calling conventions
|
||||
Every architecture has its own way of invoking & passing arguments to the
|
||||
Every architecture has its own way of invoking and passing arguments to the
|
||||
kernel.
|
||||
Note that the instruction listed below might not be the fastest or best way to
|
||||
transition to the kernel, so you might have to refer to the VDSO.
|
||||
Also note that this doesn't cover the entire calling convention -- some
|
||||
architectures may indiscriminately clobber other registers not listed here.
|
||||
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 l l l l l l l l l l.
|
||||
arch/ABI insn NR ret arg1 arg2 arg3 arg4 arg5 arg6 arg7
|
||||
l l1 l l1 l.
|
||||
arch/ABI instruction syscall # retval Notes
|
||||
_
|
||||
arm/OABI swi NR; - a1 a1 a2 a3 a4 v1 v2 v3
|
||||
arm/EABI swi 0x0; r7 r1 r1 r2 r3 r4 r5 r6 r7
|
||||
bfin excpt 0x0; P0 R0 R0 R1 R2 R3 R4 R5 -
|
||||
i386 int $0x80; eax eax ebx ecx edx esi edi ebp -
|
||||
ia64 break 0x100000; r15 r10/r8 r11 r9 r10 r14 r15 r13 -
|
||||
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
|
||||
.\" not sure about insn or NR
|
||||
.\" parisc ble 0x100(%%sr2, %%r0); - r28 r26 r25 r24 r23 r22 r21 -
|
||||
sparc/32 t 0x10; g1 o0 o0 o1 o2 o3 o4 o5 -
|
||||
sparc/64 t 0x6d; g1 o0 o0 o1 o2 o3 o4 o5 -
|
||||
x86_64 syscall; rax rax rdi rsi rdx r10 r8 r9 -
|
||||
.\" parisc ble 0x100(%%sr2, %%r0) - 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 -
|
||||
.\" not sure about insn or NR
|
||||
.\" 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.
|
||||
|
|
Loading…
Reference in New Issue