@
.section .init
interrupt_vector_table:
-ivt_reset: b _start @ Reset
-ivt_undef: b . @ #UD
-ivt_svc: b SVC_Handler @ SVC (used to be called SWI)
-ivt_prefetch: b PrefetchAbort @ Prefetch abort
-ivt_data: b DataAbort @ Data abort
-ivt_unused: b . @ Not Used
-ivt_irq: b IRQHandler @ IRQ
-ivt_fiq: b . @ FIQ (Fast interrupt)
+ivt_reset: b _start @ 0x00 Reset
+ivt_undef: b . @ 0x04 #UD
+ivt_svc: b SVC_Handler @ 0x08 SVC (used to be called SWI)
+ivt_prefetch: b PrefetchAbort @ 0x0C Prefetch abort
+ivt_data: b DataAbort @ 0x10 Data abort
+ivt_unused: b . @ 0x14 Not Used
+ivt_irq: b IRQHandler @ 0x18 IRQ
+ivt_fiq: b . @ 0x1C FIQ (Fast interrupt)
.globl _start
_start:
rfeia sp! @ Pop state (actually RFEFD)
.arm_specifics:
and r4, #0xFF
+ mov r0, r4 @ Number
+ mov r1, sp @ Arguments
+
+ ldr r4, =ARMv7_int_HandleSyscalls
+ blx r4
-@
-@ Cache invalidation
- cmp r4, #0x001
- bne 1f
- @ Page align
- mov r2, #0x1000
- sub r2, #1
- add r1, r2
- mvn r2, r2
- and r0, r2
- and r1, r2
- cmp r0, #0x78000000
- cmpls r1, #0x78000000
- movge r0, #-1
- movge r1, #0
- movge r2, #1
- bge .ret
-
-2:
- cmp r0, r1
- mcrlt p15, 0, r0, c7, c5, 1
- mcrlt p15, 0, r0, c7, c6, 1
- addlt r0, #0x1000
- blt 2b
- mov r0, #0
- mov r1, #0
- mov r2, #0
- b .ret
-1:
- mov r0, #-1
- mov r1, #0
- mov r2, #-1
-.ret:
add sp, #4*4
pop {r4-r12}
rfeia sp!
PUSH_GPRS
-@ ldr r0, =csIRQ_Tag
-@ ldr r1, =csIRQ_Fmt
-@ ldr r4, =Log_Debug
-@ blx r4
+ ldr r0, =csIRQ_Tag
+ ldr r1, =csIRQ_Fmt
+ ldr r4, =Log_Debug
+ blx r4
@ Call the registered handler
ldr r0, gpIRQHandler
blx r4
b .
+.section .rodata
csIRQ_Tag:
csAbort_Tag:
.asciz "ARMv7"