VT100 - Replace global buffer with per-terminal, further implementation of escape...
[tpg/acess2.git] / KernelLand / Kernel / include / logdebug.h
index 13d3b82..0710c6b 100644 (file)
 
 #include <stdarg.h>
 
+#ifndef NORETURN
+#define NORETURN       __attribute__((noreturn))
+#endif
+
 // --- Logging ---
 /**
  * \name Logging to kernel ring buffer
@@ -32,9 +36,10 @@ extern void  Log_Debug(const char *Ident, const char *Message, ...);
  * \{
  */
 extern void    Debug_KernelPanic(void);        //!< Initiate a kernel panic
-extern void    Panic(const char *Msg, ...)   //!< Print a panic message (initiates a kernel panic)
+extern void    Panic(const char *Msg, ...) NORETURN;   //!< Print a panic message (initiates a kernel panic)
 extern void    Warning(const char *Msg, ...);  //!< Print a warning message
 extern void    LogF(const char *Fmt, ...);     //!< Print a log message without a trailing newline
+extern void    LogFV(const char *Fmt, va_list Args);   //!< va_list non-newline log message
 extern void    Log(const char *Fmt, ...);      //!< Print a log message
 extern void    Debug(const char *Fmt, ...);    //!< Print a debug message (doesn't go to KTerm)
 extern void    LogV(const char *Fmt, va_list Args);    //!< va_list Log message
@@ -42,6 +47,7 @@ extern void   Debug_Enter(const char *FuncName, const char *ArgTypes, ...);
 extern void    Debug_Log(const char *FuncName, const char *Fmt, ...);
 extern void    Debug_Leave(const char *FuncName, char RetType, ...);
 extern void    Debug_HexDump(const char *Header, const void *Data, size_t Length);
+
 #define UNIMPLEMENTED()        Warning("'%s' unimplemented", __func__)
 #if DEBUG
 # define ENTER(_types...)      Debug_Enter((char*)__func__, _types)
@@ -56,11 +62,18 @@ extern void Debug_HexDump(const char *Header, const void *Data, size_t Length);
 # define LEAVE_RET(_t,_v...)   return (_v)
 # define LEAVE_RET0()  return
 #endif
-#if SANITY
-# define ASSERT(expr) do{if(!(expr))Panic("%s:%i - %s: Assertion '"#expr"' failed",__FILE__,__LINE__,(char*)__func__);}while(0)
+#if !DISABLE_ASSERTS
+# define ASSERTV(expr,msg,args...) do{if(!(expr))Panic("%s:%i - %s: Assertion '"#expr"' failed"msg,__FILE__,__LINE__,(char*)__func__,##args);}while(0)
+# define ASSERTRV(expr,rv,msg,args...) do{if(!(expr)){Warning("%s:%i - %s: Assertion '"#expr"' failed"msg,__FILE__,__LINE__,(char*)__func__ , ##args);return rv;}}while(0)
 #else
-# define ASSERT(expr)
+# define ASSERTV(expr)
+# define ASSERTRV(expr)
 #endif
+#define assert(expr)   ASSERTV(expr, "")
+#define ASSERT(expr)   ASSERTV(expr, "")
+#define ASSERTR(expr,rv)       ASSERTRV(expr, rv, "")
+#define ASSERTC(l,rel,r)       ASSERTV(l rel r, ": 0x%x"#rel"0x%x", l, r)
+#define ASSERTCR(l,rel,r,rv)   ASSERTRV(l rel r, rv, ": 0x%x"#rel"0x%x", l, r)
 /**
  * \}
  */

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