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