[前][次][番号順一覧][スレッド一覧][生データ]

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       ]