静的にリンクされたバイナリーファイルをプロファイルするには、コンパイル時にバイナリーのストリップを一時的に停止し、バイナリーファイルがシステム・ライブラリーから次のシンボルをエクスポートすることを確実にします。
_init() (main を含む実行ファイル): プロセスツリーをプロファイルする場合、strategy オプションを使用します。
libc.so:
ターゲットは、setenv、getenv()、および __errno_location() シンボルを無条件にエクスポートします。
ターゲットが recv() API を使用する場合、recv() と poll() をエクスポートします。
ターゲットが sleep() または usleep() API を使用する場合、sleep() または usleep() を個別に、そして nanosleep() シンボルをエクスポートします。
libpthread.so:
ターゲットが pthread_create() API を使用する場合、次のシンボルをエクスポートします。
pthread_create()
pthread_key_create()
pthread_setspecific()
pthread_getspecific()
pthread_self()
pthread_getattr_np()
pthread_attr_destroy()
pthread_attr_setstack()
pthread_attr_getstack()
pthread_attr_getstacksize()
pthread_attr_setstacksize()
ターゲットが pthread_cancel() API を使用する場合、次のシンボルをエクスポートします。
pthread_cancel()
_pthread_cleanup_push()
_pthread_cleanup_pop()
ターゲットが _pthread_cleanup_push() または _pthread_cleanup_pop() API を使用する場合、次のシンボルをエクスポートします。
_pthread_cleanup_push()
_pthread_cleanup_pop()
ターゲットが pthread_mutex_lock() API を使用する場合、pthread_mutex_lock() と pthread_mutex_trylock() シンボルをエクスポートします。
ターゲットが pthread_spin_lock() API を使用する場合、pthread_spin_lock() と pthread_spin_trylock() シンボルをエクスポートします。
libdl.so:
ターゲットが dlopen()、dlsym()、または dlclose() API を使用する場合、3 つをすべてエクスポートします。
バイナリーファイルが、上記のシンボルをエクスポートしない場合、-u リンカーオプションを使用して (例えば、コンパイラーでリンクする場合、-Wl,-u__errno_location を指定)、コンパイルのリンクステージでバイナリーファイルにシンボルを含めます。