public inbox for gdb-cvs@sourceware.org
help / color / mirror / Atom feed
* [binutils-gdb] gdb: add interp::on_breakpoint_modified method
@ 2023-05-30 19:10 Simon Marchi
  0 siblings, 0 replies; only message in thread
From: Simon Marchi @ 2023-05-30 19:10 UTC (permalink / raw)
  To: gdb-cvs

https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=19081eb5f18e9e9c6855935c1149afa9a5edfbe1

commit 19081eb5f18e9e9c6855935c1149afa9a5edfbe1
Author: Simon Marchi <simon.marchi@efficios.com>
Date:   Fri Apr 21 09:45:30 2023 -0400

    gdb: add interp::on_breakpoint_modified method
    
    Same idea as previous patches, but for breakpoint_modified.
    
    Change-Id: I4f0a9edea912de431e32451d74224b2022a7c328

Diff:
---
 gdb/breakpoint.c      | 47 ++++++++++++++++++++++++++++-------------------
 gdb/breakpoint.h      |  5 +++++
 gdb/interps.c         |  8 ++++++++
 gdb/interps.h         |  6 ++++++
 gdb/mi/mi-cmd-break.c |  2 +-
 gdb/mi/mi-interp.c    | 28 +++++++---------------------
 gdb/mi/mi-interp.h    |  1 +
 gdb/tracepoint.c      |  4 ++--
 8 files changed, 58 insertions(+), 43 deletions(-)

diff --git a/gdb/breakpoint.c b/gdb/breakpoint.c
index 76847f360ad..0a520cfc169 100644
--- a/gdb/breakpoint.c
+++ b/gdb/breakpoint.c
@@ -995,6 +995,15 @@ set_breakpoint_location_condition (const char *cond_string, bp_location *loc,
     error (_("Garbage '%s' follows condition"), cond_string);
 }
 
+/* See breakpoint.h.  */
+
+void
+notify_breakpoint_modified (breakpoint *b)
+{
+  interps_notify_breakpoint_modified (b);
+  gdb::observers::breakpoint_modified.notify (b);
+}
+
 void
 set_breakpoint_condition (struct breakpoint *b, const char *exp,
 			  int from_tty, bool force)
@@ -1087,7 +1096,7 @@ set_breakpoint_condition (struct breakpoint *b, const char *exp,
     }
   mark_breakpoint_modified (b);
 
-  gdb::observers::breakpoint_modified.notify (b);
+  notify_breakpoint_modified (b);
 }
 
 /* See breakpoint.h.  */
@@ -1431,7 +1440,7 @@ breakpoint_set_commands (struct breakpoint *b,
   validate_commands_for_breakpoint (b, commands.get ());
 
   b->commands = std::move (commands);
-  gdb::observers::breakpoint_modified.notify (b);
+  notify_breakpoint_modified (b);
 }
 
 /* Set the internal `silent' flag on the breakpoint.  Note that this
@@ -1445,7 +1454,7 @@ breakpoint_set_silent (struct breakpoint *b, int silent)
 
   b->silent = silent;
   if (old_silent != silent)
-    gdb::observers::breakpoint_modified.notify (b);
+    notify_breakpoint_modified (b);
 }
 
 /* See breakpoint.h.  */
@@ -1462,7 +1471,7 @@ breakpoint_set_thread (struct breakpoint *b, int thread)
 
   b->thread = thread;
   if (old_thread != thread)
-    gdb::observers::breakpoint_modified.notify (b);
+    notify_breakpoint_modified (b);
 }
 
 /* See breakpoint.h.  */
@@ -1479,7 +1488,7 @@ breakpoint_set_task (struct breakpoint *b, int task)
 
   b->task = task;
   if (old_task != task)
-    gdb::observers::breakpoint_modified.notify (b);
+    notify_breakpoint_modified (b);
 }
 
 static void
@@ -1548,7 +1557,7 @@ commands_command_1 (const char *arg, int from_tty,
 	 {
 	   validate_commands_for_breakpoint (b, cmd.get ());
 	   b->commands = cmd;
-	   gdb::observers::breakpoint_modified.notify (b);
+	   notify_breakpoint_modified (b);
 	 }
      });
 }
@@ -2886,7 +2895,7 @@ insert_bp_location (struct bp_location *bl,
 	    {
 	      /* See also: disable_breakpoints_in_shlibs.  */
 	      bl->shlib_disabled = 1;
-	      gdb::observers::breakpoint_modified.notify (bl->owner);
+	      notify_breakpoint_modified (bl->owner);
 	      if (!*disabled_breaks)
 		{
 		  gdb_printf (tmp_error_stream, 
@@ -5575,7 +5584,7 @@ bpstat_check_breakpoint_conditions (bpstat *bs, thread_info *thread)
       bs->stop = false;
       /* Increase the hit count even though we don't stop.  */
       ++(b->hit_count);
-      gdb::observers::breakpoint_modified.notify (b);
+      notify_breakpoint_modified (b);
       return;
     }
 
@@ -5738,7 +5747,7 @@ bpstat_stop_status (const address_space *aspace,
 		    b->enable_state = bp_disabled;
 		  removed_any = 1;
 		}
-	      gdb::observers::breakpoint_modified.notify (b);
+	      notify_breakpoint_modified (b);
 	      if (b->silent)
 		bs->print = false;
 	      bs->commands = b->commands;
@@ -7868,7 +7877,7 @@ disable_breakpoints_in_unloaded_shlib (struct so_list *solib)
 	  loc->inserted = 0;
 
 	  /* This may cause duplicate notifications for the same breakpoint.  */
-	  gdb::observers::breakpoint_modified.notify (b);
+	  notify_breakpoint_modified (b);
 
 	  if (!disabled_shlib_breaks)
 	    {
@@ -7948,7 +7957,7 @@ disable_breakpoints_in_freed_objfile (struct objfile *objfile)
 	}
 
       if (bp_modified)
-	gdb::observers::breakpoint_modified.notify (&b);
+	notify_breakpoint_modified (&b);
     }
 }
 
@@ -11057,7 +11066,7 @@ download_tracepoint_locations (void)
       tracepoint &t = gdb::checked_static_cast<tracepoint &> (b);
       t.number_on_target = b.number;
       if (bp_location_downloaded)
-	gdb::observers::breakpoint_modified.notify (&b);
+	notify_breakpoint_modified (&b);
     }
 }
 
@@ -12826,7 +12835,7 @@ update_breakpoint_locations (code_breakpoint *b,
   }
 
   if (!locations_are_equal (existing_locations, b->locations ()))
-    gdb::observers::breakpoint_modified.notify (b);
+    notify_breakpoint_modified (b);
 }
 
 /* Find the SaL locations corresponding to the given LOCSPEC.
@@ -13075,7 +13084,7 @@ set_ignore_count (int bptnum, int count, int from_tty)
 			    "crossings of breakpoint %d."),
 			  count, bptnum);
 	  }
-	gdb::observers::breakpoint_modified.notify (&b);
+	notify_breakpoint_modified (&b);
 	return;
       }
 
@@ -13329,7 +13338,7 @@ enable_disable_bp_num_loc (int bp_num, int loc_num, bool enable)
     }
   update_global_location_list (UGLL_DONT_INSERT);
 
-  gdb::observers::breakpoint_modified.notify (loc->owner);
+  notify_breakpoint_modified (loc->owner);
 }
 
 /* Calculates LOC_NUM for LOC by traversing the bp_location chain of LOC's
@@ -13386,7 +13395,7 @@ enable_disable_bp_location (bp_location *loc, bool enable)
     target_disable_tracepoint (loc);
 
   update_global_location_list (UGLL_DONT_INSERT);
-  gdb::observers::breakpoint_modified.notify (loc->owner);
+  notify_breakpoint_modified (loc->owner);
 }
 
 /* Enable or disable a range of breakpoint locations.  BP_NUM is the
@@ -13431,7 +13440,7 @@ disable_breakpoint (struct breakpoint *bpt)
 
   update_global_location_list (UGLL_DONT_INSERT);
 
-  gdb::observers::breakpoint_modified.notify (bpt);
+  notify_breakpoint_modified (bpt);
 }
 
 /* Enable or disable the breakpoint(s) or breakpoint location(s)
@@ -13556,7 +13565,7 @@ enable_breakpoint_disp (struct breakpoint *bpt, enum bpdisp disposition,
   bpt->enable_count = count;
   update_global_location_list (UGLL_MAY_INSERT);
 
-  gdb::observers::breakpoint_modified.notify (bpt);
+  notify_breakpoint_modified (bpt);
 }
 
 
@@ -14027,7 +14036,7 @@ static void
 trace_pass_set_count (struct tracepoint *tp, int count, int from_tty)
 {
   tp->pass_count = count;
-  gdb::observers::breakpoint_modified.notify (tp);
+  notify_breakpoint_modified (tp);
   if (from_tty)
     gdb_printf (_("Setting tracepoint %d's passcount to %d\n"),
 		tp->number, count);
diff --git a/gdb/breakpoint.h b/gdb/breakpoint.h
index 709d27fa4db..da150585f73 100644
--- a/gdb/breakpoint.h
+++ b/gdb/breakpoint.h
@@ -2007,4 +2007,9 @@ extern void describe_other_breakpoints (struct gdbarch *,
 
 extern void enable_disable_bp_location (bp_location *loc, bool enable);
 
+
+/* Notify interpreters and observers that breakpoint B was modified.  */
+
+extern void notify_breakpoint_modified (breakpoint *b);
+
 #endif /* !defined (BREAKPOINT_H) */
diff --git a/gdb/interps.c b/gdb/interps.c
index dc36af64f4c..d572f92f4aa 100644
--- a/gdb/interps.c
+++ b/gdb/interps.c
@@ -575,6 +575,14 @@ interps_notify_breakpoint_deleted (breakpoint *b)
   interps_notify (&interp::on_breakpoint_deleted, b);
 }
 
+/* See interps.h.  */
+
+void
+interps_notify_breakpoint_modified (breakpoint *b)
+{
+  interps_notify (&interp::on_breakpoint_modified, b);
+}
+
 /* This just adds the "interpreter-exec" command.  */
 void _initialize_interpreter ();
 void
diff --git a/gdb/interps.h b/gdb/interps.h
index 0e17b14735c..6fda2ba372f 100644
--- a/gdb/interps.h
+++ b/gdb/interps.h
@@ -172,6 +172,9 @@ public:
   /* Notify the interpreter that breakpoint B was deleted.  */
   virtual void on_breakpoint_deleted (breakpoint *b) {}
 
+  /* Notify the interpreter that breakpoint B was modified.  */
+  virtual void on_breakpoint_modified (breakpoint *b) {}
+
 private:
   /* The memory for this is static, it comes from literal strings (e.g. "cli").  */
   const char *m_name;
@@ -347,6 +350,9 @@ extern void interps_notify_breakpoint_created (breakpoint *b);
 /* Notify all interpreters that breakpoint B was deleted.  */
 extern void interps_notify_breakpoint_deleted (breakpoint *b);
 
+/* Notify all interpreters that breakpoint B was modified.  */
+extern void interps_notify_breakpoint_modified (breakpoint *b);
+
 /* well-known interpreters */
 #define INTERP_CONSOLE		"console"
 #define INTERP_MI2             "mi2"
diff --git a/gdb/mi/mi-cmd-break.c b/gdb/mi/mi-cmd-break.c
index 48b58587488..082c4da58a3 100644
--- a/gdb/mi/mi-cmd-break.c
+++ b/gdb/mi/mi-cmd-break.c
@@ -470,7 +470,7 @@ mi_cmd_break_passcount (const char *command, const char *const *argv,
   if (t)
     {
       t->pass_count = p;
-      gdb::observers::breakpoint_modified.notify (t);
+      notify_breakpoint_modified (t);
     }
   else
     {
diff --git a/gdb/mi/mi-interp.c b/gdb/mi/mi-interp.c
index 02d2bc893b7..73a193d5ce4 100644
--- a/gdb/mi/mi-interp.c
+++ b/gdb/mi/mi-interp.c
@@ -60,7 +60,6 @@ static int mi_interp_query_hook (const char *ctlstr, va_list ap)
 static void mi_insert_notify_hooks (void);
 static void mi_remove_notify_hooks (void);
 
-static void mi_breakpoint_modified (struct breakpoint *b);
 static void mi_command_param_changed (const char *param, const char *value);
 static void mi_memory_changed (struct inferior *inf, CORE_ADDR memaddr,
 			       ssize_t len, const bfd_byte *myaddr);
@@ -621,10 +620,8 @@ mi_interp::on_breakpoint_deleted (breakpoint *b)
   gdb_flush (this->event_channel);
 }
 
-/* Emit notification about modified breakpoint.  */
-
-static void
-mi_breakpoint_modified (struct breakpoint *b)
+void
+mi_interp::on_breakpoint_modified (breakpoint *b)
 {
   if (mi_suppress_notification.breakpoint)
     return;
@@ -632,21 +629,12 @@ mi_breakpoint_modified (struct breakpoint *b)
   if (b->number <= 0)
     return;
 
-  SWITCH_THRU_ALL_UIS ()
-    {
-      struct mi_interp *mi = as_mi_interp (top_level_interpreter ());
-
-      if (mi == NULL)
-	continue;
-
-      target_terminal::scoped_restore_terminal_state term_state;
-      target_terminal::ours_for_output ();
-      gdb_printf (mi->event_channel,
-		  "breakpoint-modified");
-      mi_print_breakpoint_for_event (mi, b);
+  target_terminal::scoped_restore_terminal_state term_state;
+  target_terminal::ours_for_output ();
+  gdb_printf (this->event_channel, "breakpoint-modified");
+  mi_print_breakpoint_for_event (this, b);
 
-      gdb_flush (mi->event_channel);
-    }
+  gdb_flush (this->event_channel);
 }
 
 static void
@@ -985,8 +973,6 @@ _initialize_mi_interp ()
   interp_factory_register (INTERP_MI4, mi_interp_factory);
   interp_factory_register (INTERP_MI, mi_interp_factory);
 
-  gdb::observers::breakpoint_modified.attach (mi_breakpoint_modified,
-					      "mi-interp");
   gdb::observers::command_param_changed.attach (mi_command_param_changed,
 						"mi-interp");
   gdb::observers::memory_changed.attach (mi_memory_changed, "mi-interp");
diff --git a/gdb/mi/mi-interp.h b/gdb/mi/mi-interp.h
index 52c88a1c2b7..8ec8bc00a83 100644
--- a/gdb/mi/mi-interp.h
+++ b/gdb/mi/mi-interp.h
@@ -68,6 +68,7 @@ public:
   void on_tsv_modified (const trace_state_variable *tsv) override;
   void on_breakpoint_created (breakpoint *b) override;
   void on_breakpoint_deleted (breakpoint *b) override;
+  void on_breakpoint_modified (breakpoint *b) override;
 
   /* MI's output channels */
   mi_console_file *out;
diff --git a/gdb/tracepoint.c b/gdb/tracepoint.c
index 2368730f1a0..f297cea5b43 100644
--- a/gdb/tracepoint.c
+++ b/gdb/tracepoint.c
@@ -1640,7 +1640,7 @@ start_tracing (const char *notes)
 	  loc.probe.prob->set_semaphore (loc.probe.objfile, loc.gdbarch);
 
       if (bp_location_downloaded)
-	gdb::observers::breakpoint_modified.notify (&b);
+	notify_breakpoint_modified (&b);
     }
 
   /* Send down all the trace state variables too.  */
@@ -3134,7 +3134,7 @@ merge_uploaded_tracepoints (struct uploaded_tp **uploaded_tps)
   /* Notify 'breakpoint-modified' observer that at least one of B's
      locations was changed.  */
   for (breakpoint *b : modified_tp)
-    gdb::observers::breakpoint_modified.notify (b);
+    notify_breakpoint_modified (b);
 
   free_uploaded_tps (uploaded_tps);
 }

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2023-05-30 19:10 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-05-30 19:10 [binutils-gdb] gdb: add interp::on_breakpoint_modified method Simon Marchi

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).