GETAUXVAL(3) Linux Programmer's Manual GETAUXVAL(3)
名
getauxval - 補助ベクトルから値を取得する
書
#include <sys/auxv.h>
unsigned long getauxval(unsigned long type);
説
getauxval() 関数は補助ベクトル (auxiliary vector) から値を取得する。 補助ベクトルは、
プログラムが実行される際に、 カーネルの ELF
バイナリーローダーがユーザー空間にある種の情報を渡すのに使われる仕組みである。
補助ベクトルの各エントリーは、
このエントリーを示すタイプとそのタイプの値のペアで構成される。 引き数 type
が指定されると、 getauxval() は対応する値を返す。
それぞれの type に対して返される値の詳細を以下に示す。 すべてのアーキテクチャーですべて
type 値が存在するわけではない。
AT_BASE
プログラムインタープリター (通常は動的ローダー) のベースアドレス。
AT_BASE_PLATFORM
実プラットフォームを示す文字列。 AT_PLATFORM と異なる値の場合がある。 (PowerPC
のみ)
AT_CLKTCK
times(2) のカウントが行われる周波数。 この値は sysconf(_SC_CLK_TCK)
でも取得できる。
AT_DCACHEBSIZE
データキャッシュのブロックサイズ。
AT_EGID
このスレッドの実効グループ ID。
AT_ENTRY
実行ファイルのエントリーアドレス。
AT_EUID
このスレッドの実効ユーザー ID。
AT_EXECFD
プログラムのファイルディスクリプター。
AT_EXECFN
実行プログラムに使用されたパス名。
AT_FLAGS
フラグ (未使用)。
AT_FPUCW
使用された FPU 制御ワード (SuperH アーキテクチャーのみ)。 カーネルが実行した FPU
初期化に関する情報を提供するためのものである。
AT_GID このスレッドの実グループ ID。
AT_HWCAP
プロセッサーの詳細な機能 (capabilities)
を示す複数バイトからなるビットマスクへのポインターである。
このビットマスクの内容はハードウェア依存である (例えば、 Intel x86
アーキテクチャーに関する詳細はカーネルのソースファイル arch/x86/include/asm/cpufea‐
ture.h を参照)。 同じ情報を人が読みやすい形になっているのが /proc/cpuinfo である。
AT_ICACHEBSIZE
命令キャッシュのブロックサイズ。
AT_PAGESZ
システムページサイズ (sysconf(_SC_PAGESIZE) が返す値と同じ)。
AT_PHDR
実行プログラムのプログラムヘッダーのアドレス。
AT_PHENT
プログラムヘッダーエントリーのサイズ。
AT_PHNUM
プログラムヘッダー数。
AT_PLATFORM
このプログラムが実行されているハードウェアプラットフォームを特定する文字列へのポインター。
動的リンカーは rpath 値の解釈を行う際にこの値を使用する。
AT_RANDOM
ランダム値が入った 16 バイトがあるアドレス。
AT_SECURE
この実行ファイルを安全に扱う必要がある場合に 0 以外の値になる。
一番よくある場合としては、 0 以外の値になるのは、 そのプロセスが set-user-ID か
set-group-ID されたプログラムを実行している場合である。 他の場合としては、 Linux
Security Module が有効になっている場合にも 0 以外の値となる。 この値が 0
以外の場合、 動的リンカーは特定の環境変数の使用を無効化し (ld-linux.so(8) 参照)、
glibc はそのプロセスの動作を別の観点で変更する (secure_getenv(3) 参照)。
AT_SYSINFO
vDSO
のシステムコール関数へのエントリーポイント。すべてのアーキテクチャーで存在するわけではなく、
また必要というわけでもない (例えば x86-64 には存在しない)。
AT_SYSINFO_EHDR
仮想動的共有オブジェクト (vDSO; virtual Dynamic Shared Object)
が入ったページのアドレス。 vDSO は、
特定のシステムコールの高速な実装を提供するためにカーネルが作成する共有オブジェクトである。
AT_UCACHEBSIZE
ユニファイド (unified) キャッシュのブロックサイズ。
AT_UID このスレッドの実ユーザー ID。
返
成功すると、 getauxval() は type に対応する値を返す。 type が見つからない場合には 0
を返す。
エ
ENOENT (glibc 2.19 以降)
type に対応するエントリーが補助ベクトルになかった。
バ
getauxval() 関数は glibc バージョン 2.16 で追加された。
属
マ
関数 getauxval() はスレッドセーフである。
準
この関数は非標準で glibc による拡張である。
注
補助ベクトルの情報を主に使用するのは、 動的ローダー ld-linux.so(8) である。
補助ベクトルは、
カーネルが動的リンカーが通常もしくは常に必要とするある意味標準的な情報を伝えるための便利で効率的なショートカットである。
いくつかの場合では、 同じ情報がシステムコール経由でも取得できるが、
補助ベクトルを使う方がコストがかからない。
補助ベクトルには、 単に、
プロセスのアドレス空間の引き数リストと環境上に存在するだけである。 プログラム実行時に
LD_SHOW_AUXV 環境変数を設定すると、
プログラムに渡された補助ベクトルを表示することができる。
$ LD_SHOW_AUXV=1 sleep 1
任意のプロセスの補助ベクトルは (ファイルのアクセス許可があれば) /proc/PID/auxv
経由で取得できる。 詳細は proc(5) を参照。
バ
glibc 2.19 で ENOENT エラーが追加される前は、 type が見つからなかった場合と type
に対応する値が 0 だった場合を明確に区別する方法がなかった。
こ
この man ページは Linux man-pages プロジェクトのリリース 3.79 の一部
である。プロジェクトの説明とバグ報告に関する情報は http://www.kernel.org/doc/man-pages/
に書かれている。
GNU 2014-08-19 GETAUXVAL(3)