EABI 組み込み PowerPC アプリケーションで 0x500 外部/デクリメンタ例外を処理するアセンブラ ルーチンを作成しています。
0x500 ベクトル ポイントから呼び出されたアセンブラー ルーチンで、'C' のハンドラー関数に分岐する前に、コンテキスト保存レジスターにメモリを使用したいと考えています。
i) 例外モデルは、例外ハンドラが実行されるまでに前の命令が終了することを保証し、かつ ii) 呼び出し規約は、解放された新しいスタック領域を使用する前に、新しい関数に入ると最初にスタック ポインタ (r1) を更新するように見えるためです。それを移動することによって(そしてスタックポインタを関数の最後にあった場所に戻します)
r1 を安全に使用して、例外処理ルーチンの通常のスタックに余裕を持たせることができるように思えます。ただし、明らかに呼び出し規約を順守し、スタックを見つけた方法に戻し、SRR0 と SRR1 が確実に使用されていることを確認する必要があります。無修正。
処理でスタックを使用する例外を入れ子にすることは許可しません (ただし、実際にこの方法を使用しても問題があるかどうかはわかりません)。
これは賢明なアプローチだと思いますか、それとも例外処理に別のスタックを使用する必要がありますか? - これは、それ自体の問題をもたらす可能性があると考えています。