Scroll to navigation

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_PLATFORM と異なる値の場合がある。 (PowerPC のみ)
times(2) のカウントが行われる周波数。 この値は sysconf(_SC_CLK_TCK) でも取得できる。
データキャッシュのブロックサイズ。
このスレッドの実効グループ ID。
実行ファイルのエントリーアドレス。
このスレッドの実効ユーザー ID。
プログラムのファイルディスクリプター。
実行プログラムに使用されたパス名。
フラグ (未使用)。
使用された FPU 制御ワード (SuperH アーキテクチャーのみ)。 カーネルが実行した FPU 初期化に関する情報を提供するためのものである。
このスレッドの実グループ ID。
プロセッサーの詳細な機能 (capabilities) を示す複数バイトからなるビットマスクへのポインターである。 このビットマスクの内容はハードウェア依存である (例えば、 Intel x86 アーキテクチャーに関する詳細はカーネルのソースファイル arch/x86/include/asm/cpufeature.h を参照)。 同じ情報を人が読みやすい形になっているのが /proc/cpuinfo である。
命令キャッシュのブロックサイズ。
システムページサイズ (sysconf(_SC_PAGESIZE) が返す値と同じ)。
実行プログラムのプログラムヘッダーのアドレス。
プログラムヘッダーエントリーのサイズ。
プログラムヘッダー数。
このプログラムが実行されているハードウェアプラットフォームを特定する文字列へのポインター。 動的リンカーは rpath 値の解釈を行う際にこの値を使用する。
ランダム値が入った 16 バイトがあるアドレス。
この実行ファイルを安全に扱う必要がある場合に 0 以外の値になる。 一番よくある場合としては、 0 以外の値になるのは、 そのプロセスが set-user-ID か set-group-ID されたプログラムを実行している場合である。 他の場合としては、 Linux Security Module が有効になっている場合にも 0 以外の値となる。 この値が 0 以外の場合、 動的リンカーは特定の環境変数の使用を無効化し (ld-linux.so(8) 参照)、 glibc はそのプロセスの動作を別の観点で変更する (secure_getenv(3) 参照)。
vDSO のシステムコール関数へのエントリーポイント。すべてのアーキテクチャーで存在するわけではなく、 また必要というわけでもない (例えば x86-64 には存在しない)。
仮想動的共有オブジェクト (vDSO; virtual Dynamic Shared Object) が入ったページのアドレス。 vDSO は、 特定のシステムコールの高速な実装を提供するためにカーネルが作成する共有オブジェクトである。
ユニファイド (unified) キャッシュのブロックサイズ。
このスレッドの実ユーザー ID。

返り値

成功すると、 getauxval() は type に対応する値を返す。 type が見つからない場合には 0 を返す。

エラー

type に対応するエントリーが補助ベクトルになかった。

バージョン

getauxval() 関数は glibc バージョン 2.16 で追加された。

属性

マルチスレッディング (pthreads(7) 参照)

関数 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 だった場合を明確に区別する方法がなかった。

関連項目

secure_getenv(3), vdso(7), ld-linux.so(8)

この文書について

この man ページは Linux man-pages プロジェクトのリリース 3.79 の一部 である。プロジェクトの説明とバグ報告に関する情報は http://www.kernel.org/doc/man-pages/ に書かれている。

2014-08-19 GNU