#include #include #include #include #include __attribute__((noreturn)) void panic(uint64_t rsp, const char *s, ...) { set_color(&main_fb, RED, BLACK); printf("KERNEL PANIC\n"); /* set_color(&main_fb, WHITE, BLACK); */ va_list list; va_start(list, s); vprintf(s, list); va_end(list); if (rsp) { regs_t *regs = (regs_t *)rsp; printf("info regs:\n"); 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(); for (;;) { __asm__ __volatile__("hlt;"); } }