yas@is.tsukuba.ac.jp (Yasushi Shinjo) writes:

> 新城@筑波大学情報です。こんにちは。

> dtrace で namei() を調べる方法について、うまく行った人はいま
> せんか。

DTrace は、半年以上前にあまりよくわかっていないで使っていたので、
かなり忘却してますし、
しかも、namei って関数は Solaris にないし...

># dtrace -l | egrep namei
>12951        fbt       mach_kernel                             namei entry
>12952        fbt       mach_kernel                             namei return

左から、ターゲットの ID, PROVIDER, MODULE, FUNCTION, NAME を表していて、
それぞれ、dtrace の -i, -P, -m, -f, -n オプションで指定できます:

# dtrace -li 12951
# dtrace -lP fbt | grep namei
# dtrace -lm mach_kernel | grep namei
# dtrace -lf namei
# dtrace -ln fbt::namei:entry

また、-v でターゲットの詳細をレポートしてくれます。

# dtrace -lvn fbt::namei:entry

を実行すれば、たぶん、

        Argument Types
                args[0]: struct nameidata *

というのがレポートされると思います。
これは、DTrace スクリプト内で、

fbt::namei:entry
/pid == $target/
{
        p = (struct nameidata *)arg0;
        printf("%p", p->ni_dirp);
}

のように使用できます。

# dtrace -n 'fb::namei:entry /pid == $target/ {...}' -c "..."

とか、上記スクリプトをファイル(foo)に書いて、

# dtrace -s foo -c "..."

とかすれば、良いのじゃないかなぁ :-)