検死情報

プログラムのバグの中には致命的なものもあります。保護違反や特権命令、未実装命令の実行、非整列アクセスなどがそれです。Blackfinの場合、それらは例外かハードウェア・エラーを引き起こします。これらが発生したら、復帰は不能です。製品としてはリセットするか、エラーを表示して停止するしかありません。しかしデバッグ中なら最低限の情報は欲しいところ。
欲しい情報のひとつは例外*1発生時のレジスタの値です。TOPPERS/JSPの場合、ハンドラがリッチなので例外発生時のレジスタはスタックのどこか深いところに積まれており、手で手繰るのは面倒です。例外ハンドラが致命的だと判断した時点で、スタック・ポインタを手繰ってどこに問題があったかチェックする機能があると便利です。
もうひとつはメモリ・ダンプです。プログラムが利用したメモリを低速でもいいので全部引っ張りだせると助かります。この場合、上のスタックの解析はデータを吸い出したPC側でも可能です。リンカのシンボル情報が役に立つでしょう。
このような致命的なエラーの後のデバッグ情報をポスト・モーテム・ダンプと呼びます。Post Mortemとは「死後」つまり、検死用の情報です。
とりあえずメモリダンプを16進で作って、シンボル情報をさしはさみ、例外発生時のレジスタを拾い上げてくれるだけでもずいぶんいいや、と思っています。今のところどうすればいいかアイデアはありませんが、ダンプとリンカのmap情報からelfを生成するコンバータを作れば、検死をデバッガで解析できるかも。

*1:あるいはハードウェア・エラー