X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=KernelLand%2FKernel%2Fdebug.c;h=b32036e5a277dbe92ab0e3955bf883f8fac957e2;hb=9b107e55699bea78c68d35a6a6591f2c1f6a9cc4;hp=cb11f5f5fb9dcf530dff561aaf96a6c281ae18f9;hpb=a01b96ccf4ec884e5b894d08a819a37ea3f5f749;p=tpg%2Facess2.git diff --git a/KernelLand/Kernel/debug.c b/KernelLand/Kernel/debug.c index cb11f5f5..b32036e5 100644 --- a/KernelLand/Kernel/debug.c +++ b/KernelLand/Kernel/debug.c @@ -4,16 +4,17 @@ */ #include #include +#include #define DEBUG_MAX_LINE_LEN 256 #define LOCK_DEBUG_OUTPUT 1 // Avoid interleaving of output lines? -#define TRACE_TO_KTERM 0 // Send ENTER/DEBUG/LEAVE to debug? +#define TRACE_TO_KTERM 0 // Send ENTER/DEBUG/LEAVE to debug? // === IMPORTS === -extern void Threads_Dump(void); extern void KernelPanic_SetMode(void); extern void KernelPanic_PutChar(char Ch); extern void IPStack_SendDebugText(const char *Text); +extern void VT_SetTerminal(int TerminalID); // === PROTOTYPES === static void Debug_Putchar(char ch); @@ -93,12 +94,13 @@ void Debug_DbgOnlyFmt(const char *format, va_list args) void Debug_Fmt(int bUseKTerm, const char *format, va_list args) { char buf[DEBUG_MAX_LINE_LEN]; -// int len; buf[DEBUG_MAX_LINE_LEN-1] = 0; - /*len = */vsnprintf(buf, DEBUG_MAX_LINE_LEN-1, format, args); - //if( len < DEBUG_MAX_LINE ) - // do something + int len = vsnprintf(buf, DEBUG_MAX_LINE_LEN-1, format, args); Debug_Puts(bUseKTerm, buf); + if( len > DEBUG_MAX_LINE_LEN-1 ) { + // do something + Debug_Puts(bUseKTerm, "[...]"); + } return ; } @@ -112,10 +114,17 @@ void Debug_FmtS(int bUseKTerm, const char *format, ...) void Debug_KernelPanic(void) { - #if LOCK_DEBUG_OUTPUT - SHORTREL(&glDebug_Lock); - #endif + // 5 nested panics? Fuck it + if( gbDebug_IsKPanic > 5 ) + HALT_CPU(); gbDebug_IsKPanic ++; + if( gbDebug_IsKPanic == 1 ) + { + #if LOCK_DEBUG_OUTPUT + SHORTREL(&glDebug_Lock); + #endif + VT_SetTerminal(7); + } KernelPanic_SetMode(); } @@ -128,6 +137,7 @@ void LogF(const char *Fmt, ...) va_list args; #if LOCK_DEBUG_OUTPUT + if(CPU_HAS_LOCK(&glDebug_Lock)) return ; SHORTLOCK(&glDebug_Lock); #endif @@ -150,6 +160,7 @@ void Debug(const char *Fmt, ...) va_list args; #if LOCK_DEBUG_OUTPUT + if(CPU_HAS_LOCK(&glDebug_Lock)) return ; SHORTLOCK(&glDebug_Lock); #endif @@ -168,6 +179,7 @@ void Debug(const char *Fmt, ...) void LogFV(const char *Fmt, va_list args) { #if LOCK_DEBUG_OUTPUT + if(CPU_HAS_LOCK(&glDebug_Lock)) return ; SHORTLOCK(&glDebug_Lock); #endif @@ -181,6 +193,7 @@ void LogFV(const char *Fmt, va_list args) void LogV(const char *Fmt, va_list args) { #if LOCK_DEBUG_OUTPUT + if(CPU_HAS_LOCK(&glDebug_Lock)) return ; SHORTLOCK(&glDebug_Lock); #endif @@ -209,6 +222,7 @@ void Warning(const char *Fmt, ...) va_list args; #if LOCK_DEBUG_OUTPUT + if(CPU_HAS_LOCK(&glDebug_Lock)) return ; SHORTLOCK(&glDebug_Lock); #endif @@ -228,23 +242,25 @@ void Panic(const char *Fmt, ...) va_list args; #if LOCK_DEBUG_OUTPUT - SHORTLOCK(&glDebug_Lock); + if( !CPU_HAS_LOCK(&glDebug_Lock) ) + SHORTLOCK(&glDebug_Lock); #endif // And never SHORTREL Debug_KernelPanic(); + Debug_Puts(1, "\x1b[31m"); Debug_Puts(1, "Panic: "); va_start(args, Fmt); Debug_Fmt(1, Fmt, args); va_end(args); - Debug_Putchar('\r'); - Debug_Putchar('\n'); + Debug_Puts(1, "\x1b[0m\r\n"); - Threads_Dump(); - Heap_Dump(); + Proc_PrintBacktrace(); + //Threads_Dump(); + //Heap_Dump(); - for(;;) ; + HALT_CPU(); } void Debug_SetKTerminal(const char *File) @@ -269,6 +285,7 @@ void Debug_Enter(const char *FuncName, const char *ArgTypes, ...) tTID tid = Threads_GetTID(); #if LOCK_DEBUG_OUTPUT + if(CPU_HAS_LOCK(&glDebug_Lock)) return ; SHORTLOCK(&glDebug_Lock); #endif @@ -329,6 +346,7 @@ void Debug_Log(const char *FuncName, const char *Fmt, ...) tTID tid = Threads_GetTID(); #if LOCK_DEBUG_OUTPUT + if(CPU_HAS_LOCK(&glDebug_Lock)) return ; SHORTLOCK(&glDebug_Lock); #endif @@ -357,6 +375,7 @@ void Debug_Leave(const char *FuncName, char RetType, ...) tTID tid = Threads_GetTID(); #if LOCK_DEBUG_OUTPUT + if(CPU_HAS_LOCK(&glDebug_Lock)) return ; SHORTLOCK(&glDebug_Lock); #endif