89 lines
1.2 KiB
ArmAsm
89 lines
1.2 KiB
ArmAsm
|
.macro intr_stub nr
|
||
|
.global intr_stub_\nr
|
||
|
intr_stub_\nr:
|
||
|
pushl $0
|
||
|
pushl $\nr
|
||
|
jmp intr_common_handler
|
||
|
.endm
|
||
|
|
||
|
.macro intr_stub_error_code nr
|
||
|
.global intr_stub_\nr
|
||
|
intr_stub_\nr:
|
||
|
pushl $\nr
|
||
|
jmp intr_common_handler
|
||
|
.endm
|
||
|
|
||
|
// Exceptions
|
||
|
intr_stub 0
|
||
|
intr_stub 1
|
||
|
intr_stub 2
|
||
|
intr_stub 3
|
||
|
intr_stub 4
|
||
|
intr_stub 5
|
||
|
intr_stub 6
|
||
|
intr_stub 7
|
||
|
intr_stub_error_code 8
|
||
|
intr_stub 9
|
||
|
intr_stub_error_code 10
|
||
|
intr_stub_error_code 11
|
||
|
intr_stub_error_code 12
|
||
|
intr_stub_error_code 13
|
||
|
intr_stub_error_code 14
|
||
|
intr_stub 15
|
||
|
intr_stub 16
|
||
|
intr_stub_error_code 17
|
||
|
intr_stub 18
|
||
|
|
||
|
// IRQs
|
||
|
intr_stub 32
|
||
|
intr_stub 33
|
||
|
intr_stub 34
|
||
|
intr_stub 35
|
||
|
intr_stub 36
|
||
|
intr_stub 37
|
||
|
intr_stub 38
|
||
|
intr_stub 39
|
||
|
intr_stub 40
|
||
|
intr_stub 41
|
||
|
intr_stub 42
|
||
|
intr_stub 43
|
||
|
intr_stub 44
|
||
|
intr_stub 45
|
||
|
intr_stub 46
|
||
|
intr_stub 47
|
||
|
|
||
|
// System call
|
||
|
intr_stub 48
|
||
|
|
||
|
intr_stub 80
|
||
|
|
||
|
.extern intr_routine
|
||
|
intr_common_handler:
|
||
|
// Save additional cpu state
|
||
|
push %ebp
|
||
|
push %edi
|
||
|
push %esi
|
||
|
push %edx
|
||
|
push %ecx
|
||
|
push %ebx
|
||
|
push %eax
|
||
|
|
||
|
// Call interrupt handler
|
||
|
push %esp
|
||
|
call intr_routine
|
||
|
add $4, %esp
|
||
|
|
||
|
// Restore cpu state
|
||
|
pop %eax
|
||
|
pop %ebx
|
||
|
pop %ecx
|
||
|
pop %edx
|
||
|
pop %esi
|
||
|
pop %edi
|
||
|
pop %ebp
|
||
|
|
||
|
// Fehlercode und Interruptnummer vom Stack nehmen
|
||
|
add $8, %esp
|
||
|
|
||
|
iret
|