[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

4.38 関数の戻りアドレスやフレームアドレスを得るには

以下の関数を使って、関数の呼び出し元についての情報を得ることができる。

__builtin_return_address (level)

この関数は、現在の関数か、あるいはその呼び出し元関数のどれか一つの 戻りアドレスを返す。 引数 level は、呼び出しスタックを走査すべきフレーム数である。 この値が 0 であれば、現在の関数の戻りアドレスを返す。 この値が 1 であれば、現在の関数の呼び出し元の戻りを返す。 以下同様。

引数 level は整数定数でなければならない。

機種によっては、現在の関数以外の関数の戻りアドレスを決定することが 不可能な場合がある。 そういう場合や、スタックの頂点に達したときは、この関数は 0 を 返す。

この関数は、ゼロ以外の引数をつけてデバッグ用にのみ使うべきである。

__builtin_frame_address (level)

この関数は __builtin_return_address に似ているが、 関数の戻りアドレスではなく、関数フレームのアドレスを返す。 __builtin_frame_address を引数値を 0 として 呼び出すと、現在の関数のフレームアドレスを返す。 1 を引数値とすると、現在の関数の呼び出し元関数のフレームアドレスを 返す。以下同様。

フレームは、ローカル変数やセーブされたレジスタを保持するスタック上の 領域である。フレームアドレスは、普通は、その関数によりスタックにプッシュ された先頭のワードのアドレスになる。 しかし、厳密な定義は、プロセッサと呼び出し規約に依存する。 プロセッサにフレームポインタ専用レジスタがあれば、関数はフレームを 一個持ち、__builtin_frame_address は、そのフレームポインタ レジスタの値を返す。

__builtin_return_address についての注意が、この関数についても 同様に当てはまる。


This document was generated using texi2html 1.78.