RISC-V Debug

RISC-VのDebug部分を作っています。

仕様書は「RISC-V External Debug Support」ですね。

Version 0.13.2が現在のバージョンです。

RISC-Vのデバッグ環境は下図のようにRISC-VにDebug Modile(DM)を用意して、OpenOCDから接続することでデバッグを行っていきます。

デバッグ回路は難しくなく、JTAG-TAPを組んでしまえばあとはOpenOCDが制御してくれます。

JTAG部分はDTMに含まれます。

あとはDMがデバッグのコントローラになって、RISC-Vのコアを制御します。

ホスト側から実行するとこんな感じにログが見えます。

$ openocd -d -f riscv2.cfg 
Open On-Chip Debugger 0.10.0+dev-00626-g7eaf60f1b (2019-08-24-19:46)
Licensed under GNU GPL v2
For bug reports, read
    http://openocd.org/doc/doxygen/bugs.html
User : 13 3 command.c:544 command_print(): debug_level: 3
Debug: 14 3 options.c:184 add_default_dirs(): bindir=/usr/local/bin
Debug: 15 3 options.c:185 add_default_dirs(): pkgdatadir=/usr/local/share/openocd
Debug: 16 3 options.c:186 add_default_dirs(): exepath=/usr/local/bin
Debug: 17 3 options.c:187 add_default_dirs(): bin2data=../share/openocd
Debug: 18 3 configuration.c:42 add_script_search_dir(): adding /home/hidemi/.openocd
Debug: 19 3 configuration.c:42 add_script_search_dir(): adding /usr/local/bin/../share/openocd/site
Debug: 20 3 configuration.c:42 add_script_search_dir(): adding /usr/local/bin/../share/openocd/scripts
Debug: 21 3 configuration.c:97 find_file(): found riscv2.cfg
Debug: 22 3 command.c:143 script_debug(): command - ocd_command ocd_command type ocd_echo RISC-V JTAG access interface
Debug: 23 3 command.c:143 script_debug(): command - echo ocd_echo RISC-V JTAG access interface
User : 25 3 command.c:790 jim_echo(): RISC-V JTAG access interface
Debug: 26 3 command.c:143 script_debug(): command - ocd_command ocd_command type ocd_gdb_port 3333
Debug: 27 3 command.c:143 script_debug(): command - gdb_port ocd_gdb_port 3333
Debug: 29 3 command.c:143 script_debug(): command - ocd_command ocd_command type ocd_interface ft232r
Debug: 30 3 command.c:143 script_debug(): command - interface ocd_interface ft232r
Debug: 32 3 command.c:364 register_command_handler(): registering 'ocd_ft232r_serial_desc'...
Debug: 33 3 command.c:364 register_command_handler(): registering 'ocd_ft232r_vid_pid'...
Debug: 34 3 command.c:364 register_command_handler(): registering 'ocd_ft232r_jtag_nums'...
Debug: 35 3 command.c:364 register_command_handler(): registering 'ocd_ft232r_tck_num'...
Debug: 36 3 command.c:364 register_command_handler(): registering 'ocd_ft232r_tms_num'...
Debug: 37 3 command.c:364 register_command_handler(): registering 'ocd_ft232r_tdo_num'...
Debug: 38 3 command.c:364 register_command_handler(): registering 'ocd_ft232r_tdi_num'...
Debug: 39 3 command.c:364 register_command_handler(): registering 'ocd_ft232r_srst_num'...
Debug: 40 3 command.c:364 register_command_handler(): registering 'ocd_ft232r_trst_num'...
Debug: 41 3 command.c:364 register_command_handler(): registering 'ocd_ft232r_restore_serial'...
Info : 42 3 transport.c:117 allow_transports(): only one transport option; autoselect 'jtag'
Debug: 43 3 command.c:364 register_command_handler(): registering 'ocd_jtag_flush_queue_sleep'...
Debug: 44 3 command.c:364 register_command_handler(): registering 'ocd_jtag_rclk'...
Debug: 45 3 command.c:364 register_command_handler(): registering 'ocd_jtag_ntrst_delay'...
Debug: 46 3 command.c:364 register_command_handler(): registering 'ocd_jtag_ntrst_assert_width'...
Debug: 47 3 command.c:364 register_command_handler(): registering 'ocd_scan_chain'...
Debug: 48 3 command.c:364 register_command_handler(): registering 'ocd_jtag_reset'...
Debug: 49 3 command.c:364 register_command_handler(): registering 'ocd_runtest'...
Debug: 50 3 command.c:364 register_command_handler(): registering 'ocd_irscan'...
Debug: 51 3 command.c:364 register_command_handler(): registering 'ocd_verify_ircapture'...
Debug: 52 3 command.c:364 register_command_handler(): registering 'ocd_verify_jtag'...
Debug: 53 3 command.c:364 register_command_handler(): registering 'ocd_tms_sequence'...
Debug: 54 3 command.c:364 register_command_handler(): registering 'ocd_wait_srst_deassert'...
Debug: 55 3 command.c:364 register_command_handler(): registering 'ocd_jtag'...
Debug: 56 3 command.c:364 register_command_handler(): registering 'ocd_jtag'...
Debug: 57 3 command.c:364 register_command_handler(): registering 'ocd_jtag'...
Debug: 58 3 command.c:364 register_command_handler(): registering 'ocd_jtag'...
Debug: 59 3 command.c:364 register_command_handler(): registering 'ocd_jtag'...
Debug: 60 3 command.c:364 register_command_handler(): registering 'ocd_jtag'...
Debug: 61 3 command.c:364 register_command_handler(): registering 'ocd_jtag'...
Debug: 62 3 command.c:364 register_command_handler(): registering 'ocd_jtag'...
Debug: 63 3 command.c:364 register_command_handler(): registering 'ocd_jtag'...
Debug: 64 3 command.c:364 register_command_handler(): registering 'ocd_jtag'...
Debug: 65 3 command.c:364 register_command_handler(): registering 'ocd_jtag'...
Debug: 66 3 command.c:364 register_command_handler(): registering 'ocd_jtag'...
Debug: 67 3 command.c:364 register_command_handler(): registering 'ocd_jtag'...
Debug: 68 3 command.c:364 register_command_handler(): registering 'ocd_svf'...
Debug: 69 3 command.c:364 register_command_handler(): registering 'ocd_xsvf'...
Debug: 70 3 command.c:143 script_debug(): command - ocd_command ocd_command type ocd_ft232r_vid_pid 0x0403 0x6015
Debug: 71 3 command.c:143 script_debug(): command - ft232r_vid_pid ocd_ft232r_vid_pid 0x0403 0x6015
Debug: 73 3 command.c:143 script_debug(): command - ocd_command ocd_command type ocd_ft232r_tdi_num RI
Debug: 74 3 command.c:143 script_debug(): command - ft232r_tdi_num ocd_ft232r_tdi_num RI
User : 76 3 command.c:544 command_print(): FT232R num: TDI = 7 RI
Debug: 77 3 command.c:143 script_debug(): command - ocd_command ocd_command type ocd_ft232r_tdo_num CTS
Debug: 78 3 command.c:143 script_debug(): command - ft232r_tdo_num ocd_ft232r_tdo_num CTS
User : 80 3 command.c:544 command_print(): FT232R num: TDO = 3 CTS
Debug: 81 3 command.c:143 script_debug(): command - ocd_command ocd_command type ocd_ft232r_tck_num DSR
Debug: 82 3 command.c:143 script_debug(): command - ft232r_tck_num ocd_ft232r_tck_num DSR
User : 84 3 command.c:544 command_print(): FT232R num: TCK = 5 DSR
Debug: 85 3 command.c:143 script_debug(): command - ocd_command ocd_command type ocd_ft232r_tms_num DCD
Debug: 86 3 command.c:143 script_debug(): command - ft232r_tms_num ocd_ft232r_tms_num DCD
User : 88 3 command.c:544 command_print(): FT232R num: TMS = 6 DCD
Debug: 89 3 command.c:143 script_debug(): command - ocd_command ocd_command type ocd_ft232r_trst_num RTS
Debug: 90 3 command.c:143 script_debug(): command - ft232r_trst_num ocd_ft232r_trst_num RTS
User : 92 3 command.c:544 command_print(): FT232R num: TRST = 2 RTS
Debug: 93 3 command.c:143 script_debug(): command - ocd_command ocd_command type ocd_ft232r_srst_num DTR
Debug: 94 3 command.c:143 script_debug(): command - ft232r_srst_num ocd_ft232r_srst_num DTR
User : 96 4 command.c:544 command_print(): FT232R num: SRST = 4 DTR
Debug: 97 4 command.c:143 script_debug(): command - ocd_command ocd_command type ocd_adapter_khz 2000
Debug: 98 4 command.c:143 script_debug(): command - adapter_khz ocd_adapter_khz 2000
Debug: 100 4 core.c:1645 jtag_config_khz(): handle jtag khz
Debug: 101 4 core.c:1612 adapter_khz_to_speed(): convert khz to interface specific speed value
Debug: 102 4 core.c:1612 adapter_khz_to_speed(): convert khz to interface specific speed value
User : 103 4 command.c:544 command_print(): adapter speed: 2000 kHz
Debug: 104 4 command.c:143 script_debug(): command - ocd_command ocd_command type ocd_jtag newtap riscv cpu -irlen 5 -expected-id 0x10e31913
Debug: 105 4 command.c:143 script_debug(): command - ocd_jtag ocd_jtag newtap riscv cpu -irlen 5 -expected-id 0x10e31913
Debug: 106 4 tcl.c:550 jim_newtap_cmd(): Creating New Tap, Chip: riscv, Tap: cpu, Dotted: riscv.cpu, 4 params
Debug: 107 4 tcl.c:574 jim_newtap_cmd(): Processing option: -irlen
Debug: 108 4 tcl.c:574 jim_newtap_cmd(): Processing option: -expected-id
Debug: 109 4 core.c:1304 jtag_tap_init(): Created Tap: riscv.cpu @ abs position 0, irlen 5, capture: 0x1 mask: 0x3
Debug: 110 4 command.c:143 script_debug(): command - ocd_command ocd_command type ocd_target create riscv.cpu.0 riscv -chain-position riscv.cpu
Debug: 111 4 command.c:143 script_debug(): command - ocd_target ocd_target create riscv.cpu.0 riscv -chain-position riscv.cpu
Debug: 112 4 target.c:1959 target_free_all_working_areas_restore(): freeing all working areas
Debug: 113 4 command.c:364 register_command_handler(): registering 'ocd_riscv'...
Debug: 114 4 command.c:364 register_command_handler(): registering 'ocd_riscv'...
Debug: 115 4 command.c:364 register_command_handler(): registering 'ocd_riscv'...
Debug: 116 4 command.c:364 register_command_handler(): registering 'ocd_riscv'...
Debug: 117 4 command.c:364 register_command_handler(): registering 'ocd_riscv'...
Debug: 118 4 command.c:364 register_command_handler(): registering 'ocd_riscv'...
Debug: 119 4 command.c:364 register_command_handler(): registering 'ocd_riscv'...
Debug: 120 4 command.c:364 register_command_handler(): registering 'ocd_riscv'...
Debug: 121 4 command.c:364 register_command_handler(): registering 'ocd_riscv'...
Debug: 122 4 command.c:364 register_command_handler(): registering 'ocd_riscv'...
Debug: 123 4 command.c:364 register_command_handler(): registering 'ocd_riscv'...
Debug: 124 4 command.c:364 register_command_handler(): registering 'ocd_riscv'...
Debug: 125 4 command.c:364 register_command_handler(): registering 'ocd_riscv'...
Debug: 126 4 command.c:364 register_command_handler(): registering 'ocd_riscv'...
Debug: 127 4 command.c:364 register_command_handler(): registering 'ocd_riscv'...
Debug: 128 4 command.c:364 register_command_handler(): registering 'ocd_riscv'...
Debug: 129 4 command.c:364 register_command_handler(): registering 'ocd_arm'...
Debug: 130 4 command.c:364 register_command_handler(): registering 'ocd_arm'...
Debug: 131 4 command.c:364 register_command_handler(): registering 'ocd_arm'...
Debug: 132 4 command.c:364 register_command_handler(): registering 'ocd_arm'...
Debug: 133 4 command.c:364 register_command_handler(): registering 'ocd_riscv.cpu.0'...
Debug: 134 4 command.c:364 register_command_handler(): registering 'ocd_riscv.cpu.0'...
Debug: 135 4 command.c:364 register_command_handler(): registering 'ocd_riscv.cpu.0'...
Debug: 136 4 command.c:364 register_command_handler(): registering 'ocd_riscv.cpu.0'...
Debug: 137 4 command.c:364 register_command_handler(): registering 'ocd_riscv.cpu.0'...
Debug: 138 4 command.c:364 register_command_handler(): registering 'ocd_riscv.cpu.0'...
Debug: 139 4 command.c:364 register_command_handler(): registering 'ocd_riscv.cpu.0'...
Debug: 140 4 command.c:364 register_command_handler(): registering 'ocd_riscv.cpu.0'...
Debug: 141 4 command.c:364 register_command_handler(): registering 'ocd_riscv.cpu.0'...
Debug: 142 4 command.c:364 register_command_handler(): registering 'ocd_riscv.cpu.0'...
Debug: 143 4 command.c:364 register_command_handler(): registering 'ocd_riscv.cpu.0'...
Debug: 144 4 command.c:364 register_command_handler(): registering 'ocd_riscv.cpu.0'...
Debug: 145 4 command.c:364 register_command_handler(): registering 'ocd_riscv.cpu.0'...
Debug: 146 4 command.c:364 register_command_handler(): registering 'ocd_riscv.cpu.0'...
Debug: 147 4 command.c:364 register_command_handler(): registering 'ocd_riscv.cpu.0'...
Debug: 148 4 command.c:364 register_command_handler(): registering 'ocd_riscv.cpu.0'...
Debug: 149 4 command.c:364 register_command_handler(): registering 'ocd_riscv.cpu.0'...
Debug: 150 4 command.c:364 register_command_handler(): registering 'ocd_riscv.cpu.0'...
Debug: 151 4 command.c:364 register_command_handler(): registering 'ocd_riscv.cpu.0'...
Debug: 152 4 command.c:364 register_command_handler(): registering 'ocd_riscv.cpu.0'...
Debug: 153 4 command.c:364 register_command_handler(): registering 'ocd_riscv.cpu.0'...
Debug: 154 4 command.c:364 register_command_handler(): registering 'ocd_riscv.cpu.0'...
Debug: 155 4 command.c:364 register_command_handler(): registering 'ocd_riscv.cpu.0'...
Debug: 156 4 command.c:364 register_command_handler(): registering 'ocd_riscv.cpu.0'...
Debug: 157 4 command.c:364 register_command_handler(): registering 'ocd_riscv.cpu.0'...
Debug: 158 4 command.c:364 register_command_handler(): registering 'ocd_riscv.cpu.0'...
Debug: 159 4 command.c:364 register_command_handler(): registering 'ocd_riscv.cpu.0'...
Debug: 160 4 command.c:364 register_command_handler(): registering 'ocd_riscv.cpu.0'...
Debug: 161 4 command.c:364 register_command_handler(): registering 'ocd_riscv.cpu.0'...
Debug: 162 4 command.c:364 register_command_handler(): registering 'ocd_riscv.cpu.0'...
Debug: 163 4 command.c:364 register_command_handler(): registering 'ocd_riscv.cpu.0'...
Debug: 164 4 command.c:364 register_command_handler(): registering 'ocd_riscv.cpu.0'...
Debug: 165 4 command.c:364 register_command_handler(): registering 'ocd_riscv.cpu.0'...
Debug: 166 4 command.c:364 register_command_handler(): registering 'ocd_riscv.cpu.0'...
Debug: 167 4 command.c:364 register_command_handler(): registering 'ocd_riscv.cpu.0'...
Debug: 168 4 command.c:364 register_command_handler(): registering 'ocd_riscv.cpu.0'...
Debug: 169 4 command.c:364 register_command_handler(): registering 'ocd_riscv.cpu.0'...
Debug: 170 4 command.c:364 register_command_handler(): registering 'ocd_riscv.cpu.0'...
Debug: 171 4 command.c:364 register_command_handler(): registering 'ocd_riscv.cpu.0'...
Debug: 172 4 command.c:364 register_command_handler(): registering 'ocd_riscv.cpu.0'...
Debug: 173 4 command.c:364 register_command_handler(): registering 'ocd_riscv.cpu.0'...
Debug: 174 4 command.c:364 register_command_handler(): registering 'ocd_riscv.cpu.0'...
Debug: 175 4 command.c:364 register_command_handler(): registering 'ocd_riscv.cpu.0'...
Debug: 176 4 command.c:143 script_debug(): command - ocd_command ocd_command type ocd_riscv.cpu.0 configure -work-area-phys 0x80000000 -work-area-size 10000 -work-area-backup 1
Debug: 177 4 command.c:143 script_debug(): command - ocd_riscv.cpu.0 ocd_riscv.cpu.0 configure -work-area-phys 0x80000000 -work-area-size 10000 -work-area-backup 1
Debug: 178 4 target.c:1959 target_free_all_working_areas_restore(): freeing all working areas
Debug: 179 4 target.c:1959 target_free_all_working_areas_restore(): freeing all working areas
Debug: 180 4 target.c:1959 target_free_all_working_areas_restore(): freeing all working areas
Debug: 181 4 command.c:143 script_debug(): command - ocd_command ocd_command type ocd_echo Ready for Remote Connections
Debug: 182 4 command.c:143 script_debug(): command - echo ocd_echo Ready for Remote Connections
User : 184 4 command.c:790 jim_echo(): Ready for Remote Connections
Info : 185 4 server.c:311 add_service(): Listening on port 6666 for tcl connections
Info : 186 4 server.c:311 add_service(): Listening on port 4444 for telnet connections
Debug: 187 4 command.c:143 script_debug(): command - ocd_command ocd_command type ocd_init
Debug: 188 4 command.c:143 script_debug(): command - init ocd_init
Debug: 190 4 command.c:143 script_debug(): command - ocd_command ocd_command type ocd_target init
Debug: 191 4 command.c:143 script_debug(): command - ocd_target ocd_target init
Debug: 193 4 command.c:143 script_debug(): command - ocd_command ocd_command type ocd_target names
Debug: 194 4 command.c:143 script_debug(): command - ocd_target ocd_target names
Debug: 195 4 command.c:143 script_debug(): command - ocd_command ocd_command type ocd_riscv.cpu.0 cget -event gdb-flash-erase-start
Debug: 196 4 command.c:143 script_debug(): command - ocd_riscv.cpu.0 ocd_riscv.cpu.0 cget -event gdb-flash-erase-start
Debug: 197 4 command.c:143 script_debug(): command - ocd_command ocd_command type ocd_riscv.cpu.0 configure -event gdb-flash-erase-start reset init
Debug: 198 4 command.c:143 script_debug(): command - ocd_riscv.cpu.0 ocd_riscv.cpu.0 configure -event gdb-flash-erase-start reset init
Debug: 199 4 command.c:143 script_debug(): command - ocd_command ocd_command type ocd_riscv.cpu.0 cget -event gdb-flash-write-end
Debug: 200 4 command.c:143 script_debug(): command - ocd_riscv.cpu.0 ocd_riscv.cpu.0 cget -event gdb-flash-write-end
Debug: 201 4 command.c:143 script_debug(): command - ocd_command ocd_command type ocd_riscv.cpu.0 configure -event gdb-flash-write-end reset halt
Debug: 202 4 command.c:143 script_debug(): command - ocd_riscv.cpu.0 ocd_riscv.cpu.0 configure -event gdb-flash-write-end reset halt
Debug: 203 4 command.c:143 script_debug(): command - ocd_command ocd_command type ocd_riscv.cpu.0 cget -event gdb-attach
Debug: 204 4 command.c:143 script_debug(): command - ocd_riscv.cpu.0 ocd_riscv.cpu.0 cget -event gdb-attach
Debug: 205 4 command.c:143 script_debug(): command - ocd_command ocd_command type ocd_riscv.cpu.0 configure -event gdb-attach halt
Debug: 206 4 command.c:143 script_debug(): command - ocd_riscv.cpu.0 ocd_riscv.cpu.0 configure -event gdb-attach halt
Debug: 207 4 target.c:1421 handle_target_init_command(): Initializing targets...
Debug: 208 4 riscv.c:430 riscv_init_target(): riscv_init_target()
Debug: 209 5 semihosting_common.c:97 semihosting_common_init():```

RISC-VのコアにはDMのabstractコマンドでアクセスします。

OpenOCDからどんな風にアクセスするのかな?と思って、ログを確認すると次のようにレジスタダンプをしていました。

$ cat ~/openocd.log |grep -i abstract
Debug: 352 70 riscv-013.c:813 execute_abstract_command(): command=0x321008; access register, size=64, postexec=0, transfer=1, write=0, regno=0x1008
Debug: 357 75 riscv-013.c:813 execute_abstract_command(): command=0x320301; access register, size=64, postexec=0, transfer=1, write=0, regno=0x301
Debug: 12845 14361 riscv-013.c:813 execute_abstract_command(): command=0x321001; access register, size=64, postexec=0, transfer=1, write=0, regno=0x1001
Debug: 12859 14371 riscv-013.c:813 execute_abstract_command(): command=0x321002; access register, size=64, postexec=0, transfer=1, write=0, regno=0x1002
Debug: 12872 14382 riscv-013.c:813 execute_abstract_command(): command=0x321003; access register, size=64, postexec=0, transfer=1, write=0, regno=0x1003
Debug: 12885 14393 riscv-013.c:813 execute_abstract_command(): command=0x321004; access register, size=64, postexec=0, transfer=1, write=0, regno=0x1004
Debug: 12898 14404 riscv-013.c:813 execute_abstract_command(): command=0x321005; access register, size=64, postexec=0, transfer=1, write=0, regno=0x1005
Debug: 12911 14415 riscv-013.c:813 execute_abstract_command(): command=0x321006; access register, size=64, postexec=0, transfer=1, write=0, regno=0x1006
Debug: 12924 14426 riscv-013.c:813 execute_abstract_command(): command=0x321007; access register, size=64, postexec=0, transfer=1, write=0, regno=0x1007
Debug: 12937 14437 riscv-013.c:813 execute_abstract_command(): command=0x321008; access register, size=64, postexec=0, transfer=1, write=0, regno=0x1008
Debug: 12950 14448 riscv-013.c:813 execute_abstract_command(): command=0x321009; access register, size=64, postexec=0, transfer=1, write=0, regno=0x1009
Debug: 12963 14459 riscv-013.c:813 execute_abstract_command(): command=0x32100a; access register, size=64, postexec=0, transfer=1, write=0, regno=0x100a
Debug: 12976 14470 riscv-013.c:813 execute_abstract_command(): command=0x32100b; access register, size=64, postexec=0, transfer=1, write=0, regno=0x100b
Debug: 12989 14481 riscv-013.c:813 execute_abstract_command(): command=0x32100c; access register, size=64, postexec=0, transfer=1, write=0, regno=0x100c
Debug: 13002 14492 riscv-013.c:813 execute_abstract_command(): command=0x32100d; access register, size=64, postexec=0, transfer=1, write=0, regno=0x100d
Debug: 13015 14503 riscv-013.c:813 execute_abstract_command(): command=0x32100e; access register, size=64, postexec=0, transfer=1, write=0, regno=0x100e
Debug: 13028 14514 riscv-013.c:813 execute_abstract_command(): command=0x32100f; access register, size=64, postexec=0, transfer=1, write=0, regno=0x100f
Debug: 13041 14525 riscv-013.c:813 execute_abstract_command(): command=0x321010; access register, size=64, postexec=0, transfer=1, write=0, regno=0x1010
Debug: 13054 14536 riscv-013.c:813 execute_abstract_command(): command=0x321011; access register, size=64, postexec=0, transfer=1, write=0, regno=0x1011
Debug: 13067 14547 riscv-013.c:813 execute_abstract_command(): command=0x321012; access register, size=64, postexec=0, transfer=1, write=0, regno=0x1012
Debug: 13080 14558 riscv-013.c:813 execute_abstract_command(): command=0x321013; access register, size=64, postexec=0, transfer=1, write=0, regno=0x1013
Debug: 13093 14569 riscv-013.c:813 execute_abstract_command(): command=0x321014; access register, size=64, postexec=0, transfer=1, write=0, regno=0x1014
Debug: 13106 14580 riscv-013.c:813 execute_abstract_command(): command=0x321015; access register, size=64, postexec=0, transfer=1, write=0, regno=0x1015
Debug: 13119 14591 riscv-013.c:813 execute_abstract_command(): command=0x321016; access register, size=64, postexec=0, transfer=1, write=0, regno=0x1016
Debug: 13132 14602 riscv-013.c:813 execute_abstract_command(): command=0x321017; access register, size=64, postexec=0, transfer=1, write=0, regno=0x1017
Debug: 13145 14613 riscv-013.c:813 execute_abstract_command(): command=0x321018; access register, size=64, postexec=0, transfer=1, write=0, regno=0x1018
Debug: 13158 14624 riscv-013.c:813 execute_abstract_command(): command=0x321019; access register, size=64, postexec=0, transfer=1, write=0, regno=0x1019
Debug: 13171 14635 riscv-013.c:813 execute_abstract_command(): command=0x32101a; access register, size=64, postexec=0, transfer=1, write=0, regno=0x101a
Debug: 13184 14646 riscv-013.c:813 execute_abstract_command(): command=0x32101b; access register, size=64, postexec=0, transfer=1, write=0, regno=0x101b
Debug: 13197 14657 riscv-013.c:813 execute_abstract_command(): command=0x32101c; access register, size=64, postexec=0, transfer=1, write=0, regno=0x101c
Debug: 13210 14668 riscv-013.c:813 execute_abstract_command(): command=0x32101d; access register, size=64, postexec=0, transfer=1, write=0, regno=0x101d
Debug: 13223 14679 riscv-013.c:813 execute_abstract_command(): command=0x32101e; access register, size=64, postexec=0, transfer=1, write=0, regno=0x101e
Debug: 13236 14690 riscv-013.c:813 execute_abstract_command(): command=0x32101f; access register, size=64, postexec=0, transfer=1, write=0, regno=0x101f
Debug: 13249 14701 riscv-013.c:813 execute_abstract_command(): command=0x3207b1; access register, size=64, postexec=0, transfer=1, write=0, regno=0x7b1

しかし、Debugのドキュメントを読むと昔のRFCを作られた感覚のようにやったもん勝ちっていう雰囲気がありました。

それにDebugのドキュメントはマウントを取るのを急いだのか、中身が洗練されていないです。

write: 2019/08/24/ 22:01:18