OSDN Git Service

LDP: Update original to LDP v3.79
[linuxjm/LDP_man-pages.git] / original / man2 / syscall.2
index 539bb12..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 2014-01-11 "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 ()
@@ -158,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  bool error/errno value
+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
@@ -178,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   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      -
@@ -193,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
@@ -221,4 +242,14 @@ main(int argc, char *argv[])
 .BR _syscall (2),
 .BR intro (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/.