summaryrefslogtreecommitdiff
path: root/components/gdb/libcpu/cortexm/gdb_gcc.S
blob: e6c5ab95e8a55923c747db8b494da5f1762934db (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
.cpu cortex-m4
.syntax unified
.thumb
.text

.global DebugMon_Handler
.type DebugMon_Handler, %function
DebugMon_Handler:
    mrs     r0,psp                  ;// Get process stack
    sub     r1,r0,#(4*13)           ;// Make space for saved state
    msr     psp,r1                  ;// Ensure PSP is up to date

    mov     r12,r0                  ;// R12 = stack
    mov     r1,#1                   ;// R1 = exception state type
    mrs     r2,ipsr                 ;// R2 = vector number
    mrs     r3,basepri              ;// R3 = basepri
    stmfd   r0!,{r1-r12,lr}         ;// Push type, vector, basepri, r4-11 

    mov     r4,r0                   ;// R4 = saved state pointer
    bl      rt_hw_debugmon_exception

    mov     r0,r4                   ;// R4 = saved state pointer
    ldmfd   r0!,{r1-r12,lr}         ;// Pop type, vec, basepri, registers and LR
    msr     psp,r0                  ;// Restore PSP
    msr     basepri,r3              ;// Restore basepri

    bx      lr                      ;// Return