yarv-dev:688
From: SASADA Koichi <ko1 atdot.net>
Date: Fri, 09 Dec 2005 05:09:10 +0900
Subject: [yarv-dev:688] Re: [PATCH] rev 303 problems on LP64 systems
ささだです。 Minero Aoki wrote: >>>また、日記とメールで書いた SEGV を追跡したところ、これは gcc の -O2 が >>>あるかどうかだけに依存することがわかりました。blockinlining.c を gcc -O0 >>>でコンパイルすると落ちるようになります。 > > >> うーん、なんだろ。void * で関数ポインタを引き回してるのがまずいのかし >>らん。 > > > 特定できました。これだけで落ちます。 答えは、「-O0 でコンパイルすると関数のアドレスが4byteアラインメントさ れるとは限らないから」でした。 関数ポインタはどーせ fptr & 0x03 は 0 だろう、と思っていたらそうでもな いことがあったみたい。いやー、やれやれ。途中受け渡しで fptr | 0x01 して VALUE にして、後で fptr & ~0x01 して関数ポインタに戻す、ということをやっ てるんですが、それがまずいらしい。卜部君のアドバイスで LONG2FIX(fptr) で Fixnum に変換したらちゃんと通った(これは、別のところで嫌なことになりそ うなので根本的に変えますが)。 しかし、意外な新事実だった。やれやれ。 グローバル変数のアドレスとか、4 byte alignment されない場合ってあるの かな? -- SASADA Koichi at atdot dot net -- ML: yarv-dev quickml.atdot.net 使い方: http://www.atdot.net/~ko1/quickml
683 2005-12-06 16:50 [ko1 atdot.net ] [BUG] YARV craches with other program 684 2005-12-09 00:56 ┗[aamine loveruby.net ] [PATCH] rev 303 problems on LP64 systems 685 2005-12-09 01:31 ┗[ko1 atdot.net ] 687 2005-12-09 03:50 ┗[aamine loveruby.net ] -> 688 2005-12-09 05:09 ┗[ko1 atdot.net ]