summaryrefslogtreecommitdiffstats
path: root/c/src/lib/libbsp/lm32/shared/gdbstub/lm32-debug.S
diff options
context:
space:
mode:
Diffstat (limited to 'c/src/lib/libbsp/lm32/shared/gdbstub/lm32-debug.S')
-rw-r--r--c/src/lib/libbsp/lm32/shared/gdbstub/lm32-debug.S338
1 files changed, 0 insertions, 338 deletions
diff --git a/c/src/lib/libbsp/lm32/shared/gdbstub/lm32-debug.S b/c/src/lib/libbsp/lm32/shared/gdbstub/lm32-debug.S
deleted file mode 100644
index 7bd2c504e2..0000000000
--- a/c/src/lib/libbsp/lm32/shared/gdbstub/lm32-debug.S
+++ /dev/null
@@ -1,338 +0,0 @@
-/*
- * lm32 debug exception vectors
- *
- * Michael Walle <michael@walle.cc>, 2009
- *
- * If debugging is enabled the debug exception base address (deba) gets
- * remapped to this file.
- *
- * The license and distribution terms for this file may be
- * found in the file LICENSE in this distribution or at
- * http://www.rtems.org/license/LICENSE.
- *
- */
-
-#include "bspopts.h"
-
-.section .text
-/* (D)EBA alignment */
-.align 256
-.globl _deba
-
-_deba:
-debug_reset_handler:
- /* Clear r0 */
- xor r0,r0,r0
- /* Disable interrupts */
- wcsr IE, r0
- /* Mask all interrupts */
- wcsr IM,r0
- /* Jump to original crt0 */
- .extern crt0
- mvhi r1, hi(crt0)
- ori r1, r1, lo(crt0)
- b r1
- nop
- nop
-debug_breakpoint_handler:
- /* Clear r0 in case it was corrupted */
- xor r0, r0, r0
- mvhi r0, hi(registers)
- ori r0, r0, lo(registers)
- sw (r0+116), ra
- sw (r0+128), ba
- calli save_all
- calli handle_exception
- calli b_restore_and_return
-debug_instruction_bus_error_handler:
- /* Clear r0 in case it was corrupted */
- xor r0, r0, r0
- mvhi r0, hi(registers)
- ori r0, r0, lo(registers)
- sw (r0+116), ra
- sw (r0+128), ea
- calli save_all
- calli handle_exception
- calli e_restore_and_return
-debug_watchpoint_handler:
- /* Clear r0 in case it was corrupted */
- xor r0, r0, r0
- mvhi r0, hi(registers)
- ori r0, r0, lo(registers)
- sw (r0+116), ra
- sw (r0+128), ba
- calli save_all
- calli handle_exception
- calli b_restore_and_return
-debug_data_bus_error_handler:
- /* Clear r0 in case it was corrupted */
- xor r0, r0, r0
- mvhi r0, hi(registers)
- ori r0, r0, lo(registers)
- sw (r0+116), ra
- sw (r0+128), ea
- calli save_all
- calli handle_exception
- calli e_restore_and_return
-debug_divide_by_zero_handler:
- /* Clear r0 in case it was corrupted */
- xor r0, r0, r0
- mvhi r0, hi(registers)
- ori r0, r0, lo(registers)
- sw (r0+116), ra
- sw (r0+128), ea
- calli save_all
- calli handle_exception
- calli e_restore_and_return
-debug_interrupt_handler:
- bi debug_isr_handler
- nop
- nop
- nop
- nop
- nop
- nop
- nop
-debug_system_call_handler:
- /* Clear r0 in case it was corrupted */
- xor r0, r0, r0
- mvhi r0, hi(registers)
- ori r0, r0, lo(registers)
- sw (r0+116), ra
- sw (r0+128), ea
- calli save_all
- calli handle_exception
- calli e_restore_and_return
-
-debug_isr_handler:
- addi sp, sp, -156
- sw (sp+4), r1
- sw (sp+8), r2
- sw (sp+12), r3
- sw (sp+16), r4
- sw (sp+20), r5
- sw (sp+24), r6
- sw (sp+28), r7
- sw (sp+32), r8
- sw (sp+36), r9
- sw (sp+40), r10
- sw (sp+44), ra
- sw (sp+48), ea
- sw (sp+52), ba
- sw (sp+56), r11
- sw (sp+60), r12
- sw (sp+64), r13
- sw (sp+68), r14
- sw (sp+72), r15
- sw (sp+76), r16
- sw (sp+80), r17
- sw (sp+84), r18
- sw (sp+88), r19
- sw (sp+92), r20
- sw (sp+96), r21
- sw (sp+100), r22
- sw (sp+104), r23
- sw (sp+108), r24
- sw (sp+112), r25
- sw (sp+116), r26
- sw (sp+120), r27
- /* 124 - SP */
- addi r1, sp, 156
- sw (sp+124), r1
- /* 128 - PC */
- sw (sp+128), ea
- /* 132 - EID */
- mvi r1, 6
- sw (sp+132), r1
- rcsr r1, EBA
- sw (sp+136), r1
- rcsr r1, DEBA
- sw (sp+140), r1
- rcsr r1, IE
- sw (sp+144), r1
-
- /* This is the same code as in cpu_asm.S */
- rcsr r2, IP
- rcsr r3, IM
- mv r1, r0
- and r2, r2, r3
- mvi r3, 1
- be r2, r0, 3f
-1:
- and r4, r2, r3
- bne r4, r0, 2f
- sli r3, r3, 1
- addi r1, r1, 1
- bi 1b
-2:
- addi r2, sp, 4
-
- .extern __ISR_Handler
- mvhi r3, hi(__ISR_Handler)
- ori r3, r3, lo(__ISR_Handler)
- call r3
-3:
- lw r1, (sp+4)
- lw r2, (sp+8)
- lw r3, (sp+12)
- lw r4, (sp+16)
- lw r5, (sp+20)
- lw r6, (sp+24)
- lw r7, (sp+28)
- lw r8, (sp+32)
- lw r9, (sp+36)
- lw r10, (sp+40)
- lw ra, (sp+44)
- lw ea, (sp+48)
- lw ba, (sp+52)
- lw r11, (sp+56)
- lw r12, (sp+60)
- lw r13, (sp+64)
- lw r14, (sp+68)
- lw r15, (sp+72)
- lw r16, (sp+76)
- lw r17, (sp+80)
- lw r18, (sp+84)
- lw r19, (sp+88)
- lw r20, (sp+92)
- lw r21, (sp+96)
- lw r22, (sp+100)
- lw r23, (sp+104)
- lw r24, (sp+108)
- lw r25, (sp+112)
- lw r26, (sp+116)
- lw r27, (sp+120)
- lw ea, (sp+136)
- wcsr EBA, ea
- lw ea, (sp+140)
- wcsr DEBA, ea
- /* Restore EA from PC */
- lw ea, (sp+128)
- /* Stack pointer must be restored last, in case it has been updated */
- lw sp, (sp+124)
- eret
-
-save_all:
- sw (r0+4), r1
- sw (r0+8), r2
- sw (r0+12), r3
- sw (r0+16), r4
- sw (r0+20), r5
- sw (r0+24), r6
- sw (r0+28), r7
- sw (r0+32), r8
- sw (r0+36), r9
- sw (r0+40), r10
- sw (r0+44), r11
- sw (r0+48), r12
- sw (r0+52), r13
- sw (r0+56), r14
- sw (r0+60), r15
- sw (r0+64), r16
- sw (r0+68), r17
- sw (r0+72), r18
- sw (r0+76), r19
- sw (r0+80), r20
- sw (r0+84), r21
- sw (r0+88), r22
- sw (r0+92), r23
- sw (r0+96), r24
- sw (r0+100), r25
- sw (r0+104), r26
- sw (r0+108), r27
- sw (r0+112), sp
- /* 116 - RA - saved in handler code above */
- sw (r0+120), ea
- sw (r0+124), ba
- /* 128 - PC - saved in handler code above */
- /* 132 - EID - saved below */
- rcsr r1, EBA
- sw (r0+136), r1
- rcsr r1, DEBA
- sw (r0+140), r1
- rcsr r1, IE
- sw (r0+144), r1
-
- /* Work out EID from exception entry point address */
- andi r1, ra, 0xff
- srui r1, r1, 5
- sw (r0+132), r1
-
- /* Save pointer to registers */
- mv r1, r0
-
- /* Restore r0 to 0 */
- xor r0, r0, r0
-
- /* Save r0 (hardcoded to 0) */
- sw (r1+0), r0
- ret
-
-
-/* Restore gp registers */
-restore_gp:
- lw r1, (r0+4)
- lw r2, (r0+8)
- lw r3, (r0+12)
- lw r4, (r0+16)
- lw r5, (r0+20)
- lw r6, (r0+24)
- lw r7, (r0+28)
- lw r8, (r0+32)
- lw r9, (r0+36)
- lw r10, (r0+40)
- lw r11, (r0+44)
- lw r12, (r0+48)
- lw r13, (r0+52)
- lw r14, (r0+56)
- lw r15, (r0+60)
- lw r16, (r0+64)
- lw r17, (r0+68)
- lw r18, (r0+72)
- lw r19, (r0+76)
- lw r20, (r0+80)
- lw r21, (r0+84)
- lw r22, (r0+88)
- lw r23, (r0+92)
- lw r24, (r0+96)
- lw r25, (r0+100)
- lw r26, (r0+104)
- lw r27, (r0+108)
- ret
-
-/* Restore registers and return from exception */
-e_restore_and_return:
- /* first restore gp registers */
- mvhi r0, hi(registers)
- ori r0, r0, lo(registers)
- calli restore_gp
- lw sp, (r0+112)
- lw ra, (r0+116)
- lw ba, (r0+124)
- lw ea, (r0+136)
- wcsr EBA, ea
- lw ea, (r0+140)
- wcsr DEBA, ea
- /* Restore EA from PC */
- lw ea, (r0+128)
- xor r0, r0, r0
- eret
-
-/* Restore registers and return from breakpoint */
-b_restore_and_return:
- /* first restore gp registers */
- mvhi r0, hi(registers)
- ori r0, r0, lo(registers)
- calli restore_gp
- lw sp, (r0+112)
- lw ra, (r0+116)
- lw ea, (r0+120)
- lw ba, (r0+136)
- wcsr EBA, ba
- lw ba, (r0+140)
- wcsr DEBA, ba
- /* Restore BA from PC */
- lw ba, (r0+128)
- xor r0, r0, r0
- bret
-