X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=gdb%2Fdisasm.h;h=b0f535eaa211607905b48751cb7ef71ceabb3166;hb=348fe36b1d64f12c60e08f6313520b3191663063;hp=5b79be0151850f184b0370c2807883dc0215fca8;hpb=9a24775b97646827396073d0d7e510b9694331ab;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/disasm.h b/gdb/disasm.h index 5b79be0151..b0f535eaa2 100644 --- a/gdb/disasm.h +++ b/gdb/disasm.h @@ -1,5 +1,5 @@ /* Disassemble support for GDB. - Copyright (C) 2002-2017 Free Software Foundation, Inc. + Copyright (C) 2002-2020 Free Software Foundation, Inc. This file is part of GDB. @@ -20,7 +20,7 @@ #define DISASM_H #include "dis-asm.h" -#include "common/enum-flags.h" +#include "gdbsupport/enum-flags.h" enum gdb_disassembly_flag { @@ -47,6 +47,10 @@ public: : gdb_disassembler (gdbarch, file, dis_asm_read_memory) {} + ~gdb_disassembler (); + + DISABLE_COPY_AND_ASSIGN (gdb_disassembler); + int print_insn (CORE_ADDR memaddr, int *branch_delay_insns = NULL); /* Return the gdbarch of gdb_disassembler. */ @@ -66,6 +70,11 @@ private: /* Stores data required for disassembling instructions in opcodes. */ struct disassemble_info m_di; + + /* If we own the string in `m_di.disassembler_options', we do so + using this field. */ + std::string m_disassembler_options_holder; + CORE_ADDR m_err_memaddr; static int dis_asm_read_memory (bfd_vma memaddr, gdb_byte *myaddr, @@ -107,26 +116,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; };