diff options
| author | Aleksa Vuckovic <aleksa@vuckovic.cc> | 2023-02-26 07:29:26 +0100 |
|---|---|---|
| committer | Aleksa Vuckovic <aleksa@vuckovic.cc> | 2023-02-26 07:39:55 +0100 |
| commit | a362a43899040a3848427c4d1f3bd1d3e53f46ec (patch) | |
| tree | 3255f10f358ab2dba1555a45a91950d185d397f7 /kernel/src/cpu | |
| parent | 40eecaecc552945f72a2b90f4122bf929960671c (diff) | |
passing rsp from isr_stub, fixing panic()
Diffstat (limited to 'kernel/src/cpu')
| -rw-r--r-- | kernel/src/cpu/irq.c | 17 | ||||
| -rw-r--r-- | kernel/src/cpu/irq_stub.S | 6 |
2 files changed, 11 insertions, 12 deletions
diff --git a/kernel/src/cpu/irq.c b/kernel/src/cpu/irq.c index a7288c0..7480eef 100644 --- a/kernel/src/cpu/irq.c +++ b/kernel/src/cpu/irq.c @@ -47,14 +47,15 @@ const char *const exception_name[] = { "Reserved", }; -void exception(uint64_t number, uint64_t error) { +void exception(uint64_t number, uint64_t rsp, uint64_t error) +{ switch (number) { case 0xe: printf("%s, error: 0x%x\n", exception_name[14], error); - page_fault(error); + page_fault(rsp, error); break; default: - panic("%s, error: 0x%x\n", exception_name[number], error); + panic(rsp, "%s, error: 0x%x\n", exception_name[number], error); } } @@ -72,11 +73,11 @@ void eoi(uint64_t number) } } -void interrupt(uint64_t number) +void interrupt(uint64_t number, uint64_t rsp) { switch (number) { case 0x20: - timer_handler(); + timer_handler(rsp); eoi(number); break; case 0x21: @@ -89,11 +90,11 @@ void interrupt(uint64_t number) } } -void isr_def_handler(uint64_t number, uint64_t error) +void isr_def_handler(uint64_t number, uint64_t rsp, uint64_t error) { if (number < 0x20) { - exception(number, error); + exception(number, rsp, error); } else { - interrupt(number); + interrupt(number, rsp); } } diff --git a/kernel/src/cpu/irq_stub.S b/kernel/src/cpu/irq_stub.S index a80b721..a89cd6b 100644 --- a/kernel/src/cpu/irq_stub.S +++ b/kernel/src/cpu/irq_stub.S @@ -1,14 +1,12 @@ -.extern panic_rsp - #include "x86_64_regs.S" .macro isrstub number push_caller_saved push_callee_saved /* get error code from stack */ - mov ERROR_OFF(%rsp), %rsi - mov %rsp, panic_rsp mov $\number, %rdi + mov %rsp, %rsi + mov ERROR_OFF(%rsp), %rdx cld call isr_def_handler pop_callee_saved |
