diff options
author | Tom Tromey <tom@tromey.com> | 2019-07-18 22:07:10 -0600 |
---|---|---|
committer | Tom Tromey <tom@tromey.com> | 2019-08-06 11:37:51 -0600 |
commit | 046bebe1c0a367687bd693eb4594fcdcba0b8f7e (patch) | |
tree | 38fdfa265e21d04c7bed98491f3bb7b4a8185ad8 /gdb/disasm.h | |
parent | ddbcedf5de138bc83d5d16554a3f44163dcaef7a (diff) | |
download | gdb-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.h | 20 |
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; }; |