1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
#include "jove.h"
#include "arch/x86_64/idt.h"
#include "print.h"
#include <stddef.h>
struct stackFrame {
struct stackFrame *ebp;
uintptr_t eip;
};
void
kpanic_state(ivt_state_t *state, const char *fmt, ...)
{
va_list ap;
va_start(ap, fmt);
kprintf("Kernel Panic!\n");
kvprintf(fmt, ap);
kprintf("\n\nCore dump:\n");
kprintf("RAX %p | RBX %p | RCX %p | RDX %p\n", state->rax, state->rbx, state->rcx, state->rdx);
kprintf("RSI %p | RDI %p | RSP %p | RBP %p\n", state->rsi, state->rdi, state->rsp, state->rbp);
kprintf("R8 %p | R9 %p | R10 %p | R11 %p\n", state->r8, state->r9, state->r10, state->r11);
kprintf("R12 %p | R13 %p | R14 %p | R15 %p\n", state->r12, state->r13, state->r14, state->r15);
kprintf("RIP %p\n", state->rip);
kprintf("\nStack trace:\n");
struct stackFrame *frame = (struct stackFrame*)state->rbp;
for(size_t framei = 0; frame && framei < 64; ++framei) {
kprintf("%i %p : %p\n", framei, frame, frame->eip);
frame = frame->ebp;
}
hcf();
}
|