signal handler

最近メイン開発マシンでSIGSEGVが起きるとcoreから見えるbacktraceが空っぽでデバッグ不能という状態になることが多く、悩まされていました。
ランタイム環境を更新したのと同時期に起こるようになったので、何かの挙動が変わったのがそもそもの原因と思われるのですが、やっと発生条件が分かりました。
それは、SIGSEGVのシグナルハンドラをインストールしていることでした。現在のランタイム環境ではハンドラがある場合、coreファイルに書かれるbacktraceは、プログラムがSIGSEGVを受けるまでのコールスタックではなく、シグナルハンドラのコールスタックになるようです。古い環境のままのマシンではこのような挙動にはならないのですが…
今のところ一番怪しいのはglibc2.5です。しかし特定するためにはもっと実験が必要です。