Use add_set_auto_boolean_cmd() to implement ``set remote ?-packet''
[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
104c1213
JM
413extern int gdbarch_use_generic_dummy_frames (struct gdbarch *gdbarch);
414extern void set_gdbarch_use_generic_dummy_frames (struct gdbarch *gdbarch, int use_generic_dummy_frames);
0f71a2f6 415#if GDB_MULTI_ARCH
6166d547 416#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (USE_GENERIC_DUMMY_FRAMES)
0f71a2f6
JM
417#define USE_GENERIC_DUMMY_FRAMES (gdbarch_use_generic_dummy_frames (current_gdbarch))
418#endif
419#endif
420
104c1213
JM
421extern int gdbarch_call_dummy_location (struct gdbarch *gdbarch);
422extern void set_gdbarch_call_dummy_location (struct gdbarch *gdbarch, int call_dummy_location);
0f71a2f6 423#if GDB_MULTI_ARCH
6166d547 424#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (CALL_DUMMY_LOCATION)
0f71a2f6
JM
425#define CALL_DUMMY_LOCATION (gdbarch_call_dummy_location (current_gdbarch))
426#endif
427#endif
428
104c1213
JM
429typedef CORE_ADDR (gdbarch_call_dummy_address_ftype) (void);
430extern CORE_ADDR gdbarch_call_dummy_address (struct gdbarch *gdbarch);
431extern void set_gdbarch_call_dummy_address (struct gdbarch *gdbarch, gdbarch_call_dummy_address_ftype *call_dummy_address);
0f71a2f6 432#if GDB_MULTI_ARCH
6166d547 433#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (CALL_DUMMY_ADDRESS)
0f71a2f6
JM
434#define CALL_DUMMY_ADDRESS() (gdbarch_call_dummy_address (current_gdbarch))
435#endif
436#endif
437
104c1213
JM
438extern CORE_ADDR gdbarch_call_dummy_start_offset (struct gdbarch *gdbarch);
439extern void set_gdbarch_call_dummy_start_offset (struct gdbarch *gdbarch, CORE_ADDR call_dummy_start_offset);
0f71a2f6 440#if GDB_MULTI_ARCH
6166d547 441#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (CALL_DUMMY_START_OFFSET)
0f71a2f6
JM
442#define CALL_DUMMY_START_OFFSET (gdbarch_call_dummy_start_offset (current_gdbarch))
443#endif
444#endif
445
104c1213
JM
446extern CORE_ADDR gdbarch_call_dummy_breakpoint_offset (struct gdbarch *gdbarch);
447extern void set_gdbarch_call_dummy_breakpoint_offset (struct gdbarch *gdbarch, CORE_ADDR call_dummy_breakpoint_offset);
0f71a2f6 448#if GDB_MULTI_ARCH
6166d547 449#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (CALL_DUMMY_BREAKPOINT_OFFSET)
0f71a2f6
JM
450#define CALL_DUMMY_BREAKPOINT_OFFSET (gdbarch_call_dummy_breakpoint_offset (current_gdbarch))
451#endif
452#endif
453
104c1213
JM
454extern int gdbarch_call_dummy_breakpoint_offset_p (struct gdbarch *gdbarch);
455extern void set_gdbarch_call_dummy_breakpoint_offset_p (struct gdbarch *gdbarch, int call_dummy_breakpoint_offset_p);
0f71a2f6 456#if GDB_MULTI_ARCH
6166d547 457#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (CALL_DUMMY_BREAKPOINT_OFFSET_P)
0f71a2f6
JM
458#define CALL_DUMMY_BREAKPOINT_OFFSET_P (gdbarch_call_dummy_breakpoint_offset_p (current_gdbarch))
459#endif
460#endif
461
104c1213
JM
462extern int gdbarch_call_dummy_length (struct gdbarch *gdbarch);
463extern void set_gdbarch_call_dummy_length (struct gdbarch *gdbarch, int call_dummy_length);
0f71a2f6 464#if GDB_MULTI_ARCH
6166d547 465#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (CALL_DUMMY_LENGTH)
0f71a2f6
JM
466#define CALL_DUMMY_LENGTH (gdbarch_call_dummy_length (current_gdbarch))
467#endif
468#endif
469
104c1213
JM
470typedef int (gdbarch_pc_in_call_dummy_ftype) (CORE_ADDR pc, CORE_ADDR sp, CORE_ADDR frame_address);
471extern int gdbarch_pc_in_call_dummy (struct gdbarch *gdbarch, CORE_ADDR pc, CORE_ADDR sp, CORE_ADDR frame_address);
472extern void set_gdbarch_pc_in_call_dummy (struct gdbarch *gdbarch, gdbarch_pc_in_call_dummy_ftype *pc_in_call_dummy);
0f71a2f6 473#if GDB_MULTI_ARCH
6166d547 474#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (PC_IN_CALL_DUMMY)
0f71a2f6
JM
475#define PC_IN_CALL_DUMMY(pc, sp, frame_address) (gdbarch_pc_in_call_dummy (current_gdbarch, pc, sp, frame_address))
476#endif
477#endif
478
104c1213
JM
479extern int gdbarch_call_dummy_p (struct gdbarch *gdbarch);
480extern void set_gdbarch_call_dummy_p (struct gdbarch *gdbarch, int call_dummy_p);
0f71a2f6 481#if GDB_MULTI_ARCH
6166d547 482#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (CALL_DUMMY_P)
0f71a2f6
JM
483#define CALL_DUMMY_P (gdbarch_call_dummy_p (current_gdbarch))
484#endif
485#endif
486
33489c5b 487/* Default (value) for non- multi-arch platforms. */
6166d547 488#if (!GDB_MULTI_ARCH) && !defined (CALL_DUMMY_WORDS)
33489c5b
AC
489#define CALL_DUMMY_WORDS (legacy_call_dummy_words)
490#endif
491
104c1213
JM
492extern LONGEST * gdbarch_call_dummy_words (struct gdbarch *gdbarch);
493extern void set_gdbarch_call_dummy_words (struct gdbarch *gdbarch, LONGEST * call_dummy_words);
33489c5b 494#if GDB_MULTI_ARCH
6166d547 495#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (CALL_DUMMY_WORDS)
0f71a2f6
JM
496#define CALL_DUMMY_WORDS (gdbarch_call_dummy_words (current_gdbarch))
497#endif
33489c5b
AC
498#endif
499
500/* Default (value) for non- multi-arch platforms. */
6166d547 501#if (!GDB_MULTI_ARCH) && !defined (SIZEOF_CALL_DUMMY_WORDS)
33489c5b
AC
502#define SIZEOF_CALL_DUMMY_WORDS (legacy_sizeof_call_dummy_words)
503#endif
0f71a2f6 504
104c1213
JM
505extern int gdbarch_sizeof_call_dummy_words (struct gdbarch *gdbarch);
506extern void set_gdbarch_sizeof_call_dummy_words (struct gdbarch *gdbarch, int sizeof_call_dummy_words);
33489c5b 507#if GDB_MULTI_ARCH
6166d547 508#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (SIZEOF_CALL_DUMMY_WORDS)
0f71a2f6
JM
509#define SIZEOF_CALL_DUMMY_WORDS (gdbarch_sizeof_call_dummy_words (current_gdbarch))
510#endif
33489c5b 511#endif
0f71a2f6 512
104c1213
JM
513extern int gdbarch_call_dummy_stack_adjust_p (struct gdbarch *gdbarch);
514extern void set_gdbarch_call_dummy_stack_adjust_p (struct gdbarch *gdbarch, int call_dummy_stack_adjust_p);
0f71a2f6 515#if GDB_MULTI_ARCH
6166d547 516#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (CALL_DUMMY_STACK_ADJUST_P)
0f71a2f6
JM
517#define CALL_DUMMY_STACK_ADJUST_P (gdbarch_call_dummy_stack_adjust_p (current_gdbarch))
518#endif
519#endif
520
104c1213
JM
521extern int gdbarch_call_dummy_stack_adjust (struct gdbarch *gdbarch);
522extern void set_gdbarch_call_dummy_stack_adjust (struct gdbarch *gdbarch, int call_dummy_stack_adjust);
0f71a2f6 523#if GDB_MULTI_ARCH
6166d547 524#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (CALL_DUMMY_STACK_ADJUST)
0f71a2f6
JM
525#define CALL_DUMMY_STACK_ADJUST (gdbarch_call_dummy_stack_adjust (current_gdbarch))
526#endif
527#endif
528
104c1213
JM
529typedef 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);
530extern 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);
531extern void set_gdbarch_fix_call_dummy (struct gdbarch *gdbarch, gdbarch_fix_call_dummy_ftype *fix_call_dummy);
0f71a2f6 532#if GDB_MULTI_ARCH
6166d547 533#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (FIX_CALL_DUMMY)
0f71a2f6
JM
534#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))
535#endif
536#endif
537
104c1213
JM
538extern int gdbarch_believe_pcc_promotion (struct gdbarch *gdbarch);
539extern void set_gdbarch_believe_pcc_promotion (struct gdbarch *gdbarch, int believe_pcc_promotion);
0f71a2f6 540#if GDB_MULTI_ARCH
6166d547 541#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (BELIEVE_PCC_PROMOTION)
0f71a2f6
JM
542#define BELIEVE_PCC_PROMOTION (gdbarch_believe_pcc_promotion (current_gdbarch))
543#endif
544#endif
545
104c1213
JM
546extern int gdbarch_believe_pcc_promotion_type (struct gdbarch *gdbarch);
547extern void set_gdbarch_believe_pcc_promotion_type (struct gdbarch *gdbarch, int believe_pcc_promotion_type);
0f71a2f6 548#if GDB_MULTI_ARCH
6166d547 549#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (BELIEVE_PCC_PROMOTION_TYPE)
0f71a2f6
JM
550#define BELIEVE_PCC_PROMOTION_TYPE (gdbarch_believe_pcc_promotion_type (current_gdbarch))
551#endif
552#endif
553
33489c5b 554/* Default (function) for non- multi-arch platforms. */
6166d547 555#if (!GDB_MULTI_ARCH) && !defined (COERCE_FLOAT_TO_DOUBLE)
33489c5b
AC
556#define COERCE_FLOAT_TO_DOUBLE(formal, actual) (default_coerce_float_to_double (formal, actual))
557#endif
558
b9a8e3bf
JB
559typedef int (gdbarch_coerce_float_to_double_ftype) (struct type *formal, struct type *actual);
560extern int gdbarch_coerce_float_to_double (struct gdbarch *gdbarch, struct type *formal, struct type *actual);
561extern void set_gdbarch_coerce_float_to_double (struct gdbarch *gdbarch, gdbarch_coerce_float_to_double_ftype *coerce_float_to_double);
33489c5b 562#if GDB_MULTI_ARCH
6166d547 563#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (COERCE_FLOAT_TO_DOUBLE)
b9a8e3bf
JB
564#define COERCE_FLOAT_TO_DOUBLE(formal, actual) (gdbarch_coerce_float_to_double (current_gdbarch, formal, actual))
565#endif
33489c5b 566#endif
b9a8e3bf 567
104c1213
JM
568typedef void (gdbarch_get_saved_register_ftype) (char *raw_buffer, int *optimized, CORE_ADDR *addrp, struct frame_info *frame, int regnum, enum lval_type *lval);
569extern 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);
570extern void set_gdbarch_get_saved_register (struct gdbarch *gdbarch, gdbarch_get_saved_register_ftype *get_saved_register);
0f71a2f6 571#if GDB_MULTI_ARCH
6166d547 572#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (GET_SAVED_REGISTER)
0f71a2f6
JM
573#define GET_SAVED_REGISTER(raw_buffer, optimized, addrp, frame, regnum, lval) (gdbarch_get_saved_register (current_gdbarch, raw_buffer, optimized, addrp, frame, regnum, lval))
574#endif
575#endif
576
33489c5b 577/* Default (function) for non- multi-arch platforms. */
6166d547 578#if (!GDB_MULTI_ARCH) && !defined (REGISTER_CONVERTIBLE)
33489c5b
AC
579#define REGISTER_CONVERTIBLE(nr) (generic_register_convertible_not (nr))
580#endif
581
104c1213
JM
582typedef int (gdbarch_register_convertible_ftype) (int nr);
583extern int gdbarch_register_convertible (struct gdbarch *gdbarch, int nr);
584extern void set_gdbarch_register_convertible (struct gdbarch *gdbarch, gdbarch_register_convertible_ftype *register_convertible);
33489c5b 585#if GDB_MULTI_ARCH
6166d547 586#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (REGISTER_CONVERTIBLE)
0f71a2f6
JM
587#define REGISTER_CONVERTIBLE(nr) (gdbarch_register_convertible (current_gdbarch, nr))
588#endif
33489c5b
AC
589#endif
590
591/* Default (function) for non- multi-arch platforms. */
6166d547 592#if (!GDB_MULTI_ARCH) && !defined (REGISTER_CONVERT_TO_VIRTUAL)
33489c5b
AC
593#define REGISTER_CONVERT_TO_VIRTUAL(regnum, type, from, to) (internal_error ("REGISTER_CONVERT_TO_VIRTUAL"), 0)
594#endif
0f71a2f6 595
104c1213
JM
596typedef void (gdbarch_register_convert_to_virtual_ftype) (int regnum, struct type *type, char *from, char *to);
597extern void gdbarch_register_convert_to_virtual (struct gdbarch *gdbarch, int regnum, struct type *type, char *from, char *to);
598extern void set_gdbarch_register_convert_to_virtual (struct gdbarch *gdbarch, gdbarch_register_convert_to_virtual_ftype *register_convert_to_virtual);
33489c5b 599#if GDB_MULTI_ARCH
6166d547 600#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (REGISTER_CONVERT_TO_VIRTUAL)
0f71a2f6
JM
601#define REGISTER_CONVERT_TO_VIRTUAL(regnum, type, from, to) (gdbarch_register_convert_to_virtual (current_gdbarch, regnum, type, from, to))
602#endif
33489c5b
AC
603#endif
604
605/* Default (function) for non- multi-arch platforms. */
6166d547 606#if (!GDB_MULTI_ARCH) && !defined (REGISTER_CONVERT_TO_RAW)
33489c5b
AC
607#define REGISTER_CONVERT_TO_RAW(type, regnum, from, to) (internal_error ("REGISTER_CONVERT_TO_RAW"), 0)
608#endif
0f71a2f6 609
104c1213
JM
610typedef void (gdbarch_register_convert_to_raw_ftype) (struct type *type, int regnum, char *from, char *to);
611extern void gdbarch_register_convert_to_raw (struct gdbarch *gdbarch, struct type *type, int regnum, char *from, char *to);
612extern void set_gdbarch_register_convert_to_raw (struct gdbarch *gdbarch, gdbarch_register_convert_to_raw_ftype *register_convert_to_raw);
33489c5b 613#if GDB_MULTI_ARCH
6166d547 614#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (REGISTER_CONVERT_TO_RAW)
0f71a2f6
JM
615#define REGISTER_CONVERT_TO_RAW(type, regnum, from, to) (gdbarch_register_convert_to_raw (current_gdbarch, type, regnum, from, to))
616#endif
33489c5b
AC
617#endif
618
34620563
AC
619/* This function is called when the value of a pseudo-register needs to
620 be updated. Typically it will be defined on a per-architecture
621 basis. */
622
7f1b2585 623/* Default (function) for non- multi-arch platforms. */
6166d547 624#if (!GDB_MULTI_ARCH) && !defined (FETCH_PSEUDO_REGISTER)
7f1b2585
EZ
625#define FETCH_PSEUDO_REGISTER(regnum) (internal_error ("FETCH_PSEUDO_REGISTER"), 0)
626#endif
627
628typedef void (gdbarch_fetch_pseudo_register_ftype) (int regnum);
629extern void gdbarch_fetch_pseudo_register (struct gdbarch *gdbarch, int regnum);
630extern void set_gdbarch_fetch_pseudo_register (struct gdbarch *gdbarch, gdbarch_fetch_pseudo_register_ftype *fetch_pseudo_register);
631#if GDB_MULTI_ARCH
6166d547 632#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (FETCH_PSEUDO_REGISTER)
7f1b2585
EZ
633#define FETCH_PSEUDO_REGISTER(regnum) (gdbarch_fetch_pseudo_register (current_gdbarch, regnum))
634#endif
635#endif
636
34620563
AC
637/* This function is called when the value of a pseudo-register needs to
638 be set or stored. Typically it will be defined on a
639 per-architecture basis. */
640
7f1b2585 641/* Default (function) for non- multi-arch platforms. */
6166d547 642#if (!GDB_MULTI_ARCH) && !defined (STORE_PSEUDO_REGISTER)
7f1b2585
EZ
643#define STORE_PSEUDO_REGISTER(regnum) (internal_error ("STORE_PSEUDO_REGISTER"), 0)
644#endif
645
646typedef void (gdbarch_store_pseudo_register_ftype) (int regnum);
647extern void gdbarch_store_pseudo_register (struct gdbarch *gdbarch, int regnum);
648extern void set_gdbarch_store_pseudo_register (struct gdbarch *gdbarch, gdbarch_store_pseudo_register_ftype *store_pseudo_register);
649#if GDB_MULTI_ARCH
6166d547 650#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (STORE_PSEUDO_REGISTER)
7f1b2585
EZ
651#define STORE_PSEUDO_REGISTER(regnum) (gdbarch_store_pseudo_register (current_gdbarch, regnum))
652#endif
653#endif
654
33489c5b 655/* Default (function) for non- multi-arch platforms. */
6166d547 656#if (!GDB_MULTI_ARCH) && !defined (POINTER_TO_ADDRESS)
ac2e2ef7 657#define POINTER_TO_ADDRESS(type, buf) (unsigned_pointer_to_address (type, buf))
33489c5b 658#endif
4478b372 659
ac2e2ef7
AC
660typedef CORE_ADDR (gdbarch_pointer_to_address_ftype) (struct type *type, void *buf);
661extern CORE_ADDR gdbarch_pointer_to_address (struct gdbarch *gdbarch, struct type *type, void *buf);
4478b372 662extern void set_gdbarch_pointer_to_address (struct gdbarch *gdbarch, gdbarch_pointer_to_address_ftype *pointer_to_address);
33489c5b 663#if GDB_MULTI_ARCH
6166d547 664#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (POINTER_TO_ADDRESS)
4478b372
JB
665#define POINTER_TO_ADDRESS(type, buf) (gdbarch_pointer_to_address (current_gdbarch, type, buf))
666#endif
33489c5b
AC
667#endif
668
669/* Default (function) for non- multi-arch platforms. */
6166d547 670#if (!GDB_MULTI_ARCH) && !defined (ADDRESS_TO_POINTER)
ac2e2ef7 671#define ADDRESS_TO_POINTER(type, buf, addr) (unsigned_address_to_pointer (type, buf, addr))
33489c5b 672#endif
4478b372 673
ac2e2ef7
AC
674typedef void (gdbarch_address_to_pointer_ftype) (struct type *type, void *buf, CORE_ADDR addr);
675extern void gdbarch_address_to_pointer (struct gdbarch *gdbarch, struct type *type, void *buf, CORE_ADDR addr);
4478b372 676extern void set_gdbarch_address_to_pointer (struct gdbarch *gdbarch, gdbarch_address_to_pointer_ftype *address_to_pointer);
33489c5b 677#if GDB_MULTI_ARCH
6166d547 678#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (ADDRESS_TO_POINTER)
4478b372
JB
679#define ADDRESS_TO_POINTER(type, buf, addr) (gdbarch_address_to_pointer (current_gdbarch, type, buf, addr))
680#endif
33489c5b
AC
681#endif
682
683/* Default (function) for non- multi-arch platforms. */
6166d547 684#if (!GDB_MULTI_ARCH) && !defined (RETURN_VALUE_ON_STACK)
33489c5b
AC
685#define RETURN_VALUE_ON_STACK(type) (generic_return_value_on_stack_not (type))
686#endif
0f71a2f6 687
71a9f22e
JB
688typedef int (gdbarch_return_value_on_stack_ftype) (struct type *type);
689extern int gdbarch_return_value_on_stack (struct gdbarch *gdbarch, struct type *type);
690extern void set_gdbarch_return_value_on_stack (struct gdbarch *gdbarch, gdbarch_return_value_on_stack_ftype *return_value_on_stack);
33489c5b 691#if GDB_MULTI_ARCH
6166d547 692#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (RETURN_VALUE_ON_STACK)
71a9f22e
JB
693#define RETURN_VALUE_ON_STACK(type) (gdbarch_return_value_on_stack (current_gdbarch, type))
694#endif
33489c5b 695#endif
71a9f22e 696
104c1213
JM
697typedef void (gdbarch_extract_return_value_ftype) (struct type *type, char *regbuf, char *valbuf);
698extern void gdbarch_extract_return_value (struct gdbarch *gdbarch, struct type *type, char *regbuf, char *valbuf);
699extern void set_gdbarch_extract_return_value (struct gdbarch *gdbarch, gdbarch_extract_return_value_ftype *extract_return_value);
0f71a2f6 700#if GDB_MULTI_ARCH
6166d547 701#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (EXTRACT_RETURN_VALUE)
0f71a2f6
JM
702#define EXTRACT_RETURN_VALUE(type, regbuf, valbuf) (gdbarch_extract_return_value (current_gdbarch, type, regbuf, valbuf))
703#endif
704#endif
705
104c1213
JM
706typedef CORE_ADDR (gdbarch_push_arguments_ftype) (int nargs, struct value **args, CORE_ADDR sp, int struct_return, CORE_ADDR struct_addr);
707extern CORE_ADDR gdbarch_push_arguments (struct gdbarch *gdbarch, int nargs, struct value **args, CORE_ADDR sp, int struct_return, CORE_ADDR struct_addr);
708extern void set_gdbarch_push_arguments (struct gdbarch *gdbarch, gdbarch_push_arguments_ftype *push_arguments);
0f71a2f6 709#if GDB_MULTI_ARCH
6166d547 710#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (PUSH_ARGUMENTS)
0f71a2f6
JM
711#define PUSH_ARGUMENTS(nargs, args, sp, struct_return, struct_addr) (gdbarch_push_arguments (current_gdbarch, nargs, args, sp, struct_return, struct_addr))
712#endif
713#endif
714
104c1213
JM
715typedef void (gdbarch_push_dummy_frame_ftype) (void);
716extern void gdbarch_push_dummy_frame (struct gdbarch *gdbarch);
717extern void set_gdbarch_push_dummy_frame (struct gdbarch *gdbarch, gdbarch_push_dummy_frame_ftype *push_dummy_frame);
0f71a2f6 718#if GDB_MULTI_ARCH
6166d547 719#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (PUSH_DUMMY_FRAME)
0f71a2f6
JM
720#define PUSH_DUMMY_FRAME (gdbarch_push_dummy_frame (current_gdbarch))
721#endif
722#endif
723
104c1213
JM
724typedef CORE_ADDR (gdbarch_push_return_address_ftype) (CORE_ADDR pc, CORE_ADDR sp);
725extern CORE_ADDR gdbarch_push_return_address (struct gdbarch *gdbarch, CORE_ADDR pc, CORE_ADDR sp);
726extern void set_gdbarch_push_return_address (struct gdbarch *gdbarch, gdbarch_push_return_address_ftype *push_return_address);
0f71a2f6 727#if GDB_MULTI_ARCH
6166d547 728#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (PUSH_RETURN_ADDRESS)
0f71a2f6
JM
729#define PUSH_RETURN_ADDRESS(pc, sp) (gdbarch_push_return_address (current_gdbarch, pc, sp))
730#endif
731#endif
732
104c1213
JM
733typedef void (gdbarch_pop_frame_ftype) (void);
734extern void gdbarch_pop_frame (struct gdbarch *gdbarch);
735extern void set_gdbarch_pop_frame (struct gdbarch *gdbarch, gdbarch_pop_frame_ftype *pop_frame);
0f71a2f6 736#if GDB_MULTI_ARCH
6166d547 737#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (POP_FRAME)
0f71a2f6
JM
738#define POP_FRAME (gdbarch_pop_frame (current_gdbarch))
739#endif
740#endif
741
34620563
AC
742/* I wish that these would just go away.... */
743
33489c5b 744/* Default (function) for non- multi-arch platforms. */
6166d547 745#if (!GDB_MULTI_ARCH) && !defined (D10V_MAKE_DADDR)
33489c5b
AC
746#define D10V_MAKE_DADDR(x) (internal_error ("D10V_MAKE_DADDR"), 0)
747#endif
748
104c1213
JM
749typedef CORE_ADDR (gdbarch_d10v_make_daddr_ftype) (CORE_ADDR x);
750extern CORE_ADDR gdbarch_d10v_make_daddr (struct gdbarch *gdbarch, CORE_ADDR x);
751extern void set_gdbarch_d10v_make_daddr (struct gdbarch *gdbarch, gdbarch_d10v_make_daddr_ftype *d10v_make_daddr);
33489c5b 752#if GDB_MULTI_ARCH
6166d547 753#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (D10V_MAKE_DADDR)
0f71a2f6
JM
754#define D10V_MAKE_DADDR(x) (gdbarch_d10v_make_daddr (current_gdbarch, x))
755#endif
33489c5b
AC
756#endif
757
758/* Default (function) for non- multi-arch platforms. */
6166d547 759#if (!GDB_MULTI_ARCH) && !defined (D10V_MAKE_IADDR)
33489c5b
AC
760#define D10V_MAKE_IADDR(x) (internal_error ("D10V_MAKE_IADDR"), 0)
761#endif
0f71a2f6 762
104c1213
JM
763typedef CORE_ADDR (gdbarch_d10v_make_iaddr_ftype) (CORE_ADDR x);
764extern CORE_ADDR gdbarch_d10v_make_iaddr (struct gdbarch *gdbarch, CORE_ADDR x);
765extern void set_gdbarch_d10v_make_iaddr (struct gdbarch *gdbarch, gdbarch_d10v_make_iaddr_ftype *d10v_make_iaddr);
33489c5b 766#if GDB_MULTI_ARCH
6166d547 767#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (D10V_MAKE_IADDR)
0f71a2f6
JM
768#define D10V_MAKE_IADDR(x) (gdbarch_d10v_make_iaddr (current_gdbarch, x))
769#endif
33489c5b
AC
770#endif
771
772/* Default (function) for non- multi-arch platforms. */
6166d547 773#if (!GDB_MULTI_ARCH) && !defined (D10V_DADDR_P)
33489c5b
AC
774#define D10V_DADDR_P(x) (internal_error ("D10V_DADDR_P"), 0)
775#endif
0f71a2f6 776
104c1213
JM
777typedef int (gdbarch_d10v_daddr_p_ftype) (CORE_ADDR x);
778extern int gdbarch_d10v_daddr_p (struct gdbarch *gdbarch, CORE_ADDR x);
779extern void set_gdbarch_d10v_daddr_p (struct gdbarch *gdbarch, gdbarch_d10v_daddr_p_ftype *d10v_daddr_p);
33489c5b 780#if GDB_MULTI_ARCH
6166d547 781#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (D10V_DADDR_P)
0f71a2f6
JM
782#define D10V_DADDR_P(x) (gdbarch_d10v_daddr_p (current_gdbarch, x))
783#endif
33489c5b
AC
784#endif
785
786/* Default (function) for non- multi-arch platforms. */
6166d547 787#if (!GDB_MULTI_ARCH) && !defined (D10V_IADDR_P)
33489c5b
AC
788#define D10V_IADDR_P(x) (internal_error ("D10V_IADDR_P"), 0)
789#endif
0f71a2f6 790
104c1213
JM
791typedef int (gdbarch_d10v_iaddr_p_ftype) (CORE_ADDR x);
792extern int gdbarch_d10v_iaddr_p (struct gdbarch *gdbarch, CORE_ADDR x);
793extern void set_gdbarch_d10v_iaddr_p (struct gdbarch *gdbarch, gdbarch_d10v_iaddr_p_ftype *d10v_iaddr_p);
33489c5b 794#if GDB_MULTI_ARCH
6166d547 795#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (D10V_IADDR_P)
0f71a2f6
JM
796#define D10V_IADDR_P(x) (gdbarch_d10v_iaddr_p (current_gdbarch, x))
797#endif
33489c5b
AC
798#endif
799
800/* Default (function) for non- multi-arch platforms. */
6166d547 801#if (!GDB_MULTI_ARCH) && !defined (D10V_CONVERT_DADDR_TO_RAW)
33489c5b
AC
802#define D10V_CONVERT_DADDR_TO_RAW(x) (internal_error ("D10V_CONVERT_DADDR_TO_RAW"), 0)
803#endif
0f71a2f6 804
104c1213
JM
805typedef CORE_ADDR (gdbarch_d10v_convert_daddr_to_raw_ftype) (CORE_ADDR x);
806extern CORE_ADDR gdbarch_d10v_convert_daddr_to_raw (struct gdbarch *gdbarch, CORE_ADDR x);
807extern void set_gdbarch_d10v_convert_daddr_to_raw (struct gdbarch *gdbarch, gdbarch_d10v_convert_daddr_to_raw_ftype *d10v_convert_daddr_to_raw);
33489c5b 808#if GDB_MULTI_ARCH
6166d547 809#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (D10V_CONVERT_DADDR_TO_RAW)
0f71a2f6
JM
810#define D10V_CONVERT_DADDR_TO_RAW(x) (gdbarch_d10v_convert_daddr_to_raw (current_gdbarch, x))
811#endif
33489c5b
AC
812#endif
813
814/* Default (function) for non- multi-arch platforms. */
6166d547 815#if (!GDB_MULTI_ARCH) && !defined (D10V_CONVERT_IADDR_TO_RAW)
33489c5b
AC
816#define D10V_CONVERT_IADDR_TO_RAW(x) (internal_error ("D10V_CONVERT_IADDR_TO_RAW"), 0)
817#endif
0f71a2f6 818
104c1213
JM
819typedef CORE_ADDR (gdbarch_d10v_convert_iaddr_to_raw_ftype) (CORE_ADDR x);
820extern CORE_ADDR gdbarch_d10v_convert_iaddr_to_raw (struct gdbarch *gdbarch, CORE_ADDR x);
821extern void set_gdbarch_d10v_convert_iaddr_to_raw (struct gdbarch *gdbarch, gdbarch_d10v_convert_iaddr_to_raw_ftype *d10v_convert_iaddr_to_raw);
33489c5b 822#if GDB_MULTI_ARCH
6166d547 823#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (D10V_CONVERT_IADDR_TO_RAW)
0f71a2f6
JM
824#define D10V_CONVERT_IADDR_TO_RAW(x) (gdbarch_d10v_convert_iaddr_to_raw (current_gdbarch, x))
825#endif
33489c5b 826#endif
0f71a2f6 827
104c1213
JM
828typedef void (gdbarch_store_struct_return_ftype) (CORE_ADDR addr, CORE_ADDR sp);
829extern void gdbarch_store_struct_return (struct gdbarch *gdbarch, CORE_ADDR addr, CORE_ADDR sp);
830extern void set_gdbarch_store_struct_return (struct gdbarch *gdbarch, gdbarch_store_struct_return_ftype *store_struct_return);
0f71a2f6 831#if GDB_MULTI_ARCH
6166d547 832#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (STORE_STRUCT_RETURN)
0f71a2f6
JM
833#define STORE_STRUCT_RETURN(addr, sp) (gdbarch_store_struct_return (current_gdbarch, addr, sp))
834#endif
835#endif
836
104c1213
JM
837typedef void (gdbarch_store_return_value_ftype) (struct type *type, char *valbuf);
838extern void gdbarch_store_return_value (struct gdbarch *gdbarch, struct type *type, char *valbuf);
839extern void set_gdbarch_store_return_value (struct gdbarch *gdbarch, gdbarch_store_return_value_ftype *store_return_value);
0f71a2f6 840#if GDB_MULTI_ARCH
6166d547 841#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (STORE_RETURN_VALUE)
0f71a2f6
JM
842#define STORE_RETURN_VALUE(type, valbuf) (gdbarch_store_return_value (current_gdbarch, type, valbuf))
843#endif
844#endif
845
104c1213
JM
846typedef CORE_ADDR (gdbarch_extract_struct_value_address_ftype) (char *regbuf);
847extern CORE_ADDR gdbarch_extract_struct_value_address (struct gdbarch *gdbarch, char *regbuf);
848extern void set_gdbarch_extract_struct_value_address (struct gdbarch *gdbarch, gdbarch_extract_struct_value_address_ftype *extract_struct_value_address);
0f71a2f6 849#if GDB_MULTI_ARCH
6166d547 850#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (EXTRACT_STRUCT_VALUE_ADDRESS)
0f71a2f6
JM
851#define EXTRACT_STRUCT_VALUE_ADDRESS(regbuf) (gdbarch_extract_struct_value_address (current_gdbarch, regbuf))
852#endif
853#endif
854
104c1213
JM
855typedef int (gdbarch_use_struct_convention_ftype) (int gcc_p, struct type *value_type);
856extern int gdbarch_use_struct_convention (struct gdbarch *gdbarch, int gcc_p, struct type *value_type);
857extern void set_gdbarch_use_struct_convention (struct gdbarch *gdbarch, gdbarch_use_struct_convention_ftype *use_struct_convention);
0f71a2f6 858#if GDB_MULTI_ARCH
6166d547 859#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (USE_STRUCT_CONVENTION)
0f71a2f6
JM
860#define USE_STRUCT_CONVENTION(gcc_p, value_type) (gdbarch_use_struct_convention (current_gdbarch, gcc_p, value_type))
861#endif
862#endif
863
104c1213
JM
864typedef void (gdbarch_frame_init_saved_regs_ftype) (struct frame_info *frame);
865extern void gdbarch_frame_init_saved_regs (struct gdbarch *gdbarch, struct frame_info *frame);
866extern void set_gdbarch_frame_init_saved_regs (struct gdbarch *gdbarch, gdbarch_frame_init_saved_regs_ftype *frame_init_saved_regs);
0f71a2f6 867#if GDB_MULTI_ARCH
6166d547 868#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (FRAME_INIT_SAVED_REGS)
0f71a2f6
JM
869#define FRAME_INIT_SAVED_REGS(frame) (gdbarch_frame_init_saved_regs (current_gdbarch, frame))
870#endif
871#endif
872
104c1213
JM
873typedef void (gdbarch_init_extra_frame_info_ftype) (int fromleaf, struct frame_info *frame);
874extern void gdbarch_init_extra_frame_info (struct gdbarch *gdbarch, int fromleaf, struct frame_info *frame);
875extern void set_gdbarch_init_extra_frame_info (struct gdbarch *gdbarch, gdbarch_init_extra_frame_info_ftype *init_extra_frame_info);
0f71a2f6 876#if GDB_MULTI_ARCH
6166d547 877#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (INIT_EXTRA_FRAME_INFO)
0f71a2f6
JM
878#define INIT_EXTRA_FRAME_INFO(fromleaf, frame) (gdbarch_init_extra_frame_info (current_gdbarch, fromleaf, frame))
879#endif
880#endif
881
104c1213
JM
882typedef CORE_ADDR (gdbarch_skip_prologue_ftype) (CORE_ADDR ip);
883extern CORE_ADDR gdbarch_skip_prologue (struct gdbarch *gdbarch, CORE_ADDR ip);
884extern void set_gdbarch_skip_prologue (struct gdbarch *gdbarch, gdbarch_skip_prologue_ftype *skip_prologue);
0f71a2f6 885#if GDB_MULTI_ARCH
6166d547 886#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (SKIP_PROLOGUE)
0f71a2f6
JM
887#define SKIP_PROLOGUE(ip) (gdbarch_skip_prologue (current_gdbarch, ip))
888#endif
889#endif
890
33489c5b 891/* Default (function) for non- multi-arch platforms. */
6166d547 892#if (!GDB_MULTI_ARCH) && !defined (PROLOGUE_FRAMELESS_P)
33489c5b
AC
893#define PROLOGUE_FRAMELESS_P(ip) (generic_prologue_frameless_p (ip))
894#endif
895
dad41f9a
AC
896typedef int (gdbarch_prologue_frameless_p_ftype) (CORE_ADDR ip);
897extern int gdbarch_prologue_frameless_p (struct gdbarch *gdbarch, CORE_ADDR ip);
898extern void set_gdbarch_prologue_frameless_p (struct gdbarch *gdbarch, gdbarch_prologue_frameless_p_ftype *prologue_frameless_p);
33489c5b 899#if GDB_MULTI_ARCH
6166d547 900#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (PROLOGUE_FRAMELESS_P)
dad41f9a
AC
901#define PROLOGUE_FRAMELESS_P(ip) (gdbarch_prologue_frameless_p (current_gdbarch, ip))
902#endif
33489c5b 903#endif
dad41f9a 904
104c1213
JM
905typedef int (gdbarch_inner_than_ftype) (CORE_ADDR lhs, CORE_ADDR rhs);
906extern int gdbarch_inner_than (struct gdbarch *gdbarch, CORE_ADDR lhs, CORE_ADDR rhs);
907extern void set_gdbarch_inner_than (struct gdbarch *gdbarch, gdbarch_inner_than_ftype *inner_than);
0f71a2f6 908#if GDB_MULTI_ARCH
6166d547 909#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (INNER_THAN)
0f71a2f6
JM
910#define INNER_THAN(lhs, rhs) (gdbarch_inner_than (current_gdbarch, lhs, rhs))
911#endif
912#endif
913
33489c5b 914/* Default (function) for non- multi-arch platforms. */
6166d547 915#if (!GDB_MULTI_ARCH) && !defined (BREAKPOINT_FROM_PC)
33489c5b
AC
916#define BREAKPOINT_FROM_PC(pcptr, lenptr) (legacy_breakpoint_from_pc (pcptr, lenptr))
917#endif
918
104c1213
JM
919typedef unsigned char * (gdbarch_breakpoint_from_pc_ftype) (CORE_ADDR *pcptr, int *lenptr);
920extern unsigned char * gdbarch_breakpoint_from_pc (struct gdbarch *gdbarch, CORE_ADDR *pcptr, int *lenptr);
921extern void set_gdbarch_breakpoint_from_pc (struct gdbarch *gdbarch, gdbarch_breakpoint_from_pc_ftype *breakpoint_from_pc);
33489c5b 922#if GDB_MULTI_ARCH
6166d547 923#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (BREAKPOINT_FROM_PC)
0f71a2f6
JM
924#define BREAKPOINT_FROM_PC(pcptr, lenptr) (gdbarch_breakpoint_from_pc (current_gdbarch, pcptr, lenptr))
925#endif
33489c5b
AC
926#endif
927
928/* Default (function) for non- multi-arch platforms. */
6166d547 929#if (!GDB_MULTI_ARCH) && !defined (MEMORY_INSERT_BREAKPOINT)
33489c5b
AC
930#define MEMORY_INSERT_BREAKPOINT(addr, contents_cache) (default_memory_insert_breakpoint (addr, contents_cache))
931#endif
0f71a2f6 932
917317f4
JM
933typedef int (gdbarch_memory_insert_breakpoint_ftype) (CORE_ADDR addr, char *contents_cache);
934extern int gdbarch_memory_insert_breakpoint (struct gdbarch *gdbarch, CORE_ADDR addr, char *contents_cache);
935extern void set_gdbarch_memory_insert_breakpoint (struct gdbarch *gdbarch, gdbarch_memory_insert_breakpoint_ftype *memory_insert_breakpoint);
33489c5b 936#if GDB_MULTI_ARCH
6166d547 937#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (MEMORY_INSERT_BREAKPOINT)
917317f4
JM
938#define MEMORY_INSERT_BREAKPOINT(addr, contents_cache) (gdbarch_memory_insert_breakpoint (current_gdbarch, addr, contents_cache))
939#endif
33489c5b
AC
940#endif
941
942/* Default (function) for non- multi-arch platforms. */
6166d547 943#if (!GDB_MULTI_ARCH) && !defined (MEMORY_REMOVE_BREAKPOINT)
33489c5b
AC
944#define MEMORY_REMOVE_BREAKPOINT(addr, contents_cache) (default_memory_remove_breakpoint (addr, contents_cache))
945#endif
917317f4
JM
946
947typedef int (gdbarch_memory_remove_breakpoint_ftype) (CORE_ADDR addr, char *contents_cache);
948extern int gdbarch_memory_remove_breakpoint (struct gdbarch *gdbarch, CORE_ADDR addr, char *contents_cache);
949extern void set_gdbarch_memory_remove_breakpoint (struct gdbarch *gdbarch, gdbarch_memory_remove_breakpoint_ftype *memory_remove_breakpoint);
33489c5b 950#if GDB_MULTI_ARCH
6166d547 951#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (MEMORY_REMOVE_BREAKPOINT)
917317f4
JM
952#define MEMORY_REMOVE_BREAKPOINT(addr, contents_cache) (gdbarch_memory_remove_breakpoint (current_gdbarch, addr, contents_cache))
953#endif
33489c5b 954#endif
917317f4 955
104c1213
JM
956extern CORE_ADDR gdbarch_decr_pc_after_break (struct gdbarch *gdbarch);
957extern void set_gdbarch_decr_pc_after_break (struct gdbarch *gdbarch, CORE_ADDR decr_pc_after_break);
0f71a2f6 958#if GDB_MULTI_ARCH
6166d547 959#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (DECR_PC_AFTER_BREAK)
0f71a2f6
JM
960#define DECR_PC_AFTER_BREAK (gdbarch_decr_pc_after_break (current_gdbarch))
961#endif
962#endif
963
104c1213
JM
964extern CORE_ADDR gdbarch_function_start_offset (struct gdbarch *gdbarch);
965extern void set_gdbarch_function_start_offset (struct gdbarch *gdbarch, CORE_ADDR function_start_offset);
0f71a2f6 966#if GDB_MULTI_ARCH
6166d547 967#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (FUNCTION_START_OFFSET)
0f71a2f6
JM
968#define FUNCTION_START_OFFSET (gdbarch_function_start_offset (current_gdbarch))
969#endif
970#endif
971
33489c5b 972/* Default (function) for non- multi-arch platforms. */
6166d547 973#if (!GDB_MULTI_ARCH) && !defined (REMOTE_TRANSLATE_XFER_ADDRESS)
33489c5b
AC
974#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))
975#endif
976
104c1213
JM
977typedef void (gdbarch_remote_translate_xfer_address_ftype) (CORE_ADDR gdb_addr, int gdb_len, CORE_ADDR *rem_addr, int *rem_len);
978extern void gdbarch_remote_translate_xfer_address (struct gdbarch *gdbarch, CORE_ADDR gdb_addr, int gdb_len, CORE_ADDR *rem_addr, int *rem_len);
979extern void set_gdbarch_remote_translate_xfer_address (struct gdbarch *gdbarch, gdbarch_remote_translate_xfer_address_ftype *remote_translate_xfer_address);
33489c5b 980#if GDB_MULTI_ARCH
6166d547 981#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (REMOTE_TRANSLATE_XFER_ADDRESS)
0f71a2f6
JM
982#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))
983#endif
33489c5b 984#endif
0f71a2f6 985
104c1213
JM
986extern CORE_ADDR gdbarch_frame_args_skip (struct gdbarch *gdbarch);
987extern void set_gdbarch_frame_args_skip (struct gdbarch *gdbarch, CORE_ADDR frame_args_skip);
0f71a2f6 988#if GDB_MULTI_ARCH
6166d547 989#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (FRAME_ARGS_SKIP)
0f71a2f6
JM
990#define FRAME_ARGS_SKIP (gdbarch_frame_args_skip (current_gdbarch))
991#endif
992#endif
993
33489c5b 994/* Default (function) for non- multi-arch platforms. */
6166d547 995#if (!GDB_MULTI_ARCH) && !defined (FRAMELESS_FUNCTION_INVOCATION)
33489c5b
AC
996#define FRAMELESS_FUNCTION_INVOCATION(fi) (generic_frameless_function_invocation_not (fi))
997#endif
998
104c1213
JM
999typedef int (gdbarch_frameless_function_invocation_ftype) (struct frame_info *fi);
1000extern int gdbarch_frameless_function_invocation (struct gdbarch *gdbarch, struct frame_info *fi);
1001extern void set_gdbarch_frameless_function_invocation (struct gdbarch *gdbarch, gdbarch_frameless_function_invocation_ftype *frameless_function_invocation);
33489c5b 1002#if GDB_MULTI_ARCH
6166d547 1003#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (FRAMELESS_FUNCTION_INVOCATION)
0f71a2f6
JM
1004#define FRAMELESS_FUNCTION_INVOCATION(fi) (gdbarch_frameless_function_invocation (current_gdbarch, fi))
1005#endif
33489c5b 1006#endif
0f71a2f6 1007
104c1213
JM
1008typedef CORE_ADDR (gdbarch_frame_chain_ftype) (struct frame_info *frame);
1009extern CORE_ADDR gdbarch_frame_chain (struct gdbarch *gdbarch, struct frame_info *frame);
1010extern void set_gdbarch_frame_chain (struct gdbarch *gdbarch, gdbarch_frame_chain_ftype *frame_chain);
0f71a2f6 1011#if GDB_MULTI_ARCH
6166d547 1012#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (FRAME_CHAIN)
0f71a2f6
JM
1013#define FRAME_CHAIN(frame) (gdbarch_frame_chain (current_gdbarch, frame))
1014#endif
1015#endif
1016
104c1213
JM
1017typedef int (gdbarch_frame_chain_valid_ftype) (CORE_ADDR chain, struct frame_info *thisframe);
1018extern int gdbarch_frame_chain_valid (struct gdbarch *gdbarch, CORE_ADDR chain, struct frame_info *thisframe);
1019extern void set_gdbarch_frame_chain_valid (struct gdbarch *gdbarch, gdbarch_frame_chain_valid_ftype *frame_chain_valid);
0f71a2f6 1020#if GDB_MULTI_ARCH
6166d547 1021#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (FRAME_CHAIN_VALID)
0f71a2f6
JM
1022#define FRAME_CHAIN_VALID(chain, thisframe) (gdbarch_frame_chain_valid (current_gdbarch, chain, thisframe))
1023#endif
1024#endif
1025
104c1213
JM
1026typedef CORE_ADDR (gdbarch_frame_saved_pc_ftype) (struct frame_info *fi);
1027extern CORE_ADDR gdbarch_frame_saved_pc (struct gdbarch *gdbarch, struct frame_info *fi);
1028extern void set_gdbarch_frame_saved_pc (struct gdbarch *gdbarch, gdbarch_frame_saved_pc_ftype *frame_saved_pc);
0f71a2f6 1029#if GDB_MULTI_ARCH
6166d547 1030#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (FRAME_SAVED_PC)
0f71a2f6
JM
1031#define FRAME_SAVED_PC(fi) (gdbarch_frame_saved_pc (current_gdbarch, fi))
1032#endif
1033#endif
1034
104c1213
JM
1035typedef CORE_ADDR (gdbarch_frame_args_address_ftype) (struct frame_info *fi);
1036extern CORE_ADDR gdbarch_frame_args_address (struct gdbarch *gdbarch, struct frame_info *fi);
1037extern void set_gdbarch_frame_args_address (struct gdbarch *gdbarch, gdbarch_frame_args_address_ftype *frame_args_address);
0f71a2f6 1038#if GDB_MULTI_ARCH
6166d547 1039#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (FRAME_ARGS_ADDRESS)
0f71a2f6
JM
1040#define FRAME_ARGS_ADDRESS(fi) (gdbarch_frame_args_address (current_gdbarch, fi))
1041#endif
1042#endif
1043
104c1213
JM
1044typedef CORE_ADDR (gdbarch_frame_locals_address_ftype) (struct frame_info *fi);
1045extern CORE_ADDR gdbarch_frame_locals_address (struct gdbarch *gdbarch, struct frame_info *fi);
1046extern void set_gdbarch_frame_locals_address (struct gdbarch *gdbarch, gdbarch_frame_locals_address_ftype *frame_locals_address);
0f71a2f6 1047#if GDB_MULTI_ARCH
6166d547 1048#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (FRAME_LOCALS_ADDRESS)
0f71a2f6
JM
1049#define FRAME_LOCALS_ADDRESS(fi) (gdbarch_frame_locals_address (current_gdbarch, fi))
1050#endif
1051#endif
1052
104c1213
JM
1053typedef CORE_ADDR (gdbarch_saved_pc_after_call_ftype) (struct frame_info *frame);
1054extern CORE_ADDR gdbarch_saved_pc_after_call (struct gdbarch *gdbarch, struct frame_info *frame);
1055extern void set_gdbarch_saved_pc_after_call (struct gdbarch *gdbarch, gdbarch_saved_pc_after_call_ftype *saved_pc_after_call);
0f71a2f6 1056#if GDB_MULTI_ARCH
6166d547 1057#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (SAVED_PC_AFTER_CALL)
0f71a2f6
JM
1058#define SAVED_PC_AFTER_CALL(frame) (gdbarch_saved_pc_after_call (current_gdbarch, frame))
1059#endif
1060#endif
1061
104c1213
JM
1062typedef int (gdbarch_frame_num_args_ftype) (struct frame_info *frame);
1063extern int gdbarch_frame_num_args (struct gdbarch *gdbarch, struct frame_info *frame);
1064extern void set_gdbarch_frame_num_args (struct gdbarch *gdbarch, gdbarch_frame_num_args_ftype *frame_num_args);
0f71a2f6 1065#if GDB_MULTI_ARCH
6166d547 1066#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (FRAME_NUM_ARGS)
0f71a2f6
JM
1067#define FRAME_NUM_ARGS(frame) (gdbarch_frame_num_args (current_gdbarch, frame))
1068#endif
1069#endif
1070
2ada493a
AC
1071#if defined (STACK_ALIGN)
1072/* Legacy for systems yet to multi-arch STACK_ALIGN */
1073#define STACK_ALIGN_P() (1)
1074#endif
1075
33489c5b 1076/* Default predicate for non- multi-arch targets. */
6166d547 1077#if (!GDB_MULTI_ARCH) && !defined (STACK_ALIGN_P)
33489c5b
AC
1078#define STACK_ALIGN_P() (0)
1079#endif
1080
2ada493a 1081extern int gdbarch_stack_align_p (struct gdbarch *gdbarch);
6166d547 1082#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (STACK_ALIGN_P)
2ada493a
AC
1083#define STACK_ALIGN_P() (gdbarch_stack_align_p (current_gdbarch))
1084#endif
1085
33489c5b 1086/* Default (function) for non- multi-arch platforms. */
6166d547 1087#if (!GDB_MULTI_ARCH) && !defined (STACK_ALIGN)
33489c5b
AC
1088#define STACK_ALIGN(sp) (internal_error ("STACK_ALIGN"), 0)
1089#endif
1090
2ada493a
AC
1091typedef CORE_ADDR (gdbarch_stack_align_ftype) (CORE_ADDR sp);
1092extern CORE_ADDR gdbarch_stack_align (struct gdbarch *gdbarch, CORE_ADDR sp);
1093extern void set_gdbarch_stack_align (struct gdbarch *gdbarch, gdbarch_stack_align_ftype *stack_align);
33489c5b 1094#if GDB_MULTI_ARCH
6166d547 1095#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (STACK_ALIGN)
2ada493a
AC
1096#define STACK_ALIGN(sp) (gdbarch_stack_align (current_gdbarch, sp))
1097#endif
33489c5b 1098#endif
2ada493a 1099
d03e67c9
AC
1100#if defined (REG_STRUCT_HAS_ADDR)
1101/* Legacy for systems yet to multi-arch REG_STRUCT_HAS_ADDR */
1102#define REG_STRUCT_HAS_ADDR_P() (1)
1103#endif
1104
33489c5b 1105/* Default predicate for non- multi-arch targets. */
6166d547 1106#if (!GDB_MULTI_ARCH) && !defined (REG_STRUCT_HAS_ADDR_P)
33489c5b
AC
1107#define REG_STRUCT_HAS_ADDR_P() (0)
1108#endif
1109
d03e67c9 1110extern int gdbarch_reg_struct_has_addr_p (struct gdbarch *gdbarch);
6166d547 1111#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (REG_STRUCT_HAS_ADDR_P)
d03e67c9
AC
1112#define REG_STRUCT_HAS_ADDR_P() (gdbarch_reg_struct_has_addr_p (current_gdbarch))
1113#endif
1114
33489c5b 1115/* Default (function) for non- multi-arch platforms. */
6166d547 1116#if (!GDB_MULTI_ARCH) && !defined (REG_STRUCT_HAS_ADDR)
33489c5b
AC
1117#define REG_STRUCT_HAS_ADDR(gcc_p, type) (internal_error ("REG_STRUCT_HAS_ADDR"), 0)
1118#endif
1119
d03e67c9
AC
1120typedef int (gdbarch_reg_struct_has_addr_ftype) (int gcc_p, struct type *type);
1121extern int gdbarch_reg_struct_has_addr (struct gdbarch *gdbarch, int gcc_p, struct type *type);
1122extern void set_gdbarch_reg_struct_has_addr (struct gdbarch *gdbarch, gdbarch_reg_struct_has_addr_ftype *reg_struct_has_addr);
33489c5b 1123#if GDB_MULTI_ARCH
6166d547 1124#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (REG_STRUCT_HAS_ADDR)
d03e67c9
AC
1125#define REG_STRUCT_HAS_ADDR(gcc_p, type) (gdbarch_reg_struct_has_addr (current_gdbarch, gcc_p, type))
1126#endif
33489c5b 1127#endif
d03e67c9 1128
d1e3cf49
AC
1129#if defined (SAVE_DUMMY_FRAME_TOS)
1130/* Legacy for systems yet to multi-arch SAVE_DUMMY_FRAME_TOS */
1131#define SAVE_DUMMY_FRAME_TOS_P() (1)
1132#endif
1133
1134/* Default predicate for non- multi-arch targets. */
6166d547 1135#if (!GDB_MULTI_ARCH) && !defined (SAVE_DUMMY_FRAME_TOS_P)
d1e3cf49
AC
1136#define SAVE_DUMMY_FRAME_TOS_P() (0)
1137#endif
1138
1139extern int gdbarch_save_dummy_frame_tos_p (struct gdbarch *gdbarch);
6166d547 1140#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (SAVE_DUMMY_FRAME_TOS_P)
d1e3cf49
AC
1141#define SAVE_DUMMY_FRAME_TOS_P() (gdbarch_save_dummy_frame_tos_p (current_gdbarch))
1142#endif
1143
1144/* Default (function) for non- multi-arch platforms. */
6166d547 1145#if (!GDB_MULTI_ARCH) && !defined (SAVE_DUMMY_FRAME_TOS)
d1e3cf49
AC
1146#define SAVE_DUMMY_FRAME_TOS(sp) (internal_error ("SAVE_DUMMY_FRAME_TOS"), 0)
1147#endif
1148
1149typedef void (gdbarch_save_dummy_frame_tos_ftype) (CORE_ADDR sp);
1150extern void gdbarch_save_dummy_frame_tos (struct gdbarch *gdbarch, CORE_ADDR sp);
1151extern void set_gdbarch_save_dummy_frame_tos (struct gdbarch *gdbarch, gdbarch_save_dummy_frame_tos_ftype *save_dummy_frame_tos);
1152#if GDB_MULTI_ARCH
6166d547 1153#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (SAVE_DUMMY_FRAME_TOS)
d1e3cf49
AC
1154#define SAVE_DUMMY_FRAME_TOS(sp) (gdbarch_save_dummy_frame_tos (current_gdbarch, sp))
1155#endif
1156#endif
1157
f0d4cc9e 1158/* Default (value) for non- multi-arch platforms. */
6166d547 1159#if (!GDB_MULTI_ARCH) && !defined (TARGET_FLOAT_FORMAT)
f0d4cc9e
AC
1160#define TARGET_FLOAT_FORMAT (default_float_format (current_gdbarch))
1161#endif
1162
1163extern const struct floatformat * gdbarch_float_format (struct gdbarch *gdbarch);
1164extern void set_gdbarch_float_format (struct gdbarch *gdbarch, const struct floatformat * float_format);
1165#if GDB_MULTI_ARCH
6166d547 1166#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (TARGET_FLOAT_FORMAT)
f0d4cc9e
AC
1167#define TARGET_FLOAT_FORMAT (gdbarch_float_format (current_gdbarch))
1168#endif
1169#endif
1170
1171/* Default (value) for non- multi-arch platforms. */
6166d547 1172#if (!GDB_MULTI_ARCH) && !defined (TARGET_DOUBLE_FORMAT)
f0d4cc9e
AC
1173#define TARGET_DOUBLE_FORMAT (default_double_format (current_gdbarch))
1174#endif
1175
1176extern const struct floatformat * gdbarch_double_format (struct gdbarch *gdbarch);
1177extern void set_gdbarch_double_format (struct gdbarch *gdbarch, const struct floatformat * double_format);
1178#if GDB_MULTI_ARCH
6166d547 1179#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (TARGET_DOUBLE_FORMAT)
f0d4cc9e
AC
1180#define TARGET_DOUBLE_FORMAT (gdbarch_double_format (current_gdbarch))
1181#endif
1182#endif
1183
1184/* Default (value) for non- multi-arch platforms. */
6166d547 1185#if (!GDB_MULTI_ARCH) && !defined (TARGET_LONG_DOUBLE_FORMAT)
f0d4cc9e
AC
1186#define TARGET_LONG_DOUBLE_FORMAT (&floatformat_unknown)
1187#endif
1188
1189extern const struct floatformat * gdbarch_long_double_format (struct gdbarch *gdbarch);
1190extern void set_gdbarch_long_double_format (struct gdbarch *gdbarch, const struct floatformat * long_double_format);
1191#if GDB_MULTI_ARCH
6166d547 1192#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (TARGET_LONG_DOUBLE_FORMAT)
f0d4cc9e
AC
1193#define TARGET_LONG_DOUBLE_FORMAT (gdbarch_long_double_format (current_gdbarch))
1194#endif
1195#endif
1196
104c1213 1197extern struct gdbarch_tdep *gdbarch_tdep (struct gdbarch *gdbarch);
0f71a2f6
JM
1198
1199
1200/* Mechanism for co-ordinating the selection of a specific
1201 architecture.
1202
1203 GDB targets (*-tdep.c) can register an interest in a specific
1204 architecture. Other GDB components can register a need to maintain
1205 per-architecture data.
1206
1207 The mechanisms below ensures that there is only a loose connection
1208 between the set-architecture command and the various GDB
1209 components. Each component can independantly register their need
1210 to maintain architecture specific data with gdbarch.
1211
1212 Pragmatics:
1213
1214 Previously, a single TARGET_ARCHITECTURE_HOOK was provided. It
1215 didn't scale.
1216
1217 The more traditional mega-struct containing architecture specific
1218 data for all the various GDB components was also considered. Since
1219 GDB is built from a variable number of (fairly independant)
1220 components it was determined that the global aproach was not
1221 applicable. */
1222
1223
1224/* Register a new architectural family with GDB.
1225
1226 Register support for the specified ARCHITECTURE with GDB. When
1227 gdbarch determines that the specified architecture has been
1228 selected, the corresponding INIT function is called.
1229
1230 --
1231
1232 The INIT function takes two parameters: INFO which contains the
1233 information available to gdbarch about the (possibly new)
1234 architecture; ARCHES which is a list of the previously created
1235 ``struct gdbarch'' for this architecture.
1236
1237 The INIT function parameter INFO shall, as far as possible, be
1238 pre-initialized with information obtained from INFO.ABFD or
1239 previously selected architecture (if similar). INIT shall ensure
1240 that the INFO.BYTE_ORDER is non-zero.
1241
1242 The INIT function shall return any of: NULL - indicating that it
1243 doesn't reconize the selected architecture; an existing ``struct
1244 gdbarch'' from the ARCHES list - indicating that the new
1245 architecture is just a synonym for an earlier architecture (see
1246 gdbarch_list_lookup_by_info()); a newly created ``struct gdbarch''
4b9b3959
AC
1247 - that describes the selected architecture (see gdbarch_alloc()).
1248
1249 The DUMP_TDEP function shall print out all target specific values.
1250 Care should be taken to ensure that the function works in both the
1251 multi-arch and non- multi-arch cases. */
0f71a2f6 1252
adf40b2e
JM
1253struct gdbarch_list
1254{
1255 struct gdbarch *gdbarch;
1256 struct gdbarch_list *next;
1257};
0f71a2f6 1258
adf40b2e
JM
1259struct gdbarch_info
1260{
1261 /* Use default: bfd_arch_unknown (ZERO). */
1262 enum bfd_architecture bfd_architecture;
0f71a2f6 1263
adf40b2e
JM
1264 /* Use default: NULL (ZERO). */
1265 const struct bfd_arch_info *bfd_arch_info;
0f71a2f6 1266
adf40b2e
JM
1267 /* Use default: 0 (ZERO). */
1268 int byte_order;
0f71a2f6 1269
adf40b2e
JM
1270 /* Use default: NULL (ZERO). */
1271 bfd *abfd;
0f71a2f6 1272
adf40b2e
JM
1273 /* Use default: NULL (ZERO). */
1274 struct gdbarch_tdep_info *tdep_info;
1275};
0f71a2f6 1276
104c1213 1277typedef struct gdbarch *(gdbarch_init_ftype) (struct gdbarch_info info, struct gdbarch_list *arches);
4b9b3959 1278typedef void (gdbarch_dump_tdep_ftype) (struct gdbarch *gdbarch, struct ui_file *file);
0f71a2f6 1279
4b9b3959 1280/* DEPRECATED - use gdbarch_register() */
104c1213 1281extern void register_gdbarch_init (enum bfd_architecture architecture, gdbarch_init_ftype *);
0f71a2f6 1282
4b9b3959
AC
1283extern void gdbarch_register (enum bfd_architecture architecture,
1284 gdbarch_init_ftype *,
1285 gdbarch_dump_tdep_ftype *);
1286
0f71a2f6 1287
b4a20239
AC
1288/* Return a freshly allocated, NULL terminated, array of the valid
1289 architecture names. Since architectures are registered during the
1290 _initialize phase this function only returns useful information
1291 once initialization has been completed. */
1292
1293extern const char **gdbarch_printable_names (void);
1294
1295
0f71a2f6
JM
1296/* Helper function. Search the list of ARCHES for a GDBARCH that
1297 matches the information provided by INFO. */
1298
104c1213 1299extern struct gdbarch_list *gdbarch_list_lookup_by_info (struct gdbarch_list *arches, const struct gdbarch_info *info);
0f71a2f6
JM
1300
1301
1302/* Helper function. Create a preliminary ``struct gdbarch''. Perform
1303 basic initialization using values obtained from the INFO andTDEP
1304 parameters. set_gdbarch_*() functions are called to complete the
1305 initialization of the object. */
1306
104c1213 1307extern struct gdbarch *gdbarch_alloc (const struct gdbarch_info *info, struct gdbarch_tdep *tdep);
0f71a2f6
JM
1308
1309
4b9b3959
AC
1310/* Helper function. Free a partially-constructed ``struct gdbarch''.
1311 It is assumed that the caller freeds the ``struct
1312 gdbarch_tdep''. */
1313
058f20d5
JB
1314extern void gdbarch_free (struct gdbarch *);
1315
1316
0f71a2f6
JM
1317/* Helper function. Force an update of the current architecture. Used
1318 by legacy targets that have added their own target specific
1319 architecture manipulation commands.
1320
1321 The INFO parameter shall be fully initialized (``memset (&INFO,
1322 sizeof (info), 0)'' set relevant fields) before gdbarch_update() is
1323 called. gdbarch_update() shall initialize any ``default'' fields
1324 using information obtained from the previous architecture or
1325 INFO.ABFD (if specified) before calling the corresponding
1326 architectures INIT function. */
1327
104c1213 1328extern int gdbarch_update (struct gdbarch_info info);
0f71a2f6
JM
1329
1330
1331
1332/* Register per-architecture data-pointer.
1333
1334 Reserve space for a per-architecture data-pointer. An identifier
1335 for the reserved data-pointer is returned. That identifer should
1336 be saved in a local static.
1337
1338 When a new architecture is selected, INIT() is called. When a
1339 previous architecture is re-selected, the per-architecture
1340 data-pointer for that previous architecture is restored (INIT() is
1341 not called).
1342
1343 INIT() shall return the initial value for the per-architecture
1344 data-pointer for the current architecture.
1345
1346 Multiple registrarants for any architecture are allowed (and
1347 strongly encouraged). */
1348
104c1213
JM
1349typedef void *(gdbarch_data_ftype) (void);
1350extern struct gdbarch_data *register_gdbarch_data (gdbarch_data_ftype *init);
0f71a2f6
JM
1351
1352/* Return the value of the per-architecture data-pointer for the
1353 current architecture. */
1354
104c1213 1355extern void *gdbarch_data (struct gdbarch_data*);
0f71a2f6
JM
1356
1357
1358
1359/* Register per-architecture memory region.
1360
1361 Provide a memory-region swap mechanism. Per-architecture memory
1362 region are created. These memory regions are swapped whenever the
1363 architecture is changed. For a new architecture, the memory region
1364 is initialized with zero (0) and the INIT function is called.
1365
1366 Memory regions are swapped / initialized in the order that they are
1367 registered. NULL DATA and/or INIT values can be specified.
1368
1369 New code should use register_gdbarch_data(). */
1370
104c1213
JM
1371typedef void (gdbarch_swap_ftype) (void);
1372extern void register_gdbarch_swap (void *data, unsigned long size, gdbarch_swap_ftype *init);
e514a9d6 1373#define REGISTER_GDBARCH_SWAP(VAR) register_gdbarch_swap (&(VAR), sizeof ((VAR)), NULL)
0f71a2f6
JM
1374
1375
1376
c906108c
SS
1377/* The target-system-dependant byte order is dynamic */
1378
1379/* TARGET_BYTE_ORDER_SELECTABLE_P determines if the target endianness
b83266a0 1380 is selectable at runtime. The user can use the ``set endian''
c906108c
SS
1381 command to change it. TARGET_BYTE_ORDER_AUTO is nonzero when
1382 target_byte_order should be auto-detected (from the program image
1383 say). */
1384
0f71a2f6
JM
1385#if GDB_MULTI_ARCH
1386/* Multi-arch GDB is always bi-endian. */
1387#define TARGET_BYTE_ORDER_SELECTABLE_P 1
1388#endif
1389
c906108c
SS
1390#ifndef TARGET_BYTE_ORDER_SELECTABLE_P
1391/* compat - Catch old targets that define TARGET_BYTE_ORDER_SLECTABLE
1392 when they should have defined TARGET_BYTE_ORDER_SELECTABLE_P 1 */
1393#ifdef TARGET_BYTE_ORDER_SELECTABLE
1394#define TARGET_BYTE_ORDER_SELECTABLE_P 1
1395#else
1396#define TARGET_BYTE_ORDER_SELECTABLE_P 0
1397#endif
1398#endif
1399
adf40b2e 1400extern int target_byte_order;
c906108c
SS
1401#ifdef TARGET_BYTE_ORDER_SELECTABLE
1402/* compat - Catch old targets that define TARGET_BYTE_ORDER_SELECTABLE
1403 and expect defs.h to re-define TARGET_BYTE_ORDER. */
1404#undef TARGET_BYTE_ORDER
1405#endif
1406#ifndef TARGET_BYTE_ORDER
1407#define TARGET_BYTE_ORDER (target_byte_order + 0)
1408#endif
1409
adf40b2e 1410extern int target_byte_order_auto;
c906108c
SS
1411#ifndef TARGET_BYTE_ORDER_AUTO
1412#define TARGET_BYTE_ORDER_AUTO (target_byte_order_auto + 0)
1413#endif
1414
1415
1416
1417/* The target-system-dependant BFD architecture is dynamic */
1418
adf40b2e 1419extern int target_architecture_auto;
c906108c
SS
1420#ifndef TARGET_ARCHITECTURE_AUTO
1421#define TARGET_ARCHITECTURE_AUTO (target_architecture_auto + 0)
1422#endif
1423
adf40b2e 1424extern const struct bfd_arch_info *target_architecture;
c906108c
SS
1425#ifndef TARGET_ARCHITECTURE
1426#define TARGET_ARCHITECTURE (target_architecture + 0)
1427#endif
1428
c906108c
SS
1429
1430/* The target-system-dependant disassembler is semi-dynamic */
1431
1432#include "dis-asm.h" /* Get defs for disassemble_info */
1433
104c1213 1434extern int dis_asm_read_memory (bfd_vma memaddr, bfd_byte *myaddr,
ff844c8d 1435 unsigned int len, disassemble_info *info);
c906108c 1436
104c1213
JM
1437extern void dis_asm_memory_error (int status, bfd_vma memaddr,
1438 disassemble_info *info);
c906108c 1439
104c1213
JM
1440extern void dis_asm_print_address (bfd_vma addr,
1441 disassemble_info *info);
c906108c 1442
104c1213 1443extern int (*tm_print_insn) (bfd_vma, disassemble_info*);
adf40b2e 1444extern disassemble_info tm_print_insn_info;
c906108c
SS
1445#ifndef TARGET_PRINT_INSN
1446#define TARGET_PRINT_INSN(vma, info) (*tm_print_insn) (vma, info)
1447#endif
1448#ifndef TARGET_PRINT_INSN_INFO
1449#define TARGET_PRINT_INSN_INFO (&tm_print_insn_info)
1450#endif
1451
1452
1453
7a292a7a
SS
1454/* Explicit test for D10V architecture.
1455 USE of these macro's is *STRONGLY* discouraged. */
1456
1457#define GDB_TARGET_IS_D10V (TARGET_ARCHITECTURE->arch == bfd_arch_d10v)
7a292a7a
SS
1458
1459
ac9a91a7
JM
1460/* Fallback definition for EXTRACT_STRUCT_VALUE_ADDRESS */
1461#ifndef EXTRACT_STRUCT_VALUE_ADDRESS
1462#define EXTRACT_STRUCT_VALUE_ADDRESS_P (0)
96baa820 1463#define EXTRACT_STRUCT_VALUE_ADDRESS(X) (internal_error ("gdbarch: EXTRACT_STRUCT_VALUE_ADDRESS"), 0)
ac9a91a7
JM
1464#else
1465#ifndef EXTRACT_STRUCT_VALUE_ADDRESS_P
1466#define EXTRACT_STRUCT_VALUE_ADDRESS_P (1)
1467#endif
1468#endif
1469
1470
c906108c
SS
1471/* Set the dynamic target-system-dependant parameters (architecture,
1472 byte-order, ...) using information found in the BFD */
1473
104c1213 1474extern void set_gdbarch_from_file (bfd *);
c906108c
SS
1475
1476
e514a9d6
JM
1477/* Initialize the current architecture to the "first" one we find on
1478 our list. */
1479
1480extern void initialize_current_architecture (void);
1481
cce74817 1482
c906108c 1483/* gdbarch trace variable */
adf40b2e 1484extern int gdbarch_debug;
c906108c 1485
4b9b3959 1486extern void gdbarch_dump (struct gdbarch *gdbarch, struct ui_file *file);
0f71a2f6 1487
c906108c 1488#endif
This page took 0.154236 seconds and 4 git commands to generate.