X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fcommon%2Fdebug.h;h=5f32588a18ae56d708d38d543dc52f91271aac5a;hb=9b0957659c22d223a11d75df3df3478b188850e2;hp=a3e2a8f7b70686757ef0487120e220fd162e1beb;hpb=3b104a9954f295229df0c1320f85849abeb8f941;p=libfirm diff --git a/ir/common/debug.h b/ir/common/debug.h index a3e2a8f7b..5f32588a1 100644 --- a/ir/common/debug.h +++ b/ir/common/debug.h @@ -2,6 +2,8 @@ * Debug facility. * @author Michael Beck, Sebastian Hack * @date 15.12.2004 + * + * $Id$ */ #ifndef _FIRM_DEBUG_H @@ -9,37 +11,60 @@ #include "firm_config.h" +#ifdef DEBUG_libfirm + +/* WITH DEBUG OUTPUT */ + #ifdef WITH_LIBCORE -#include +#define DBG(x) _LC_DBG(x) +#define DB(x) _LC_DB(x) + +#include /* use the newer debug implementation in libcore */ -typedef dbg_module_t firm_dbg_module_t; +typedef lc_dbg_module_t firm_dbg_module_t; extern firm_dbg_module_t *firm_dbg_register(const char *name); -#define firm_dbg_set_mask(module, mask) dbg_set_mask(module, mask) -#define firm_dbg_get_mask(module) dbg_get_mask(module) -#define firm_dbg_set_file(module, file) dbg_set_file(module, file) - -#else +#define firm_dbg_set_mask(module, mask) lc_dbg_set_mask(module, mask) +#define firm_dbg_get_mask(module) lc_dbg_get_mask(module) +#define firm_dbg_set_file(module, file) lc_dbg_set_file(module, file) + +#define LEVEL_DEFAULT LC_LEVEL_DEFAULT +#define LEVEL_1 LC_LEVEL_1 +#define LEVEL_2 LC_LEVEL_2 +#define LEVEL_3 LC_LEVEL_3 +#define LEVEL_4 LC_LEVEL_4 +#define LEVEL_5 LC_LEVEL_5 +#define SET_LEVEL_0 LC_SET_LEVEL_0 +#define SET_LEVEL_1 LC_SET_LEVEL_1 +#define SET_LEVEL_2 LC_SET_LEVEL_2 +#define SET_LEVEL_3 LC_SET_LEVEL_3 +#define SET_LEVEL_4 LC_SET_LEVEL_4 +#define SET_LEVEL_5 LC_SET_LEVEL_5 +#define SET_LEVEL_ALL LC_SET_LEVEL_ALL + +#else /* WITH_LIBCORE */ /* use the builtin debug implementation */ #include enum firm_dbg_level_t { - LEVEL_DEFAULT = 0, /**< Prints always. Use with DBG(). */ - LEVEL_1 = 1, - LEVEL_2 = 2, - LEVEL_3 = 4, - LEVEL_4 = 8, - LEVEL_5 = 16, - - SET_LEVEL_1 = 1, /**< use with firm_dbg_set_mask(). */ - SET_LEVEL_2 = 3, - SET_LEVEL_3 = 7, - SET_LEVEL_4 = 15, - SET_LEVEL_5 = 31 + LEVEL_DEFAULT = 0, /**< Prints always. Use with DBG(). */ + LEVEL_1 = 1, + LEVEL_2 = 2, + LEVEL_3 = 4, + LEVEL_4 = 8, + LEVEL_5 = 16, + + SET_LEVEL_0 = 0, /**< use with firm_dbg_set_mask(). */ + SET_LEVEL_1 = 1, + SET_LEVEL_2 = 3, + SET_LEVEL_3 = 7, + SET_LEVEL_4 = 15, + SET_LEVEL_5 = 31, + SET_LEVEL_ALL = SET_LEVEL_5 }; typedef struct _firm_dbg_module_t firm_dbg_module_t; @@ -50,6 +75,9 @@ void *_firm_dbg_make_msg(const firm_dbg_module_t *mod, unsigned mask, const char /* Internal function to the debug module. */ void _firm_dbg_print_msg(const char *filename, int line, const char *func, void *data); +/* Internal function to the debug module. */ +void _firm_dbg_print(const firm_dbg_module_t *mod, unsigned mask, const char *fmt, ...); + /** * Register a module to the firm debug facility. * If the module has already been registered, no new module is allocated @@ -82,7 +110,7 @@ unsigned firm_dbg_get_mask(const firm_dbg_module_t *module); void firm_dbg_set_file(firm_dbg_module_t *module, FILE *file); #define _DBG_MAIN(func,args) \ - _firm_dbg_print_msg(__FILE__, __LINE__, func, _firm_dbg_make_msg args) + _firm_dbg_print_msg(__FILE__, __LINE__, func, _firm_dbg_make_msg args) /* If we have C99 use the __func__ variable for calling functions name. */ #if defined(__STD_VERSION__) && __STD_VERSION >= 199901L @@ -91,22 +119,23 @@ void firm_dbg_set_file(firm_dbg_module_t *module, FILE *file); /* Else, check for gcc and use the proprietary __FUNCTION__ macro. */ #ifdef __GNUC__ -#define _DBG(args) _DBG_MAIN(__FUNCTION__, args) +#define _DBG(args) _DBG_MAIN(__FUNCTION__, args) #else /* Else go without the name of the calling function. */ -#define _DBG(args) _DBG_MAIN("", args) -#endif -#endif +#define _DBG(args) _DBG_MAIN("", args) +#endif /* __GNUC__ */ +#endif /* __STD_VERSION__ ... */ + +#define _DB(args) _firm_dbg_print args /** * Debug messages issued with this macro are always printed, even in * retail versions. * @see DBG() */ -#define DBG_RETAIL(args) _DBG(args) - -#ifdef DEBUG_libfirm +#define DBG_RETAIL(args) _DBG(args) +#define DB_RETAIL(args) _DB(args) /** * Issue a debug message. @@ -131,12 +160,32 @@ void firm_dbg_set_file(firm_dbg_module_t *module, FILE *file); * DBG((my_mod, LEVEL_DEFAULT, "entity %e has type %t", ent, type)) * @endcode */ -#define DBG(args) _DBG(args) - -#else -#define DBG(args) -#endif +#define DBG(args) _DBG(args) +#define DB(args) _DB(args) #endif /* WITH_LIBCORE */ +/** create a debug handle in debug mode */ +#define FIRM_DBG_REGISTER(handle, name) handle = firm_dbg_register(name) +#define DEBUG_ONLY(code) code +#define RELEASE_ONLY(code) + +#else /* ndef DEBUG_libfirm */ + +/* DEBUG OUTPUT IS COMPLETELY DISABLED */ + +#define DBG(x) +#define DB(x) + +/** create a debug handle in release mode */ +#define FIRM_DBG_REGISTER(handle, name) +#define DEBUG_ONLY(code) +#define RELEASE_ONLY(code) code + +#define firm_dbg_set_mask(module, mask) +#define firm_dbg_get_mask(module) +#define firm_dbg_set_file(module, file) + +#endif /* DEBUG_libfirm */ + #endif /* _FIRM_DEBUG_H */