GDBに固有の問題?

VDSP++では発生しないものの、GDBを使うとたまに異常な割り込みを起こして停止する問題が発生しました。たまにというのが曲者で、出るときにはガンガン出ます。調べたところ、どうやらGDBがプログラムをロードするときにプロセッサを明示的にリセットしないのが原因ではないかと思えてきました。
リセットしない場合、IPENDやSIC_ISRがGDBによって中断されたままですし、内蔵ペリフェラルもリセット後とは違う状態にあります。動作しないのも不思議はありません。
この問題はGDBコマンドラインから

monitor reset

とコマンドを打つことで解決するはずですが、うーむ。百発百中では無いような気がします。startup.Sの冒頭でIPENDSIC_ISRを調べて、リセット状態でなければソフトリセットを実行するようなおせっかいコードを入れることも考えています。入れてもGNU環境オンリーにします。

これに関連しますが

割込み時のコンテキスト退避、復帰を少しいじる方向で作業しています。現在、割り込み及びCPU例外ハンドラの先頭ではFPを保存していません。ユーザーハンドラに制御が移る時に呼び出された側で退避するからです。
これを変更して、コンテキストの退避の冒頭でlink命令を実行するように変更します。こうすると、FPのリンクがスタックに保存されます。異常な割り込みあるいは例外を受けて停止した際、スタック上のFPのリンクをたどって、割り込み・例外発生時のレジスタの一覧を容易に取得できるようになります。