#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 ===
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]);
// 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)
)
{