OSDN Git Service

LDP: Update original to LDP v3.79
[linuxjm/LDP_man-pages.git] / original / man2 / syscall.2
index de96c94..044f987 100644 (file)
 .\"
 .\" 2002-03-20  Christoph Hellwig <hch@infradead.org>
 .\"    - adopted for Linux
+.\" 2015-01-17, Kees Cook <keescook@chromium.org>
+.\"    Added mips and arm64.
 .\"
-.TH SYSCALL 2 2013-09-17 "Linux" "Linux Programmer's Manual"
+.TH SYSCALL 2 2015-01-22 "Linux" "Linux Programmer's Manual"
 .SH NAME
 syscall \- indirect system call
 .SH SYNOPSIS
@@ -46,7 +48,7 @@ syscall \- indirect system call
 .B #include <unistd.h>
 .BR "#include <sys/syscall.h>   "  "/* For SYS_xxx definitions */"
 
-.BI "int syscall(int " number ", ...);"
+.BI "long syscall(long " number ", ...);"
 .fi
 .SH DESCRIPTION
 .BR syscall ()
@@ -145,7 +147,8 @@ 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),
+so you might have to refer to
+.BR vdso (7)),
 the register used to indicate the system call number,
 and the register used to return the system call result.
 .if t \{\
@@ -157,16 +160,29 @@ arch/ABI  instruction     syscall #       retval  Notes
 _
 arm/OABI       swi NR  -       a1      NR is syscall #
 arm/EABI       swi 0x0 r7      r0
+arm64  svc #0  x8      x0
 blackfin       excpt 0x0       P0      R0
 i386   int $0x80       eax     eax
-ia64   break 0x100000  r15     r10/r8
+ia64   break 0x100000  r15     r8      See below
+mips   syscall v0      v0      See below
 parisc ble 0x100(%sr2, %r0)    r20     r28
-s390   svc 0   r1      r2      NR may be passed directly with
-s390x  svc 0   r1      r2      "svc NR" if NR is less than 256
+s390   svc 0   r1      r2      See below
+s390x  svc 0   r1      r2      See below
 sparc/32       t 0x10  g1      o0
 sparc/64       t 0x6d  g1      o0
 x86_64 syscall rax     rax
 .TE
+.PP
+For s390 and s390x, NR (the system call number)
+may be passed directly with "svc NR" if it is less than 256.
+
+On a few architectures,
+a register is used to indicate simple boolean failure of the system call:
+ia64 uses
+.I r10
+for this purpose,
+and mips uses
+.IR a3 .
 .if t \{\
 .in
 .ft P
@@ -177,14 +193,17 @@ The second table shows the registers used to pass the system call arguments.
 .ft CW
 \}
 .TS
-l l l l l l l l.
-arch/ABI       arg1    arg2    arg3    arg4    arg5    arg6    arg7
+l l2 l2 l2 l2 l2 l2 l2 l.
+arch/ABI       arg1    arg2    arg3    arg4    arg5    arg6    arg7    Notes
 _
 arm/OABI       a1      a2      a3      a4      v1      v2      v3
 arm/EABI       r0      r1      r2      r3      r4      r5      r6
+arm64  x0      x1      x2      x3      x4      x5      -
 blackfin       R0      R1      R2      R3      R4      R5      -
 i386   ebx     ecx     edx     esi     edi     ebp     -
-ia64   r11     r9      r10     r14     r15     r13     -
+ia64   out0    out1    out2    out3    out4    out5    -
+mips/o32       a0      a1      a2      a3      -       -       -       See below
+mips/n32,64    a0      a1      a2      a3      a4      a5      -
 parisc r26     r25     r24     r23     r22     r21     -
 s390   r2      r3      r4      r5      r6      r7      -
 s390x  r2      r3      r4      r5      r6      r7      -
@@ -192,6 +211,9 @@ 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
+.PP
+The mips/o32 system call convention passes
+arguments 5 through 8 on the user stack.
 .if t \{\
 .in
 .ft P
@@ -219,4 +241,15 @@ main(int argc, char *argv[])
 .SH SEE ALSO
 .BR _syscall (2),
 .BR intro (2),
-.BR syscalls (2)
+.BR syscalls (2),
+.BR errno (3),
+.BR vdso (7)
+.SH COLOPHON
+This page is part of release 3.79 of the Linux
+.I man-pages
+project.
+A description of the project,
+information about reporting bugs,
+and the latest version of this page,
+can be found at
+\%http://www.kernel.org/doc/man\-pages/.