history

青木日記 RSS

<前の日 | この月 | 次の日>

2004-01-04

Alpha で unpack がバグる

ああ……どうして原稿を書いてると Ruby のバグに当たるんだろう。

こないだの pack("N") の話の続きなんですけどね。 pack は確認したけど unpack を確認してなかった自分のバカさ加減を呪いたい。

aamine@asv800 % ./ruby -ve 'p "\000\000\000\001".unpack("N")'
ruby 1.9.0 (2004-01-01) [alpha-netbsd]
[4294967296]

なぜか今回はあっさりバグの原因にたどりついた。 簡単に言うと、 pack はマシンのエンディアンに合わせて処理を変えないといけないが unpack("N") は常にビッグエンディアンでないといけないってことだな。

えーと、テストはどうしようかなあ。 sizeof(long) != 32 じゃないと意味がないから 64 ビット環境だろ。 Alpha は今動いてる NetBSD/Alpha でいいとして、 ビッグエンディアンも欲しいな。 Solaris/SPARC64 を使おう。

gcc -g -m64  main.o dmyext.o libruby-static.a -ldl -lcrypt -lm   -o miniruby
ld: fatal: dlopen() of support library (libmakestate.so.1) failed with error: ld.so.1: /usr/ccs/bin/sparcv9/ld: fatal: libmakestate.so.1: open failed: No such file or directory
collect2: ld returned 1 exit status
*** Error code 1
make: Fatal error: Command failed for target `miniruby'

なんでだ……。

えー?

おや?

答え: GNU make を使うのが正解。 Solaris make が妙な環境変数 (SGS_SUPPORT) を設定してしまうようだ。

ああ、2 時間もはまってしまった。 やっとテストできるよ。

### NetBSD/Alpha
aamine@asv800 % file ruby
ruby: ELF 64-bit LSB executable, Alpha (unofficial), version 1 (SYSV), for NetBSD, dynamically linked (uses shared libs), not stripped
 
aamine@asv800 % ./ruby -v test_pack.rb
ruby 1.9.0 (2004-01-01) [alpha-netbsd]
Loaded suite test_pack
Started
...
Finished in 0.035738 seconds.
 
3 tests, 19 assertions, 0 failures, 0 errors
 
 
### Solaris/SPARCv9
aamine@ultra30 % file ruby
ruby:           ELF 64-bit MSB executable SPARCV9 Version 1, dynamically linked, not stripped
 
aamine@ultra30 % ./ruby -v test_pack.rb
ruby 1.9.0 (2004-01-01) [sparc-solaris2.9]
Loaded suite test_pack
Started
...
Finished in 0.025441 seconds.
 
3 tests, 19 assertions, 0 failures, 0 errors
 
 
### Linux/i686
~/c/ruby % file ruby
ruby: ELF 32-bit LSB executable, Intel 80386, version 1, dynamically linked, not stripped
 
~/c/ruby % ./ruby -v test/ruby/test_pack.rb
ruby 1.9.0 (2004-01-01) [i686-linux]
Loaded suite test/ruby/test_pack
Started
...
Finished in 0.001345 seconds.
 
3 tests, 19 assertions, 0 failures, 0 errors

よしっ!

あーもう dev に投げて寝よ

名前
メールアドレス

<前の日 | この月 | 次の日>
2002|04|05|06|07|08|09|10|11|12|
2003|01|02|03|04|05|06|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|04|05|06|09|10|
2009|07|
2010|09|

Copyright (c) 2002-2007 青木峰郎 / Minero Aoki. All rights reserved. LIRS