This is the mail archive of the
gdb-patches@sourceware.org
mailing list for the GDB project.
[PATCH v2 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: Mon, 19 Oct 2015 11:23:26 +0200
- Subject: [PATCH v2 0/4] disasm, record: fix "record instruction-history /m"
- Authentication-results: sourceware.org; auth=none
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
instruction
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 | 191 +++++++++++++++++++++++++++++++++++++++++++------
gdb/record.c | 5 +-
6 files changed, 336 insertions(+), 99 deletions(-)
--
1.8.3.1