V850のブレイクポイント

備忘録,っていうか,まとめ.数ヶ月後の某誌を見れば,何にブチきれていたかが判るかもですね.

かつて,初期V850には,dbtrap命令はありませんでした.
tarp命令は4バイトでV850の最小命令長2バイトより大きいため,
ブレイクポイント命令として使えませんでした.(なぜ使えないかは,少し考えると判ります.)
そこで,2バイト命令であるbranch-myself命令を利用します.
命令の通称が示すとおり,この命令は無限ループします.(ブレイクにはなりません.)


そこで,インターバルタイマを併用します.
インターバルタイマ割込みがかかったときの戻り番地がbranch-myself命令で,
かつgdbstub(もしくは同等のROMデバッガ)が保持しているブレイクポイント
のいずれかと一致するとき,ブレイクとみなします.


GDB*1も,この方針に則ったgdbstubを暗に仮定しています.v850-stub.c 辺りを見てみましょう.

ターゲット依存の話題ですが,デバッガ記事の筆者なら,知っていて欲しい基本知識です*2
google先生に聞くと日本語の(詳細な)情報を引っ張ってきてくれます.

*1:6.6くらいまでは間違い無くこれに沿っている

*2:トリッキーだから原稿の枚数も稼ぎやすいネタなのにね.