[Anthy-dev 2362] Re: r5rs: Scm_eval_c_string バグ, スタック保護

Back to archive index

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*****



Anthy-dev メーリングリストの案内
Back to archive index