Rev 1021 | Rev 1121 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
| Rev 1021 | Rev 1094 | ||
|---|---|---|---|
| Line 119... | Line 119... | ||
| 119 | rdmsr |
119 | rdmsr |
| 120 | ret |
120 | ret |
| 121 | 121 | ||
| 122 | # Push all general purpose registers on stack except %rbp, %rsp |
122 | # Push all general purpose registers on stack except %rbp, %rsp |
| 123 | .macro save_all_gpr |
123 | .macro save_all_gpr |
| 124 | movq %rbp, IOFFSET_RBP(%rsp) |
- | |
| 125 | movq %rax, IOFFSET_RAX(%rsp) |
124 | movq %rax, IOFFSET_RAX(%rsp) |
| 126 | movq %rbx, IOFFSET_RBX(%rsp) |
- | |
| 127 | movq %rcx, IOFFSET_RCX(%rsp) |
125 | movq %rcx, IOFFSET_RCX(%rsp) |
| 128 | movq %rdx, IOFFSET_RDX(%rsp) |
126 | movq %rdx, IOFFSET_RDX(%rsp) |
| 129 | movq %rsi, IOFFSET_RSI(%rsp) |
127 | movq %rsi, IOFFSET_RSI(%rsp) |
| 130 | movq %rdi, IOFFSET_RDI(%rsp) |
128 | movq %rdi, IOFFSET_RDI(%rsp) |
| 131 | movq %r8, IOFFSET_R8(%rsp) |
129 | movq %r8, IOFFSET_R8(%rsp) |
| 132 | movq %r9, IOFFSET_R9(%rsp) |
130 | movq %r9, IOFFSET_R9(%rsp) |
| 133 | movq %r10, IOFFSET_R10(%rsp) |
131 | movq %r10, IOFFSET_R10(%rsp) |
| 134 | movq %r11, IOFFSET_R11(%rsp) |
132 | movq %r11, IOFFSET_R11(%rsp) |
| - | 133 | #ifdef CONFIG_DEBUG_ALLREGS |
|
| - | 134 | movq %rbx, IOFFSET_RBX(%rsp) |
|
| - | 135 | movq %rbp, IOFFSET_RBP(%rsp) |
|
| 135 | movq %r12, IOFFSET_R12(%rsp) |
136 | movq %r12, IOFFSET_R12(%rsp) |
| 136 | movq %r13, IOFFSET_R13(%rsp) |
137 | movq %r13, IOFFSET_R13(%rsp) |
| 137 | movq %r14, IOFFSET_R14(%rsp) |
138 | movq %r14, IOFFSET_R14(%rsp) |
| 138 | movq %r15, IOFFSET_R15(%rsp) |
139 | movq %r15, IOFFSET_R15(%rsp) |
| - | 140 | #endif |
|
| 139 | .endm |
141 | .endm |
| 140 | 142 | ||
| 141 | .macro restore_all_gpr |
143 | .macro restore_all_gpr |
| 142 | movq IOFFSET_RBP(%rsp), %rbp |
- | |
| 143 | movq IOFFSET_RAX(%rsp), %rax |
144 | movq IOFFSET_RAX(%rsp), %rax |
| 144 | movq IOFFSET_RBX(%rsp), %rbx |
- | |
| 145 | movq IOFFSET_RCX(%rsp), %rcx |
145 | movq IOFFSET_RCX(%rsp), %rcx |
| 146 | movq IOFFSET_RDX(%rsp), %rdx |
146 | movq IOFFSET_RDX(%rsp), %rdx |
| 147 | movq IOFFSET_RSI(%rsp), %rsi |
147 | movq IOFFSET_RSI(%rsp), %rsi |
| 148 | movq IOFFSET_RDI(%rsp), %rdi |
148 | movq IOFFSET_RDI(%rsp), %rdi |
| 149 | movq IOFFSET_R8(%rsp), %r8 |
149 | movq IOFFSET_R8(%rsp), %r8 |
| 150 | movq IOFFSET_R9(%rsp), %r9 |
150 | movq IOFFSET_R9(%rsp), %r9 |
| 151 | movq IOFFSET_R10(%rsp), %r10 |
151 | movq IOFFSET_R10(%rsp), %r10 |
| 152 | movq IOFFSET_R11(%rsp), %r11 |
152 | movq IOFFSET_R11(%rsp), %r11 |
| - | 153 | #ifdef CONFIG_DEBUG_ALLREGS |
|
| - | 154 | movq IOFFSET_RBX(%rsp), %rbx |
|
| - | 155 | movq IOFFSET_RBP(%rsp), %rbp |
|
| 153 | movq IOFFSET_R12(%rsp), %r12 |
156 | movq IOFFSET_R12(%rsp), %r12 |
| 154 | movq IOFFSET_R13(%rsp), %r13 |
157 | movq IOFFSET_R13(%rsp), %r13 |
| 155 | movq IOFFSET_R14(%rsp), %r14 |
158 | movq IOFFSET_R14(%rsp), %r14 |
| 156 | movq IOFFSET_R15(%rsp), %r15 |
159 | movq IOFFSET_R15(%rsp), %r15 |
| - | 160 | #endif |
|
| 157 | .endm |
161 | .endm |
| 158 | 162 | ||
| - | 163 | #ifdef CONFIG_DEBUG_ALLREGS |
|
| - | 164 | # define INTERRUPT_ALIGN 256 |
|
| - | 165 | #else |
|
| - | 166 | # define INTERRUPT_ALIGN 128 |
|
| - | 167 | #endif |
|
| - | 168 | ||
| 159 | ## Declare interrupt handlers |
169 | ## Declare interrupt handlers |
| 160 | # |
170 | # |
| 161 | # Declare interrupt handlers for n interrupt |
171 | # Declare interrupt handlers for n interrupt |
| 162 | # vectors starting at vector i. |
172 | # vectors starting at vector i. |
| 163 | # |
173 | # |
| Line 178... | Line 188... | ||
| 178 | .if (1 << \i) & ERROR_WORD_INTERRUPT_LIST |
188 | .if (1 << \i) & ERROR_WORD_INTERRUPT_LIST |
| 179 | /* |
189 | /* |
| 180 | * Version with error word. |
190 | * Version with error word. |
| 181 | */ |
191 | */ |
| 182 | subq $IREGISTER_SPACE, %rsp |
192 | subq $IREGISTER_SPACE, %rsp |
| 183 | nop |
- | |
| 184 | nop |
- | |
| 185 | nop |
- | |
| 186 | .else |
193 | .else |
| 187 | /* |
194 | /* |
| 188 | * Version without error word, |
195 | * Version without error word, |
| 189 | */ |
196 | */ |
| 190 | subq $(IREGISTER_SPACE+8), %rsp |
197 | subq $(IREGISTER_SPACE+8), %rsp |
| Line 205... | Line 212... | ||
| 205 | restore_all_gpr |
212 | restore_all_gpr |
| 206 | # $8 = Skip error word |
213 | # $8 = Skip error word |
| 207 | addq $(IREGISTER_SPACE+8), %rsp |
214 | addq $(IREGISTER_SPACE+8), %rsp |
| 208 | iretq |
215 | iretq |
| 209 | 216 | ||
| - | 217 | .align INTERRUPT_ALIGN |
|
| 210 | .if (\n-\i)-1 |
218 | .if (\n-\i)-1 |
| 211 | handler "(\i+1)",\n |
219 | handler "(\i+1)",\n |
| 212 | .endif |
220 | .endif |
| 213 | .endm |
221 | .endm |
| 214 | 222 | ||
| - | 223 | .align INTERRUPT_ALIGN |
|
| 215 | interrupt_handlers: |
224 | interrupt_handlers: |
| 216 | h_start: |
225 | h_start: |
| 217 | handler 0 IDT_ITEMS |
226 | handler 0 IDT_ITEMS |
| 218 | h_end: |
227 | h_end: |
| 219 | 228 | ||