This is the mail archive of the
mailing list for the GDB project.
[PATCH v3 0/4] disasm, record: fix "record instruction-history /m"
- From: Markus Metzger <markus dot t dot metzger at intel dot com>
- To: dje at google dot com
- Cc: gdb-patches at sourceware dot org, palves at redhat dot com
- Date: Tue, 27 Oct 2015 10:54:09 +0100
- Subject: [PATCH v3 0/4] disasm, record: fix "record instruction-history /m"
- Authentication-results: sourceware.org; auth=none
Change to v2:
- renamed gdb_print_insn_tuple to gdb_pretty_print_insn
- added comments
The /m modifier interleaves source lines with the disassembly of recorded
instructions. This calls disasm.c's do_mixed_source_and_assembly once for
each recorded instruction to be printed.
The latter really does a source print with intermixed disassembly. To that
purpose, it may reorder instructions to better match the source. This doesn't
work for printing a single instruction. The output also interferes with
"record instruction-history" specific extensions.
Change record instruction-history /m to use its own simple source interleaving
algorithm. The most important part is that instructions are printed in
the order in which they were executed. Before each instruction, we print
a range of source lines that are attributed to the instruction's PC. If the
source line range has already been printed (or skipped) for the previous
instruction, we skip it.
This is a mixture of an earlier RFC that added source interleaving to the
"record instruction-history" command and version 1 of this patch series that
tried to modify Doug Evans new "disassembly" source interleaving algorithm and
use it for "record instruction-history", as well.
We extend disasm.c's insn tuple printing and use it for printing a single
instruction. To also share the source interleaving algorithm, we'd need to
change it significantly. When building a hash table of source lines of the
memory range to disassemble and when inserting lines without source code, the
algorithm assumes that instructions are printed in the order in which they
appear in memory. The "record instruction-history" command needs to print
instructions in the order in which they retired.
I propose to leave the two source interleaving algorithms separate.
Markus Metzger (4):
disasm: split dump_insns
disasm: add struct disasm_insn to describe to-be-disassembled
btrace: change record instruction-history /m
btrace: add instruction-history /s and fix documentation
gdb/NEWS | 3 +
gdb/disasm.c | 199 +++++++++++++++++++++++++++++++--------------------
gdb/disasm.h | 23 ++++++
gdb/doc/gdb.texinfo | 14 ++++
gdb/record-btrace.c | 200 ++++++++++++++++++++++++++++++++++++++++++++++------
gdb/record.c | 5 +-
6 files changed, 345 insertions(+), 99 deletions(-)