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

In article <3993872news.pl@rananim.ie.u-ryukyu.ac.jp>
        kono@ie.u-ryukyu.ac.jp (Shinji KONO) writes:
> > dtrace で動的リンク・ライブラリ等も表示されるのかと思ったの
> > ですが、出てきません。MacOSX/Darwin で Mach-O executable を
> > 読込むにしても、namei() は呼ばれるだろうに。どうしてかなあ。
> Prebinidng されるからじゃなかったかな。
>    ls /var/db/dyld
> あたり? 10.4 / 10.5 あたりで変わったし、あまり知らないんですが。

Prebinidng について調べて見ました。今回はあまり関係なさそう。
dtrace で調べていた ls ですか、次のようにして otool で調べて
も PREBOUND が出てきません。

------------------------------------------------------------
% otool -h -v /bin/ls
/bin/ls:
Mach header
      magic cputype cpusubtype  caps    filetype ncmds sizeofcmds      flags
   MH_MAGIC    I386        ALL  0x00     EXECUTE    14       1304   NOUNDEFS DYLDLINK TWOLEVEL
% 
------------------------------------------------------------

10.3 だと、PREBOUND 出ますね。
------------------------------------------------------------
% otool -h -v /bin/ls
/bin/ls:
Mach header
      magic cputype cpusubtype   filetype ncmds sizeofcmds      flags
   MH_MAGIC     PPC        ALL    EXECUTE    15       1912   NOUNDEFS DYLDLINK PREBOUND TWOLEVEL
% 
------------------------------------------------------------

Prebind に関して参考にしたページはこれです。

http://developer.apple.com/documentation/performance/Conceptual/LaunchTime/Articles/Prebinding.html

dtruss だと /lib のファイルは stat だけして終りですね。open 
も何もしてない。dtruss では表示されないシステムコールを
使っているのかもしれません。

------------------------------------------------------------
% dtruss /bin/ls /|& egrep /
stat("/usr/lib/dtrace/libdtrace_dyld.dylib\0", 0xBFFFD028, 0xBFFFDEBC)           = 0 0
open("/usr/lib/dtrace/libdtrace_dyld.dylib\0", 0x0, 0x0)                 = 3 0
stat("/usr/lib/libncurses.5.4.dylib\0", 0xBFFFCE18, 0xFFFFFFFFBFFFB694)          = 0 0
stat("/usr/lib/libgcc_s.1.dylib\0", 0xBFFFCE18, 0xFFFFFFFFBFFFB694)              = 0 0
stat("/usr/lib/libSystem.B.dylib\0", 0xBFFFCE18, 0xFFFFFFFFBFFFB694)             = 0 0
stat("/usr/lib/system/libmathCommon.A.dylib\0", 0xBFFFCB68, 0xFFFFFFFFBFFFB694)          = 0 0
open("/dev/dtracehelper\0", 0x2, 0xBFFFDE44)             = 3 0
open_nocancel("/dev/urandom\0", 0x0, 0x0)                = 3 0
stat64("/\0", 0xBFFFED64, 0x3)           = 0 0
open_nocancel("/\0", 0x100004, 0x0)              = 4 0
%
------------------------------------------------------------

それにしても、stat でも namei() には掛かって欲しいのだけれど、
出てこないのは問題だなあ。もっと上の層でキャッシュにかかって
いるのかな。

\\ 新城 靖 (しんじょう やすし) \\
\\ 筑波大学 電子・情報       \\