Python: Move and rename gdb.BtraceFunction
[deliverable/binutils-gdb.git] / gdb / break-catch-sig.c
index c162cc20ff3e0c4e5dd08a567da874ac7b114443..5f02fe623074f38c3cd5d1d066fc69fac6d4a996 100644 (file)
@@ -1,6 +1,6 @@
 /* Everything about signal catchpoints, for GDB.
 
-   Copyright (C) 2011-2013 Free Software Foundation, Inc.
+   Copyright (C) 2011-2017 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
 #include "breakpoint.h"
 #include "gdbcmd.h"
 #include "inferior.h"
+#include "infrun.h"
 #include "annotate.h"
 #include "valprint.h"
 #include "cli/cli-utils.h"
 #include "completer.h"
-#include "gdb_obstack.h"
+
+#include <string>
 
 #define INTERNAL_SIGNAL(x) ((x) == GDB_SIGNAL_TRAP || (x) == GDB_SIGNAL_INT)
 
@@ -106,7 +108,7 @@ signal_catchpoint_dtor (struct breakpoint *b)
 static int
 signal_catchpoint_insert_location (struct bp_location *bl)
 {
-  struct signal_catchpoint *c = (void *) bl->owner;
+  struct signal_catchpoint *c = (struct signal_catchpoint *) bl->owner;
   int i;
 
   if (c->signals_to_be_caught != NULL)
@@ -136,9 +138,10 @@ signal_catchpoint_insert_location (struct bp_location *bl)
    catchpoints.  */
 
 static int
-signal_catchpoint_remove_location (struct bp_location *bl)
+signal_catchpoint_remove_location (struct bp_location *bl,
+                                  enum remove_bp_reason reason)
 {
-  struct signal_catchpoint *c = (void *) bl->owner;
+  struct signal_catchpoint *c = (struct signal_catchpoint *) bl->owner;
   int i;
 
   if (c->signals_to_be_caught != NULL)
@@ -179,7 +182,8 @@ signal_catchpoint_breakpoint_hit (const struct bp_location *bl,
                                  CORE_ADDR bp_addr,
                                  const struct target_waitstatus *ws)
 {
-  const struct signal_catchpoint *c = (void *) bl->owner;
+  const struct signal_catchpoint *c
+    = (const struct signal_catchpoint *) bl->owner;
   gdb_signal_type signal_number;
 
   if (ws->kind != TARGET_WAITKIND_STOPPED)
@@ -218,14 +222,16 @@ signal_catchpoint_print_it (bpstat bs)
   ptid_t ptid;
   struct target_waitstatus last;
   const char *signal_name;
+  struct ui_out *uiout = current_uiout;
 
   get_last_target_status (&ptid, &last);
 
   signal_name = signal_to_name_or_int (last.value.sig);
 
   annotate_catchpoint (b->number);
+  maybe_print_thread_hit_breakpoint (uiout);
 
-  printf_filtered (_("\nCatchpoint %d (signal %s), "), b->number, signal_name);
+  printf_filtered (_("Catchpoint %d (signal %s), "), b->number, signal_name);
 
   return PRINT_SRC_AND_LOC;
 }
@@ -237,7 +243,7 @@ static void
 signal_catchpoint_print_one (struct breakpoint *b,
                             struct bp_location **last_loc)
 {
-  struct signal_catchpoint *c = (void *) b;
+  struct signal_catchpoint *c = (struct signal_catchpoint *) b;
   struct value_print_options opts;
   struct ui_out *uiout = current_uiout;
 
@@ -247,24 +253,20 @@ signal_catchpoint_print_one (struct breakpoint *b,
      not line up too nicely with the headers, but the effect
      is relatively readable).  */
   if (opts.addressprint)
-    ui_out_field_skip (uiout, "addr");
+    uiout->field_skip ("addr");
   annotate_field (5);
 
   if (c->signals_to_be_caught
       && VEC_length (gdb_signal_type, c->signals_to_be_caught) > 1)
-    ui_out_text (uiout, "signals \"");
+    uiout->text ("signals \"");
   else
-    ui_out_text (uiout, "signal \"");
+    uiout->text ("signal \"");
 
   if (c->signals_to_be_caught)
     {
       int i;
       gdb_signal_type iter;
-      struct obstack text;
-      struct cleanup *cleanup;
-
-      obstack_init (&text);
-      cleanup = make_cleanup_obstack_free (&text);
+      std::string text;
 
       for (i = 0;
            VEC_iterate (gdb_signal_type, c->signals_to_be_caught, i, iter);
@@ -273,20 +275,18 @@ signal_catchpoint_print_one (struct breakpoint *b,
          const char *name = signal_to_name_or_int (iter);
 
          if (i > 0)
-           obstack_grow (&text, " ", 1);
-         obstack_grow (&text, name, strlen (name));
+           text += " ";
+         text += name;
         }
-      obstack_grow (&text, "", 1);
-      ui_out_field_string (uiout, "what", obstack_base (&text));
-      do_cleanups (cleanup);
+      uiout->field_string ("what", text.c_str ());
     }
   else
-    ui_out_field_string (uiout, "what",
+    uiout->field_string ("what",
                         c->catch_all ? "<any signal>" : "<standard signals>");
-  ui_out_text (uiout, "\" ");
+  uiout->text ("\" ");
 
-  if (ui_out_is_mi_like_p (uiout))
-    ui_out_field_string (uiout, "catch-type", "signal");
+  if (uiout->is_mi_like_p ())
+    uiout->field_string ("catch-type", "signal");
 }
 
 /* Implement the "print_mention" breakpoint_ops method for signal
@@ -295,7 +295,7 @@ signal_catchpoint_print_one (struct breakpoint *b,
 static void
 signal_catchpoint_print_mention (struct breakpoint *b)
 {
-  struct signal_catchpoint *c = (void *) b;
+  struct signal_catchpoint *c = (struct signal_catchpoint *) b;
 
   if (c->signals_to_be_caught)
     {
@@ -329,7 +329,7 @@ signal_catchpoint_print_mention (struct breakpoint *b)
 static void
 signal_catchpoint_print_recreate (struct breakpoint *b, struct ui_file *fp)
 {
-  struct signal_catchpoint *c = (void *) b;
+  struct signal_catchpoint *c = (struct signal_catchpoint *) b;
 
   fprintf_unfiltered (fp, "catch signal");
 
@@ -345,15 +345,16 @@ signal_catchpoint_print_recreate (struct breakpoint *b, struct ui_file *fp)
     }
   else if (c->catch_all)
     fprintf_unfiltered (fp, " all");
+  fputc_unfiltered ('\n', fp);
 }
 
 /* Implement the "explains_signal" breakpoint_ops method for signal
    catchpoints.  */
 
-static enum bpstat_signal_value
-signal_catchpoint_explains_signal (struct breakpoint *b)
+static int
+signal_catchpoint_explains_signal (struct breakpoint *b, enum gdb_signal sig)
 {
-  return BPSTAT_SIGNAL_PASS;
+  return 1;
 }
 
 /* Create a new signal catchpoint.  TEMPFLAG is true if this should be
@@ -370,7 +371,7 @@ create_signal_catchpoint (int tempflag, VEC (gdb_signal_type) *filter,
   struct signal_catchpoint *c;
   struct gdbarch *gdbarch = get_current_arch ();
 
-  c = XNEW (struct signal_catchpoint);
+  c = new signal_catchpoint ();
   init_catchpoint (&c->base, gdbarch, tempflag, NULL, &signal_catchpoint_ops);
   c->signals_to_be_caught = filter;
   c->catch_all = catch_all;
This page took 0.033211 seconds and 4 git commands to generate.