From: "藤本尚邦 / FUJIMOTO Hisakuni" Date: 1998-05-26T13:37:11+09:00 Subject: [ruby-dev:2754] Re: experimental release 1.1b9_21 藤本です、こんにちは。 うちでもようやくBeOS R3が動くようになった(PowerPC版とIntel版の両方と も)ので、1.1b9_22に前田さんの[ruby-dev:2708]のパッチをあてて作ってみま した。PowerPC版を作るときに多少の修正が必要だったので、パッチをメール の最後に添付します。両バージョンで簡単な動作確認(make test)をしてます。 変更点は、 BeOS R3 for PowerPC版で、シンボル名ファイルのsuffixが、.expでない といけないみたいなので、それに合わせてconfigureとext/extmk.rb.inを 修正 BeOSで、C++で書いた拡張モジュールの初期化関数呼び出しに対応(dln.c) です。パッチは、ruby-1.1b9_22.tar.gzに前田さんの[ruby-dev:2708]のパッ チを当てたものとの差分にしてあります。 #こういうときruby-1.1b9_22.tar.gzとの差分にするのとどっちの方が良い #のでしょう? BeOSでコンパイル時の警告を減らしたいので、MakefileのCFLAGSから -I${prefix}/includeを取り除きたかったのですが、書き方がよくわからなかっ たので断念しました (^^; それから From: "MAEDA Shugo" Subject: [ruby-dev:2708] Re: experimental release 1.1b9_21 Date: Wed, 20 May 1998 06:35:38 +0900 > 前田です。 > > irb(main):001:0> require 'kconv' > true > irb(main):002:0> require 'socket' > (irb):2: [BUG] Segmentation fault > Abort > > のようにkconvだとOKなのですが、socketだとNGです:-( > # socketの場合libnetをリンクしてるせいなのかな...。 について原因追求はしてないのですが、現象としてはrb_define_class()を 呼ぶときにNGになるみたいです。単純に Init_testmodule() { rb_define_module("TestModule"); } のような拡張モジュールはOKですが Init_testmodule() { rb_define_class("TestClass", cObject); } だとNGになります。さらにこの問題が起きるのはなぜかIntel版だけみたいで、 PowerMac版はどちらもOKです。 ============================================================= 藤本尚邦 FUJIMOTO Hisakuni hisa@imasy.or.jp ============================================================= diff -ru ruby-1.1b9_22-maeda/configure ruby-1.1b9_22-maeda-hisa/configure --- ruby-1.1b9_22-maeda/configure Tue May 26 12:10:44 1998 +++ ruby-1.1b9_22-maeda-hisa/configure Tue May 26 12:21:33 1998 @@ -3486,10 +3486,10 @@ beos*) LDSHARED="ld -xms" case "$host_cpu" in powerpc*) - DLDFLAGS="-f ruby.def -lbe -lroot -ldll" + DLDFLAGS="-f ruby.exp -lbe -lroot glue-noinit.a init_term_dyn.o start_dyn.o" ;; *) - DLDFLAGS="ruby.def -lbe -lroot /boot/develop/lib/x86/glue-noinit.a" + DLDFLAGS="ruby.def -lbe -lroot glue-noinit.a init_term_dyn.o start_dyn.o" ;; esac rb_cv_dlopen=yes ;; @@ -3863,7 +3863,7 @@ echo creating ruby.def case "$host_cpu" in powerpc*) - cp beos/ruby.def.in ruby.def + cp beos/ruby.def.in ruby.exp ;; *) echo EXPORTS > ruby.def diff -ru ruby-1.1b9_22-maeda/dln.c ruby-1.1b9_22-maeda-hisa/dln.c --- ruby-1.1b9_22-maeda/dln.c Tue May 26 12:05:32 1998 +++ ruby-1.1b9_22-maeda-hisa/dln.c Tue May 26 12:21:40 1998 @@ -1365,6 +1365,14 @@ err_stat = get_image_symbol(img_id, buf, B_SYMBOL_TYPE_TEXT, &init_fct); + if (err_stat != B_NO_ERROR) { + char real_name[1024]; + strcpy(real_name, buf); + strcat(real_name, "__Fv"); + err_stat = get_image_symbol(img_id, real_name, + B_SYMBOL_TYPE_TEXT, &init_fct); + } + if ((B_BAD_IMAGE_ID == err_stat) || (B_BAD_INDEX == err_stat)) { unload_add_on(img_id); LoadError("Failed to lookup Init function %.200s", file); diff -ru ruby-1.1b9_22-maeda/ext/extmk.rb.in ruby-1.1b9_22-maeda-hisa/ext/extmk.rb.in --- ruby-1.1b9_22-maeda/ext/extmk.rb.in Tue May 26 12:11:05 1998 +++ ruby-1.1b9_22-maeda-hisa/ext/extmk.rb.in Tue May 26 12:21:49 1998 @@ -356,8 +356,13 @@ mfile.close if PLATFORM =~ /beos/ + if PLATFORM =~ /^powerpc/ then + deffilename = "ruby.exp" + else + deffilename = "ruby.def" + end print "creating ruby.def\n" - open("ruby.def", "w") do |file| + open(deffilename, "w") do |file| file.print("EXPORTS\n") if PLATFORM =~ /^i/ file.print("Init_#{target}\n") end diff -ru ruby-1.1b9_22-maeda/ruby.h ruby-1.1b9_22-maeda-hisa/ruby.h --- ruby-1.1b9_22-maeda/ruby.h Tue May 26 12:05:33 1998 +++ ruby-1.1b9_22-maeda-hisa/ruby.h Tue May 26 13:06:27 1998 @@ -499,8 +499,8 @@ static char *libs_to_be_linked[] = { EXTLIB, 0 }; #endif -#endif - #if defined(__cplusplus) } /* extern "C" { */ #endif + +#endif /* ifndef RUBY_H */