#include "generic.h" #include "../kprintf.h" #include "../asm_inline.h" void generic_interrupt(trapframe* f) { kprintf("!!!! INTERRUPT !!!!\n"); kprintf("ARG: %p\n", f); switch(f->trapno) { case 0x0: kprintf("NO: %s | ERR_ %lX\n", "Division Error", f->err); break; case 0x1: kprintf("NO: %s | ERR_ %lX\n", "Debug", f->err); break; case 0x2: kprintf("NO: %s | ERR_ %lX\n", "Non-Maskable", f->err); break; case 0x3: kprintf("NO: %s | ERR_ %lX\n", "Breakpoint", f->err); break; case 0x4: kprintf("NO: %s | ERR_ %lX\n", "Overflow", f->err); break; case 0x5: kprintf("NO: %s | ERR_ %lX\n", "Bound Range Exceeded", f->err); break; case 0x6: kprintf("NO: %s | ERR_ %lX\n", "Invalid Opcode", f->err); break; case 0x7: kprintf("NO: %s | ERR_ %lX\n", "Device Not Available", f->err); break; case 0x8: kprintf("NO: %s | ERR_ %lX\n", "Double Fault", f->err); break; case 0xA: kprintf("NO: %s | ERR_ %lX\n", "Invalid TSS", f->err); break; case 0xB: kprintf("NO: %s | ERR_ %lX\n", "Segment Not Present", f->err); break; case 0xC: kprintf("NO: %s | ERR_ %lX\n", "Stack-Segment fault", f->err); break; case 0xD: kprintf("NO: %s | ERR_ %lX\n", "General Protection Fault", f->err); break; case 0xE: kprintf("NO: %s | ERR_ %lX\n", "Page Fault", f->err); break; case 0x10: kprintf("NO: %s | ERR_ %lX\n", "x87 Floating Point Exception", f->err); break; case 0x11: kprintf("NO: %s | ERR_ %lX\n", "Alignment Check", f->err); break; case 0x12: kprintf("NO: %s | ERR_ %lX\n", "Machine Check", f->err); break; case 0x13: kprintf("NO: %s | ERR_ %lX\n", "SIMD Floating Point Exception", f->err); break; case 0x14: kprintf("NO: %s | ERR_ %lX\n", "Virtualization Exception", f->err); break; case 0x15: kprintf("NO: %s | ERR_ %lX\n", "Control Protection Exception", f->err); break; case 0x1C: kprintf("NO: %s | ERR_ %lX\n", "Hypervisor Injection Exception", f->err); break; case 0x1D: kprintf("NO: %s | ERR_ %lX\n", "VMM Communication Exception", f->err); break; case 0x1E: kprintf("NO: %s | ERR_ %lX\n", "Security Exception", f->err); break; default: kprintf("NO: %lX | ERR: %lX\n", f->trapno, f->err); } kprintf("RAX: %lX | RBX: %lX | RCX: %lX | RDX: %lX\n", f->rax, f->rbx, f->rcx, f->rdx); kprintf("RSI: %lX | RDI: %lX | RBP: %lX\n", f->rsi, f->rdi, f->rbp); kprintf("R8: %lX | R9: %lX | R10: %lX | R11: %lX\n", f->r8, f->r9, f->r10, f->r11); kprintf("R12: %lX | R13: %lX | R14: %lX | R15: %lX\n", f->r12, f->r13, f->r14, f->r15); kprintf("===================\n"); hlt(); //if(f->err == 0xE) //{ // hlt(); //} }