X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fdebug%2Fdebugger.c;h=9d84c9500a131d6ce9a8922f45d9a456e1e7e226;hb=097a68ff443e267f0de3d5455a580f8394f710b2;hp=b54ed7778e66161a015bf16213fc2893b7b055d5;hpb=9fdf4d06ba5eff5db9c021ad12ee088b83209f2a;p=libfirm diff --git a/ir/debug/debugger.c b/ir/debug/debugger.c index b54ed7778..9d84c9500 100644 --- a/ir/debug/debugger.c +++ b/ir/debug/debugger.c @@ -42,18 +42,18 @@ #include "debug.h" #ifdef _WIN32 -/** Break into the debugger. The Win32 way. */ -static void firm_debug_break(void) { +/* Break into the debugger. The Win32 way. */ +void firm_debug_break(void) { DebugBreak(); } #elif defined(__GNUC__) && (defined(__i386__) || defined(__x86_64)) -/** Break into the debugger. The ia32/x86_64 way under GCC. */ -static void firm_debug_break(void) { +/* Break into the debugger. The ia32/x86_64 way under GCC. */ +void firm_debug_break(void) { __asm__ __volatile__("int3"); } #else -/** Break into the debugger. Poor Unix way. */ -static void firm_debug_break(void) { +/* Break into the debugger. Poor Unix way. */ +void firm_debug_break(void) { raise(SIGINT); } #endif /* _WIN32 */ @@ -143,13 +143,20 @@ static int is_active = 0; /** hook the hook h with function fkt. */ #define HOOK(h, fkt) \ - debugger_hooks[h].hook._##h = fkt; register_hook(h, &debugger_hooks[h]) +do { \ + debugger_hooks[h].hook._##h = fkt; \ + register_hook(h, &debugger_hooks[h]); \ +} while(0) /** unhook the hook h */ -#define UNHOOK(h) unregister_hook(h, &debugger_hooks[h]) +#define UNHOOK(h) \ +do { \ + unregister_hook(h, &debugger_hooks[h]); \ + debugger_hooks[h].hook._##h = NULL; \ +} while(0) /** returns non-zero if a entry hook h is used */ -#define IS_HOOKED(h) (debugger_hooks[h].next != NULL) +#define IS_HOOKED(h) (debugger_hooks[h].hook._##h != NULL) /* some macros needed to create the info string */ #define _DBG_VERSION(major, minor) #major "." #minor @@ -558,7 +565,8 @@ static void show_commands(void) { ".bp show all breakpoints\n" ".enable nr enable breakpoint nr\n" ".disable nr disable breakpoint nr\n" - ".setmask name lvl sets the debug module name to level lvl\n" + ".setmask name msk sets the debug module name to mask msk\n" + ".setlvl name lvl sets the debug module name to level lvl\n" ".setoutfile name file redirects debug output of module name to file\n" ".help list all commands\n" ); @@ -686,6 +694,8 @@ void firm_debug(const char *cmd) { bp_activate(bp, 0); else if (sscanf(cmd, ".setmask %s %u\n", name, &lvl) == 2) set_dbg_level(name, lvl); + else if (sscanf(cmd, ".setlvl %s %u\n", name, &lvl) == 2) + set_dbg_level(name, (1 << lvl) - 1); else if (sscanf(cmd, ".setoutfile %s %s\n", name, fname) == 2) set_dbg_outfile(name, fname); else { @@ -699,7 +709,7 @@ void firm_init_debugger(void) char *env; bp_numbers = new_set(cmp_nr_bp, 8); - bp_idents = new_set(cmp_ident_bp, 8); + bp_idents = new_set(cmp_ident_bp, 8); env = getenv("FIRMDBG"); @@ -787,7 +797,11 @@ static int _firm_only_that_you_can_compile_with_NDEBUG_defined; * * Disables breakpoint nr. * - * @b .setmask name lvl + * @b .setmask name msk + * + * Sets the debug module name to mask msk. + * + * @b .setlvl name lvl * * Sets the debug module name to level lvl. *