repo.or.cz
/
planlOS.git
/
blob
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
log
|
graphiclog1
|
graphiclog2
|
commit
|
commitdiff
|
tree
|
refs
|
edit
|
fork
blame
|
history
|
raw
|
HEAD
- Implemented execp*.
[planlOS.git]
/
system
/
kernel
/
ke
/
intstubs.S
blob
d7caafc7206295794b2e4b72999fa1b52205346f
1
2
.text
3
.extern keIntHandler
4
.extern keGetCurrentStack
5
.extern kernel_stack
6
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
15
16
.macro int_error nr
17
.globl keInt\nr
18
keInt\nr:
19
pushl $0x\nr
20
jmp common_isr
21
.endm
22
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
56
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
83
84
// Syscall
85
int_no_error 80
86
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
121