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