From: nobu.nakada@... Date: 2002-08-06T19:29:14+09:00 Subject: [ruby-dev:17947] Re: ruby-bugs-ja incoming/277 なかだです。 At Tue, 6 Aug 2002 18:56:50 +0900, Takaaki Tateishi wrote: > Breakpoint 1, proc_options (argc=0, argv=0xbfffedf4) at ../ruby.c:719 > 719 if (e_script) { > (gdb) p &e_script > $1 = (VALUE *) 0xbfffec14 > (gdb) p rb_gc_stack_start > $2 = (VALUE *) 0xbfffec04 やはりe_scriptが、GCでマークされるスタックの範囲から外れてます ね。-O2のときだけ落ちるのは、Init_stack()のスタックの使用量が変 わって、rb_gc_stack_startに使われるstartの位置が40バイトほどス タックトップのほうにずれるからだと思います。 とりあえずこれだとどうでしょう。 Index: eval.c =================================================================== RCS file: /cvs/ruby/src/ruby/eval.c,v retrieving revision 1.309 diff -u -2 -p -r1.309 eval.c --- eval.c 3 Aug 2002 12:27:33 -0000 1.309 +++ eval.c 6 Aug 2002 10:24:33 -0000 @@ -1058,5 +1058,5 @@ ruby_init() #endif - Init_stack(0); + Init_stack(&state); Init_heap(); PUSH_SCOPE(); @@ -1178,4 +1178,5 @@ ruby_options(argc, argv) int state; + Init_stack(&state); PUSH_TAG(PROT_NONE); if ((state = EXEC_TAG()) == 0) { Index: gc.c =================================================================== RCS file: /cvs/ruby/src/ruby/gc.c,v retrieving revision 1.95 diff -u -2 -p -r1.95 gc.c --- gc.c 26 Jul 2002 06:12:38 -0000 1.95 +++ gc.c 6 Aug 2002 10:24:37 -0000 @@ -1215,7 +1215,5 @@ Init_stack(addr) rb_gc_stack_start = _SEND; #else - VALUE start; - - if (!addr) addr = &start; + if (!addr) addr = &addr; rb_gc_stack_start = addr; #endif -- --- 僕の前にBugはない。 --- 僕の後ろにBugはできる。 中田 伸悦