Tracing into area without source
Jon Smirl
jonsmirl@gmail.com
Sun Nov 15 19:04:00 GMT 2009
Setup is qemu emulating an ARM7TDMI running on my x86. The ARM cpu
has a ROM starting at zero which I don't have the source for. I've
made a copy of the ROM and inserted it into qemu. I can dump and
disassemble it without problem.
RAM is at 0x400000. I can load and run my app there using gdb.
But when the app jumps into the ROM gdb refuses to follow.
(gdb) stepi
_begin () at ../../cpu/mc1322x/./startup.S:120
120 bl _rom_data_init+.-base
(gdb) stepi
0x000108d0 in ?? ()
(gdb) stepi
^C
How do I convince gdb to allow me to trace into the ROM image I made in qemu?
(gdb) mem 0 128000 ro 8
(gdb) mem 0x00400000 0x00500000 rw 8
(gdb) file example-udp-sender.elf
Load new symbol table from
"/home/apps/contiki-mc1322x/examples/udp-sender-ipv6/example-udp-sender.elf"?
(y or n) y
Reading symbols from
/home/apps/contiki-mc1322x/examples/udp-sender-ipv6/example-udp-sender.elf...done.
(gdb) target remote localhost:1234
Remote debugging using localhost:1234
base () at ../../cpu/mc1322x/./startup.S:62
62 _start: b _begin
Current language: auto; currently asm
(gdb) stepi
_begin () at ../../cpu/mc1322x/./startup.S:97
97 msr CPSR_c, #(FIQ_MODE | IRQ_DISABLE | FIQ_DISABLE)
(gdb) stepi
_begin () at ../../cpu/mc1322x/./startup.S:98
98 ldr sp, =__fiq_stack_top__ /* set the FIQ stack pointer */
(gdb) stepi
_begin () at ../../cpu/mc1322x/./startup.S:101
101 msr CPSR_c, #(IRQ_MODE | IRQ_DISABLE | FIQ_DISABLE)
(gdb) stepi
_begin () at ../../cpu/mc1322x/./startup.S:102
102 ldr sp, =__irq_stack_top__ /* set the IRQ stack pointer */
(gdb) stepi
_begin () at ../../cpu/mc1322x/./startup.S:105
105 msr CPSR_c, #(SVC_MODE | IRQ_DISABLE | FIQ_DISABLE)
(gdb) stepi
_begin () at ../../cpu/mc1322x/./startup.S:106
106 ldr sp, =__svc_stack_top__ /* set the SVC stack pointer */
(gdb) stepi
_begin () at ../../cpu/mc1322x/./startup.S:109
109 msr CPSR_c, #(UND_MODE | IRQ_DISABLE | FIQ_DISABLE)
(gdb) stepi
_begin () at ../../cpu/mc1322x/./startup.S:110
110 ldr sp, =__und_stack_top__ /* set the UND stack pointer */
(gdb) stepi
_begin () at ../../cpu/mc1322x/./startup.S:113
113 msr CPSR_c, #(ABT_MODE | IRQ_DISABLE | FIQ_DISABLE)
(gdb) stepi
_begin () at ../../cpu/mc1322x/./startup.S:114
114 ldr sp, =__abt_stack_top__ /* set the ABT stack pointer */
(gdb) stepi
_begin () at ../../cpu/mc1322x/./startup.S:117
117 msr CPSR_c, #(SYS_MODE | IRQ_DISABLE | FIQ_DISABLE)
(gdb) stepi
_begin () at ../../cpu/mc1322x/./startup.S:118
118 ldr sp, =__sys_stack_top__ /* set the SYS stack pointer */
(gdb) stepi
_begin () at ../../cpu/mc1322x/./startup.S:120
120 bl _rom_data_init+.-base
(gdb) stepi
0x000108d0 in ?? ()
(gdb) stepi
^C
Program received signal SIGINT, Interrupt.
0x000108d0 in ?? ()
(gdb) disassemble 0x000108d0 0x00010900
Dump of assembler code from 0x108d0 to 0x10900:
0x000108d0: b 0x10a5c
0x000108d4: stmdavs r0, {r0, r1, r3, r4, r11, lr}
0x000108d8: andeq r4, r0, r0, ror r7
0x000108dc: strdlt r11, [r5], r0
0x000108e0: andeq r0, sp, r7
0x000108e4: ldrbcs r11, [r5, -r0, lsl #9]!
0x000108e8: blx 0xfeecd8ae
0x000108ec: adcmi r11, pc, #32768 ; 0x8000
0x000108f0: eorseq sp, r8, r1, lsl #6
0x000108f4: strcs lr, [r1], #-34
0x000108f8: ldclne 11, cr1, [r6], #-952
0x000108fc: ldmdami r1, {r1, r3, r5, r6, r9, r10, lr}
End of assembler dump.
(gdb) disassemble 0x10a5c 0x10b00
Dump of assembler code from 0x10a5c to 0x10b00:
0x00010a5c: push {r0, r4, r5, lr}
0x00010a60: ldr r4, [pc, #44] ; 0x10a94
0x00010a64: ldr r5, [pc, #44] ; 0x10a98
0x00010a68: cmp r4, r5
0x00010a6c: beq 0x10a8c
0x00010a70: ldm r4, {r0, r1, r2}
0x00010a74: ldr r3, [r4, #12]
0x00010a78: add r4, r4, #16 ; 0x10
0x00010a7c: mov lr, pc
0x00010a80: bx r3
0x00010a84: cmp r4, r5
0x00010a88: bne 0x10a70
0x00010a8c: pop {r3, r4, r5, lr}
0x00010a90: bx lr
0x00010a94: andeq r1, r1, r8, lsl #15
0x00010a98: andeq r1, r1, r8, lsr #15
0x00010a9c: add r2, r2, r1
0x00010aa0: cmp r1, r2
0x00010aa4: bne 0x10ab4
0x00010aa8: bx lr
0x00010aac: cmp r1, r2
0x00010ab0: bxeq lr
0x00010ab4: ldrsb r3, [r1], #1
0x00010ab8: mov r12, #0 ; 0x0
0x00010abc: b 0x10ac4
0x00010ac0: strb r12, [r0], #1
0x00010ac4: cmp r3, #0 ; 0x0
0x00010ac8: beq 0x10aac
0x00010acc: ldrbmi r12, [r1], #1
0x00010ad0: addmi r3, r3, #1 ; 0x1
0x00010ad4: subpl r3, r3, #1 ; 0x1
0x00010ad8: b 0x10ac0
0x00010adc: undefined
0x00010ae0: mov r12, r0
0x00010ae4: tst r1, #1 ; 0x1
0x00010ae8: strbne r0, [r1], #1
0x00010aec: lsrne r0, r0, #8
0x00010af0: strh r0, [r1]
0x00010af4: lsr r0, r0, #16
0x00010af8: strbne r0, [r1, #2]
---Type <return> to continue, or q <return> to quit---
--
Jon Smirl
jonsmirl@gmail.com
More information about the Gdb
mailing list