aboutsummaryrefslogtreecommitdiff
path: root/gdb/disasm.h
diff options
context:
space:
mode:
authorTom Tromey <tom@tromey.com>2019-07-18 22:07:10 -0600
committerTom Tromey <tom@tromey.com>2019-08-06 11:37:51 -0600
commit046bebe1c0a367687bd693eb4594fcdcba0b8f7e (patch)
tree38fdfa265e21d04c7bed98491f3bb7b4a8185ad8 /gdb/disasm.h
parentddbcedf5de138bc83d5d16554a3f44163dcaef7a (diff)
downloadgdb-046bebe1c0a367687bd693eb4594fcdcba0b8f7e.zip
gdb-046bebe1c0a367687bd693eb4594fcdcba0b8f7e.tar.gz
gdb-046bebe1c0a367687bd693eb4594fcdcba0b8f7e.tar.bz2
Add more styling to "disassemble"
This adds more styling to the disassemble command. In particular, addresses and function names in the disassembly are now styled. This required fixing a small latent bug in set_output_style. This function always passed NULL to emit_style_escape; but when writing to a file other than gdb_stdout, it should emit the style escape directly. (FWIW this is another argument for better integrating the pager with ui_file and getting rid of this entire layer.) gdb/ChangeLog 2019-08-06 Tom Tromey <tom@tromey.com> * utils.c (set_output_style): Sometimes pass stream to emit_style_escape. * ui-out.h (class ui_out) <can_emit_style_escape>: Declare. * record-btrace.c (btrace_insn_history): Update. * mi/mi-out.h (class mi_ui_out) <can_emit_style_escape>: New method. * disasm.h (gdb_pretty_print_disassembler): Add uiout parameter. Update initializers. <m_uiout>: New field. <m_di>: Move lower. * disasm.c (gdb_pretty_print_disassembler::pretty_print_insn): Remove "uiout" parameter. (dump_insns): Update. * cli-out.h (class cli_ui_out) <can_emit_style_escape>: Declare. * cli-out.c (cli_ui_out::can_emit_style_escape): New method. gdb/testsuite/ChangeLog 2019-08-06 Tom Tromey <tom@tromey.com> * gdb.base/style.exp: Add disassemble test. * gdb.base/style.c (some_called_function): New function. (main): Use it.
Diffstat (limited to 'gdb/disasm.h')
-rw-r--r--gdb/disasm.h20
1 files changed, 13 insertions, 7 deletions
diff --git a/gdb/disasm.h b/gdb/disasm.h
index a9cfb21..5c1b30b 100644
--- a/gdb/disasm.h
+++ b/gdb/disasm.h
@@ -112,26 +112,32 @@ extern int gdb_print_insn (struct gdbarch *gdbarch, CORE_ADDR memaddr,
class gdb_pretty_print_disassembler
{
public:
- explicit gdb_pretty_print_disassembler (struct gdbarch *gdbarch)
- : m_di (gdbarch, &m_insn_stb)
+ explicit gdb_pretty_print_disassembler (struct gdbarch *gdbarch,
+ struct ui_out *uiout)
+ : m_uiout (uiout),
+ m_insn_stb (uiout->can_emit_style_escape ()),
+ m_di (gdbarch, &m_insn_stb)
{}
- /* Prints the instruction INSN into UIOUT and returns the length of
- the printed instruction in bytes. */
- int pretty_print_insn (struct ui_out *uiout, const struct disasm_insn *insn,
+ /* Prints the instruction INSN into the saved ui_out and returns the
+ length of the printed instruction in bytes. */
+ int pretty_print_insn (const struct disasm_insn *insn,
gdb_disassembly_flags flags);
private:
/* Returns the architecture used for disassembling. */
struct gdbarch *arch () { return m_di.arch (); }
- /* The disassembler used for instruction printing. */
- gdb_disassembler m_di;
+ /* The ui_out that is used by pretty_print_insn. */
+ struct ui_out *m_uiout;
/* The buffer used to build the instruction string. The
disassembler is initialized with this stream. */
string_file m_insn_stb;
+ /* The disassembler used for instruction printing. */
+ gdb_disassembler m_di;
+
/* The buffer used to build the raw opcodes string. */
string_file m_opcode_stb;
};