[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[netbsd,09282] Re: crashme on 68040 or hp300



<200603281028.k2SAS3ia014921@xxxxxxxxxxxxxxxxxxxxxxxxxxx>の記事において
itohy@xxxxxxxxxxさんは書きました。

> 命令ワードの上位 4bit が f な命令は、
> コプロセッサ(68030)または内蔵FPU(68040)で処理されて、
> 処理できないものは F-line trap (vector #11) になります。
> 
> ここ(locore.s::fpfline)で、
> 030 (FPEなし)は直ちに illegal instruction の処理、
> 040 は fpsp を呼びます。
> 
> といわけで fpsp が怪しいと思うのですがどうでしょうか。

お返事ありがとうございます。

とりあえず options FPSP をはずしたカーネルで試してみたり
vector.s で fpfline に飛ばずにいきなり illinst に飛ばすように
してみたりしたのですが、いずれも同じように固まってしまいました。
(そのとき cc(1)他の通常プログラムは illegal instruction で落ちる)
なので、どうも handler に飛ぶ前に何かおかしくなってる感じです。

実は先の program の (*bomb)() を呼ぶ前の printf() をはずすと
今度は固まらずに segmentation fault したり bus error になったり
やっぱり固まったりする一方で、この printf() の代わりに
m68k_sync_icache(bomb, BUSSIZE) を呼ぶとやっぱり 100% 固まるので、
cache まわりかなあという気もします。

が、それだけではなくて飛び先の命令の種類にも関係する感じなので、
実はいろいろと条件が複雑だったりする? うーん。
---
Izumi Tsutsui