summaryrefslogtreecommitdiff
path: root/kernel/src/check
diff options
context:
space:
mode:
authorAleksa Vuckovic <aleksa@vuckovic.cc>2023-02-26 11:52:55 +0100
committerAleksa Vuckovic <aleksa@vuckovic.cc>2023-02-26 11:52:55 +0100
commit950649760927a7c33ddecd1944fd0ad20e731ee9 (patch)
tree26c36460a91a128879de7ebf68fbcfcc50ef08fd /kernel/src/check
parenta362a43899040a3848427c4d1f3bd1d3e53f46ec (diff)
save/restore context from rsp
Diffstat (limited to 'kernel/src/check')
-rw-r--r--kernel/src/check/panic.c50
1 files changed, 25 insertions, 25 deletions
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();