OSDN Git Service

長音記号の修正を release に反映
[linuxjm/LDP_man-pages.git] / release / man2 / syscall.2
index 39a36a3..3f9cfa5 100644 (file)
@@ -36,6 +36,8 @@
 .\"
 .\" 2002-03-20  Christoph Hellwig <hch@infradead.org>
 .\"    - adopted for Linux
+.\" 2015-01-17, Kees Cook <keescook@chromium.org>
+.\"    Added mips and arm64.
 .\"
 .\"*******************************************************************
 .\"
@@ -50,7 +52,7 @@
 .\" Updated 2013-05-06, Akihiro MOTOKI <amotoki@gmail.com>
 .\" Updated 2013-07-24, Akihiro MOTOKI <amotoki@gmail.com>
 .\"
-.TH SYSCALL 2 2013\-09\-17 Linux "Linux Programmer's Manual"
+.TH SYSCALL 2 2015\-01\-22 Linux "Linux Programmer's Manual"
 .SH 名前
 syscall \- 間接システムコール
 .SH 書式
@@ -59,7 +61,7 @@ syscall \- 間接システムコール
 \fB#include <unistd.h>\fP
 \fB#include <sys/syscall.h>   \fP/* SYS_xxx の定義用 */
 
-\fBint syscall(int \fP\fInumber\fP\fB, ...);\fP
+\fBlong syscall(long \fP\fInumber\fP\fB, ...);\fP
 .fi
 .SH 説明
 \fBsyscall\fP() は、システムコールを起動する小さなライブラリ関数で、 \fInumber\fP
@@ -67,25 +69,25 @@ syscall \- 間接システムコール
 ライブラリにラッパー関数が存在しないシステムコールを呼び出したい場合である。
 
 \fBsyscall\fP() は、システムコールを行う前に CPU
\83¬ã\82¸ã\82¹ã\82¿ã\82\92ä¿\9då­\98ã\81\97ã\80\81ã\82·ã\82¹ã\83\86ã\83 ã\82³ã\83¼ã\83«ã\81\8bã\82\89è¿\94ã\81£ã\81\9fé\9a\9bã\81«ã\83¬ã\82¸ã\82¹ã\82¿を復元し、エラーが発生した場合はシステムコールが返したエラーコードを \fBerrno\fP(3)
\83¬ã\82¸ã\82¹ã\82¿ã\83¼ã\82\92ä¿\9då­\98ã\81\97ã\80\81ã\82·ã\82¹ã\83\86ã\83 ã\82³ã\83¼ã\83«ã\81\8bã\82\89è¿\94ã\81£ã\81\9fé\9a\9bã\81«ã\83¬ã\82¸ã\82¹ã\82¿ã\83¼を復元し、エラーが発生した場合はシステムコールが返したエラーコードを \fBerrno\fP(3)
 に格納する。
 
-システムコールのシンボル定数は、ヘッダファイル \fI<sys/syscall.h>\fP に書かれている。
\82·ã\82¹ã\83\86ã\83 ã\82³ã\83¼ã\83«ã\81®ã\82·ã\83³ã\83\9cã\83«å®\9aæ\95°ã\81¯ã\80\81ã\83\98ã\83\83ã\83\80ã\83¼ã\83\95ã\82¡ã\82¤ã\83« \fI<sys/syscall.h>\fP ã\81«æ\9b¸ã\81\8bã\82\8cã\81¦ã\81\84ã\82\8bã\80\82
 .SH 返り値
 返り値は呼び出されたシステムコールによって定義される。 一般に、返り値 0 は成功を表す。 \-1 はエラーを表し、エラーコードは \fIerrno\fP
 に入れられる。
 .SH 注意
 \fBsyscall\fP()  は 4BSD で最初に登場した。
-.SS アーキテクチャ固有の要件
-各アーキテクチャの ABI には、 システムコールの引き数のカーネルへの渡し方に関する独自の要件がある。
+.SS アーキテクチャ固有の要件
\90\84ã\82¢ã\83¼ã\82­ã\83\86ã\82¯ã\83\81ã\83£ã\83¼ã\81® ABI ã\81«ã\81¯ã\80\81 ã\82·ã\82¹ã\83\86ã\83 ã\82³ã\83¼ã\83«ã\81®å¼\95ã\81\8dæ\95°ã\81®ã\82«ã\83¼ã\83\8dã\83«ã\81¸ã\81®æ¸¡ã\81\97æ\96¹ã\81«é\96¢ã\81\99ã\82\8bç\8b¬è\87ªã\81®è¦\81件ã\81\8cã\81\82ã\82\8bã\80\82
 (ほとんどのシステムコールのように) glibc ラッパー関数があるシステムコールでは、 glibc
\81\8c詳細ã\82\92å\87¦ç\90\86ã\81\97ã\80\81ã\82¢ã\83¼ã\82­ã\83\86ã\82¯ã\83\81ã\83£ã\81«å¿\9cã\81\98ã\81\9fæ\96¹æ³\95ã\81§å¼\95ã\81\8dæ\95°ã\81\8cé\81©å\88\87ã\81ªã\83¬ã\82¸ã\82¹ã\82¿にコピーされる。 しかし、 システムコールを呼び出すのに \fBsyscall\fP()
-を使う場合には、 呼び出し側でアーキテクチャ依存の詳細を処理しなければならない場合がある。 これはいくつかの 32
-ビットアーキテクチャでは非常によくあることだ。
\81\8c詳細ã\82\92å\87¦ç\90\86ã\81\97ã\80\81ã\82¢ã\83¼ã\82­ã\83\86ã\82¯ã\83\81ã\83£ã\83¼ã\81«å¿\9cã\81\98ã\81\9fæ\96¹æ³\95ã\81§å¼\95ã\81\8dæ\95°ã\81\8cé\81©å\88\87ã\81ªã\83¬ã\82¸ã\82¹ã\82¿ã\83¼にコピーされる。 しかし、 システムコールを呼び出すのに \fBsyscall\fP()
+を使う場合には、 呼び出し側でアーキテクチャ依存の詳細を処理しなければならない場合がある。 これはいくつかの 32
\83\93ã\83\83ã\83\88ã\82¢ã\83¼ã\82­ã\83\86ã\82¯ã\83\81ã\83£ã\83¼ã\81§ã\81¯é\9d\9e常ã\81«ã\82\88ã\81\8fã\81\82ã\82\8bã\81\93ã\81¨ã\81 ã\80\82
 
-例えば、ARM アーキテクチャの Embedded ABI (EABI) では、 (\fIlong long\fP などの) 64
-ビット値は偶数番地のレジスタのペアに境界があっていなければならない。したがって、 glibc が提供するラッパー関数ではなく \fBsyscall\fP()
-を使う場合には、 \fBreadahead\fP() システムコールは ARM アーキテクチャの EABI では以下のようにして起動されることになる。
+ä¾\8bã\81\88ã\81°ã\80\81ARM ã\82¢ã\83¼ã\82­ã\83\86ã\82¯ã\83\81ã\83£ã\83¼ã\81® Embedded ABI (EABI) ã\81§ã\81¯ã\80\81 (\fIlong long\fP ã\81ªã\81©ã\81®) 64
\83\93ã\83\83ã\83\88å\80¤ã\81¯å\81¶æ\95°ç\95ªå\9c°ã\81®ã\83¬ã\82¸ã\82¹ã\82¿ã\83¼ã\81®ã\83\9aã\82¢ã\81«å¢\83ç\95\8cã\81\8cã\81\82ã\81£ã\81¦ã\81\84ã\81ªã\81\91ã\82\8cã\81°ã\81ªã\82\89ã\81ªã\81\84ã\80\82ã\81\97ã\81\9fã\81\8cã\81£ã\81¦ã\80\81 glibc ã\81\8cæ\8f\90ä¾\9bã\81\99ã\82\8bã\83©ã\83\83ã\83\91ã\83¼é\96¢æ\95°ã\81§ã\81¯ã\81ªã\81\8f \fBsyscall\fP()
\82\92使ã\81\86å ´å\90\88ã\81«ã\81¯ã\80\81 \fBreadahead\fP() ã\82·ã\82¹ã\83\86ã\83 ã\82³ã\83¼ã\83«ã\81¯ ARM ã\82¢ã\83¼ã\82­ã\83\86ã\82¯ã\83\81ã\83£ã\83¼ã\81® EABI ã\81§ã\81¯ä»¥ä¸\8bã\81®ã\82\88ã\81\86ã\81«ã\81\97ã\81¦èµ·å\8b\95ã\81\95ã\82\8cã\82\8bã\81\93ã\81¨ã\81«ã\81ªã\82\8bã\80\82
 
 .in +4n
 .nf
@@ -97,7 +99,7 @@ syscall(SYS_readahead, fd, 0,
 .in
 .PP
 オフセット引き数は 64 ビットで、最初の引き数 (\fIfd\fP) は \fIr0\fP で渡されるので、呼び出し側では手動で 64
-ビット値を分割して境界を合わせて、 64 ビット値が \fIr2\fP/\fIr3\fP レジスタペアで渡されるようにしなければならない。このため、 \fIr1\fP
\83\93ã\83\83ã\83\88å\80¤ã\82\92å\88\86å\89²ã\81\97ã\81¦å¢\83ç\95\8cã\82\92å\90\88ã\82\8fã\81\9bã\81¦ã\80\81 64 ã\83\93ã\83\83ã\83\88å\80¤ã\81\8c \fIr2\fP/\fIr3\fP ã\83¬ã\82¸ã\82¹ã\82¿ã\83¼ã\83\9aã\82¢ã\81§æ¸¡ã\81\95ã\82\8cã\82\8bã\82\88ã\81\86ã\81«ã\81\97ã\81ªã\81\91ã\82\8cã\81°ã\81ªã\82\89ã\81ªã\81\84ã\80\82ã\81\93ã\81®ã\81\9fã\82\81ã\80\81 \fIr1\fP
 (2 番目の引数 0) としてダミー値を挿入している。
 
 .\" Mike Frysinger: this issue ends up forcing MIPS
@@ -107,13 +109,13 @@ syscall(SYS_readahead, fd, 0,
 次のシステムコールに影響がある: \fBfadvise64_64\fP(2), \fBftruncate64\fP(2), \fBposix_fadvise\fP(2),
 \fBpread64\fP(2), \fBpwrite64\fP(2), \fBreadahead\fP(2), \fBsync_file_range\fP(2),
 \fBtruncate64\fP(2)
-.SS アーキテクチャ毎の呼び出し規約
\90\84ã\82¢ã\83¼ã\82­ã\83\86ã\82¯ã\83\81ã\83£ã\81«ã\81¯ã\80\81ã\81\9dã\82\8cã\81\9eã\82\8cç\8b¬è\87ªã\81®ã\82·ã\82¹ã\83\86ã\83 ã\82³ã\83¼ã\83«èµ·å\8b\95æ\96¹æ³\95ã\81¨ã\82«ã\83¼ã\83\8dã\83«ã\81¸ã\81®å¼\95ã\81\8dæ\95°ã\81®æ¸¡ã\81\97æ\96¹ã\81\8cã\81\82ã\82\8bã\80\82 å\90\84種ã\81®ã\82¢ã\83¼ã\82­ã\83\86ã\82¯ã\83\81ã\83£の詳細を以下の 2
+.SS アーキテクチャ毎の呼び出し規約
\90\84ã\82¢ã\83¼ã\82­ã\83\86ã\82¯ã\83\81ã\83£ã\83¼ã\81«ã\81¯ã\80\81ã\81\9dã\82\8cã\81\9eã\82\8cç\8b¬è\87ªã\81®ã\82·ã\82¹ã\83\86ã\83 ã\82³ã\83¼ã\83«èµ·å\8b\95æ\96¹æ³\95ã\81¨ã\82«ã\83¼ã\83\8dã\83«ã\81¸ã\81®å¼\95ã\81\8dæ\95°ã\81®æ¸¡ã\81\97æ\96¹ã\81\8cã\81\82ã\82\8bã\80\82 å\90\84種ã\81®ã\82¢ã\83¼ã\82­ã\83\86ã\82¯ã\83\81ã\83£ã\83¼の詳細を以下の 2
 つの表にまとめる。
 
-最初の表は、 カーネルモードに遷移するのに使用される命令、 システムコール番号を示すのに使用されるレジスタ、
-システムコールの結果を返すのに使用されるレジスタの一覧である (なお、 ここに載っているカーネルモードに遷移するのに使用される命令は、
-カーネルモードに遷移する最速や最善の方法でない場合もあるので、 VDSO を参照する必要があるかもしれない)。
\9c\80å\88\9dã\81®è¡¨ã\81¯ã\80\81 ã\82«ã\83¼ã\83\8dã\83«ã\83¢ã\83¼ã\83\89ã\81«é\81·ç§»ã\81\99ã\82\8bã\81®ã\81«ä½¿ç\94¨ã\81\95ã\82\8cã\82\8bå\91½ä»¤ã\80\81 ã\82·ã\82¹ã\83\86ã\83 ã\82³ã\83¼ã\83«ç\95ªå\8f·ã\82\92示ã\81\99ã\81®ã\81«ä½¿ç\94¨ã\81\95ã\82\8cã\82\8bã\83¬ã\82¸ã\82¹ã\82¿ã\83¼ã\80\81
\82·ã\82¹ã\83\86ã\83 ã\82³ã\83¼ã\83«ã\81®çµ\90æ\9e\9cã\82\92è¿\94ã\81\99ã\81®ã\81«ä½¿ç\94¨ã\81\95ã\82\8cã\82\8bã\83¬ã\82¸ã\82¹ã\82¿ã\83¼ã\81®ä¸\80覧ã\81§ã\81\82ã\82\8b (ã\81ªã\81\8aã\80\81 ã\81\93ã\81\93ã\81«è¼\89ã\81£ã\81¦ã\81\84ã\82\8bã\82«ã\83¼ã\83\8dã\83«ã\83¢ã\83¼ã\83\89ã\81«é\81·ç§»ã\81\99ã\82\8bã\81®ã\81«ä½¿ç\94¨ã\81\95ã\82\8cã\82\8bå\91½ä»¤ã\81¯ã\80\81
+カーネルモードに遷移する最速や最善の方法でない場合もあるので、 \fBvdso\fP(7) を参照する必要があるかもしれない)。
 .if  t \{\
 .ft CW
 \}
@@ -121,36 +123,46 @@ syscall(SYS_readahead, fd, 0,
 l l1 l l1 l.
 arch/ABI       instruction     syscall #       retval  Notes
 _
-arm/OABI       swi NR  \-      a1      NR is syscall #
+arm/OABI       swi NR  \-      a1      NR はシステムコール番号
 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      下記参照
+mips   syscall v0      v0      下記参照
 parisc ble 0x100(%sr2, %r0)    r20     r28
-s390   svc 0   r1      r2      NR ã\81\8c 256 æ\9cªæº\80ã\81®å ´å\90\88 "svc NR" ã\81§
-s390x  svc 0   r1      r2      NR が直接渡される場合がある
+s390   svc 0   r1      r2      ä¸\8bè¨\98å\8f\82ç\85§
+s390   svc 0   r1      r2      下記参照
 sparc/32       t 0x10  g1      o0
 sparc/64       t 0x6d  g1      o0
 x86_64 syscall rax     rax
 .TE
+.PP
+s390 と s390x では、 NR (システムコール番号) が 256 未満の場合 "svc NR" で NR が直接渡される場合がある。
+
+少ないがいくつかのアーキテクチャーでは、 システムコールの失敗を示す単純な真偽値がレジスターを使って通知される。この用途に ia64 は \fIr10\fP
+を使用し、 mips は \fIa3\fP を使用する。
 .if  t \{\
 .in
 .ft P
 \}
 .PP
-2 つ目の表は、システムコールの引き数を渡すのに使用されるレジスタの一覧である。
+2 ã\81¤ç\9b®ã\81®è¡¨ã\81¯ã\80\81ã\82·ã\82¹ã\83\86ã\83 ã\82³ã\83¼ã\83«ã\81®å¼\95ã\81\8dæ\95°ã\82\92渡ã\81\99ã\81®ã\81«ä½¿ç\94¨ã\81\95ã\82\8cã\82\8bã\83¬ã\82¸ã\82¹ã\82¿ã\83¼ã\81®ä¸\80覧ã\81§ã\81\82ã\82\8bã\80\82
 .if  t \{\
 .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    備考
 _
 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      \-      \-      \-      下記参照
+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      \-
@@ -158,13 +170,15 @@ 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
+mips/o32 のシステムコールの規約では、 ユーザースタックに引き数を 5 個から 8 個渡す。
 .if  t \{\
 .in
 .ft P
 \}
 .PP
 これらの表にはすべての呼び出し規約が記載されているわけではない点に注意すること \(em
\82¢ã\83¼ã\82­ã\83\86ã\82¯ã\83\81ã\83£ã\81«ã\82\88ã\81£ã\81¦ã\81¯ã\80\81ã\81\93ã\81\93ã\81«è¨\98è¼\89ã\81\95ã\82\8cã\81¦ã\81\84ã\81ªã\81\84ä»\96ã\81®ã\83¬ã\82¸ã\82¹ã\82¿が見境なく上書きされる場合もある。
\82¢ã\83¼ã\82­ã\83\86ã\82¯ã\83\81ã\83£ã\83¼ã\81«ã\82\88ã\81£ã\81¦ã\81¯ã\80\81ã\81\93ã\81\93ã\81«è¨\98è¼\89ã\81\95ã\82\8cã\81¦ã\81\84ã\81ªã\81\84ä»\96ã\81®ã\83¬ã\82¸ã\82¹ã\82¿ã\83¼が見境なく上書きされる場合もある。
 .SH 例
 .nf
 #define _GNU_SOURCE
@@ -183,8 +197,8 @@ main(int argc, char *argv[])
 }
 .fi
 .SH 関連項目
-\fB_syscall\fP(2), \fBintro\fP(2), \fBsyscalls\fP(2)
+\fB_syscall\fP(2), \fBintro\fP(2), \fBsyscalls\fP(2), \fBerrno\fP(3), \fBvdso\fP(7)
 .SH この文書について
-この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.54 の一部
+この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.78 の一部
 である。プロジェクトの説明とバグ報告に関する情報は
 http://www.kernel.org/doc/man\-pages/ に書かれている。