aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon Marchi <simon.marchi@efficios.com>2023-04-21 09:45:30 -0400
committerSimon Marchi <simon.marchi@efficios.com>2023-05-30 15:07:26 -0400
commit0bc845fc987e060ddbc35e682dd5774f4ac78b22 (patch)
treee6937a830e2571bccf90227e58dcbc7343a34fce
parent7603ea6afa41382cefeab1e1c85f74a588fcc6ab (diff)
downloadbinutils-0bc845fc987e060ddbc35e682dd5774f4ac78b22.zip
binutils-0bc845fc987e060ddbc35e682dd5774f4ac78b22.tar.gz
binutils-0bc845fc987e060ddbc35e682dd5774f4ac78b22.tar.bz2
gdb: add interp::on_traceframe_changed method
Same idea as previous patches, but for traceframe_changed. Change-Id: Ia473f07d70d57b30aca0094d0e0585d7e0d95637
-rw-r--r--gdb/interps.c8
-rw-r--r--gdb/interps.h10
-rw-r--r--gdb/mi/mi-interp.c35
-rw-r--r--gdb/mi/mi-interp.h1
-rw-r--r--gdb/observable.c1
-rw-r--r--gdb/observable.h6
-rw-r--r--gdb/tracepoint.c3
7 files changed, 32 insertions, 32 deletions
diff --git a/gdb/interps.c b/gdb/interps.c
index 2c7fbc8..01fa44c 100644
--- a/gdb/interps.c
+++ b/gdb/interps.c
@@ -527,6 +527,14 @@ interps_notify_solib_unloaded (so_list *so)
interps_notify (&interp::on_solib_unloaded, so);
}
+/* See interps.h. */
+
+void
+interps_notify_traceframe_changed (int tfnum, int tpnum)
+{
+ interps_notify (&interp::on_traceframe_changed, tfnum, tpnum);
+}
+
/* This just adds the "interpreter-exec" command. */
void _initialize_interpreter ();
void
diff --git a/gdb/interps.h b/gdb/interps.h
index a88c405..3b88146 100644
--- a/gdb/interps.h
+++ b/gdb/interps.h
@@ -153,6 +153,9 @@ public:
the inferior to proceed. */
virtual void on_about_to_proceed () {}
+ /* Notify the interpreter that the selected traceframe changed. */
+ virtual void on_traceframe_changed (int tfnum, int tpnum) {}
+
private:
/* The memory for this is static, it comes from literal strings (e.g. "cli"). */
const char *m_name;
@@ -304,6 +307,13 @@ extern void interps_notify_solib_loaded (so_list *so);
/* Notify all interpreters that solib SO has been unloaded. */
extern void interps_notify_solib_unloaded (so_list *so);
+/* Notify all interpreters that the selected traceframe changed.
+
+ The trace frame is changed to TFNUM (e.g., by using the 'tfind' command).
+ If TFNUM is negative, it means gdb resumed live debugging. The number of
+ the tracepoint associated with this traceframe is TPNUM. */
+extern void interps_notify_traceframe_changed (int tfnum, int tpnum);
+
/* well-known interpreters */
#define INTERP_CONSOLE "console"
#define INTERP_MI2 "mi2"
diff --git a/gdb/mi/mi-interp.c b/gdb/mi/mi-interp.c
index dd17fd5..f78e6f9 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_traceframe_changed (int tfnum, int tpnum);
static void mi_tsv_created (const struct trace_state_variable *tsv);
static void mi_tsv_deleted (const struct trace_state_variable *tsv);
static void mi_tsv_modified (const struct trace_state_variable *tsv);
@@ -495,33 +494,23 @@ struct mi_suppress_notification mi_suppress_notification =
0,
};
-/* Emit notification on changing a traceframe. */
-
-static void
-mi_traceframe_changed (int tfnum, int tpnum)
+void
+mi_interp::on_traceframe_changed (int tfnum, int tpnum)
{
if (mi_suppress_notification.traceframe)
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 ();
+ target_terminal::scoped_restore_terminal_state term_state;
+ target_terminal::ours_for_output ();
- if (tfnum >= 0)
- gdb_printf (mi->event_channel, "traceframe-changed,"
- "num=\"%d\",tracepoint=\"%d\"",
- tfnum, tpnum);
- else
- gdb_printf (mi->event_channel, "traceframe-changed,end");
+ if (tfnum >= 0)
+ gdb_printf (this->event_channel, "traceframe-changed,"
+ "num=\"%d\",tracepoint=\"%d\"",
+ tfnum, tpnum);
+ else
+ gdb_printf (this->event_channel, "traceframe-changed,end");
- gdb_flush (mi->event_channel);
- }
+ gdb_flush (this->event_channel);
}
/* Emit notification on creating a trace state variable. */
@@ -1055,8 +1044,6 @@ _initialize_mi_interp ()
interp_factory_register (INTERP_MI4, mi_interp_factory);
interp_factory_register (INTERP_MI, mi_interp_factory);
- gdb::observers::traceframe_changed.attach (mi_traceframe_changed,
- "mi-interp");
gdb::observers::tsv_created.attach (mi_tsv_created, "mi-interp");
gdb::observers::tsv_deleted.attach (mi_tsv_deleted, "mi-interp");
gdb::observers::tsv_modified.attach (mi_tsv_modified, "mi-interp");
diff --git a/gdb/mi/mi-interp.h b/gdb/mi/mi-interp.h
index 33177fc..c5fded1 100644
--- a/gdb/mi/mi-interp.h
+++ b/gdb/mi/mi-interp.h
@@ -62,6 +62,7 @@ public:
void on_solib_loaded (so_list *so) override;
void on_solib_unloaded (so_list *so) override;
void on_about_to_proceed () override;
+ void on_traceframe_changed (int tfnum, int tpnum) override;
/* MI's output channels */
mi_console_file *out;
diff --git a/gdb/observable.c b/gdb/observable.c
index 5b78d48..4e9967f 100644
--- a/gdb/observable.c
+++ b/gdb/observable.c
@@ -51,7 +51,6 @@ DEFINE_OBSERVABLE (about_to_proceed);
DEFINE_OBSERVABLE (breakpoint_created);
DEFINE_OBSERVABLE (breakpoint_deleted);
DEFINE_OBSERVABLE (breakpoint_modified);
-DEFINE_OBSERVABLE (traceframe_changed);
DEFINE_OBSERVABLE (architecture_changed);
DEFINE_OBSERVABLE (thread_ptid_changed);
DEFINE_OBSERVABLE (inferior_added);
diff --git a/gdb/observable.h b/gdb/observable.h
index be7c6ca..ee70f2b 100644
--- a/gdb/observable.h
+++ b/gdb/observable.h
@@ -140,12 +140,6 @@ extern observable<struct breakpoint */* b */> breakpoint_deleted;
is the modified breakpoint. */
extern observable<struct breakpoint */* b */> breakpoint_modified;
-/* The trace frame is changed to TFNUM (e.g., by using the 'tfind'
- command). If TFNUM is negative, it means gdb resumes live
- debugging. The number of the tracepoint associated with this
- traceframe is TPNUM. */
-extern observable<int /* tfnum */, int /* tpnum */> traceframe_changed;
-
/* The current architecture has changed. The argument NEWARCH is a
pointer to the new architecture. */
extern observable<struct gdbarch */* newarch */> architecture_changed;
diff --git a/gdb/tracepoint.c b/gdb/tracepoint.c
index 7ec63d3..dffc80f 100644
--- a/gdb/tracepoint.c
+++ b/gdb/tracepoint.c
@@ -59,6 +59,7 @@
#include "cli/cli-style.h"
#include "expop.h"
#include "gdbsupport/buildargv.h"
+#include "interps.h"
#include <unistd.h>
@@ -2139,7 +2140,7 @@ tfind_1 (enum trace_find_type type, int num,
set_tracepoint_num (tp ? tp->number : target_tracept);
if (target_frameno != get_traceframe_number ())
- gdb::observers::traceframe_changed.notify (target_frameno, tracepoint_number);
+ interps_notify_traceframe_changed (target_frameno, tracepoint_number);
set_current_traceframe (target_frameno);