From: Katsuyuki Komatsu Date: 2000-05-21T21:14:31+09:00 Subject: [ruby-dev:9784] Re: IRIX 6.5 cc -64 support 小松です。 In the message of [ruby-dev:9767] Re: IRIX 6.5 cc -64 support on 2000/5/19 23:46:53 Katsuyuki Komatsu wrote: |||node.hの方はちょっと自信がないので、以下のパッチには入れていません。 || ||なるほど。取り込みます。node.hもそれでよいでしょう。 | |えっと、Alphaでなぜ動いているのかを考えると、スタックに |intを積むときの仕様がAlphaとIRIXで違うということに |なりますよね? | |でっと……ほー、こうなってるのか。 ああそうか、node.hのrb_node_newnode()の宣言は、 NODE *rb_node_newnode(); なので、プロトタイプ宣言したときとint, intと連続 するときのスタックへの積み方が変わってしまいますね。 [ruby-dev:9767]のテストプログラムじゃだめで、 以下のようなテストプログラムで調べるべきでした。 結局、 node.hのstruct RNodeの中のintをすべてlongに変更する でよいですね。納得しました。 % cat t1.c #include void x(); int main() { x(0x01234567, 0x89abcdef); return 0; } % cat t2.c #include void hd(const char *x, int len) { while (len-- > 0) printf("%02x", *x++ & 0xff); printf("\n"); } void x(long a, long b) { hd((char *)&a, sizeof(a)); hd((char *)&b, sizeof(b)); } % % uname -mrs IRIX64 6.5 IP30 % cc -64 -o t t1.c t2.c t1.c: t2.c: hedron% ./t 0000000001234567 ffffffff89abcdef % $ uname -mrs Linux 2.2.14 alpha $ gcc -o t t1.c t2.c $ ./t 6745230100000000 efcdab89ffffffff $ -- 小松克行 / Katsuyuki Komatsu