Problem Loading executables through GDB on iMX27

Hi all!

I am having trouble loading ELF data across GDB (using the ‘load’ command) to the iMX27 on the LogicPD LITEKIT.

Background: The LITEKIT FLASH contains a monitor/shell that allows loading executables across the RS232 port. It boots from this flash and drops to a shell that supports many functions. If I connect OpenOCD to the LITEKIT and do a ‘reset halt’ command then it complains that “srst pulls trst - can not reset into halted mode. Issuing halt after reset.” The “srst pulls trst” mode is set in the standard iMX27 config file that comes with OpenOCD. The actual halt is not at PC=0x00000000, but ends up halting early in FLASH loading @0xc0000044. If I change reset config to “reset_config trst_and_srst separate” then doing a “reset halt” will drop me at pc=0x00000000. However, from reading this mailing list, I think that “separate” mode may not work well for the iMX27.

Now to the ELF problem. After the “reset halt” command I would like to load the executable data from GDB to RAM and start debugging. This fails with the following errors:

OpenOCD:

...
Debug: 921 34699 arm9tdmi.c:522 arm9tdmi_write_xpsr(): xpsr: 200000d3, spsr: 0
Debug: 922 34699 arm7_9_common.c:1756 arm7_9_restore_context(): writing PC with value 0xffff4c00
Debug: 923 34699 embeddedice.c:451 embeddedice_write_reg(): 0: 0x00000004
Debug: 924 34702 target.c:829 target_call_event_callbacks(): target event 23 (debug-resumed)
Debug: 925 34702 arm7_9_common.c:1983 arm7_9_resume(): target resumed
Debug: 926 34705 embeddedice.c:451 embeddedice_write_reg(): 5: 0xea000012
Debug: 927 34705 embeddedice.c:451 embeddedice_write_reg(): 5: 0xe1a00000
Debug: 928 34705 arm7_9_common.c:1319 arm7_9_halt(): target->state: debug-running
Debug: 929 34705 embeddedice.c:451 embeddedice_write_reg(): 0: 0x00000006
Debug: 930 34709 target.c:1957 target_wait_state(): waiting for target 
halted...
Error: 932 35210 target.c:1968 target_wait_state(): timed out while 
waiting for target halted
Error: 940 35212 gdb_server.c:1143 gdb_error(): unexpected error -4

GDB:

[npalmer@ws50 dbg]$ arm-none-eabi-gdb uart_test.debug.elf
(gdb) target remote localhost:3333
Remote debugging using localhost:3333
0xc0000044 in ?? ()
(gdb) monitor reset init
JTAG tap: imx27.bs tap/device found: 0x1b900f0f (mfg: 0x787, part: 
0xb900, ver: 0x1)
JTAG tap: imx27.cpu tap/device found: 0x07926121 (mfg: 0x090, part: 
0x7926, ver: 0x0)
srst pulls trst - can not reset into halted mode. Issuing halt after reset.
target state: halted
target halted in ARM state due to debug-request, current mode: Supervisor
cpsr: 0x200000d3 pc: 0xc0000048
MMU: disabled, D-Cache: disabled, I-Cache: disabled
(gdb) load uart_test.debug.elf
Loading section .reset, size 0x1e0 lma 0xa0100000
Load failed
(gdb)

However, If I let the LITEKIT’s monitor program load completely before halting the board, then the GDB load command is successful every time. I am confused about why the OpenOCD transfer algorithm depends on something that the LITEKIT is configuring. Can anyone tell me what must be initialized on the board to allow the GDB load command to successfully complete? If so then I can build that in to the OpenOCD config file to initialize the board out of reset.


This is my very straight forward openocd.cfg file:

source [find interface/flyswatter.cfg]

source [find board/logicpd_imx27.cfg]

gdb_flash_program disable

gdb_memory_map enable

gdb_report_data_abort enable

Questions:

  1. Should I resist the urge to use “reset_config trst_and_srst separate” on the iMX27 LITEKIT?

  2. What needs to be configured on the iMX27 to allow the GDB load procedure to work?

BTW, I am using the latest 0.3.0svn version of OpenOCD, however I have seen the same thing on 0.2.0

Thanks!

Full debug info for Open OCD:

Debug: 209 37708 gdb_server.c:2045 gdb_input_inner(): received packet: 'Xa0100000,0:<binary-data>'
Debug: 210 37708 gdb_server.c:2045 gdb_input_inner(): received packet: 'Xa0100000,1e0:<binary-data>'
Debug: 211 37708 gdb_server.c:1317 gdb_write_memory_binary_packet(): addr: 0xa0100000, len: 0x000001e0
Debug: 212 37708 target.c:1108 target_write_buffer(): writing buffer of 480 byte at 0xa0100000
Debug: 213 37708 target.c:962 target_alloc_working_area(): allocating new working area
Debug: 214 37708 arm7_9_common.c:2275 arm7_9_read_memory(): address: 0xffff4c00, size: 0x00000004, count: 0x00000006
Debug: 215 37713 embeddedice.c:451 embeddedice_write_reg(): 0: 0x00000004
Debug: 216 37715 embeddedice.c:451 embeddedice_write_reg(): 0: 0x00000005
Debug: 217 37717 armv4_5.c:559 armv4_5_run_algorithm_inner(): Running algorithm
Debug: 218 37717 armv4_5.c:633 armv4_5_run_algorithm_inner(): setting core_mode: 0x13
Debug: 219 37717 arm7_9_common.c:61 arm7_9_clear_watchpoints(): -
Debug: 220 37717 embeddedice.c:451 embeddedice_write_reg(): 12: 0x00000000
Debug: 221 37717 embeddedice.c:451 embeddedice_write_reg(): 20: 0x00000000
Debug: 222 37718 arm7_9_common.c:101 arm7_9_assign_wp(): BPID: 0 (0xffff4c18) using hw wp: 1
Debug: 223 37718 arm7_9_common.c:234 arm7_9_set_breakpoint(): BPID: 0, Address: 0xffff4c18, Type: 0
Debug: 224 37718 embeddedice.c:451 embeddedice_write_reg(): 8: 0xffff4c18
Debug: 225 37718 embeddedice.c:451 embeddedice_write_reg(): 9: 0x00000003
Debug: 226 37718 embeddedice.c:451 embeddedice_write_reg(): 11: 0xffffffff
Debug: 227 37718 embeddedice.c:451 embeddedice_write_reg(): 13: 0x000000f7
Debug: 228 37718 embeddedice.c:451 embeddedice_write_reg(): 12: 0x00000100
Debug: 229 37719 breakpoints.c:104 breakpoint_add(): added hardware breakpoint at 0xffff4c18 of length 0x00000004, (BPID: 0)
Debug: 230 37719 arm7_9_common.c:1836 arm7_9_resume(): -
Debug: 231 37719 arm7_9_common.c:234 arm7_9_set_breakpoint(): BPID: 0, Address: 0xffff4c18, Type: 0
Debug: 232 37719 embeddedice.c:451 embeddedice_write_reg(): 8: 0xffff4c18
Debug: 233 37719 embeddedice.c:451 embeddedice_write_reg(): 9: 0x00000003
Debug: 234 37719 embeddedice.c:451 embeddedice_write_reg(): 11: 0xffffffff
Debug: 235 37719 embeddedice.c:451 embeddedice_write_reg(): 13: 0x000000f7
Debug: 236 37719 embeddedice.c:451 embeddedice_write_reg(): 12: 0x00000100
Debug: 237 37720 arm7_9_common.c:1635 arm7_9_restore_context(): -
Debug: 238 37731 arm7_9_common.c:1654 arm7_9_restore_context(): examining User mode
Debug: 239 37731 arm7_9_common.c:1668 arm7_9_restore_context(): examining dirty reg: r0
Debug: 240 37731 arm7_9_common.c:1668 arm7_9_restore_context(): examining dirty reg: r1
Debug: 241 37731 arm7_9_common.c:1668 arm7_9_restore_context(): examining dirty reg: r2
Debug: 242 37731 arm7_9_common.c:1668 arm7_9_restore_context(): examining dirty reg: r3
Debug: 243 37731 arm7_9_common.c:1668 arm7_9_restore_context(): examining dirty reg: r4
Debug: 244 37731 arm7_9_common.c:1668 arm7_9_restore_context(): examining dirty reg: r5
Debug: 245 37731 arm7_9_common.c:1668 arm7_9_restore_context(): examining dirty reg: r6
Debug: 246 37731 arm7_9_common.c:1668 arm7_9_restore_context(): examining dirty reg: pc
Debug: 247 37731 arm7_9_common.c:1668 arm7_9_restore_context(): examining dirty reg: cpsr
Debug: 248 37731 arm7_9_common.c:1716 arm7_9_restore_context(): writing register 0 of mode User with value 0xa0100000
Debug: 249 37731 arm7_9_common.c:1716 arm7_9_restore_context(): writing register 1 of mode User with value 0xa0062788
Debug: 250 37731 arm7_9_common.c:1716 arm7_9_restore_context(): writing register 2 of mode User with value 0xdeadbeef
Debug: 251 37731 arm7_9_common.c:1716 arm7_9_restore_context(): writing register 3 of mode User with value 0xa0050b24
Debug: 252 37731 arm7_9_common.c:1716 arm7_9_restore_context(): writing register 4 of mode User with value 0xa0049428
Debug: 253 37731 arm7_9_common.c:1716 arm7_9_restore_context(): writing register 5 of mode User with value 0x00000001
Debug: 254 37731 arm7_9_common.c:1716 arm7_9_restore_context(): writing register 6 of mode User with value 0xa0050930
Debug: 255 37731 arm7_9_common.c:1654 arm7_9_restore_context(): examining FIQ mode
Debug: 256 37731 arm7_9_common.c:1668 arm7_9_restore_context(): examining dirty reg: pc
Debug: 257 37731 arm7_9_common.c:1654 arm7_9_restore_context(): examining IRQ mode
Debug: 258 37731 arm7_9_common.c:1668 arm7_9_restore_context(): examining dirty reg: pc
Debug: 259 37731 arm7_9_common.c:1654 arm7_9_restore_context(): examining Supervisor mode
Debug: 260 37731 arm7_9_common.c:1668 arm7_9_restore_context(): examining dirty reg: pc
Debug: 261 37731 arm7_9_common.c:1654 arm7_9_restore_context(): examining Abort mode
Debug: 262 37731 arm7_9_common.c:1668 arm7_9_restore_context(): examining dirty reg: pc
Debug: 263 37731 arm7_9_common.c:1654 arm7_9_restore_context(): examining Undefined mode
Debug: 264 37731 arm7_9_common.c:1668 arm7_9_restore_context(): examining dirty reg: pc
Debug: 265 37731 arm7_9_common.c:1749 arm7_9_restore_context(): writing cpsr with value 0x200000d3
Debug: 266 37731 arm9tdmi.c:522 arm9tdmi_write_xpsr(): xpsr: 200000d3, spsr: 0
Debug: 267 37731 arm7_9_common.c:1756 arm7_9_restore_context(): writing PC with value 0xffff4c00
Debug: 268 37731 embeddedice.c:451 embeddedice_write_reg(): 0: 0x00000004
Debug: 269 37733 target.c:829 target_call_event_callbacks(): target event 23 (debug-resumed)
Debug: 270 37733 arm7_9_common.c:1983 arm7_9_resume(): target resumed
Debug: 271 37735 embeddedice.c:451 embeddedice_write_reg(): 5: 0xea000012
Debug: 272 37735 embeddedice.c:451 embeddedice_write_reg(): 5: 0xe1a00000
Debug: 273 37735 arm7_9_common.c:1319 arm7_9_halt(): target->state: debug-running
Debug: 274 37735 embeddedice.c:451 embeddedice_write_reg(): 0: 0x00000006
Debug: 275 37739 embeddedice.c:451 embeddedice_write_reg(): 0: 0x00000005
Debug: 276 37739 embeddedice.c:451 embeddedice_write_reg(): 0: 0x00000005
Debug: 277 37741 arm926ejs.c:331 arm926ejs_examine_debug_reason(): internal debug request
Debug: 278 37741 arm7_9_common.c:1421 arm7_9_debug_entry(): target entered debug from Thumb state
Debug: 279 37744 arm7_9_common.c:1425 arm7_9_debug_entry(): r0_thumb: 0xa0100000, pc_thumb: 0xce3d18f2
Debug: 280 37746 arm7_9_common.c:1461 arm7_9_debug_entry(): target entered debug state in Abort mode
Debug: 281 37746 arm7_9_common.c:1465 arm7_9_debug_entry(): thumb state, applying fixups
Debug: 282 37746 arm7_9_common.c:1484 arm7_9_debug_entry(): r0: 0xa0100000
Debug: 283 37783 arm7_9_common.c:1484 arm7_9_debug_entry(): r1: 0xea000012
Debug: 284 37783 arm7_9_common.c:1484 arm7_9_debug_entry(): r2: 0xdeadbeef
Debug: 285 37783 arm7_9_common.c:1484 arm7_9_debug_entry(): r3: 0xa0050b24
Debug: 286 37783 arm7_9_common.c:1484 arm7_9_debug_entry(): r4: 0xa0049428
Debug: 287 37783 arm7_9_common.c:1484 arm7_9_debug_entry(): r5: 0x00000001
Debug: 288 37783 arm7_9_common.c:1484 arm7_9_debug_entry(): r6: 0xa0050930
Debug: 289 37783 arm7_9_common.c:1484 arm7_9_debug_entry(): r7: 0x00000001
Debug: 290 37783 arm7_9_common.c:1484 arm7_9_debug_entry(): r8: 0xa0065283
Debug: 291 37783 arm7_9_common.c:1484 arm7_9_debug_entry(): r9: 0x00000000
Debug: 292 37783 arm7_9_common.c:1484 arm7_9_debug_entry(): r10: 0x00000000
Debug: 293 37783 arm7_9_common.c:1484 arm7_9_debug_entry(): r11: 0xa0065244
Debug: 294 37783 arm7_9_common.c:1484 arm7_9_debug_entry(): r12: 0xa00627e4
Debug: 295 37783 arm7_9_common.c:1484 arm7_9_debug_entry(): r13: 0xa0137fa8
Debug: 296 37783 arm7_9_common.c:1484 arm7_9_debug_entry(): r14: 0xce3d18f0
Debug: 297 37783 arm7_9_common.c:1484 arm7_9_debug_entry(): r15: 0xce3d18ec
Debug: 298 37783 arm7_9_common.c:1490 arm7_9_debug_entry(): entered debug state at PC 0xce3d18ec
Debug: 299 37788 arm926ejs.c:480 arm926ejs_post_debug_entry(): cp15_control_reg: 00050078
Debug: 300 37796 arm926ejs.c:501 arm926ejs_post_debug_entry(): D FSR: 0x00000008, D FAR: 0xa0100000, I FSR: 0x00000008
Debug: 301 37801 target.c:829 target_call_event_callbacks(): target event 22 (debug-halted)
Debug: 302 37801 arm7_9_common.c:364 arm7_9_unset_breakpoint(): BPID: 0, Address: 0xffff4c18
Debug: 303 37801 arm7_9_common.c:376 arm7_9_unset_breakpoint(): BPID: 0 Releasing hw wp: 1
Debug: 304 37801 embeddedice.c:451 embeddedice_write_reg(): 12: 0x00000000
Debug: 305 37801 arm7_9_common.c:61 arm7_9_clear_watchpoints(): -
Debug: 306 37801 embeddedice.c:451 embeddedice_write_reg(): 12: 0x00000000
Debug: 307 37801 embeddedice.c:451 embeddedice_write_reg(): 20: 0x00000000
Debug: 308 37803 breakpoints.c:128 breakpoint_free(): BPID: 0
Debug: 309 37803 armv4_5.c:697 armv4_5_run_algorithm_inner(): restoring register r0 with value 0x0000fbdb
Debug: 310 37803 armv4_5.c:697 armv4_5_run_algorithm_inner(): restoring register r1 with value 0xa0062788
Debug: 311 37803 armv4_5.c:697 armv4_5_run_algorithm_inner(): restoring register pc with value 0xc0000044
Error: 312 37803 arm7_9_common.c:2746 arm7_9_bulk_write_memory(): DCC write failed, expected end address 0xa01001e0 got 0xa0100000
Error: 313 37803 gdb_server.c:1143 gdb_error(): unexpected error -4