e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync/* Copyright (c) 2001, Stanford University
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync * All rights reserved.
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync *
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync * See the file LICENSE.txt for information on redistributing this software.
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync */
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#ifndef CR_ERROR_H
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#define CR_ERROR_H
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#include <iprt/cdefs.h>
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#ifdef __cplusplus
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncextern "C" {
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#endif
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#ifndef __GNUC__
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#define NORETURN_PRINTF
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#define PRINTF
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#elif defined IN_GUEST
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#define NORETURN_PRINTF __attribute__ ((__noreturn__,format(printf,1,2)))
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#define PRINTF __attribute__ ((format(printf,1,2)))
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#else
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#define NORETURN_PRINTF
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#define PRINTF
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#endif
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
03951d473e83c595e3b5a906ac1d248e18cd0860vboxsync#ifndef WARN
03951d473e83c595e3b5a906ac1d248e18cd0860vboxsync# ifndef IN_RING0
03951d473e83c595e3b5a906ac1d248e18cd0860vboxsync# define LOG(_m) do { crDebug _m ; } while (0)
03951d473e83c595e3b5a906ac1d248e18cd0860vboxsync# define LOGREL(_m) do { crDebug _m ; } while (0)
03951d473e83c595e3b5a906ac1d248e18cd0860vboxsync# define WARN(_m) do { crWarning _m ; AssertMsgFailed(_m); } while (0)
03951d473e83c595e3b5a906ac1d248e18cd0860vboxsync# else
03951d473e83c595e3b5a906ac1d248e18cd0860vboxsync# define LOG(_m) do { } while (0)
03951d473e83c595e3b5a906ac1d248e18cd0860vboxsync# define LOGREL(_m) do { } while (0)
03951d473e83c595e3b5a906ac1d248e18cd0860vboxsync# define WARN(_m) do { AssertMsgFailed(_m); } while (0)
03951d473e83c595e3b5a906ac1d248e18cd0860vboxsync# endif
01df41f7a4e5f7de195a059541d1c89676da9673vboxsync#endif
01df41f7a4e5f7de195a059541d1c89676da9673vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncDECLEXPORT(void) crEnableWarnings(int onOff);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
6bdd9b6728672aa19c0bfb2323a473df6fb8e4f5vboxsyncDECLEXPORT(void) crDebug(const char *format, ... ) PRINTF;
886337cacd3bf140b1b8963b95bc46fe7571e4f5vboxsyncDECLEXPORT(void) crDbgCmdPrint(const char *description1, const char *description2, const char *cmd, ...);
886337cacd3bf140b1b8963b95bc46fe7571e4f5vboxsyncDECLEXPORT(void) crDbgCmdSymLoadPrint(const char *modName, const void*pvAddress);
01df41f7a4e5f7de195a059541d1c89676da9673vboxsync#if defined(DEBUG_misha) && defined(RT_OS_WINDOWS)
7b6926b2bf44f326f40e1d9d1ce33a4dff0a2c67vboxsynctypedef void FNCRDEBUG(const char *format, ... ) PRINTF;
7b6926b2bf44f326f40e1d9d1ce33a4dff0a2c67vboxsynctypedef FNCRDEBUG *PFNCRDEBUG;
7b6926b2bf44f326f40e1d9d1ce33a4dff0a2c67vboxsyncDECLINLINE(PFNCRDEBUG) crGetDebug() {return crDebug;}
7b6926b2bf44f326f40e1d9d1ce33a4dff0a2c67vboxsync# define crWarning (RT_BREAKPOINT(), crDebug)
7b6926b2bf44f326f40e1d9d1ce33a4dff0a2c67vboxsync#else
6bdd9b6728672aa19c0bfb2323a473df6fb8e4f5vboxsyncDECLEXPORT(void) crWarning(const char *format, ... ) PRINTF;
7b6926b2bf44f326f40e1d9d1ce33a4dff0a2c67vboxsync#endif
6bdd9b6728672aa19c0bfb2323a473df6fb8e4f5vboxsyncDECLEXPORT(void) crInfo(const char *format, ... ) PRINTF;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
6bdd9b6728672aa19c0bfb2323a473df6fb8e4f5vboxsyncDECLEXPORT(void) crError(const char *format, ... ) NORETURN_PRINTF;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
43ec799dbc8971afca055dd7f8fd479b7b72f338vboxsync/* Throw more info while opengl is not stable */
43ec799dbc8971afca055dd7f8fd479b7b72f338vboxsync#if defined(DEBUG) || 1
b8711e889bb1bf17cbb52133ea71f7bf38dd707evboxsync# ifdef DEBUG_misha
b8711e889bb1bf17cbb52133ea71f7bf38dd707evboxsync# include <iprt/assert.h>
b8711e889bb1bf17cbb52133ea71f7bf38dd707evboxsync# define CRASSERT Assert
b8711e889bb1bf17cbb52133ea71f7bf38dd707evboxsync//extern int g_VBoxFbgFBreakDdi;
b8711e889bb1bf17cbb52133ea71f7bf38dd707evboxsync# define CR_DDI_PROLOGUE() do { /*if (g_VBoxFbgFBreakDdi) {Assert(0);}*/ } while (0)
b8711e889bb1bf17cbb52133ea71f7bf38dd707evboxsync# else
16cae070c0d8f41858819bf1fe0a438bfb9a9027vboxsync# define CRASSERT( PRED ) ((PRED)?(void)0:crWarning( "Assertion failed: %s, file %s, line %d", #PRED, __FILE__, __LINE__))
b8711e889bb1bf17cbb52133ea71f7bf38dd707evboxsync# define CR_DDI_PROLOGUE() do {} while (0)
b8711e889bb1bf17cbb52133ea71f7bf38dd707evboxsync# endif
b8711e889bb1bf17cbb52133ea71f7bf38dd707evboxsync# define THREADASSERT( PRED ) ((PRED)?(void)0:crError( "Are you trying to run a threaded app ?\nBuild with 'make threadsafe'\nAssertion failed: %s, file %s, line %d", #PRED, __FILE__, __LINE__))
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#else
b8711e889bb1bf17cbb52133ea71f7bf38dd707evboxsync# define CRASSERT( PRED ) ((void)0)
b8711e889bb1bf17cbb52133ea71f7bf38dd707evboxsync# define THREADASSERT( PRED ) ((void)0)
b8711e889bb1bf17cbb52133ea71f7bf38dd707evboxsync# define CR_DDI_PROLOGUE() do {} while (0)
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#endif
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#ifdef __cplusplus
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync}
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#endif
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#endif /* CR_ERROR_H */