summaryrefslogtreecommitdiff
path: root/kernel/src/check
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/src/check')
-rw-r--r--kernel/src/check/panic.c50
-rw-r--r--kernel/src/check/ubsan.c1
2 files changed, 29 insertions, 22 deletions
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);