GDB (xrefs)
/tmp/gdb-8.1/gdb/disasm.h
Go to the documentation of this file.
1 /* Disassemble support for GDB.
2  Copyright (C) 2002-2018 Free Software Foundation, Inc.
3 
4  This file is part of GDB.
5 
6  This program is free software; you can redistribute it and/or modify
7  it under the terms of the GNU General Public License as published by
8  the Free Software Foundation; either version 3 of the License, or
9  (at your option) any later version.
10 
11  This program is distributed in the hope that it will be useful,
12  but WITHOUT ANY WARRANTY; without even the implied warranty of
13  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14  GNU General Public License for more details.
15 
16  You should have received a copy of the GNU General Public License
17  along with this program. If not, see <http://www.gnu.org/licenses/>. */
18 
19 #ifndef DISASM_H
20 #define DISASM_H
21 
22 #include "dis-asm.h"
23 #include "common/enum-flags.h"
24 
26  {
28  DISASSEMBLY_RAW_INSN = (0x1 << 1),
29  DISASSEMBLY_OMIT_FNAME = (0x1 << 2),
30  DISASSEMBLY_FILENAME = (0x1 << 3),
31  DISASSEMBLY_OMIT_PC = (0x1 << 4),
32  DISASSEMBLY_SOURCE = (0x1 << 5),
34  };
35 DEF_ENUM_FLAGS_TYPE (enum gdb_disassembly_flag, gdb_disassembly_flags);
36 
37 struct gdbarch;
38 struct ui_out;
39 struct ui_file;
40 
42 {
43  using di_read_memory_ftype = decltype (disassemble_info::read_memory_func);
44 
45 public:
46  gdb_disassembler (struct gdbarch *gdbarch, struct ui_file *file)
48  {}
49 
50  int print_insn (CORE_ADDR memaddr, int *branch_delay_insns = NULL);
51 
52  /* Return the gdbarch of gdb_disassembler. */
53  struct gdbarch *arch ()
54  { return m_gdbarch; }
55 
56 protected:
57  gdb_disassembler (struct gdbarch *gdbarch, struct ui_file *file,
59 
60  struct ui_file *stream ()
61  { return (struct ui_file *) m_di.stream; }
62 
63 private:
64  struct gdbarch *m_gdbarch;
65 
66  /* Stores data required for disassembling instructions in
67  opcodes. */
68  struct disassemble_info m_di;
70 
71  static int dis_asm_read_memory (bfd_vma memaddr, gdb_byte *myaddr,
72  unsigned int len,
73  struct disassemble_info *info);
74  static void dis_asm_memory_error (int err, bfd_vma memaddr,
75  struct disassemble_info *info);
76  static void dis_asm_print_address (bfd_vma addr,
77  struct disassemble_info *info);
78 };
79 
80 /* An instruction to be disassembled. */
81 
83 {
84  /* The address of the memory containing the instruction. */
86 
87  /* An optional instruction number. If non-zero, it is printed first. */
88  unsigned int number;
89 
90  /* True if the instruction was executed speculatively. */
91  unsigned int is_speculative:1;
92 };
93 
94 extern void gdb_disassembly (struct gdbarch *gdbarch, struct ui_out *uiout,
95  gdb_disassembly_flags flags, int how_many,
96  CORE_ADDR low, CORE_ADDR high);
97 
98 /* Print the instruction at address MEMADDR in debugged memory,
99  on STREAM. Returns the length of the instruction, in bytes,
100  and, if requested, the number of branch delay slot instructions. */
101 
102 extern int gdb_print_insn (struct gdbarch *gdbarch, CORE_ADDR memaddr,
103  struct ui_file *stream, int *branch_delay_insns);
104 
105 /* Class used to pretty-print instructions. */
106 
108 {
109 public:
111  : m_di (gdbarch, &m_insn_stb)
112  {}
113 
114  /* Prints the instruction INSN into UIOUT and returns the length of
115  the printed instruction in bytes. */
116  int pretty_print_insn (struct ui_out *uiout, const struct disasm_insn *insn,
117  gdb_disassembly_flags flags);
118 
119 private:
120  /* Returns the architecture used for disassembling. */
121  struct gdbarch *arch () { return m_di.arch (); }
122 
123  /* The disassembler used for instruction printing. */
125 
126  /* The buffer used to build the instruction string. The
127  disassembler is initialized with this stream. */
129 
130  /* The buffer used to build the raw opcodes string. */
132 };
133 
134 /* Return the length in bytes of the instruction at address MEMADDR in
135  debugged memory. */
136 
137 extern int gdb_insn_length (struct gdbarch *gdbarch, CORE_ADDR memaddr);
138 
139 /* Return the length in bytes of INSN, originally at MEMADDR. MAX_LEN
140  is the size of the buffer containing INSN. */
141 
142 extern int gdb_buffered_insn_length (struct gdbarch *gdbarch,
143  const gdb_byte *insn, int max_len,
144  CORE_ADDR memaddr);
145 
146 /* Returns GDBARCH's disassembler options. */
147 
148 extern char *get_disassembler_options (struct gdbarch *gdbarch);
149 
150 /* Sets the active gdbarch's disassembler options to OPTIONS. */
151 
152 extern void set_disassembler_options (char *options);
153 
154 #endif
mach_port_t mach_port_t name mach_port_t mach_port_t name kern_return_t err
Definition: gnu-nat.c:1822
static void dis_asm_memory_error(int err, bfd_vma memaddr, struct disassemble_info *info)
Definition: disasm.c:143
struct gdbarch * arch()
Definition: disasm.h:53
bfd_vma CORE_ADDR
Definition: common-types.h:41
static int dis_asm_read_memory(bfd_vma memaddr, gdb_byte *myaddr, unsigned int len, struct disassemble_info *info)
Definition: disasm.c:133
unsigned int number
Definition: disasm.h:88
struct gdbarch * arch()
Definition: disasm.h:121
void(* func)(char *)
static int branch_delay_insns
Definition: printcmd.c:72
int print_insn(CORE_ADDR memaddr, int *branch_delay_insns=NULL)
Definition: disasm.c:759
CORE_ADDR m_err_memaddr
Definition: disasm.h:69
int gdb_print_insn(struct gdbarch *gdbarch, CORE_ADDR memaddr, struct ui_file *stream, int *branch_delay_insns)
Definition: disasm.c:813
mach_port_t kern_return_t mach_port_t msgports mach_port_t kern_return_t pid_t pid mach_port_t kern_return_t mach_port_t task mach_port_t kern_return_t int flags
Definition: gnu-nat.c:1891
gdb_disassembler m_di
Definition: disasm.h:124
int pretty_print_insn(struct ui_out *uiout, const struct disasm_insn *insn, gdb_disassembly_flags flags)
Definition: disasm.c:193
decltype(disassemble_info::read_memory_func) di_read_memory_ftype
Definition: disasm.h:43
struct gdbarch * m_gdbarch
Definition: disasm.h:64
gdb_pretty_print_disassembler(struct gdbarch *gdbarch)
Definition: disasm.h:110
Definition: ui-out.h:77
bfd_byte gdb_byte
Definition: common-types.h:38
void set_disassembler_options(char *options)
Definition: disasm.c:891
struct ui_file * stream()
Definition: disasm.h:60
char * get_disassembler_options(struct gdbarch *gdbarch)
Definition: disasm.c:882
int gdb_insn_length(struct gdbarch *gdbarch, CORE_ADDR memaddr)
Definition: disasm.c:826
struct disassemble_info m_di
Definition: disasm.h:68
void gdb_disassembly(struct gdbarch *gdbarch, struct ui_out *uiout, gdb_disassembly_flags flags, int how_many, CORE_ADDR low, CORE_ADDR high)
Definition: disasm.c:780
DEF_ENUM_FLAGS_TYPE(enum gdb_disassembly_flag, gdb_disassembly_flags)
gdb_disassembly_flag
Definition: disasm.h:25
int gdb_buffered_insn_length(struct gdbarch *gdbarch, const gdb_byte *insn, int max_len, CORE_ADDR memaddr)
Definition: disasm.c:871
unsigned int is_speculative
Definition: disasm.h:91
gdb_disassembler(struct gdbarch *gdbarch, struct ui_file *file)
Definition: disasm.h:46
CORE_ADDR addr
Definition: disasm.h:85
static void dis_asm_print_address(bfd_vma addr, struct disassemble_info *info)
Definition: disasm.c:155