不具合が起こる条件 ¶
- Instruction fetch される時に、
- パイプラインが、結構、詰まってる
- この詳細は ARM のパイプラインの詳細を知らないと分からないなぁ...
- prefetch abort が起こるところに実行が移ろうとする
- 該当の命令アドレスに対応した I-cache に "ldrd 命令" が載っかっている
- ldrd 命令のパターンはこんな感じ:
[COND]000PUIW0[Rn][Rd][addr_mode]1101[addr_mode]- ここで有効な ldrd 命令であること
- 一般の ARM の話として
- PW = 00 or 11
- COND != 1111
- ldrd 命令の特有の問題として
- destination のレジスタ Rd は偶数 (最終bit は0)
要約(^^;すると、パイプラインが詰まっていて、prefetch abort という例外が発生したとき、例外からの戻りアドレスに当るキャッシュに特定の値(ゴミ)があると、例外からの戻りアドレスが一命令先になる。
----------
マイナーな CPU にはこんな性質の悪い bug もあるということか。
----------
うーん、仕事でもないのにこんな bug を見つけられるなんて...、そのモチベーションはどこからくるんだ?
0 件のコメント:
コメントを投稿