[SCore-users-jp] invoke()処理時のException Signalについて

kameyama @ pccluster.org kameyama @ pccluster.org
2004年 5月 17日 (月) 14:06:58 JST


亀山です.

In article <20040517103851.8D09.T-AOKI @ pst.fujitsu.com> 青木 <t-aoki @ pst.fujitsu.com> wrotes:
> Itanium2 で score-src/SCore/scored/test/mpc++/signal を実行
> したところ、以下のメッセージが出力されました。
> **********************************************
> <0:0> SCORE: One local node ready.
> <0:0> ULT: Exception Signal (11)
> **********************************************
> 〔環境〕RHEL3.0(2.4.21-9.EL)、SCore5.6.1
>         gcc-3.2.3-24 / glibc-2.3.2-95.6
> 
> 調べたところ、signal.cc 内の invoke() を呼び出した直後に
> Exception Signal が発生しているようなのですが、
> http://ilab.is.s.u-tokyo.ac.jp/~ishikawa/LinuxIA64/porting.html
> によると、「setjmp/longjmpの実装は、glibc-2.2.4に依存してい
> ることに注意」という記事があったため glibc が影響している可
> 能性があるかもしれないと考えています。

setjmp/longjmp の実装に bug がありました.
uf[0].__jmpbuf[1] に入れる GP ですが, これは現在の GP ではなく,
呼び出し側の GP を入れる必要があります.
(RHEL Workstation 2,1 だと static link していれば GR の値が同じなので
大丈夫だったのですが, dynamic link にしたら問題が発生しました.)
    score-src/SCore/mttl-ult/ult/stack.c
の
     t->jmpbuf[0].__jmpbuf[1] =  getGP(); /* global pointer save */
の部分を
    t->jmpbuf[0].__jmpbuf[1] =   ((long*)func)[1];
に変更してみてください.

もっとも RHEL3 ではテストしていないので, 別の理由かもしれません.

                       from Kameyama Toyohisa



SCore-users-jp メーリングリストの案内