X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=KernelLand%2FKernel%2Fdebug.c;h=f0d21fa7d7f396e4a8618c29540709aad486c162;hb=e9406092ff4b38cc548c7ade1f18329247016b36;hp=6a50ca2c7ba1a4a39e53985a60aabe87033a1661;hpb=4538ee944b71b52f183809978cccfe60143d70c5;p=tpg%2Facess2.git diff --git a/KernelLand/Kernel/debug.c b/KernelLand/Kernel/debug.c index 6a50ca2c..f0d21fa7 100644 --- a/KernelLand/Kernel/debug.c +++ b/KernelLand/Kernel/debug.c @@ -11,8 +11,10 @@ // === IMPORTS === extern void Threads_Dump(void); +extern void Heap_Dump(void); extern void KernelPanic_SetMode(void); extern void KernelPanic_PutChar(char Ch); +extern void IPStack_SendDebugText(const char *Text); // === PROTOTYPES === static void Debug_Putchar(char ch); @@ -30,12 +32,18 @@ volatile int gbInPutChar = 0; #if LOCK_DEBUG_OUTPUT tShortSpinlock glDebug_Lock; #endif +// - Disabled because it breaks shit + int gbSendNetworkDebug = 0; // === CODE === static void Debug_Putchar(char ch) { Debug_PutCharDebug(ch); - if( !gbDebug_IsKPanic ) + + if( gbDebug_IsKPanic ) + KernelPanic_PutChar(ch); + + if( gbDebug_IsKPanic < 2 ) { if(gbInPutChar) return ; gbInPutChar = 1; @@ -43,8 +51,12 @@ static void Debug_Putchar(char ch) VFS_Write(giDebug_KTerm, 1, &ch); gbInPutChar = 0; } - else - KernelPanic_PutChar(ch); + + if( gbSendNetworkDebug ) + { + char str[2] = {ch, 0}; + IPStack_SendDebugText(str); + } } static void Debug_Puts(int UseKTerm, const char *Str) @@ -60,9 +72,12 @@ static void Debug_Puts(int UseKTerm, const char *Str) } else for( len = 0; Str[len]; len ++ ); - + + if( gbSendNetworkDebug ) + IPStack_SendDebugText(Str); + // Output to the kernel terminal - if( UseKTerm && !gbDebug_IsKPanic && giDebug_KTerm != -1) + if( UseKTerm && gbDebug_IsKPanic < 2 && giDebug_KTerm != -1) { if(gbInPutChar) return ; gbInPutChar = 1; @@ -79,9 +94,9 @@ 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; +// int len; buf[DEBUG_MAX_LINE_LEN-1] = 0; - len = vsnprintf(buf, DEBUG_MAX_LINE_LEN-1, format, args); + /*len = */vsnprintf(buf, DEBUG_MAX_LINE_LEN-1, format, args); //if( len < DEBUG_MAX_LINE ) // do something Debug_Puts(bUseKTerm, buf); @@ -101,7 +116,7 @@ void Debug_KernelPanic(void) #if LOCK_DEBUG_OUTPUT SHORTREL(&glDebug_Lock); #endif - gbDebug_IsKPanic = 1; + gbDebug_IsKPanic ++; KernelPanic_SetMode(); } @@ -136,7 +151,7 @@ void Debug(const char *Fmt, ...) va_list args; #if LOCK_DEBUG_OUTPUT - SHORTLOCK(&glDebug_Lock); + if(!CPU_HAS_LOCK(&glDebug_Lock)) SHORTLOCK(&glDebug_Lock); #endif Debug_Puts(0, "Debug: "); @@ -149,27 +164,47 @@ void Debug(const char *Fmt, ...) SHORTREL(&glDebug_Lock); #endif } -/** - * \fn void Log(const char *Msg, ...) - */ -void Log(const char *Fmt, ...) + + +void LogFV(const char *Fmt, va_list args) { - va_list args; + #if LOCK_DEBUG_OUTPUT + SHORTLOCK(&glDebug_Lock); + #endif + + Debug_Fmt(1, Fmt, args); + #if LOCK_DEBUG_OUTPUT + SHORTREL(&glDebug_Lock); + #endif +} + +void LogV(const char *Fmt, va_list args) +{ #if LOCK_DEBUG_OUTPUT SHORTLOCK(&glDebug_Lock); #endif Debug_Puts(1, "Log: "); - va_start(args, Fmt); Debug_Fmt(1, Fmt, args); - va_end(args); Debug_Puts(1, "\r\n"); #if LOCK_DEBUG_OUTPUT SHORTREL(&glDebug_Lock); #endif } + +/** + * \fn void Log(const char *Msg, ...) + */ +void Log(const char *Fmt, ...) +{ + va_list args; + va_start(args, Fmt); + LogV(Fmt, args); + va_end(args); +} + void Warning(const char *Fmt, ...) { va_list args; @@ -194,7 +229,8 @@ 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 @@ -208,6 +244,7 @@ void Panic(const char *Fmt, ...) Debug_Putchar('\n'); Threads_Dump(); + Heap_Dump(); for(;;) ; } @@ -371,7 +408,7 @@ void Debug_Leave(const char *FuncName, char RetType, ...) #endif } -void Debug_HexDump(const char *Header, const void *Data, Uint Length) +void Debug_HexDump(const char *Header, const void *Data, size_t Length) { const Uint8 *cdat = Data; Uint pos = 0;