X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=KernelLand%2FKernel%2Farch%2Fx86_64%2Ferrors.c;h=81d6466ba10f2b52e565592414f06de92c246e11;hb=2b339e917d778c76b249457bcb66c4fb0007c495;hp=e7812c3ea4be46284269cdd2cdf53a16639abb5a;hpb=fb3abbad5dfd71ea2b190d0b33d9c57e879fb15a;p=tpg%2Facess2.git diff --git a/KernelLand/Kernel/arch/x86_64/errors.c b/KernelLand/Kernel/arch/x86_64/errors.c index e7812c3e..81d6466b 100644 --- a/KernelLand/Kernel/arch/x86_64/errors.c +++ b/KernelLand/Kernel/arch/x86_64/errors.c @@ -6,6 +6,7 @@ #include #include #include // Needed for SSE handling +#include #define MAX_BACKTRACE 6 @@ -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"); @@ -105,6 +109,13 @@ void Error_Handler(tRegs *Regs) __asm__ __volatile__ ("hlt"); } +void Proc_PrintBacktrace(void) +{ + Uint64 *rbp; + __asm__ __volatile__ ("mov %%rbp, %0" : "=r" (rbp)); + Error_Backtrace( rbp[1], rbp[0] ); +} + /** * \fn void Error_Backtrace(Uint eip, Uint ebp) * \brief Unrolls the stack to trace execution