- Implemented execp*.
[planlOS.git] / system / kernel / ke / intstubs.S
blobd7caafc7206295794b2e4b72999fa1b52205346f
2 .text
3 .extern keIntHandler
4 .extern keGetCurrentStack
5 .extern kernel_stack
7 // Macros for interrupt handlers
8 .macro int_no_error nr
9 .globl keInt\nr
10 keInt\nr:
11         pushl $0x0
12         pushl $0x\nr
13         jmp common_isr
14 .endm
16 .macro int_error nr
17 .globl keInt\nr
18 keInt\nr:
19         pushl $0x\nr
20         jmp common_isr
21 .endm
23 // Exception handlers
24 int_no_error 00
25 int_no_error 01
26 int_no_error 02
27 int_no_error 03
28 int_no_error 04
29 int_no_error 05
30 int_no_error 06
31 int_no_error 07
32 int_error 08
33 int_no_error 09
34 int_error 0a
35 int_error 0b
36 int_error 0c
37 int_error 0d
38 int_error 0e
39 int_no_error 0f
40 int_error 10
41 int_no_error 11
42 int_no_error 12
43 int_no_error 13
44 int_no_error 14
45 int_no_error 15
46 int_no_error 16
47 int_no_error 17
48 int_no_error 18
49 int_no_error 19
50 int_no_error 1a
51 int_no_error 1b
52 int_no_error 1c
53 int_no_error 1d
54 int_no_error 1e
55 int_no_error 1f
57 // IRQs
58 int_no_error 20
59 int_no_error 21
60 int_no_error 22
61 int_no_error 23
62 int_no_error 24
63 int_no_error 25
64 int_no_error 26
65 int_no_error 27
66 int_no_error 28
67 int_no_error 29
68 int_no_error 2a
69 int_no_error 2b
70 int_no_error 2c
71 int_no_error 2d
72 int_no_error 2e
73 int_no_error 2f
74 // APIC interrupts
75 int_no_error 30
76 int_no_error 31
77 int_no_error 32
78 int_no_error 33
79 int_no_error 34
80 int_no_error 35
81 int_no_error 36
82 int_no_error 37
84 // Syscall
85 int_no_error 80
87 common_isr:
88         // Save registers
89         pushal
90         pushl %ds
91         pushl %es
92         pushl %fs
93         pushl %gs
94         
95         // Ring 0 segments
96         mov $0x10, %ax
97         mov %ax, %ds
98         mov %ax, %es
99         mov %ax, %fs
100         mov %ax, %gs
101         
102         // Get stack
103         mov %esp, %ecx
104         // Call handler
105         pushl $0
106         pushl $0
107         pushl %ecx
108         call keIntHandler
109         movl %eax, %esp
110         
111         // Restore registers
112         popl %gs
113         popl %fs
114         popl %es
115         popl %ds
116         popal
117         
118         add $0x8, %esp
119         
120         iret