このサイトのサーバーであるPowerMac G4Cubeが壊れたときのバックアップにと、最近買ったMacBook Proにサーバー用のソフトをいろいろインストールすることにしてみた。
で、さっそくApache2.2をmakeしたのだが、、、なぜかhttpdを実行するとSegmentation faultとかBus errorが発生して全く起動しない;;
いろいろ調べてみたら、mod_usertrackを付けるとエラーが出るようで、、、
さらに調べを進めると、pcre.cファイルの中のcompile_branch()関数の中で問題が発生していることが分かった。この関数は正規表現を処理するためのものだ。
さらに解析を進めると、この関数の中に、
do{
/** 中略 **/
}while((c = *(++ptr)) != ']' || inescq);
と書かれているところがあり、これを
do{
/** 中略 **/
c = *(++ptr);
}while(c != ']' || inescq);
と書き直すだけで、エラーが回避できることが分かった。
コードは同じ内容のはずなのだが、なぜかこれでエラーが回避できてしまう。。。
また、
do{
printf("foo");
/** 中略 **/
}while((c = *(++ptr)) != ']' || inescq);
と、やってもエラーが回避できた。
詳しいことは分からないが、ある特定の条件を満たすと、gccは不良なIntelコードを生成してしまうのだろうか?
そういえは、Intel Macでcom.apple.audio.midiパッケージのあるAPIを実行するとBus errorが起きていたな〜。これもこの関連なのだろうか?