From b4426249daacb975ca3cc6c35407aa63de1c9ebf Mon Sep 17 00:00:00 2001 From: Baptiste Wicht Date: Mon, 3 Oct 2016 21:54:48 +0200 Subject: [PATCH] Capture base pointer in fault handler --- kernel/include/interrupts.hpp | 1 + kernel/src/isrs.s | 4 +++- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/kernel/include/interrupts.hpp b/kernel/include/interrupts.hpp index 1a982e8f..3148b1cf 100644 --- a/kernel/include/interrupts.hpp +++ b/kernel/include/interrupts.hpp @@ -16,6 +16,7 @@ constexpr const size_t SYSCALL_FIRST = 50; constexpr const size_t SYSCALL_MAX = 10; struct fault_regs { + uint64_t rbp; uint64_t error_no; uint64_t error_code; uint64_t rip; diff --git a/kernel/src/isrs.s b/kernel/src/isrs.s index c13f5e24..f9fd0e7d 100644 --- a/kernel/src/isrs.s +++ b/kernel/src/isrs.s @@ -13,6 +13,7 @@ .global _isr\number _isr\number: push \number + push rbp jmp isr_common_handler .endm @@ -24,6 +25,7 @@ _isr\number: push 0 // Dummy error code push \number + push rbp jmp isr_common_handler .endm @@ -69,6 +71,6 @@ isr_common_handler: // TODO At this point, it is absolutely not safe to return since most // registers will get trashed the fault handler must hang - add rsp, 8 // Cleans the pushed error number + add rsp, 16 // Cleans the pushed base pointer and error number iretq // iret will clean the other automatically pushed stuff