+2016-06-06 Simon Marchi <simon.marchi@ericsson.com>
+
+ * NEWS: Mention the new fields in =record-started.
+ * common/btrace-common.h (btrace_format_short_string): New function
+ declaration.
+ * common/btrace-common.c (btrace_format_short_string): New
+ function.
+ * mi/mi-interp.c (mi_record_changed): Output method and format
+ fields in the =record-started record.
+ * record-btrace.c (record_btrace_open): Adapt record_changed
+ notification.
+ * record-full.c (record_full_open): Likewise.
+ * record.c (cmd_record_stop): Likewise.
+
2016-06-02 Jon Turney <jon.turney@dronecode.org.uk>
* windows-nat.c (handle_output_debug_string): Return type of
including JIT compiling fast tracepoint's conditional expression
bytecode into native code.
+* MI async record =record-started now includes the method and format used for
+ recording. For example:
+
+ =record-started,thread-group="i1",method="btrace",format="bts"
+
*** Changes in GDB 7.11
* GDB now supports debugging kernel-based threads on FreeBSD.
/* See btrace-common.h. */
+const char *
+btrace_format_short_string (enum btrace_format format)
+{
+ switch (format)
+ {
+ case BTRACE_FORMAT_NONE:
+ return "unknown";
+
+ case BTRACE_FORMAT_BTS:
+ return "bts";
+
+ case BTRACE_FORMAT_PT:
+ return "pt";
+ }
+
+ internal_error (__FILE__, __LINE__, _("Unknown branch trace format"));
+}
+
+/* See btrace-common.h. */
+
void
btrace_data_init (struct btrace_data *data)
{
/* Return a string representation of FORMAT. */
extern const char *btrace_format_string (enum btrace_format format);
+/* Return an abbreviation string representation of FORMAT. */
+extern const char *btrace_format_short_string (enum btrace_format format);
+
/* Initialize DATA. */
extern void btrace_data_init (struct btrace_data *data);
+2016-06-06 Simon Marchi <simon.marchi@ericsson.com>
+
+ * gdb.texinfo (GDB/MI Async Records): Document method and
+ format fields in =record-started.
+ * observer.texi (record_changed): Add method and format
+ parameters.
+
2016-05-27 Eli Zaretskii <eliz@gnu.org>
* gdb.texinfo (General Query Packets): Move the description of the
Note that if a breakpoint is emitted in the result record of a
command, then it will not also be emitted in an async record.
-@item =record-started,thread-group="@var{id}"
+@item =record-started,thread-group="@var{id}",method="@var{method}"[,format="@var{format}"]
@itemx =record-stopped,thread-group="@var{id}"
Execution log recording was either started or stopped on an
inferior. The @var{id} is the @value{GDBN} identifier of the thread
group corresponding to the affected inferior.
+The @var{method} field indicates the method used to record execution. If the
+method in use supports multiple recording formats, @var{format} will be present
+and contain the currently used format. @xref{Process Record and Replay}
+for existing method and format values.
+
@item =cmd-param-changed,param=@var{param},value=@var{value}
Reports that a parameter of the command @code{set @var{param}} is
changed to @var{value}. In the multi-word @code{set} command,
inferior, and before any information on the inferior has been printed.
@end deftypefun
-@deftypefun void record_changed (struct inferior *@var{inferior}, int @var{started})
+@deftypefun void record_changed (struct inferior *@var{inferior}, int @var{started}, const char *@var{method}, const char *@var{format})
The status of process record for inferior @var{inferior} in
@value{GDBN} has changed. The process record is started if
@var{started} is true, and the process record is stopped if
@var{started} is false.
+
+When @var{started} is true, @var{method} indicates the short name of the method
+used for recording. If the method supports multiple formats, @var{format}
+indicates which one is being used, otherwise it is NULL. When @var{started} is
+false, they are both NULL.
@end deftypefun
@deftypefun void solib_loaded (struct so_list *@var{solib})
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);
+static void mi_record_changed (struct inferior*, int, const char *,
+ const char *);
static void mi_inferior_added (struct inferior *inf);
static void mi_inferior_appeared (struct inferior *inf);
static void mi_inferior_exit (struct inferior *inf);
/* Emit notification on changing the state of record. */
static void
-mi_record_changed (struct inferior *inferior, int started)
+mi_record_changed (struct inferior *inferior, int started, const char *method,
+ const char *format)
{
struct mi_interp *mi = (struct mi_interp *) top_level_interpreter_data ();
struct cleanup *old_chain;
old_chain = make_cleanup_restore_target_terminal ();
target_terminal_ours_for_output ();
- fprintf_unfiltered (mi->event_channel, "record-%s,thread-group=\"i%d\"",
- started ? "started" : "stopped", inferior->num);
+ if (started)
+ {
+ if (format != NULL)
+ fprintf_unfiltered (
+ mi->event_channel,
+ "record-started,thread-group=\"i%d\",method=\"%s\",format=\"%s\"",
+ inferior->num, method, format);
+ else
+ fprintf_unfiltered (
+ mi->event_channel,
+ "record-started,thread-group=\"i%d\",method=\"%s\"",
+ inferior->num, method);
+ }
+ else
+ fprintf_unfiltered (mi->event_channel,
+ "record-stopped,thread-group=\"i%d\"", inferior->num);
+
gdb_flush (mi->event_channel);
{
struct cleanup *disable_chain;
struct thread_info *tp;
+ const char *format;
DEBUG ("open");
NULL);
record_btrace_generating_corefile = 0;
- observer_notify_record_changed (current_inferior (), 1);
+ format = btrace_format_short_string (record_btrace_conf.format);
+ observer_notify_record_changed (current_inferior (), 1, "btrace", format);
discard_cleanups (disable_chain);
}
record_full_init_record_breakpoints ();
- observer_notify_record_changed (current_inferior (), 1);
+ observer_notify_record_changed (current_inferior (), 1, "full", NULL);
}
/* "to_close" target method. Close the process record target. */
printf_unfiltered (_("Process record is stopped and all execution "
"logs are deleted.\n"));
- observer_notify_record_changed (current_inferior (), 0);
+ observer_notify_record_changed (current_inferior (), 0, NULL, NULL);
}
/* The "set record" command. */
+2016-06-06 Simon Marchi <simon.marchi@ericsson.com>
+
+ * gdb.mi/mi-record-changed.exp: Adjust =record-started output
+ matching.
+
2016-06-02 Tom Tromey <tom@tromey.com>
PR python/18984:
}
mi_run_to_main
-mi_gdb_test "record" ".*=record-started,thread-group=\"i${decimal}\".*\\^done" \
+mi_gdb_test "record" ".*=record-started,thread-group=\"i${decimal}\",method=\"full\".*\\^done" \
"record"
mi_gdb_test "record stop" \
".*=record-stopped,thread-group=\"i${decimal}\".*\\^done" \
"record end"
mi_gdb_test "target record" \
- ".*=record-started,thread-group=\"i${decimal}\".*\\^done" \
+ ".*=record-started,thread-group=\"i${decimal}\",method=\"full\".*\\^done" \
"target record"
return 0