gdbstub
gdbstub
最近は CQ の雑誌を全く買ってなかったのだがインターフェースが gdbstub の特集だったから買ってきた。と思ったらこれって某所でアレなやつか。こっちのはステップ実行できるみたい。
http://sourceforge.net/projects/gdbstubs/
ちょうど良く友達から SH-2 のボードもらったので少しいじってみた。モジュールスタンバイの罠にしっかりはまった後に gdb と接続できたと思ったら TRAPA の例外ハンドラに分岐するあたりで何かおかしいみたい。SH のマニュアル読んだほうがいいかも。
gdbstub って誰かが作ったやつしかないのかと思ってたら gdb-6.7.1/gdb/sh-stub.c にそれらしいのが入ってた。本来ならこれをいじるのが正解かもしれない。
MicroBlaze はどういう仕組みかしらないけど明示的に stub を実行するような設定をしなくても JTAG で gdb に接続できる。これはかっこいい。
そういえば、デバッガの理論となんとかは技術的な内容らしいです。今度買おう。
以下で使用しているツールは KPIT による gnush-v0703-elf の rpm を alien で deb に変換したもの。
$ sh-elf-gdb
GNU gdb 6.6 Copyright (C) 2006 Free Software Foundation, Inc. GDB is free software, covered by the GNU General Public License, and you are welcome to change it and/or distribute copies of it under certain conditions. Type "show copying" to see the conditions. There is absolutely no warranty for GDB. Type "show warranty" for details. This GDB was configured as "--host=i686-pc-linux-gnu --target=sh-elf". 0x00002410 in ?? () (gdb)
$ sh-elf-objdump -D sh-stub.elf | lv
000023e8 <_start>: 23e8: 00 09 nop 23ea: e0 00 mov #0,r0 23ec: e1 01 mov #1,r1 23ee: e2 02 mov #2,r2 23f0: e3 03 mov #3,r3 23f2: e4 04 mov #4,r4 23f4: e5 05 mov #5,r5 23f6: e6 06 mov #6,r6 23f8: e7 07 mov #7,r7 23fa: e8 08 mov #8,r8 23fc: e9 09 mov #9,r9 23fe: ea 0a mov #10,r10 2400: eb 0b mov #11,r11 2402: ec 0c mov #12,r12 2404: ed 0d mov #13,r13 2406: ee 0e mov #14,r14 2408: d0 02 mov.l 2414,r0 ! 236c <_gdb_sta rtup> 240a: 40 0b jsr @r0 240c: 00 09 nop 240e: c3 21 trapa #33 <- 32 かも 2410: 00 09 nop 2412: 00 09 nop
sh2-704x.c
219 | ".section .text\n" 220 | ".align 2\n" 221 | ".global _start\n" 222 | ".global start\n" 223 | "start:\n" 224 | "_start:\n" 225 | " nop\n" 226 | " mov #0, r0\n" 227 | " mov #1, r1\n" 228 | " mov #2, r2\n" 229 | " mov #3, r3\n" 230 | " mov #4, r4\n" 231 | " mov #5, r5\n" 232 | " mov #6, r6\n" 233 | " mov #7, r7\n" 234 | " mov #8, r8\n" 235 | " mov #9, r9\n" 236 | " mov #10, r10\n" 237 | " mov #11, r11\n" 238 | " mov #12, r12\n" 239 | " mov #13, r13\n" 240 | " mov #14, r14\n" 241 | " mov.l gdbstartup_k, r0\n" 242 | " jsr @r0\n" 243 | " nop\n" 244 | " trapa #33\n" 245 | " nop\n"