Tools/NetTest - TCP stack testing, going well
[tpg/acess2.git] / Tools / nativelib / logging.c
index 0cb3ed3..292b8a5 100644 (file)
@@ -1,5 +1,9 @@
 /*
- * 
+ * Acess2 libnative (Kernel Simulation Library)
+ * - By John Hodge (thePowersGang)
+ *
+ * logging.c
+ * - Logging functions
  */
 #include <stdio.h>
 #include <stdarg.h>
 #include <acess_logging.h>
 #include <ctype.h>
 #include <inttypes.h>
+#include <shortlock.h>
 
-#define LOGHDR(col,type)       fprintf(stderr, "\e["col"m[%-8.8s]"type" ", Ident)
+extern int     Threads_GetTID();
+
+#define LOGHDR(col,type)       fprintf(stderr, "\e["col"m[%-8.8s]"type"%2i ", Ident, Threads_GetTID())
 #define LOGTAIL()      fprintf(stderr, "\e[0m\n")
 
+#define        LOG_LOCK_ACQUIRE()      do{ \
+       if(!gbThreadInLog)      SHORTLOCK(&glDebugLock); \
+       gbThreadInLog ++; \
+}while(0)
+#define LOG_LOCK_RELEASE()     do {\
+       gbThreadInLog --; \
+       if(!gbThreadInLog)      SHORTREL(&glDebugLock); \
+} while(0)
+
 #define PUTERR(col,type)       {\
+       LOG_LOCK_ACQUIRE(); \
        LOGHDR(col,type);\
        va_list args; va_start(args, Message);\
        vfprintf(stderr, Message, args);\
        va_end(args);\
        LOGTAIL();\
+       LOG_LOCK_RELEASE(); \
 }
 
+// === GLOBALS ===
+int __thread   gbThreadInLog;
+tShortSpinlock glDebugLock;
+
 // === CODE ===
 void Log_KernelPanic(const char *Ident, const char *Message, ...) {
        PUTERR("35", "k")
-       abort();
+       exit(-1);
 }
 void Log_Panic(const char *Ident, const char *Message, ...)
        PUTERR("34", "p")
@@ -38,6 +60,11 @@ void Log_Log(const char *Ident, const char *Message, ...)
 void Log_Debug(const char *Ident, const char *Message, ...)
        PUTERR("37", "d")
 
+void Panic(const char *Message, ...) {
+       const char *Ident = "";
+       PUTERR("35", "k")
+       exit(-1);
+}
 void Warning(const char *Message, ...) {
        const char *Ident = "";
        PUTERR("33", "W")
@@ -46,11 +73,16 @@ void Log(const char *Message, ...) {
        const char *Ident = "";
        PUTERR("37", "L")
 }
+void Debug(const char *Message, ...) {
+       const char *Ident = "";
+       PUTERR("38", "D")
+}
 
 void Debug_HexDump(const char *Prefix, const void *Data, size_t Length)
 {
        const uint8_t *data = Data;
        size_t  ofs;
+       LOG_LOCK_ACQUIRE();
        fprintf(stderr, "[HexDump ]d %s: %i bytes\n", Prefix, (int)Length);
        for( ofs = 0; ofs + 16 <= Length; ofs += 16 )
        {
@@ -71,14 +103,16 @@ void Debug_HexDump(const char *Prefix, const void *Data, size_t Length)
                fprintf(stderr, " %02x", data[ofs%16]);
        }
        fprintf(stderr, "\n");
+       LOG_LOCK_RELEASE();
 }
 
  int   giDebug_TraceLevel = 0;
 
 void Debug_TraceEnter(const char *Function, const char *Format, ...)
 {
-       const char *Ident = "Trace";
-       LOGHDR("37","T");
+       LOG_LOCK_ACQUIRE();
+       //const char *Ident = "Trace";
+       //LOGHDR("37","T");
        for( int i = 0; i < giDebug_TraceLevel; i ++ )
                fprintf(stderr, " ");
        fprintf(stderr, "%s: (", Function);
@@ -132,12 +166,14 @@ void Debug_TraceEnter(const char *Function, const char *Format, ...)
        fprintf(stderr, ")");
        LOGTAIL();
        giDebug_TraceLevel ++;
+       LOG_LOCK_RELEASE();
 }
 
 void Debug_TraceLog(const char *Function, const char *Format, ...)
 {
-       const char *Ident = "Trace";
-       LOGHDR("37","T");
+       LOG_LOCK_ACQUIRE();
+       //const char *Ident = "Trace";
+       //LOGHDR("37","T");
        
        for( int i = 0; i < giDebug_TraceLevel; i ++ )
                fprintf(stderr, " ");
@@ -150,6 +186,7 @@ void Debug_TraceLog(const char *Function, const char *Format, ...)
        
        va_end(args);
        LOGTAIL();
+       LOG_LOCK_RELEASE();
 }
 
 void Debug_TraceLeave(const char *Function, char Type, ...)
@@ -158,8 +195,9 @@ void Debug_TraceLeave(const char *Function, char Type, ...)
                Log_Error("Debug", "Function %s called LEAVE without ENTER", Function);
        }
        
-       const char *Ident = "Trace";
-       LOGHDR("37","T");
+       LOG_LOCK_ACQUIRE();
+       //const char *Ident = "Trace";
+       //LOGHDR("37","T");
        
        va_list args;
        va_start(args, Type);
@@ -200,5 +238,6 @@ void Debug_TraceLeave(const char *Function, char Type, ...)
        
        va_end(args);
        LOGTAIL();
+       LOG_LOCK_RELEASE();
 }
 

UCC git Repository :: git.ucc.asn.au