X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=Kernel%2Farch%2Fx86_64%2Ferrors.c;h=d1856db17758bc94b48d36837f981f2c4ac7db36;hb=fad68a47fc99c28c0557c06631b95277c8ed9159;hp=0d5ede6fa5667f55729f69ec8e52ab95933467a3;hpb=2ebf89999759fc9d1ece6f98dfd439170995bb28;p=tpg%2Facess2.git diff --git a/Kernel/arch/x86_64/errors.c b/Kernel/arch/x86_64/errors.c index 0d5ede6f..d1856db1 100644 --- a/Kernel/arch/x86_64/errors.c +++ b/Kernel/arch/x86_64/errors.c @@ -9,7 +9,7 @@ #define MAX_BACKTRACE 6 // === IMPORTS === -void MM_PageFault(tVAddr Addr, Uint ErrorCode, tRegs *Regs); + int MM_PageFault(tVAddr Addr, Uint ErrorCode, tRegs *Regs); void Error_Backtrace(Uint IP, Uint BP); // === PROTOTYPES === @@ -34,11 +34,14 @@ void Error_Handler(tRegs *Regs) if( Regs->IntNum == 14 ) { __asm__ __volatile__ ("mov %%cr2, %0":"=r"(cr)); - MM_PageFault(cr, Regs->ErrorCode, Regs); - return ; + if( MM_PageFault(cr, Regs->ErrorCode, Regs) == 0 ) + return ; + } + else { + Debug_KernelPanic(); + + Error_Backtrace(Regs->RIP, Regs->RBP); } - - Debug_KernelPanic(); Log("CPU Error %x, Code: 0x%x", Regs->IntNum, Regs->ErrorCode); // Log(" - %s", csaERROR_NAMES[Regs->IntNum]); @@ -98,7 +101,7 @@ void Error_Backtrace(Uint IP, Uint BP) // return; //} - if( IP > MM_USER_MAX && IP < MM_KERNEL_CODE + if( IP > USER_MAX && IP < MM_KERNEL_CODE && (MM_MODULE_MIN > IP || IP > MM_MODULE_MAX) ) {