disasm: add struct disasm_insn to describe to-be-disassembled instruction
authorMarkus Metzger <markus.t.metzger@intel.com>
Fri, 11 Sep 2015 12:47:08 +0000 (14:47 +0200)
committerMarkus Metzger <markus.t.metzger@intel.com>
Wed, 4 Nov 2015 08:12:33 +0000 (09:12 +0100)
commita50a40267668422e60901cc7fb949050caceb90c
tree68bb09c4fde6e801b0dcfec1d0a7f031e5ce9791
parentaf70908dc41c8bf21680aeb2f849ce4043b2031a
disasm: add struct disasm_insn to describe to-be-disassembled instruction

The "record instruction-history" command prints for each instruction in
addition to the instruction's disassembly:

  - the instruction number in the recorded execution trace
  - a '?' before the instruction if it was executed speculatively

To allow the "record instruction-history" command to use GDB's disassembly
infrastructure, we extend gdb_pretty_print_insn to optionally print those
additional fields and export the function.

Add a new struct disasm_insn to add additional fields describing the
to-be-disassembled instruction.  The additional fields are:

  number            an optional instruction number, zero if omitted.
  is_speculative    a predicate saying whether the instruction was
                    executed speculatively.

If non-zero, the instruction number is printed first.  It will also appear
as a new optional field "insn-number" in MI.  The field will be present if
insn_num is non-zero.

If is_speculative is set, speculative execution will be indicated by a "?"
following the new instruction number field.  Unless the PC is omitted, it
will overwrite the first byte of the PC prefix.  It will appear as a new
optional field "is-speculative" in MI.  The field will contain "?" and will
be present if is_speculative is set.

The speculative execution indication is guarded by a new flag
DISASSEMBLY_SPECULATION.

Replace the PC parameter of gdb_pretty_print_insn with a pointer to the above
struct.  GDB's "disassemble" command does not use the new fields.

gdb/
* disasm.h (DISASSEMBLY_SPECULATION): New.
(struct disasm_insn): New.
(gdb_pretty_print_insn): New.
* disasm.c (gdb_pretty_print_insn): Replace parameter PC with INSN.
Update users.  Print instruction number and indicate speculative
execution, if requested.
gdb/ChangeLog
gdb/disasm.c
gdb/disasm.h