2 set remote hardware-breakpoint-limit @CROSS_NUM_BREAKPOINTS@
3 set remote hardware-watchpoint-limit @CROSS_NUM_WATCHPOINTS@
4 monitor arm semihosting enable
6 echo Loading ARMv7M GDB macros.\n
17 set $icsr = *(unsigned *)0xe000ed04
18 set $vect = $icsr & 0x1ff
19 set $pend = ($icsr & 0x1ff000) >> 12
20 set $shcsr = *(unsigned *)0xe000ed24
21 set $cfsr = *(unsigned *)0xe000ed28
22 set $mmfsr = $cfsr & 0xff
23 set $bfsr = ($cfsr >> 8) & 0xff
24 set $ufsr = ($cfsr >> 16) & 0xffff
25 set $hfsr = *(unsigned *)0xe000ed2c
26 set $bfar = *(unsigned *)0xe000ed38
27 set $mmfar = *(unsigned *)0xe000ed34
34 printf " due to vector table read fault\n"
37 printf " forced due to escalated or disabled configurable fault (see below)\n"
40 printf " due to an unexpected debug event\n"
46 printf " during lazy FP state save"
49 printf " during exception entry"
52 printf " during exception return"
55 printf " during data access"
58 printf " during instruction prefetch"
61 printf " accessing 0x%08x", $mmfar
74 printf " during lazy FP state save"
77 printf " during exception entry"
80 printf " during exception return"
83 printf " during instruction prefetch"
86 printf " accessing 0x%08x", $bfar
93 printf " due to divide-by-zero"
96 printf " due to unaligned memory access"
99 printf " due to access to disabled/absent coprocessor"
102 printf " due to a bad EXC_RETURN value"
105 printf " due to bad T or IT bits in EPSR"
108 printf " due to executing an undefined instruction"
114 printf "Handling vector %u\n", $vect
118 echo \nSelect relevant thread, and run "prefault" to restore state prior to fault.\n\n
124 if (($lr & 0xffffff00) == 0xffffff00) && (($lr & 0x1) == 0x1)
125 # save register values so they can be restored
136 echo Stack was in PSP:\n
137 set $stack = (uint32_t*)$psp
139 echo Stack was in MSP:\n
140 set $stack = (uint32_t*)$msp
143 # retrieve prior register states from the eight
144 # 32-bit words the MCU pushed on the stack
145 set $r0_pre = $stack[0]
146 set $r1_pre = $stack[1]
147 set $r2_pre = $stack[2]
148 set $r3_pre = $stack[3]
149 set $r12_pre = $stack[4]
150 set $lr_pre = $stack[5]
151 set $pc_pre = $stack[6]
152 set $psr_pre = $stack[7]
154 set $stack_offset_cpu = 4*8
156 # exception stack alignment. this is constant across CPUs
157 if (unsigned int)$psr_pre & 0x200
158 set $stack_offset_exception_align = 4
160 set $stack_offset_exception_align = 0
163 # reset SP to pre-fault stack frame
164 set $sp = $stack + $stack_offset_cpu + $stack_offset_exception_align
166 # reset other core regs to pre-fault values
176 echo \nRestored registers to pre-fault status.\n
177 echo The "postfault" command returns to the fault handler.\n
181 echo \nDid not detect fault status. Doing nothing.\n
187 echo \nRestoring core registers.\n
197 # clear sentinel to prevent repated Calls
200 echo \nNo post-fault state to restore.\n