summaryrefslogtreecommitdiff
path: root/kernel/src/cpu/irq_stub.S
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/src/cpu/irq_stub.S')
-rw-r--r--kernel/src/cpu/irq_stub.S29
1 files changed, 26 insertions, 3 deletions
diff --git a/kernel/src/cpu/irq_stub.S b/kernel/src/cpu/irq_stub.S
index f8a05b6..ee02d3e 100644
--- a/kernel/src/cpu/irq_stub.S
+++ b/kernel/src/cpu/irq_stub.S
@@ -2,6 +2,7 @@
.macro pushall
push %rax
+ push %rbx
push %rcx
push %rdx
push %rsi
@@ -10,11 +11,32 @@
push %r9
push %r10
push %r11
- pushfq
+ 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
- popfq
+ 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
@@ -23,6 +45,7 @@
pop %rsi
pop %rdx
pop %rcx
+ pop %rbx
pop %rax
.endm
@@ -41,7 +64,7 @@ isr\number:
.global isr\number
isr\number:
pushall
- mov 0x50(%rsp), %rdi
+ mov 0x88(%rsp), %rdi
cld
mov %rsp, panic_rsp
call isr\number\()_handler