gdb: add interp::on_traceframe_changed method
Same idea as previous patches, but for traceframe_changed. Change-Id: Ia473f07d70d57b30aca0094d0e0585d7e0d95637
This commit is contained in:
parent
7603ea6afa
commit
0bc845fc98
7 changed files with 32 additions and 32 deletions
|
@ -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
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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 ());
|
||||
target_terminal::scoped_restore_terminal_state term_state;
|
||||
target_terminal::ours_for_output ();
|
||||
|
||||
if (mi == NULL)
|
||||
continue;
|
||||
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");
|
||||
|
||||
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");
|
||||
|
||||
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");
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue