3 * @author Michael Beck, Sebastian Hack
12 enum firm_dbg_level_t {
13 LEVEL_DEFAULT = 0, /**< Prints always. Use with DBG(). */
20 SET_LEVEL_1 = 1, /**< use with firm_dbg_set_mask(). */
27 typedef struct _firm_dbg_module_t firm_dbg_module_t;
29 /* Internal function to the debug module. */
30 void *_firm_dbg_make_msg(const firm_dbg_module_t *mod, unsigned mask, const char *fmt, ...);
32 /* Internal function to the debug module. */
33 void _firm_dbg_print_msg(const char *filename, int line, const char *func, void *data);
36 * Register a module to the firm debug facility.
37 * If the module has already been registered, no new module is allocated
38 * but the handle is returned. By default, all messages go to @c stderr
39 * and the debug mask is set to 0, i.e. the module is muted.
40 * @param name The name of the module to register.
41 * @return The module handle.
43 firm_dbg_module_t *firm_dbg_register(const char *name);
46 * Set the mask of a module.
47 * @param module The module.
48 * @param mask The new mask for the module.
50 void firm_dbg_set_mask(firm_dbg_module_t *module, unsigned mask);
53 * Get the mask of a module.
54 * @param module The module handle.
55 * @return The mask currently used by the module.
57 unsigned firm_dbg_get_mask(const firm_dbg_module_t *module);
60 * Set the output file of a module.
61 * @param module The module handle.
62 * @param file The new file to use by this handle.
64 void firm_dbg_set_file(firm_dbg_module_t *module, FILE *file);
66 #define _DBG_MAIN(func,args) \
67 _firm_dbg_print_msg(__FILE__, __LINE__, func, _firm_dbg_make_msg args)
69 /* If we have C99 use the __func__ variable for calling functions name. */
70 #if defined(__STD_VERSION__) && __STD_VERSION >= 199901L
71 #define _DBG(args) _DBG_MAIN(__func__, args)
74 /* Else, check for gcc and use the proprietary __FUNCTION__ macro. */
76 #define _DBG(args) _DBG_MAIN(__FUNCTION__, args)
79 /* Else go without the name of the calling function. */
80 #define _DBG(args) _DBG_MAIN("", args)
85 * Debug messages issued with this macro are always printed, even in
89 #define DBG_RETAIL(args) _DBG(args)
94 * Issue a debug message.
95 * @param args The arguments.
97 * The arguments is a list surrounded by parentheses. The items
99 * - The module handle as returned by firm_dbg_register().
100 * - The debug mask that you want associate with this message.
101 * - A format string for the message to pass to ir_printf().
102 * - Further optional arguments are passed to ir_printf().
104 * The mask is anded against the module's mask. If both have some bits
105 * in common, the message is issued. If the given mask is 0, the message
106 * is always dumped regardless of the module's mask. You can also use
107 * the mask in a level based manner, see firm_dbg_level_t.
109 * Here is an example:
111 * DBG((my_mod, MASK_ERR, "ir node %n is not green", node))
113 * DBG((my_mod, LEVEL_DEFAULT, "entity %e has type %t", ent, type))
116 #define DBG(args) _DBG(args)