2000-08-10 Jimmy Guo <guo@cup.hp.com>
[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.
b83266a0 4 Copyright 1998-1999, Free Software Foundation, Inc.
c906108c 5
c5aa993b 6 This file is part of GDB.
c906108c 7
c5aa993b
JM
8 This program is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation; either version 2 of the License, or
11 (at your option) any later version.
c906108c 12
c5aa993b
JM
13 This program is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
c906108c 17
c5aa993b
JM
18 You should have received a copy of the GNU General Public License
19 along with this program; if not, write to the Free Software
20 Foundation, Inc., 59 Temple Place - Suite 330,
21 Boston, MA 02111-1307, USA. */
c906108c 22
104c1213
JM
23/* This file was created with the aid of ``gdbarch.sh''.
24
25 The bourn shell script ``gdbarch.sh'' creates the files
26 ``new-gdbarch.c'' and ``new-gdbarch.h and then compares them
27 against the existing ``gdbarch.[hc]''. Any differences found
28 being reported.
29
30 If editing this file, please also run gdbarch.sh and merge any
31 changes into that script. Conversely, when makeing sweeping changes
32 to this file, modifying gdbarch.sh and using its output may prove
33 easier. */
adf40b2e 34
c906108c
SS
35#ifndef GDBARCH_H
36#define GDBARCH_H
37
cce74817
JM
38struct frame_info;
39struct value;
cce74817 40
0f71a2f6 41
0f71a2f6
JM
42extern struct gdbarch *current_gdbarch;
43
44
0f71a2f6
JM
45/* If any of the following are defined, the target wasn't correctly
46 converted. */
47
0f71a2f6
JM
48#if GDB_MULTI_ARCH
49#if defined (EXTRA_FRAME_INFO)
50#error "EXTRA_FRAME_INFO: replaced by struct frame_extra_info"
51#endif
52#endif
53
54#if GDB_MULTI_ARCH
55#if defined (FRAME_FIND_SAVED_REGS)
56#error "FRAME_FIND_SAVED_REGS: replaced by FRAME_INIT_SAVED_REGS"
57#endif
58#endif
59
60
61/* The following are pre-initialized by GDBARCH. */
62
104c1213 63extern const struct bfd_arch_info * gdbarch_bfd_arch_info (struct gdbarch *gdbarch);
0f71a2f6
JM
64/* set_gdbarch_bfd_arch_info() - not applicable - pre-initialized. */
65#if GDB_MULTI_ARCH
6166d547 66#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (TARGET_ARCHITECTURE)
0f71a2f6
JM
67#define TARGET_ARCHITECTURE (gdbarch_bfd_arch_info (current_gdbarch))
68#endif
69#endif
70
104c1213 71extern int gdbarch_byte_order (struct gdbarch *gdbarch);
0f71a2f6
JM
72/* set_gdbarch_byte_order() - not applicable - pre-initialized. */
73#if GDB_MULTI_ARCH
6166d547 74#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (TARGET_BYTE_ORDER)
0f71a2f6
JM
75#define TARGET_BYTE_ORDER (gdbarch_byte_order (current_gdbarch))
76#endif
77#endif
78
79
80/* The following are initialized by the target dependant code. */
81
33489c5b 82/* Default (value) for non- multi-arch platforms. */
6166d547 83#if (!GDB_MULTI_ARCH) && !defined (TARGET_BFD_VMA_BIT)
33489c5b
AC
84#define TARGET_BFD_VMA_BIT (TARGET_ARCHITECTURE->bits_per_address)
85#endif
86
c4093a6a
JM
87extern int gdbarch_bfd_vma_bit (struct gdbarch *gdbarch);
88extern void set_gdbarch_bfd_vma_bit (struct gdbarch *gdbarch, int bfd_vma_bit);
33489c5b 89#if GDB_MULTI_ARCH
6166d547 90#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (TARGET_BFD_VMA_BIT)
c4093a6a
JM
91#define TARGET_BFD_VMA_BIT (gdbarch_bfd_vma_bit (current_gdbarch))
92#endif
33489c5b 93#endif
c4093a6a 94
104c1213
JM
95extern int gdbarch_ptr_bit (struct gdbarch *gdbarch);
96extern void set_gdbarch_ptr_bit (struct gdbarch *gdbarch, int ptr_bit);
0f71a2f6 97#if GDB_MULTI_ARCH
6166d547 98#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (TARGET_PTR_BIT)
0f71a2f6
JM
99#define TARGET_PTR_BIT (gdbarch_ptr_bit (current_gdbarch))
100#endif
101#endif
102
34620563
AC
103/*v:1:TARGET_CHAR_BIT:int:char_bit::::8 * sizeof (char):0 */
104
104c1213
JM
105extern int gdbarch_short_bit (struct gdbarch *gdbarch);
106extern void set_gdbarch_short_bit (struct gdbarch *gdbarch, int short_bit);
0f71a2f6 107#if GDB_MULTI_ARCH
6166d547 108#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (TARGET_SHORT_BIT)
0f71a2f6
JM
109#define TARGET_SHORT_BIT (gdbarch_short_bit (current_gdbarch))
110#endif
111#endif
112
104c1213
JM
113extern int gdbarch_int_bit (struct gdbarch *gdbarch);
114extern void set_gdbarch_int_bit (struct gdbarch *gdbarch, int int_bit);
0f71a2f6 115#if GDB_MULTI_ARCH
6166d547 116#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (TARGET_INT_BIT)
0f71a2f6
JM
117#define TARGET_INT_BIT (gdbarch_int_bit (current_gdbarch))
118#endif
119#endif
120
104c1213
JM
121extern int gdbarch_long_bit (struct gdbarch *gdbarch);
122extern void set_gdbarch_long_bit (struct gdbarch *gdbarch, int long_bit);
0f71a2f6 123#if GDB_MULTI_ARCH
6166d547 124#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (TARGET_LONG_BIT)
0f71a2f6
JM
125#define TARGET_LONG_BIT (gdbarch_long_bit (current_gdbarch))
126#endif
127#endif
128
104c1213
JM
129extern int gdbarch_long_long_bit (struct gdbarch *gdbarch);
130extern void set_gdbarch_long_long_bit (struct gdbarch *gdbarch, int long_long_bit);
0f71a2f6 131#if GDB_MULTI_ARCH
6166d547 132#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (TARGET_LONG_LONG_BIT)
0f71a2f6
JM
133#define TARGET_LONG_LONG_BIT (gdbarch_long_long_bit (current_gdbarch))
134#endif
135#endif
136
104c1213
JM
137extern int gdbarch_float_bit (struct gdbarch *gdbarch);
138extern void set_gdbarch_float_bit (struct gdbarch *gdbarch, int float_bit);
0f71a2f6 139#if GDB_MULTI_ARCH
6166d547 140#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (TARGET_FLOAT_BIT)
0f71a2f6
JM
141#define TARGET_FLOAT_BIT (gdbarch_float_bit (current_gdbarch))
142#endif
143#endif
144
104c1213
JM
145extern int gdbarch_double_bit (struct gdbarch *gdbarch);
146extern void set_gdbarch_double_bit (struct gdbarch *gdbarch, int double_bit);
0f71a2f6 147#if GDB_MULTI_ARCH
6166d547 148#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (TARGET_DOUBLE_BIT)
0f71a2f6
JM
149#define TARGET_DOUBLE_BIT (gdbarch_double_bit (current_gdbarch))
150#endif
151#endif
152
104c1213
JM
153extern int gdbarch_long_double_bit (struct gdbarch *gdbarch);
154extern void set_gdbarch_long_double_bit (struct gdbarch *gdbarch, int long_double_bit);
0f71a2f6 155#if GDB_MULTI_ARCH
6166d547 156#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (TARGET_LONG_DOUBLE_BIT)
0f71a2f6
JM
157#define TARGET_LONG_DOUBLE_BIT (gdbarch_long_double_bit (current_gdbarch))
158#endif
159#endif
160
33489c5b 161/* Default (value) for non- multi-arch platforms. */
6166d547 162#if (!GDB_MULTI_ARCH) && !defined (IEEE_FLOAT)
33489c5b
AC
163#define IEEE_FLOAT (0)
164#endif
165
7355ddba
JB
166extern int gdbarch_ieee_float (struct gdbarch *gdbarch);
167extern void set_gdbarch_ieee_float (struct gdbarch *gdbarch, int ieee_float);
33489c5b 168#if GDB_MULTI_ARCH
6166d547 169#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (IEEE_FLOAT)
7355ddba
JB
170#define IEEE_FLOAT (gdbarch_ieee_float (current_gdbarch))
171#endif
33489c5b 172#endif
7355ddba 173
104c1213
JM
174typedef CORE_ADDR (gdbarch_read_pc_ftype) (int pid);
175extern CORE_ADDR gdbarch_read_pc (struct gdbarch *gdbarch, int pid);
176extern void set_gdbarch_read_pc (struct gdbarch *gdbarch, gdbarch_read_pc_ftype *read_pc);
0f71a2f6 177#if GDB_MULTI_ARCH
6166d547 178#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (TARGET_READ_PC)
0f71a2f6
JM
179#define TARGET_READ_PC(pid) (gdbarch_read_pc (current_gdbarch, pid))
180#endif
181#endif
182
104c1213
JM
183typedef void (gdbarch_write_pc_ftype) (CORE_ADDR val, int pid);
184extern void gdbarch_write_pc (struct gdbarch *gdbarch, CORE_ADDR val, int pid);
185extern void set_gdbarch_write_pc (struct gdbarch *gdbarch, gdbarch_write_pc_ftype *write_pc);
0f71a2f6 186#if GDB_MULTI_ARCH
6166d547 187#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (TARGET_WRITE_PC)
0f71a2f6
JM
188#define TARGET_WRITE_PC(val, pid) (gdbarch_write_pc (current_gdbarch, val, pid))
189#endif
190#endif
191
104c1213
JM
192typedef CORE_ADDR (gdbarch_read_fp_ftype) (void);
193extern CORE_ADDR gdbarch_read_fp (struct gdbarch *gdbarch);
194extern void set_gdbarch_read_fp (struct gdbarch *gdbarch, gdbarch_read_fp_ftype *read_fp);
0f71a2f6 195#if GDB_MULTI_ARCH
6166d547 196#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (TARGET_READ_FP)
0f71a2f6
JM
197#define TARGET_READ_FP() (gdbarch_read_fp (current_gdbarch))
198#endif
199#endif
200
104c1213
JM
201typedef void (gdbarch_write_fp_ftype) (CORE_ADDR val);
202extern void gdbarch_write_fp (struct gdbarch *gdbarch, CORE_ADDR val);
203extern void set_gdbarch_write_fp (struct gdbarch *gdbarch, gdbarch_write_fp_ftype *write_fp);
0f71a2f6 204#if GDB_MULTI_ARCH
6166d547 205#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (TARGET_WRITE_FP)
0f71a2f6
JM
206#define TARGET_WRITE_FP(val) (gdbarch_write_fp (current_gdbarch, val))
207#endif
208#endif
209
104c1213
JM
210typedef CORE_ADDR (gdbarch_read_sp_ftype) (void);
211extern CORE_ADDR gdbarch_read_sp (struct gdbarch *gdbarch);
212extern void set_gdbarch_read_sp (struct gdbarch *gdbarch, gdbarch_read_sp_ftype *read_sp);
0f71a2f6 213#if GDB_MULTI_ARCH
6166d547 214#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (TARGET_READ_SP)
0f71a2f6
JM
215#define TARGET_READ_SP() (gdbarch_read_sp (current_gdbarch))
216#endif
217#endif
218
104c1213
JM
219typedef void (gdbarch_write_sp_ftype) (CORE_ADDR val);
220extern void gdbarch_write_sp (struct gdbarch *gdbarch, CORE_ADDR val);
221extern void set_gdbarch_write_sp (struct gdbarch *gdbarch, gdbarch_write_sp_ftype *write_sp);
0f71a2f6 222#if GDB_MULTI_ARCH
6166d547 223#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (TARGET_WRITE_SP)
0f71a2f6
JM
224#define TARGET_WRITE_SP(val) (gdbarch_write_sp (current_gdbarch, val))
225#endif
226#endif
227
104c1213
JM
228extern int gdbarch_num_regs (struct gdbarch *gdbarch);
229extern void set_gdbarch_num_regs (struct gdbarch *gdbarch, int num_regs);
0f71a2f6 230#if GDB_MULTI_ARCH
6166d547 231#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (NUM_REGS)
0f71a2f6
JM
232#define NUM_REGS (gdbarch_num_regs (current_gdbarch))
233#endif
234#endif
235
34620563
AC
236/* This macro gives the number of pseudo-registers that live in the
237 register namespace but do not get fetched or stored on the target.
238 These pseudo-registers may be aliases for other registers,
239 combinations of other registers, or they may be computed by GDB. */
240
0aba1244 241/* Default (value) for non- multi-arch platforms. */
6166d547 242#if (!GDB_MULTI_ARCH) && !defined (NUM_PSEUDO_REGS)
0aba1244
EZ
243#define NUM_PSEUDO_REGS (0)
244#endif
245
246extern int gdbarch_num_pseudo_regs (struct gdbarch *gdbarch);
247extern void set_gdbarch_num_pseudo_regs (struct gdbarch *gdbarch, int num_pseudo_regs);
248#if GDB_MULTI_ARCH
6166d547 249#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (NUM_PSEUDO_REGS)
0aba1244
EZ
250#define NUM_PSEUDO_REGS (gdbarch_num_pseudo_regs (current_gdbarch))
251#endif
252#endif
253
104c1213
JM
254extern int gdbarch_sp_regnum (struct gdbarch *gdbarch);
255extern void set_gdbarch_sp_regnum (struct gdbarch *gdbarch, int sp_regnum);
0f71a2f6 256#if GDB_MULTI_ARCH
6166d547 257#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (SP_REGNUM)
0f71a2f6
JM
258#define SP_REGNUM (gdbarch_sp_regnum (current_gdbarch))
259#endif
260#endif
261
104c1213
JM
262extern int gdbarch_fp_regnum (struct gdbarch *gdbarch);
263extern void set_gdbarch_fp_regnum (struct gdbarch *gdbarch, int fp_regnum);
0f71a2f6 264#if GDB_MULTI_ARCH
6166d547 265#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (FP_REGNUM)
0f71a2f6
JM
266#define FP_REGNUM (gdbarch_fp_regnum (current_gdbarch))
267#endif
268#endif
269
104c1213
JM
270extern int gdbarch_pc_regnum (struct gdbarch *gdbarch);
271extern void set_gdbarch_pc_regnum (struct gdbarch *gdbarch, int pc_regnum);
0f71a2f6 272#if GDB_MULTI_ARCH
6166d547 273#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (PC_REGNUM)
0f71a2f6
JM
274#define PC_REGNUM (gdbarch_pc_regnum (current_gdbarch))
275#endif
276#endif
277
60054393 278/* Default (value) for non- multi-arch platforms. */
6166d547 279#if (!GDB_MULTI_ARCH) && !defined (FP0_REGNUM)
60054393
MS
280#define FP0_REGNUM (-1)
281#endif
282
283extern int gdbarch_fp0_regnum (struct gdbarch *gdbarch);
284extern void set_gdbarch_fp0_regnum (struct gdbarch *gdbarch, int fp0_regnum);
285#if GDB_MULTI_ARCH
6166d547 286#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (FP0_REGNUM)
60054393
MS
287#define FP0_REGNUM (gdbarch_fp0_regnum (current_gdbarch))
288#endif
289#endif
290
03863182 291/* Default (value) for non- multi-arch platforms. */
6166d547 292#if (!GDB_MULTI_ARCH) && !defined (NPC_REGNUM)
03863182
AC
293#define NPC_REGNUM (-1)
294#endif
295
296extern int gdbarch_npc_regnum (struct gdbarch *gdbarch);
297extern void set_gdbarch_npc_regnum (struct gdbarch *gdbarch, int npc_regnum);
298#if GDB_MULTI_ARCH
6166d547 299#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (NPC_REGNUM)
03863182
AC
300#define NPC_REGNUM (gdbarch_npc_regnum (current_gdbarch))
301#endif
302#endif
303
304/* Default (value) for non- multi-arch platforms. */
6166d547 305#if (!GDB_MULTI_ARCH) && !defined (NNPC_REGNUM)
03863182
AC
306#define NNPC_REGNUM (-1)
307#endif
308
309extern int gdbarch_nnpc_regnum (struct gdbarch *gdbarch);
310extern void set_gdbarch_nnpc_regnum (struct gdbarch *gdbarch, int nnpc_regnum);
311#if GDB_MULTI_ARCH
6166d547 312#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (NNPC_REGNUM)
03863182
AC
313#define NNPC_REGNUM (gdbarch_nnpc_regnum (current_gdbarch))
314#endif
315#endif
316
33489c5b 317/* Default (function) for non- multi-arch platforms. */
6166d547 318#if (!GDB_MULTI_ARCH) && !defined (REGISTER_NAME)
33489c5b
AC
319#define REGISTER_NAME(regnr) (legacy_register_name (regnr))
320#endif
321
104c1213
JM
322typedef char * (gdbarch_register_name_ftype) (int regnr);
323extern char * gdbarch_register_name (struct gdbarch *gdbarch, int regnr);
324extern void set_gdbarch_register_name (struct gdbarch *gdbarch, gdbarch_register_name_ftype *register_name);
33489c5b 325#if GDB_MULTI_ARCH
6166d547 326#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (REGISTER_NAME)
0f71a2f6
JM
327#define REGISTER_NAME(regnr) (gdbarch_register_name (current_gdbarch, regnr))
328#endif
33489c5b 329#endif
0f71a2f6 330
104c1213
JM
331extern int gdbarch_register_size (struct gdbarch *gdbarch);
332extern void set_gdbarch_register_size (struct gdbarch *gdbarch, int register_size);
0f71a2f6 333#if GDB_MULTI_ARCH
6166d547 334#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (REGISTER_SIZE)
0f71a2f6
JM
335#define REGISTER_SIZE (gdbarch_register_size (current_gdbarch))
336#endif
337#endif
338
104c1213
JM
339extern int gdbarch_register_bytes (struct gdbarch *gdbarch);
340extern void set_gdbarch_register_bytes (struct gdbarch *gdbarch, int register_bytes);
0f71a2f6 341#if GDB_MULTI_ARCH
6166d547 342#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (REGISTER_BYTES)
0f71a2f6
JM
343#define REGISTER_BYTES (gdbarch_register_bytes (current_gdbarch))
344#endif
345#endif
346
104c1213
JM
347typedef int (gdbarch_register_byte_ftype) (int reg_nr);
348extern int gdbarch_register_byte (struct gdbarch *gdbarch, int reg_nr);
349extern void set_gdbarch_register_byte (struct gdbarch *gdbarch, gdbarch_register_byte_ftype *register_byte);
0f71a2f6 350#if GDB_MULTI_ARCH
6166d547 351#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (REGISTER_BYTE)
0f71a2f6
JM
352#define REGISTER_BYTE(reg_nr) (gdbarch_register_byte (current_gdbarch, reg_nr))
353#endif
354#endif
355
104c1213
JM
356typedef int (gdbarch_register_raw_size_ftype) (int reg_nr);
357extern int gdbarch_register_raw_size (struct gdbarch *gdbarch, int reg_nr);
358extern void set_gdbarch_register_raw_size (struct gdbarch *gdbarch, gdbarch_register_raw_size_ftype *register_raw_size);
0f71a2f6 359#if GDB_MULTI_ARCH
6166d547 360#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (REGISTER_RAW_SIZE)
0f71a2f6
JM
361#define REGISTER_RAW_SIZE(reg_nr) (gdbarch_register_raw_size (current_gdbarch, reg_nr))
362#endif
363#endif
364
104c1213
JM
365extern int gdbarch_max_register_raw_size (struct gdbarch *gdbarch);
366extern void set_gdbarch_max_register_raw_size (struct gdbarch *gdbarch, int max_register_raw_size);
0f71a2f6 367#if GDB_MULTI_ARCH
6166d547 368#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (MAX_REGISTER_RAW_SIZE)
0f71a2f6
JM
369#define MAX_REGISTER_RAW_SIZE (gdbarch_max_register_raw_size (current_gdbarch))
370#endif
371#endif
372
104c1213
JM
373typedef int (gdbarch_register_virtual_size_ftype) (int reg_nr);
374extern int gdbarch_register_virtual_size (struct gdbarch *gdbarch, int reg_nr);
375extern void set_gdbarch_register_virtual_size (struct gdbarch *gdbarch, gdbarch_register_virtual_size_ftype *register_virtual_size);
0f71a2f6 376#if GDB_MULTI_ARCH
6166d547 377#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (REGISTER_VIRTUAL_SIZE)
0f71a2f6
JM
378#define REGISTER_VIRTUAL_SIZE(reg_nr) (gdbarch_register_virtual_size (current_gdbarch, reg_nr))
379#endif
380#endif
381
104c1213
JM
382extern int gdbarch_max_register_virtual_size (struct gdbarch *gdbarch);
383extern void set_gdbarch_max_register_virtual_size (struct gdbarch *gdbarch, int max_register_virtual_size);
0f71a2f6 384#if GDB_MULTI_ARCH
6166d547 385#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (MAX_REGISTER_VIRTUAL_SIZE)
0f71a2f6
JM
386#define MAX_REGISTER_VIRTUAL_SIZE (gdbarch_max_register_virtual_size (current_gdbarch))
387#endif
388#endif
389
104c1213
JM
390typedef struct type * (gdbarch_register_virtual_type_ftype) (int reg_nr);
391extern struct type * gdbarch_register_virtual_type (struct gdbarch *gdbarch, int reg_nr);
392extern void set_gdbarch_register_virtual_type (struct gdbarch *gdbarch, gdbarch_register_virtual_type_ftype *register_virtual_type);
0f71a2f6 393#if GDB_MULTI_ARCH
6166d547 394#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (REGISTER_VIRTUAL_TYPE)
0f71a2f6
JM
395#define REGISTER_VIRTUAL_TYPE(reg_nr) (gdbarch_register_virtual_type (current_gdbarch, reg_nr))
396#endif
397#endif
398
666e11c5
EZ
399/* Default (function) for non- multi-arch platforms. */
400#if (!GDB_MULTI_ARCH) && !defined (DO_REGISTERS_INFO)
401#define DO_REGISTERS_INFO(reg_nr, fpregs) (do_registers_info (reg_nr, fpregs))
402#endif
403
404typedef void (gdbarch_do_registers_info_ftype) (int reg_nr, int fpregs);
405extern void gdbarch_do_registers_info (struct gdbarch *gdbarch, int reg_nr, int fpregs);
406extern void set_gdbarch_do_registers_info (struct gdbarch *gdbarch, gdbarch_do_registers_info_ftype *do_registers_info);
407#if GDB_MULTI_ARCH
408#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (DO_REGISTERS_INFO)
409#define DO_REGISTERS_INFO(reg_nr, fpregs) (gdbarch_do_registers_info (current_gdbarch, reg_nr, fpregs))
410#endif
411#endif
412
7c7651b2
AC
413/* MAP a GDB RAW register number onto a simulator register number. See
414 also include/...-sim.h. */
415
416/* Default (function) for non- multi-arch platforms. */
417#if (!GDB_MULTI_ARCH) && !defined (REGISTER_SIM_REGNO)
418#define REGISTER_SIM_REGNO(reg_nr) (default_register_sim_regno (reg_nr))
419#endif
420
421typedef int (gdbarch_register_sim_regno_ftype) (int reg_nr);
422extern int gdbarch_register_sim_regno (struct gdbarch *gdbarch, int reg_nr);
423extern void set_gdbarch_register_sim_regno (struct gdbarch *gdbarch, gdbarch_register_sim_regno_ftype *register_sim_regno);
424#if GDB_MULTI_ARCH
425#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (REGISTER_SIM_REGNO)
426#define REGISTER_SIM_REGNO(reg_nr) (gdbarch_register_sim_regno (current_gdbarch, reg_nr))
427#endif
428#endif
429
104c1213
JM
430extern int gdbarch_use_generic_dummy_frames (struct gdbarch *gdbarch);
431extern void set_gdbarch_use_generic_dummy_frames (struct gdbarch *gdbarch, int use_generic_dummy_frames);
0f71a2f6 432#if GDB_MULTI_ARCH
6166d547 433#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (USE_GENERIC_DUMMY_FRAMES)
0f71a2f6
JM
434#define USE_GENERIC_DUMMY_FRAMES (gdbarch_use_generic_dummy_frames (current_gdbarch))
435#endif
436#endif
437
104c1213
JM
438extern int gdbarch_call_dummy_location (struct gdbarch *gdbarch);
439extern void set_gdbarch_call_dummy_location (struct gdbarch *gdbarch, int call_dummy_location);
0f71a2f6 440#if GDB_MULTI_ARCH
6166d547 441#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (CALL_DUMMY_LOCATION)
0f71a2f6
JM
442#define CALL_DUMMY_LOCATION (gdbarch_call_dummy_location (current_gdbarch))
443#endif
444#endif
445
104c1213
JM
446typedef CORE_ADDR (gdbarch_call_dummy_address_ftype) (void);
447extern CORE_ADDR gdbarch_call_dummy_address (struct gdbarch *gdbarch);
448extern void set_gdbarch_call_dummy_address (struct gdbarch *gdbarch, gdbarch_call_dummy_address_ftype *call_dummy_address);
0f71a2f6 449#if GDB_MULTI_ARCH
6166d547 450#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (CALL_DUMMY_ADDRESS)
0f71a2f6
JM
451#define CALL_DUMMY_ADDRESS() (gdbarch_call_dummy_address (current_gdbarch))
452#endif
453#endif
454
104c1213
JM
455extern CORE_ADDR gdbarch_call_dummy_start_offset (struct gdbarch *gdbarch);
456extern void set_gdbarch_call_dummy_start_offset (struct gdbarch *gdbarch, CORE_ADDR call_dummy_start_offset);
0f71a2f6 457#if GDB_MULTI_ARCH
6166d547 458#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (CALL_DUMMY_START_OFFSET)
0f71a2f6
JM
459#define CALL_DUMMY_START_OFFSET (gdbarch_call_dummy_start_offset (current_gdbarch))
460#endif
461#endif
462
104c1213
JM
463extern CORE_ADDR gdbarch_call_dummy_breakpoint_offset (struct gdbarch *gdbarch);
464extern void set_gdbarch_call_dummy_breakpoint_offset (struct gdbarch *gdbarch, CORE_ADDR call_dummy_breakpoint_offset);
0f71a2f6 465#if GDB_MULTI_ARCH
6166d547 466#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (CALL_DUMMY_BREAKPOINT_OFFSET)
0f71a2f6
JM
467#define CALL_DUMMY_BREAKPOINT_OFFSET (gdbarch_call_dummy_breakpoint_offset (current_gdbarch))
468#endif
469#endif
470
104c1213
JM
471extern int gdbarch_call_dummy_breakpoint_offset_p (struct gdbarch *gdbarch);
472extern void set_gdbarch_call_dummy_breakpoint_offset_p (struct gdbarch *gdbarch, int call_dummy_breakpoint_offset_p);
0f71a2f6 473#if GDB_MULTI_ARCH
6166d547 474#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (CALL_DUMMY_BREAKPOINT_OFFSET_P)
0f71a2f6
JM
475#define CALL_DUMMY_BREAKPOINT_OFFSET_P (gdbarch_call_dummy_breakpoint_offset_p (current_gdbarch))
476#endif
477#endif
478
104c1213
JM
479extern int gdbarch_call_dummy_length (struct gdbarch *gdbarch);
480extern void set_gdbarch_call_dummy_length (struct gdbarch *gdbarch, int call_dummy_length);
0f71a2f6 481#if GDB_MULTI_ARCH
6166d547 482#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (CALL_DUMMY_LENGTH)
0f71a2f6
JM
483#define CALL_DUMMY_LENGTH (gdbarch_call_dummy_length (current_gdbarch))
484#endif
485#endif
486
104c1213
JM
487typedef int (gdbarch_pc_in_call_dummy_ftype) (CORE_ADDR pc, CORE_ADDR sp, CORE_ADDR frame_address);
488extern int gdbarch_pc_in_call_dummy (struct gdbarch *gdbarch, CORE_ADDR pc, CORE_ADDR sp, CORE_ADDR frame_address);
489extern void set_gdbarch_pc_in_call_dummy (struct gdbarch *gdbarch, gdbarch_pc_in_call_dummy_ftype *pc_in_call_dummy);
0f71a2f6 490#if GDB_MULTI_ARCH
6166d547 491#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (PC_IN_CALL_DUMMY)
0f71a2f6
JM
492#define PC_IN_CALL_DUMMY(pc, sp, frame_address) (gdbarch_pc_in_call_dummy (current_gdbarch, pc, sp, frame_address))
493#endif
494#endif
495
104c1213
JM
496extern int gdbarch_call_dummy_p (struct gdbarch *gdbarch);
497extern void set_gdbarch_call_dummy_p (struct gdbarch *gdbarch, int call_dummy_p);
0f71a2f6 498#if GDB_MULTI_ARCH
6166d547 499#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (CALL_DUMMY_P)
0f71a2f6
JM
500#define CALL_DUMMY_P (gdbarch_call_dummy_p (current_gdbarch))
501#endif
502#endif
503
33489c5b 504/* Default (value) for non- multi-arch platforms. */
6166d547 505#if (!GDB_MULTI_ARCH) && !defined (CALL_DUMMY_WORDS)
33489c5b
AC
506#define CALL_DUMMY_WORDS (legacy_call_dummy_words)
507#endif
508
104c1213
JM
509extern LONGEST * gdbarch_call_dummy_words (struct gdbarch *gdbarch);
510extern void set_gdbarch_call_dummy_words (struct gdbarch *gdbarch, LONGEST * call_dummy_words);
33489c5b 511#if GDB_MULTI_ARCH
6166d547 512#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (CALL_DUMMY_WORDS)
0f71a2f6
JM
513#define CALL_DUMMY_WORDS (gdbarch_call_dummy_words (current_gdbarch))
514#endif
33489c5b
AC
515#endif
516
517/* Default (value) for non- multi-arch platforms. */
6166d547 518#if (!GDB_MULTI_ARCH) && !defined (SIZEOF_CALL_DUMMY_WORDS)
33489c5b
AC
519#define SIZEOF_CALL_DUMMY_WORDS (legacy_sizeof_call_dummy_words)
520#endif
0f71a2f6 521
104c1213
JM
522extern int gdbarch_sizeof_call_dummy_words (struct gdbarch *gdbarch);
523extern void set_gdbarch_sizeof_call_dummy_words (struct gdbarch *gdbarch, int sizeof_call_dummy_words);
33489c5b 524#if GDB_MULTI_ARCH
6166d547 525#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (SIZEOF_CALL_DUMMY_WORDS)
0f71a2f6
JM
526#define SIZEOF_CALL_DUMMY_WORDS (gdbarch_sizeof_call_dummy_words (current_gdbarch))
527#endif
33489c5b 528#endif
0f71a2f6 529
104c1213
JM
530extern int gdbarch_call_dummy_stack_adjust_p (struct gdbarch *gdbarch);
531extern void set_gdbarch_call_dummy_stack_adjust_p (struct gdbarch *gdbarch, int call_dummy_stack_adjust_p);
0f71a2f6 532#if GDB_MULTI_ARCH
6166d547 533#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (CALL_DUMMY_STACK_ADJUST_P)
0f71a2f6
JM
534#define CALL_DUMMY_STACK_ADJUST_P (gdbarch_call_dummy_stack_adjust_p (current_gdbarch))
535#endif
536#endif
537
104c1213
JM
538extern int gdbarch_call_dummy_stack_adjust (struct gdbarch *gdbarch);
539extern void set_gdbarch_call_dummy_stack_adjust (struct gdbarch *gdbarch, int call_dummy_stack_adjust);
0f71a2f6 540#if GDB_MULTI_ARCH
6166d547 541#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (CALL_DUMMY_STACK_ADJUST)
0f71a2f6
JM
542#define CALL_DUMMY_STACK_ADJUST (gdbarch_call_dummy_stack_adjust (current_gdbarch))
543#endif
544#endif
545
104c1213
JM
546typedef void (gdbarch_fix_call_dummy_ftype) (char *dummy, CORE_ADDR pc, CORE_ADDR fun, int nargs, struct value **args, struct type *type, int gcc_p);
547extern void gdbarch_fix_call_dummy (struct gdbarch *gdbarch, char *dummy, CORE_ADDR pc, CORE_ADDR fun, int nargs, struct value **args, struct type *type, int gcc_p);
548extern void set_gdbarch_fix_call_dummy (struct gdbarch *gdbarch, gdbarch_fix_call_dummy_ftype *fix_call_dummy);
0f71a2f6 549#if GDB_MULTI_ARCH
6166d547 550#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (FIX_CALL_DUMMY)
0f71a2f6
JM
551#define FIX_CALL_DUMMY(dummy, pc, fun, nargs, args, type, gcc_p) (gdbarch_fix_call_dummy (current_gdbarch, dummy, pc, fun, nargs, args, type, gcc_p))
552#endif
553#endif
554
104c1213
JM
555extern int gdbarch_believe_pcc_promotion (struct gdbarch *gdbarch);
556extern void set_gdbarch_believe_pcc_promotion (struct gdbarch *gdbarch, int believe_pcc_promotion);
0f71a2f6 557#if GDB_MULTI_ARCH
6166d547 558#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (BELIEVE_PCC_PROMOTION)
0f71a2f6
JM
559#define BELIEVE_PCC_PROMOTION (gdbarch_believe_pcc_promotion (current_gdbarch))
560#endif
561#endif
562
104c1213
JM
563extern int gdbarch_believe_pcc_promotion_type (struct gdbarch *gdbarch);
564extern void set_gdbarch_believe_pcc_promotion_type (struct gdbarch *gdbarch, int believe_pcc_promotion_type);
0f71a2f6 565#if GDB_MULTI_ARCH
6166d547 566#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (BELIEVE_PCC_PROMOTION_TYPE)
0f71a2f6
JM
567#define BELIEVE_PCC_PROMOTION_TYPE (gdbarch_believe_pcc_promotion_type (current_gdbarch))
568#endif
569#endif
570
33489c5b 571/* Default (function) for non- multi-arch platforms. */
6166d547 572#if (!GDB_MULTI_ARCH) && !defined (COERCE_FLOAT_TO_DOUBLE)
33489c5b
AC
573#define COERCE_FLOAT_TO_DOUBLE(formal, actual) (default_coerce_float_to_double (formal, actual))
574#endif
575
b9a8e3bf
JB
576typedef int (gdbarch_coerce_float_to_double_ftype) (struct type *formal, struct type *actual);
577extern int gdbarch_coerce_float_to_double (struct gdbarch *gdbarch, struct type *formal, struct type *actual);
578extern void set_gdbarch_coerce_float_to_double (struct gdbarch *gdbarch, gdbarch_coerce_float_to_double_ftype *coerce_float_to_double);
33489c5b 579#if GDB_MULTI_ARCH
6166d547 580#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (COERCE_FLOAT_TO_DOUBLE)
b9a8e3bf
JB
581#define COERCE_FLOAT_TO_DOUBLE(formal, actual) (gdbarch_coerce_float_to_double (current_gdbarch, formal, actual))
582#endif
33489c5b 583#endif
b9a8e3bf 584
104c1213
JM
585typedef void (gdbarch_get_saved_register_ftype) (char *raw_buffer, int *optimized, CORE_ADDR *addrp, struct frame_info *frame, int regnum, enum lval_type *lval);
586extern void gdbarch_get_saved_register (struct gdbarch *gdbarch, char *raw_buffer, int *optimized, CORE_ADDR *addrp, struct frame_info *frame, int regnum, enum lval_type *lval);
587extern void set_gdbarch_get_saved_register (struct gdbarch *gdbarch, gdbarch_get_saved_register_ftype *get_saved_register);
0f71a2f6 588#if GDB_MULTI_ARCH
6166d547 589#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (GET_SAVED_REGISTER)
0f71a2f6
JM
590#define GET_SAVED_REGISTER(raw_buffer, optimized, addrp, frame, regnum, lval) (gdbarch_get_saved_register (current_gdbarch, raw_buffer, optimized, addrp, frame, regnum, lval))
591#endif
592#endif
593
33489c5b 594/* Default (function) for non- multi-arch platforms. */
6166d547 595#if (!GDB_MULTI_ARCH) && !defined (REGISTER_CONVERTIBLE)
33489c5b
AC
596#define REGISTER_CONVERTIBLE(nr) (generic_register_convertible_not (nr))
597#endif
598
104c1213
JM
599typedef int (gdbarch_register_convertible_ftype) (int nr);
600extern int gdbarch_register_convertible (struct gdbarch *gdbarch, int nr);
601extern void set_gdbarch_register_convertible (struct gdbarch *gdbarch, gdbarch_register_convertible_ftype *register_convertible);
33489c5b 602#if GDB_MULTI_ARCH
6166d547 603#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (REGISTER_CONVERTIBLE)
0f71a2f6
JM
604#define REGISTER_CONVERTIBLE(nr) (gdbarch_register_convertible (current_gdbarch, nr))
605#endif
33489c5b
AC
606#endif
607
608/* Default (function) for non- multi-arch platforms. */
6166d547 609#if (!GDB_MULTI_ARCH) && !defined (REGISTER_CONVERT_TO_VIRTUAL)
33489c5b
AC
610#define REGISTER_CONVERT_TO_VIRTUAL(regnum, type, from, to) (internal_error ("REGISTER_CONVERT_TO_VIRTUAL"), 0)
611#endif
0f71a2f6 612
104c1213
JM
613typedef void (gdbarch_register_convert_to_virtual_ftype) (int regnum, struct type *type, char *from, char *to);
614extern void gdbarch_register_convert_to_virtual (struct gdbarch *gdbarch, int regnum, struct type *type, char *from, char *to);
615extern void set_gdbarch_register_convert_to_virtual (struct gdbarch *gdbarch, gdbarch_register_convert_to_virtual_ftype *register_convert_to_virtual);
33489c5b 616#if GDB_MULTI_ARCH
6166d547 617#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (REGISTER_CONVERT_TO_VIRTUAL)
0f71a2f6
JM
618#define REGISTER_CONVERT_TO_VIRTUAL(regnum, type, from, to) (gdbarch_register_convert_to_virtual (current_gdbarch, regnum, type, from, to))
619#endif
33489c5b
AC
620#endif
621
622/* Default (function) for non- multi-arch platforms. */
6166d547 623#if (!GDB_MULTI_ARCH) && !defined (REGISTER_CONVERT_TO_RAW)
33489c5b
AC
624#define REGISTER_CONVERT_TO_RAW(type, regnum, from, to) (internal_error ("REGISTER_CONVERT_TO_RAW"), 0)
625#endif
0f71a2f6 626
104c1213
JM
627typedef void (gdbarch_register_convert_to_raw_ftype) (struct type *type, int regnum, char *from, char *to);
628extern void gdbarch_register_convert_to_raw (struct gdbarch *gdbarch, struct type *type, int regnum, char *from, char *to);
629extern void set_gdbarch_register_convert_to_raw (struct gdbarch *gdbarch, gdbarch_register_convert_to_raw_ftype *register_convert_to_raw);
33489c5b 630#if GDB_MULTI_ARCH
6166d547 631#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (REGISTER_CONVERT_TO_RAW)
0f71a2f6
JM
632#define REGISTER_CONVERT_TO_RAW(type, regnum, from, to) (gdbarch_register_convert_to_raw (current_gdbarch, type, regnum, from, to))
633#endif
33489c5b
AC
634#endif
635
34620563
AC
636/* This function is called when the value of a pseudo-register needs to
637 be updated. Typically it will be defined on a per-architecture
638 basis. */
639
7f1b2585 640/* Default (function) for non- multi-arch platforms. */
6166d547 641#if (!GDB_MULTI_ARCH) && !defined (FETCH_PSEUDO_REGISTER)
7f1b2585
EZ
642#define FETCH_PSEUDO_REGISTER(regnum) (internal_error ("FETCH_PSEUDO_REGISTER"), 0)
643#endif
644
645typedef void (gdbarch_fetch_pseudo_register_ftype) (int regnum);
646extern void gdbarch_fetch_pseudo_register (struct gdbarch *gdbarch, int regnum);
647extern void set_gdbarch_fetch_pseudo_register (struct gdbarch *gdbarch, gdbarch_fetch_pseudo_register_ftype *fetch_pseudo_register);
648#if GDB_MULTI_ARCH
6166d547 649#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (FETCH_PSEUDO_REGISTER)
7f1b2585
EZ
650#define FETCH_PSEUDO_REGISTER(regnum) (gdbarch_fetch_pseudo_register (current_gdbarch, regnum))
651#endif
652#endif
653
34620563
AC
654/* This function is called when the value of a pseudo-register needs to
655 be set or stored. Typically it will be defined on a
656 per-architecture basis. */
657
7f1b2585 658/* Default (function) for non- multi-arch platforms. */
6166d547 659#if (!GDB_MULTI_ARCH) && !defined (STORE_PSEUDO_REGISTER)
7f1b2585
EZ
660#define STORE_PSEUDO_REGISTER(regnum) (internal_error ("STORE_PSEUDO_REGISTER"), 0)
661#endif
662
663typedef void (gdbarch_store_pseudo_register_ftype) (int regnum);
664extern void gdbarch_store_pseudo_register (struct gdbarch *gdbarch, int regnum);
665extern void set_gdbarch_store_pseudo_register (struct gdbarch *gdbarch, gdbarch_store_pseudo_register_ftype *store_pseudo_register);
666#if GDB_MULTI_ARCH
6166d547 667#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (STORE_PSEUDO_REGISTER)
7f1b2585
EZ
668#define STORE_PSEUDO_REGISTER(regnum) (gdbarch_store_pseudo_register (current_gdbarch, regnum))
669#endif
670#endif
671
33489c5b 672/* Default (function) for non- multi-arch platforms. */
6166d547 673#if (!GDB_MULTI_ARCH) && !defined (POINTER_TO_ADDRESS)
ac2e2ef7 674#define POINTER_TO_ADDRESS(type, buf) (unsigned_pointer_to_address (type, buf))
33489c5b 675#endif
4478b372 676
ac2e2ef7
AC
677typedef CORE_ADDR (gdbarch_pointer_to_address_ftype) (struct type *type, void *buf);
678extern CORE_ADDR gdbarch_pointer_to_address (struct gdbarch *gdbarch, struct type *type, void *buf);
4478b372 679extern void set_gdbarch_pointer_to_address (struct gdbarch *gdbarch, gdbarch_pointer_to_address_ftype *pointer_to_address);
33489c5b 680#if GDB_MULTI_ARCH
6166d547 681#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (POINTER_TO_ADDRESS)
4478b372
JB
682#define POINTER_TO_ADDRESS(type, buf) (gdbarch_pointer_to_address (current_gdbarch, type, buf))
683#endif
33489c5b
AC
684#endif
685
686/* Default (function) for non- multi-arch platforms. */
6166d547 687#if (!GDB_MULTI_ARCH) && !defined (ADDRESS_TO_POINTER)
ac2e2ef7 688#define ADDRESS_TO_POINTER(type, buf, addr) (unsigned_address_to_pointer (type, buf, addr))
33489c5b 689#endif
4478b372 690
ac2e2ef7
AC
691typedef void (gdbarch_address_to_pointer_ftype) (struct type *type, void *buf, CORE_ADDR addr);
692extern void gdbarch_address_to_pointer (struct gdbarch *gdbarch, struct type *type, void *buf, CORE_ADDR addr);
4478b372 693extern void set_gdbarch_address_to_pointer (struct gdbarch *gdbarch, gdbarch_address_to_pointer_ftype *address_to_pointer);
33489c5b 694#if GDB_MULTI_ARCH
6166d547 695#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (ADDRESS_TO_POINTER)
4478b372
JB
696#define ADDRESS_TO_POINTER(type, buf, addr) (gdbarch_address_to_pointer (current_gdbarch, type, buf, addr))
697#endif
33489c5b
AC
698#endif
699
700/* Default (function) for non- multi-arch platforms. */
6166d547 701#if (!GDB_MULTI_ARCH) && !defined (RETURN_VALUE_ON_STACK)
33489c5b
AC
702#define RETURN_VALUE_ON_STACK(type) (generic_return_value_on_stack_not (type))
703#endif
0f71a2f6 704
71a9f22e
JB
705typedef int (gdbarch_return_value_on_stack_ftype) (struct type *type);
706extern int gdbarch_return_value_on_stack (struct gdbarch *gdbarch, struct type *type);
707extern void set_gdbarch_return_value_on_stack (struct gdbarch *gdbarch, gdbarch_return_value_on_stack_ftype *return_value_on_stack);
33489c5b 708#if GDB_MULTI_ARCH
6166d547 709#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (RETURN_VALUE_ON_STACK)
71a9f22e
JB
710#define RETURN_VALUE_ON_STACK(type) (gdbarch_return_value_on_stack (current_gdbarch, type))
711#endif
33489c5b 712#endif
71a9f22e 713
104c1213
JM
714typedef void (gdbarch_extract_return_value_ftype) (struct type *type, char *regbuf, char *valbuf);
715extern void gdbarch_extract_return_value (struct gdbarch *gdbarch, struct type *type, char *regbuf, char *valbuf);
716extern void set_gdbarch_extract_return_value (struct gdbarch *gdbarch, gdbarch_extract_return_value_ftype *extract_return_value);
0f71a2f6 717#if GDB_MULTI_ARCH
6166d547 718#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (EXTRACT_RETURN_VALUE)
0f71a2f6
JM
719#define EXTRACT_RETURN_VALUE(type, regbuf, valbuf) (gdbarch_extract_return_value (current_gdbarch, type, regbuf, valbuf))
720#endif
721#endif
722
104c1213
JM
723typedef CORE_ADDR (gdbarch_push_arguments_ftype) (int nargs, struct value **args, CORE_ADDR sp, int struct_return, CORE_ADDR struct_addr);
724extern CORE_ADDR gdbarch_push_arguments (struct gdbarch *gdbarch, int nargs, struct value **args, CORE_ADDR sp, int struct_return, CORE_ADDR struct_addr);
725extern void set_gdbarch_push_arguments (struct gdbarch *gdbarch, gdbarch_push_arguments_ftype *push_arguments);
0f71a2f6 726#if GDB_MULTI_ARCH
6166d547 727#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (PUSH_ARGUMENTS)
0f71a2f6
JM
728#define PUSH_ARGUMENTS(nargs, args, sp, struct_return, struct_addr) (gdbarch_push_arguments (current_gdbarch, nargs, args, sp, struct_return, struct_addr))
729#endif
730#endif
731
104c1213
JM
732typedef void (gdbarch_push_dummy_frame_ftype) (void);
733extern void gdbarch_push_dummy_frame (struct gdbarch *gdbarch);
734extern void set_gdbarch_push_dummy_frame (struct gdbarch *gdbarch, gdbarch_push_dummy_frame_ftype *push_dummy_frame);
0f71a2f6 735#if GDB_MULTI_ARCH
6166d547 736#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (PUSH_DUMMY_FRAME)
0f71a2f6
JM
737#define PUSH_DUMMY_FRAME (gdbarch_push_dummy_frame (current_gdbarch))
738#endif
739#endif
740
104c1213
JM
741typedef CORE_ADDR (gdbarch_push_return_address_ftype) (CORE_ADDR pc, CORE_ADDR sp);
742extern CORE_ADDR gdbarch_push_return_address (struct gdbarch *gdbarch, CORE_ADDR pc, CORE_ADDR sp);
743extern void set_gdbarch_push_return_address (struct gdbarch *gdbarch, gdbarch_push_return_address_ftype *push_return_address);
0f71a2f6 744#if GDB_MULTI_ARCH
6166d547 745#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (PUSH_RETURN_ADDRESS)
0f71a2f6
JM
746#define PUSH_RETURN_ADDRESS(pc, sp) (gdbarch_push_return_address (current_gdbarch, pc, sp))
747#endif
748#endif
749
104c1213
JM
750typedef void (gdbarch_pop_frame_ftype) (void);
751extern void gdbarch_pop_frame (struct gdbarch *gdbarch);
752extern void set_gdbarch_pop_frame (struct gdbarch *gdbarch, gdbarch_pop_frame_ftype *pop_frame);
0f71a2f6 753#if GDB_MULTI_ARCH
6166d547 754#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (POP_FRAME)
0f71a2f6
JM
755#define POP_FRAME (gdbarch_pop_frame (current_gdbarch))
756#endif
757#endif
758
34620563
AC
759/* I wish that these would just go away.... */
760
33489c5b 761/* Default (function) for non- multi-arch platforms. */
6166d547 762#if (!GDB_MULTI_ARCH) && !defined (D10V_MAKE_DADDR)
33489c5b
AC
763#define D10V_MAKE_DADDR(x) (internal_error ("D10V_MAKE_DADDR"), 0)
764#endif
765
104c1213
JM
766typedef CORE_ADDR (gdbarch_d10v_make_daddr_ftype) (CORE_ADDR x);
767extern CORE_ADDR gdbarch_d10v_make_daddr (struct gdbarch *gdbarch, CORE_ADDR x);
768extern void set_gdbarch_d10v_make_daddr (struct gdbarch *gdbarch, gdbarch_d10v_make_daddr_ftype *d10v_make_daddr);
33489c5b 769#if GDB_MULTI_ARCH
6166d547 770#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (D10V_MAKE_DADDR)
0f71a2f6
JM
771#define D10V_MAKE_DADDR(x) (gdbarch_d10v_make_daddr (current_gdbarch, x))
772#endif
33489c5b
AC
773#endif
774
775/* Default (function) for non- multi-arch platforms. */
6166d547 776#if (!GDB_MULTI_ARCH) && !defined (D10V_MAKE_IADDR)
33489c5b
AC
777#define D10V_MAKE_IADDR(x) (internal_error ("D10V_MAKE_IADDR"), 0)
778#endif
0f71a2f6 779
104c1213
JM
780typedef CORE_ADDR (gdbarch_d10v_make_iaddr_ftype) (CORE_ADDR x);
781extern CORE_ADDR gdbarch_d10v_make_iaddr (struct gdbarch *gdbarch, CORE_ADDR x);
782extern void set_gdbarch_d10v_make_iaddr (struct gdbarch *gdbarch, gdbarch_d10v_make_iaddr_ftype *d10v_make_iaddr);
33489c5b 783#if GDB_MULTI_ARCH
6166d547 784#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (D10V_MAKE_IADDR)
0f71a2f6
JM
785#define D10V_MAKE_IADDR(x) (gdbarch_d10v_make_iaddr (current_gdbarch, x))
786#endif
33489c5b
AC
787#endif
788
789/* Default (function) for non- multi-arch platforms. */
6166d547 790#if (!GDB_MULTI_ARCH) && !defined (D10V_DADDR_P)
33489c5b
AC
791#define D10V_DADDR_P(x) (internal_error ("D10V_DADDR_P"), 0)
792#endif
0f71a2f6 793
104c1213
JM
794typedef int (gdbarch_d10v_daddr_p_ftype) (CORE_ADDR x);
795extern int gdbarch_d10v_daddr_p (struct gdbarch *gdbarch, CORE_ADDR x);
796extern void set_gdbarch_d10v_daddr_p (struct gdbarch *gdbarch, gdbarch_d10v_daddr_p_ftype *d10v_daddr_p);
33489c5b 797#if GDB_MULTI_ARCH
6166d547 798#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (D10V_DADDR_P)
0f71a2f6
JM
799#define D10V_DADDR_P(x) (gdbarch_d10v_daddr_p (current_gdbarch, x))
800#endif
33489c5b
AC
801#endif
802
803/* Default (function) for non- multi-arch platforms. */
6166d547 804#if (!GDB_MULTI_ARCH) && !defined (D10V_IADDR_P)
33489c5b
AC
805#define D10V_IADDR_P(x) (internal_error ("D10V_IADDR_P"), 0)
806#endif
0f71a2f6 807
104c1213
JM
808typedef int (gdbarch_d10v_iaddr_p_ftype) (CORE_ADDR x);
809extern int gdbarch_d10v_iaddr_p (struct gdbarch *gdbarch, CORE_ADDR x);
810extern void set_gdbarch_d10v_iaddr_p (struct gdbarch *gdbarch, gdbarch_d10v_iaddr_p_ftype *d10v_iaddr_p);
33489c5b 811#if GDB_MULTI_ARCH
6166d547 812#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (D10V_IADDR_P)
0f71a2f6
JM
813#define D10V_IADDR_P(x) (gdbarch_d10v_iaddr_p (current_gdbarch, x))
814#endif
33489c5b
AC
815#endif
816
817/* Default (function) for non- multi-arch platforms. */
6166d547 818#if (!GDB_MULTI_ARCH) && !defined (D10V_CONVERT_DADDR_TO_RAW)
33489c5b
AC
819#define D10V_CONVERT_DADDR_TO_RAW(x) (internal_error ("D10V_CONVERT_DADDR_TO_RAW"), 0)
820#endif
0f71a2f6 821
104c1213
JM
822typedef CORE_ADDR (gdbarch_d10v_convert_daddr_to_raw_ftype) (CORE_ADDR x);
823extern CORE_ADDR gdbarch_d10v_convert_daddr_to_raw (struct gdbarch *gdbarch, CORE_ADDR x);
824extern void set_gdbarch_d10v_convert_daddr_to_raw (struct gdbarch *gdbarch, gdbarch_d10v_convert_daddr_to_raw_ftype *d10v_convert_daddr_to_raw);
33489c5b 825#if GDB_MULTI_ARCH
6166d547 826#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (D10V_CONVERT_DADDR_TO_RAW)
0f71a2f6
JM
827#define D10V_CONVERT_DADDR_TO_RAW(x) (gdbarch_d10v_convert_daddr_to_raw (current_gdbarch, x))
828#endif
33489c5b
AC
829#endif
830
831/* Default (function) for non- multi-arch platforms. */
6166d547 832#if (!GDB_MULTI_ARCH) && !defined (D10V_CONVERT_IADDR_TO_RAW)
33489c5b
AC
833#define D10V_CONVERT_IADDR_TO_RAW(x) (internal_error ("D10V_CONVERT_IADDR_TO_RAW"), 0)
834#endif
0f71a2f6 835
104c1213
JM
836typedef CORE_ADDR (gdbarch_d10v_convert_iaddr_to_raw_ftype) (CORE_ADDR x);
837extern CORE_ADDR gdbarch_d10v_convert_iaddr_to_raw (struct gdbarch *gdbarch, CORE_ADDR x);
838extern void set_gdbarch_d10v_convert_iaddr_to_raw (struct gdbarch *gdbarch, gdbarch_d10v_convert_iaddr_to_raw_ftype *d10v_convert_iaddr_to_raw);
33489c5b 839#if GDB_MULTI_ARCH
6166d547 840#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (D10V_CONVERT_IADDR_TO_RAW)
0f71a2f6
JM
841#define D10V_CONVERT_IADDR_TO_RAW(x) (gdbarch_d10v_convert_iaddr_to_raw (current_gdbarch, x))
842#endif
33489c5b 843#endif
0f71a2f6 844
104c1213
JM
845typedef void (gdbarch_store_struct_return_ftype) (CORE_ADDR addr, CORE_ADDR sp);
846extern void gdbarch_store_struct_return (struct gdbarch *gdbarch, CORE_ADDR addr, CORE_ADDR sp);
847extern void set_gdbarch_store_struct_return (struct gdbarch *gdbarch, gdbarch_store_struct_return_ftype *store_struct_return);
0f71a2f6 848#if GDB_MULTI_ARCH
6166d547 849#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (STORE_STRUCT_RETURN)
0f71a2f6
JM
850#define STORE_STRUCT_RETURN(addr, sp) (gdbarch_store_struct_return (current_gdbarch, addr, sp))
851#endif
852#endif
853
104c1213
JM
854typedef void (gdbarch_store_return_value_ftype) (struct type *type, char *valbuf);
855extern void gdbarch_store_return_value (struct gdbarch *gdbarch, struct type *type, char *valbuf);
856extern void set_gdbarch_store_return_value (struct gdbarch *gdbarch, gdbarch_store_return_value_ftype *store_return_value);
0f71a2f6 857#if GDB_MULTI_ARCH
6166d547 858#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (STORE_RETURN_VALUE)
0f71a2f6
JM
859#define STORE_RETURN_VALUE(type, valbuf) (gdbarch_store_return_value (current_gdbarch, type, valbuf))
860#endif
861#endif
862
104c1213
JM
863typedef CORE_ADDR (gdbarch_extract_struct_value_address_ftype) (char *regbuf);
864extern CORE_ADDR gdbarch_extract_struct_value_address (struct gdbarch *gdbarch, char *regbuf);
865extern void set_gdbarch_extract_struct_value_address (struct gdbarch *gdbarch, gdbarch_extract_struct_value_address_ftype *extract_struct_value_address);
0f71a2f6 866#if GDB_MULTI_ARCH
6166d547 867#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (EXTRACT_STRUCT_VALUE_ADDRESS)
0f71a2f6
JM
868#define EXTRACT_STRUCT_VALUE_ADDRESS(regbuf) (gdbarch_extract_struct_value_address (current_gdbarch, regbuf))
869#endif
870#endif
871
104c1213
JM
872typedef int (gdbarch_use_struct_convention_ftype) (int gcc_p, struct type *value_type);
873extern int gdbarch_use_struct_convention (struct gdbarch *gdbarch, int gcc_p, struct type *value_type);
874extern void set_gdbarch_use_struct_convention (struct gdbarch *gdbarch, gdbarch_use_struct_convention_ftype *use_struct_convention);
0f71a2f6 875#if GDB_MULTI_ARCH
6166d547 876#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (USE_STRUCT_CONVENTION)
0f71a2f6
JM
877#define USE_STRUCT_CONVENTION(gcc_p, value_type) (gdbarch_use_struct_convention (current_gdbarch, gcc_p, value_type))
878#endif
879#endif
880
104c1213
JM
881typedef void (gdbarch_frame_init_saved_regs_ftype) (struct frame_info *frame);
882extern void gdbarch_frame_init_saved_regs (struct gdbarch *gdbarch, struct frame_info *frame);
883extern void set_gdbarch_frame_init_saved_regs (struct gdbarch *gdbarch, gdbarch_frame_init_saved_regs_ftype *frame_init_saved_regs);
0f71a2f6 884#if GDB_MULTI_ARCH
6166d547 885#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (FRAME_INIT_SAVED_REGS)
0f71a2f6
JM
886#define FRAME_INIT_SAVED_REGS(frame) (gdbarch_frame_init_saved_regs (current_gdbarch, frame))
887#endif
888#endif
889
104c1213
JM
890typedef void (gdbarch_init_extra_frame_info_ftype) (int fromleaf, struct frame_info *frame);
891extern void gdbarch_init_extra_frame_info (struct gdbarch *gdbarch, int fromleaf, struct frame_info *frame);
892extern void set_gdbarch_init_extra_frame_info (struct gdbarch *gdbarch, gdbarch_init_extra_frame_info_ftype *init_extra_frame_info);
0f71a2f6 893#if GDB_MULTI_ARCH
6166d547 894#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (INIT_EXTRA_FRAME_INFO)
0f71a2f6
JM
895#define INIT_EXTRA_FRAME_INFO(fromleaf, frame) (gdbarch_init_extra_frame_info (current_gdbarch, fromleaf, frame))
896#endif
897#endif
898
104c1213
JM
899typedef CORE_ADDR (gdbarch_skip_prologue_ftype) (CORE_ADDR ip);
900extern CORE_ADDR gdbarch_skip_prologue (struct gdbarch *gdbarch, CORE_ADDR ip);
901extern void set_gdbarch_skip_prologue (struct gdbarch *gdbarch, gdbarch_skip_prologue_ftype *skip_prologue);
0f71a2f6 902#if GDB_MULTI_ARCH
6166d547 903#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (SKIP_PROLOGUE)
0f71a2f6
JM
904#define SKIP_PROLOGUE(ip) (gdbarch_skip_prologue (current_gdbarch, ip))
905#endif
906#endif
907
33489c5b 908/* Default (function) for non- multi-arch platforms. */
6166d547 909#if (!GDB_MULTI_ARCH) && !defined (PROLOGUE_FRAMELESS_P)
33489c5b
AC
910#define PROLOGUE_FRAMELESS_P(ip) (generic_prologue_frameless_p (ip))
911#endif
912
dad41f9a
AC
913typedef int (gdbarch_prologue_frameless_p_ftype) (CORE_ADDR ip);
914extern int gdbarch_prologue_frameless_p (struct gdbarch *gdbarch, CORE_ADDR ip);
915extern void set_gdbarch_prologue_frameless_p (struct gdbarch *gdbarch, gdbarch_prologue_frameless_p_ftype *prologue_frameless_p);
33489c5b 916#if GDB_MULTI_ARCH
6166d547 917#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (PROLOGUE_FRAMELESS_P)
dad41f9a
AC
918#define PROLOGUE_FRAMELESS_P(ip) (gdbarch_prologue_frameless_p (current_gdbarch, ip))
919#endif
33489c5b 920#endif
dad41f9a 921
104c1213
JM
922typedef int (gdbarch_inner_than_ftype) (CORE_ADDR lhs, CORE_ADDR rhs);
923extern int gdbarch_inner_than (struct gdbarch *gdbarch, CORE_ADDR lhs, CORE_ADDR rhs);
924extern void set_gdbarch_inner_than (struct gdbarch *gdbarch, gdbarch_inner_than_ftype *inner_than);
0f71a2f6 925#if GDB_MULTI_ARCH
6166d547 926#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (INNER_THAN)
0f71a2f6
JM
927#define INNER_THAN(lhs, rhs) (gdbarch_inner_than (current_gdbarch, lhs, rhs))
928#endif
929#endif
930
33489c5b 931/* Default (function) for non- multi-arch platforms. */
6166d547 932#if (!GDB_MULTI_ARCH) && !defined (BREAKPOINT_FROM_PC)
33489c5b
AC
933#define BREAKPOINT_FROM_PC(pcptr, lenptr) (legacy_breakpoint_from_pc (pcptr, lenptr))
934#endif
935
104c1213
JM
936typedef unsigned char * (gdbarch_breakpoint_from_pc_ftype) (CORE_ADDR *pcptr, int *lenptr);
937extern unsigned char * gdbarch_breakpoint_from_pc (struct gdbarch *gdbarch, CORE_ADDR *pcptr, int *lenptr);
938extern void set_gdbarch_breakpoint_from_pc (struct gdbarch *gdbarch, gdbarch_breakpoint_from_pc_ftype *breakpoint_from_pc);
33489c5b 939#if GDB_MULTI_ARCH
6166d547 940#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (BREAKPOINT_FROM_PC)
0f71a2f6
JM
941#define BREAKPOINT_FROM_PC(pcptr, lenptr) (gdbarch_breakpoint_from_pc (current_gdbarch, pcptr, lenptr))
942#endif
33489c5b
AC
943#endif
944
945/* Default (function) for non- multi-arch platforms. */
6166d547 946#if (!GDB_MULTI_ARCH) && !defined (MEMORY_INSERT_BREAKPOINT)
33489c5b
AC
947#define MEMORY_INSERT_BREAKPOINT(addr, contents_cache) (default_memory_insert_breakpoint (addr, contents_cache))
948#endif
0f71a2f6 949
917317f4
JM
950typedef int (gdbarch_memory_insert_breakpoint_ftype) (CORE_ADDR addr, char *contents_cache);
951extern int gdbarch_memory_insert_breakpoint (struct gdbarch *gdbarch, CORE_ADDR addr, char *contents_cache);
952extern void set_gdbarch_memory_insert_breakpoint (struct gdbarch *gdbarch, gdbarch_memory_insert_breakpoint_ftype *memory_insert_breakpoint);
33489c5b 953#if GDB_MULTI_ARCH
6166d547 954#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (MEMORY_INSERT_BREAKPOINT)
917317f4
JM
955#define MEMORY_INSERT_BREAKPOINT(addr, contents_cache) (gdbarch_memory_insert_breakpoint (current_gdbarch, addr, contents_cache))
956#endif
33489c5b
AC
957#endif
958
959/* Default (function) for non- multi-arch platforms. */
6166d547 960#if (!GDB_MULTI_ARCH) && !defined (MEMORY_REMOVE_BREAKPOINT)
33489c5b
AC
961#define MEMORY_REMOVE_BREAKPOINT(addr, contents_cache) (default_memory_remove_breakpoint (addr, contents_cache))
962#endif
917317f4
JM
963
964typedef int (gdbarch_memory_remove_breakpoint_ftype) (CORE_ADDR addr, char *contents_cache);
965extern int gdbarch_memory_remove_breakpoint (struct gdbarch *gdbarch, CORE_ADDR addr, char *contents_cache);
966extern void set_gdbarch_memory_remove_breakpoint (struct gdbarch *gdbarch, gdbarch_memory_remove_breakpoint_ftype *memory_remove_breakpoint);
33489c5b 967#if GDB_MULTI_ARCH
6166d547 968#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (MEMORY_REMOVE_BREAKPOINT)
917317f4
JM
969#define MEMORY_REMOVE_BREAKPOINT(addr, contents_cache) (gdbarch_memory_remove_breakpoint (current_gdbarch, addr, contents_cache))
970#endif
33489c5b 971#endif
917317f4 972
104c1213
JM
973extern CORE_ADDR gdbarch_decr_pc_after_break (struct gdbarch *gdbarch);
974extern void set_gdbarch_decr_pc_after_break (struct gdbarch *gdbarch, CORE_ADDR decr_pc_after_break);
0f71a2f6 975#if GDB_MULTI_ARCH
6166d547 976#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (DECR_PC_AFTER_BREAK)
0f71a2f6
JM
977#define DECR_PC_AFTER_BREAK (gdbarch_decr_pc_after_break (current_gdbarch))
978#endif
979#endif
980
104c1213
JM
981extern CORE_ADDR gdbarch_function_start_offset (struct gdbarch *gdbarch);
982extern void set_gdbarch_function_start_offset (struct gdbarch *gdbarch, CORE_ADDR function_start_offset);
0f71a2f6 983#if GDB_MULTI_ARCH
6166d547 984#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (FUNCTION_START_OFFSET)
0f71a2f6
JM
985#define FUNCTION_START_OFFSET (gdbarch_function_start_offset (current_gdbarch))
986#endif
987#endif
988
33489c5b 989/* Default (function) for non- multi-arch platforms. */
6166d547 990#if (!GDB_MULTI_ARCH) && !defined (REMOTE_TRANSLATE_XFER_ADDRESS)
33489c5b
AC
991#define REMOTE_TRANSLATE_XFER_ADDRESS(gdb_addr, gdb_len, rem_addr, rem_len) (generic_remote_translate_xfer_address (gdb_addr, gdb_len, rem_addr, rem_len))
992#endif
993
104c1213
JM
994typedef void (gdbarch_remote_translate_xfer_address_ftype) (CORE_ADDR gdb_addr, int gdb_len, CORE_ADDR *rem_addr, int *rem_len);
995extern void gdbarch_remote_translate_xfer_address (struct gdbarch *gdbarch, CORE_ADDR gdb_addr, int gdb_len, CORE_ADDR *rem_addr, int *rem_len);
996extern void set_gdbarch_remote_translate_xfer_address (struct gdbarch *gdbarch, gdbarch_remote_translate_xfer_address_ftype *remote_translate_xfer_address);
33489c5b 997#if GDB_MULTI_ARCH
6166d547 998#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (REMOTE_TRANSLATE_XFER_ADDRESS)
0f71a2f6
JM
999#define REMOTE_TRANSLATE_XFER_ADDRESS(gdb_addr, gdb_len, rem_addr, rem_len) (gdbarch_remote_translate_xfer_address (current_gdbarch, gdb_addr, gdb_len, rem_addr, rem_len))
1000#endif
33489c5b 1001#endif
0f71a2f6 1002
104c1213
JM
1003extern CORE_ADDR gdbarch_frame_args_skip (struct gdbarch *gdbarch);
1004extern void set_gdbarch_frame_args_skip (struct gdbarch *gdbarch, CORE_ADDR frame_args_skip);
0f71a2f6 1005#if GDB_MULTI_ARCH
6166d547 1006#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (FRAME_ARGS_SKIP)
0f71a2f6
JM
1007#define FRAME_ARGS_SKIP (gdbarch_frame_args_skip (current_gdbarch))
1008#endif
1009#endif
1010
33489c5b 1011/* Default (function) for non- multi-arch platforms. */
6166d547 1012#if (!GDB_MULTI_ARCH) && !defined (FRAMELESS_FUNCTION_INVOCATION)
33489c5b
AC
1013#define FRAMELESS_FUNCTION_INVOCATION(fi) (generic_frameless_function_invocation_not (fi))
1014#endif
1015
104c1213
JM
1016typedef int (gdbarch_frameless_function_invocation_ftype) (struct frame_info *fi);
1017extern int gdbarch_frameless_function_invocation (struct gdbarch *gdbarch, struct frame_info *fi);
1018extern void set_gdbarch_frameless_function_invocation (struct gdbarch *gdbarch, gdbarch_frameless_function_invocation_ftype *frameless_function_invocation);
33489c5b 1019#if GDB_MULTI_ARCH
6166d547 1020#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (FRAMELESS_FUNCTION_INVOCATION)
0f71a2f6
JM
1021#define FRAMELESS_FUNCTION_INVOCATION(fi) (gdbarch_frameless_function_invocation (current_gdbarch, fi))
1022#endif
33489c5b 1023#endif
0f71a2f6 1024
104c1213
JM
1025typedef CORE_ADDR (gdbarch_frame_chain_ftype) (struct frame_info *frame);
1026extern CORE_ADDR gdbarch_frame_chain (struct gdbarch *gdbarch, struct frame_info *frame);
1027extern void set_gdbarch_frame_chain (struct gdbarch *gdbarch, gdbarch_frame_chain_ftype *frame_chain);
0f71a2f6 1028#if GDB_MULTI_ARCH
6166d547 1029#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (FRAME_CHAIN)
0f71a2f6
JM
1030#define FRAME_CHAIN(frame) (gdbarch_frame_chain (current_gdbarch, frame))
1031#endif
1032#endif
1033
104c1213
JM
1034typedef int (gdbarch_frame_chain_valid_ftype) (CORE_ADDR chain, struct frame_info *thisframe);
1035extern int gdbarch_frame_chain_valid (struct gdbarch *gdbarch, CORE_ADDR chain, struct frame_info *thisframe);
1036extern void set_gdbarch_frame_chain_valid (struct gdbarch *gdbarch, gdbarch_frame_chain_valid_ftype *frame_chain_valid);
0f71a2f6 1037#if GDB_MULTI_ARCH
6166d547 1038#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (FRAME_CHAIN_VALID)
0f71a2f6
JM
1039#define FRAME_CHAIN_VALID(chain, thisframe) (gdbarch_frame_chain_valid (current_gdbarch, chain, thisframe))
1040#endif
1041#endif
1042
104c1213
JM
1043typedef CORE_ADDR (gdbarch_frame_saved_pc_ftype) (struct frame_info *fi);
1044extern CORE_ADDR gdbarch_frame_saved_pc (struct gdbarch *gdbarch, struct frame_info *fi);
1045extern void set_gdbarch_frame_saved_pc (struct gdbarch *gdbarch, gdbarch_frame_saved_pc_ftype *frame_saved_pc);
0f71a2f6 1046#if GDB_MULTI_ARCH
6166d547 1047#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (FRAME_SAVED_PC)
0f71a2f6
JM
1048#define FRAME_SAVED_PC(fi) (gdbarch_frame_saved_pc (current_gdbarch, fi))
1049#endif
1050#endif
1051
104c1213
JM
1052typedef CORE_ADDR (gdbarch_frame_args_address_ftype) (struct frame_info *fi);
1053extern CORE_ADDR gdbarch_frame_args_address (struct gdbarch *gdbarch, struct frame_info *fi);
1054extern void set_gdbarch_frame_args_address (struct gdbarch *gdbarch, gdbarch_frame_args_address_ftype *frame_args_address);
0f71a2f6 1055#if GDB_MULTI_ARCH
6166d547 1056#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (FRAME_ARGS_ADDRESS)
0f71a2f6
JM
1057#define FRAME_ARGS_ADDRESS(fi) (gdbarch_frame_args_address (current_gdbarch, fi))
1058#endif
1059#endif
1060
104c1213
JM
1061typedef CORE_ADDR (gdbarch_frame_locals_address_ftype) (struct frame_info *fi);
1062extern CORE_ADDR gdbarch_frame_locals_address (struct gdbarch *gdbarch, struct frame_info *fi);
1063extern void set_gdbarch_frame_locals_address (struct gdbarch *gdbarch, gdbarch_frame_locals_address_ftype *frame_locals_address);
0f71a2f6 1064#if GDB_MULTI_ARCH
6166d547 1065#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (FRAME_LOCALS_ADDRESS)
0f71a2f6
JM
1066#define FRAME_LOCALS_ADDRESS(fi) (gdbarch_frame_locals_address (current_gdbarch, fi))
1067#endif
1068#endif
1069
104c1213
JM
1070typedef CORE_ADDR (gdbarch_saved_pc_after_call_ftype) (struct frame_info *frame);
1071extern CORE_ADDR gdbarch_saved_pc_after_call (struct gdbarch *gdbarch, struct frame_info *frame);
1072extern void set_gdbarch_saved_pc_after_call (struct gdbarch *gdbarch, gdbarch_saved_pc_after_call_ftype *saved_pc_after_call);
0f71a2f6 1073#if GDB_MULTI_ARCH
6166d547 1074#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (SAVED_PC_AFTER_CALL)
0f71a2f6
JM
1075#define SAVED_PC_AFTER_CALL(frame) (gdbarch_saved_pc_after_call (current_gdbarch, frame))
1076#endif
1077#endif
1078
104c1213
JM
1079typedef int (gdbarch_frame_num_args_ftype) (struct frame_info *frame);
1080extern int gdbarch_frame_num_args (struct gdbarch *gdbarch, struct frame_info *frame);
1081extern void set_gdbarch_frame_num_args (struct gdbarch *gdbarch, gdbarch_frame_num_args_ftype *frame_num_args);
0f71a2f6 1082#if GDB_MULTI_ARCH
6166d547 1083#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (FRAME_NUM_ARGS)
0f71a2f6
JM
1084#define FRAME_NUM_ARGS(frame) (gdbarch_frame_num_args (current_gdbarch, frame))
1085#endif
1086#endif
1087
2ada493a
AC
1088#if defined (STACK_ALIGN)
1089/* Legacy for systems yet to multi-arch STACK_ALIGN */
1090#define STACK_ALIGN_P() (1)
1091#endif
1092
33489c5b 1093/* Default predicate for non- multi-arch targets. */
6166d547 1094#if (!GDB_MULTI_ARCH) && !defined (STACK_ALIGN_P)
33489c5b
AC
1095#define STACK_ALIGN_P() (0)
1096#endif
1097
2ada493a 1098extern int gdbarch_stack_align_p (struct gdbarch *gdbarch);
6166d547 1099#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (STACK_ALIGN_P)
2ada493a
AC
1100#define STACK_ALIGN_P() (gdbarch_stack_align_p (current_gdbarch))
1101#endif
1102
33489c5b 1103/* Default (function) for non- multi-arch platforms. */
6166d547 1104#if (!GDB_MULTI_ARCH) && !defined (STACK_ALIGN)
33489c5b
AC
1105#define STACK_ALIGN(sp) (internal_error ("STACK_ALIGN"), 0)
1106#endif
1107
2ada493a
AC
1108typedef CORE_ADDR (gdbarch_stack_align_ftype) (CORE_ADDR sp);
1109extern CORE_ADDR gdbarch_stack_align (struct gdbarch *gdbarch, CORE_ADDR sp);
1110extern void set_gdbarch_stack_align (struct gdbarch *gdbarch, gdbarch_stack_align_ftype *stack_align);
33489c5b 1111#if GDB_MULTI_ARCH
6166d547 1112#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (STACK_ALIGN)
2ada493a
AC
1113#define STACK_ALIGN(sp) (gdbarch_stack_align (current_gdbarch, sp))
1114#endif
33489c5b 1115#endif
2ada493a 1116
0a49d05e
AC
1117/* Default (value) for non- multi-arch platforms. */
1118#if (!GDB_MULTI_ARCH) && !defined (EXTRA_STACK_ALIGNMENT_NEEDED)
1119#define EXTRA_STACK_ALIGNMENT_NEEDED (1)
1120#endif
1121
1122extern int gdbarch_extra_stack_alignment_needed (struct gdbarch *gdbarch);
1123extern void set_gdbarch_extra_stack_alignment_needed (struct gdbarch *gdbarch, int extra_stack_alignment_needed);
1124#if GDB_MULTI_ARCH
1125#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (EXTRA_STACK_ALIGNMENT_NEEDED)
1126#define EXTRA_STACK_ALIGNMENT_NEEDED (gdbarch_extra_stack_alignment_needed (current_gdbarch))
1127#endif
1128#endif
1129
d03e67c9
AC
1130#if defined (REG_STRUCT_HAS_ADDR)
1131/* Legacy for systems yet to multi-arch REG_STRUCT_HAS_ADDR */
1132#define REG_STRUCT_HAS_ADDR_P() (1)
1133#endif
1134
33489c5b 1135/* Default predicate for non- multi-arch targets. */
6166d547 1136#if (!GDB_MULTI_ARCH) && !defined (REG_STRUCT_HAS_ADDR_P)
33489c5b
AC
1137#define REG_STRUCT_HAS_ADDR_P() (0)
1138#endif
1139
d03e67c9 1140extern int gdbarch_reg_struct_has_addr_p (struct gdbarch *gdbarch);
6166d547 1141#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (REG_STRUCT_HAS_ADDR_P)
d03e67c9
AC
1142#define REG_STRUCT_HAS_ADDR_P() (gdbarch_reg_struct_has_addr_p (current_gdbarch))
1143#endif
1144
33489c5b 1145/* Default (function) for non- multi-arch platforms. */
6166d547 1146#if (!GDB_MULTI_ARCH) && !defined (REG_STRUCT_HAS_ADDR)
33489c5b
AC
1147#define REG_STRUCT_HAS_ADDR(gcc_p, type) (internal_error ("REG_STRUCT_HAS_ADDR"), 0)
1148#endif
1149
d03e67c9
AC
1150typedef int (gdbarch_reg_struct_has_addr_ftype) (int gcc_p, struct type *type);
1151extern int gdbarch_reg_struct_has_addr (struct gdbarch *gdbarch, int gcc_p, struct type *type);
1152extern void set_gdbarch_reg_struct_has_addr (struct gdbarch *gdbarch, gdbarch_reg_struct_has_addr_ftype *reg_struct_has_addr);
33489c5b 1153#if GDB_MULTI_ARCH
6166d547 1154#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (REG_STRUCT_HAS_ADDR)
d03e67c9
AC
1155#define REG_STRUCT_HAS_ADDR(gcc_p, type) (gdbarch_reg_struct_has_addr (current_gdbarch, gcc_p, type))
1156#endif
33489c5b 1157#endif
d03e67c9 1158
d1e3cf49
AC
1159#if defined (SAVE_DUMMY_FRAME_TOS)
1160/* Legacy for systems yet to multi-arch SAVE_DUMMY_FRAME_TOS */
1161#define SAVE_DUMMY_FRAME_TOS_P() (1)
1162#endif
1163
1164/* Default predicate for non- multi-arch targets. */
6166d547 1165#if (!GDB_MULTI_ARCH) && !defined (SAVE_DUMMY_FRAME_TOS_P)
d1e3cf49
AC
1166#define SAVE_DUMMY_FRAME_TOS_P() (0)
1167#endif
1168
1169extern int gdbarch_save_dummy_frame_tos_p (struct gdbarch *gdbarch);
6166d547 1170#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (SAVE_DUMMY_FRAME_TOS_P)
d1e3cf49
AC
1171#define SAVE_DUMMY_FRAME_TOS_P() (gdbarch_save_dummy_frame_tos_p (current_gdbarch))
1172#endif
1173
1174/* Default (function) for non- multi-arch platforms. */
6166d547 1175#if (!GDB_MULTI_ARCH) && !defined (SAVE_DUMMY_FRAME_TOS)
d1e3cf49
AC
1176#define SAVE_DUMMY_FRAME_TOS(sp) (internal_error ("SAVE_DUMMY_FRAME_TOS"), 0)
1177#endif
1178
1179typedef void (gdbarch_save_dummy_frame_tos_ftype) (CORE_ADDR sp);
1180extern void gdbarch_save_dummy_frame_tos (struct gdbarch *gdbarch, CORE_ADDR sp);
1181extern void set_gdbarch_save_dummy_frame_tos (struct gdbarch *gdbarch, gdbarch_save_dummy_frame_tos_ftype *save_dummy_frame_tos);
1182#if GDB_MULTI_ARCH
6166d547 1183#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (SAVE_DUMMY_FRAME_TOS)
d1e3cf49
AC
1184#define SAVE_DUMMY_FRAME_TOS(sp) (gdbarch_save_dummy_frame_tos (current_gdbarch, sp))
1185#endif
1186#endif
1187
f0d4cc9e 1188/* Default (value) for non- multi-arch platforms. */
6166d547 1189#if (!GDB_MULTI_ARCH) && !defined (TARGET_FLOAT_FORMAT)
f0d4cc9e
AC
1190#define TARGET_FLOAT_FORMAT (default_float_format (current_gdbarch))
1191#endif
1192
1193extern const struct floatformat * gdbarch_float_format (struct gdbarch *gdbarch);
1194extern void set_gdbarch_float_format (struct gdbarch *gdbarch, const struct floatformat * float_format);
1195#if GDB_MULTI_ARCH
6166d547 1196#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (TARGET_FLOAT_FORMAT)
f0d4cc9e
AC
1197#define TARGET_FLOAT_FORMAT (gdbarch_float_format (current_gdbarch))
1198#endif
1199#endif
1200
1201/* Default (value) for non- multi-arch platforms. */
6166d547 1202#if (!GDB_MULTI_ARCH) && !defined (TARGET_DOUBLE_FORMAT)
f0d4cc9e
AC
1203#define TARGET_DOUBLE_FORMAT (default_double_format (current_gdbarch))
1204#endif
1205
1206extern const struct floatformat * gdbarch_double_format (struct gdbarch *gdbarch);
1207extern void set_gdbarch_double_format (struct gdbarch *gdbarch, const struct floatformat * double_format);
1208#if GDB_MULTI_ARCH
6166d547 1209#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (TARGET_DOUBLE_FORMAT)
f0d4cc9e
AC
1210#define TARGET_DOUBLE_FORMAT (gdbarch_double_format (current_gdbarch))
1211#endif
1212#endif
1213
1214/* Default (value) for non- multi-arch platforms. */
6166d547 1215#if (!GDB_MULTI_ARCH) && !defined (TARGET_LONG_DOUBLE_FORMAT)
f0d4cc9e
AC
1216#define TARGET_LONG_DOUBLE_FORMAT (&floatformat_unknown)
1217#endif
1218
1219extern const struct floatformat * gdbarch_long_double_format (struct gdbarch *gdbarch);
1220extern void set_gdbarch_long_double_format (struct gdbarch *gdbarch, const struct floatformat * long_double_format);
1221#if GDB_MULTI_ARCH
6166d547 1222#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (TARGET_LONG_DOUBLE_FORMAT)
f0d4cc9e
AC
1223#define TARGET_LONG_DOUBLE_FORMAT (gdbarch_long_double_format (current_gdbarch))
1224#endif
1225#endif
1226
104c1213 1227extern struct gdbarch_tdep *gdbarch_tdep (struct gdbarch *gdbarch);
0f71a2f6
JM
1228
1229
1230/* Mechanism for co-ordinating the selection of a specific
1231 architecture.
1232
1233 GDB targets (*-tdep.c) can register an interest in a specific
1234 architecture. Other GDB components can register a need to maintain
1235 per-architecture data.
1236
1237 The mechanisms below ensures that there is only a loose connection
1238 between the set-architecture command and the various GDB
1239 components. Each component can independantly register their need
1240 to maintain architecture specific data with gdbarch.
1241
1242 Pragmatics:
1243
1244 Previously, a single TARGET_ARCHITECTURE_HOOK was provided. It
1245 didn't scale.
1246
1247 The more traditional mega-struct containing architecture specific
1248 data for all the various GDB components was also considered. Since
1249 GDB is built from a variable number of (fairly independant)
1250 components it was determined that the global aproach was not
1251 applicable. */
1252
1253
1254/* Register a new architectural family with GDB.
1255
1256 Register support for the specified ARCHITECTURE with GDB. When
1257 gdbarch determines that the specified architecture has been
1258 selected, the corresponding INIT function is called.
1259
1260 --
1261
1262 The INIT function takes two parameters: INFO which contains the
1263 information available to gdbarch about the (possibly new)
1264 architecture; ARCHES which is a list of the previously created
1265 ``struct gdbarch'' for this architecture.
1266
1267 The INIT function parameter INFO shall, as far as possible, be
1268 pre-initialized with information obtained from INFO.ABFD or
1269 previously selected architecture (if similar). INIT shall ensure
1270 that the INFO.BYTE_ORDER is non-zero.
1271
1272 The INIT function shall return any of: NULL - indicating that it
1273 doesn't reconize the selected architecture; an existing ``struct
1274 gdbarch'' from the ARCHES list - indicating that the new
1275 architecture is just a synonym for an earlier architecture (see
1276 gdbarch_list_lookup_by_info()); a newly created ``struct gdbarch''
4b9b3959
AC
1277 - that describes the selected architecture (see gdbarch_alloc()).
1278
1279 The DUMP_TDEP function shall print out all target specific values.
1280 Care should be taken to ensure that the function works in both the
1281 multi-arch and non- multi-arch cases. */
0f71a2f6 1282
adf40b2e
JM
1283struct gdbarch_list
1284{
1285 struct gdbarch *gdbarch;
1286 struct gdbarch_list *next;
1287};
0f71a2f6 1288
adf40b2e
JM
1289struct gdbarch_info
1290{
1291 /* Use default: bfd_arch_unknown (ZERO). */
1292 enum bfd_architecture bfd_architecture;
0f71a2f6 1293
adf40b2e
JM
1294 /* Use default: NULL (ZERO). */
1295 const struct bfd_arch_info *bfd_arch_info;
0f71a2f6 1296
adf40b2e
JM
1297 /* Use default: 0 (ZERO). */
1298 int byte_order;
0f71a2f6 1299
adf40b2e
JM
1300 /* Use default: NULL (ZERO). */
1301 bfd *abfd;
0f71a2f6 1302
adf40b2e
JM
1303 /* Use default: NULL (ZERO). */
1304 struct gdbarch_tdep_info *tdep_info;
1305};
0f71a2f6 1306
104c1213 1307typedef struct gdbarch *(gdbarch_init_ftype) (struct gdbarch_info info, struct gdbarch_list *arches);
4b9b3959 1308typedef void (gdbarch_dump_tdep_ftype) (struct gdbarch *gdbarch, struct ui_file *file);
0f71a2f6 1309
4b9b3959 1310/* DEPRECATED - use gdbarch_register() */
104c1213 1311extern void register_gdbarch_init (enum bfd_architecture architecture, gdbarch_init_ftype *);
0f71a2f6 1312
4b9b3959
AC
1313extern void gdbarch_register (enum bfd_architecture architecture,
1314 gdbarch_init_ftype *,
1315 gdbarch_dump_tdep_ftype *);
1316
0f71a2f6 1317
b4a20239
AC
1318/* Return a freshly allocated, NULL terminated, array of the valid
1319 architecture names. Since architectures are registered during the
1320 _initialize phase this function only returns useful information
1321 once initialization has been completed. */
1322
1323extern const char **gdbarch_printable_names (void);
1324
1325
0f71a2f6
JM
1326/* Helper function. Search the list of ARCHES for a GDBARCH that
1327 matches the information provided by INFO. */
1328
104c1213 1329extern struct gdbarch_list *gdbarch_list_lookup_by_info (struct gdbarch_list *arches, const struct gdbarch_info *info);
0f71a2f6
JM
1330
1331
1332/* Helper function. Create a preliminary ``struct gdbarch''. Perform
1333 basic initialization using values obtained from the INFO andTDEP
1334 parameters. set_gdbarch_*() functions are called to complete the
1335 initialization of the object. */
1336
104c1213 1337extern struct gdbarch *gdbarch_alloc (const struct gdbarch_info *info, struct gdbarch_tdep *tdep);
0f71a2f6
JM
1338
1339
4b9b3959
AC
1340/* Helper function. Free a partially-constructed ``struct gdbarch''.
1341 It is assumed that the caller freeds the ``struct
1342 gdbarch_tdep''. */
1343
058f20d5
JB
1344extern void gdbarch_free (struct gdbarch *);
1345
1346
0f71a2f6
JM
1347/* Helper function. Force an update of the current architecture. Used
1348 by legacy targets that have added their own target specific
1349 architecture manipulation commands.
1350
1351 The INFO parameter shall be fully initialized (``memset (&INFO,
1352 sizeof (info), 0)'' set relevant fields) before gdbarch_update() is
1353 called. gdbarch_update() shall initialize any ``default'' fields
1354 using information obtained from the previous architecture or
1355 INFO.ABFD (if specified) before calling the corresponding
1356 architectures INIT function. */
1357
104c1213 1358extern int gdbarch_update (struct gdbarch_info info);
0f71a2f6
JM
1359
1360
1361
1362/* Register per-architecture data-pointer.
1363
1364 Reserve space for a per-architecture data-pointer. An identifier
1365 for the reserved data-pointer is returned. That identifer should
1366 be saved in a local static.
1367
1368 When a new architecture is selected, INIT() is called. When a
1369 previous architecture is re-selected, the per-architecture
1370 data-pointer for that previous architecture is restored (INIT() is
1371 not called).
1372
1373 INIT() shall return the initial value for the per-architecture
1374 data-pointer for the current architecture.
1375
1376 Multiple registrarants for any architecture are allowed (and
1377 strongly encouraged). */
1378
104c1213
JM
1379typedef void *(gdbarch_data_ftype) (void);
1380extern struct gdbarch_data *register_gdbarch_data (gdbarch_data_ftype *init);
0f71a2f6
JM
1381
1382/* Return the value of the per-architecture data-pointer for the
1383 current architecture. */
1384
104c1213 1385extern void *gdbarch_data (struct gdbarch_data*);
0f71a2f6
JM
1386
1387
1388
1389/* Register per-architecture memory region.
1390
1391 Provide a memory-region swap mechanism. Per-architecture memory
1392 region are created. These memory regions are swapped whenever the
1393 architecture is changed. For a new architecture, the memory region
1394 is initialized with zero (0) and the INIT function is called.
1395
1396 Memory regions are swapped / initialized in the order that they are
1397 registered. NULL DATA and/or INIT values can be specified.
1398
1399 New code should use register_gdbarch_data(). */
1400
104c1213
JM
1401typedef void (gdbarch_swap_ftype) (void);
1402extern void register_gdbarch_swap (void *data, unsigned long size, gdbarch_swap_ftype *init);
e514a9d6 1403#define REGISTER_GDBARCH_SWAP(VAR) register_gdbarch_swap (&(VAR), sizeof ((VAR)), NULL)
0f71a2f6
JM
1404
1405
1406
c906108c
SS
1407/* The target-system-dependant byte order is dynamic */
1408
1409/* TARGET_BYTE_ORDER_SELECTABLE_P determines if the target endianness
b83266a0 1410 is selectable at runtime. The user can use the ``set endian''
c906108c
SS
1411 command to change it. TARGET_BYTE_ORDER_AUTO is nonzero when
1412 target_byte_order should be auto-detected (from the program image
1413 say). */
1414
0f71a2f6
JM
1415#if GDB_MULTI_ARCH
1416/* Multi-arch GDB is always bi-endian. */
1417#define TARGET_BYTE_ORDER_SELECTABLE_P 1
1418#endif
1419
c906108c
SS
1420#ifndef TARGET_BYTE_ORDER_SELECTABLE_P
1421/* compat - Catch old targets that define TARGET_BYTE_ORDER_SLECTABLE
1422 when they should have defined TARGET_BYTE_ORDER_SELECTABLE_P 1 */
1423#ifdef TARGET_BYTE_ORDER_SELECTABLE
1424#define TARGET_BYTE_ORDER_SELECTABLE_P 1
1425#else
1426#define TARGET_BYTE_ORDER_SELECTABLE_P 0
1427#endif
1428#endif
1429
adf40b2e 1430extern int target_byte_order;
c906108c
SS
1431#ifdef TARGET_BYTE_ORDER_SELECTABLE
1432/* compat - Catch old targets that define TARGET_BYTE_ORDER_SELECTABLE
1433 and expect defs.h to re-define TARGET_BYTE_ORDER. */
1434#undef TARGET_BYTE_ORDER
1435#endif
1436#ifndef TARGET_BYTE_ORDER
1437#define TARGET_BYTE_ORDER (target_byte_order + 0)
1438#endif
1439
adf40b2e 1440extern int target_byte_order_auto;
c906108c
SS
1441#ifndef TARGET_BYTE_ORDER_AUTO
1442#define TARGET_BYTE_ORDER_AUTO (target_byte_order_auto + 0)
1443#endif
1444
1445
1446
1447/* The target-system-dependant BFD architecture is dynamic */
1448
adf40b2e 1449extern int target_architecture_auto;
c906108c
SS
1450#ifndef TARGET_ARCHITECTURE_AUTO
1451#define TARGET_ARCHITECTURE_AUTO (target_architecture_auto + 0)
1452#endif
1453
adf40b2e 1454extern const struct bfd_arch_info *target_architecture;
c906108c
SS
1455#ifndef TARGET_ARCHITECTURE
1456#define TARGET_ARCHITECTURE (target_architecture + 0)
1457#endif
1458
c906108c
SS
1459
1460/* The target-system-dependant disassembler is semi-dynamic */
1461
1462#include "dis-asm.h" /* Get defs for disassemble_info */
1463
104c1213 1464extern int dis_asm_read_memory (bfd_vma memaddr, bfd_byte *myaddr,
ff844c8d 1465 unsigned int len, disassemble_info *info);
c906108c 1466
104c1213
JM
1467extern void dis_asm_memory_error (int status, bfd_vma memaddr,
1468 disassemble_info *info);
c906108c 1469
104c1213
JM
1470extern void dis_asm_print_address (bfd_vma addr,
1471 disassemble_info *info);
c906108c 1472
104c1213 1473extern int (*tm_print_insn) (bfd_vma, disassemble_info*);
adf40b2e 1474extern disassemble_info tm_print_insn_info;
c906108c
SS
1475#ifndef TARGET_PRINT_INSN
1476#define TARGET_PRINT_INSN(vma, info) (*tm_print_insn) (vma, info)
1477#endif
1478#ifndef TARGET_PRINT_INSN_INFO
1479#define TARGET_PRINT_INSN_INFO (&tm_print_insn_info)
1480#endif
1481
1482
1483
7a292a7a
SS
1484/* Explicit test for D10V architecture.
1485 USE of these macro's is *STRONGLY* discouraged. */
1486
1487#define GDB_TARGET_IS_D10V (TARGET_ARCHITECTURE->arch == bfd_arch_d10v)
7a292a7a
SS
1488
1489
ac9a91a7
JM
1490/* Fallback definition for EXTRACT_STRUCT_VALUE_ADDRESS */
1491#ifndef EXTRACT_STRUCT_VALUE_ADDRESS
1492#define EXTRACT_STRUCT_VALUE_ADDRESS_P (0)
96baa820 1493#define EXTRACT_STRUCT_VALUE_ADDRESS(X) (internal_error ("gdbarch: EXTRACT_STRUCT_VALUE_ADDRESS"), 0)
ac9a91a7
JM
1494#else
1495#ifndef EXTRACT_STRUCT_VALUE_ADDRESS_P
1496#define EXTRACT_STRUCT_VALUE_ADDRESS_P (1)
1497#endif
1498#endif
1499
1500
c906108c
SS
1501/* Set the dynamic target-system-dependant parameters (architecture,
1502 byte-order, ...) using information found in the BFD */
1503
104c1213 1504extern void set_gdbarch_from_file (bfd *);
c906108c
SS
1505
1506
e514a9d6
JM
1507/* Initialize the current architecture to the "first" one we find on
1508 our list. */
1509
1510extern void initialize_current_architecture (void);
1511
cce74817 1512
c906108c 1513/* gdbarch trace variable */
adf40b2e 1514extern int gdbarch_debug;
c906108c 1515
4b9b3959 1516extern void gdbarch_dump (struct gdbarch *gdbarch, struct ui_file *file);
0f71a2f6 1517
c906108c 1518#endif
This page took 0.221815 seconds and 4 git commands to generate.