X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=Kernel%2Farch%2Fx86_64%2Ferrors.c;h=9f1d290a0e878763c8ac568af563b5f4598e8956;hb=a4a71f89713c34454ef254bbb1a1ea9ed773fa1b;hp=1c68b184f5abc710609aafcf06fbde5fd0ccc5bb;hpb=375dd210e083ab233903ba3804ad629fc7365189;p=tpg%2Facess2.git diff --git a/Kernel/arch/x86_64/errors.c b/Kernel/arch/x86_64/errors.c index 1c68b184..9f1d290a 100644 --- a/Kernel/arch/x86_64/errors.c +++ b/Kernel/arch/x86_64/errors.c @@ -5,6 +5,9 @@ #include #include +// === IMPORTS === +void MM_PageFault(tVAddr Addr, Uint ErrorCode, tRegs *Regs); + // === PROTOTYPES === void Error_Handler(tRegs *Regs); @@ -25,6 +28,12 @@ void Error_Handler(tRegs *Regs) { Uint cr; + if( Regs->IntNum == 14 ) { + __asm__ __volatile__ ("mov %%cr2, %0":"=r"(cr)); + MM_PageFault(cr, Regs->ErrorCode, Regs); + return ; + } + Debug_KernelPanic(); Log("CPU Error %x, Code: 0x%x", Regs->IntNum, Regs->ErrorCode); @@ -58,11 +67,13 @@ void Error_Handler(tRegs *Regs) { case 6: // #UD Warning(" Offending bytes: %02x %02x %02x %02x", - *(Uint8*)Regs->RIP+0, *(Uint8*)Regs->RIP+1, - *(Uint8*)Regs->RIP+2, *(Uint8*)Regs->RIP+3); + *(Uint8*)(Regs->RIP+0), *(Uint8*)(Regs->RIP+1), + *(Uint8*)(Regs->RIP+2), *(Uint8*)(Regs->RIP+3) + ); break; } + __asm__ __volatile__ ("cli"); for(;;) __asm__ __volatile__ ("hlt"); }