From a362a43899040a3848427c4d1f3bd1d3e53f46ec Mon Sep 17 00:00:00 2001 From: Aleksa Vuckovic Date: Sun, 26 Feb 2023 07:29:26 +0100 Subject: passing rsp from isr_stub, fixing panic() --- kernel/include/irq_handler.h | 3 +-- kernel/include/paging.h | 2 +- kernel/include/panic.h | 2 +- kernel/include/regs.h | 27 +++++++++++++++++++++++++++ kernel/include/timer.h | 2 +- 5 files changed, 31 insertions(+), 5 deletions(-) create mode 100644 kernel/include/regs.h (limited to 'kernel/include') diff --git a/kernel/include/irq_handler.h b/kernel/include/irq_handler.h index 571d1ab..01f4950 100644 --- a/kernel/include/irq_handler.h +++ b/kernel/include/irq_handler.h @@ -3,8 +3,7 @@ #include -void isr_def_handler(uint64_t number, uint64_t error); void eoi(uint64_t number); -void irq_def_handler(uint64_t number); +void isr_def_handler(uint64_t number, uint64_t rsp, uint64_t error); #endif diff --git a/kernel/include/paging.h b/kernel/include/paging.h index 4aaf6af..65c9652 100644 --- a/kernel/include/paging.h +++ b/kernel/include/paging.h @@ -12,7 +12,7 @@ void load_pt_lvl4(uint64_t *); void init_paging(void); void map_addr(uint64_t virt, uint64_t phys, uint32_t flags); -void page_fault(uint64_t error); +void page_fault(uint64_t rsp, uint64_t error); extern uint64_t __attribute__((aligned(4096))) page_table_lvl4[512]; extern uint64_t __attribute__((aligned(4096))) page_table_lvl3[512]; diff --git a/kernel/include/panic.h b/kernel/include/panic.h index 4949c77..9fb3f4f 100644 --- a/kernel/include/panic.h +++ b/kernel/include/panic.h @@ -5,6 +5,6 @@ extern uint64_t panic_rsp; -__attribute__((noreturn)) void panic(const char *error, ...); +__attribute__((noreturn)) void panic(uint64_t rsp, const char *s, ...); #endif diff --git a/kernel/include/regs.h b/kernel/include/regs.h new file mode 100644 index 0000000..81b8a69 --- /dev/null +++ b/kernel/include/regs.h @@ -0,0 +1,27 @@ +#ifndef REGS_H +#define REGS_H + +#define R15_OFF 0x0 +#define R14_OFF 0x08 +#define R13_OFF 0x10 +#define R12_OFF 0x18 +#define RBP_OFF 0x20 +#define RBX_OFF 0x28 +#define SEG_OFF 0x30 +#define R11_OFF 0x38 +#define R10_OFF 0x40 +#define R9_OFF 0x48 +#define R8_OFF 0x50 +#define RDI_OFF 0x58 +#define RSI_OFF 0x60 +#define RDX_OFF 0x68 +#define RCX_OFF 0x70 +#define RAX_OFF 0x78 +#define ERROR_OFF 0x80 +#define RIP_OFF 0x88 +#define CS_OFF 0x90 +#define RFLAGS_OFF 0x98 +#define RSP_OFF 0x100 +#define SS_OFF 0x108 + +#endif diff --git a/kernel/include/timer.h b/kernel/include/timer.h index 3ddef4d..899f09f 100644 --- a/kernel/include/timer.h +++ b/kernel/include/timer.h @@ -5,7 +5,7 @@ #define TICKS_PER_SECOND 1000 -void timer_handler(void); +void timer_handler(uint64_t rsp); void wait(uint64_t ms); void init_timer(uint32_t frequency); -- cgit v1.2.3