/* Remove the TUI specific hooks. */ void tui_remove_hooks (void) { target_wait_hook = 0; selected_frame_level_changed_hook = 0; print_frame_info_listing_hook = 0; query_hook = 0; registers_changed_hook = 0; register_changed_hook = 0; detach_hook = 0; /* Restore the previous event hooks. */ set_gdb_event_hooks (tui_old_event_hooks); }
/* Install the TUI specific hooks. */ void tui_install_hooks (void) { target_wait_hook = tui_target_wait_hook; selected_frame_level_changed_hook = tui_selected_frame_level_changed_hook; print_frame_info_listing_hook = tui_print_frame_info_listing_hook; query_hook = tui_query_hook; /* Install the event hooks. */ tui_old_event_hooks = set_gdb_event_hooks (&tui_event_hooks); registers_changed_hook = tui_registers_changed_hook; register_changed_hook = tui_register_changed_hook; detach_hook = tui_detach_hook; }
enum mi_cmd_result mi_cmd_break_insert (char *command, char **argv, int argc) { char *address = NULL; enum bp_type type = REG_BP; int temp_p = 0; int thread = -1; int ignore_count = 0; char *condition = NULL; enum gdb_rc rc; struct gdb_events *old_hooks; enum opt { HARDWARE_OPT, TEMP_OPT /*, REGEXP_OPT */ , CONDITION_OPT, IGNORE_COUNT_OPT, THREAD_OPT }; static struct mi_opt opts[] = { {"h", HARDWARE_OPT, 0}, {"t", TEMP_OPT, 0}, {"c", CONDITION_OPT, 1}, {"i", IGNORE_COUNT_OPT, 1}, {"p", THREAD_OPT, 1}, 0 }; /* Parse arguments. It could be -r or -h or -t, <location> or ``--'' to denote the end of the option list. */ int optind = 0; char *optarg; while (1) { int opt = mi_getopt ("mi_cmd_break_insert", argc, argv, opts, &optind, &optarg); if (opt < 0) break; switch ((enum opt) opt) { case TEMP_OPT: temp_p = 1; break; case HARDWARE_OPT: type = HW_BP; break; #if 0 case REGEXP_OPT: type = REGEXP_BP; break; #endif case CONDITION_OPT: condition = optarg; break; case IGNORE_COUNT_OPT: ignore_count = atol (optarg); break; case THREAD_OPT: thread = atol (optarg); break; } } if (optind >= argc) error ("mi_cmd_break_insert: Missing <location>"); if (optind < argc - 1) error ("mi_cmd_break_insert: Garbage following <location>"); address = argv[optind]; /* Now we have what we need, let's insert the breakpoint! */ old_hooks = set_gdb_event_hooks (&breakpoint_hooks); switch (type) { case REG_BP: rc = gdb_breakpoint (address, condition, 0 /*hardwareflag */ , temp_p, thread, ignore_count); break; case HW_BP: rc = gdb_breakpoint (address, condition, 1 /*hardwareflag */ , temp_p, thread, ignore_count); break; #if 0 case REGEXP_BP: if (temp_p) error ("mi_cmd_break_insert: Unsupported tempoary regexp breakpoint"); else rbreak_command_wrapper (address, FROM_TTY); return MI_CMD_DONE; break; #endif default: internal_error (__FILE__, __LINE__, "mi_cmd_break_insert: Bad switch."); } set_gdb_event_hooks (old_hooks); if (rc == GDB_RC_FAIL) return MI_CMD_CAUGHT_ERROR; else return MI_CMD_DONE; }