X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=Kernel%2Fdebug.c;h=355624d5c483769fafc237442a7ad64aaff4767f;hb=a2495c6ea4f4cab16b5d339ae511428e92e89e73;hp=e66b9a9f5ad3496c9d7463cbc91a869d6f2902ae;hpb=0f8226381e0a19e8e8e11eafbf4589532e45d430;p=tpg%2Facess2.git diff --git a/Kernel/debug.c b/Kernel/debug.c index e66b9a9f..355624d5 100644 --- a/Kernel/debug.c +++ b/Kernel/debug.c @@ -11,6 +11,8 @@ #define LOCK_DEBUG_OUTPUT 1 +#define TRACE_TO_KTERM 0 + // === IMPORTS === extern void Threads_Dump(void); extern void KernelPanic_SetMode(void); @@ -18,10 +20,10 @@ extern void KernelPanic_PutChar(char Ch); // === PROTOTYPES === static void Debug_Putchar(char ch); -static void Debug_Puts(int DbgOnly, const char *Str); +static void Debug_Puts(int bUseKTerm, const char *Str); void Debug_DbgOnlyFmt(const char *format, va_list args); -void Debug_FmtS(const char *format, ...); -void Debug_Fmt(const char *format, va_list args); +void Debug_FmtS(int bUseKTerm, const char *format, ...); +void Debug_Fmt(int bUseKTerm, const char *format, va_list args); void Debug_SetKTerminal(const char *File); // === GLOBALS === @@ -35,7 +37,7 @@ tShortSpinlock glDebug_Lock; // === CODE === static void Debug_Putchar(char ch) -{ +{ Debug_PutCharDebug(ch); if( !gbDebug_IsKPanic ) { @@ -75,16 +77,10 @@ static void Debug_Puts(int UseKTerm, const char *Str) void Debug_DbgOnlyFmt(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 - Debug_Puts(0, buf); + Debug_Fmt(0, format, args); } -void Debug_Fmt(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; @@ -92,20 +88,23 @@ void Debug_Fmt(const char *format, va_list args) len = vsnprintf(buf, DEBUG_MAX_LINE_LEN-1, format, args); //if( len < DEBUG_MAX_LINE ) // do something - Debug_Puts(1, buf); + Debug_Puts(bUseKTerm, buf); return ; } -void Debug_FmtS(const char *format, ...) +void Debug_FmtS(int bUseKTerm, const char *format, ...) { va_list args; va_start(args, format); - Debug_Fmt(format, args); + Debug_Fmt(bUseKTerm, format, args); va_end(args); } -void Debug_KernelPanic() +void Debug_KernelPanic(void) { + #if LOCK_DEBUG_OUTPUT + SHORTREL(&glDebug_Lock); + #endif gbDebug_IsKPanic = 1; KernelPanic_SetMode(); } @@ -124,7 +123,7 @@ void LogF(const char *Fmt, ...) va_start(args, Fmt); - Debug_Fmt(Fmt, args); + Debug_Fmt(1, Fmt, args); va_end(args); @@ -148,6 +147,7 @@ void Debug(const char *Fmt, ...) va_start(args, Fmt); Debug_DbgOnlyFmt(Fmt, args); va_end(args); + Debug_PutCharDebug('\r'); Debug_PutCharDebug('\n'); #if LOCK_DEBUG_OUTPUT SHORTREL(&glDebug_Lock); @@ -166,9 +166,9 @@ void Log(const char *Fmt, ...) Debug_Puts(1, "Log: "); va_start(args, Fmt); - Debug_Fmt(Fmt, args); + Debug_Fmt(1, Fmt, args); va_end(args); - Debug_Putchar('\n'); + Debug_Puts(1, "\r\n"); #if LOCK_DEBUG_OUTPUT SHORTREL(&glDebug_Lock); @@ -184,8 +184,9 @@ void Warning(const char *Fmt, ...) Debug_Puts(1, "Warning: "); va_start(args, Fmt); - Debug_Fmt(Fmt, args); + Debug_Fmt(1, Fmt, args); va_end(args); + Debug_Putchar('\r'); Debug_Putchar('\n'); #if LOCK_DEBUG_OUTPUT @@ -205,15 +206,13 @@ void Panic(const char *Fmt, ...) Debug_Puts(1, "Panic: "); va_start(args, Fmt); - Debug_Fmt(Fmt, args); + Debug_Fmt(1, Fmt, args); va_end(args); + Debug_Putchar('\r'); Debug_Putchar('\n'); Threads_Dump(); -// __asm__ __volatile__ ("xchg %bx, %bx"); -// __asm__ __volatile__ ("cli;\n\thlt"); -// for(;;) __asm__ __volatile__ ("hlt"); for(;;) ; } @@ -226,9 +225,9 @@ void Debug_SetKTerminal(const char *File) VFS_Close(tmp); } tmp = VFS_Open(File, VFS_OPENFLAG_WRITE); - Log_Log("Debug", "Opened '%s' as 0x%x", File, tmp); +// Log_Log("Debug", "Opened '%s' as 0x%x", File, tmp); giDebug_KTerm = tmp; - Log_Log("Debug", "Returning to %p", __builtin_return_address(0)); +// Log_Log("Debug", "Returning to %p", __builtin_return_address(0)); } void Debug_Enter(const char *FuncName, const char *ArgTypes, ...) @@ -246,38 +245,38 @@ void Debug_Enter(const char *FuncName, const char *ArgTypes, ...) va_start(args, ArgTypes); - LogF("%014lli ", now()); - while(i--) Debug_Putchar(' '); + Debug_FmtS(TRACE_TO_KTERM, "%014lli ", now()); + while(i--) Debug_Puts(TRACE_TO_KTERM, " "); - Debug_Puts(1, FuncName); - Debug_FmtS("[%i]", tid); - Debug_Puts(1, ": ("); + Debug_Puts(TRACE_TO_KTERM, FuncName); + Debug_FmtS(TRACE_TO_KTERM, "[%i]", tid); + Debug_Puts(TRACE_TO_KTERM, ": ("); while(*ArgTypes) { pos = strpos(ArgTypes, ' '); if(pos == -1 || pos > 1) { if(pos == -1) - Debug_Puts(1, ArgTypes+1); + Debug_Puts(TRACE_TO_KTERM, ArgTypes+1); else { - for( i = 1; i < pos; i ++ ) - Debug_Putchar(ArgTypes[i]); + Debug_FmtS(TRACE_TO_KTERM, "%.*s", pos-1, ArgTypes+1); } - Debug_Putchar('='); + Debug_Puts(TRACE_TO_KTERM, "="); } switch(*ArgTypes) { - case 'p': LogF("%p", va_arg(args, void*)); break; - case 's': LogF("'%s'", va_arg(args, char*)); break; - case 'i': LogF("%i", va_arg(args, int)); break; - case 'u': LogF("%u", va_arg(args, Uint)); break; - case 'x': LogF("0x%x", va_arg(args, Uint)); break; - case 'b': LogF("0b%b", va_arg(args, Uint)); break; - case 'X': LogF("0x%llx", va_arg(args, Uint64)); break; // Extended (64-Bit) - case 'B': LogF("0b%llb", va_arg(args, Uint64)); break; // Extended (64-Bit) + case 'p': Debug_FmtS(TRACE_TO_KTERM, "%p", va_arg(args, void*)); break; + case 'P': Debug_FmtS(TRACE_TO_KTERM, "%P", va_arg(args, tPAddr)); break; + case 's': Debug_FmtS(TRACE_TO_KTERM, "'%s'", va_arg(args, char*)); break; + case 'i': Debug_FmtS(TRACE_TO_KTERM, "%i", va_arg(args, int)); break; + case 'u': Debug_FmtS(TRACE_TO_KTERM, "%u", va_arg(args, Uint)); break; + case 'x': Debug_FmtS(TRACE_TO_KTERM, "0x%x", va_arg(args, Uint)); break; + case 'b': Debug_FmtS(TRACE_TO_KTERM, "0b%b", va_arg(args, Uint)); break; + case 'X': Debug_FmtS(TRACE_TO_KTERM, "0x%llx", va_arg(args, Uint64)); break; // Extended (64-Bit) + case 'B': Debug_FmtS(TRACE_TO_KTERM, "0b%llb", va_arg(args, Uint64)); break; // Extended (64-Bit) } if(pos != -1) { - Debug_Putchar(','); Debug_Putchar(' '); + Debug_Puts(TRACE_TO_KTERM, ", "); } if(pos == -1) break; @@ -285,7 +284,7 @@ void Debug_Enter(const char *FuncName, const char *ArgTypes, ...) } va_end(args); - Debug_Putchar(')'); Debug_Putchar('\n'); + Debug_Puts(TRACE_TO_KTERM, ")\r\n"); #if LOCK_DEBUG_OUTPUT SHORTREL(&glDebug_Lock); @@ -302,18 +301,18 @@ void Debug_Log(const char *FuncName, const char *Fmt, ...) SHORTLOCK(&glDebug_Lock); #endif - va_start(args, Fmt); - - LogF("%014lli ", now()); - while(i--) Debug_Putchar(' '); + Debug_FmtS(TRACE_TO_KTERM, "%014lli ", now()); + while(i--) Debug_Puts(TRACE_TO_KTERM, " "); - Debug_Puts(1, FuncName); - Debug_FmtS("[%i]", tid); - Debug_Puts(1, ": "); - Debug_Fmt(Fmt, args); + Debug_Puts(TRACE_TO_KTERM, FuncName); + Debug_FmtS(TRACE_TO_KTERM, "[%i]", tid); + Debug_Puts(TRACE_TO_KTERM, ": "); + va_start(args, Fmt); + Debug_Fmt(TRACE_TO_KTERM, Fmt, args); va_end(args); - Debug_Putchar('\n'); + + Debug_Puts(TRACE_TO_KTERM, "\r\n"); #if LOCK_DEBUG_OUTPUT SHORTREL(&glDebug_Lock); @@ -338,36 +337,36 @@ void Debug_Leave(const char *FuncName, char RetType, ...) gDebug_Level = 0; i = 0; } - LogF("%014lli ", now()); + Debug_FmtS(TRACE_TO_KTERM, "%014lli ", now()); // Indenting - while(i--) Debug_Putchar(' '); + while(i--) Debug_Puts(TRACE_TO_KTERM, " "); - Debug_Puts(1, FuncName); - Debug_FmtS("[%i]", tid); - Debug_Puts(1, ": RETURN"); + Debug_Puts(TRACE_TO_KTERM, FuncName); + Debug_FmtS(TRACE_TO_KTERM, "[%i]", tid); + Debug_Puts(TRACE_TO_KTERM, ": RETURN"); // No Return if(RetType == '-') { - Debug_Putchar('\n'); + Debug_Puts(TRACE_TO_KTERM, "\r\n"); #if LOCK_DEBUG_OUTPUT SHORTREL(&glDebug_Lock); #endif return; } - Debug_Putchar(' '); switch(RetType) { - case 'n': Debug_Puts(1, "NULL"); break; - case 'p': Debug_Fmt("%p", args); break; - case 's': Debug_Fmt("'%s'", args); break; - case 'i': Debug_Fmt("%i", args); break; - case 'u': Debug_Fmt("%u", args); break; - case 'x': Debug_Fmt("0x%x", args); break; + case 'n': Debug_Puts(TRACE_TO_KTERM, " NULL"); break; + case 'p': Debug_Fmt(TRACE_TO_KTERM, " %p", args); break; + case 'P': Debug_Fmt(TRACE_TO_KTERM, " %P", args); break; // PAddr + case 's': Debug_Fmt(TRACE_TO_KTERM, " '%s'", args); break; + case 'i': Debug_Fmt(TRACE_TO_KTERM, " %i", args); break; + case 'u': Debug_Fmt(TRACE_TO_KTERM, " %u", args); break; + case 'x': Debug_Fmt(TRACE_TO_KTERM, " 0x%x", args); break; // Extended (64-Bit) - case 'X': Debug_Fmt("0x%llx", args); break; + case 'X': Debug_Fmt(TRACE_TO_KTERM, " 0x%llx", args); break; } - Debug_Putchar('\n'); + Debug_Puts(TRACE_TO_KTERM, "\r\n"); va_end(args); @@ -382,7 +381,7 @@ void Debug_HexDump(const char *Header, const void *Data, Uint Length) Uint pos = 0; LogF("%014lli ", now()); Debug_Puts(1, Header); - LogF(" (Hexdump of %p)\n", Data); + LogF(" (Hexdump of %p)\r\n", Data); #define CH(n) ((' '<=cdat[(n)]&&cdat[(n)]<0x7F) ? cdat[(n)] : '.') @@ -391,7 +390,7 @@ void Debug_HexDump(const char *Header, const void *Data, Uint Length) LogF("%014lli Log: %04x:" " %02x %02x %02x %02x %02x %02x %02x %02x" " %02x %02x %02x %02x %02x %02x %02x %02x" - " %c%c%c%c%c%c%c%c %c%c%c%c%c%c%c%c\n", + " %c%c%c%c%c%c%c%c %c%c%c%c%c%c%c%c\r\n", now(), pos, cdat[ 0], cdat[ 1], cdat[ 2], cdat[ 3], cdat[ 4], cdat[ 5], cdat[ 6], cdat[ 7], @@ -419,6 +418,7 @@ void Debug_HexDump(const char *Header, const void *Data, Uint Length) LogF("%c", CH(i)); } + Debug_Putchar('\r'); Debug_Putchar('\n'); } }