From: IWAMURO Motonori Date: 1999-12-17T19:49:07+09:00 Subject: [ruby-dev:8671] Re: [BUG?] core dump `ruby -r debug' 岩室@富士通です。 In message "[ruby-dev:8631] Re: [BUG?] core dump `ruby -r debug'" on 99/12/11, IWAMURO Motonori writes: > スタックフレームとか操作している部分が付近にあるよーですので、もしか > してgccの最適化の問題? # うぁぁぁ(^^; 外れでした(^^; 疑ってごめんね>gcc eval.cのrb_load()でPUSH_FRAME()しています(4756行目)が、その後 POP_FRAME()するまでの間にruby_frame->last_classの値が初期化されないの で、スタックフレーム上に残ったゴミが入ったままになってしまいます。この 状態でmodule_setup()までたどり付くと、ruby_frame->last_classを call_trace_func()に渡しているのが間接的原因になってお亡くなりになるよ うです。 とりあえずこんな(↓)風にいじってみましたがこれで正しいのかどうかはわ かりません(^^; 一応コケなくなりましたが……。 # 1.4.xでコケないのはmodule_setup()でruby_frame->last_classを使ってい # ないからですね、きっと……。 BEGIN---BEGIN---BEGIN---BEGIN---BEGIN---BEGIN---BEGIN---BEGIN---BEGIN diff -u eval.c.o1 eval.c --- eval.c.o1 Fri Dec 17 19:27:27 1999 +++ eval.c Fri Dec 17 19:27:43 1999 @@ -4755,6 +4755,7 @@ } PUSH_FRAME(); ruby_frame->last_func = 0; + ruby_frame->last_class = 0; ruby_frame->self = ruby_top_self; ruby_frame->cbase = (VALUE)rb_node_newnode(NODE_CREF,ruby_class,0,0); PUSH_SCOPE(); END---END---END---END---END---END---END---END---END---END---END---END -- 岩室元典 [E-Mail: vmi@kw.netlaputa.ne.jp / iwa@mmp.fujitsu.co.jp] 「流行ってるの? ([雑誌] ねこめ〜わく …とか いろいろ 流行ってるの? ぴこぴこはんまー?」 「ぴこぴこぶんぶん」竹本泉/宙出版)