diff options
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.S | 338 |
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 - |