public inbox for gdb-patches@sourceware.org
 help / color / mirror / Atom feed
From: Simon Marchi <simon.marchi@efficios.com>
To: gdb-patches@sourceware.org
Cc: Simon Marchi <simon.marchi@efficios.com>
Subject: [PATCH 07/30] gdb: add interp::on_no_history method
Date: Tue,  2 May 2023 16:49:47 -0400	[thread overview]
Message-ID: <20230502205011.132151-8-simon.marchi@efficios.com> (raw)
In-Reply-To: <20230502205011.132151-1-simon.marchi@efficios.com>

Same as previous patches, but for no_history.

Change-Id: I06930fe7cb4082138c6c5496c5118fe4951c10da
---
 gdb/cli/cli-interp.c | 16 +++-------------
 gdb/cli/cli-interp.h |  1 +
 gdb/infrun.c         |  2 +-
 gdb/interps.c        |  8 ++++++++
 gdb/interps.h        |  8 ++++++++
 gdb/mi/mi-interp.c   | 41 ++++-------------------------------------
 gdb/mi/mi-interp.h   |  1 +
 gdb/observable.c     |  1 -
 gdb/observable.h     |  3 ---
 9 files changed, 26 insertions(+), 55 deletions(-)

diff --git a/gdb/cli/cli-interp.c b/gdb/cli/cli-interp.c
index 6cb315cb57d2..98bc2033f2c6 100644
--- a/gdb/cli/cli-interp.c
+++ b/gdb/cli/cli-interp.c
@@ -146,19 +146,10 @@ cli_interp_base::on_exited (int status)
   print_exited_reason (this->interp_ui_out (), status);
 }
 
-/* Observer for the no_history notification.  */
-
-static void
-cli_base_on_no_history ()
+void
+cli_interp_base::on_no_history ()
 {
-  SWITCH_THRU_ALL_UIS ()
-    {
-      cli_interp_base *cli = as_cli_interp_base (top_level_interpreter ());
-      if (cli == nullptr)
-	continue;
-
-      print_no_history_reason (cli->interp_ui_out ());
-    }
+  print_no_history_reason (this->interp_ui_out ());
 }
 
 /* Observer for the sync_execution_done notification.  */
@@ -370,7 +361,6 @@ _initialize_cli_interp ()
   interp_factory_register (INTERP_CONSOLE, cli_interp_factory);
 
   /* Note these all work for both the CLI and TUI interpreters.  */
-  gdb::observers::no_history.attach (cli_base_on_no_history, "cli-interp-base");
   gdb::observers::sync_execution_done.attach (cli_base_on_sync_execution_done,
 					      "cli-interp-base");
   gdb::observers::command_error.attach (cli_base_on_command_error,
diff --git a/gdb/cli/cli-interp.h b/gdb/cli/cli-interp.h
index 2e50860efa9e..7fc22a042d73 100644
--- a/gdb/cli/cli-interp.h
+++ b/gdb/cli/cli-interp.h
@@ -37,6 +37,7 @@ class cli_interp_base : public interp
   void on_signal_exited (gdb_signal sig) override;
   void on_normal_stop (bpstat *bs, int print_frame) override;
   void on_exited (int status) override;
+  void on_no_history () override;
 
 private:
   struct saved_output_files
diff --git a/gdb/infrun.c b/gdb/infrun.c
index 7320adb5b2ff..f86ec7a2ed81 100644
--- a/gdb/infrun.c
+++ b/gdb/infrun.c
@@ -6038,7 +6038,7 @@ handle_inferior_event (struct execution_control_state *ecs)
       if (handle_stop_requested (ecs))
 	return;
 
-      gdb::observers::no_history.notify ();
+      interps_notify_no_history ();
       stop_waiting (ecs);
       return;
     }
diff --git a/gdb/interps.c b/gdb/interps.c
index a7fede1d3312..885bfc36ec70 100644
--- a/gdb/interps.c
+++ b/gdb/interps.c
@@ -416,6 +416,14 @@ interps_notify_signal_exited (gdb_signal sig)
 
 /* See interps.h.  */
 
+void
+interps_notify_no_history ()
+{
+  interps_notify (&interp::on_no_history);
+}
+
+/* See interps.h.  */
+
 void
 interps_notify_normal_stop (bpstat *bs, int print_frame)
 {
diff --git a/gdb/interps.h b/gdb/interps.h
index 6c2656dd1b07..915a5f74eb73 100644
--- a/gdb/interps.h
+++ b/gdb/interps.h
@@ -98,6 +98,10 @@ class interp : public intrusive_list_node<interp>
      status STATUS.  */
   virtual void on_exited (int status) {}
 
+  /* Notify the interpreter that the current inferior has stopped reverse
+     execution because there is no more history.  */
+  virtual void on_no_history () {}
+
 private:
   /* The memory for this is static, it comes from literal strings (e.g. "cli").  */
   const char *m_name;
@@ -197,6 +201,10 @@ extern void interps_notify_signal_exited (gdb_signal sig);
 /* Notify all interpreters that the current inferior has stopped normally.  */
 extern void interps_notify_normal_stop (bpstat *bs, int print_frame);
 
+/* Notify all interpreters that the current inferior has stopped reverse
+   execution because there is no more history.  */
+extern void interps_notify_no_history ();
+
 /* Notify all interpreters that the current inferior has exited normally with
    status STATUS.  */
 extern void interps_notify_exited (int status);
diff --git a/gdb/mi/mi-interp.c b/gdb/mi/mi-interp.c
index 56c59f3ac462..a147c46ecf3b 100644
--- a/gdb/mi/mi-interp.c
+++ b/gdb/mi/mi-interp.c
@@ -60,8 +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_on_no_history (void);
-
 static void mi_new_thread (struct thread_info *t);
 static void mi_thread_exit (struct thread_info *t, int silent);
 static void mi_record_changed (struct inferior*, int, const char *,
@@ -496,26 +494,6 @@ mi_inferior_removed (struct inferior *inf)
     }
 }
 
-/* Return the MI interpreter, if it is active -- either because it's
-   the top-level interpreter or the interpreter executing the current
-   command.  Returns NULL if the MI interpreter is not being used.  */
-
-static struct mi_interp *
-find_mi_interp (void)
-{
-  struct mi_interp *mi;
-
-  mi = as_mi_interp (top_level_interpreter ());
-  if (mi != NULL)
-    return mi;
-
-  mi = as_mi_interp (command_interp ());
-  if (mi != NULL)
-    return mi;
-
-  return NULL;
-}
-
 /* Observers for several run control events that print why the
    inferior has stopped to both the MI event channel and to the MI
    console.  If the MI interpreter is not active, print nothing.  */
@@ -541,21 +519,11 @@ mi_interp::on_exited (int status)
   print_exited_reason (this->cli_uiout, status);
 }
 
-/* Observer for the no_history notification.  */
-
-static void
-mi_on_no_history (void)
+void
+mi_interp::on_no_history ()
 {
-  SWITCH_THRU_ALL_UIS ()
-    {
-      struct mi_interp *mi = find_mi_interp ();
-
-      if (mi == NULL)
-	continue;
-
-      print_no_history_reason (mi->mi_uiout);
-      print_no_history_reason (mi->cli_uiout);
-    }
+  print_no_history_reason (this->mi_uiout);
+  print_no_history_reason (this->cli_uiout);
 }
 
 void
@@ -1252,7 +1220,6 @@ _initialize_mi_interp ()
   interp_factory_register (INTERP_MI4, mi_interp_factory);
   interp_factory_register (INTERP_MI, mi_interp_factory);
 
-  gdb::observers::no_history.attach (mi_on_no_history, "mi-interp");
   gdb::observers::new_thread.attach (mi_new_thread, "mi-interp");
   gdb::observers::thread_exit.attach (mi_thread_exit, "mi-interp");
   gdb::observers::inferior_added.attach (mi_inferior_added, "mi-interp");
diff --git a/gdb/mi/mi-interp.h b/gdb/mi/mi-interp.h
index 1c828b5c508f..aeebc3207526 100644
--- a/gdb/mi/mi-interp.h
+++ b/gdb/mi/mi-interp.h
@@ -46,6 +46,7 @@ class mi_interp final : public interp
   void on_signal_exited (gdb_signal sig) override;
   void on_normal_stop (struct bpstat *bs, int print_frame) override;
   void on_exited (int status) override;
+  void on_no_history () override;
 
   /* MI's output channels */
   mi_console_file *out;
diff --git a/gdb/observable.c b/gdb/observable.c
index 843890023834..502e2d988cd1 100644
--- a/gdb/observable.c
+++ b/gdb/observable.c
@@ -34,7 +34,6 @@ bool observer_debug = false;
 
 DEFINE_OBSERVABLE (normal_stop);
 DEFINE_OBSERVABLE (signal_received);
-DEFINE_OBSERVABLE (no_history);
 DEFINE_OBSERVABLE (sync_execution_done);
 DEFINE_OBSERVABLE (command_error);
 DEFINE_OBSERVABLE (target_changed);
diff --git a/gdb/observable.h b/gdb/observable.h
index 25af2da6e935..b06d13be0362 100644
--- a/gdb/observable.h
+++ b/gdb/observable.h
@@ -57,9 +57,6 @@ extern observable<struct bpstat */* bs */, int /* print_frame */> normal_stop;
 /* The inferior was stopped by a signal.  */
 extern observable<enum gdb_signal /* siggnal */> signal_received;
 
-/* Reverse execution: target ran out of history info.  */
-extern observable<> no_history;
-
 /* A synchronous command finished.  */
 extern observable<> sync_execution_done;
 
-- 
2.40.1


  parent reply	other threads:[~2023-05-02 20:50 UTC|newest]

Thread overview: 39+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-05-02 20:49 [PATCH 00/30] Switch interpreters to use virtual methods Simon Marchi
2023-05-02 20:49 ` [PATCH 01/30] gdb/mi: fix ^running record with multiple MI interpreters Simon Marchi
2023-05-03 14:42   ` Alexandra Petlanova Hajkova
2023-05-03 15:02     ` Simon Marchi
2023-05-29 14:53   ` Simon Marchi
2023-05-02 20:49 ` [PATCH 02/30] gdb/mi: make current_token a field of mi_interp Simon Marchi
2023-05-04 12:31   ` Alexandra Petlanova Hajkova
2023-05-02 20:49 ` [PATCH 03/30] gdb: add interp::on_signal_received method Simon Marchi
2023-05-04 14:38   ` Alexandra Petlanova Hajkova
2023-05-02 20:49 ` [PATCH 04/30] gdb: add interp::on_normal_stop method Simon Marchi
2023-05-02 20:49 ` [PATCH 05/30] gdb: add interp::on_signal_exited method Simon Marchi
2023-05-02 20:49 ` [PATCH 06/30] gdb: add interp::on_exited method Simon Marchi
2023-05-02 20:49 ` Simon Marchi [this message]
2023-05-02 20:49 ` [PATCH 08/30] gdb: add interp::on_sync_execution_done method Simon Marchi
2023-05-02 20:49 ` [PATCH 09/30] gdb: add interp::on_command_error method Simon Marchi
2023-05-02 20:49 ` [PATCH 10/30] gdb: add interp::on_user_selected_context_changed method Simon Marchi
2023-05-02 20:49 ` [PATCH 11/30] gdb: add interp::on_new_thread method Simon Marchi
2023-05-02 20:49 ` [PATCH 12/30] gdb: add interp::on_thread_exited method Simon Marchi
2023-05-02 20:49 ` [PATCH 13/30] gdb: add interp::on_inferior_added method Simon Marchi
2023-05-02 20:49 ` [PATCH 14/30] gdb: add interp::on_inferior_appeared method Simon Marchi
2023-05-02 20:49 ` [PATCH 15/30] gdb: add interp::on_inferior_disappeared method Simon Marchi
2023-05-02 20:49 ` [PATCH 16/30] gdb: add interp::on_inferior_removed method Simon Marchi
2023-05-02 20:49 ` [PATCH 17/30] gdb: add interp::on_record_changed method Simon Marchi
2023-05-02 20:49 ` [PATCH 18/30] gdb: add interp::on_target_resumed method Simon Marchi
2023-05-02 20:49 ` [PATCH 19/30] gdb: add interp::on_solib_loaded method Simon Marchi
2023-05-02 20:50 ` [PATCH 20/30] gdb: add interp::on_solib_unloaded method Simon Marchi
2023-05-02 20:50 ` [PATCH 21/30] gdb: add interp::on_about_to_proceed method Simon Marchi
2023-05-02 20:50 ` [PATCH 22/30] gdb: add interp::on_traceframe_changed method Simon Marchi
2023-05-02 20:50 ` [PATCH 23/30] gdb: add interp::on_tsv_created method Simon Marchi
2023-05-02 20:50 ` [PATCH 24/30] gdb: add interp::on_tsv_deleted method Simon Marchi
2023-05-02 20:50 ` [PATCH 25/30] gdb: add interp::on_tsv_modified method Simon Marchi
2023-05-02 20:50 ` [PATCH 26/30] gdb: add interp::on_breakpoint_created method Simon Marchi
2023-05-02 20:50 ` [PATCH 27/30] gdb: add interp::on_breakpoint_deleted method Simon Marchi
2023-05-02 20:50 ` [PATCH 28/30] gdb: add interp::on_breakpoint_modified method Simon Marchi
2023-05-02 20:50 ` [PATCH 29/30] gdb: add interp::on_param_changed method Simon Marchi
2023-05-02 20:50 ` [PATCH 30/30] gdb: add interp::on_memory_changed method Simon Marchi
2023-05-02 20:50 ` [PATCH 00/30] Make interpreters use virtual methods (instead of observers) Simon Marchi
2023-05-23 12:43 ` [PATCH 00/30] Switch interpreters to use virtual methods Simon Marchi
2023-05-30 19:09   ` Simon Marchi

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=20230502205011.132151-8-simon.marchi@efficios.com \
    --to=simon.marchi@efficios.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).