1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
|
.extern panic_rsp
.macro pushall
push %rax
push %rbx
push %rcx
push %rdx
push %rsi
push %rdi
push %r8
push %r9
push %r10
push %r11
push %r12
push %r13
push %r14
push %r15
mov %ds, %ax
push %rax
mov %es, %ax
push %rax
mov %ss, %ax
push %rax
mov $0x10, %ax
mov %ax, %ds
mov %ax, %es
mov 0x80(%rsp), %rax
.endm
.macro popall
pop %rax
pop %rax
mov %ax, %es
pop %rax
mov %ax, %ds
pop %r15
pop %r14
pop %r13
pop %r12
pop %r11
pop %r10
pop %r9
pop %r8
pop %rdi
pop %rsi
pop %rdx
pop %rcx
pop %rbx
pop %rax
.endm
.macro isr_no_error number
.global isr\number
isr\number:
pushall
cld
mov %rsp, panic_rsp
call isr\number\()_handler
popall
iretq
.endm
.macro isr_error number
.global isr\number
isr\number:
pushall
mov 0x88(%rsp), %rdi
cld
mov %rsp, panic_rsp
call isr\number\()_handler
popall
add $8, %rsp
iretq
.endm
isr_no_error 0
isr_no_error 1
isr_no_error 2
isr_no_error 3
isr_no_error 4
isr_no_error 5
isr_no_error 6
isr_no_error 7
isr_error 8
isr_no_error 9
isr_error 10
isr_error 11
isr_error 12
isr_error 13
isr_error 14
isr_no_error 15
isr_no_error 16
isr_error 17
isr_no_error 18
isr_no_error 19
isr_no_error 20
isr_no_error 21
isr_no_error 22
isr_no_error 23
isr_no_error 24
isr_no_error 25
isr_no_error 26
isr_no_error 27
isr_no_error 28
isr_error 29
isr_error 30
isr_no_error 31
.macro irq number
.global irq\number
irq\number:
pushall
cld
mov %rsp, panic_rsp
call irq\number\()_handler
popall
iretq
.endm
irq 0
irq 1
irq 2
irq 3
irq 4
irq 5
irq 6
irq 7
irq 8
irq 9
irq 10
irq 11
irq 12
irq 13
irq 14
irq 15
|