2009年1月8日木曜日

昨日の書き込みで、GDBがステップ実行されない件について書いたけど、どうも気持ち悪いの引き続き調べてみた。
原因は、リモートデバッグの's'コマンドに対して、ブレークしたときにはSIGILLではなく、SIGTRAPを返さないといけないようだ。そんなこと、どこに書いてある?!いちおうGDBのマニュアルとか読んでみたんだけどなー。

実際には、これに気付く前から's'で止まったときにはSIGTRAPをつもりで作ってはいた。しかし、うまく動いていなかっただけだった。ターゲットのARMのマニュアルを見直してみると、BKPT命令はデバッグモニタ割り込みではなくて、HardFault割り込みで実行される<ことがある>らしい。ってか、レジスタをいじってBKPTがデバッグモニタ割り込みで動作するように切り替えないといけなかったらしい・・・。そんな落とし穴・・・簡単に気付くかよ!ってんだ。

0 件のコメント: