Document the GDB 7.7 release in gdb/ChangeLog
[deliverable/binutils-gdb.git] / gdb / mi / mi-cmd-catch.c
index cd932fe999fab1938972206d5805d962d8311054..038df5969bdb1fd76b342ba85c790c65313ea978 100644 (file)
@@ -1,5 +1,5 @@
 /* MI Command Set - catch commands.
-   Copyright (C) 2012-2013 Free Software Foundation, Inc.
+   Copyright (C) 2012-2014 Free Software Foundation, Inc.
 
    Contributed by Intel Corporation.
 
 #include "breakpoint.h"
 #include "gdb.h"
 #include "libiberty.h"
+#include "ada-lang.h"
 #include "mi-cmds.h"
 #include "mi-getopt.h"
 #include "mi-cmd-break.h"
 
+/* Handler for the -catch-assert command.  */
+
+void
+mi_cmd_catch_assert (char *cmd, char *argv[], int argc)
+{
+  struct gdbarch *gdbarch = get_current_arch();
+  char *condition = NULL;
+  int enabled = 1;
+  int temp = 0;
+
+  int oind = 0;
+  char *oarg;
+
+  enum opt
+    {
+      OPT_CONDITION, OPT_DISABLED, OPT_TEMP,
+    };
+  static const struct mi_opt opts[] =
+    {
+      { "c", OPT_CONDITION, 1},
+      { "d", OPT_DISABLED, 0 },
+      { "t", OPT_TEMP, 0 },
+      { 0, 0, 0 }
+    };
+
+  for (;;)
+    {
+      int opt = mi_getopt ("-catch-assert", argc, argv, opts,
+                          &oind, &oarg);
+
+      if (opt < 0)
+        break;
+
+      switch ((enum opt) opt)
+        {
+       case OPT_CONDITION:
+         condition = oarg;
+         break;
+       case OPT_DISABLED:
+         enabled = 0;
+         break;
+       case OPT_TEMP:
+         temp = 1;
+         break;
+        }
+    }
+
+  /* This command does not accept any argument.  Make sure the user
+     did not provide any.  */
+  if (oind != argc)
+    error (_("Invalid argument: %s"), argv[oind]);
+
+  setup_breakpoint_reporting ();
+  /* create_ada_exception_catchpoint needs CONDITION to be xstrdup'ed,
+     and will assume control of its lifetime.  */
+  if (condition != NULL)
+    condition = xstrdup (condition);
+  create_ada_exception_catchpoint (gdbarch, ada_catch_assert,
+                                  NULL, condition, temp, enabled, 0);
+}
+
+/* Handler for the -catch-exception command.  */
+
+void
+mi_cmd_catch_exception (char *cmd, char *argv[], int argc)
+{
+  struct gdbarch *gdbarch = get_current_arch();
+  char *condition = NULL;
+  int enabled = 1;
+  char *exception_name = NULL;
+  int temp = 0;
+  enum ada_exception_catchpoint_kind ex_kind = ada_catch_exception;
+
+  int oind = 0;
+  char *oarg;
+
+  enum opt
+    {
+      OPT_CONDITION, OPT_DISABLED, OPT_EXCEPTION_NAME, OPT_TEMP,
+      OPT_UNHANDLED,
+    };
+  static const struct mi_opt opts[] =
+    {
+      { "c", OPT_CONDITION, 1},
+      { "d", OPT_DISABLED, 0 },
+      { "e", OPT_EXCEPTION_NAME, 1 },
+      { "t", OPT_TEMP, 0 },
+      { "u", OPT_UNHANDLED, 0},
+      { 0, 0, 0 }
+    };
+
+  for (;;)
+    {
+      int opt = mi_getopt ("-catch-exception", argc, argv, opts,
+                          &oind, &oarg);
+
+      if (opt < 0)
+        break;
+
+      switch ((enum opt) opt)
+        {
+       case OPT_CONDITION:
+         condition = oarg;
+         break;
+       case OPT_DISABLED:
+         enabled = 0;
+         break;
+       case OPT_EXCEPTION_NAME:
+         exception_name = oarg;
+         break;
+       case OPT_TEMP:
+         temp = 1;
+         break;
+       case OPT_UNHANDLED:
+         ex_kind = ada_catch_exception_unhandled;
+         break;
+        }
+    }
+
+  /* This command does not accept any argument.  Make sure the user
+     did not provide any.  */
+  if (oind != argc)
+    error (_("Invalid argument: %s"), argv[oind]);
+
+  /* Specifying an exception name does not make sense when requesting
+     an unhandled exception breakpoint.  */
+  if (ex_kind == ada_catch_exception_unhandled && exception_name != NULL)
+    error (_("\"-e\" and \"-u\" are mutually exclusive"));
+
+  setup_breakpoint_reporting ();
+  /* create_ada_exception_catchpoint needs EXCEPTION_NAME and CONDITION
+     to be xstrdup'ed, and will assume control of their lifetime.  */
+  if (exception_name != NULL)
+    exception_name = xstrdup (exception_name);
+  if (condition != NULL)
+    condition = xstrdup (condition);
+  create_ada_exception_catchpoint (gdbarch, ex_kind,
+                                  exception_name, condition,
+                                  temp, enabled, 0);
+}
 
 /* Common path for the -catch-load and -catch-unload.  */
 
This page took 0.029725 seconds and 4 git commands to generate.