Same idea as previous patches, but for traceframe_changed.
Change-Id: Ia473f07d70d57b30aca0094d0e0585d7e0d95637
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
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;
/* 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"
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);
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. */
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");
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;
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);
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;
#include "cli/cli-style.h"
#include "expop.h"
#include "gdbsupport/buildargv.h"
+#include "interps.h"
#include <unistd.h>
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);