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

Zurück zum Archiv-Index

d+r****@vdr***** d+r****@vdr*****
2005年 9月 20日 (火) 12:43:28 JST


On Sun, Sep 18, 2005 at 11:20:29PM +0900, YamaKen wrote:
> > > > > だいぶ間が空いてしまいましたが、r1450で対策コードを入れてみまし
> > > > > た。SCM_GCC4_READY_GCを1に設定すると有効になりますが、まだ
> > > > > uim-scm側の対応コードがないのでsscmで試すだけしかできませんが。
> > 
> > > 問題は暗黙のインライン展開です。
> > (snip)
> > > …と、ここまで書いて気付いたんですが、インライン展開を防ぐ事が目
> > > 的なら一旦&eval_strをstorage-protection.oの関数に通してから
> > > (*f)(exp)の形で呼ぶようにすれば関数として呼ばれる事が保証できま
> > > すね。ちょっとその形に変更してみます。
> > 
> > r1471でそのように変更しました。APIについて他の提案がなければ
> > uim-scmまわりの追従とtrunkへの移植に進もうと思うので、関心のある
> > 方はご確認お願いします。
> 
> r1518のtrunkで全面的に有効にしました。GCC4な環境の方は試して頂け
> るとありがたいです。

早速試してみましたが、何か入力しようとすると
高頻度で SEGV してしまいます。環境は次の通りです。

uim: trunk r1525
OS:  Debian GNU/Linux (unstable)
GCC: gcc バージョン 4.0.2 20050917 (prerelease) (Debian 4.0.1-8)
configure: --host=i486-linux-gnu --build=i486-linux-gnu \
		--prefix=/usr --mandir=/usr/share/man \
		--infodir=/usr/share/info --sysconfdir=/etc \
		--libexecdir=/usr/lib/uim --enable-debug \
		--with-fep --with-anthy --with-canna \
		--with-edit \
		--with-m17nlib --with-x --with-gtk --enable-dict
IM: uim-skk

gimp と xchat でのバックトレースをつけておきます。

gimp の場合

#0  0x42287b42 in ?? ()
#1  0x421d6456 in uim_init_key_subrs () from /usr/lib/libuim.so.0
#2  0x421d6d6e in uim_init_key_subrs () from /usr/lib/libuim.so.0
#3  0x421e9140 in ?? () from /usr/lib/libuim.so.0
#4  0x422e3f78 in ?? ()
#5  0x4228a508 in ?? ()
#6  0xbf934498 in ?? ()
#7  0x421db797 in uim_init_key_subrs () from /usr/lib/libuim.so.0
Previous frame inner to this frame (corrupt stack?)

xchat の場合

#0  0x00005396 in ?? ()
#1  0x41029e48 in uim_helper_read_proc () from /usr/lib/libuim.so.0
#2  0x410042d3 in im_uim_parse_helper_str (str=0x823ae20 "\001")
    at gtk-im-uim.c:1029
#3  0x405ba8b7 in g_vasprintf () from /usr/lib/libglib-2.0.so.0
#4  0x405913f1 in g_main_context_dispatch () from
/usr/lib/libglib-2.0.so.0
#5  0x40594647 in g_main_context_check () from /usr/lib/libglib-2.0.so.0
#6  0x40594b98 in g_main_loop_run () from /usr/lib/libglib-2.0.so.0
#7  0x40131989 in gtk_main () from /usr/lib/libgtk-x11-2.0.so.0
#8  0x08057eab in ?? ()
#9  0x080f8ce0 in ?? ()
#10 0x080ac408 in stdin ()
#11 0xbfa337e8 in ?? ()
#12 0x0809030d in xchat_free ()
#13 0x0809030d in xchat_free ()
#14 0x40604eb0 in __libc_start_main () from /lib/tls/i686/cmov/libc.so.6
#15 0x080533b1 in ?? ()

また、uim/uim-scm.h で UIM_SCM_GCC4_READY_GC を 0 とした場合、
すぐに SEGV するということは今のところありません。

> また、しばらく前からuim_quit()でSEGVが発生する不具合が報告されて
> いますが、もしGCC4の最適化が原因だとしたらこの対策で解消するかも
> しれません。

手元では

2005/06/27 - uim 0.4.7 を GCC3 でコンパイル
2005/07/04 - Debian で GCC4 がデフォルト C コンパイラに
2005/07/27 - uim 0.4.8alpha1 を GCC4 でコンパイル

という時系列になっています。
-- 
Regards,
	dai




Anthy-dev メーリングリストの案内
Zurück zum Archiv-Index