public inbox for gdb-patches@sourceware.org
 help / color / mirror / Atom feed
From: Tom Tromey <tom@tromey.com>
To: gdb-patches@sourceware.org
Cc: Tom Tromey <tom@tromey.com>
Subject: [PATCH 01/36] Move "catch load" to a new file
Date: Tue, 18 Jan 2022 12:39:32 -0700	[thread overview]
Message-ID: <20220118194007.2853108-2-tom@tromey.com> (raw)
In-Reply-To: <20220118194007.2853108-1-tom@tromey.com>

The "catch load" code is reasonably self-contained, and so this patch
moves it out of breakpoint.c and into a new file, break-catch-load.c.
One function from breakpoint.c, print_solib_event, now has to be
exposed, but this seems pretty reasonable.  This patch moves it to the
new file, to keep it near the other solib code.  After this change,
breakpoint.c drops to third place in size, now after remote.c.
---
 gdb/Makefile.in        |   1 +
 gdb/break-catch-load.c | 354 +++++++++++++++++++++++++++++++++++++++++
 gdb/breakpoint.c       | 308 -----------------------------------
 gdb/breakpoint.h       |   6 +
 4 files changed, 361 insertions(+), 308 deletions(-)
 create mode 100644 gdb/break-catch-load.c

diff --git a/gdb/Makefile.in b/gdb/Makefile.in
index 3efd2227698..874883c8009 100644
--- a/gdb/Makefile.in
+++ b/gdb/Makefile.in
@@ -1001,6 +1001,7 @@ COMMON_SFILES = \
 	blockframe.c \
 	break-catch-exec.c \
 	break-catch-fork.c \
+	break-catch-load.c \
 	break-catch-sig.c \
 	break-catch-syscall.c \
 	break-catch-throw.c \
diff --git a/gdb/break-catch-load.c b/gdb/break-catch-load.c
new file mode 100644
index 00000000000..352b56404b3
--- /dev/null
+++ b/gdb/break-catch-load.c
@@ -0,0 +1,354 @@
+/* Everything about load/unload catchpoints, for GDB.
+
+   Copyright (C) 1986-2022 Free Software Foundation, Inc.
+
+   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 <http://www.gnu.org/licenses/>.  */
+
+#include "defs.h"
+
+#include "annotate.h"
+#include "arch-utils.h"
+#include "breakpoint.h"
+#include "cli/cli-decode.h"
+#include "mi/mi-common.h"
+#include "progspace.h"
+#include "solist.h"
+#include "target.h"
+#include "valprint.h"
+
+/* See breakpoint.h.  */
+
+void
+print_solib_event (int is_catchpoint)
+{
+  bool any_deleted = !current_program_space->deleted_solibs.empty ();
+  bool any_added = !current_program_space->added_solibs.empty ();
+
+  if (!is_catchpoint)
+    {
+      if (any_added || any_deleted)
+	current_uiout->text (_("Stopped due to shared library event:\n"));
+      else
+	current_uiout->text (_("Stopped due to shared library event (no "
+			       "libraries added or removed)\n"));
+    }
+
+  if (current_uiout->is_mi_like_p ())
+    current_uiout->field_string ("reason",
+				 async_reason_lookup (EXEC_ASYNC_SOLIB_EVENT));
+
+  if (any_deleted)
+    {
+      current_uiout->text (_("  Inferior unloaded "));
+      ui_out_emit_list list_emitter (current_uiout, "removed");
+      for (int ix = 0; ix < current_program_space->deleted_solibs.size (); ix++)
+	{
+	  const std::string &name = current_program_space->deleted_solibs[ix];
+
+	  if (ix > 0)
+	    current_uiout->text ("    ");
+	  current_uiout->field_string ("library", name);
+	  current_uiout->text ("\n");
+	}
+    }
+
+  if (any_added)
+    {
+      current_uiout->text (_("  Inferior loaded "));
+      ui_out_emit_list list_emitter (current_uiout, "added");
+      bool first = true;
+      for (so_list *iter : current_program_space->added_solibs)
+	{
+	  if (!first)
+	    current_uiout->text ("    ");
+	  first = false;
+	  current_uiout->field_string ("library", iter->so_name);
+	  current_uiout->text ("\n");
+	}
+    }
+}
+
+/* An instance of this type is used to represent an solib catchpoint.
+   A breakpoint is really of this type iff its ops pointer points to
+   CATCH_SOLIB_BREAKPOINT_OPS.  */
+
+struct solib_catchpoint : public breakpoint
+{
+  /* True for "catch load", false for "catch unload".  */
+  bool is_load;
+
+  /* Regular expression to match, if any.  COMPILED is only valid when
+     REGEX is non-NULL.  */
+  gdb::unique_xmalloc_ptr<char> regex;
+  std::unique_ptr<compiled_regex> compiled;
+};
+
+static int
+insert_catch_solib (struct bp_location *ignore)
+{
+  return 0;
+}
+
+static int
+remove_catch_solib (struct bp_location *ignore, enum remove_bp_reason reason)
+{
+  return 0;
+}
+
+static int
+breakpoint_hit_catch_solib (const struct bp_location *bl,
+			    const address_space *aspace,
+			    CORE_ADDR bp_addr,
+			    const target_waitstatus &ws)
+{
+  struct solib_catchpoint *self = (struct solib_catchpoint *) bl->owner;
+
+  if (ws.kind () == TARGET_WAITKIND_LOADED)
+    return 1;
+
+  for (breakpoint *other : all_breakpoints ())
+    {
+      if (other == bl->owner)
+	continue;
+
+      if (other->type != bp_shlib_event)
+	continue;
+
+      if (self->pspace != NULL && other->pspace != self->pspace)
+	continue;
+
+      for (bp_location *other_bl : other->locations ())
+	{
+	  if (other->ops->breakpoint_hit (other_bl, aspace, bp_addr, ws))
+	    return 1;
+	}
+    }
+
+  return 0;
+}
+
+static void
+check_status_catch_solib (struct bpstat *bs)
+{
+  struct solib_catchpoint *self
+    = (struct solib_catchpoint *) bs->breakpoint_at;
+
+  if (self->is_load)
+    {
+      for (so_list *iter : current_program_space->added_solibs)
+	{
+	  if (!self->regex
+	      || self->compiled->exec (iter->so_name, 0, NULL, 0) == 0)
+	    return;
+	}
+    }
+  else
+    {
+      for (const std::string &iter : current_program_space->deleted_solibs)
+	{
+	  if (!self->regex
+	      || self->compiled->exec (iter.c_str (), 0, NULL, 0) == 0)
+	    return;
+	}
+    }
+
+  bs->stop = 0;
+  bs->print_it = print_it_noop;
+}
+
+static enum print_stop_action
+print_it_catch_solib (bpstat *bs)
+{
+  struct breakpoint *b = bs->breakpoint_at;
+  struct ui_out *uiout = current_uiout;
+
+  annotate_catchpoint (b->number);
+  maybe_print_thread_hit_breakpoint (uiout);
+  if (b->disposition == disp_del)
+    uiout->text ("Temporary catchpoint ");
+  else
+    uiout->text ("Catchpoint ");
+  uiout->field_signed ("bkptno", b->number);
+  uiout->text ("\n");
+  if (uiout->is_mi_like_p ())
+    uiout->field_string ("disp", bpdisp_text (b->disposition));
+  print_solib_event (1);
+  return PRINT_SRC_AND_LOC;
+}
+
+static void
+print_one_catch_solib (struct breakpoint *b, struct bp_location **locs)
+{
+  struct solib_catchpoint *self = (struct solib_catchpoint *) b;
+  struct value_print_options opts;
+  struct ui_out *uiout = current_uiout;
+
+  get_user_print_options (&opts);
+  /* Field 4, the address, is omitted (which makes the columns not
+     line up too nicely with the headers, but the effect is relatively
+     readable).  */
+  if (opts.addressprint)
+    {
+      annotate_field (4);
+      uiout->field_skip ("addr");
+    }
+
+  std::string msg;
+  annotate_field (5);
+  if (self->is_load)
+    {
+      if (self->regex)
+	msg = string_printf (_("load of library matching %s"),
+			     self->regex.get ());
+      else
+	msg = _("load of library");
+    }
+  else
+    {
+      if (self->regex)
+	msg = string_printf (_("unload of library matching %s"),
+			     self->regex.get ());
+      else
+	msg = _("unload of library");
+    }
+  uiout->field_string ("what", msg);
+
+  if (uiout->is_mi_like_p ())
+    uiout->field_string ("catch-type", self->is_load ? "load" : "unload");
+}
+
+static void
+print_mention_catch_solib (struct breakpoint *b)
+{
+  struct solib_catchpoint *self = (struct solib_catchpoint *) b;
+
+  printf_filtered (_("Catchpoint %d (%s)"), b->number,
+		   self->is_load ? "load" : "unload");
+}
+
+static void
+print_recreate_catch_solib (struct breakpoint *b, struct ui_file *fp)
+{
+  struct solib_catchpoint *self = (struct solib_catchpoint *) b;
+
+  fprintf_unfiltered (fp, "%s %s",
+		      b->disposition == disp_del ? "tcatch" : "catch",
+		      self->is_load ? "load" : "unload");
+  if (self->regex)
+    fprintf_unfiltered (fp, " %s", self->regex.get ());
+  fprintf_unfiltered (fp, "\n");
+}
+
+static struct breakpoint_ops catch_solib_breakpoint_ops;
+
+/* See breakpoint.h.  */
+
+void
+add_solib_catchpoint (const char *arg, bool is_load, bool is_temp, bool enabled)
+{
+  struct gdbarch *gdbarch = get_current_arch ();
+
+  if (!arg)
+    arg = "";
+  arg = skip_spaces (arg);
+
+  std::unique_ptr<solib_catchpoint> c (new solib_catchpoint ());
+
+  if (*arg != '\0')
+    {
+      c->compiled.reset (new compiled_regex (arg, REG_NOSUB,
+					     _("Invalid regexp")));
+      c->regex = make_unique_xstrdup (arg);
+    }
+
+  c->is_load = is_load;
+  init_catchpoint (c.get (), gdbarch, is_temp, NULL,
+		   &catch_solib_breakpoint_ops);
+
+  c->enable_state = enabled ? bp_enabled : bp_disabled;
+
+  install_breakpoint (0, std::move (c), 1);
+}
+
+/* A helper function that does all the work for "catch load" and
+   "catch unload".  */
+
+static void
+catch_load_or_unload (const char *arg, int from_tty, int is_load,
+		      struct cmd_list_element *command)
+{
+  const int enabled = 1;
+  bool temp = command->context () == CATCH_TEMPORARY;
+
+  add_solib_catchpoint (arg, is_load, temp, enabled);
+}
+
+static void
+catch_load_command_1 (const char *arg, int from_tty,
+		      struct cmd_list_element *command)
+{
+  catch_load_or_unload (arg, from_tty, 1, command);
+}
+
+static void
+catch_unload_command_1 (const char *arg, int from_tty,
+			struct cmd_list_element *command)
+{
+  catch_load_or_unload (arg, from_tty, 0, command);
+}
+
+static void
+initialize_ops ()
+{
+  struct breakpoint_ops *ops;
+
+  initialize_breakpoint_ops ();
+
+  /* Solib-related catchpoints.  */
+  ops = &catch_solib_breakpoint_ops;
+  *ops = base_breakpoint_ops;
+  ops->insert_location = insert_catch_solib;
+  ops->remove_location = remove_catch_solib;
+  ops->breakpoint_hit = breakpoint_hit_catch_solib;
+  ops->check_status = check_status_catch_solib;
+  ops->print_it = print_it_catch_solib;
+  ops->print_one = print_one_catch_solib;
+  ops->print_mention = print_mention_catch_solib;
+  ops->print_recreate = print_recreate_catch_solib;
+
+}
+
+void _initialize_break_catch_load ();
+void
+_initialize_break_catch_load ()
+{
+  initialize_ops ();
+
+  add_catch_command ("load", _("Catch loads of shared libraries.\n\
+Usage: catch load [REGEX]\n\
+If REGEX is given, only stop for libraries matching the regular expression."),
+		     catch_load_command_1,
+		     NULL,
+		     CATCH_PERMANENT,
+		     CATCH_TEMPORARY);
+  add_catch_command ("unload", _("Catch unloads of shared libraries.\n\
+Usage: catch unload [REGEX]\n\
+If REGEX is given, only stop for libraries matching the regular expression."),
+		     catch_unload_command_1,
+		     NULL,
+		     CATCH_PERMANENT,
+		     CATCH_TEMPORARY);
+}
diff --git a/gdb/breakpoint.c b/gdb/breakpoint.c
index 1812bfe42f9..964e557f984 100644
--- a/gdb/breakpoint.c
+++ b/gdb/breakpoint.c
@@ -4625,58 +4625,6 @@ print_bp_stop_message (bpstat *bs)
     }
 }
 
-/* A helper function that prints a shared library stopped event.  */
-
-static void
-print_solib_event (int is_catchpoint)
-{
-  bool any_deleted = !current_program_space->deleted_solibs.empty ();
-  bool any_added = !current_program_space->added_solibs.empty ();
-
-  if (!is_catchpoint)
-    {
-      if (any_added || any_deleted)
-	current_uiout->text (_("Stopped due to shared library event:\n"));
-      else
-	current_uiout->text (_("Stopped due to shared library event (no "
-			       "libraries added or removed)\n"));
-    }
-
-  if (current_uiout->is_mi_like_p ())
-    current_uiout->field_string ("reason",
-				 async_reason_lookup (EXEC_ASYNC_SOLIB_EVENT));
-
-  if (any_deleted)
-    {
-      current_uiout->text (_("  Inferior unloaded "));
-      ui_out_emit_list list_emitter (current_uiout, "removed");
-      for (int ix = 0; ix < current_program_space->deleted_solibs.size (); ix++)
-	{
-	  const std::string &name = current_program_space->deleted_solibs[ix];
-
-	  if (ix > 0)
-	    current_uiout->text ("    ");
-	  current_uiout->field_string ("library", name);
-	  current_uiout->text ("\n");
-	}
-    }
-
-  if (any_added)
-    {
-      current_uiout->text (_("  Inferior loaded "));
-      ui_out_emit_list list_emitter (current_uiout, "added");
-      bool first = true;
-      for (so_list *iter : current_program_space->added_solibs)
-	{
-	  if (!first)
-	    current_uiout->text ("    ");
-	  first = false;
-	  current_uiout->field_string ("library", iter->so_name);
-	  current_uiout->text ("\n");
-	}
-    }
-}
-
 /* Print a message indicating what happened.  This is called from
    normal_stop().  The input to this routine is the head of the bpstat
    list - a list of the eventpoints that caused this stop.  KIND is
@@ -7722,235 +7670,6 @@ disable_breakpoints_in_freed_objfile (struct objfile *objfile)
     }
 }
 
-/* An instance of this type is used to represent an solib catchpoint.
-   A breakpoint is really of this type iff its ops pointer points to
-   CATCH_SOLIB_BREAKPOINT_OPS.  */
-
-struct solib_catchpoint : public breakpoint
-{
-  /* True for "catch load", false for "catch unload".  */
-  bool is_load;
-
-  /* Regular expression to match, if any.  COMPILED is only valid when
-     REGEX is non-NULL.  */
-  gdb::unique_xmalloc_ptr<char> regex;
-  std::unique_ptr<compiled_regex> compiled;
-};
-
-static int
-insert_catch_solib (struct bp_location *ignore)
-{
-  return 0;
-}
-
-static int
-remove_catch_solib (struct bp_location *ignore, enum remove_bp_reason reason)
-{
-  return 0;
-}
-
-static int
-breakpoint_hit_catch_solib (const struct bp_location *bl,
-			    const address_space *aspace,
-			    CORE_ADDR bp_addr,
-			    const target_waitstatus &ws)
-{
-  struct solib_catchpoint *self = (struct solib_catchpoint *) bl->owner;
-
-  if (ws.kind () == TARGET_WAITKIND_LOADED)
-    return 1;
-
-  for (breakpoint *other : all_breakpoints ())
-    {
-      if (other == bl->owner)
-	continue;
-
-      if (other->type != bp_shlib_event)
-	continue;
-
-      if (self->pspace != NULL && other->pspace != self->pspace)
-	continue;
-
-      for (bp_location *other_bl : other->locations ())
-	{
-	  if (other->ops->breakpoint_hit (other_bl, aspace, bp_addr, ws))
-	    return 1;
-	}
-    }
-
-  return 0;
-}
-
-static void
-check_status_catch_solib (struct bpstat *bs)
-{
-  struct solib_catchpoint *self
-    = (struct solib_catchpoint *) bs->breakpoint_at;
-
-  if (self->is_load)
-    {
-      for (so_list *iter : current_program_space->added_solibs)
-	{
-	  if (!self->regex
-	      || self->compiled->exec (iter->so_name, 0, NULL, 0) == 0)
-	    return;
-	}
-    }
-  else
-    {
-      for (const std::string &iter : current_program_space->deleted_solibs)
-	{
-	  if (!self->regex
-	      || self->compiled->exec (iter.c_str (), 0, NULL, 0) == 0)
-	    return;
-	}
-    }
-
-  bs->stop = 0;
-  bs->print_it = print_it_noop;
-}
-
-static enum print_stop_action
-print_it_catch_solib (bpstat *bs)
-{
-  struct breakpoint *b = bs->breakpoint_at;
-  struct ui_out *uiout = current_uiout;
-
-  annotate_catchpoint (b->number);
-  maybe_print_thread_hit_breakpoint (uiout);
-  if (b->disposition == disp_del)
-    uiout->text ("Temporary catchpoint ");
-  else
-    uiout->text ("Catchpoint ");
-  uiout->field_signed ("bkptno", b->number);
-  uiout->text ("\n");
-  if (uiout->is_mi_like_p ())
-    uiout->field_string ("disp", bpdisp_text (b->disposition));
-  print_solib_event (1);
-  return PRINT_SRC_AND_LOC;
-}
-
-static void
-print_one_catch_solib (struct breakpoint *b, struct bp_location **locs)
-{
-  struct solib_catchpoint *self = (struct solib_catchpoint *) b;
-  struct value_print_options opts;
-  struct ui_out *uiout = current_uiout;
-
-  get_user_print_options (&opts);
-  /* Field 4, the address, is omitted (which makes the columns not
-     line up too nicely with the headers, but the effect is relatively
-     readable).  */
-  if (opts.addressprint)
-    {
-      annotate_field (4);
-      uiout->field_skip ("addr");
-    }
-
-  std::string msg;
-  annotate_field (5);
-  if (self->is_load)
-    {
-      if (self->regex)
-	msg = string_printf (_("load of library matching %s"),
-			     self->regex.get ());
-      else
-	msg = _("load of library");
-    }
-  else
-    {
-      if (self->regex)
-	msg = string_printf (_("unload of library matching %s"),
-			     self->regex.get ());
-      else
-	msg = _("unload of library");
-    }
-  uiout->field_string ("what", msg);
-
-  if (uiout->is_mi_like_p ())
-    uiout->field_string ("catch-type", self->is_load ? "load" : "unload");
-}
-
-static void
-print_mention_catch_solib (struct breakpoint *b)
-{
-  struct solib_catchpoint *self = (struct solib_catchpoint *) b;
-
-  printf_filtered (_("Catchpoint %d (%s)"), b->number,
-		   self->is_load ? "load" : "unload");
-}
-
-static void
-print_recreate_catch_solib (struct breakpoint *b, struct ui_file *fp)
-{
-  struct solib_catchpoint *self = (struct solib_catchpoint *) b;
-
-  fprintf_unfiltered (fp, "%s %s",
-		      b->disposition == disp_del ? "tcatch" : "catch",
-		      self->is_load ? "load" : "unload");
-  if (self->regex)
-    fprintf_unfiltered (fp, " %s", self->regex.get ());
-  fprintf_unfiltered (fp, "\n");
-}
-
-static struct breakpoint_ops catch_solib_breakpoint_ops;
-
-/* See breakpoint.h.  */
-
-void
-add_solib_catchpoint (const char *arg, bool is_load, bool is_temp, bool enabled)
-{
-  struct gdbarch *gdbarch = get_current_arch ();
-
-  if (!arg)
-    arg = "";
-  arg = skip_spaces (arg);
-
-  std::unique_ptr<solib_catchpoint> c (new solib_catchpoint ());
-
-  if (*arg != '\0')
-    {
-      c->compiled.reset (new compiled_regex (arg, REG_NOSUB,
-					     _("Invalid regexp")));
-      c->regex = make_unique_xstrdup (arg);
-    }
-
-  c->is_load = is_load;
-  init_catchpoint (c.get (), gdbarch, is_temp, NULL,
-		   &catch_solib_breakpoint_ops);
-
-  c->enable_state = enabled ? bp_enabled : bp_disabled;
-
-  install_breakpoint (0, std::move (c), 1);
-}
-
-/* A helper function that does all the work for "catch load" and
-   "catch unload".  */
-
-static void
-catch_load_or_unload (const char *arg, int from_tty, int is_load,
-		      struct cmd_list_element *command)
-{
-  const int enabled = 1;
-  bool temp = command->context () == CATCH_TEMPORARY;
-
-  add_solib_catchpoint (arg, is_load, temp, enabled);
-}
-
-static void
-catch_load_command_1 (const char *arg, int from_tty,
-		      struct cmd_list_element *command)
-{
-  catch_load_or_unload (arg, from_tty, 1, command);
-}
-
-static void
-catch_unload_command_1 (const char *arg, int from_tty,
-			struct cmd_list_element *command)
-{
-  catch_load_or_unload (arg, from_tty, 0, command);
-}
-
 /* See breakpoint.h.  */
 
 void
@@ -14867,18 +14586,6 @@ initialize_breakpoint_ops (void)
   ops->create_breakpoints_sal = strace_marker_create_breakpoints_sal;
   ops->decode_location = strace_marker_decode_location;
 
-  /* Solib-related catchpoints.  */
-  ops = &catch_solib_breakpoint_ops;
-  *ops = base_breakpoint_ops;
-  ops->insert_location = insert_catch_solib;
-  ops->remove_location = remove_catch_solib;
-  ops->breakpoint_hit = breakpoint_hit_catch_solib;
-  ops->check_status = check_status_catch_solib;
-  ops->print_it = print_it_catch_solib;
-  ops->print_one = print_one_catch_solib;
-  ops->print_mention = print_mention_catch_solib;
-  ops->print_recreate = print_recreate_catch_solib;
-
   ops = &dprintf_breakpoint_ops;
   *ops = bkpt_base_breakpoint_ops;
   ops->re_set = dprintf_re_set;
@@ -15171,21 +14878,6 @@ Set temporary catchpoints to catch events."),
 			&tcatch_cmdlist,
 			0/*allow-unknown*/, &cmdlist);
 
-  add_catch_command ("load", _("Catch loads of shared libraries.\n\
-Usage: catch load [REGEX]\n\
-If REGEX is given, only stop for libraries matching the regular expression."),
-		     catch_load_command_1,
-		     NULL,
-		     CATCH_PERMANENT,
-		     CATCH_TEMPORARY);
-  add_catch_command ("unload", _("Catch unloads of shared libraries.\n\
-Usage: catch unload [REGEX]\n\
-If REGEX is given, only stop for libraries matching the regular expression."),
-		     catch_unload_command_1,
-		     NULL,
-		     CATCH_PERMANENT,
-		     CATCH_TEMPORARY);
-
   const auto opts = make_watch_options_def_group (nullptr);
 
   static const std::string watch_help = gdb::option::build_help (_("\
diff --git a/gdb/breakpoint.h b/gdb/breakpoint.h
index ba28219c236..0db3d986bbe 100644
--- a/gdb/breakpoint.h
+++ b/gdb/breakpoint.h
@@ -1784,4 +1784,10 @@ extern void catch_exception_event (enum exception_event_kind ex_event,
 				   const char *regex, bool tempflag,
 				   int from_tty);
 
+/* A helper function that prints a shared library stopped event.
+   IS_CATCHPOINT is true if the event is due to a "catch load"
+   catchpoint, false otherwise.  */
+
+extern void print_solib_event (int is_catchpoint);
+
 #endif /* !defined (BREAKPOINT_H) */
-- 
2.31.1


  reply	other threads:[~2022-01-18 19:40 UTC|newest]

Thread overview: 49+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-01-18 19:39 [PATCH 00/36] C++-ify breakpoints Tom Tromey
2022-01-18 19:39 ` Tom Tromey [this message]
2022-04-23  2:34   ` [PATCH 01/36] Move "catch load" to a new file Simon Marchi
2022-04-24 19:35     ` Tom Tromey
2022-01-18 19:39 ` [PATCH 02/36] Boolify print_solib_event Tom Tromey
2022-01-18 19:39 ` [PATCH 03/36] Add an assertion to clone_momentary_breakpoint Tom Tromey
2022-04-25 13:25   ` Thiago Jung Bauermann
2022-04-25 19:03     ` Tom Tromey
2022-01-18 19:39 ` [PATCH 04/36] Delete some unnecessary wrapper functions Tom Tromey
2022-04-25 14:08   ` Thiago Jung Bauermann
2022-04-25 19:06     ` Tom Tromey
2022-04-25 20:06       ` Thiago Jung Bauermann
2022-01-18 19:39 ` [PATCH 05/36] Return bool from breakpoint_ops::print_one Tom Tromey
2022-01-18 19:39 ` [PATCH 06/36] Add a vtable-based breakpoint ops Tom Tromey
2022-01-18 19:39 ` [PATCH 07/36] Convert break-catch-sig to use vtable ops Tom Tromey
2022-01-18 19:39 ` [PATCH 08/36] Convert break-catch-syscall to " Tom Tromey
2022-01-18 19:39 ` [PATCH 09/36] Convert break-catch-exec " Tom Tromey
2022-01-18 19:39 ` [PATCH 10/36] Convert break-catch-fork " Tom Tromey
2022-01-18 19:39 ` [PATCH 11/36] Convert break-catch-load " Tom Tromey
2022-01-18 19:39 ` [PATCH 12/36] Convert watchpoints " Tom Tromey
2022-01-18 19:39 ` [PATCH 13/36] Convert tracepoints " Tom Tromey
2022-01-18 19:39 ` [PATCH 14/36] Add some new subclasses of breakpoint Tom Tromey
2022-01-18 19:39 ` [PATCH 15/36] Convert base breakpoints to vtable ops Tom Tromey
2022-05-02 10:27   ` Tom de Vries
2022-05-02 16:40     ` Tom Tromey
2022-01-18 19:39 ` [PATCH 16/36] Convert break-catch-throw " Tom Tromey
2022-01-18 19:39 ` [PATCH 17/36] Convert internal breakpoints " Tom Tromey
2022-01-18 19:39 ` [PATCH 18/36] Convert momentary " Tom Tromey
2022-01-18 19:39 ` [PATCH 19/36] Change inheritance of dprintf Tom Tromey
2022-01-18 19:39 ` [PATCH 20/36] Convert ordinary breakpoints to vtable ops Tom Tromey
2022-01-18 19:39 ` [PATCH 21/36] Convert Ada catchpoints " Tom Tromey
2022-01-18 19:39 ` [PATCH 22/36] Convert dprintf " Tom Tromey
2022-01-18 19:39 ` [PATCH 23/36] Convert ranged breakpoints " Tom Tromey
2022-01-18 19:39 ` [PATCH 24/36] Add bp_static_marker_tracepoint Tom Tromey
2022-01-18 19:39 ` [PATCH 25/36] Convert static marker tracepoints to vtable ops Tom Tromey
2022-01-18 19:39 ` [PATCH 26/36] Remove bkpt_base_breakpoint_ops Tom Tromey
2022-01-18 19:39 ` [PATCH 27/36] Merge probe and ordinary breakpoints Tom Tromey
2022-01-18 19:39 ` [PATCH 28/36] Merge probe and ordinary tracepoints Tom Tromey
2022-01-18 19:40 ` [PATCH 29/36] Remove breakpoint_ops from init_ada_exception_breakpoint Tom Tromey
2022-01-18 19:40 ` [PATCH 30/36] Remove breakpoint_ops from init_catchpoint Tom Tromey
2022-01-18 19:40 ` [PATCH 31/36] Remove most fields from breakpoint_ops Tom Tromey
2022-01-18 19:40 ` [PATCH 32/36] Remove vtable_breakpoint_ops Tom Tromey
2022-01-18 19:40 ` [PATCH 33/36] Remove breakpoint ops initialization Tom Tromey
2022-01-18 19:40 ` [PATCH 34/36] Constify breakpoint_ops Tom Tromey
2022-01-18 19:40 ` [PATCH 35/36] Remove allocate_bp_location Tom Tromey
2022-01-18 19:40 ` [PATCH 36/36] Remove create_breakpoints_sal_default Tom Tromey
2022-04-22 20:21 ` [PATCH 00/36] C++-ify breakpoints Tom Tromey
2022-04-23  2:59   ` Simon Marchi
2022-04-29 22:15     ` Tom Tromey

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20220118194007.2853108-2-tom@tromey.com \
    --to=tom@tromey.com \
    --cc=gdb-patches@sourceware.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).