summaryrefslogtreecommitdiff
path: root/hifi/xaf/hifi-dpf/core/util/gdbstub/gdbstub-entry.S
diff options
context:
space:
mode:
Diffstat (limited to 'hifi/xaf/hifi-dpf/core/util/gdbstub/gdbstub-entry.S')
-rw-r--r--hifi/xaf/hifi-dpf/core/util/gdbstub/gdbstub-entry.S198
1 files changed, 198 insertions, 0 deletions
diff --git a/hifi/xaf/hifi-dpf/core/util/gdbstub/gdbstub-entry.S b/hifi/xaf/hifi-dpf/core/util/gdbstub/gdbstub-entry.S
new file mode 100644
index 00000000..50a33a93
--- /dev/null
+++ b/hifi/xaf/hifi-dpf/core/util/gdbstub/gdbstub-entry.S
@@ -0,0 +1,198 @@
+/*******************************************************************************
+* Copyright (C) 2018 Cadence Design Systems, Inc.
+*
+* Permission is hereby granted, free of charge, to any person obtaining
+* a copy of this software and associated documentation files (the
+* "Software"), to use this Software with Cadence processor cores only and
+* not with any other processors and platforms, subject to
+* the following conditions:
+*
+* The above copyright notice and this permission notice shall be included
+* in all copies or substantial portions of the Software.
+*
+* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+******************************************************************************/
+#include "xtensa-defs.h"
+
+.macro SAVE_ reg, loc
+ rsr a1, \reg
+ s32i a1, a3, \loc * 4
+.endm
+.macro SAVE reg
+ SAVE_ \reg, \reg
+.endm
+
+.macro LOAD_ reg, loc
+ l32i a1, a3, \loc * 4
+ wsr a1, \reg
+.endm
+.macro LOAD reg
+ LOAD_ \reg, \reg
+.endm
+
+ .section ".DebugExceptionVector.text", "ax"
+ .global DebugExceptionVector
+
+DebugExceptionVector:
+ j 1f
+ .align 4
+ .literal_position
+1:
+ xsr a2, DEBUG_EXCSAVE
+ jx a2
+
+ .text
+ .global DebugExceptionEntry
+ .align 4
+
+DebugExceptionEntry:
+ j 1f
+ .align 4
+ .literal_position
+1:
+ movi a2, aregs
+ s32i a0, a2, 0
+ s32i a1, a2, 4
+ rsr a1, DEBUG_EXCSAVE
+ s32i a1, a2, 8
+ s32i a3, a2, 12
+
+ movi a3, sregs
+ SAVE LBEG
+ SAVE LEND
+ SAVE LCOUNT
+ SAVE SAR
+ SAVE WINDOWBASE
+ SAVE WINDOWSTART
+
+ rsr a1, DEBUG_PC
+ movi a2, initial_breakpoint
+ bne a1, a2, 1f
+ addi a1, a1, 3
+1:
+ s32i a1, a3, DEBUG_PC * 4
+
+ SAVE EXCSAVE_1
+ SAVE_ DEBUG_PS, PS
+ SAVE EXCCAUSE
+ SAVE DEBUGCAUSE
+ SAVE EXCVADDR
+
+ movi a1, XCHAL_NUM_AREGS / 4 - 1
+ movi a2, aregs
+1:
+ s32i a4, a2, 16
+ s32i a5, a2, 20
+ s32i a6, a2, 24
+ s32i a7, a2, 28
+
+ addi a6, a2, 16
+ addi a5, a1, -1
+ rotw 1
+ bnez a1, 1b
+
+ movi a1, 1
+ wsr a1, windowstart
+ movi a0, 0
+ wsr a0, windowbase
+ rsync
+
+ movi a0, 0
+ movi a1, stack + STACK_SIZE - 20
+ rsr a2, ps
+ addi a2, a2, -PS_EXCM_MASK
+ wsr a2, ps
+ rsync
+
+ movi a4, handle_exception
+ callx4 a4
+
+DebugExceptionExit:
+ movi a2, DebugExceptionEntry
+ wsr a2, DEBUG_EXCSAVE
+
+ rsr a2, ps
+ addi a2, a2, PS_EXCM_MASK
+ wsr a2, ps
+ rsync
+
+ movi a3, sregs
+ LOAD LBEG
+ LOAD LEND
+ LOAD LCOUNT
+ /* TODO: handle unlikely return-to-lend case */
+ LOAD SAR
+ LOAD WINDOWBASE
+ rsync
+ movi a3, sregs
+ LOAD WINDOWSTART
+ LOAD DEBUG_PC
+ LOAD EXCSAVE_1
+ LOAD_ DEBUG_PS, PS
+ LOAD EXCCAUSE
+ LOAD EXCVADDR
+
+ movi a6, aregs
+ movi a5, XCHAL_NUM_AREGS / 4 - 2
+1:
+ l32i a0, a6, 0
+ l32i a1, a6, 4
+ l32i a2, a6, 8
+ l32i a3, a6, 12
+
+ beqz a5, 2f
+ addi a10, a6, 16
+ addi a9, a5, -1
+ rotw 1
+ j 1b
+2:
+ l32i a4, a6, 16
+ l32i a5, a6, 20
+ l32i a7, a6, 28
+ l32i a6, a6, 24
+ rotw 2
+
+ rfi XCHAL_DEBUGLEVEL
+
+
+#ifdef LIBC_LEVEL1_HANDLER
+ .global fault_handler
+ .align 4
+fault_handler:
+ rsr a2, epc1
+ addi a2, a2, 3
+ wsr a2, epc1
+ rsync
+ movi a2, mem_err
+ s32i a2, a2, 0
+
+ l32i a2, a1, 16
+ l32i a3, a1, 20
+ addi a1, a1, 256
+ rfe
+#endif
+
+
+ .global init_debug_entry
+ .align 4
+init_debug_entry:
+ entry a1, 16
+ movi a2, DebugExceptionEntry
+ wsr a2, DEBUG_EXCSAVE
+ isync
+ retw
+
+ .global breakpoint
+ .align 4
+breakpoint:
+ entry a1, 16
+initial_breakpoint:
+ _break 0, 0
+ retw