summaryrefslogtreecommitdiff
path: root/kernel/src/cpu/irq_stub.S
diff options
context:
space:
mode:
authorAleksa Vuckovic <aleksa@vuckovic.cc>2023-02-26 06:54:25 +0100
committerAleksa Vuckovic <aleksa@vuckovic.cc>2023-02-26 06:54:25 +0100
commit40eecaecc552945f72a2b90f4122bf929960671c (patch)
treef8b500c024eda02672bb66ccde7a6124a2abfa40 /kernel/src/cpu/irq_stub.S
parentb2f41efabf95f85dd6d24e460cf15f8c9ac17978 (diff)
using one isr_stub for everything
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