YamaKen
yamak****@bp*****
2005年 9月 7日 (水) 21:26:30 JST
ヤマケンです。 At Tue, 23 Aug 2005 17:57:28 -0700, jun.l****@gmail***** wrote: > これの追跡中に確認してみたのですが、スタック保護が正しく使えていません。例えば > Scm_eval_c_string() に次のようなコードがありますが、 > > ScmObj stack_start; > ScmObj str_port = SCM_NIL; > ScmObj ret = SCM_NIL; > > SigScm_gc_protect_stack(&stack_start); > > これを gcc (GCC) 4.0.1 20050617 (prerelease) (Debian 4.0.0-10) (IA32) で > コンパイルして、protect の直前で状態を調べると > (gdb) p &stack_start > $6 = (ScmObj *) 0xbfffe7d8 > (gdb) p &str_port > $7 = (ScmObj *) 0xbfffe7dc > (gdb) p $sp > $12 = (void *) 0xbfffe7d0 > で、%esp < &stack_start < &str_port となっていて、str_port が保護されて > いません。 だいぶ間が空いてしまいましたが、r1450で対策コードを入れてみまし た。SCM_GCC4_READY_GCを1に設定すると有効になりますが、まだ uim-scm側の対応コードがないのでsscmで試すだけしかできませんが。 実は私のところにはいまだにGCC4環境が無かったりするので、興味のあ る方は試して頂けるとありがたいです。しばらく様子を見て動作状況と APIに問題がないようならuim-scm側の対応に進みたいと思います。 trunkのSIODでも同様の問題が発生しているはずなのでr5rsでコードが 落ち着いたらtrunkにも移植しようと思います。4.9にはちょっと間に合 わないですかね。 #uim_quit()問題はこれが原因だったりするでしょうか ------------------------------- ヤマケン yamak****@bp*****