artonです。

OS Xで、rjbをirbを利用して動かすとBugになるというレポートが来たので試し
たところ、確実に再現するようです(ruby-1.8.4 リリース版)。
まったく見当がつかないので助けてください。

オリジナルの報告者のレポートは以下です。
スクリプト:rjb_irb.rb
require 'rubygems'
require 'rjb'

Rjb::load(nil, [])

実行時の出力:
$ irb -r bin/rjb_irb.rb
./bin/rjb_irb.rb:9: [BUG] Bus Error
ruby 1.8.4 (2005-12-24) [powerpc-darwin8.4.0]

Abort trap

以下、私の環境で再現した様子です。
pbk-15:~/test arton$ irb -rrjb_irb.rb
./rjb_irb.rb:5: [BUG] Bus Error
dl:/System/Library/Frameworks/JavaVM.framework/Libraries/libjvm_compat.dylib, 9
ruby 1.8.4 (2005-12-24) [powerpc-darwin8.6.0]

Abort trap

dl:/System/Library/Frameworks/JavaVM.framework/Libraries/libjvm_compat.dylib, 9
は、dlのhanlde.cにパッチしてdlopenに与えている引数を出力させたもので、最
初の引数は正しいパスを示しています。2番目の引数も問題ないと思います。
というよりも、irb抜きの場合はrjbとdlは正しく動いているようにみえます。し
たがって、dlの問題というよりは、irbとの合わせ技かつOS X固有(というのは、
Linux 2.4.21の環境では再現しないので)で何かがあるのではないかと思います。
なお、関係あるかどうかはわかりませんが、rjbはRubyGems経由でロードされて
います。

このときのバックトレースは以下のとおりです。

Program received signal EXC_BAD_ACCESS, Could not access memory.
Reason: KERN_PROTECTION_FAILURE at address: 0x00000000
0x90131a80 in memcmp ()
(gdb) bt
#0  0x90131a80 in memcmp ()
#1  0x907f180c in __CFInitialize ()
#2  0x9083653c in __CFSetupFoundationBridging ()
#3  0x929af4f4 in _NSToDoAtProcessStart ()
#4  0x9291fa60 in _NSInitializePlatform ()
#5  0x90a3f548 in call_class_loads ()
#6  0x90a3f45c in call_load_methods ()
#7  0x90a3a2c8 in map_images ()
#8  0x8fe0f6e0 in __dyld__ZN16ImageLoaderMachO14doNotificationE15dyld_image_modejPK15dyld_image_info ()
#9  0x8fe033f8 in __dyld__ZN4dyld12notifyAddingERSt6vectorIP11ImageLoaderSaIS2_EE ()
#10 0x8fe0ddb4 in __dyld__ZN11ImageLoader4linkERKNS_11LinkContextENS_15BindingLazinessENS_18InitializerRunningEj ()
#11 0x8fe03ea4 in __dyld__ZN4dyld4linkEP11ImageLoaderNS0_15BindingLazinessENS0_18InitializerRunningE ()
#12 0x8fe09c4c in __dyld_dlopen ()
#13 0x90031014 in dlopen ()
#14 0x0070dd90 in rb_dlhandle_initialize (argc=0, argv=0x9086e410, self=3775556) at handle.c:66
#15 0x00011af8 in rb_call0 (klass=3777136, recv=3775556, id=2953, oid=2953, argc=1, argv=0xbfff9770, body=0x39a130, flags=2) at eval.c:5692
#16 0x000124fc in rb_call (klass=3777136, recv=3775556, mid=2953, argc=1, argv=0xbfff9770, scope=1) at eval.c:5920
#17 0x00012e84 in rb_obj_call_init (obj=3775556, argc=1, argv=0xbfff9770) at eval.c:7401
#18 0x0003dbf0 in rb_class_new_instance (argc=1, argv=0xbfff9770, klass=0) at object.c:1607
#19 0x00011af8 in rb_call0 (klass=3782616, recv=3783256, id=24737, oid=24737, argc=1, argv=0xbfff9770, body=0x39b7c4, flags=0) at eval.c:5692
#20 0x000124fc in rb_call (klass=3782616, recv=3783256, mid=24737, argc=1, argv=0xbfff9770, scope=1) at eval.c:5920
#21 0x000131ac in vafuncall (recv=2415924240, mid=0, n=4, ar=0x2) at eval.c:5997
#22 0x0001330c in rb_funcall (recv=0, mid=2424759312, n=0) at eval.c:6014
#23 0x005a9ce8 in load_jvm (jvmtype=0x0) at load.c:108
#24 0x005aa00c in create_jvm (pjenv=0xbfff99b8, vm_args=0xbfff99c4, userpath=0x5b1b18 ".", argv=4) at load.c:194
#25 0x005ad03c in rjb_s_load (argc=0, argv=0x9086e410, self=0) at rjb.c:1540
#26 0x00011af8 in rb_call0 (klass=3785816, recv=3785876, id=9241, oid=9241, argc=0, argv=0x0, body=0x39c444, flags=0) at eval.c:5692
#27 0x000124fc in rb_call (klass=3785816, recv=3785876, mid=9241, argc=0, argv=0x0, scope=0) at eval.c:5920
#28 0x0000f6e4 in rb_eval (self=1960296, n=0x9086e410) at eval.c:3381
#29 0x00019530 in rb_load (fname=3177628, wrap=0) at eval.c:6715
#30 0x00019bf8 in rb_require_safe (fname=3177788, safe=0) at eval.c:7035
#31 0x00011af8 in rb_call0 (klass=1965196, recv=1816296, id=9249, oid=9249, argc=1, argv=0xbfffb1d0, body=0x1d0f98, flags=2) at eval.c:5692
#32 0x000124fc in rb_call (klass=1965196, recv=1816296, mid=9249, argc=1, argv=0xbfffb1d0, scope=1) at eval.c:5920
#33 0x0000f918 in rb_eval (self=1816296, n=0x9086e410) at eval.c:3396
#34 0x0000ee18 in rb_eval (self=1816296, n=0x9086e410) at eval.c:3196
#35 0x0000cf08 in rb_yield_0 (val=3178928, self=1816296, klass=0, flags=0, avalue=0) at eval.c:4897
#36 0x000228d8 in rb_ary_each (ary=3185188) at array.c:1128
#37 0x00011af8 in rb_call0 (klass=1936776, recv=3185188, id=3841, oid=3841, argc=0, argv=0x0, body=0x1d8964, flags=0) at eval.c:5692
#38 0x000124fc in rb_call (klass=1936776, recv=3185188, mid=3841, argc=0, argv=0x0, scope=0) at eval.c:5920
#39 0x0000ea74 in rb_eval (self=1816296, n=0x9086e410) at eval.c:3120
#40 0x00012038 in rb_call0 (klass=11033, recv=74472, id=3221214944, oid=0, argc=75004, argv=0x0, body=0xbfffdaa0, flags=0) at eval.c:5826
#41 0x000124fc in rb_call (klass=1816216, recv=1816296, mid=11033, argc=0, argv=0x0, scope=0) at eval.c:5920
#42 0x0000f6e4 in rb_eval (self=1816296, n=0x9086e410) at eval.c:3381
#43 0x00012038 in rb_call0 (klass=9969, recv=74472, id=3221217920, oid=0, argc=75004, argv=0xbfa1fff4, body=0x0, flags=-1073749308) at eval.c:5826
#44 0x000124fc in rb_call (klass=1816216, recv=1816296, mid=9969, argc=1, argv=0xbfffe2c0, scope=0) at eval.c:5920
#45 0x0000f6e4 in rb_eval (self=1816296, n=0x9086e410) at eval.c:3381
#46 0x00012038 in rb_call0 (klass=1, recv=3186348, id=1816296, oid=0, argc=5041, argv=0x122e8, body=0xbfffee30, flags=-1073746316) at eval.c:5826
#47 0x000124fc in rb_call (klass=1816216, recv=1816296, mid=5041, argc=1, argv=0xbfffee70, scope=0) at eval.c:5920
#48 0x0000f6e4 in rb_eval (self=1960296, n=0x9086e410) at eval.c:3381
#49 0x00017f24 in ruby_exec_internal () at eval.c:1543
#50 0x00017f6c in ruby_exec () at eval.c:1563
#51 0x0001ad44 in ruby_run () at eval.c:1573
#52 0x000027f0 in main (argc=3, argv=0xbffffabc, envp=0x0) at main.c:46
(gdb) 

何か試したほうが良いことなどありましたら、こちらで試しますので教えてくだ
さい。
それでは。

-- 
arton <artonx / yahoo.co.jp>

--------------------------------------
Let's start Yahoo! Auction  -  Free Campaign Now!
http://pr.mail.yahoo.co.jp/auction/