From 950649760927a7c33ddecd1944fd0ad20e731ee9 Mon Sep 17 00:00:00 2001 From: Aleksa Vuckovic Date: Sun, 26 Feb 2023 11:52:55 +0100 Subject: save/restore context from rsp --- kernel/src/check/panic.c | 50 ++++++++++++++++++++++++------------------------ 1 file changed, 25 insertions(+), 25 deletions(-) (limited to 'kernel/src/check') diff --git a/kernel/src/check/panic.c b/kernel/src/check/panic.c index ac40078..b5e02a2 100644 --- a/kernel/src/check/panic.c +++ b/kernel/src/check/panic.c @@ -15,33 +15,33 @@ __attribute__((noreturn)) void panic(uint64_t rsp, const char *s, ...) va_end(list); if (rsp) { - uint64_t seg = *(uint64_t *)(rsp + SEG_OFF); + regs_t *regs = (regs_t *)rsp; printf("info regs:\n"); - printf("rax: 0x%x; ", *(uint64_t *)(rsp + RAX_OFF)); - printf("rbx: 0x%x; ", *(uint64_t *)(rsp + RBX_OFF)); - printf("rcx: 0x%x; ", *(uint64_t *)(rsp + RCX_OFF)); - printf("rdx: 0x%x; ", *(uint64_t *)(rsp + RDX_OFF)); - printf("rdi: 0x%x; ", *(uint64_t *)(rsp + RDI_OFF)); - printf("rsi: 0x%x; ", *(uint64_t *)(rsp + RSI_OFF)); - printf("rsp: 0x%x; ", *(uint64_t *)(rsp + RSP_OFF)); - printf("rbp: 0x%x; ", *(uint64_t *)(rsp + RBP_OFF)); - printf("r8: 0x%x; ", *(uint64_t *)(rsp + R8_OFF)); - printf("r9: 0x%x; ", *(uint64_t *)(rsp + R9_OFF)); - printf("r10: 0x%x; ", *(uint64_t *)(rsp + R10_OFF)); - printf("r11: 0x%x; ", *(uint64_t *)(rsp + R11_OFF)); - printf("r12: 0x%x; ", *(uint64_t *)(rsp + R12_OFF)); - printf("r13: 0x%x; ", *(uint64_t *)(rsp + R13_OFF)); - printf("r14: 0x%x; ", *(uint64_t *)(rsp + R14_OFF)); - printf("r15: 0x%x; ", *(uint64_t *)(rsp + R15_OFF)); - printf("rip: 0x%x; ", *(uint64_t *)(rsp + RIP_OFF)); - printf("cs: 0x%x; ", *(uint64_t *)(rsp + CS_OFF)); - printf("ds: 0x%x; ", seg >> 48); - printf("ss: 0x%x; ", *(uint64_t *)(rsp + SS_OFF)); - printf("es: 0x%x; ", (seg >> 32) & 0xFFFF); - printf("fs: 0x%x; ", (seg >> 16) & 0xFFFF); - printf("gs: 0x%x; ", seg & 0xFFFF); - printf("rflags: 0x%x; ", *(uint64_t *)(rsp + RFLAGS_OFF)); + printf("rax: 0x%x; ", regs->rax); + printf("rbx: 0x%x; ", regs->rbx); + printf("rcx: 0x%x; ", regs->rcx); + printf("rdx: 0x%x; ", regs->rdx); + printf("rdi: 0x%x; ", regs->rdi); + printf("rsi: 0x%x; ", regs->rsi); + printf("rsp: 0x%x; ", regs->rsp); + printf("rbp: 0x%x; ", regs->rbp); + printf("r8: 0x%x; ", regs->r8); + printf("r9: 0x%x; ", regs->r9); + printf("r10: 0x%x; ", regs->r10); + printf("r11: 0x%x; ", regs->r11); + printf("r12: 0x%x; ", regs->r12); + printf("r13: 0x%x; ", regs->r13); + printf("r14: 0x%x; ", regs->r14); + printf("r15: 0x%x; ", regs->r15); + printf("rip: 0x%x; ", regs->rip); + printf("cs: 0x%x; ", regs->cs); + printf("ds: 0x%x; ", regs->seg >> 48); + printf("ss: 0x%x; ", regs->ss); + printf("es: 0x%x; ", (regs->seg >> 32) & 0xFFFF); + printf("fs: 0x%x; ", (regs->seg >> 16) & 0xFFFF); + printf("gs: 0x%x; ", regs->seg & 0xFFFF); + printf("rflags: 0x%x; ", regs->rflags); } disable_interrupts(); -- cgit v1.2.3