GDB (xrefs)
/tmp/gdb-8.1/gdb/arch-utils.h
Go to the documentation of this file.
1 /* Dynamic architecture support for GDB, the GNU debugger.
2 
3  Copyright (C) 1998-2018 Free Software Foundation, Inc.
4 
5  This file is part of GDB.
6 
7  This program is free software; you can redistribute it and/or modify
8  it under the terms of the GNU General Public License as published by
9  the Free Software Foundation; either version 3 of the License, or
10  (at your option) any later version.
11 
12  This program is distributed in the hope that it will be useful,
13  but WITHOUT ANY WARRANTY; without even the implied warranty of
14  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15  GNU General Public License for more details.
16 
17  You should have received a copy of the GNU General Public License
18  along with this program. If not, see <http://www.gnu.org/licenses/>. */
19 
20 #ifndef GDBARCH_UTILS_H
21 #define GDBARCH_UTILS_H
22 
23 struct gdbarch;
24 struct frame_info;
25 struct minimal_symbol;
26 struct type;
27 struct gdbarch_info;
28 struct dwarf2_frame_state;
29 
30 template <size_t bp_size, const gdb_byte *break_insn>
32 {
33  static int
35  {
36  return bp_size;
37  }
38 
39  static const gdb_byte *
40  bp_from_kind (struct gdbarch *gdbarch, int kind, int *size)
41  {
42  *size = kind;
43  return break_insn;
44  }
45 };
46 
47 template <size_t bp_size,
48  const gdb_byte *break_insn_little,
49  const gdb_byte *break_insn_big>
51 {
52  static int
54  {
55  return bp_size;
56  }
57 
58  static const gdb_byte *
59  bp_from_kind (struct gdbarch *gdbarch, int kind, int *size)
60  {
61  *size = kind;
62  if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG)
63  return break_insn_big;
64  else
65  return break_insn_little;
66  }
67 };
68 
69 #define BP_MANIPULATION(BREAK_INSN) \
70  bp_manipulation<sizeof (BREAK_INSN), BREAK_INSN>
71 
72 #define BP_MANIPULATION_ENDIAN(BREAK_INSN_LITTLE, BREAK_INSN_BIG) \
73  bp_manipulation_endian<sizeof (BREAK_INSN_LITTLE), \
74  BREAK_INSN_LITTLE, BREAK_INSN_BIG>
75 
76 /* Default implementation of gdbarch_displaced_hw_singlestep. */
77 extern int
79  struct displaced_step_closure *);
80 
81 /* Possible value for gdbarch_displaced_step_location:
82  Place displaced instructions at the program's entry point,
83  leaving space for inferior function call return breakpoints. */
85 
86 /* The only possible cases for inner_than. */
87 extern int core_addr_lessthan (CORE_ADDR lhs, CORE_ADDR rhs);
88 extern int core_addr_greaterthan (CORE_ADDR lhs, CORE_ADDR rhs);
89 
90 /* Identity functions on a CORE_ADDR. Just return the "addr". */
91 
94 
95 /* No-op conversion of reg to regnum. */
96 
97 extern int no_op_reg_to_regnum (struct gdbarch *gdbarch, int reg);
98 
99 /* Do nothing version of coff_make_msymbol_special. */
100 
101 void default_coff_make_msymbol_special (int val, struct minimal_symbol *msym);
102 
103 /* Do nothing default implementation of gdbarch_make_symbol_special. */
104 
105 void default_make_symbol_special (struct symbol *sym, struct objfile *objfile);
106 
107 /* Do nothing default implementation of gdbarch_adjust_dwarf2_addr. */
108 
110 
111 /* Do nothing default implementation of gdbarch_adjust_dwarf2_line. */
112 
114 
115 /* Default DWARF vendor CFI handler. */
116 
118  struct dwarf2_frame_state *fs);
119 
120 /* Version of cannot_fetch_register() / cannot_store_register() that
121  always fails. */
122 
123 int cannot_register_not (struct gdbarch *gdbarch, int regnum);
124 
125 /* Legacy version of target_virtual_frame_pointer(). Assumes that
126  there is an gdbarch_deprecated_fp_regnum and that it is the same, cooked or
127  raw. */
128 
130 
131 /* Default implementation of gdbarch_floatformat_for_type. */
132 extern const struct floatformat **
134  const char *name, int len);
135 
137  CORE_ADDR pc);
138 
140  CORE_ADDR pc);
141 
143  CORE_ADDR pc, const char *name);
144 
146  CORE_ADDR pc);
147 
149  struct frame_info *frame);
150 
151 /* By default, registers are not convertible. */
152 extern int generic_convert_register_p (struct gdbarch *gdbarch, int regnum,
153  struct type *type);
154 
156  struct type *type);
157 
158 extern int generic_instruction_nullified (struct gdbarch *gdbarch,
159  struct regcache *regcache);
160 
162  int regno);
163 
164 /* For compatibility with older architectures, returns
165  (LEGACY_SIM_REGNO_IGNORE) when the register doesn't have a valid
166  name. */
167 
168 extern int legacy_register_sim_regno (struct gdbarch *gdbarch, int regnum);
169 
170 /* Return the selected byte order, or BFD_ENDIAN_UNKNOWN if no byte
171  order was explicitly selected. */
172 extern enum bfd_endian selected_byte_order (void);
173 
174 /* Return the selected architecture's name, or NULL if no architecture
175  was explicitly selected. */
176 extern const char *selected_architecture_name (void);
177 
178 /* Initialize a ``struct info''. Can't use memset(0) since some
179  default values are not zero. "fill" takes all available
180  information and fills in any unspecified fields. */
181 
182 extern void gdbarch_info_init (struct gdbarch_info *info);
183 
184 /* Similar to init, but this time fill in the blanks. Information is
185  obtained from the global "set ..." options and explicitly
186  initialized INFO fields. */
187 extern void gdbarch_info_fill (struct gdbarch_info *info);
188 
189 /* Return the architecture for ABFD. If no suitable architecture
190  could be find, return NULL. */
191 
192 extern struct gdbarch *gdbarch_from_bfd (bfd *abfd);
193 
194 /* Return "current" architecture. If the target is running, this is the
195  architecture of the selected frame. Otherwise, the "current" architecture
196  defaults to the target architecture.
197 
198  This function should normally be called solely by the command interpreter
199  routines to determine the architecture to execute a command in. */
200 extern struct gdbarch *get_current_arch (void);
201 
202 extern int default_has_shared_address_space (struct gdbarch *);
203 
205  CORE_ADDR addr, char **msg);
206 
207 extern const gdb_byte *default_breakpoint_from_pc (struct gdbarch *gdbarch,
208  CORE_ADDR *pcptr,
209  int *lenptr);
210 
212  struct regcache *regcache,
213  CORE_ADDR *pcptr);
214 
215 extern void default_gen_return_address (struct gdbarch *gdbarch,
216  struct agent_expr *ax,
217  struct axs_value *value,
218  CORE_ADDR scope);
219 
220 extern const char *default_auto_charset (void);
221 extern const char *default_auto_wide_charset (void);
222 
224  struct type *);
225 
226 extern int default_insn_is_call (struct gdbarch *, CORE_ADDR);
227 extern int default_insn_is_ret (struct gdbarch *, CORE_ADDR);
228 extern int default_insn_is_jump (struct gdbarch *, CORE_ADDR);
229 
230 /* Do-nothing version of vsyscall_range. Returns false. */
231 
232 extern int default_vsyscall_range (struct gdbarch *gdbarch, struct mem_range *range);
233 
234 /* Default way to advance the PC to the next instruction in order to
235  skip a permanent breakpoint. Increments the PC by the size of a
236  software breakpoint instruction, as determined with
237  gdbarch_breakpoint_from_pc. This matches how the breakpoints
238  module determines whether a breakpoint is permanent. */
240 
241 /* Symbols for gdbarch_infcall_mmap; their Linux PROT_* system
242  definitions would be dependent on compilation host. */
243 #define GDB_MMAP_PROT_READ 0x1 /* Page can be read. */
244 #define GDB_MMAP_PROT_WRITE 0x2 /* Page can be written. */
245 #define GDB_MMAP_PROT_EXEC 0x4 /* Page can be executed. */
246 
247 extern CORE_ADDR default_infcall_mmap (CORE_ADDR size, unsigned prot);
248 extern void default_infcall_munmap (CORE_ADDR addr, CORE_ADDR size);
249 extern char *default_gcc_target_options (struct gdbarch *gdbarch);
250 extern const char *default_gnu_triplet_regexp (struct gdbarch *gdbarch);
252 
254  struct regcache *regcache,
255  CORE_ADDR addr);
256 
257 extern int default_print_insn (bfd_vma memaddr, disassemble_info *info);
258 
259 /* Wrapper to gdbarch_skip_prologue, but doesn't throw exception. Catch
260  exception thrown from gdbarch_skip_prologue, and return PC. */
261 
263  CORE_ADDR pc) noexcept;
264 
265 #endif
struct gdbarch * gdbarch_from_bfd(bfd *abfd)
Definition: arch-utils.c:577
int default_vsyscall_range(struct gdbarch *gdbarch, struct mem_range *range)
Definition: arch-utils.c:284
struct gdbarch * get_current_arch(void)
Definition: arch-utils.c:798
const char * default_auto_charset(void)
Definition: charset.c:917
int default_fast_tracepoint_valid_at(struct gdbarch *gdbarch, CORE_ADDR addr, char **msg)
Definition: arch-utils.c:815
int default_insn_is_call(struct gdbarch *, CORE_ADDR)
Definition: arch-utils.c:860
void gdbarch_info_fill(struct gdbarch_info *info)
Definition: arch-utils.c:738
void default_make_symbol_special(struct symbol *sym, struct objfile *objfile)
Definition: arch-utils.c:158
bfd_vma CORE_ADDR
Definition: common-types.h:41
Definition: ax.h:83
enum bfd_endian selected_byte_order(void)
Definition: arch-utils.c:307
void gdbarch_info_init(struct gdbarch_info *info)
Definition: arch-utils.c:725
int default_addressable_memory_unit_size(struct gdbarch *gdbarch)
Definition: arch-utils.c:921
void default_coff_make_msymbol_special(int val, struct minimal_symbol *msym)
Definition: arch-utils.c:150
void default_skip_permanent_breakpoint(struct regcache *regcache)
Definition: arch-utils.c:876
static int kind_from_pc(struct gdbarch *gdbarch, CORE_ADDR *pcptr)
Definition: arch-utils.h:34
int no_op_reg_to_regnum(struct gdbarch *gdbarch, int reg)
Definition: arch-utils.c:144
const char * default_auto_wide_charset(void)
Definition: charset.c:923
const char *const name
Definition: aarch64-tdep.c:76
const gdb_byte * default_breakpoint_from_pc(struct gdbarch *gdbarch, CORE_ADDR *pcptr, int *lenptr)
Definition: arch-utils.c:826
static int kind_from_pc(struct gdbarch *gdbarch, CORE_ADDR *pcptr)
Definition: arch-utils.h:53
CORE_ADDR default_adjust_dwarf2_line(CORE_ADDR addr, int rel)
Definition: arch-utils.c:174
static const gdb_byte * bp_from_kind(struct gdbarch *gdbarch, int kind, int *size)
Definition: arch-utils.h:59
static const gdb_byte * bp_from_kind(struct gdbarch *gdbarch, int kind, int *size)
Definition: arch-utils.h:40
CORE_ADDR() gdbarch_convert_from_func_ptr_addr_ftype(struct gdbarch *gdbarch, CORE_ADDR addr, struct target_ops *targ)
Definition: gdbarch.h:662
int default_remote_register_number(struct gdbarch *gdbarch, int regno)
Definition: arch-utils.c:275
enum bfd_endian gdbarch_byte_order(struct gdbarch *gdbarch)
Definition: gdbarch.c:1509
int default_breakpoint_kind_from_current_state(struct gdbarch *gdbarch, struct regcache *regcache, CORE_ADDR *pcptr)
Definition: arch-utils.c:834
Definition: gdbtypes.h:749
void default_guess_tracepoint_registers(struct gdbarch *gdbarch, struct regcache *regcache, CORE_ADDR addr)
Definition: arch-utils.c:927
CORE_ADDR default_infcall_mmap(CORE_ADDR size, unsigned prot)
Definition: arch-utils.c:888
int default_stabs_argument_has_addr(struct gdbarch *gdbarch, struct type *type)
Definition: arch-utils.c:262
int generic_instruction_nullified(struct gdbarch *gdbarch, struct regcache *regcache)
Definition: arch-utils.c:268
bool default_execute_dwarf_cfa_vendor_op(struct gdbarch *gdbarch, gdb_byte op, struct dwarf2_frame_state *fs)
Definition: arch-utils.c:182
Definition: value.c:62
int generic_stack_frame_destroyed_p(struct gdbarch *gdbarch, CORE_ADDR pc)
Definition: arch-utils.c:102
int regnum
Definition: aarch64-tdep.c:77
Definition: regdef.h:22
Definition: value.c:169
void() gdbarch_virtual_frame_pointer_ftype(struct gdbarch *gdbarch, CORE_ADDR pc, int *frame_regnum, LONGEST *frame_offset)
Definition: gdbarch.h:262
int cannot_register_not(struct gdbarch *gdbarch, int regnum)
Definition: arch-utils.c:189
int core_addr_greaterthan(CORE_ADDR lhs, CORE_ADDR rhs)
Definition: arch-utils.c:123
bfd_byte gdb_byte
Definition: common-types.h:38
int default_has_shared_address_space(struct gdbarch *)
Definition: arch-utils.c:807
int legacy_register_sim_regno(struct gdbarch *gdbarch, int regnum)
Definition: arch-utils.c:67
const char * default_gnu_triplet_regexp(struct gdbarch *gdbarch)
Definition: arch-utils.c:912
const struct floatformat ** default_floatformat_for_type(struct gdbarch *gdbarch, const char *name, int len)
Definition: arch-utils.c:230
int default_return_in_first_hidden_param_p(struct gdbarch *, struct type *)
Definition: arch-utils.c:851
int default_code_of_frame_writable(struct gdbarch *gdbarch, struct frame_info *frame)
Definition: arch-utils.c:108
gdbarch_virtual_frame_pointer_ftype legacy_virtual_frame_pointer
int default_insn_is_jump(struct gdbarch *, CORE_ADDR)
Definition: arch-utils.c:870
CORE_ADDR displaced_step_at_entry_point(struct gdbarch *gdbarch)
Definition: arch-utils.c:50
CORE_ADDR generic_skip_solib_resolver(struct gdbarch *gdbarch, CORE_ADDR pc)
Definition: arch-utils.c:89
const char * selected_architecture_name(void)
Definition: arch-utils.c:464
int generic_convert_register_p(struct gdbarch *gdbarch, int regnum, struct type *type)
Definition: arch-utils.c:255
int default_print_insn(bfd_vma memaddr, disassemble_info *info)
Definition: arch-utils.c:950
void default_gen_return_address(struct gdbarch *gdbarch, struct agent_expr *ax, struct axs_value *value, CORE_ADDR scope)
Definition: arch-utils.c:843
char * default_gcc_target_options(struct gdbarch *gdbarch)
Definition: arch-utils.c:903
int generic_in_solib_return_trampoline(struct gdbarch *gdbarch, CORE_ADDR pc, const char *name)
Definition: arch-utils.c:95
int default_displaced_step_hw_singlestep(struct gdbarch *, struct displaced_step_closure *)
Definition: arch-utils.c:43
void default_infcall_munmap(CORE_ADDR addr, CORE_ADDR size)
Definition: arch-utils.c:894
CORE_ADDR default_adjust_dwarf2_addr(CORE_ADDR pc)
Definition: arch-utils.c:166
size_t size
Definition: go32-nat.c:242
CORE_ADDR core_addr_identity(struct gdbarch *gdbarch, CORE_ADDR addr)
Definition: arch-utils.c:131
gdbarch_convert_from_func_ptr_addr_ftype convert_from_func_ptr_addr_identity
int default_insn_is_ret(struct gdbarch *, CORE_ADDR)
Definition: arch-utils.c:865
CORE_ADDR gdbarch_skip_prologue_noexcept(gdbarch *gdbarch, CORE_ADDR pc) noexcept
Definition: arch-utils.c:964
int core_addr_lessthan(CORE_ADDR lhs, CORE_ADDR rhs)
Definition: arch-utils.c:117
CORE_ADDR generic_skip_trampoline_code(struct frame_info *frame, CORE_ADDR pc)
Definition: arch-utils.c:83