渡辺哲也です。

bug ではなくて、gcc のオプチマイザ関係らしいの
ですが、とりあえず情報だけ。

注意: とても起きにくい現象のようです

この現象はなかなか再現させにくく、CGI を使用し
た、特定の場合だけで起きています。同じ引数を渡
してもコマンドラインでは起きなくて core がとれ
ていません。

■ 環境

Vine Linux 1.1CF
gcc version 2.7.2.3
libc-2.0.7
ruby-1.4.0 dev-7670 dev-7686 パッチ済

■ 現象

CGI スクリプトを実行時に

[BUG] Segmentation fault

がでる。

■ 対応

ステップ 1

場当たり的? にスクリプトを変更すると落ちる場所
が変わるので gc 関係? と思い、1.3.7 からの変更
点を確認(1.3.7 では現象は起きません)。gc.c を
1.3.7 にすると落ちない。

ステップ 2

1.4.0 の gc.c に情報を残すようなコードを入れて
みる。これでは、現象起きない... あれ?

ステップ 3

gc.c だけで gcc のオプチマイズレベルを変えてみ
る。

1.4.0 の gc.c

なし ○
-O   ×
-O1  ×
-03  ×

1.4.0 の情報を残すコード入り

なし ○
-O1  ○
-O2  ○
-O3  ×

ということで、どうも 1.4.0 の gc.c は gcc
2.7.2.3 とは、相性が悪いようです。いや、悪いよ
うにみえます。

とりあえず、起きている現象のお知らせだけなんで
すけど...

もし、同じ環境の方でこのようなことが起きている
場合は、gc.c だけ -O なしでコンパイルすると、
大丈夫かもしれません。

p.s.

Ruby 日記の方に gc.c を疑うようなことを書いて
すいません。frame->tmp が 0 以外になるような確
認スクリプトを書けなくて、ぜんぜん制御を渡せま
せんでした。でも、このデバック用コードを入れる
と、条件が変わるのは確認できました。

--
WATANABE Tetsuya
 e-mail: Tetsuya_WATANABE / hp.com
         tetsu / jpn.hp.com