12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091 |
- .section .text
- .align 4
- .macro ISR_NOERR index
- .global _isr\index
- _isr\index:
- cli
- push $0
- push $\index
- jmp isr_common
- .endm
- .macro ISR_ERR index
- .global _isr\index
- _isr\index:
- cli
- push $\index
- jmp isr_common
- .endm
- /* Standard X86 interrupt service routines */
- ISR_NOERR 0
- ISR_NOERR 1
- ISR_NOERR 2
- ISR_NOERR 3
- ISR_NOERR 4
- ISR_NOERR 5
- ISR_NOERR 6
- ISR_NOERR 7
- ISR_ERR 8
- ISR_NOERR 9
- ISR_ERR 10
- ISR_ERR 11
- ISR_ERR 12
- ISR_ERR 13
- ISR_ERR 14
- ISR_NOERR 15
- ISR_NOERR 16
- ISR_NOERR 17
- ISR_NOERR 18
- ISR_NOERR 19
- ISR_NOERR 20
- ISR_NOERR 21
- ISR_NOERR 22
- ISR_NOERR 23
- ISR_NOERR 24
- ISR_NOERR 25
- ISR_NOERR 26
- ISR_NOERR 27
- ISR_NOERR 28
- ISR_NOERR 29
- ISR_NOERR 30
- ISR_NOERR 31
- ISR_NOERR 127
- .extern fault_handler
- .type fault_handler, @function
- isr_common:
- /* Push all registers */
- pusha
- /* Save segment registers */
- push %ds
- push %es
- push %fs
- push %gs
- mov $0x10, %ax
- mov %ax, %ds
- mov %ax, %es
- mov %ax, %fs
- mov %ax, %gs
- cld
- /* Call fault handler */
- push %esp
- call fault_handler
- add $4, %esp
- /* Restore segment registers */
- pop %gs
- pop %fs
- pop %es
- pop %ds
- /* Restore registers */
- popa
- /* Cleanup error code and ISR # */
- add $8, %esp
- /* pop CS, EIP, EFLAGS, SS and ESP */
- iret
|