From c7b5bcc8fc514065e1815df50dccd40591d2bc8e Mon Sep 17 00:00:00 2001 From: Michael Beck Date: Wed, 25 Jan 2006 13:08:28 +0000 Subject: [PATCH] lightweight DB() macro added [r7272] --- ir/common/debug.c | 96 +++++++++++++++++++++++++++-------------------- ir/common/debug.h | 13 ++++++- 2 files changed, 66 insertions(+), 43 deletions(-) diff --git a/ir/common/debug.c b/ir/common/debug.c index 6956495ea..37f7432c9 100644 --- a/ir/common/debug.c +++ b/ir/common/debug.c @@ -44,93 +44,107 @@ static struct obstack dbg_obst; static set *module_set; struct _firm_dbg_module_t { - unsigned mask; - const char *name; - FILE *file; + unsigned mask; + const char *name; + FILE *file; }; static int module_cmp(const void *p1, const void *p2, size_t size) { - const firm_dbg_module_t *m1 = p1; - const firm_dbg_module_t *m2 = p2; - return strcmp(m1->name, m2->name); + const firm_dbg_module_t *m1 = p1; + const firm_dbg_module_t *m2 = p2; + return strcmp(m1->name, m2->name); } static void firm_dbg_init(void) { - obstack_init(&dbg_obst); - module_set = new_set(module_cmp, 16); + obstack_init(&dbg_obst); + module_set = new_set(module_cmp, 16); } firm_dbg_module_t *firm_dbg_register(const char *name) { - firm_dbg_module_t mod; - mod.mask = 0; - mod.name = name; - mod.file = stderr; + firm_dbg_module_t mod; + mod.mask = 0; + mod.name = name; + mod.file = stderr; - if(!module_set) - firm_dbg_init(); + if(!module_set) + firm_dbg_init(); - return set_insert(module_set, &mod, sizeof(mod), HASH_STR(name, strlen(name))); + return set_insert(module_set, &mod, sizeof(mod), HASH_STR(name, strlen(name))); } void firm_dbg_set_mask(firm_dbg_module_t *module, unsigned mask) { - module->mask = mask; + module->mask = mask; } unsigned firm_dbg_get_mask(const firm_dbg_module_t *module) { - return module->mask; + return module->mask; } void firm_dbg_set_file(firm_dbg_module_t *module, FILE *file) { - module->file = file; + module->file = file; } typedef struct _msg_info_t { - const char *msg; - const firm_dbg_module_t *mod; + const char *msg; + const firm_dbg_module_t *mod; } msg_info_t; static void *make_msg_info(const firm_dbg_module_t *mod, const char *fmt, va_list args) { - static const char msg_header[] = "%s(%d) %s: "; - msg_info_t *res = obstack_alloc(&dbg_obst, sizeof(*res)); + static const char msg_header[] = "%s(%d) %s: "; + msg_info_t *res = obstack_alloc(&dbg_obst, sizeof(*res)); - obstack_grow(&dbg_obst, msg_header, sizeof(msg_header) - 1); - ir_obst_vprintf(&dbg_obst, fmt, args); - obstack_1grow(&dbg_obst, '\0'); + obstack_grow(&dbg_obst, msg_header, sizeof(msg_header) - 1); + ir_obst_vprintf(&dbg_obst, fmt, args); + obstack_1grow(&dbg_obst, '\0'); - res->msg = obstack_finish(&dbg_obst); - res->mod = mod; - return res; + res->msg = obstack_finish(&dbg_obst); + res->mod = mod; + return res; } void *_firm_dbg_make_msg(const firm_dbg_module_t *mod, unsigned mask, const char *fmt, ...) { - void *res = NULL; + void *res = NULL; - if(mask == 0 || (mod->mask & mask)) { - va_list args; - va_start(args, fmt); - res = make_msg_info(mod, fmt, args); - va_end(args); - } + if(mask == 0 || (mod->mask & mask)) { + va_list args; + va_start(args, fmt); + res = make_msg_info(mod, fmt, args); + va_end(args); + } - return res; + return res; } void _firm_dbg_print_msg(const char *filename, int line, const char *func, void *mi_ptr) { - msg_info_t *mi = mi_ptr; - if(mi) { - fprintf(mi->mod->file, mi->msg, filename, line, func); - obstack_free(&dbg_obst, mi); - } + msg_info_t *mi = mi_ptr; + if(mi) { + fprintf(mi->mod->file, mi->msg, filename, line, func); + obstack_free(&dbg_obst, mi); + } } +void _firm_dbg_print(const firm_dbg_module_t *mod, unsigned mask, const char *fmt, ...) +{ + if(mask == 0 || (mod->mask & mask)) { + va_list args; + char *res; + va_start(args, fmt); + ir_obst_vprintf(&dbg_obst, fmt, args); + obstack_1grow(&dbg_obst, '\0'); + res = obstack_finish(&dbg_obst); + fprintf(mod->file, res); + obstack_free(&dbg_obst, res); + va_end(args); + } +} #endif /* WITH_LIBCORE */ diff --git a/ir/common/debug.h b/ir/common/debug.h index f362f52e1..1effc7f68 100644 --- a/ir/common/debug.h +++ b/ir/common/debug.h @@ -14,6 +14,7 @@ #ifdef WITH_LIBCORE #define DBG(x) _LC_DBG(x) +#define DB(x) _LC_DB(x) #include /* use the newer debug implementation in libcore */ @@ -69,6 +70,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 @@ -115,15 +119,18 @@ void firm_dbg_set_file(firm_dbg_module_t *module, FILE *file); /* Else go without the name of the calling function. */ #define _DBG(args) _DBG_MAIN("", args) -#endif +#endif /* __GNUC__ */ #endif +#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) +#define DB_RETAIL(args) _DB(args) #ifdef DEBUG_libfirm @@ -151,10 +158,12 @@ void firm_dbg_set_file(firm_dbg_module_t *module, FILE *file); * @endcode */ #define DBG(args) _DBG(args) +#define DB(args) _DB(args) #else #define DBG(args) -#endif +#define DB(args) +#endif /* DEBUG_libfirm */ #endif /* WITH_LIBCORE */ -- 2.20.1