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.S22
1 files changed, 9 insertions, 13 deletions
diff --git a/kernel/src/cpu/irq_stub.S b/kernel/src/cpu/irq_stub.S
index 33d87e1..a80b721 100644
--- a/kernel/src/cpu/irq_stub.S
+++ b/kernel/src/cpu/irq_stub.S
@@ -2,13 +2,16 @@
#include "x86_64_regs.S"
-.macro isrstub
+.macro isrstub number
push_caller_saved
+ push_callee_saved
/* get error code from stack */
- mov 0x50(%rsp), %rsi
+ mov ERROR_OFF(%rsp), %rsi
mov %rsp, panic_rsp
+ mov $\number, %rdi
cld
call isr_def_handler
+ pop_callee_saved
pop_caller_saved
add $8, %rsp
iretq
@@ -18,27 +21,20 @@
.global isr\number
isr\number:
push $0
- mov $\number, %rdi
- isrstub
+ isrstub \number
.endm
.macro isr_error number
.global isr\number
isr\number:
- mov $\number, %rdi
- isrstub
+ isrstub \number
.endm
.macro irq number
.global irq\number
irq\number:
- push_caller_saved
- mov $\number, %rdi
- mov %rsp, panic_rsp
- cld
- call irq_def_handler
- pop_caller_saved
- iretq
+ push $0
+ isrstub (\number + 0x20)
.endm
isr_no_error 0