たなか です. 調査範囲広過ぎます(涙) *
BINARY Hacksを読んで, GCC v4からMudflapなる機構が使えるように なったと書いてあったので, portsからgcc41をインストールして 試してみました. #蛇足ですがMudflap機構とは, バッファオーバーラン等の 実行時エラーの検出をコードに埋め込む機構です. このとき, 通常のプログラムであれば本に書いてあるとおりの 出力を得られるのですが, pthreadsを有効にしてコンパイルすると こんな感じでcore dumpします. [コマンドライン例] gcc41 -pthread -g -fmudflapth hello.c -lmudflapth [実行例] [EMAIL PROTECTED] ./a.out Fatal error 'Cannot initialize spinlock extra' at line 144 in file /usr/src/lib/libpthread/thread/thr_spinlock.c (errno = 0) セグメントエラー(coreを出力しました) #hello.cの内容は関係ない. こんなのでもいい. [hello.c] int main() {} エラーメッセージから追っていくと, どうもlibmudflap.soの初期化ルーチンが 呼ばれる前にlibpthread.soの初期化ルーチンが呼ばれるのが原因かな, という 気がするのですが, 試しにくくて困ってます. で, ・Shared libraryの初期化ルーチンを呼ぶ順序を制御する方法をご存知の方, いらっしゃいませんか? ・(もっとダイレクトに)同様の事象で対処できた方っていらっしゃいますか? #これって, gccの問題のような気もしますが, 初期化ルーチンの呼び順だと するとFreeBSDのrtldの問題(仕様?)なんですよねえ. 書き忘れてましたが, 環境は ・FreeBSD 6.1-RELEASE i386 ・gcc 4.1.2 (20061229版)(portsよりインストール) です. 「currentなら動くよ」な情報でもいいので, 教えていただければ幸いです. では. -- たなかえいじ (aji@aji-oh.net)