File indexing completed on 2025-05-11 08:23:44
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015 #include "bspopts.h"
0016
0017 .section .text
0018
0019 .align 256
0020 .globl _deba
0021
0022 _deba:
0023 debug_reset_handler:
0024
0025 xor r0,r0,r0
0026
0027 wcsr IE, r0
0028
0029 wcsr IM,r0
0030
0031 .extern crt0
0032 mvhi r1, hi(crt0)
0033 ori r1, r1, lo(crt0)
0034 b r1
0035 nop
0036 nop
0037 debug_breakpoint_handler:
0038
0039 xor r0, r0, r0
0040 mvhi r0, hi(registers)
0041 ori r0, r0, lo(registers)
0042 sw (r0+116), ra
0043 sw (r0+128), ba
0044 calli save_all
0045 calli handle_exception
0046 calli b_restore_and_return
0047 debug_instruction_bus_error_handler:
0048
0049 xor r0, r0, r0
0050 mvhi r0, hi(registers)
0051 ori r0, r0, lo(registers)
0052 sw (r0+116), ra
0053 sw (r0+128), ea
0054 calli save_all
0055 calli handle_exception
0056 calli e_restore_and_return
0057 debug_watchpoint_handler:
0058
0059 xor r0, r0, r0
0060 mvhi r0, hi(registers)
0061 ori r0, r0, lo(registers)
0062 sw (r0+116), ra
0063 sw (r0+128), ba
0064 calli save_all
0065 calli handle_exception
0066 calli b_restore_and_return
0067 debug_data_bus_error_handler:
0068
0069 xor r0, r0, r0
0070 mvhi r0, hi(registers)
0071 ori r0, r0, lo(registers)
0072 sw (r0+116), ra
0073 sw (r0+128), ea
0074 calli save_all
0075 calli handle_exception
0076 calli e_restore_and_return
0077 debug_divide_by_zero_handler:
0078
0079 xor r0, r0, r0
0080 mvhi r0, hi(registers)
0081 ori r0, r0, lo(registers)
0082 sw (r0+116), ra
0083 sw (r0+128), ea
0084 calli save_all
0085 calli handle_exception
0086 calli e_restore_and_return
0087 debug_interrupt_handler:
0088 bi debug_isr_handler
0089 nop
0090 nop
0091 nop
0092 nop
0093 nop
0094 nop
0095 nop
0096 debug_system_call_handler:
0097
0098 xor r0, r0, r0
0099 mvhi r0, hi(registers)
0100 ori r0, r0, lo(registers)
0101 sw (r0+116), ra
0102 sw (r0+128), ea
0103 calli save_all
0104 calli handle_exception
0105 calli e_restore_and_return
0106
0107 debug_isr_handler:
0108 addi sp, sp, -156
0109 sw (sp+4), r1
0110 sw (sp+8), r2
0111 sw (sp+12), r3
0112 sw (sp+16), r4
0113 sw (sp+20), r5
0114 sw (sp+24), r6
0115 sw (sp+28), r7
0116 sw (sp+32), r8
0117 sw (sp+36), r9
0118 sw (sp+40), r10
0119 sw (sp+44), ra
0120 sw (sp+48), ea
0121 sw (sp+52), ba
0122 sw (sp+56), r11
0123 sw (sp+60), r12
0124 sw (sp+64), r13
0125 sw (sp+68), r14
0126 sw (sp+72), r15
0127 sw (sp+76), r16
0128 sw (sp+80), r17
0129 sw (sp+84), r18
0130 sw (sp+88), r19
0131 sw (sp+92), r20
0132 sw (sp+96), r21
0133 sw (sp+100), r22
0134 sw (sp+104), r23
0135 sw (sp+108), r24
0136 sw (sp+112), r25
0137 sw (sp+116), r26
0138 sw (sp+120), r27
0139
0140 addi r1, sp, 156
0141 sw (sp+124), r1
0142
0143 sw (sp+128), ea
0144
0145 mvi r1, 6
0146 sw (sp+132), r1
0147 rcsr r1, EBA
0148 sw (sp+136), r1
0149 rcsr r1, DEBA
0150 sw (sp+140), r1
0151 rcsr r1, IE
0152 sw (sp+144), r1
0153
0154
0155 rcsr r2, IP
0156 rcsr r3, IM
0157 mv r1, r0
0158 and r2, r2, r3
0159 mvi r3, 1
0160 be r2, r0, 3f
0161 1:
0162 and r4, r2, r3
0163 bne r4, r0, 2f
0164 sli r3, r3, 1
0165 addi r1, r1, 1
0166 bi 1b
0167 2:
0168 addi r2, sp, 4
0169
0170 .extern __ISR_Handler
0171 mvhi r3, hi(__ISR_Handler)
0172 ori r3, r3, lo(__ISR_Handler)
0173 call r3
0174 3:
0175 lw r1, (sp+4)
0176 lw r2, (sp+8)
0177 lw r3, (sp+12)
0178 lw r4, (sp+16)
0179 lw r5, (sp+20)
0180 lw r6, (sp+24)
0181 lw r7, (sp+28)
0182 lw r8, (sp+32)
0183 lw r9, (sp+36)
0184 lw r10, (sp+40)
0185 lw ra, (sp+44)
0186 lw ea, (sp+48)
0187 lw ba, (sp+52)
0188 lw r11, (sp+56)
0189 lw r12, (sp+60)
0190 lw r13, (sp+64)
0191 lw r14, (sp+68)
0192 lw r15, (sp+72)
0193 lw r16, (sp+76)
0194 lw r17, (sp+80)
0195 lw r18, (sp+84)
0196 lw r19, (sp+88)
0197 lw r20, (sp+92)
0198 lw r21, (sp+96)
0199 lw r22, (sp+100)
0200 lw r23, (sp+104)
0201 lw r24, (sp+108)
0202 lw r25, (sp+112)
0203 lw r26, (sp+116)
0204 lw r27, (sp+120)
0205 lw ea, (sp+136)
0206 wcsr EBA, ea
0207 lw ea, (sp+140)
0208 wcsr DEBA, ea
0209
0210 lw ea, (sp+128)
0211
0212 lw sp, (sp+124)
0213 eret
0214
0215 save_all:
0216 sw (r0+4), r1
0217 sw (r0+8), r2
0218 sw (r0+12), r3
0219 sw (r0+16), r4
0220 sw (r0+20), r5
0221 sw (r0+24), r6
0222 sw (r0+28), r7
0223 sw (r0+32), r8
0224 sw (r0+36), r9
0225 sw (r0+40), r10
0226 sw (r0+44), r11
0227 sw (r0+48), r12
0228 sw (r0+52), r13
0229 sw (r0+56), r14
0230 sw (r0+60), r15
0231 sw (r0+64), r16
0232 sw (r0+68), r17
0233 sw (r0+72), r18
0234 sw (r0+76), r19
0235 sw (r0+80), r20
0236 sw (r0+84), r21
0237 sw (r0+88), r22
0238 sw (r0+92), r23
0239 sw (r0+96), r24
0240 sw (r0+100), r25
0241 sw (r0+104), r26
0242 sw (r0+108), r27
0243 sw (r0+112), sp
0244
0245 sw (r0+120), ea
0246 sw (r0+124), ba
0247
0248
0249 rcsr r1, EBA
0250 sw (r0+136), r1
0251 rcsr r1, DEBA
0252 sw (r0+140), r1
0253 rcsr r1, IE
0254 sw (r0+144), r1
0255
0256
0257 andi r1, ra, 0xff
0258 srui r1, r1, 5
0259 sw (r0+132), r1
0260
0261
0262 mv r1, r0
0263
0264
0265 xor r0, r0, r0
0266
0267
0268 sw (r1+0), r0
0269 ret
0270
0271
0272
0273 restore_gp:
0274 lw r1, (r0+4)
0275 lw r2, (r0+8)
0276 lw r3, (r0+12)
0277 lw r4, (r0+16)
0278 lw r5, (r0+20)
0279 lw r6, (r0+24)
0280 lw r7, (r0+28)
0281 lw r8, (r0+32)
0282 lw r9, (r0+36)
0283 lw r10, (r0+40)
0284 lw r11, (r0+44)
0285 lw r12, (r0+48)
0286 lw r13, (r0+52)
0287 lw r14, (r0+56)
0288 lw r15, (r0+60)
0289 lw r16, (r0+64)
0290 lw r17, (r0+68)
0291 lw r18, (r0+72)
0292 lw r19, (r0+76)
0293 lw r20, (r0+80)
0294 lw r21, (r0+84)
0295 lw r22, (r0+88)
0296 lw r23, (r0+92)
0297 lw r24, (r0+96)
0298 lw r25, (r0+100)
0299 lw r26, (r0+104)
0300 lw r27, (r0+108)
0301 ret
0302
0303
0304 e_restore_and_return:
0305
0306 mvhi r0, hi(registers)
0307 ori r0, r0, lo(registers)
0308 calli restore_gp
0309 lw sp, (r0+112)
0310 lw ra, (r0+116)
0311 lw ba, (r0+124)
0312 lw ea, (r0+136)
0313 wcsr EBA, ea
0314 lw ea, (r0+140)
0315 wcsr DEBA, ea
0316
0317 lw ea, (r0+128)
0318 xor r0, r0, r0
0319 eret
0320
0321
0322 b_restore_and_return:
0323
0324 mvhi r0, hi(registers)
0325 ori r0, r0, lo(registers)
0326 calli restore_gp
0327 lw sp, (r0+112)
0328 lw ra, (r0+116)
0329 lw ea, (r0+120)
0330 lw ba, (r0+136)
0331 wcsr EBA, ba
0332 lw ba, (r0+140)
0333 wcsr DEBA, ba
0334
0335 lw ba, (r0+128)
0336 xor r0, r0, r0
0337 bret
0338