/* MI Command Set - catch commands. Copyright (C) 2012 Free Software Foundation, Inc. Contributed by Intel Corporation. This file is part of GDB. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #include "defs.h" #include "arch-utils.h" #include "breakpoint.h" #include "gdb.h" #include "libiberty.h" #include "mi-cmds.h" #include "mi-getopt.h" #include "mi-cmd-break.h" /* Common path for the -catch-load and -catch-unload. */ static void mi_catch_load_unload (int load, char *argv[], int argc) { struct solib_catchpoint *c; struct cleanup *back_to; const char *actual_cmd = load ? "-catch-load" : "-catch-unload"; int temp = 0; int enabled = 1; int oind = 0; char *oarg; enum opt { OPT_TEMP, OPT_DISABLED, }; static const struct mi_opt opts[] = { { "t", OPT_TEMP, 0 }, { "d", OPT_DISABLED, 0 }, { 0, 0, 0 } }; for (;;) { int opt = mi_getopt (actual_cmd, argc, argv, opts, &oind, &oarg); if (opt < 0) break; switch ((enum opt) opt) { case OPT_TEMP: temp = 1; break; case OPT_DISABLED: enabled = 0; break; } } if (oind >= argc) error (_("-catch-load/unload: Missing ")); if (oind < argc -1) error (_("-catch-load/unload: Garbage following the ")); back_to = setup_breakpoint_reporting (); add_solib_catchpoint (argv[oind], load, temp, enabled); do_cleanups (back_to); } /* Handler for the -catch-load. */ void mi_cmd_catch_load (char *cmd, char *argv[], int argc) { mi_catch_load_unload (1, argv, argc); } /* Handler for the -catch-unload. */ void mi_cmd_catch_unload (char *cmd, char *argv[], int argc) { mi_catch_load_unload (0, argv, argc); }