summaryrefslogtreecommitdiff
path: root/gdb/target.c
diff options
context:
space:
mode:
authormmetzger <mmetzger>2013-03-11 08:48:37 +0000
committermmetzger <mmetzger>2013-03-11 08:48:37 +0000
commitd63ee17bdefcc06c7f15ac49b98fc339337cc5df (patch)
tree866456318205b51208f86d497d7f5e56dfb3e99b /gdb/target.c
parentae7a4cc898f02f065634191e684770243b9e4a33 (diff)
downloadgdb-d63ee17bdefcc06c7f15ac49b98fc339337cc5df.tar.gz
Add a command to provide a disassembly of the execution trace log.
gdb/ * target.h (target_ops) <to_insn_history, to_insn_history_from, to_insn_history_range>: New fields. (target_insn_history): New. (target_insn_history_from): New. (target_insn_history_range): New. * target.c (target_insn_history): New. (target_insn_history_from): New. (target_insn_history_range): New. * record.c: Include cli/cli-utils.h, disasm.h, ctype.h. (record_insn_history_size): New. (get_insn_number): New. (get_context_size): New. (no_chunk): New. (get_insn_history_modifiers): New. (cmd_record_insn_history): New. (_initialize_record): Add "set/show record instruction-history-size" command. Add "record instruction-history" command.
Diffstat (limited to 'gdb/target.c')
-rw-r--r--gdb/target.c51
1 files changed, 51 insertions, 0 deletions
diff --git a/gdb/target.c b/gdb/target.c
index e41f0741f85..4bf4574857e 100644
--- a/gdb/target.c
+++ b/gdb/target.c
@@ -4388,6 +4388,57 @@ target_goto_record (ULONGEST insn)
tcomplain ();
}
+/* See target.h. */
+
+void
+target_insn_history (int size, int flags)
+{
+ struct target_ops *t;
+
+ for (t = current_target.beneath; t != NULL; t = t->beneath)
+ if (t->to_insn_history != NULL)
+ {
+ t->to_insn_history (size, flags);
+ return;
+ }
+
+ tcomplain ();
+}
+
+/* See target.h. */
+
+void
+target_insn_history_from (ULONGEST from, int size, int flags)
+{
+ struct target_ops *t;
+
+ for (t = current_target.beneath; t != NULL; t = t->beneath)
+ if (t->to_insn_history_from != NULL)
+ {
+ t->to_insn_history_from (from, size, flags);
+ return;
+ }
+
+ tcomplain ();
+}
+
+/* See target.h. */
+
+void
+target_insn_history_range (ULONGEST begin, ULONGEST end, int flags)
+{
+ struct target_ops *t;
+
+ for (t = current_target.beneath; t != NULL; t = t->beneath)
+ if (t->to_insn_history_range != NULL)
+ {
+ t->to_insn_history_range (begin, end, flags);
+ return;
+ }
+
+ tcomplain ();
+}
+
static void
debug_to_prepare_to_store (struct regcache *regcache)
{