リターンプローブの関数に渡された初期引数を読み取ろうとしています。エントリプローブとは異なり、リターンプローブの引数変数(、、arg0
... arg1
)には初期パラメータが含まれておらず、これらの値をどのように取得できるかわかりません。
また、並行性の問題があるため、グローバル変数に値を格納することは避けたいと思います。
リターンプローブの関数に渡された初期引数を読み取ろうとしています。エントリプローブとは異なり、リターンプローブの引数変数(、、arg0
... arg1
)には初期パラメータが含まれておらず、これらの値をどのように取得できるかわかりません。
また、並行性の問題があるため、グローバル変数に値を格納することは避けたいと思います。
パラメータをスレッドローカルストレージに保存できます。例:
pid$target:foo:bar:entry
{
self->arg0 = arg0;
self->arg1 = arg1;
/*
* Avoid the race in which dtrace(1) attaches to the victim during
* the window between the two probes.
*/
self->trace = 1;
}
pid$target:foo:bar:return
/self->trace/
{
printf("arg0 = 0x%x, arg1 = 0x%x\n", self->arg0, self->arg1);
/* Deallocate the thread-local storage. */
self->arg0 = 0;
self->arg1 = 0;
}