From 0dfde1331b8db6cd6f087c45be4523752de1be85 Mon Sep 17 00:00:00 2001 From: Akihiro MOTOKI Date: Sun, 25 Jan 2015 01:02:43 +0900 Subject: [PATCH] Translate vdso.7 --- draft/man7/vdso.7 | 440 +++++++++++++++++++++++++++++++++++++++++++++++++++ po4a/stdlib/po/ja.po | 203 ++++++++++++------------ release/man7/vdso.7 | 440 +++++++++++++++++++++++++++++++++++++++++++++++++++ stats/stdlib | 2 +- translation_list | 2 +- untrans.html | 2 +- 6 files changed, 986 insertions(+), 103 deletions(-) create mode 100644 draft/man7/vdso.7 create mode 100644 release/man7/vdso.7 diff --git a/draft/man7/vdso.7 b/draft/man7/vdso.7 new file mode 100644 index 00000000..22f7e88c --- /dev/null +++ b/draft/man7/vdso.7 @@ -0,0 +1,440 @@ +.\" Written by Mike Frysinger +.\" +.\" %%%LICENSE_START(PUBLIC_DOMAIN) +.\" This page is in the public domain. +.\" %%%LICENSE_END +.\" +.\" Useful background: +.\" http://articles.manugarg.com/systemcallinlinux2_6.html +.\" https://lwn.net/Articles/446528/ +.\" http://www.linuxjournal.com/content/creating-vdso-colonels-other-chicken +.\" http://www.trilithium.com/johan/2005/08/linux-gate/ +.\" +.\"******************************************************************* +.\" +.\" This file was generated with po4a. Translate the source file. +.\" +.\"******************************************************************* +.TH VDSO 7 2014\-08\-19 Linux "Linux Programmer's Manual" +.SH 名前 +vDSO \- 仮想 ELF 動的共有オブジェクトの概要 +.SH 書式 +\fB#include \fP + +\fBvoid *vdso = (uintptr_t) getauxval(AT_SYSINFO_EHDR);\fP +.SH 説明 +"vDSO" (virtual dynamic shared object; 仮想動的共有オブジェクト) は、 +カーネルが自動的にすべてのユーザー空間アプリケーションのアドレス空間にマッピングを行う小さな共有ライブラリである。 vDSO はほとんどの場合 C +ライブラリから呼び出されるため、 アプリケーションは通常これらの詳細を自分では気にする必要はない。 このように、 標準関数と C +ライブラリを使って通常の方法でコードを作成することで、 vDSO 経由で利用可能な機能が活用されることになる。 + +いったいなぜ vDSO は存在しているのか? カーネルが提供するシステムコールのいくつかは、 +ユーザー空間のコードがこれらのシステムコールを頻繁に呼び出すことになり、 このような呼び出しが全体の性能を支配するようになる場合がある。 これは、 +呼び出しの頻度と、 ユーザー空間から抜けてカーネルに入ることによるコンテキストスイッチのオーバーヘッドの両方に起因する。 + +この文書の残りの部分は、 一般の開発者向けというではなく、 好奇心がある人と C ライブラリの開発者向けの内容となっている。 もしあなたが C +ライブラリではなく自分のアプリケーションで vDSO を呼びだそうとしているのであれば、 ほとんどの場合間違ったことをしていることだろう。 +.SS "Example background" +システムコールの呼び出しは遅くなる場合がある。 x86 32 ビットシステムでは、 +システムコールを呼び出したいことをカーネルに教えるためにソフトウェア割り込み (\fIint $0x80\fP) を使うことができる。 +しかしながら、この割り込みはコストがかかる処理である。 割り込みがあると、 +カーネルとプロセッサーのマイクロコードの両方のすべての割り込み処理パスが実行される。 新しいプロセッサーには、 +システムコール呼び出しを起動するための高速な (だが、後方互換性がある) 命令が用意されている。 C +ライブラリが実行時にこの機能が利用できるかを確認するのではなく、 C ライブラリは vDSO でカーネルが提供する関数を使うことができる。 + +用語が紛らわしい点には注意が必要である。 x86 システムでは、 システムコールを呼び出す推奨される方法を判定するのに使用される vDSO 関数は +"__kernel_vsyscall" という名前だが、 x86_64 では、 "vsyscall" という用語は、 +カーネルに時刻はいつかや呼び出し元はどの CPU 上にいるかを問い合わせるための廃止予定の方法も参照している。 + +頻繁に使用されるシステムコールの一つが \fBgettimeofday\fP(2) である。 このシステムコールは、 +ユーザー空間アプリケーションから直接呼び出されることも、 C ライブラリから間接的に呼び出されることもある。 タイムスタンプが必要な場面、 +タイミングループを行う場面、 ポーリングを行う場面を考えてほしい。 これらはいずれも現在時刻が何かを直ちに知りたいのが普通である。 +また、この情報は秘密ではなく、 (ルートでも非特権ユーザーでも) 任意の特権モードの多くのアプリケーションが同じ情報を取得できる。 したがって、 +カーネルはこの質問に応えるのに必要な情報をプロセスがアクセスできるメモリー上に配置する。 これにより、 \fBgettimeofday\fP(2) +はシステムコールから通常の関数コールになり、 少ないメモリーアクセスになる。 +.SS "vDSO を見つける" +vDSO のベースアドレスは、 (存在する場合には) カーネルから各プログラムに初期補助ベクトル (\fBgetauxval\fP(3) 参照) の +\fBAT_SYSINFO_EHDR\fP タグ経由で渡される。 + +vDSO がユーザーのメモリーマップの何か特定の場所にマッピングされると仮定してはならない。 通常新しいプロセスイメージが作成されるたびに +(\fBexecve\fP(2) 実行時点) 、 実行時にベースアドレスのランダム化が行われる。 これは "return\-to\-libc" 攻撃 +を防ぐためにセキュリティ上の理由から行われる。 + +アーキテクチャーによっては \fBAT_SYSINFO\fP タグもある。 このタグは vsyscall エントリーポイントの場所を知るためだけのものであり、 +しばしば省略されるか (利用できない場合は) 0 にセットされる。 このタグは最初の vDSO の実装で使用されていたものであり +(下記の「歴史」を参照)、 このタグを利用するのは避けるべきである。 +.SS ファイルフォーマット +vDSO は完全な形式の ELF イメージなので、 vDSO に対してシンボルの検索を行うことができる。 このため、 +新しいカーネルリリースで新しいシンボルを追加することができ、 C +ライブラリが別のバージョンのカーネル上で動作する際に実行時に利用可能な機能を検出することができる。 多くの場合、 C +ライブラリは最初の呼び出し時に検出を行い、 それ以降の呼び出しで利用できるようにその結果をキャッシュする。 + +すべてのシンボルは (GNU のバージョンフォーマットを使って) バージョンが付けられている。 これにより、 +カーネルは後方互換性を持たせつつ関数のシグネチャーを更新することができる。 つまり、 +関数が受け取る引き数や返り値が変更されることがあるということである。 したがって、 vDSO のシンボルを検索する際には、 自分が期待する ABI +に一致するバージョンをしなければならない。 + +通常は vDSO はすべてのシンボルに "__vdso_" か "__kernel_" +というプレフィックスを付けるという慣習に従った名前付けを行っており、 他の標準のシンボルから区別することができる。 例えば、 +"gettimeofday" 関数は ""__vdso_gettimeofday" という名前になっている。 + +これらの関数を呼び出す場合は標準の C の呼び出しの慣習にしたがっておけばよい。 特殊なレジスターやスタックの動作に気を使う必要はない。 +.SH 注意 +.SS ソース +カーネルをコンパイルする際に、 vDSO コードはコンパイルされリンクが行われる。 通常はアーキテクチャー固有のディレクトリに vDSO +コードが生成される。 + + find arch/$ARCH/ \-name '*vdso*.so*' \-o \-name '*gate*.so*' + +.SS "vDSO 名" +vDSO の名前はアーキテクチャーにより異なる。 この名前は glibc の \fBldd\fP(1) の出力などに現れる。 +名前はコードで必要となることはなく、 名前をハードコードしないこと。 +.if t \{\ +.ft CW +\} +.TS +l l. +ユーザー ABI vDSO 名 +_ +aarch64 linux\-vdso.so.1 +ia64 linux\-gate.so.1 +ppc/32 linux\-vdso32.so.1 +ppc/64 linux\-vdso64.so.1 +s390 linux\-vdso32.so.1 +s390x linux\-vdso64.so.1 +sh linux\-gate.so.1 +i386 linux\-gate.so.1 +x86_64 linux\-vdso.so.1 +x86/x32 linux\-vdso.so.1 +.TE +.if t \{\ +.in +.ft P +\} +.SH アーキテクチャー固有の注意 +以下のサブ章では vDSO のアーキテクチャー固有の注意について説明する。 + +使用される vDSO は、 カーネルの ABI ではなく、 ユーザー空間コードの ABI に基づくことに注意すること。 したがって、 例えば、 i386 +32 ビットの ELF ライブラリ上で実行する場合、 i386 32 ビットカーネル上で実行されているか x86_64 64 +ビットカーネル上で実行されているかに関わらず同じ vDSO が得られる。 したがって、 以下のどの節が関係するかを判断する際にはユーザー空間 ABI +の名前を使用する必要がある。 +.SS "ARM 関数" +.\" See linux/arch/arm/kernel/entry-armv.S +.\" See linux/Documentation/arm/kernel_user_helpers.txt +The ARM port has a code page full of utility functions. Since it's just a +raw page of code, there is no ELF information for doing symbol lookups or +versioning. It does provide support for different versions though. + +For information on this code page, it's best to refer to the kernel +documentation as it's extremely detailed and covers everything you need to +know: \fIDocumentation/arm/kernel_user_helpers.txt\fP. +.SS "aarch64 関数" +.\" See linux/arch/arm64/kernel/vdso/vdso.lds.S +以下のテーブルは vDSO で公開されるシンボルの一覧である。 +.if t \{\ +.ft CW +\} +.TS +l l. +シンボル バージョン +_ +__kernel_rt_sigreturn LINUX_2.6.39 +__kernel_gettimeofday LINUX_2.6.39 +__kernel_clock_gettime LINUX_2.6.39 +__kernel_clock_getres LINUX_2.6.39 +.TE +.if t \{\ +.in +.ft P +\} +.SS "bfin (Blackfin) 関数" +.\" See linux/arch/blackfin/kernel/fixed_code.S +.\" See http://docs.blackfin.uclinux.org/doku.php?id=linux-kernel:fixed-code +As this CPU lacks a memory management unit (MMU), it doesn't set up a vDSO +in the normal sense. Instead, it maps at boot time a few raw functions into +a fixed location in memory. User\-space applications then call directly into +that region. There is no provision for backward compatibility beyond +sniffing raw opcodes, but as this is an embedded CPU, it can get away with +things\(emsome of the object formats it runs aren't even ELF based (they're +bFLT/FLAT). + +For information on this code page, it's best to refer to the public +documentation: +.br +http://docs.blackfin.uclinux.org/doku.php?id=linux\-kernel:fixed\-code +.SS "ia64 (Itanium) 関数" +.\" See linux/arch/ia64/kernel/gate.lds.S +.\" Also linux/arch/ia64/kernel/fsys.S and linux/Documentation/ia64/fsys.txt +以下のテーブルは vDSO で公開されるシンボルの一覧である。 +.if t \{\ +.ft CW +\} +.TS +l l. +シンボル バージョン +_ +__kernel_sigtramp LINUX_2.5 +__kernel_syscall_via_break LINUX_2.5 +__kernel_syscall_via_epc LINUX_2.5 +.TE +.if t \{\ +.in +.ft P +\} + +The Itanium port is somewhat tricky. In addition to the vDSO above, it also +has "light\-weight system calls" (also known as "fast syscalls" or "fsys"). +You can invoke these via the \fI__kernel_syscall_via_epc\fP vDSO helper. The +system calls listed here have the same semantics as if you called them +directly via \fBsyscall\fP(2), so refer to the relevant documentation for +each. The table below lists the functions available via this mechanism. +.if t \{\ +.ft CW +\} +.TS +l. +関数 +_ +clock_gettime +getcpu +getpid +getppid +gettimeofday +set_tid_address +.TE +.if t \{\ +.in +.ft P +\} +.SS "parisc (hppa) 関数" +.\" See linux/arch/parisc/kernel/syscall.S +.\" See linux/Documentation/parisc/registers +The parisc port has a code page full of utility functions called a gateway +page. Rather than use the normal ELF auxiliary vector approach, it passes +the address of the page to the process via the SR2 register. The +permissions on the page are such that merely executing those addresses +automatically executes with kernel privileges and not in user space. This +is done to match the way HP\-UX works. + +Since it's just a raw page of code, there is no ELF information for doing +symbol lookups or versioning. Simply call into the appropriate offset via +the branch instruction, for example: + + ble (%sr2, %r0) +.if t \{\ +.ft CW +\} +.TS +l l. +オフセット 関数 +_ +00b0 lws_entry +00e0 set_thread_pointer +0100 linux_gateway_entry (syscall) +0268 syscall_nosys +0274 tracesys +0324 tracesys_next +0368 tracesys_exit +03a0 tracesys_sigexit +03b8 lws_start +03dc lws_exit_nosys +03e0 lws_exit +03e4 lws_compare_and_swap64 +03e8 lws_compare_and_swap +0404 cas_wouldblock +0410 cas_action +.TE +.if t \{\ +.in +.ft P +\} +.SS "ppc/32 関数" +.\" See linux/arch/powerpc/kernel/vdso32/vdso32.lds.S +以下のテーブルは vDSO で公開されるシンボルの一覧である。 \fI*\fP のマークが付いた関数は、カーネルが PowerPC64 (64 ビット) +カーネルの場合にだけ利用可能である。 +.if t \{\ +.ft CW +\} +.TS +l l. +シンボル バージョン +_ +__kernel_clock_getres LINUX_2.6.15 +__kernel_clock_gettime LINUX_2.6.15 +__kernel_datapage_offset LINUX_2.6.15 +__kernel_get_syscall_map LINUX_2.6.15 +__kernel_get_tbfreq LINUX_2.6.15 +__kernel_getcpu \fI*\fP LINUX_2.6.15 +__kernel_gettimeofday LINUX_2.6.15 +__kernel_sigtramp_rt32 LINUX_2.6.15 +__kernel_sigtramp32 LINUX_2.6.15 +__kernel_sync_dicache LINUX_2.6.15 +__kernel_sync_dicache_p5 LINUX_2.6.15 +.TE +.if t \{\ +.in +.ft P +\} +.SS "ppc/64 関数" +.\" See linux/arch/powerpc/kernel/vdso64/vdso64.lds.S +以下のテーブルは vDSO で公開されるシンボルの一覧である。 +.if t \{\ +.ft CW +\} +.TS +l l. +シンボル バージョン +_ +__kernel_clock_getres LINUX_2.6.15 +__kernel_clock_gettime LINUX_2.6.15 +__kernel_datapage_offset LINUX_2.6.15 +__kernel_get_syscall_map LINUX_2.6.15 +__kernel_get_tbfreq LINUX_2.6.15 +__kernel_getcpu LINUX_2.6.15 +__kernel_gettimeofday LINUX_2.6.15 +__kernel_sigtramp_rt64 LINUX_2.6.15 +__kernel_sync_dicache LINUX_2.6.15 +__kernel_sync_dicache_p5 LINUX_2.6.15 +.TE +.if t \{\ +.in +.ft P +\} +.SS "s390 関数" +.\" See linux/arch/s390/kernel/vdso32/vdso32.lds.S +以下のテーブルは vDSO で公開されるシンボルの一覧である。 +.if t \{\ +.ft CW +\} +.TS +l l. +シンボル バージョン +_ +__kernel_clock_getres LINUX_2.6.29 +__kernel_clock_gettime LINUX_2.6.29 +__kernel_gettimeofday LINUX_2.6.29 +.TE +.if t \{\ +.in +.ft P +\} +.SS "s390x 関数" +.\" See linux/arch/s390/kernel/vdso64/vdso64.lds.S +以下のテーブルは vDSO で公開されるシンボルの一覧である。 +.if t \{\ +.ft CW +\} +.TS +l l. +シンボル バージョン +_ +__kernel_clock_getres LINUX_2.6.29 +__kernel_clock_gettime LINUX_2.6.29 +__kernel_gettimeofday LINUX_2.6.29 +.TE +.if t \{\ +.in +.ft P +\} +.SS "sh (SuperH) 関数" +.\" See linux/arch/sh/kernel/vsyscall/vsyscall.lds.S +以下のテーブルは vDSO で公開されるシンボルの一覧である。 +.if t \{\ +.ft CW +\} +.TS +l l. +シンボル バージョン +_ +__kernel_rt_sigreturn LINUX_2.6 +__kernel_sigreturn LINUX_2.6 +__kernel_vsyscall LINUX_2.6 +.TE +.if t \{\ +.in +.ft P +\} +.SS "i386 関数" +.\" See linux/arch/x86/vdso/vdso32/vdso32.lds.S +以下のテーブルは vDSO で公開されるシンボルの一覧である。 +.if t \{\ +.ft CW +\} +.TS +l l. +シンボル バージョン +_ +__kernel_sigreturn LINUX_2.5 +__kernel_rt_sigreturn LINUX_2.5 +__kernel_vsyscall LINUX_2.5 +.\" Added in 7a59ed415f5b57469e22e41fc4188d5399e0b194 and updated +.\" in 37c975545ec63320789962bf307f000f08fabd48. +__vdso_clock_gettime LINUX_2.6 (Linux 3.15 以降で公開) +__vdso_gettimeofday LINUX_2.6 (Linux 3.15 以降で公開) +__vdso_time LINUX_2.6 (Linux 3.15 以降で公開) +.TE +.if t \{\ +.in +.ft P +\} +.SS "x86_64 関数" +.\" See linux/arch/x86/vdso/vdso.lds.S +以下のテーブルは vDSO で公開されるシンボルの一覧である。 これらのシンボルはすべて "__vdso_" のプレフィックスなしでも利用できるが、 +これらは無視し、 以下の名前だけを使うこと。 +.if t \{\ +.ft CW +\} +.TS +l l. +シンボル バージョン +_ +__vdso_clock_gettime LINUX_2.6 +__vdso_getcpu LINUX_2.6 +__vdso_gettimeofday LINUX_2.6 +__vdso_time LINUX_2.6 +.TE +.if t \{\ +.in +.ft P +\} +.SS "x86/x32 関数" +.\" See linux/arch/x86/vdso/vdso32.lds.S +以下のテーブルは vDSO で公開されるシンボルの一覧である。 +.if t \{\ +.ft CW +\} +.TS +l l. +シンボル バージョン +_ +__vdso_clock_gettime LINUX_2.6 +__vdso_getcpu LINUX_2.6 +__vdso_gettimeofday LINUX_2.6 +__vdso_time LINUX_2.6 +.TE +.if t \{\ +.in +.ft P +\} +.SS 歴史 +vDSO は元々は一つの関数 vsyscall であった。 古いカーネルでは、 プロセスのメモリーマップに "vdso" +ではなくこの名前が見えるかもしれない。 時間が経つに連れて、 この仕組みはより多くの機能をユーザー空間に渡す有効な方法であると認識されるようになり、 +現在の形の vDSO という形に見直しが行われた。 +.SH 関連項目 +\fBsyscalls\fP(2), \fBgetauxval\fP(3), \fBproc\fP(5) + +Linux のソースコードツリーのドキュメント、例、ソースコード: +.in +4n +.nf + +Documentation/ABI/stable/vdso +Documentation/ia64/fsys.txt +Documentation/vDSO/* (vDSO の使用例がある) + +find arch/ \-iname '*vdso*' \-o \-iname '*gate*' +.fi +.in +.SH この文書について +この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.78 の一部 +である。プロジェクトの説明とバグ報告に関する情報は +http://www.kernel.org/doc/man\-pages/ に書かれている。 diff --git a/po4a/stdlib/po/ja.po b/po4a/stdlib/po/ja.po index 03d6d6f0..d0ca6d3d 100644 --- a/po4a/stdlib/po/ja.po +++ b/po4a/stdlib/po/ja.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "POT-Creation-Date: 2015-01-23 22:23+0900\n" -"PO-Revision-Date: 2015-01-24 20:57+0900\n" +"PO-Revision-Date: 2015-01-25 00:20+0900\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "Language: \n" @@ -7382,7 +7382,7 @@ msgstr "VDSO" #. type: Plain text #: build/C/man7/vdso.7:16 msgid "vDSO - overview of the virtual ELF dynamic shared object" -msgstr "" +msgstr "vDSO - 仮想 ELF 動的共有オブジェクトの概要" #. type: Plain text #: build/C/man7/vdso.7:18 @@ -7404,7 +7404,7 @@ msgid "" "way you can code in the normal way using standard functions and the C " "library will take care of using any functionality that is available via the " "vDSO." -msgstr "" +msgstr "\"vDSO\" (virtual dynamic shared object; 仮想動的共有オブジェクト) は、 カーネルが自動的にすべてのユーザー空間アプリケーションのアドレス空間にマッピングを行う小さな共有ライブラリである。 vDSO はほとんどの場合 C ライブラリから呼び出されるため、 アプリケーションは通常これらの詳細を自分では気にする必要はない。 このように、 標準関数と C ライブラリを使って通常の方法でコードを作成することで、 vDSO 経由で利用可能な機能が活用されることになる。" #. type: Plain text #: build/C/man7/vdso.7:37 @@ -7414,7 +7414,7 @@ msgid "" "such calls can dominate overall performance. This is due both to the " "frequency of the call as well as the context-switch overhead that results " "from exiting user space and entering the kernel." -msgstr "" +msgstr "いったいなぜ vDSO は存在しているのか? カーネルが提供するシステムコールのいくつかは、 ユーザー空間のコードがこれらのシステムコールを頻繁に呼び出すことになり、 このような呼び出しが全体の性能を支配するようになる場合がある。 これは、 呼び出しの頻度と、 ユーザー空間から抜けてカーネルに入ることによるコンテキストスイッチのオーバーヘッドの両方に起因する。" #. type: Plain text #: build/C/man7/vdso.7:42 @@ -7423,7 +7423,7 @@ msgid "" "writers rather than general developers. If you're trying to call the vDSO " "in your own application rather than using the C library, you're most likely " "doing it wrong." -msgstr "" +msgstr "この文書の残りの部分は、 一般の開発者向けというではなく、 好奇心がある人と C ライブラリの開発者向けの内容となっている。 もしあなたが C ライブラリではなく自分のアプリケーションで vDSO を呼びだそうとしているのであれば、 ほとんどの場合間違ったことをしていることだろう。" #. type: SS #: build/C/man7/vdso.7:42 @@ -7442,7 +7442,7 @@ msgid "" "instructions to initiate system calls. Rather than require the C library to " "figure out if this functionality is available at run time, the C library can " "use functions provided by the kernel in the vDSO." -msgstr "" +msgstr "システムコールの呼び出しは遅くなる場合がある。 x86 32 ビットシステムでは、 システムコールを呼び出したいことをカーネルに教えるためにソフトウェア割り込み (I) を使うことができる。 しかしながら、この割り込みはコストがかかる処理である。 割り込みがあると、 カーネルとプロセッサーのマイクロコードの両方のすべての割り込み処理パスが実行される。 新しいプロセッサーには、 システムコール呼び出しを起動するための高速な (だが、後方互換性がある) 命令が用意されている。 C ライブラリが実行時にこの機能が利用できるかを確認するのではなく、 C ライブラリは vDSO でカーネルが提供する関数を使うことができる。" #. type: Plain text #: build/C/man7/vdso.7:63 @@ -7452,7 +7452,7 @@ msgid "" "named \"__kernel_vsyscall\", but on x86_64, the term \"vsyscall\" also " "refers to an obsolete way to ask the kernel what time it is or what CPU the " "caller is on." -msgstr "" +msgstr "用語が紛らわしい点には注意が必要である。 x86 システムでは、 システムコールを呼び出す推奨される方法を判定するのに使用される vDSO 関数は \"__kernel_vsyscall\" という名前だが、 x86_64 では、 \"vsyscall\" という用語は、 カーネルに時刻はいつかや呼び出し元はどの CPU 上にいるかを問い合わせるための廃止予定の方法も参照している。" #. type: Plain text #: build/C/man7/vdso.7:79 @@ -7466,13 +7466,13 @@ msgid "" "the information required to answer this question to be placed in memory the " "process can access. Now a call to B(2) changes from a system " "call to a normal function call and a few memory accesses." -msgstr "" +msgstr "頻繁に使用されるシステムコールの一つが B(2) である。 このシステムコールは、 ユーザー空間アプリケーションから直接呼び出されることも、 C ライブラリから間接的に呼び出されることもある。 タイムスタンプが必要な場面、 タイミングループを行う場面、 ポーリングを行う場面を考えてほしい。 これらはいずれも現在時刻が何かを直ちに知りたいのが普通である。 また、この情報は秘密ではなく、 (ルートでも非特権ユーザーでも) 任意の特権モードの多くのアプリケーションが同じ情報を取得できる。 したがって、 カーネルはこの質問に応えるのに必要な情報をプロセスがアクセスできるメモリー上に配置する。 これにより、 B(2) はシステムコールから通常の関数コールになり、 少ないメモリーアクセスになる。" #. type: SS #: build/C/man7/vdso.7:79 #, no-wrap msgid "Finding the vDSO" -msgstr "" +msgstr "vDSO を見つける" #. type: Plain text #: build/C/man7/vdso.7:86 @@ -7480,7 +7480,7 @@ msgid "" "The base address of the vDSO (if one exists) is passed by the kernel to each " "program in the initial auxiliary vector (see B(3)), via the " "B tag." -msgstr "" +msgstr "vDSO のベースアドレスは、 (存在する場合には) カーネルから各プログラムに初期補助ベクトル (B(3) 参照) の B タグ経由で渡される。" #. type: Plain text #: build/C/man7/vdso.7:95 @@ -7489,7 +7489,7 @@ msgid "" "user's memory map. The base address will usually be randomized at run time " "every time a new process image is created (at B(2) time). This is " "done for security reasons, to prevent \"return-to-libc\" attacks." -msgstr "" +msgstr "vDSO がユーザーのメモリーマップの何か特定の場所にマッピングされると仮定してはならない。 通常新しいプロセスイメージが作成されるたびに (B(2) 実行時点) 、 実行時にベースアドレスのランダム化が行われる。 これは \"return-to-libc\" 攻撃 を防ぐためにセキュリティ上の理由から行われる。" #. type: Plain text #: build/C/man7/vdso.7:104 @@ -7498,13 +7498,13 @@ msgid "" "only for locating the vsyscall entry point and is frequently omitted or set " "to 0 (meaning it's not available). This tag is a throwback to the initial " "vDSO work (see I below) and its use should be avoided." -msgstr "" +msgstr "アーキテクチャーによっては B タグもある。 このタグは vsyscall エントリーポイントの場所を知るためだけのものであり、 しばしば省略されるか (利用できない場合は) 0 にセットされる。 このタグは最初の vDSO の実装で使用されていたものであり (下記の「歴史」を参照)、 このタグを利用するのは避けるべきである。" #. type: SS #: build/C/man7/vdso.7:104 #, no-wrap msgid "File format" -msgstr "" +msgstr "ファイルフォーマット" #. type: Plain text #: build/C/man7/vdso.7:111 @@ -7514,7 +7514,7 @@ msgid "" "allows the C library to detect available functionality at run time when " "running under different kernel versions. Oftentimes the C library will do " "detection with the first call and then cache the result for subsequent calls." -msgstr "" +msgstr "vDSO は完全な形式の ELF イメージなので、 vDSO に対してシンボルの検索を行うことができる。 このため、 新しいカーネルリリースで新しいシンボルを追加することができ、 C ライブラリが別のバージョンのカーネル上で動作する際に実行時に利用可能な機能を検出することができる。 多くの場合、 C ライブラリは最初の呼び出し時に検出を行い、 それ以降の呼び出しで利用できるようにその結果をキャッシュする。" #. type: Plain text #: build/C/man7/vdso.7:120 @@ -7524,7 +7524,7 @@ msgid "" "compatibility. This means changing the arguments that the function accepts " "as well as the return value. Thus, when looking up a symbol in the vDSO, " "you must always include the version to match the ABI you expect." -msgstr "" +msgstr "すべてのシンボルは (GNU のバージョンフォーマットを使って) バージョンが付けられている。 これにより、 カーネルは後方互換性を持たせつつ関数のシグネチャーを更新することができる。 つまり、 関数が受け取る引き数や返り値が変更されることがあるということである。 したがって、 vDSO のシンボルを検索する際には、 自分が期待する ABI に一致するバージョンをしなければならない。" #. type: Plain text #: build/C/man7/vdso.7:125 @@ -7533,20 +7533,20 @@ msgid "" "with \"__vdso_\" or \"__kernel_\" so as to distinguish them from other " "standard symbols. For example, the \"gettimeofday\" function is named " "\"__vdso_gettimeofday\"." -msgstr "" +msgstr "通常は vDSO はすべてのシンボルに \"__vdso_\" か \"__kernel_\" というプレフィックスを付けるという慣習に従った名前付けを行っており、 他の標準のシンボルから区別することができる。 例えば、 \"gettimeofday\" 関数は \"\"__vdso_gettimeofday\" という名前になっている。" #. type: Plain text #: build/C/man7/vdso.7:129 msgid "" "You use the standard C calling conventions when calling any of these " "functions. No need to worry about weird register or stack behavior." -msgstr "" +msgstr "これらの関数を呼び出す場合は標準の C の呼び出しの慣習にしたがっておけばよい。 特殊なレジスターやスタックの動作に気を使う必要はない。" #. type: SS #: build/C/man7/vdso.7:130 #, no-wrap msgid "Source" -msgstr "" +msgstr "ソース" #. type: Plain text #: build/C/man7/vdso.7:134 @@ -7554,19 +7554,19 @@ msgid "" "When you compile the kernel, it will automatically compile and link the vDSO " "code for you. You will frequently find it under the architecture-specific " "directory:" -msgstr "" +msgstr "カーネルをコンパイルする際に、 vDSO コードはコンパイルされリンクが行われる。 通常はアーキテクチャー固有のディレクトリに vDSO コードが生成される。" #. type: Plain text #: build/C/man7/vdso.7:136 #, no-wrap msgid " find arch/$ARCH/ -name '*vdso*.so*' -o -name '*gate*.so*'\n" -msgstr "" +msgstr " find arch/$ARCH/ -name '*vdso*.so*' -o -name '*gate*.so*'\n" #. type: SS #: build/C/man7/vdso.7:137 #, no-wrap msgid "vDSO names" -msgstr "" +msgstr "vDSO 名" #. type: Plain text #: build/C/man7/vdso.7:143 @@ -7574,13 +7574,13 @@ msgid "" "The name of the vDSO varies across architectures. It will often show up in " "things like glibc's B(1) output. The exact name should not matter to " "any code, so do not hardcode it." -msgstr "" +msgstr "vDSO の名前はアーキテクチャーにより異なる。 この名前は glibc の B(1) の出力などに現れる。 名前はコードで必要となることはなく、 名前をハードコードしないこと。" #. type: tbl table #: build/C/man7/vdso.7:148 #, no-wrap msgid "user ABI\tvDSO name\n" -msgstr "" +msgstr "ユーザー ABI\tvDSO 名\n" #. type: tbl table #: build/C/man7/vdso.7:149 build/C/man7/vdso.7:198 build/C/man7/vdso.7:235 @@ -7656,12 +7656,12 @@ msgstr "x86/x32\tlinux-vdso.so.1\n" #: build/C/man7/vdso.7:165 #, no-wrap msgid "ARCHITECTURE-SPECIFIC NOTES" -msgstr "" +msgstr "アーキテクチャー固有の注意" #. type: Plain text #: build/C/man7/vdso.7:168 msgid "The subsections below provide architecture-specific notes on the vDSO." -msgstr "" +msgstr "以下のサブ章では vDSO のアーキテクチャー固有の注意について説明する。" #. type: Plain text #: build/C/man7/vdso.7:177 @@ -7672,13 +7672,13 @@ msgid "" "under an i386 32-bit kernel or under an x86_64 64-bit kernel. Therefore, " "the name of the user-space ABI should be used to determine which of the " "sections below is relevant." -msgstr "" +msgstr "使用される vDSO は、 カーネルの ABI ではなく、 ユーザー空間コードの ABI に基づくことに注意すること。 したがって、 例えば、 i386 32 ビットの ELF ライブラリ上で実行する場合、 i386 32 ビットカーネル上で実行されているか x86_64 64 ビットカーネル上で実行されているかに関わらず同じ vDSO が得られる。 したがって、 以下のどの節が関係するかを判断する際にはユーザー空間 ABI の名前を使用する必要がある。" #. type: SS #: build/C/man7/vdso.7:177 #, no-wrap msgid "ARM functions" -msgstr "" +msgstr "ARM 関数" #. See linux/arch/arm/kernel/entry-armv.S #. See linux/Documentation/arm/kernel_user_helpers.txt @@ -7702,7 +7702,7 @@ msgstr "" #: build/C/man7/vdso.7:189 #, no-wrap msgid "aarch64 functions" -msgstr "" +msgstr "aarch64 関数" #. See linux/arch/x86/vdso/vdso32.lds.S #. type: Plain text @@ -7710,7 +7710,7 @@ msgstr "" #: build/C/man7/vdso.7:378 build/C/man7/vdso.7:396 build/C/man7/vdso.7:414 #: build/C/man7/vdso.7:432 build/C/man7/vdso.7:476 msgid "The table below lists the symbols exported by the vDSO." -msgstr "" +msgstr "以下のテーブルは vDSO で公開されるシンボルの一覧である。" #. type: tbl table #: build/C/man7/vdso.7:197 build/C/man7/vdso.7:234 build/C/man7/vdso.7:332 @@ -7719,7 +7719,7 @@ msgstr "" #: build/C/man7/vdso.7:481 #, no-wrap msgid "symbol\tversion\n" -msgstr "" +msgstr "シンボル\tバージョン\n" #. type: tbl table #: build/C/man7/vdso.7:199 @@ -7749,7 +7749,7 @@ msgstr "__kernel_clock_getres\tLINUX_2.6.39\n" #: build/C/man7/vdso.7:208 #, no-wrap msgid "bfin (Blackfin) functions" -msgstr "" +msgstr "bfin (Blackfin) 関数" #. See linux/arch/blackfin/kernel/fixed_code.S #. See http://docs.blackfin.uclinux.org/doku.php?id=linux-kernel:fixed-code @@ -7775,13 +7775,13 @@ msgstr "" #. type: Plain text #: build/C/man7/vdso.7:225 msgid "http://docs.blackfin.uclinux.org/doku.php?id=linux-kernel:fixed-code" -msgstr "" +msgstr "http://docs.blackfin.uclinux.org/doku.php?id=linux-kernel:fixed-code" #. type: SS #: build/C/man7/vdso.7:225 #, no-wrap msgid "ia64 (Itanium) functions" -msgstr "" +msgstr "ia64 (Itanium) 関数" #. type: tbl table #: build/C/man7/vdso.7:236 @@ -7816,49 +7816,49 @@ msgstr "" #: build/C/man7/vdso.7:262 #, no-wrap msgid "function\n" -msgstr "" +msgstr "関数\n" #. type: tbl table #: build/C/man7/vdso.7:264 #, no-wrap msgid "clock_gettime\n" -msgstr "" +msgstr "clock_gettime\n" #. type: tbl table #: build/C/man7/vdso.7:265 #, no-wrap msgid "getcpu\n" -msgstr "" +msgstr "getcpu\n" #. type: tbl table #: build/C/man7/vdso.7:266 #, no-wrap msgid "getpid\n" -msgstr "" +msgstr "getpid\n" #. type: tbl table #: build/C/man7/vdso.7:267 #, no-wrap msgid "getppid\n" -msgstr "" +msgstr "getppid\n" #. type: tbl table #: build/C/man7/vdso.7:268 #, no-wrap msgid "gettimeofday\n" -msgstr "" +msgstr "gettimeofday\n" #. type: tbl table #: build/C/man7/vdso.7:269 #, no-wrap msgid "set_tid_address\n" -msgstr "" +msgstr "set_tid_address\n" #. type: SS #: build/C/man7/vdso.7:275 #, no-wrap msgid "parisc (hppa) functions" -msgstr "" +msgstr "parisc (hppa) 関数" #. See linux/arch/parisc/kernel/syscall.S #. See linux/Documentation/parisc/registers @@ -7885,109 +7885,109 @@ msgstr "" #: build/C/man7/vdso.7:293 #, no-wrap msgid " ble EoffsetE(%sr2, %r0)\n" -msgstr "" +msgstr " ble EoffsetE(%sr2, %r0)\n" #. type: tbl table #: build/C/man7/vdso.7:298 #, no-wrap msgid "offset\tfunction\n" -msgstr "" +msgstr "オフセット\t関数\n" #. type: tbl table #: build/C/man7/vdso.7:300 #, no-wrap msgid "00b0\tlws_entry\n" -msgstr "" +msgstr "00b0\tlws_entry\n" #. type: tbl table #: build/C/man7/vdso.7:301 #, no-wrap msgid "00e0\tset_thread_pointer\n" -msgstr "" +msgstr "00e0\tset_thread_pointer\n" #. type: tbl table #: build/C/man7/vdso.7:302 #, no-wrap msgid "0100\tlinux_gateway_entry (syscall)\n" -msgstr "" +msgstr "0100\tlinux_gateway_entry (syscall)\n" #. type: tbl table #: build/C/man7/vdso.7:303 #, no-wrap msgid "0268\tsyscall_nosys\n" -msgstr "" +msgstr "0268\tsyscall_nosys\n" #. type: tbl table #: build/C/man7/vdso.7:304 #, no-wrap msgid "0274\ttracesys\n" -msgstr "" +msgstr "0274\ttracesys\n" #. type: tbl table #: build/C/man7/vdso.7:305 #, no-wrap msgid "0324\ttracesys_next\n" -msgstr "" +msgstr "0324\ttracesys_next\n" #. type: tbl table #: build/C/man7/vdso.7:306 #, no-wrap msgid "0368\ttracesys_exit\n" -msgstr "" +msgstr "0368\ttracesys_exit\n" #. type: tbl table #: build/C/man7/vdso.7:307 #, no-wrap msgid "03a0\ttracesys_sigexit\n" -msgstr "" +msgstr "03a0\ttracesys_sigexit\n" #. type: tbl table #: build/C/man7/vdso.7:308 #, no-wrap msgid "03b8\tlws_start\n" -msgstr "" +msgstr "03b8\tlws_start\n" #. type: tbl table #: build/C/man7/vdso.7:309 #, no-wrap msgid "03dc\tlws_exit_nosys\n" -msgstr "" +msgstr "03dc\tlws_exit_nosys\n" #. type: tbl table #: build/C/man7/vdso.7:310 #, no-wrap msgid "03e0\tlws_exit\n" -msgstr "" +msgstr "03e0\tlws_exit\n" #. type: tbl table #: build/C/man7/vdso.7:311 #, no-wrap msgid "03e4\tlws_compare_and_swap64\n" -msgstr "" +msgstr "03e4\tlws_compare_and_swap64\n" #. type: tbl table #: build/C/man7/vdso.7:312 #, no-wrap msgid "03e8\tlws_compare_and_swap\n" -msgstr "" +msgstr "03e8\tlws_compare_and_swap\n" #. type: tbl table #: build/C/man7/vdso.7:313 #, no-wrap msgid "0404\tcas_wouldblock\n" -msgstr "" +msgstr "0404\tcas_wouldblock\n" #. type: tbl table #: build/C/man7/vdso.7:314 #, no-wrap msgid "0410\tcas_action\n" -msgstr "" +msgstr "0410\tcas_action\n" #. type: SS #: build/C/man7/vdso.7:320 #, no-wrap msgid "ppc/32 functions" -msgstr "" +msgstr "ppc/32 関数" #. See linux/arch/powerpc/kernel/vdso32/vdso32.lds.S #. type: Plain text @@ -7996,169 +7996,169 @@ msgid "" "The table below lists the symbols exported by the vDSO. The functions " "marked with a I<*> are available only when the kernel is a PowerPC64 (64-" "bit) kernel." -msgstr "" +msgstr "以下のテーブルは vDSO で公開されるシンボルの一覧である。 I<*> のマークが付いた関数は、カーネルが PowerPC64 (64 ビット) カーネルの場合にだけ利用可能である。" #. type: tbl table #: build/C/man7/vdso.7:334 build/C/man7/vdso.7:360 #, no-wrap msgid "__kernel_clock_getres\tLINUX_2.6.15\n" -msgstr "" +msgstr "__kernel_clock_getres\tLINUX_2.6.15\n" #. type: tbl table #: build/C/man7/vdso.7:335 build/C/man7/vdso.7:361 #, no-wrap msgid "__kernel_clock_gettime\tLINUX_2.6.15\n" -msgstr "" +msgstr "__kernel_clock_gettime\tLINUX_2.6.15\n" #. type: tbl table #: build/C/man7/vdso.7:336 build/C/man7/vdso.7:362 #, no-wrap msgid "__kernel_datapage_offset\tLINUX_2.6.15\n" -msgstr "" +msgstr "__kernel_datapage_offset\tLINUX_2.6.15\n" #. type: tbl table #: build/C/man7/vdso.7:337 build/C/man7/vdso.7:363 #, no-wrap msgid "__kernel_get_syscall_map\tLINUX_2.6.15\n" -msgstr "" +msgstr "__kernel_get_syscall_map\tLINUX_2.6.15\n" #. type: tbl table #: build/C/man7/vdso.7:338 build/C/man7/vdso.7:364 #, no-wrap msgid "__kernel_get_tbfreq\tLINUX_2.6.15\n" -msgstr "" +msgstr "__kernel_get_tbfreq\tLINUX_2.6.15\n" #. type: tbl table #: build/C/man7/vdso.7:339 #, no-wrap msgid "__kernel_getcpu I<*>\tLINUX_2.6.15\n" -msgstr "" +msgstr "__kernel_getcpu I<*>\tLINUX_2.6.15\n" #. type: tbl table #: build/C/man7/vdso.7:340 build/C/man7/vdso.7:366 #, no-wrap msgid "__kernel_gettimeofday\tLINUX_2.6.15\n" -msgstr "" +msgstr "__kernel_gettimeofday\tLINUX_2.6.15\n" #. type: tbl table #: build/C/man7/vdso.7:341 #, no-wrap msgid "__kernel_sigtramp_rt32\tLINUX_2.6.15\n" -msgstr "" +msgstr "__kernel_sigtramp_rt32\tLINUX_2.6.15\n" #. type: tbl table #: build/C/man7/vdso.7:342 #, no-wrap msgid "__kernel_sigtramp32\tLINUX_2.6.15\n" -msgstr "" +msgstr "__kernel_sigtramp32\tLINUX_2.6.15\n" #. type: tbl table #: build/C/man7/vdso.7:343 build/C/man7/vdso.7:368 #, no-wrap msgid "__kernel_sync_dicache\tLINUX_2.6.15\n" -msgstr "" +msgstr "__kernel_sync_dicache\tLINUX_2.6.15\n" #. type: tbl table #: build/C/man7/vdso.7:344 build/C/man7/vdso.7:369 #, no-wrap msgid "__kernel_sync_dicache_p5\tLINUX_2.6.15\n" -msgstr "" +msgstr "__kernel_sync_dicache_p5\tLINUX_2.6.15\n" #. type: SS #: build/C/man7/vdso.7:350 #, no-wrap msgid "ppc/64 functions" -msgstr "" +msgstr "ppc/64 関数" #. type: tbl table #: build/C/man7/vdso.7:365 #, no-wrap msgid "__kernel_getcpu\tLINUX_2.6.15\n" -msgstr "" +msgstr "__kernel_getcpu\tLINUX_2.6.15\n" #. type: tbl table #: build/C/man7/vdso.7:367 #, no-wrap msgid "__kernel_sigtramp_rt64\tLINUX_2.6.15\n" -msgstr "" +msgstr "__kernel_sigtramp_rt64\tLINUX_2.6.15\n" #. type: SS #: build/C/man7/vdso.7:375 #, no-wrap msgid "s390 functions" -msgstr "" +msgstr "s390 関数" #. type: tbl table #: build/C/man7/vdso.7:385 build/C/man7/vdso.7:403 #, no-wrap msgid "__kernel_clock_getres\tLINUX_2.6.29\n" -msgstr "" +msgstr "__kernel_clock_getres\tLINUX_2.6.29\n" #. type: tbl table #: build/C/man7/vdso.7:386 build/C/man7/vdso.7:404 #, no-wrap msgid "__kernel_clock_gettime\tLINUX_2.6.29\n" -msgstr "" +msgstr "__kernel_clock_gettime\tLINUX_2.6.29\n" #. type: tbl table #: build/C/man7/vdso.7:387 build/C/man7/vdso.7:405 #, no-wrap msgid "__kernel_gettimeofday\tLINUX_2.6.29\n" -msgstr "" +msgstr "__kernel_gettimeofday\tLINUX_2.6.29\n" #. type: SS #: build/C/man7/vdso.7:393 #, no-wrap msgid "s390x functions" -msgstr "" +msgstr "s390x 関数" #. type: SS #: build/C/man7/vdso.7:411 #, no-wrap msgid "sh (SuperH) functions" -msgstr "" +msgstr "sh (SuperH) 関数" #. type: tbl table #: build/C/man7/vdso.7:421 #, no-wrap msgid "__kernel_rt_sigreturn\tLINUX_2.6\n" -msgstr "" +msgstr "__kernel_rt_sigreturn\tLINUX_2.6\n" #. type: tbl table #: build/C/man7/vdso.7:422 #, no-wrap msgid "__kernel_sigreturn\tLINUX_2.6\n" -msgstr "" +msgstr "__kernel_sigreturn\tLINUX_2.6\n" #. type: tbl table #: build/C/man7/vdso.7:423 #, no-wrap msgid "__kernel_vsyscall\tLINUX_2.6\n" -msgstr "" +msgstr "__kernel_vsyscall\tLINUX_2.6\n" #. type: SS #: build/C/man7/vdso.7:429 #, no-wrap msgid "i386 functions" -msgstr "" +msgstr "i386 関数" #. type: tbl table #: build/C/man7/vdso.7:439 #, no-wrap msgid "__kernel_sigreturn\tLINUX_2.5\n" -msgstr "" +msgstr "__kernel_sigreturn\tLINUX_2.5\n" #. type: tbl table #: build/C/man7/vdso.7:440 #, no-wrap msgid "__kernel_rt_sigreturn\tLINUX_2.5\n" -msgstr "" +msgstr "__kernel_rt_sigreturn\tLINUX_2.5\n" #. type: tbl table #: build/C/man7/vdso.7:441 #, no-wrap msgid "__kernel_vsyscall\tLINUX_2.5\n" -msgstr "" +msgstr "__kernel_vsyscall\tLINUX_2.5\n" #. Added in 7a59ed415f5b57469e22e41fc4188d5399e0b194 and updated #. in 37c975545ec63320789962bf307f000f08fabd48. @@ -8166,25 +8166,25 @@ msgstr "" #: build/C/man7/vdso.7:444 #, no-wrap msgid "__vdso_clock_gettime\tLINUX_2.6 (exported since Linux 3.15)\n" -msgstr "" +msgstr "__vdso_clock_gettime\tLINUX_2.6 (Linux 3.15 以降で公開)\n" #. type: tbl table #: build/C/man7/vdso.7:445 #, no-wrap msgid "__vdso_gettimeofday\tLINUX_2.6 (exported since Linux 3.15)\n" -msgstr "" +msgstr "__vdso_gettimeofday\tLINUX_2.6 (Linux 3.15 以降で公開)\n" #. type: tbl table #: build/C/man7/vdso.7:446 #, no-wrap msgid "__vdso_time\tLINUX_2.6 (exported since Linux 3.15)\n" -msgstr "" +msgstr "__vdso_time\tLINUX_2.6 (Linux 3.15 以降で公開)\n" #. type: SS #: build/C/man7/vdso.7:452 #, no-wrap msgid "x86_64 functions" -msgstr "" +msgstr "x86_64 関数" #. See linux/arch/x86/vdso/vdso.lds.S #. type: Plain text @@ -8193,43 +8193,43 @@ msgid "" "The table below lists the symbols exported by the vDSO. All of these " "symbols are also available without the \"__vdso_\" prefix, but you should " "ignore those and stick to the names below." -msgstr "" +msgstr "以下のテーブルは vDSO で公開されるシンボルの一覧である。 これらのシンボルはすべて \"__vdso_\" のプレフィックスなしでも利用できるが、 これらは無視し、 以下の名前だけを使うこと。" #. type: tbl table #: build/C/man7/vdso.7:464 build/C/man7/vdso.7:483 #, no-wrap msgid "__vdso_clock_gettime\tLINUX_2.6\n" -msgstr "" +msgstr "__vdso_clock_gettime\tLINUX_2.6\n" #. type: tbl table #: build/C/man7/vdso.7:465 build/C/man7/vdso.7:484 #, no-wrap msgid "__vdso_getcpu\tLINUX_2.6\n" -msgstr "" +msgstr "__vdso_getcpu\tLINUX_2.6\n" #. type: tbl table #: build/C/man7/vdso.7:466 build/C/man7/vdso.7:485 #, no-wrap msgid "__vdso_gettimeofday\tLINUX_2.6\n" -msgstr "" +msgstr "__vdso_gettimeofday\tLINUX_2.6\n" #. type: tbl table #: build/C/man7/vdso.7:467 build/C/man7/vdso.7:486 #, no-wrap msgid "__vdso_time\tLINUX_2.6\n" -msgstr "" +msgstr "__vdso_time\tLINUX_2.6\n" #. type: SS #: build/C/man7/vdso.7:473 #, no-wrap msgid "x86/x32 functions" -msgstr "" +msgstr "x86/x32 関数" #. type: SS #: build/C/man7/vdso.7:492 #, no-wrap msgid "History" -msgstr "" +msgstr "歴史" #. type: Plain text #: build/C/man7/vdso.7:499 @@ -8239,7 +8239,7 @@ msgid "" "\". Over time, people realized that this mechanism was a great way to pass " "more functionality to user space, so it was reconceived as a vDSO in the " "current format." -msgstr "" +msgstr "vDSO は元々は一つの関数 vsyscall であった。 古いカーネルでは、 プロセスのメモリーマップに \"vdso\" ではなくこの名前が見えるかもしれない。 時間が経つに連れて、 この仕組みはより多くの機能をユーザー空間に渡す有効な方法であると認識されるようになり、 現在の形の vDSO という形に見直しが行われた。" #. type: Plain text #: build/C/man7/vdso.7:503 @@ -8249,7 +8249,7 @@ msgstr "B(2), B(3), B(5)" #. type: Plain text #: build/C/man7/vdso.7:505 msgid "The documents, examples, and source code in the Linux source code tree:" -msgstr "" +msgstr "Linux のソースコードツリーのドキュメント、例、ソースコード:" #. type: Plain text #: build/C/man7/vdso.7:511 @@ -8259,6 +8259,9 @@ msgid "" "Documentation/ia64/fsys.txt\n" "Documentation/vDSO/* (includes examples of using the vDSO)\n" msgstr "" +"Documentation/ABI/stable/vdso\n" +"Documentation/ia64/fsys.txt\n" +"Documentation/vDSO/* (vDSO の使用例がある)\n" #. type: Plain text #: build/C/man7/vdso.7:513 diff --git a/release/man7/vdso.7 b/release/man7/vdso.7 new file mode 100644 index 00000000..22f7e88c --- /dev/null +++ b/release/man7/vdso.7 @@ -0,0 +1,440 @@ +.\" Written by Mike Frysinger +.\" +.\" %%%LICENSE_START(PUBLIC_DOMAIN) +.\" This page is in the public domain. +.\" %%%LICENSE_END +.\" +.\" Useful background: +.\" http://articles.manugarg.com/systemcallinlinux2_6.html +.\" https://lwn.net/Articles/446528/ +.\" http://www.linuxjournal.com/content/creating-vdso-colonels-other-chicken +.\" http://www.trilithium.com/johan/2005/08/linux-gate/ +.\" +.\"******************************************************************* +.\" +.\" This file was generated with po4a. Translate the source file. +.\" +.\"******************************************************************* +.TH VDSO 7 2014\-08\-19 Linux "Linux Programmer's Manual" +.SH 名前 +vDSO \- 仮想 ELF 動的共有オブジェクトの概要 +.SH 書式 +\fB#include \fP + +\fBvoid *vdso = (uintptr_t) getauxval(AT_SYSINFO_EHDR);\fP +.SH 説明 +"vDSO" (virtual dynamic shared object; 仮想動的共有オブジェクト) は、 +カーネルが自動的にすべてのユーザー空間アプリケーションのアドレス空間にマッピングを行う小さな共有ライブラリである。 vDSO はほとんどの場合 C +ライブラリから呼び出されるため、 アプリケーションは通常これらの詳細を自分では気にする必要はない。 このように、 標準関数と C +ライブラリを使って通常の方法でコードを作成することで、 vDSO 経由で利用可能な機能が活用されることになる。 + +いったいなぜ vDSO は存在しているのか? カーネルが提供するシステムコールのいくつかは、 +ユーザー空間のコードがこれらのシステムコールを頻繁に呼び出すことになり、 このような呼び出しが全体の性能を支配するようになる場合がある。 これは、 +呼び出しの頻度と、 ユーザー空間から抜けてカーネルに入ることによるコンテキストスイッチのオーバーヘッドの両方に起因する。 + +この文書の残りの部分は、 一般の開発者向けというではなく、 好奇心がある人と C ライブラリの開発者向けの内容となっている。 もしあなたが C +ライブラリではなく自分のアプリケーションで vDSO を呼びだそうとしているのであれば、 ほとんどの場合間違ったことをしていることだろう。 +.SS "Example background" +システムコールの呼び出しは遅くなる場合がある。 x86 32 ビットシステムでは、 +システムコールを呼び出したいことをカーネルに教えるためにソフトウェア割り込み (\fIint $0x80\fP) を使うことができる。 +しかしながら、この割り込みはコストがかかる処理である。 割り込みがあると、 +カーネルとプロセッサーのマイクロコードの両方のすべての割り込み処理パスが実行される。 新しいプロセッサーには、 +システムコール呼び出しを起動するための高速な (だが、後方互換性がある) 命令が用意されている。 C +ライブラリが実行時にこの機能が利用できるかを確認するのではなく、 C ライブラリは vDSO でカーネルが提供する関数を使うことができる。 + +用語が紛らわしい点には注意が必要である。 x86 システムでは、 システムコールを呼び出す推奨される方法を判定するのに使用される vDSO 関数は +"__kernel_vsyscall" という名前だが、 x86_64 では、 "vsyscall" という用語は、 +カーネルに時刻はいつかや呼び出し元はどの CPU 上にいるかを問い合わせるための廃止予定の方法も参照している。 + +頻繁に使用されるシステムコールの一つが \fBgettimeofday\fP(2) である。 このシステムコールは、 +ユーザー空間アプリケーションから直接呼び出されることも、 C ライブラリから間接的に呼び出されることもある。 タイムスタンプが必要な場面、 +タイミングループを行う場面、 ポーリングを行う場面を考えてほしい。 これらはいずれも現在時刻が何かを直ちに知りたいのが普通である。 +また、この情報は秘密ではなく、 (ルートでも非特権ユーザーでも) 任意の特権モードの多くのアプリケーションが同じ情報を取得できる。 したがって、 +カーネルはこの質問に応えるのに必要な情報をプロセスがアクセスできるメモリー上に配置する。 これにより、 \fBgettimeofday\fP(2) +はシステムコールから通常の関数コールになり、 少ないメモリーアクセスになる。 +.SS "vDSO を見つける" +vDSO のベースアドレスは、 (存在する場合には) カーネルから各プログラムに初期補助ベクトル (\fBgetauxval\fP(3) 参照) の +\fBAT_SYSINFO_EHDR\fP タグ経由で渡される。 + +vDSO がユーザーのメモリーマップの何か特定の場所にマッピングされると仮定してはならない。 通常新しいプロセスイメージが作成されるたびに +(\fBexecve\fP(2) 実行時点) 、 実行時にベースアドレスのランダム化が行われる。 これは "return\-to\-libc" 攻撃 +を防ぐためにセキュリティ上の理由から行われる。 + +アーキテクチャーによっては \fBAT_SYSINFO\fP タグもある。 このタグは vsyscall エントリーポイントの場所を知るためだけのものであり、 +しばしば省略されるか (利用できない場合は) 0 にセットされる。 このタグは最初の vDSO の実装で使用されていたものであり +(下記の「歴史」を参照)、 このタグを利用するのは避けるべきである。 +.SS ファイルフォーマット +vDSO は完全な形式の ELF イメージなので、 vDSO に対してシンボルの検索を行うことができる。 このため、 +新しいカーネルリリースで新しいシンボルを追加することができ、 C +ライブラリが別のバージョンのカーネル上で動作する際に実行時に利用可能な機能を検出することができる。 多くの場合、 C +ライブラリは最初の呼び出し時に検出を行い、 それ以降の呼び出しで利用できるようにその結果をキャッシュする。 + +すべてのシンボルは (GNU のバージョンフォーマットを使って) バージョンが付けられている。 これにより、 +カーネルは後方互換性を持たせつつ関数のシグネチャーを更新することができる。 つまり、 +関数が受け取る引き数や返り値が変更されることがあるということである。 したがって、 vDSO のシンボルを検索する際には、 自分が期待する ABI +に一致するバージョンをしなければならない。 + +通常は vDSO はすべてのシンボルに "__vdso_" か "__kernel_" +というプレフィックスを付けるという慣習に従った名前付けを行っており、 他の標準のシンボルから区別することができる。 例えば、 +"gettimeofday" 関数は ""__vdso_gettimeofday" という名前になっている。 + +これらの関数を呼び出す場合は標準の C の呼び出しの慣習にしたがっておけばよい。 特殊なレジスターやスタックの動作に気を使う必要はない。 +.SH 注意 +.SS ソース +カーネルをコンパイルする際に、 vDSO コードはコンパイルされリンクが行われる。 通常はアーキテクチャー固有のディレクトリに vDSO +コードが生成される。 + + find arch/$ARCH/ \-name '*vdso*.so*' \-o \-name '*gate*.so*' + +.SS "vDSO 名" +vDSO の名前はアーキテクチャーにより異なる。 この名前は glibc の \fBldd\fP(1) の出力などに現れる。 +名前はコードで必要となることはなく、 名前をハードコードしないこと。 +.if t \{\ +.ft CW +\} +.TS +l l. +ユーザー ABI vDSO 名 +_ +aarch64 linux\-vdso.so.1 +ia64 linux\-gate.so.1 +ppc/32 linux\-vdso32.so.1 +ppc/64 linux\-vdso64.so.1 +s390 linux\-vdso32.so.1 +s390x linux\-vdso64.so.1 +sh linux\-gate.so.1 +i386 linux\-gate.so.1 +x86_64 linux\-vdso.so.1 +x86/x32 linux\-vdso.so.1 +.TE +.if t \{\ +.in +.ft P +\} +.SH アーキテクチャー固有の注意 +以下のサブ章では vDSO のアーキテクチャー固有の注意について説明する。 + +使用される vDSO は、 カーネルの ABI ではなく、 ユーザー空間コードの ABI に基づくことに注意すること。 したがって、 例えば、 i386 +32 ビットの ELF ライブラリ上で実行する場合、 i386 32 ビットカーネル上で実行されているか x86_64 64 +ビットカーネル上で実行されているかに関わらず同じ vDSO が得られる。 したがって、 以下のどの節が関係するかを判断する際にはユーザー空間 ABI +の名前を使用する必要がある。 +.SS "ARM 関数" +.\" See linux/arch/arm/kernel/entry-armv.S +.\" See linux/Documentation/arm/kernel_user_helpers.txt +The ARM port has a code page full of utility functions. Since it's just a +raw page of code, there is no ELF information for doing symbol lookups or +versioning. It does provide support for different versions though. + +For information on this code page, it's best to refer to the kernel +documentation as it's extremely detailed and covers everything you need to +know: \fIDocumentation/arm/kernel_user_helpers.txt\fP. +.SS "aarch64 関数" +.\" See linux/arch/arm64/kernel/vdso/vdso.lds.S +以下のテーブルは vDSO で公開されるシンボルの一覧である。 +.if t \{\ +.ft CW +\} +.TS +l l. +シンボル バージョン +_ +__kernel_rt_sigreturn LINUX_2.6.39 +__kernel_gettimeofday LINUX_2.6.39 +__kernel_clock_gettime LINUX_2.6.39 +__kernel_clock_getres LINUX_2.6.39 +.TE +.if t \{\ +.in +.ft P +\} +.SS "bfin (Blackfin) 関数" +.\" See linux/arch/blackfin/kernel/fixed_code.S +.\" See http://docs.blackfin.uclinux.org/doku.php?id=linux-kernel:fixed-code +As this CPU lacks a memory management unit (MMU), it doesn't set up a vDSO +in the normal sense. Instead, it maps at boot time a few raw functions into +a fixed location in memory. User\-space applications then call directly into +that region. There is no provision for backward compatibility beyond +sniffing raw opcodes, but as this is an embedded CPU, it can get away with +things\(emsome of the object formats it runs aren't even ELF based (they're +bFLT/FLAT). + +For information on this code page, it's best to refer to the public +documentation: +.br +http://docs.blackfin.uclinux.org/doku.php?id=linux\-kernel:fixed\-code +.SS "ia64 (Itanium) 関数" +.\" See linux/arch/ia64/kernel/gate.lds.S +.\" Also linux/arch/ia64/kernel/fsys.S and linux/Documentation/ia64/fsys.txt +以下のテーブルは vDSO で公開されるシンボルの一覧である。 +.if t \{\ +.ft CW +\} +.TS +l l. +シンボル バージョン +_ +__kernel_sigtramp LINUX_2.5 +__kernel_syscall_via_break LINUX_2.5 +__kernel_syscall_via_epc LINUX_2.5 +.TE +.if t \{\ +.in +.ft P +\} + +The Itanium port is somewhat tricky. In addition to the vDSO above, it also +has "light\-weight system calls" (also known as "fast syscalls" or "fsys"). +You can invoke these via the \fI__kernel_syscall_via_epc\fP vDSO helper. The +system calls listed here have the same semantics as if you called them +directly via \fBsyscall\fP(2), so refer to the relevant documentation for +each. The table below lists the functions available via this mechanism. +.if t \{\ +.ft CW +\} +.TS +l. +関数 +_ +clock_gettime +getcpu +getpid +getppid +gettimeofday +set_tid_address +.TE +.if t \{\ +.in +.ft P +\} +.SS "parisc (hppa) 関数" +.\" See linux/arch/parisc/kernel/syscall.S +.\" See linux/Documentation/parisc/registers +The parisc port has a code page full of utility functions called a gateway +page. Rather than use the normal ELF auxiliary vector approach, it passes +the address of the page to the process via the SR2 register. The +permissions on the page are such that merely executing those addresses +automatically executes with kernel privileges and not in user space. This +is done to match the way HP\-UX works. + +Since it's just a raw page of code, there is no ELF information for doing +symbol lookups or versioning. Simply call into the appropriate offset via +the branch instruction, for example: + + ble (%sr2, %r0) +.if t \{\ +.ft CW +\} +.TS +l l. +オフセット 関数 +_ +00b0 lws_entry +00e0 set_thread_pointer +0100 linux_gateway_entry (syscall) +0268 syscall_nosys +0274 tracesys +0324 tracesys_next +0368 tracesys_exit +03a0 tracesys_sigexit +03b8 lws_start +03dc lws_exit_nosys +03e0 lws_exit +03e4 lws_compare_and_swap64 +03e8 lws_compare_and_swap +0404 cas_wouldblock +0410 cas_action +.TE +.if t \{\ +.in +.ft P +\} +.SS "ppc/32 関数" +.\" See linux/arch/powerpc/kernel/vdso32/vdso32.lds.S +以下のテーブルは vDSO で公開されるシンボルの一覧である。 \fI*\fP のマークが付いた関数は、カーネルが PowerPC64 (64 ビット) +カーネルの場合にだけ利用可能である。 +.if t \{\ +.ft CW +\} +.TS +l l. +シンボル バージョン +_ +__kernel_clock_getres LINUX_2.6.15 +__kernel_clock_gettime LINUX_2.6.15 +__kernel_datapage_offset LINUX_2.6.15 +__kernel_get_syscall_map LINUX_2.6.15 +__kernel_get_tbfreq LINUX_2.6.15 +__kernel_getcpu \fI*\fP LINUX_2.6.15 +__kernel_gettimeofday LINUX_2.6.15 +__kernel_sigtramp_rt32 LINUX_2.6.15 +__kernel_sigtramp32 LINUX_2.6.15 +__kernel_sync_dicache LINUX_2.6.15 +__kernel_sync_dicache_p5 LINUX_2.6.15 +.TE +.if t \{\ +.in +.ft P +\} +.SS "ppc/64 関数" +.\" See linux/arch/powerpc/kernel/vdso64/vdso64.lds.S +以下のテーブルは vDSO で公開されるシンボルの一覧である。 +.if t \{\ +.ft CW +\} +.TS +l l. +シンボル バージョン +_ +__kernel_clock_getres LINUX_2.6.15 +__kernel_clock_gettime LINUX_2.6.15 +__kernel_datapage_offset LINUX_2.6.15 +__kernel_get_syscall_map LINUX_2.6.15 +__kernel_get_tbfreq LINUX_2.6.15 +__kernel_getcpu LINUX_2.6.15 +__kernel_gettimeofday LINUX_2.6.15 +__kernel_sigtramp_rt64 LINUX_2.6.15 +__kernel_sync_dicache LINUX_2.6.15 +__kernel_sync_dicache_p5 LINUX_2.6.15 +.TE +.if t \{\ +.in +.ft P +\} +.SS "s390 関数" +.\" See linux/arch/s390/kernel/vdso32/vdso32.lds.S +以下のテーブルは vDSO で公開されるシンボルの一覧である。 +.if t \{\ +.ft CW +\} +.TS +l l. +シンボル バージョン +_ +__kernel_clock_getres LINUX_2.6.29 +__kernel_clock_gettime LINUX_2.6.29 +__kernel_gettimeofday LINUX_2.6.29 +.TE +.if t \{\ +.in +.ft P +\} +.SS "s390x 関数" +.\" See linux/arch/s390/kernel/vdso64/vdso64.lds.S +以下のテーブルは vDSO で公開されるシンボルの一覧である。 +.if t \{\ +.ft CW +\} +.TS +l l. +シンボル バージョン +_ +__kernel_clock_getres LINUX_2.6.29 +__kernel_clock_gettime LINUX_2.6.29 +__kernel_gettimeofday LINUX_2.6.29 +.TE +.if t \{\ +.in +.ft P +\} +.SS "sh (SuperH) 関数" +.\" See linux/arch/sh/kernel/vsyscall/vsyscall.lds.S +以下のテーブルは vDSO で公開されるシンボルの一覧である。 +.if t \{\ +.ft CW +\} +.TS +l l. +シンボル バージョン +_ +__kernel_rt_sigreturn LINUX_2.6 +__kernel_sigreturn LINUX_2.6 +__kernel_vsyscall LINUX_2.6 +.TE +.if t \{\ +.in +.ft P +\} +.SS "i386 関数" +.\" See linux/arch/x86/vdso/vdso32/vdso32.lds.S +以下のテーブルは vDSO で公開されるシンボルの一覧である。 +.if t \{\ +.ft CW +\} +.TS +l l. +シンボル バージョン +_ +__kernel_sigreturn LINUX_2.5 +__kernel_rt_sigreturn LINUX_2.5 +__kernel_vsyscall LINUX_2.5 +.\" Added in 7a59ed415f5b57469e22e41fc4188d5399e0b194 and updated +.\" in 37c975545ec63320789962bf307f000f08fabd48. +__vdso_clock_gettime LINUX_2.6 (Linux 3.15 以降で公開) +__vdso_gettimeofday LINUX_2.6 (Linux 3.15 以降で公開) +__vdso_time LINUX_2.6 (Linux 3.15 以降で公開) +.TE +.if t \{\ +.in +.ft P +\} +.SS "x86_64 関数" +.\" See linux/arch/x86/vdso/vdso.lds.S +以下のテーブルは vDSO で公開されるシンボルの一覧である。 これらのシンボルはすべて "__vdso_" のプレフィックスなしでも利用できるが、 +これらは無視し、 以下の名前だけを使うこと。 +.if t \{\ +.ft CW +\} +.TS +l l. +シンボル バージョン +_ +__vdso_clock_gettime LINUX_2.6 +__vdso_getcpu LINUX_2.6 +__vdso_gettimeofday LINUX_2.6 +__vdso_time LINUX_2.6 +.TE +.if t \{\ +.in +.ft P +\} +.SS "x86/x32 関数" +.\" See linux/arch/x86/vdso/vdso32.lds.S +以下のテーブルは vDSO で公開されるシンボルの一覧である。 +.if t \{\ +.ft CW +\} +.TS +l l. +シンボル バージョン +_ +__vdso_clock_gettime LINUX_2.6 +__vdso_getcpu LINUX_2.6 +__vdso_gettimeofday LINUX_2.6 +__vdso_time LINUX_2.6 +.TE +.if t \{\ +.in +.ft P +\} +.SS 歴史 +vDSO は元々は一つの関数 vsyscall であった。 古いカーネルでは、 プロセスのメモリーマップに "vdso" +ではなくこの名前が見えるかもしれない。 時間が経つに連れて、 この仕組みはより多くの機能をユーザー空間に渡す有効な方法であると認識されるようになり、 +現在の形の vDSO という形に見直しが行われた。 +.SH 関連項目 +\fBsyscalls\fP(2), \fBgetauxval\fP(3), \fBproc\fP(5) + +Linux のソースコードツリーのドキュメント、例、ソースコード: +.in +4n +.nf + +Documentation/ABI/stable/vdso +Documentation/ia64/fsys.txt +Documentation/vDSO/* (vDSO の使用例がある) + +find arch/ \-iname '*vdso*' \-o \-iname '*gate*' +.fi +.in +.SH この文書について +この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.78 の一部 +である。プロジェクトの説明とバグ報告に関する情報は +http://www.kernel.org/doc/man\-pages/ に書かれている。 diff --git a/stats/stdlib b/stats/stdlib index ee939428..93ace5b8 100644 --- a/stats/stdlib +++ b/stats/stdlib @@ -1,3 +1,3 @@ # pagename,#complete,#remaining,#all getauxval.3,52,34,86 -vdso.7,45,139,184 +vdso.7,176,8,184 diff --git a/translation_list b/translation_list index a0a7a763..95a825d0 100644 --- a/translation_list +++ b/translation_list @@ -2211,7 +2211,7 @@ ○:LDP man-pages:3.78:2014/09/21:user_namespaces:7:2015/01/24::amotoki@gmail.com:Akihiro Motoki: ○:LDP man-pages:3.78:2014/06/13:utf-8:7:2015/01/24::amotoki@gmail.com:Akihiro Motoki: @:LDP man-pages:3.78:2014/06/13:utf8:7:utf-8:7: -×:LDP man-pages:3.78:2014/08/19:vdso:7::::: +☆:LDP man-pages:3.78:2014/08/19:vdso:7:2015/01/25::amotoki@gmail.com:Akihiro Motoki: ○:LDP man-pages:3.78:2012/08/05:x25:7:2015/01/24::amotoki@gmail.com:Akihiro Motoki: ○:LDP man-pages:3.78:2014/07/08:iconvconfig:8:2015/01/24::amotoki@gmail.com:Akihiro Motoki: ○:LDP man-pages:3.78:2007/10/23:intro:8:2015/01/24::amotoki@gmail.com:Akihiro Motoki: diff --git a/untrans.html b/untrans.html index 701f3dca..3b78aba2 100644 --- a/untrans.html +++ b/untrans.html @@ -68,7 +68,7 @@ hpsa.423/5759.65 stdlib getauxval.334/8660.47 -vdso.7139/18424.46 +vdso.78/18495.65 Total 45 pages -- 2.11.0