* gdbarch.sh (read_pc): Add REGCACHE argument. Remove PTID argument.
[deliverable/binutils-gdb.git] / gdb / gdbarch.h
CommitLineData
59233f88
AC
1/* *INDENT-OFF* */ /* THIS FILE IS GENERATED */
2
adf40b2e 3/* Dynamic architecture support for GDB, the GNU debugger.
79d45cd4 4
424163ea
DJ
5 Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006
6 Free Software Foundation, Inc.
c906108c 7
c5aa993b 8 This file is part of GDB.
c906108c 9
c5aa993b
JM
10 This program is free software; you can redistribute it and/or modify
11 it under the terms of the GNU General Public License as published by
12 the Free Software Foundation; either version 2 of the License, or
13 (at your option) any later version.
c906108c 14
c5aa993b
JM
15 This program is distributed in the hope that it will be useful,
16 but WITHOUT ANY WARRANTY; without even the implied warranty of
17 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 GNU General Public License for more details.
c906108c 19
c5aa993b
JM
20 You should have received a copy of the GNU General Public License
21 along with this program; if not, write to the Free Software
197e01b6
EZ
22 Foundation, Inc., 51 Franklin Street, Fifth Floor,
23 Boston, MA 02110-1301, USA. */
c906108c 24
104c1213
JM
25/* This file was created with the aid of ``gdbarch.sh''.
26
52204a0b 27 The Bourne shell script ``gdbarch.sh'' creates the files
104c1213
JM
28 ``new-gdbarch.c'' and ``new-gdbarch.h and then compares them
29 against the existing ``gdbarch.[hc]''. Any differences found
30 being reported.
31
32 If editing this file, please also run gdbarch.sh and merge any
52204a0b 33 changes into that script. Conversely, when making sweeping changes
104c1213
JM
34 to this file, modifying gdbarch.sh and using its output may prove
35 easier. */
adf40b2e 36
c906108c
SS
37#ifndef GDBARCH_H
38#define GDBARCH_H
39
da3331ec
AC
40struct floatformat;
41struct ui_file;
cce74817
JM
42struct frame_info;
43struct value;
b6af0555 44struct objfile;
1c772458 45struct obj_section;
a2cf933a 46struct minimal_symbol;
049ee0e4 47struct regcache;
b59ff9d5 48struct reggroup;
6ce6d90f 49struct regset;
a89aa300 50struct disassemble_info;
e2d0e7eb 51struct target_ops;
030f20e1 52struct obstack;
8181d85f 53struct bp_target_info;
424163ea 54struct target_desc;
0f71a2f6 55
0f71a2f6
JM
56extern struct gdbarch *current_gdbarch;
57
0f71a2f6
JM
58
59/* The following are pre-initialized by GDBARCH. */
60
104c1213 61extern const struct bfd_arch_info * gdbarch_bfd_arch_info (struct gdbarch *gdbarch);
0f71a2f6 62/* set_gdbarch_bfd_arch_info() - not applicable - pre-initialized. */
0f71a2f6 63
104c1213 64extern int gdbarch_byte_order (struct gdbarch *gdbarch);
0f71a2f6 65/* set_gdbarch_byte_order() - not applicable - pre-initialized. */
0f71a2f6 66
4be87837
DJ
67extern enum gdb_osabi gdbarch_osabi (struct gdbarch *gdbarch);
68/* set_gdbarch_osabi() - not applicable - pre-initialized. */
4be87837 69
424163ea
DJ
70extern const struct target_desc * gdbarch_target_desc (struct gdbarch *gdbarch);
71/* set_gdbarch_target_desc() - not applicable - pre-initialized. */
72
0f71a2f6 73
99e7bb18 74/* The following are initialized by the target dependent code. */
0f71a2f6 75
66b43ecb
AC
76/* Number of bits in a char or unsigned char for the target machine.
77 Just like CHAR_BIT in <limits.h> but describes the target machine.
57010b1c 78 v:TARGET_CHAR_BIT:int:char_bit::::8 * sizeof (char):8::0:
66b43ecb
AC
79
80 Number of bits in a short or unsigned short for the target machine. */
c4093a6a 81
104c1213
JM
82extern int gdbarch_short_bit (struct gdbarch *gdbarch);
83extern void set_gdbarch_short_bit (struct gdbarch *gdbarch, int short_bit);
0f71a2f6 84
66b43ecb
AC
85/* Number of bits in an int or unsigned int for the target machine. */
86
104c1213
JM
87extern int gdbarch_int_bit (struct gdbarch *gdbarch);
88extern void set_gdbarch_int_bit (struct gdbarch *gdbarch, int int_bit);
0f71a2f6 89
66b43ecb
AC
90/* Number of bits in a long or unsigned long for the target machine. */
91
104c1213
JM
92extern int gdbarch_long_bit (struct gdbarch *gdbarch);
93extern void set_gdbarch_long_bit (struct gdbarch *gdbarch, int long_bit);
0f71a2f6 94
66b43ecb
AC
95/* Number of bits in a long long or unsigned long long for the target
96 machine. */
97
104c1213
JM
98extern int gdbarch_long_long_bit (struct gdbarch *gdbarch);
99extern void set_gdbarch_long_long_bit (struct gdbarch *gdbarch, int long_long_bit);
0f71a2f6 100
456fcf94
AC
101/* The ABI default bit-size and format for "float", "double", and "long
102 double". These bit/format pairs should eventually be combined into
8da61cc4
DJ
103 a single object. For the moment, just initialize them as a pair.
104 Each format describes both the big and little endian layouts (if
105 useful). */
66b43ecb 106
104c1213
JM
107extern int gdbarch_float_bit (struct gdbarch *gdbarch);
108extern void set_gdbarch_float_bit (struct gdbarch *gdbarch, int float_bit);
0f71a2f6 109
8da61cc4
DJ
110extern const struct floatformat ** gdbarch_float_format (struct gdbarch *gdbarch);
111extern void set_gdbarch_float_format (struct gdbarch *gdbarch, const struct floatformat ** float_format);
66b43ecb 112
104c1213
JM
113extern int gdbarch_double_bit (struct gdbarch *gdbarch);
114extern void set_gdbarch_double_bit (struct gdbarch *gdbarch, int double_bit);
0f71a2f6 115
8da61cc4
DJ
116extern const struct floatformat ** gdbarch_double_format (struct gdbarch *gdbarch);
117extern void set_gdbarch_double_format (struct gdbarch *gdbarch, const struct floatformat ** double_format);
66b43ecb 118
104c1213
JM
119extern int gdbarch_long_double_bit (struct gdbarch *gdbarch);
120extern void set_gdbarch_long_double_bit (struct gdbarch *gdbarch, int long_double_bit);
0f71a2f6 121
8da61cc4
DJ
122extern const struct floatformat ** gdbarch_long_double_format (struct gdbarch *gdbarch);
123extern void set_gdbarch_long_double_format (struct gdbarch *gdbarch, const struct floatformat ** long_double_format);
456fcf94 124
52204a0b
DT
125/* For most targets, a pointer on the target and its representation as an
126 address in GDB have the same size and "look the same". For such a
17a912b6 127 target, you need only set gdbarch_ptr_bit and gdbarch_addr_bit
52204a0b
DT
128 / addr_bit will be set from it.
129
17a912b6 130 If gdbarch_ptr_bit and gdbarch_addr_bit are different, you'll probably
76e71323
UW
131 also need to set gdbarch_pointer_to_address and gdbarch_address_to_pointer
132 as well.
52204a0b
DT
133
134 ptr_bit is the size of a pointer on the target */
66b43ecb 135
66b43ecb
AC
136extern int gdbarch_ptr_bit (struct gdbarch *gdbarch);
137extern void set_gdbarch_ptr_bit (struct gdbarch *gdbarch, int ptr_bit);
66b43ecb 138
52204a0b
DT
139/* addr_bit is the size of a target address as represented in gdb */
140
52204a0b
DT
141extern int gdbarch_addr_bit (struct gdbarch *gdbarch);
142extern void set_gdbarch_addr_bit (struct gdbarch *gdbarch, int addr_bit);
52204a0b 143
66b43ecb
AC
144/* Number of bits in a BFD_VMA for the target object file format. */
145
66b43ecb
AC
146extern int gdbarch_bfd_vma_bit (struct gdbarch *gdbarch);
147extern void set_gdbarch_bfd_vma_bit (struct gdbarch *gdbarch, int bfd_vma_bit);
66b43ecb 148
4e409299
JB
149/* One if `char' acts like `signed char', zero if `unsigned char'. */
150
4e409299
JB
151extern int gdbarch_char_signed (struct gdbarch *gdbarch);
152extern void set_gdbarch_char_signed (struct gdbarch *gdbarch, int char_signed);
4e409299 153
cde9ea48 154extern int gdbarch_read_pc_p (struct gdbarch *gdbarch);
61a1198a
UW
155
156typedef CORE_ADDR (gdbarch_read_pc_ftype) (struct regcache *regcache);
157extern CORE_ADDR gdbarch_read_pc (struct gdbarch *gdbarch, struct regcache *regcache);
104c1213 158extern void set_gdbarch_read_pc (struct gdbarch *gdbarch, gdbarch_read_pc_ftype *read_pc);
61a1198a
UW
159
160extern int gdbarch_write_pc_p (struct gdbarch *gdbarch);
161
162typedef void (gdbarch_write_pc_ftype) (struct regcache *regcache, CORE_ADDR val);
163extern void gdbarch_write_pc (struct gdbarch *gdbarch, struct regcache *regcache, CORE_ADDR val);
104c1213 164extern void set_gdbarch_write_pc (struct gdbarch *gdbarch, gdbarch_write_pc_ftype *write_pc);
0f71a2f6 165
39d4ef09
AC
166/* Function for getting target's idea of a frame pointer. FIXME: GDB's
167 whole scheme for dealing with "frames" and "frame pointers" needs a
168 serious shakedown. */
169
39d4ef09
AC
170typedef void (gdbarch_virtual_frame_pointer_ftype) (CORE_ADDR pc, int *frame_regnum, LONGEST *frame_offset);
171extern void gdbarch_virtual_frame_pointer (struct gdbarch *gdbarch, CORE_ADDR pc, int *frame_regnum, LONGEST *frame_offset);
172extern void set_gdbarch_virtual_frame_pointer (struct gdbarch *gdbarch, gdbarch_virtual_frame_pointer_ftype *virtual_frame_pointer);
39d4ef09 173
d8124050 174extern int gdbarch_pseudo_register_read_p (struct gdbarch *gdbarch);
61a0eb5b 175
b60c417a
AC
176typedef void (gdbarch_pseudo_register_read_ftype) (struct gdbarch *gdbarch, struct regcache *regcache, int cookednum, gdb_byte *buf);
177extern void gdbarch_pseudo_register_read (struct gdbarch *gdbarch, struct regcache *regcache, int cookednum, gdb_byte *buf);
d8124050 178extern void set_gdbarch_pseudo_register_read (struct gdbarch *gdbarch, gdbarch_pseudo_register_read_ftype *pseudo_register_read);
61a0eb5b 179
d8124050 180extern int gdbarch_pseudo_register_write_p (struct gdbarch *gdbarch);
61a0eb5b 181
b60c417a
AC
182typedef void (gdbarch_pseudo_register_write_ftype) (struct gdbarch *gdbarch, struct regcache *regcache, int cookednum, const gdb_byte *buf);
183extern void gdbarch_pseudo_register_write (struct gdbarch *gdbarch, struct regcache *regcache, int cookednum, const gdb_byte *buf);
d8124050 184extern void set_gdbarch_pseudo_register_write (struct gdbarch *gdbarch, gdbarch_pseudo_register_write_ftype *pseudo_register_write);
61a0eb5b 185
104c1213
JM
186extern int gdbarch_num_regs (struct gdbarch *gdbarch);
187extern void set_gdbarch_num_regs (struct gdbarch *gdbarch, int num_regs);
0f71a2f6 188
34620563
AC
189/* This macro gives the number of pseudo-registers that live in the
190 register namespace but do not get fetched or stored on the target.
191 These pseudo-registers may be aliases for other registers,
192 combinations of other registers, or they may be computed by GDB. */
193
0aba1244
EZ
194extern int gdbarch_num_pseudo_regs (struct gdbarch *gdbarch);
195extern void set_gdbarch_num_pseudo_regs (struct gdbarch *gdbarch, int num_pseudo_regs);
0aba1244 196
c2169756
AC
197/* GDB's standard (or well known) register numbers. These can map onto
198 a real register or a pseudo (computed) register or not be defined at
a9e5fdc2
AC
199 all (-1).
200 SP_REGNUM will hopefully be replaced by UNWIND_SP. */
1200cd6e 201
104c1213
JM
202extern int gdbarch_sp_regnum (struct gdbarch *gdbarch);
203extern void set_gdbarch_sp_regnum (struct gdbarch *gdbarch, int sp_regnum);
5010d38b 204#if !defined (GDB_TM_FILE) && defined (SP_REGNUM)
83905903
AC
205#error "Non multi-arch definition of SP_REGNUM"
206#endif
c25083af 207#if !defined (SP_REGNUM)
0f71a2f6
JM
208#define SP_REGNUM (gdbarch_sp_regnum (current_gdbarch))
209#endif
0f71a2f6 210
104c1213
JM
211extern int gdbarch_pc_regnum (struct gdbarch *gdbarch);
212extern void set_gdbarch_pc_regnum (struct gdbarch *gdbarch, int pc_regnum);
5010d38b 213#if !defined (GDB_TM_FILE) && defined (PC_REGNUM)
83905903
AC
214#error "Non multi-arch definition of PC_REGNUM"
215#endif
c25083af 216#if !defined (PC_REGNUM)
0f71a2f6
JM
217#define PC_REGNUM (gdbarch_pc_regnum (current_gdbarch))
218#endif
0f71a2f6 219
c2169756
AC
220extern int gdbarch_ps_regnum (struct gdbarch *gdbarch);
221extern void set_gdbarch_ps_regnum (struct gdbarch *gdbarch, int ps_regnum);
5010d38b 222#if !defined (GDB_TM_FILE) && defined (PS_REGNUM)
c2169756
AC
223#error "Non multi-arch definition of PS_REGNUM"
224#endif
c25083af 225#if !defined (PS_REGNUM)
c2169756
AC
226#define PS_REGNUM (gdbarch_ps_regnum (current_gdbarch))
227#endif
c2169756 228
60054393
MS
229extern int gdbarch_fp0_regnum (struct gdbarch *gdbarch);
230extern void set_gdbarch_fp0_regnum (struct gdbarch *gdbarch, int fp0_regnum);
5010d38b 231#if !defined (GDB_TM_FILE) && defined (FP0_REGNUM)
83905903
AC
232#error "Non multi-arch definition of FP0_REGNUM"
233#endif
c25083af 234#if !defined (FP0_REGNUM)
60054393
MS
235#define FP0_REGNUM (gdbarch_fp0_regnum (current_gdbarch))
236#endif
60054393 237
88c72b7d
AC
238/* Convert stab register number (from `r' declaration) to a gdb REGNUM. */
239
88c72b7d
AC
240typedef int (gdbarch_stab_reg_to_regnum_ftype) (int stab_regnr);
241extern int gdbarch_stab_reg_to_regnum (struct gdbarch *gdbarch, int stab_regnr);
242extern void set_gdbarch_stab_reg_to_regnum (struct gdbarch *gdbarch, gdbarch_stab_reg_to_regnum_ftype *stab_reg_to_regnum);
88c72b7d
AC
243
244/* Provide a default mapping from a ecoff register number to a gdb REGNUM. */
245
88c72b7d
AC
246typedef int (gdbarch_ecoff_reg_to_regnum_ftype) (int ecoff_regnr);
247extern int gdbarch_ecoff_reg_to_regnum (struct gdbarch *gdbarch, int ecoff_regnr);
248extern void set_gdbarch_ecoff_reg_to_regnum (struct gdbarch *gdbarch, gdbarch_ecoff_reg_to_regnum_ftype *ecoff_reg_to_regnum);
88c72b7d
AC
249
250/* Provide a default mapping from a DWARF register number to a gdb REGNUM. */
251
88c72b7d
AC
252typedef int (gdbarch_dwarf_reg_to_regnum_ftype) (int dwarf_regnr);
253extern int gdbarch_dwarf_reg_to_regnum (struct gdbarch *gdbarch, int dwarf_regnr);
254extern void set_gdbarch_dwarf_reg_to_regnum (struct gdbarch *gdbarch, gdbarch_dwarf_reg_to_regnum_ftype *dwarf_reg_to_regnum);
88c72b7d 255
77949794 256/* Convert from an sdb register number to an internal gdb register number. */
88c72b7d 257
88c72b7d
AC
258typedef int (gdbarch_sdb_reg_to_regnum_ftype) (int sdb_regnr);
259extern int gdbarch_sdb_reg_to_regnum (struct gdbarch *gdbarch, int sdb_regnr);
260extern void set_gdbarch_sdb_reg_to_regnum (struct gdbarch *gdbarch, gdbarch_sdb_reg_to_regnum_ftype *sdb_reg_to_regnum);
88c72b7d 261
88c72b7d
AC
262typedef int (gdbarch_dwarf2_reg_to_regnum_ftype) (int dwarf2_regnr);
263extern int gdbarch_dwarf2_reg_to_regnum (struct gdbarch *gdbarch, int dwarf2_regnr);
264extern void set_gdbarch_dwarf2_reg_to_regnum (struct gdbarch *gdbarch, gdbarch_dwarf2_reg_to_regnum_ftype *dwarf2_reg_to_regnum);
88c72b7d 265
fa88f677
AC
266typedef const char * (gdbarch_register_name_ftype) (int regnr);
267extern const char * gdbarch_register_name (struct gdbarch *gdbarch, int regnr);
104c1213 268extern void set_gdbarch_register_name (struct gdbarch *gdbarch, gdbarch_register_name_ftype *register_name);
0f71a2f6 269
7b9ee6a8
DJ
270/* Return the type of a register specified by the architecture. Only
271 the register cache should call this function directly; others should
272 use "register_type". */
9c04cab7
AC
273
274extern int gdbarch_register_type_p (struct gdbarch *gdbarch);
275
276typedef struct type * (gdbarch_register_type_ftype) (struct gdbarch *gdbarch, int reg_nr);
277extern struct type * gdbarch_register_type (struct gdbarch *gdbarch, int reg_nr);
278extern void set_gdbarch_register_type (struct gdbarch *gdbarch, gdbarch_register_type_ftype *register_type);
279
f3be58bc
AC
280/* See gdbint.texinfo, and PUSH_DUMMY_CALL. */
281
282extern int gdbarch_unwind_dummy_id_p (struct gdbarch *gdbarch);
283
284typedef struct frame_id (gdbarch_unwind_dummy_id_ftype) (struct gdbarch *gdbarch, struct frame_info *info);
285extern struct frame_id gdbarch_unwind_dummy_id (struct gdbarch *gdbarch, struct frame_info *info);
286extern void set_gdbarch_unwind_dummy_id (struct gdbarch *gdbarch, gdbarch_unwind_dummy_id_ftype *unwind_dummy_id);
287
f3be58bc
AC
288/* Implement UNWIND_DUMMY_ID and PUSH_DUMMY_CALL, then delete
289 DEPRECATED_FP_REGNUM. */
290
f3be58bc
AC
291extern int gdbarch_deprecated_fp_regnum (struct gdbarch *gdbarch);
292extern void set_gdbarch_deprecated_fp_regnum (struct gdbarch *gdbarch, int deprecated_fp_regnum);
5010d38b 293#if !defined (GDB_TM_FILE) && defined (DEPRECATED_FP_REGNUM)
f3be58bc
AC
294#error "Non multi-arch definition of DEPRECATED_FP_REGNUM"
295#endif
296#if !defined (DEPRECATED_FP_REGNUM)
297#define DEPRECATED_FP_REGNUM (gdbarch_deprecated_fp_regnum (current_gdbarch))
298#endif
299
a86c5fc9 300/* See gdbint.texinfo. See infcall.c. */
b8de8283
AC
301
302extern int gdbarch_push_dummy_call_p (struct gdbarch *gdbarch);
303
7d9b040b
RC
304typedef CORE_ADDR (gdbarch_push_dummy_call_ftype) (struct gdbarch *gdbarch, struct value *function, struct regcache *regcache, CORE_ADDR bp_addr, int nargs, struct value **args, CORE_ADDR sp, int struct_return, CORE_ADDR struct_addr);
305extern CORE_ADDR gdbarch_push_dummy_call (struct gdbarch *gdbarch, struct value *function, struct regcache *regcache, CORE_ADDR bp_addr, int nargs, struct value **args, CORE_ADDR sp, int struct_return, CORE_ADDR struct_addr);
b8de8283
AC
306extern void set_gdbarch_push_dummy_call (struct gdbarch *gdbarch, gdbarch_push_dummy_call_ftype *push_dummy_call);
307
b8de8283
AC
308/* DEPRECATED_REGISTER_SIZE can be deleted. */
309
310extern int gdbarch_deprecated_register_size (struct gdbarch *gdbarch);
311extern void set_gdbarch_deprecated_register_size (struct gdbarch *gdbarch, int deprecated_register_size);
5010d38b 312#if !defined (GDB_TM_FILE) && defined (DEPRECATED_REGISTER_SIZE)
b8de8283
AC
313#error "Non multi-arch definition of DEPRECATED_REGISTER_SIZE"
314#endif
315#if !defined (DEPRECATED_REGISTER_SIZE)
316#define DEPRECATED_REGISTER_SIZE (gdbarch_deprecated_register_size (current_gdbarch))
317#endif
318
b8de8283
AC
319extern int gdbarch_call_dummy_location (struct gdbarch *gdbarch);
320extern void set_gdbarch_call_dummy_location (struct gdbarch *gdbarch, int call_dummy_location);
b8de8283 321
b8de8283
AC
322extern int gdbarch_push_dummy_code_p (struct gdbarch *gdbarch);
323
e4fd649a
UW
324typedef CORE_ADDR (gdbarch_push_dummy_code_ftype) (struct gdbarch *gdbarch, CORE_ADDR sp, CORE_ADDR funaddr, int using_gcc, struct value **args, int nargs, struct type *value_type, CORE_ADDR *real_pc, CORE_ADDR *bp_addr, struct regcache *regcache);
325extern CORE_ADDR gdbarch_push_dummy_code (struct gdbarch *gdbarch, CORE_ADDR sp, CORE_ADDR funaddr, int using_gcc, struct value **args, int nargs, struct type *value_type, CORE_ADDR *real_pc, CORE_ADDR *bp_addr, struct regcache *regcache);
b8de8283
AC
326extern void set_gdbarch_push_dummy_code (struct gdbarch *gdbarch, gdbarch_push_dummy_code_ftype *push_dummy_code);
327
0ab7a791
AC
328typedef void (gdbarch_print_registers_info_ftype) (struct gdbarch *gdbarch, struct ui_file *file, struct frame_info *frame, int regnum, int all);
329extern void gdbarch_print_registers_info (struct gdbarch *gdbarch, struct ui_file *file, struct frame_info *frame, int regnum, int all);
330extern void set_gdbarch_print_registers_info (struct gdbarch *gdbarch, gdbarch_print_registers_info_ftype *print_registers_info);
331
23e3a7ac
AC
332extern int gdbarch_print_float_info_p (struct gdbarch *gdbarch);
333
334typedef void (gdbarch_print_float_info_ftype) (struct gdbarch *gdbarch, struct ui_file *file, struct frame_info *frame, const char *args);
335extern void gdbarch_print_float_info (struct gdbarch *gdbarch, struct ui_file *file, struct frame_info *frame, const char *args);
5e74b15c 336extern void set_gdbarch_print_float_info (struct gdbarch *gdbarch, gdbarch_print_float_info_ftype *print_float_info);
5e74b15c 337
e76f1f2e
AC
338extern int gdbarch_print_vector_info_p (struct gdbarch *gdbarch);
339
340typedef void (gdbarch_print_vector_info_ftype) (struct gdbarch *gdbarch, struct ui_file *file, struct frame_info *frame, const char *args);
341extern void gdbarch_print_vector_info (struct gdbarch *gdbarch, struct ui_file *file, struct frame_info *frame, const char *args);
342extern void set_gdbarch_print_vector_info (struct gdbarch *gdbarch, gdbarch_print_vector_info_ftype *print_vector_info);
343
7c7651b2
AC
344/* MAP a GDB RAW register number onto a simulator register number. See
345 also include/...-sim.h. */
346
7c7651b2
AC
347typedef int (gdbarch_register_sim_regno_ftype) (int reg_nr);
348extern int gdbarch_register_sim_regno (struct gdbarch *gdbarch, int reg_nr);
349extern void set_gdbarch_register_sim_regno (struct gdbarch *gdbarch, gdbarch_register_sim_regno_ftype *register_sim_regno);
7c7651b2 350
01fb7433
AC
351typedef int (gdbarch_cannot_fetch_register_ftype) (int regnum);
352extern int gdbarch_cannot_fetch_register (struct gdbarch *gdbarch, int regnum);
353extern void set_gdbarch_cannot_fetch_register (struct gdbarch *gdbarch, gdbarch_cannot_fetch_register_ftype *cannot_fetch_register);
01fb7433 354
01fb7433
AC
355typedef int (gdbarch_cannot_store_register_ftype) (int regnum);
356extern int gdbarch_cannot_store_register (struct gdbarch *gdbarch, int regnum);
357extern void set_gdbarch_cannot_store_register (struct gdbarch *gdbarch, gdbarch_cannot_store_register_ftype *cannot_store_register);
01fb7433 358
9df628e0
RE
359/* setjmp/longjmp support. */
360
9df628e0 361extern int gdbarch_get_longjmp_target_p (struct gdbarch *gdbarch);
0f71a2f6 362
60ade65d
UW
363typedef int (gdbarch_get_longjmp_target_ftype) (struct frame_info *frame, CORE_ADDR *pc);
364extern int gdbarch_get_longjmp_target (struct gdbarch *gdbarch, struct frame_info *frame, CORE_ADDR *pc);
b8de8283 365extern void set_gdbarch_get_longjmp_target (struct gdbarch *gdbarch, gdbarch_get_longjmp_target_ftype *get_longjmp_target);
0f71a2f6 366
104c1213
JM
367extern int gdbarch_believe_pcc_promotion (struct gdbarch *gdbarch);
368extern void set_gdbarch_believe_pcc_promotion (struct gdbarch *gdbarch, int believe_pcc_promotion);
5010d38b 369#if !defined (GDB_TM_FILE) && defined (BELIEVE_PCC_PROMOTION)
83905903
AC
370#error "Non multi-arch definition of BELIEVE_PCC_PROMOTION"
371#endif
c25083af 372#if !defined (BELIEVE_PCC_PROMOTION)
0f71a2f6
JM
373#define BELIEVE_PCC_PROMOTION (gdbarch_believe_pcc_promotion (current_gdbarch))
374#endif
0f71a2f6 375
ff2e87ac
AC
376typedef int (gdbarch_convert_register_p_ftype) (int regnum, struct type *type);
377extern int gdbarch_convert_register_p (struct gdbarch *gdbarch, int regnum, struct type *type);
13d01224 378extern void set_gdbarch_convert_register_p (struct gdbarch *gdbarch, gdbarch_convert_register_p_ftype *convert_register_p);
13d01224 379
b60c417a
AC
380typedef void (gdbarch_register_to_value_ftype) (struct frame_info *frame, int regnum, struct type *type, gdb_byte *buf);
381extern void gdbarch_register_to_value (struct gdbarch *gdbarch, struct frame_info *frame, int regnum, struct type *type, gdb_byte *buf);
13d01224 382extern void set_gdbarch_register_to_value (struct gdbarch *gdbarch, gdbarch_register_to_value_ftype *register_to_value);
13d01224 383
b60c417a
AC
384typedef void (gdbarch_value_to_register_ftype) (struct frame_info *frame, int regnum, struct type *type, const gdb_byte *buf);
385extern void gdbarch_value_to_register (struct gdbarch *gdbarch, struct frame_info *frame, int regnum, struct type *type, const gdb_byte *buf);
13d01224 386extern void set_gdbarch_value_to_register (struct gdbarch *gdbarch, gdbarch_value_to_register_ftype *value_to_register);
13d01224 387
9acbedc0
UW
388/* Construct a value representing the contents of register REGNUM in
389 frame FRAME, interpreted as type TYPE. The routine needs to
390 allocate and return a struct value with all value attributes
391 (but not the value contents) filled in. */
392
393typedef struct value * (gdbarch_value_from_register_ftype) (struct type *type, int regnum, struct frame_info *frame);
394extern struct value * gdbarch_value_from_register (struct gdbarch *gdbarch, struct type *type, int regnum, struct frame_info *frame);
395extern void set_gdbarch_value_from_register (struct gdbarch *gdbarch, gdbarch_value_from_register_ftype *value_from_register);
396
b60c417a
AC
397typedef CORE_ADDR (gdbarch_pointer_to_address_ftype) (struct type *type, const gdb_byte *buf);
398extern CORE_ADDR gdbarch_pointer_to_address (struct gdbarch *gdbarch, struct type *type, const gdb_byte *buf);
4478b372 399extern void set_gdbarch_pointer_to_address (struct gdbarch *gdbarch, gdbarch_pointer_to_address_ftype *pointer_to_address);
33489c5b 400
b60c417a
AC
401typedef void (gdbarch_address_to_pointer_ftype) (struct type *type, gdb_byte *buf, CORE_ADDR addr);
402extern void gdbarch_address_to_pointer (struct gdbarch *gdbarch, struct type *type, gdb_byte *buf, CORE_ADDR addr);
4478b372 403extern void set_gdbarch_address_to_pointer (struct gdbarch *gdbarch, gdbarch_address_to_pointer_ftype *address_to_pointer);
33489c5b 404
fc0c74b1 405extern int gdbarch_integer_to_address_p (struct gdbarch *gdbarch);
fc0c74b1 406
fc1a4b47
AC
407typedef CORE_ADDR (gdbarch_integer_to_address_ftype) (struct gdbarch *gdbarch, struct type *type, const gdb_byte *buf);
408extern CORE_ADDR gdbarch_integer_to_address (struct gdbarch *gdbarch, struct type *type, const gdb_byte *buf);
fc0c74b1 409extern void set_gdbarch_integer_to_address (struct gdbarch *gdbarch, gdbarch_integer_to_address_ftype *integer_to_address);
fc0c74b1 410
92ad9cd9
AC
411/* It has been suggested that this, well actually its predecessor,
412 should take the type/value of the function to be called and not the
750eb019
AC
413 return type. This is left as an exercise for the reader.
414 NOTE: cagney/2004-06-13: The function stack.c:return_command uses
415 the predicate with default hack to avoid calling STORE_RETURN_VALUE
416 (via legacy_return_value), when a small struct is involved. */
92ad9cd9
AC
417
418extern int gdbarch_return_value_p (struct gdbarch *gdbarch);
419
b60c417a
AC
420typedef enum return_value_convention (gdbarch_return_value_ftype) (struct gdbarch *gdbarch, struct type *valtype, struct regcache *regcache, gdb_byte *readbuf, const gdb_byte *writebuf);
421extern enum return_value_convention gdbarch_return_value (struct gdbarch *gdbarch, struct type *valtype, struct regcache *regcache, gdb_byte *readbuf, const gdb_byte *writebuf);
92ad9cd9
AC
422extern void set_gdbarch_return_value (struct gdbarch *gdbarch, gdbarch_return_value_ftype *return_value);
423
b5622e8d
AC
424/* The deprecated methods EXTRACT_RETURN_VALUE, STORE_RETURN_VALUE,
425 DEPRECATED_EXTRACT_STRUCT_VALUE_ADDRESS and
426 DEPRECATED_USE_STRUCT_CONVENTION have all been folded into
427 RETURN_VALUE. */
92ad9cd9 428
b60c417a
AC
429typedef void (gdbarch_extract_return_value_ftype) (struct type *type, struct regcache *regcache, gdb_byte *valbuf);
430extern void gdbarch_extract_return_value (struct gdbarch *gdbarch, struct type *type, struct regcache *regcache, gdb_byte *valbuf);
ebba8386 431extern void set_gdbarch_extract_return_value (struct gdbarch *gdbarch, gdbarch_extract_return_value_ftype *extract_return_value);
5010d38b 432#if !defined (GDB_TM_FILE) && defined (EXTRACT_RETURN_VALUE)
ebba8386
AC
433#error "Non multi-arch definition of EXTRACT_RETURN_VALUE"
434#endif
c25083af 435#if !defined (EXTRACT_RETURN_VALUE)
ebba8386
AC
436#define EXTRACT_RETURN_VALUE(type, regcache, valbuf) (gdbarch_extract_return_value (current_gdbarch, type, regcache, valbuf))
437#endif
ebba8386 438
b60c417a
AC
439typedef void (gdbarch_store_return_value_ftype) (struct type *type, struct regcache *regcache, const gdb_byte *valbuf);
440extern void gdbarch_store_return_value (struct gdbarch *gdbarch, struct type *type, struct regcache *regcache, const gdb_byte *valbuf);
104c1213 441extern void set_gdbarch_store_return_value (struct gdbarch *gdbarch, gdbarch_store_return_value_ftype *store_return_value);
5010d38b 442#if !defined (GDB_TM_FILE) && defined (STORE_RETURN_VALUE)
83905903
AC
443#error "Non multi-arch definition of STORE_RETURN_VALUE"
444#endif
c25083af 445#if !defined (STORE_RETURN_VALUE)
ebba8386
AC
446#define STORE_RETURN_VALUE(type, regcache, valbuf) (gdbarch_store_return_value (current_gdbarch, type, regcache, valbuf))
447#endif
ebba8386 448
b5622e8d
AC
449typedef int (gdbarch_deprecated_use_struct_convention_ftype) (int gcc_p, struct type *value_type);
450extern int gdbarch_deprecated_use_struct_convention (struct gdbarch *gdbarch, int gcc_p, struct type *value_type);
451extern void set_gdbarch_deprecated_use_struct_convention (struct gdbarch *gdbarch, gdbarch_deprecated_use_struct_convention_ftype *deprecated_use_struct_convention);
5010d38b 452#if !defined (GDB_TM_FILE) && defined (DEPRECATED_USE_STRUCT_CONVENTION)
b5622e8d 453#error "Non multi-arch definition of DEPRECATED_USE_STRUCT_CONVENTION"
92ad9cd9 454#endif
b5622e8d
AC
455#if !defined (DEPRECATED_USE_STRUCT_CONVENTION)
456#define DEPRECATED_USE_STRUCT_CONVENTION(gcc_p, value_type) (gdbarch_deprecated_use_struct_convention (current_gdbarch, gcc_p, value_type))
92ad9cd9
AC
457#endif
458
74055713
AC
459/* As of 2004-01-17 only the 32-bit SPARC ABI has been identified as an
460 ABI suitable for the implementation of a robust extract
461 struct-convention return-value address method (the sparc saves the
462 address in the callers frame). All the other cases so far examined,
463 the DEPRECATED_EXTRACT_STRUCT_VALUE implementation has been
464 erreneous - the code was incorrectly assuming that the return-value
465 address, stored in a register, was preserved across the entire
466 function call.
467 For the moment retain DEPRECATED_EXTRACT_STRUCT_VALUE as a marker of
468 the ABIs that are still to be analyzed - perhaps this should simply
469 be deleted. The commented out extract_returned_value_address method
470 is provided as a starting point for the 32-bit SPARC. It, or
471 something like it, along with changes to both infcmd.c and stack.c
472 will be needed for that case to work. NB: It is passed the callers
473 frame since it is only after the callee has returned that this
474 function is used.
57010b1c 475 M::CORE_ADDR:extract_returned_value_address:struct frame_info *caller_frame:caller_frame */
74055713
AC
476
477#if defined (DEPRECATED_EXTRACT_STRUCT_VALUE_ADDRESS)
478/* Legacy for systems yet to multi-arch DEPRECATED_EXTRACT_STRUCT_VALUE_ADDRESS */
479#if !defined (DEPRECATED_EXTRACT_STRUCT_VALUE_ADDRESS_P)
480#define DEPRECATED_EXTRACT_STRUCT_VALUE_ADDRESS_P() (1)
049ee0e4
AC
481#endif
482#endif
483
74055713 484extern int gdbarch_deprecated_extract_struct_value_address_p (struct gdbarch *gdbarch);
5010d38b 485#if !defined (GDB_TM_FILE) && defined (DEPRECATED_EXTRACT_STRUCT_VALUE_ADDRESS_P)
74055713 486#error "Non multi-arch definition of DEPRECATED_EXTRACT_STRUCT_VALUE_ADDRESS"
049ee0e4 487#endif
bceabdd8 488#if !defined (DEPRECATED_EXTRACT_STRUCT_VALUE_ADDRESS_P)
74055713 489#define DEPRECATED_EXTRACT_STRUCT_VALUE_ADDRESS_P() (gdbarch_deprecated_extract_struct_value_address_p (current_gdbarch))
049ee0e4
AC
490#endif
491
74055713
AC
492typedef CORE_ADDR (gdbarch_deprecated_extract_struct_value_address_ftype) (struct regcache *regcache);
493extern CORE_ADDR gdbarch_deprecated_extract_struct_value_address (struct gdbarch *gdbarch, struct regcache *regcache);
494extern void set_gdbarch_deprecated_extract_struct_value_address (struct gdbarch *gdbarch, gdbarch_deprecated_extract_struct_value_address_ftype *deprecated_extract_struct_value_address);
5010d38b 495#if !defined (GDB_TM_FILE) && defined (DEPRECATED_EXTRACT_STRUCT_VALUE_ADDRESS)
74055713 496#error "Non multi-arch definition of DEPRECATED_EXTRACT_STRUCT_VALUE_ADDRESS"
049ee0e4 497#endif
74055713
AC
498#if !defined (DEPRECATED_EXTRACT_STRUCT_VALUE_ADDRESS)
499#define DEPRECATED_EXTRACT_STRUCT_VALUE_ADDRESS(regcache) (gdbarch_deprecated_extract_struct_value_address (current_gdbarch, regcache))
049ee0e4 500#endif
049ee0e4 501
104c1213
JM
502typedef CORE_ADDR (gdbarch_skip_prologue_ftype) (CORE_ADDR ip);
503extern CORE_ADDR gdbarch_skip_prologue (struct gdbarch *gdbarch, CORE_ADDR ip);
504extern void set_gdbarch_skip_prologue (struct gdbarch *gdbarch, gdbarch_skip_prologue_ftype *skip_prologue);
0f71a2f6 505
104c1213
JM
506typedef int (gdbarch_inner_than_ftype) (CORE_ADDR lhs, CORE_ADDR rhs);
507extern int gdbarch_inner_than (struct gdbarch *gdbarch, CORE_ADDR lhs, CORE_ADDR rhs);
508extern void set_gdbarch_inner_than (struct gdbarch *gdbarch, gdbarch_inner_than_ftype *inner_than);
0f71a2f6 509
fc1a4b47
AC
510typedef const gdb_byte * (gdbarch_breakpoint_from_pc_ftype) (CORE_ADDR *pcptr, int *lenptr);
511extern const gdb_byte * gdbarch_breakpoint_from_pc (struct gdbarch *gdbarch, CORE_ADDR *pcptr, int *lenptr);
104c1213 512extern void set_gdbarch_breakpoint_from_pc (struct gdbarch *gdbarch, gdbarch_breakpoint_from_pc_ftype *breakpoint_from_pc);
33489c5b 513
a1131521
KB
514extern int gdbarch_adjust_breakpoint_address_p (struct gdbarch *gdbarch);
515
516typedef CORE_ADDR (gdbarch_adjust_breakpoint_address_ftype) (struct gdbarch *gdbarch, CORE_ADDR bpaddr);
517extern CORE_ADDR gdbarch_adjust_breakpoint_address (struct gdbarch *gdbarch, CORE_ADDR bpaddr);
518extern void set_gdbarch_adjust_breakpoint_address (struct gdbarch *gdbarch, gdbarch_adjust_breakpoint_address_ftype *adjust_breakpoint_address);
519
8181d85f
DJ
520typedef int (gdbarch_memory_insert_breakpoint_ftype) (struct bp_target_info *bp_tgt);
521extern int gdbarch_memory_insert_breakpoint (struct gdbarch *gdbarch, struct bp_target_info *bp_tgt);
917317f4 522extern void set_gdbarch_memory_insert_breakpoint (struct gdbarch *gdbarch, gdbarch_memory_insert_breakpoint_ftype *memory_insert_breakpoint);
33489c5b 523
8181d85f
DJ
524typedef int (gdbarch_memory_remove_breakpoint_ftype) (struct bp_target_info *bp_tgt);
525extern int gdbarch_memory_remove_breakpoint (struct gdbarch *gdbarch, struct bp_target_info *bp_tgt);
917317f4 526extern void set_gdbarch_memory_remove_breakpoint (struct gdbarch *gdbarch, gdbarch_memory_remove_breakpoint_ftype *memory_remove_breakpoint);
917317f4 527
104c1213
JM
528extern CORE_ADDR gdbarch_decr_pc_after_break (struct gdbarch *gdbarch);
529extern void set_gdbarch_decr_pc_after_break (struct gdbarch *gdbarch, CORE_ADDR decr_pc_after_break);
0f71a2f6 530
782263ab
AC
531/* A function can be addressed by either it's "pointer" (possibly a
532 descriptor address) or "entry point" (first executable instruction).
533 The method "convert_from_func_ptr_addr" converting the former to the
534 latter. DEPRECATED_FUNCTION_START_OFFSET is being used to implement
535 a simplified subset of that functionality - the function's address
536 corresponds to the "function pointer" and the function's start
537 corresponds to the "function entry point" - and hence is redundant. */
538
539extern CORE_ADDR gdbarch_deprecated_function_start_offset (struct gdbarch *gdbarch);
540extern void set_gdbarch_deprecated_function_start_offset (struct gdbarch *gdbarch, CORE_ADDR deprecated_function_start_offset);
5010d38b 541#if !defined (GDB_TM_FILE) && defined (DEPRECATED_FUNCTION_START_OFFSET)
782263ab
AC
542#error "Non multi-arch definition of DEPRECATED_FUNCTION_START_OFFSET"
543#endif
544#if !defined (DEPRECATED_FUNCTION_START_OFFSET)
545#define DEPRECATED_FUNCTION_START_OFFSET (gdbarch_deprecated_function_start_offset (current_gdbarch))
0f71a2f6 546#endif
0f71a2f6 547
123dc839
DJ
548/* Return the remote protocol register number associated with this
549 register. Normally the identity mapping. */
550
551typedef int (gdbarch_remote_register_number_ftype) (struct gdbarch *gdbarch, int regno);
552extern int gdbarch_remote_register_number (struct gdbarch *gdbarch, int regno);
553extern void set_gdbarch_remote_register_number (struct gdbarch *gdbarch, gdbarch_remote_register_number_ftype *remote_register_number);
554
b2756930
KB
555/* Fetch the target specific address used to represent a load module. */
556
b2756930 557extern int gdbarch_fetch_tls_load_module_address_p (struct gdbarch *gdbarch);
b2756930
KB
558
559typedef CORE_ADDR (gdbarch_fetch_tls_load_module_address_ftype) (struct objfile *objfile);
560extern CORE_ADDR gdbarch_fetch_tls_load_module_address (struct gdbarch *gdbarch, struct objfile *objfile);
561extern void set_gdbarch_fetch_tls_load_module_address (struct gdbarch *gdbarch, gdbarch_fetch_tls_load_module_address_ftype *fetch_tls_load_module_address);
b2756930 562
104c1213
JM
563extern CORE_ADDR gdbarch_frame_args_skip (struct gdbarch *gdbarch);
564extern void set_gdbarch_frame_args_skip (struct gdbarch *gdbarch, CORE_ADDR frame_args_skip);
0f71a2f6 565
12cc2063
AC
566extern int gdbarch_unwind_pc_p (struct gdbarch *gdbarch);
567
568typedef CORE_ADDR (gdbarch_unwind_pc_ftype) (struct gdbarch *gdbarch, struct frame_info *next_frame);
569extern CORE_ADDR gdbarch_unwind_pc (struct gdbarch *gdbarch, struct frame_info *next_frame);
570extern void set_gdbarch_unwind_pc (struct gdbarch *gdbarch, gdbarch_unwind_pc_ftype *unwind_pc);
571
a9e5fdc2
AC
572extern int gdbarch_unwind_sp_p (struct gdbarch *gdbarch);
573
574typedef CORE_ADDR (gdbarch_unwind_sp_ftype) (struct gdbarch *gdbarch, struct frame_info *next_frame);
575extern CORE_ADDR gdbarch_unwind_sp (struct gdbarch *gdbarch, struct frame_info *next_frame);
576extern void set_gdbarch_unwind_sp (struct gdbarch *gdbarch, gdbarch_unwind_sp_ftype *unwind_sp);
577
42efa47a
AC
578/* DEPRECATED_FRAME_LOCALS_ADDRESS as been replaced by the per-frame
579 frame-base. Enable frame-base before frame-unwind. */
580
983a287a 581extern int gdbarch_frame_num_args_p (struct gdbarch *gdbarch);
983a287a 582
104c1213
JM
583typedef int (gdbarch_frame_num_args_ftype) (struct frame_info *frame);
584extern int gdbarch_frame_num_args (struct gdbarch *gdbarch, struct frame_info *frame);
585extern void set_gdbarch_frame_num_args (struct gdbarch *gdbarch, gdbarch_frame_num_args_ftype *frame_num_args);
0f71a2f6 586
dc604539
AC
587extern int gdbarch_frame_align_p (struct gdbarch *gdbarch);
588
589typedef CORE_ADDR (gdbarch_frame_align_ftype) (struct gdbarch *gdbarch, CORE_ADDR address);
590extern CORE_ADDR gdbarch_frame_align (struct gdbarch *gdbarch, CORE_ADDR address);
591extern void set_gdbarch_frame_align (struct gdbarch *gdbarch, gdbarch_frame_align_ftype *frame_align);
592
192cb3d4
MK
593/* DEPRECATED_REG_STRUCT_HAS_ADDR has been replaced by
594 stabs_argument_has_addr. */
595
88d89dbb
MK
596#if defined (DEPRECATED_REG_STRUCT_HAS_ADDR)
597/* Legacy for systems yet to multi-arch DEPRECATED_REG_STRUCT_HAS_ADDR */
598#if !defined (DEPRECATED_REG_STRUCT_HAS_ADDR_P)
599#define DEPRECATED_REG_STRUCT_HAS_ADDR_P() (1)
d03e67c9 600#endif
eee30e78 601#endif
d03e67c9 602
88d89dbb 603extern int gdbarch_deprecated_reg_struct_has_addr_p (struct gdbarch *gdbarch);
5010d38b 604#if !defined (GDB_TM_FILE) && defined (DEPRECATED_REG_STRUCT_HAS_ADDR_P)
88d89dbb 605#error "Non multi-arch definition of DEPRECATED_REG_STRUCT_HAS_ADDR"
83905903 606#endif
bceabdd8 607#if !defined (DEPRECATED_REG_STRUCT_HAS_ADDR_P)
88d89dbb 608#define DEPRECATED_REG_STRUCT_HAS_ADDR_P() (gdbarch_deprecated_reg_struct_has_addr_p (current_gdbarch))
d03e67c9
AC
609#endif
610
88d89dbb
MK
611typedef int (gdbarch_deprecated_reg_struct_has_addr_ftype) (int gcc_p, struct type *type);
612extern int gdbarch_deprecated_reg_struct_has_addr (struct gdbarch *gdbarch, int gcc_p, struct type *type);
613extern void set_gdbarch_deprecated_reg_struct_has_addr (struct gdbarch *gdbarch, gdbarch_deprecated_reg_struct_has_addr_ftype *deprecated_reg_struct_has_addr);
5010d38b 614#if !defined (GDB_TM_FILE) && defined (DEPRECATED_REG_STRUCT_HAS_ADDR)
88d89dbb 615#error "Non multi-arch definition of DEPRECATED_REG_STRUCT_HAS_ADDR"
83905903 616#endif
88d89dbb
MK
617#if !defined (DEPRECATED_REG_STRUCT_HAS_ADDR)
618#define DEPRECATED_REG_STRUCT_HAS_ADDR(gcc_p, type) (gdbarch_deprecated_reg_struct_has_addr (current_gdbarch, gcc_p, type))
d03e67c9
AC
619#endif
620
192cb3d4
MK
621typedef int (gdbarch_stabs_argument_has_addr_ftype) (struct gdbarch *gdbarch, struct type *type);
622extern int gdbarch_stabs_argument_has_addr (struct gdbarch *gdbarch, struct type *type);
623extern void set_gdbarch_stabs_argument_has_addr (struct gdbarch *gdbarch, gdbarch_stabs_argument_has_addr_ftype *stabs_argument_has_addr);
624
8b148df9
AC
625extern int gdbarch_frame_red_zone_size (struct gdbarch *gdbarch);
626extern void set_gdbarch_frame_red_zone_size (struct gdbarch *gdbarch, int frame_red_zone_size);
8b148df9 627
e2d0e7eb
AC
628typedef CORE_ADDR (gdbarch_convert_from_func_ptr_addr_ftype) (struct gdbarch *gdbarch, CORE_ADDR addr, struct target_ops *targ);
629extern CORE_ADDR gdbarch_convert_from_func_ptr_addr (struct gdbarch *gdbarch, CORE_ADDR addr, struct target_ops *targ);
f517ea4e 630extern void set_gdbarch_convert_from_func_ptr_addr (struct gdbarch *gdbarch, gdbarch_convert_from_func_ptr_addr_ftype *convert_from_func_ptr_addr);
f517ea4e 631
875e1767
AC
632/* On some machines there are bits in addresses which are not really
633 part of the address, but are used by the kernel, the hardware, etc.
bf6ae464 634 for special purposes. gdbarch_addr_bits_remove takes out any such bits so
875e1767
AC
635 we get a "real" address such as one would find in a symbol table.
636 This is used only for addresses of instructions, and even then I'm
637 not sure it's used in all contexts. It exists to deal with there
638 being a few stray bits in the PC which would mislead us, not as some
639 sort of generic thing to handle alignment or segmentation (it's
640 possible it should be in TARGET_READ_PC instead). */
641
875e1767
AC
642typedef CORE_ADDR (gdbarch_addr_bits_remove_ftype) (CORE_ADDR addr);
643extern CORE_ADDR gdbarch_addr_bits_remove (struct gdbarch *gdbarch, CORE_ADDR addr);
644extern void set_gdbarch_addr_bits_remove (struct gdbarch *gdbarch, gdbarch_addr_bits_remove_ftype *addr_bits_remove);
875e1767 645
260edbc2 646/* It is not at all clear why gdbarch_smash_text_address is not folded into
bf6ae464 647 gdbarch_addr_bits_remove. */
181c1381 648
181c1381
RE
649typedef CORE_ADDR (gdbarch_smash_text_address_ftype) (CORE_ADDR addr);
650extern CORE_ADDR gdbarch_smash_text_address (struct gdbarch *gdbarch, CORE_ADDR addr);
651extern void set_gdbarch_smash_text_address (struct gdbarch *gdbarch, gdbarch_smash_text_address_ftype *smash_text_address);
181c1381 652
e6590a1b
UW
653/* FIXME/cagney/2001-01-18: This should be split in two. A target method that
654 indicates if the target needs software single step. An ISA method to
655 implement it.
64c4637f 656
e6590a1b
UW
657 FIXME/cagney/2001-01-18: This should be replaced with something that inserts
658 breakpoints using the breakpoint system instead of blatting memory directly
659 (as with rs6000).
64c4637f 660
e6590a1b
UW
661 FIXME/cagney/2001-01-18: The logic is backwards. It should be asking if the
662 target can single step. If not, then implement single step using breakpoints.
663
664 A return value of 1 means that the software_single_step breakpoints
665 were inserted; 0 means they were not. */
64c4637f
AC
666
667#if defined (SOFTWARE_SINGLE_STEP)
668/* Legacy for systems yet to multi-arch SOFTWARE_SINGLE_STEP */
669#if !defined (SOFTWARE_SINGLE_STEP_P)
670#define SOFTWARE_SINGLE_STEP_P() (1)
671#endif
672#endif
673
64c4637f 674extern int gdbarch_software_single_step_p (struct gdbarch *gdbarch);
5010d38b 675#if !defined (GDB_TM_FILE) && defined (SOFTWARE_SINGLE_STEP_P)
83905903
AC
676#error "Non multi-arch definition of SOFTWARE_SINGLE_STEP"
677#endif
bceabdd8 678#if !defined (SOFTWARE_SINGLE_STEP_P)
64c4637f
AC
679#define SOFTWARE_SINGLE_STEP_P() (gdbarch_software_single_step_p (current_gdbarch))
680#endif
681
0b1b3e42
UW
682typedef int (gdbarch_software_single_step_ftype) (struct frame_info *frame);
683extern int gdbarch_software_single_step (struct gdbarch *gdbarch, struct frame_info *frame);
64c4637f 684extern void set_gdbarch_software_single_step (struct gdbarch *gdbarch, gdbarch_software_single_step_ftype *software_single_step);
5010d38b 685#if !defined (GDB_TM_FILE) && defined (SOFTWARE_SINGLE_STEP)
83905903
AC
686#error "Non multi-arch definition of SOFTWARE_SINGLE_STEP"
687#endif
c25083af 688#if !defined (SOFTWARE_SINGLE_STEP)
0b1b3e42 689#define SOFTWARE_SINGLE_STEP(frame) (gdbarch_software_single_step (current_gdbarch, frame))
64c4637f 690#endif
64c4637f 691
3352ef37
AC
692/* Return non-zero if the processor is executing a delay slot and a
693 further single-step is needed before the instruction finishes. */
694
695extern int gdbarch_single_step_through_delay_p (struct gdbarch *gdbarch);
696
697typedef int (gdbarch_single_step_through_delay_ftype) (struct gdbarch *gdbarch, struct frame_info *frame);
698extern int gdbarch_single_step_through_delay (struct gdbarch *gdbarch, struct frame_info *frame);
699extern void set_gdbarch_single_step_through_delay (struct gdbarch *gdbarch, gdbarch_single_step_through_delay_ftype *single_step_through_delay);
700
f6c40618 701/* FIXME: cagney/2003-08-28: Need to find a better way of selecting the
b2fa5097 702 disassembler. Perhaps objdump can handle it? */
f6c40618 703
a89aa300
AC
704typedef int (gdbarch_print_insn_ftype) (bfd_vma vma, struct disassemble_info *info);
705extern int gdbarch_print_insn (struct gdbarch *gdbarch, bfd_vma vma, struct disassemble_info *info);
2bf0cb65 706extern void set_gdbarch_print_insn (struct gdbarch *gdbarch, gdbarch_print_insn_ftype *print_insn);
5010d38b 707#if !defined (GDB_TM_FILE) && defined (TARGET_PRINT_INSN)
2bf0cb65
EZ
708#error "Non multi-arch definition of TARGET_PRINT_INSN"
709#endif
c25083af 710#if !defined (TARGET_PRINT_INSN)
2bf0cb65
EZ
711#define TARGET_PRINT_INSN(vma, info) (gdbarch_print_insn (current_gdbarch, vma, info))
712#endif
2bf0cb65 713
52f729a7
UW
714typedef CORE_ADDR (gdbarch_skip_trampoline_code_ftype) (struct frame_info *frame, CORE_ADDR pc);
715extern CORE_ADDR gdbarch_skip_trampoline_code (struct gdbarch *gdbarch, struct frame_info *frame, CORE_ADDR pc);
bdcd319a 716extern void set_gdbarch_skip_trampoline_code (struct gdbarch *gdbarch, gdbarch_skip_trampoline_code_ftype *skip_trampoline_code);
bdcd319a 717
dea0c52f
MK
718/* If IN_SOLIB_DYNSYM_RESOLVE_CODE returns true, and SKIP_SOLIB_RESOLVER
719 evaluates non-zero, this is the address where the debugger will place
720 a step-resume breakpoint to get us past the dynamic linker. */
721
4c8c40e6 722typedef CORE_ADDR (gdbarch_skip_solib_resolver_ftype) (struct gdbarch *gdbarch, CORE_ADDR pc);
dea0c52f
MK
723extern CORE_ADDR gdbarch_skip_solib_resolver (struct gdbarch *gdbarch, CORE_ADDR pc);
724extern void set_gdbarch_skip_solib_resolver (struct gdbarch *gdbarch, gdbarch_skip_solib_resolver_ftype *skip_solib_resolver);
dea0c52f 725
d50355b6
MS
726/* Some systems also have trampoline code for returning from shared libs. */
727
d50355b6
MS
728typedef int (gdbarch_in_solib_return_trampoline_ftype) (CORE_ADDR pc, char *name);
729extern int gdbarch_in_solib_return_trampoline (struct gdbarch *gdbarch, CORE_ADDR pc, char *name);
730extern void set_gdbarch_in_solib_return_trampoline (struct gdbarch *gdbarch, gdbarch_in_solib_return_trampoline_ftype *in_solib_return_trampoline);
d50355b6 731
c12260ac
CV
732/* A target might have problems with watchpoints as soon as the stack
733 frame of the current function has been destroyed. This mostly happens
734 as the first action in a funtion's epilogue. in_function_epilogue_p()
735 is defined to return a non-zero value if either the given addr is one
736 instruction after the stack destroying instruction up to the trailing
737 return instruction or if we can figure out that the stack frame has
738 already been invalidated regardless of the value of addr. Targets
739 which don't suffer from that problem could just let this functionality
740 untouched. */
741
742typedef int (gdbarch_in_function_epilogue_p_ftype) (struct gdbarch *gdbarch, CORE_ADDR addr);
743extern int gdbarch_in_function_epilogue_p (struct gdbarch *gdbarch, CORE_ADDR addr);
744extern void set_gdbarch_in_function_epilogue_p (struct gdbarch *gdbarch, gdbarch_in_function_epilogue_p_ftype *in_function_epilogue_p);
745
552c04a7
TT
746/* Given a vector of command-line arguments, return a newly allocated
747 string which, when passed to the create_inferior function, will be
748 parsed (on Unix systems, by the shell) to yield the same vector.
749 This function should call error() if the argument vector is not
750 representable for this target or if this target does not support
751 command-line arguments.
752 ARGC is the number of elements in the vector.
753 ARGV is an array of strings, one per argument. */
754
755typedef char * (gdbarch_construct_inferior_arguments_ftype) (struct gdbarch *gdbarch, int argc, char **argv);
756extern char * gdbarch_construct_inferior_arguments (struct gdbarch *gdbarch, int argc, char **argv);
757extern void set_gdbarch_construct_inferior_arguments (struct gdbarch *gdbarch, gdbarch_construct_inferior_arguments_ftype *construct_inferior_arguments);
758
a2cf933a
EZ
759typedef void (gdbarch_elf_make_msymbol_special_ftype) (asymbol *sym, struct minimal_symbol *msym);
760extern void gdbarch_elf_make_msymbol_special (struct gdbarch *gdbarch, asymbol *sym, struct minimal_symbol *msym);
761extern void set_gdbarch_elf_make_msymbol_special (struct gdbarch *gdbarch, gdbarch_elf_make_msymbol_special_ftype *elf_make_msymbol_special);
a2cf933a 762
a2cf933a
EZ
763typedef void (gdbarch_coff_make_msymbol_special_ftype) (int val, struct minimal_symbol *msym);
764extern void gdbarch_coff_make_msymbol_special (struct gdbarch *gdbarch, int val, struct minimal_symbol *msym);
765extern void set_gdbarch_coff_make_msymbol_special (struct gdbarch *gdbarch, gdbarch_coff_make_msymbol_special_ftype *coff_make_msymbol_special);
a2cf933a 766
5720643c
JB
767extern const char * gdbarch_name_of_malloc (struct gdbarch *gdbarch);
768extern void set_gdbarch_name_of_malloc (struct gdbarch *gdbarch, const char * name_of_malloc);
5720643c 769
c4ed33b9
AC
770extern int gdbarch_cannot_step_breakpoint (struct gdbarch *gdbarch);
771extern void set_gdbarch_cannot_step_breakpoint (struct gdbarch *gdbarch, int cannot_step_breakpoint);
c4ed33b9 772
f74fa174
MM
773extern int gdbarch_have_nonsteppable_watchpoint (struct gdbarch *gdbarch);
774extern void set_gdbarch_have_nonsteppable_watchpoint (struct gdbarch *gdbarch, int have_nonsteppable_watchpoint);
f74fa174 775
8b2dbe47 776extern int gdbarch_address_class_type_flags_p (struct gdbarch *gdbarch);
8b2dbe47 777
8b2dbe47
KB
778typedef int (gdbarch_address_class_type_flags_ftype) (int byte_size, int dwarf2_addr_class);
779extern int gdbarch_address_class_type_flags (struct gdbarch *gdbarch, int byte_size, int dwarf2_addr_class);
780extern void set_gdbarch_address_class_type_flags (struct gdbarch *gdbarch, gdbarch_address_class_type_flags_ftype *address_class_type_flags);
8b2dbe47 781
8b2dbe47 782extern int gdbarch_address_class_type_flags_to_name_p (struct gdbarch *gdbarch);
8b2dbe47 783
321432c0
KB
784typedef const char * (gdbarch_address_class_type_flags_to_name_ftype) (struct gdbarch *gdbarch, int type_flags);
785extern const char * gdbarch_address_class_type_flags_to_name (struct gdbarch *gdbarch, int type_flags);
8b2dbe47 786extern void set_gdbarch_address_class_type_flags_to_name (struct gdbarch *gdbarch, gdbarch_address_class_type_flags_to_name_ftype *address_class_type_flags_to_name);
8b2dbe47
KB
787
788extern int gdbarch_address_class_name_to_type_flags_p (struct gdbarch *gdbarch);
8b2dbe47 789
321432c0
KB
790typedef int (gdbarch_address_class_name_to_type_flags_ftype) (struct gdbarch *gdbarch, const char *name, int *type_flags_ptr);
791extern int gdbarch_address_class_name_to_type_flags (struct gdbarch *gdbarch, const char *name, int *type_flags_ptr);
8b2dbe47 792extern void set_gdbarch_address_class_name_to_type_flags (struct gdbarch *gdbarch, gdbarch_address_class_name_to_type_flags_ftype *address_class_name_to_type_flags);
8b2dbe47 793
b59ff9d5
AC
794/* Is a register in a group */
795
796typedef int (gdbarch_register_reggroup_p_ftype) (struct gdbarch *gdbarch, int regnum, struct reggroup *reggroup);
797extern int gdbarch_register_reggroup_p (struct gdbarch *gdbarch, int regnum, struct reggroup *reggroup);
798extern void set_gdbarch_register_reggroup_p (struct gdbarch *gdbarch, gdbarch_register_reggroup_p_ftype *register_reggroup_p);
799
2e092625 800/* Fetch the pointer to the ith function argument. */
143985b7 801
143985b7 802extern int gdbarch_fetch_pointer_argument_p (struct gdbarch *gdbarch);
143985b7 803
143985b7
AF
804typedef CORE_ADDR (gdbarch_fetch_pointer_argument_ftype) (struct frame_info *frame, int argi, struct type *type);
805extern CORE_ADDR gdbarch_fetch_pointer_argument (struct gdbarch *gdbarch, struct frame_info *frame, int argi, struct type *type);
806extern void set_gdbarch_fetch_pointer_argument (struct gdbarch *gdbarch, gdbarch_fetch_pointer_argument_ftype *fetch_pointer_argument);
143985b7 807
6ce6d90f
MK
808/* Return the appropriate register set for a core file section with
809 name SECT_NAME and size SECT_SIZE. */
810
811extern int gdbarch_regset_from_core_section_p (struct gdbarch *gdbarch);
812
813typedef const struct regset * (gdbarch_regset_from_core_section_ftype) (struct gdbarch *gdbarch, const char *sect_name, size_t sect_size);
814extern const struct regset * gdbarch_regset_from_core_section (struct gdbarch *gdbarch, const char *sect_name, size_t sect_size);
815extern void set_gdbarch_regset_from_core_section (struct gdbarch *gdbarch, gdbarch_regset_from_core_section_ftype *regset_from_core_section);
816
0d5de010
DJ
817/* If the elements of C++ vtables are in-place function descriptors rather
818 than normal function pointers (which may point to code or a descriptor),
819 set this to one. */
820
821extern int gdbarch_vtable_function_descriptors (struct gdbarch *gdbarch);
822extern void set_gdbarch_vtable_function_descriptors (struct gdbarch *gdbarch, int vtable_function_descriptors);
823
824/* Set if the least significant bit of the delta is used instead of the least
825 significant bit of the pfn for pointers to virtual member functions. */
826
827extern int gdbarch_vbit_in_delta (struct gdbarch *gdbarch);
828extern void set_gdbarch_vbit_in_delta (struct gdbarch *gdbarch, int vbit_in_delta);
829
6d350bb5
UW
830/* Advance PC to next instruction in order to skip a permanent breakpoint. */
831
832extern int gdbarch_skip_permanent_breakpoint_p (struct gdbarch *gdbarch);
833
834typedef void (gdbarch_skip_permanent_breakpoint_ftype) (struct regcache *regcache);
835extern void gdbarch_skip_permanent_breakpoint (struct gdbarch *gdbarch, struct regcache *regcache);
836extern void set_gdbarch_skip_permanent_breakpoint (struct gdbarch *gdbarch, gdbarch_skip_permanent_breakpoint_ftype *skip_permanent_breakpoint);
837
1c772458
UW
838/* Refresh overlay mapped state for section OSECT. */
839
840extern int gdbarch_overlay_update_p (struct gdbarch *gdbarch);
841
842typedef void (gdbarch_overlay_update_ftype) (struct obj_section *osect);
843extern void gdbarch_overlay_update (struct gdbarch *gdbarch, struct obj_section *osect);
844extern void set_gdbarch_overlay_update (struct gdbarch *gdbarch, gdbarch_overlay_update_ftype *overlay_update);
845
104c1213 846extern struct gdbarch_tdep *gdbarch_tdep (struct gdbarch *gdbarch);
0f71a2f6
JM
847
848
849/* Mechanism for co-ordinating the selection of a specific
850 architecture.
851
852 GDB targets (*-tdep.c) can register an interest in a specific
853 architecture. Other GDB components can register a need to maintain
854 per-architecture data.
855
856 The mechanisms below ensures that there is only a loose connection
857 between the set-architecture command and the various GDB
99e7bb18 858 components. Each component can independently register their need
0f71a2f6
JM
859 to maintain architecture specific data with gdbarch.
860
861 Pragmatics:
862
863 Previously, a single TARGET_ARCHITECTURE_HOOK was provided. It
864 didn't scale.
865
866 The more traditional mega-struct containing architecture specific
867 data for all the various GDB components was also considered. Since
99e7bb18 868 GDB is built from a variable number of (fairly independent)
0f71a2f6
JM
869 components it was determined that the global aproach was not
870 applicable. */
871
872
873/* Register a new architectural family with GDB.
874
875 Register support for the specified ARCHITECTURE with GDB. When
876 gdbarch determines that the specified architecture has been
877 selected, the corresponding INIT function is called.
878
879 --
880
881 The INIT function takes two parameters: INFO which contains the
882 information available to gdbarch about the (possibly new)
883 architecture; ARCHES which is a list of the previously created
884 ``struct gdbarch'' for this architecture.
885
0f79675b 886 The INFO parameter is, as far as possible, be pre-initialized with
7a107747 887 information obtained from INFO.ABFD or the global defaults.
0f79675b
AC
888
889 The ARCHES parameter is a linked list (sorted most recently used)
890 of all the previously created architures for this architecture
891 family. The (possibly NULL) ARCHES->gdbarch can used to access
892 values from the previously selected architecture for this
893 architecture family. The global ``current_gdbarch'' shall not be
894 used.
0f71a2f6
JM
895
896 The INIT function shall return any of: NULL - indicating that it
ec3d358c 897 doesn't recognize the selected architecture; an existing ``struct
0f71a2f6
JM
898 gdbarch'' from the ARCHES list - indicating that the new
899 architecture is just a synonym for an earlier architecture (see
900 gdbarch_list_lookup_by_info()); a newly created ``struct gdbarch''
4b9b3959
AC
901 - that describes the selected architecture (see gdbarch_alloc()).
902
903 The DUMP_TDEP function shall print out all target specific values.
904 Care should be taken to ensure that the function works in both the
905 multi-arch and non- multi-arch cases. */
0f71a2f6 906
adf40b2e
JM
907struct gdbarch_list
908{
909 struct gdbarch *gdbarch;
910 struct gdbarch_list *next;
911};
0f71a2f6 912
adf40b2e
JM
913struct gdbarch_info
914{
adf40b2e
JM
915 /* Use default: NULL (ZERO). */
916 const struct bfd_arch_info *bfd_arch_info;
0f71a2f6 917
428721aa 918 /* Use default: BFD_ENDIAN_UNKNOWN (NB: is not ZERO). */
adf40b2e 919 int byte_order;
0f71a2f6 920
adf40b2e
JM
921 /* Use default: NULL (ZERO). */
922 bfd *abfd;
0f71a2f6 923
adf40b2e
JM
924 /* Use default: NULL (ZERO). */
925 struct gdbarch_tdep_info *tdep_info;
4be87837
DJ
926
927 /* Use default: GDB_OSABI_UNINITIALIZED (-1). */
928 enum gdb_osabi osabi;
424163ea
DJ
929
930 /* Use default: NULL (ZERO). */
931 const struct target_desc *target_desc;
adf40b2e 932};
0f71a2f6 933
104c1213 934typedef struct gdbarch *(gdbarch_init_ftype) (struct gdbarch_info info, struct gdbarch_list *arches);
4b9b3959 935typedef void (gdbarch_dump_tdep_ftype) (struct gdbarch *gdbarch, struct ui_file *file);
0f71a2f6 936
4b9b3959 937/* DEPRECATED - use gdbarch_register() */
104c1213 938extern void register_gdbarch_init (enum bfd_architecture architecture, gdbarch_init_ftype *);
0f71a2f6 939
4b9b3959
AC
940extern void gdbarch_register (enum bfd_architecture architecture,
941 gdbarch_init_ftype *,
942 gdbarch_dump_tdep_ftype *);
943
0f71a2f6 944
b4a20239
AC
945/* Return a freshly allocated, NULL terminated, array of the valid
946 architecture names. Since architectures are registered during the
947 _initialize phase this function only returns useful information
948 once initialization has been completed. */
949
950extern const char **gdbarch_printable_names (void);
951
952
0f71a2f6
JM
953/* Helper function. Search the list of ARCHES for a GDBARCH that
954 matches the information provided by INFO. */
955
424163ea 956extern struct gdbarch_list *gdbarch_list_lookup_by_info (struct gdbarch_list *arches, const struct gdbarch_info *info);
0f71a2f6
JM
957
958
959/* Helper function. Create a preliminary ``struct gdbarch''. Perform
424163ea 960 basic initialization using values obtained from the INFO and TDEP
0f71a2f6
JM
961 parameters. set_gdbarch_*() functions are called to complete the
962 initialization of the object. */
963
104c1213 964extern struct gdbarch *gdbarch_alloc (const struct gdbarch_info *info, struct gdbarch_tdep *tdep);
0f71a2f6
JM
965
966
4b9b3959
AC
967/* Helper function. Free a partially-constructed ``struct gdbarch''.
968 It is assumed that the caller freeds the ``struct
969 gdbarch_tdep''. */
970
058f20d5
JB
971extern void gdbarch_free (struct gdbarch *);
972
973
aebd7893
AC
974/* Helper function. Allocate memory from the ``struct gdbarch''
975 obstack. The memory is freed when the corresponding architecture
976 is also freed. */
977
978extern void *gdbarch_obstack_zalloc (struct gdbarch *gdbarch, long size);
979#define GDBARCH_OBSTACK_CALLOC(GDBARCH, NR, TYPE) ((TYPE *) gdbarch_obstack_zalloc ((GDBARCH), (NR) * sizeof (TYPE)))
980#define GDBARCH_OBSTACK_ZALLOC(GDBARCH, TYPE) ((TYPE *) gdbarch_obstack_zalloc ((GDBARCH), sizeof (TYPE)))
981
982
b732d07d 983/* Helper function. Force an update of the current architecture.
0f71a2f6 984
b732d07d
AC
985 The actual architecture selected is determined by INFO, ``(gdb) set
986 architecture'' et.al., the existing architecture and BFD's default
987 architecture. INFO should be initialized to zero and then selected
988 fields should be updated.
0f71a2f6 989
16f33e29
AC
990 Returns non-zero if the update succeeds */
991
992extern int gdbarch_update_p (struct gdbarch_info info);
0f71a2f6
JM
993
994
ebdba546
AC
995/* Helper function. Find an architecture matching info.
996
997 INFO should be initialized using gdbarch_info_init, relevant fields
998 set, and then finished using gdbarch_info_fill.
999
1000 Returns the corresponding architecture, or NULL if no matching
1001 architecture was found. "current_gdbarch" is not updated. */
1002
1003extern struct gdbarch *gdbarch_find_by_info (struct gdbarch_info info);
1004
1005
1006/* Helper function. Set the global "current_gdbarch" to "gdbarch".
1007
1008 FIXME: kettenis/20031124: Of the functions that follow, only
1009 gdbarch_from_bfd is supposed to survive. The others will
1010 dissappear since in the future GDB will (hopefully) be truly
1011 multi-arch. However, for now we're still stuck with the concept of
1012 a single active architecture. */
1013
1014extern void deprecated_current_gdbarch_select_hack (struct gdbarch *gdbarch);
1015
0f71a2f6
JM
1016
1017/* Register per-architecture data-pointer.
1018
1019 Reserve space for a per-architecture data-pointer. An identifier
1020 for the reserved data-pointer is returned. That identifer should
95160752 1021 be saved in a local static variable.
0f71a2f6 1022
fcc1c85c
AC
1023 Memory for the per-architecture data shall be allocated using
1024 gdbarch_obstack_zalloc. That memory will be deleted when the
1025 corresponding architecture object is deleted.
0f71a2f6 1026
95160752
AC
1027 When a previously created architecture is re-selected, the
1028 per-architecture data-pointer for that previous architecture is
76860b5f 1029 restored. INIT() is not re-called.
0f71a2f6
JM
1030
1031 Multiple registrarants for any architecture are allowed (and
1032 strongly encouraged). */
1033
95160752 1034struct gdbarch_data;
0f71a2f6 1035
030f20e1
AC
1036typedef void *(gdbarch_data_pre_init_ftype) (struct obstack *obstack);
1037extern struct gdbarch_data *gdbarch_data_register_pre_init (gdbarch_data_pre_init_ftype *init);
1038typedef void *(gdbarch_data_post_init_ftype) (struct gdbarch *gdbarch);
1039extern struct gdbarch_data *gdbarch_data_register_post_init (gdbarch_data_post_init_ftype *init);
1040extern void deprecated_set_gdbarch_data (struct gdbarch *gdbarch,
1041 struct gdbarch_data *data,
1042 void *pointer);
0f71a2f6 1043
451fbdda 1044extern void *gdbarch_data (struct gdbarch *gdbarch, struct gdbarch_data *);
0f71a2f6
JM
1045
1046
a8cf2722 1047
0f71a2f6
JM
1048/* Register per-architecture memory region.
1049
1050 Provide a memory-region swap mechanism. Per-architecture memory
1051 region are created. These memory regions are swapped whenever the
1052 architecture is changed. For a new architecture, the memory region
1053 is initialized with zero (0) and the INIT function is called.
1054
1055 Memory regions are swapped / initialized in the order that they are
1056 registered. NULL DATA and/or INIT values can be specified.
1057
030f20e1 1058 New code should use gdbarch_data_register_*(). */
0f71a2f6 1059
104c1213 1060typedef void (gdbarch_swap_ftype) (void);
046a4708
AC
1061extern void deprecated_register_gdbarch_swap (void *data, unsigned long size, gdbarch_swap_ftype *init);
1062#define DEPRECATED_REGISTER_GDBARCH_SWAP(VAR) deprecated_register_gdbarch_swap (&(VAR), sizeof ((VAR)), NULL)
0f71a2f6
JM
1063
1064
1065
99e7bb18 1066/* Set the dynamic target-system-dependent parameters (architecture,
c906108c
SS
1067 byte-order, ...) using information found in the BFD */
1068
104c1213 1069extern void set_gdbarch_from_file (bfd *);
c906108c
SS
1070
1071
e514a9d6
JM
1072/* Initialize the current architecture to the "first" one we find on
1073 our list. */
1074
1075extern void initialize_current_architecture (void);
1076
c906108c 1077/* gdbarch trace variable */
adf40b2e 1078extern int gdbarch_debug;
c906108c 1079
4b9b3959 1080extern void gdbarch_dump (struct gdbarch *gdbarch, struct ui_file *file);
0f71a2f6 1081
c906108c 1082#endif
This page took 0.918258 seconds and 4 git commands to generate.