ftraceの仕組みを調べるためにググっていたら、http://bit.ly/9cGM9d という論文を発見。 早速読んでみる。 ftraceはgcc の -pgオプションを利用して、関数の入り口でmcount()という関数をコールするようにしている。 (-pgはプロファイラなどのために用意されたオプションで、このオプションでコンパイルされた関数は入り口でmcount()という関数を呼ぶようになるらしい) そして、各CPUアーキテクチャごとに定義されたmcount()の中でスタックを弄り、mcount()呼び出し元の関数が終了した時に戻るべきリターンアドレスを書き換えておく。 これにより、関数終了時に別途測定用の関数がコールされることになる。 早速仕組みを実装で追いかけるべく、mipsアーキテクチャを選んで読んで見た。 98 NESTED(_mcount, PT_SIZE, ra) 99