X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=KernelLand%2FKernel%2Farch%2Fx86%2Ferrors.c;h=8dc90b0186499f8bb041ec87541811033f1cc837;hb=802762ae7efd39786c0e134ed0bdfe8100d97230;hp=d2d2cef1caa61321337540c0caf8cf4b7a347f76;hpb=51ab5f489bc356940c95cc936fd0508e8f07ea97;p=tpg%2Facess2.git diff --git a/KernelLand/Kernel/arch/x86/errors.c b/KernelLand/Kernel/arch/x86/errors.c index d2d2cef1..8dc90b01 100644 --- a/KernelLand/Kernel/arch/x86/errors.c +++ b/KernelLand/Kernel/arch/x86/errors.c @@ -80,7 +80,6 @@ void ErrorHandler(tRegs *Regs) // Page Fault if(Regs->int_num == 14) { - __asm__ __volatile__ ("sti"); // Should be OK, TODO: Test __asm__ __volatile__ ("mov %%cr2, %0":"=r"(cr)); MM_PageFault( cr, Regs->err_code, Regs ); return ; @@ -117,6 +116,8 @@ void ErrorHandler(tRegs *Regs) csaERROR_NAMES[Regs->int_num], Regs->err_code); Log_Warning("Arch", "at CS:EIP %04x:%08x", Regs->cs, Regs->eip); + Error_Backtrace(Regs->eip, Regs->ebp); + MM_DumpTables(0, KERNEL_BASE); switch( Regs->int_num ) { @@ -227,14 +228,14 @@ void Error_Backtrace(Uint eip, Uint ebp) LogF("Backtrace: 0x%x", eip); // else // LogF("Backtrace: %s+0x%x", str, delta); - if(!MM_GetPhysAddr(ebp)) + if(!MM_GetPhysAddr((void*)ebp)) { - LogF("\nBacktrace: Invalid EBP, stopping\n"); + LogF("\nBacktrace: Invalid EBP %p, stopping\n", ebp); return; } - while( MM_GetPhysAddr(ebp) && i < MAX_BACKTRACE ) + while( MM_GetPhysAddr((void*)ebp) && i < MAX_BACKTRACE ) { if( ebp >= MM_KERNEL_STACKS_END ) break; //str = Debug_GetSymbol(*(Uint*)(ebp+4), &delta); @@ -245,7 +246,7 @@ void Error_Backtrace(Uint eip, Uint ebp) ebp = *(Uint*)ebp; i++; } - LogF("\n"); + LogF("\r\n"); } /**