From 9b3dd99abc763f5e2039933eda510ec62d395f8a Mon Sep 17 00:00:00 2001 From: Aleksa Vuckovic Date: Tue, 29 Nov 2022 16:09:32 +0100 Subject: pushing all regs in irq_handler --- kernel/src/check/panic.c | 50 +++++++++++++++++++++++++++--------------------- kernel/src/check/ubsan.c | 1 + 2 files changed, 29 insertions(+), 22 deletions(-) (limited to 'kernel/src/check') diff --git a/kernel/src/check/panic.c b/kernel/src/check/panic.c index c618c40..769c72f 100644 --- a/kernel/src/check/panic.c +++ b/kernel/src/check/panic.c @@ -15,28 +15,34 @@ void panic(const char *s, ...) vprintf(s, list); va_end(list); - printf("regs:\n"); - uint64_t i = 0; - printf("rflags: 0x%x; ", *((uint64_t*)panic_rsp + i++)); - printf("r11: 0x%x; ", *((uint64_t*)panic_rsp + i++)); - printf("r10: 0x%x; ", *((uint64_t*)panic_rsp + i++)); - printf("r9: 0x%x\n", *((uint64_t*)panic_rsp + i++)); - printf("r8: 0x%x; ", *((uint64_t*)panic_rsp + i++)); - printf("rdi: 0x%x; ", *((uint64_t*)panic_rsp + i++)); - printf("rsi: 0x%x; ", *((uint64_t*)panic_rsp + i++)); - printf("rdx: 0x%x\n", *((uint64_t*)panic_rsp + i++)); - printf("rcx: 0x%x; ", *((uint64_t*)panic_rsp + i++)); - printf("rax: 0x%x; ", *((uint64_t*)panic_rsp + i++)); - printf("exception: 0x%x; ", *((uint64_t*)panic_rsp + i++)); - printf("rip: 0x%x\n", *((uint64_t*)panic_rsp + i++)); - printf("cs: 0x%x; ", *((uint64_t*)panic_rsp + i++)); - printf("rflags: 0x%x; ", *((uint64_t*)panic_rsp + i++)); - printf("rsp: 0x%x; ", *((uint64_t*)panic_rsp + i++)); - printf("ss: 0x%x\n", *((uint64_t*)panic_rsp + i++)); - printf("1: 0x%x\n", *((uint64_t*)panic_rsp + i++)); - printf("1: 0x%x\n", *((uint64_t*)panic_rsp + i++)); - printf("1: 0x%x\n", *((uint64_t*)panic_rsp + i++)); - printf("1: 0x%x\n", *((uint64_t*)panic_rsp + i++)); + if (panic_rsp != 0) { + printf("info:\n"); + uint64_t i = 0; + printf("ss: 0x%x ", (uint16_t)*((uint64_t*)panic_rsp + i++)); + printf("ds: 0x%x ", (uint16_t)*((uint64_t*)panic_rsp + i++)); + printf("es: 0x%x ", (uint16_t)*((uint64_t*)panic_rsp + i++)); + printf("r15: 0x%x ", *((uint64_t*)panic_rsp + i++)); + printf("r14: 0x%x ", *((uint64_t*)panic_rsp + i++)); + printf("r13: 0x%x ", *((uint64_t*)panic_rsp + i++)); + printf("r12: 0x%x ", *((uint64_t*)panic_rsp + i++)); + printf("r11: 0x%x ", *((uint64_t*)panic_rsp + i++)); + printf("r10: 0x%x ", *((uint64_t*)panic_rsp + i++)); + printf("r9: 0x%x ", *((uint64_t*)panic_rsp + i++)); + printf("r8: 0x%x ", *((uint64_t*)panic_rsp + i++)); + printf("rdi: 0x%x ", *((uint64_t*)panic_rsp + i++)); + printf("rsi: 0x%x ", *((uint64_t*)panic_rsp + i++)); + printf("rdx: 0x%x ", *((uint64_t*)panic_rsp + i++)); + printf("rcx: 0x%x ", *((uint64_t*)panic_rsp + i++)); + printf("rbx: 0x%x ", *((uint64_t*)panic_rsp + i++)); + printf("rax: 0x%x ", *((uint64_t*)panic_rsp + i++)); + if (*((uint64_t*)panic_rsp + i) <= 0xffffffff) + printf("err code: 0x%x ", *((uint64_t*)panic_rsp + i++)); + printf("rip: 0x%x ", *((uint64_t*)panic_rsp + i++)); + printf("cs: 0x%x ", *((uint64_t*)panic_rsp + i++)); + printf("rflags: 0x%x ", *((uint64_t*)panic_rsp + i++)); + printf("rsp: 0x%x ", *((uint64_t*)panic_rsp + i++)); + printf("ss: 0x%x ", *((uint64_t*)panic_rsp + i++)); + } __asm__ volatile ("cli;"); for(;;) { diff --git a/kernel/src/check/ubsan.c b/kernel/src/check/ubsan.c index 2e302bb..c3933da 100644 --- a/kernel/src/check/ubsan.c +++ b/kernel/src/check/ubsan.c @@ -53,6 +53,7 @@ static void ubsan_abort(const struct ubsan_source_location* location, if ( !location || !location->filename ) location = &unknown_location; + panic_rsp = 0; panic( "filename = %s; line = %d; column = %d; violation = %s;\n", location->filename, location->line, location->column, violation); -- cgit v1.2.3