X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=KernelLand%2FKernel%2Farch%2Fx86_64%2Ferrors.c;h=fda3113941bd816a6f1cf5a31f6df53784ea8966;hb=c1b768104a3458d08e7c7240aaac82fc7e70e3df;hp=f7da7f9f8d5a9362f7a8d1b0becc0e9fc9c0da00;hpb=51ab5f489bc356940c95cc936fd0508e8f07ea97;p=tpg%2Facess2.git diff --git a/KernelLand/Kernel/arch/x86_64/errors.c b/KernelLand/Kernel/arch/x86_64/errors.c index f7da7f9f..fda31139 100644 --- a/KernelLand/Kernel/arch/x86_64/errors.c +++ b/KernelLand/Kernel/arch/x86_64/errors.c @@ -13,6 +13,7 @@ extern int MM_PageFault(tVAddr Addr, Uint ErrorCode, tRegs *Regs); extern void Error_Backtrace(Uint IP, Uint BP); extern void Proc_EnableSSE(void); +extern void Threads_Dump(void); extern void Proc_RestoreSSE(Uint32 Data); // === PROTOTYPES === @@ -98,6 +99,9 @@ void Error_Handler(tRegs *Regs) *(Uint8*)(Regs->RIP+2), *(Uint8*)(Regs->RIP+3) ); break; + case 2: // NMI + Threads_Dump(); + break; } __asm__ __volatile__ ("cli"); @@ -134,14 +138,14 @@ void Error_Backtrace(Uint IP, Uint BP) LogF("Backtrace: %p", IP); //else // LogF("Backtrace: %s+0x%x", str, delta); - if( !MM_GetPhysAddr(BP) ) + if( !MM_GetPhysAddr( (void*)BP ) ) { LogF("\nBacktrace: Invalid BP, stopping\n"); return; } - while( MM_GetPhysAddr(BP) && MM_GetPhysAddr(BP+8+7) && i < MAX_BACKTRACE ) + while( MM_GetPhysAddr( (void*)BP) && MM_GetPhysAddr((void*)(BP+8+7)) && i < MAX_BACKTRACE ) { //str = Debug_GetSymbol(*(Uint*)(ebp+4), &delta); //if(str == NULL)