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 を実行するような設定をしなくても JTAGgdb に接続できる。これはかっこいい。

そういえば、デバッガの理論となんとかは技術的な内容らしいです。今度買おう。

以下で使用しているツールは KPIT による gnush-v0703-elf の rpmaliendeb に変換したもの。

$ 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"