* symtab.c (lookup_symtab): Remove ``const'' from ``rp''
[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.
181c1381 4 Copyright 1998, 1999, 2000, 2001, 2002 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
52204a0b 25 The Bourne shell script ``gdbarch.sh'' creates the files
104c1213
JM
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
52204a0b 31 changes into that script. Conversely, when making sweeping changes
104c1213
JM
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
2bf0cb65 38#include "dis-asm.h" /* Get defs for disassemble_info, which unfortunately is a typedef. */
fd0407d6
AC
39#if !GDB_MULTI_ARCH
40#include "value.h" /* For default_coerce_float_to_double which is referenced by a macro. */
41#endif
2bf0cb65 42
cce74817
JM
43struct frame_info;
44struct value;
b6af0555 45struct objfile;
a2cf933a 46struct minimal_symbol;
0f71a2f6 47
0f71a2f6
JM
48extern struct gdbarch *current_gdbarch;
49
50
0f71a2f6
JM
51/* If any of the following are defined, the target wasn't correctly
52 converted. */
53
0f71a2f6
JM
54#if GDB_MULTI_ARCH
55#if defined (EXTRA_FRAME_INFO)
56#error "EXTRA_FRAME_INFO: replaced by struct frame_extra_info"
57#endif
58#endif
59
60#if GDB_MULTI_ARCH
61#if defined (FRAME_FIND_SAVED_REGS)
62#error "FRAME_FIND_SAVED_REGS: replaced by FRAME_INIT_SAVED_REGS"
63#endif
64#endif
65
83905903
AC
66#if (GDB_MULTI_ARCH >= GDB_MULTI_ARCH_PURE) && defined (GDB_TM_FILE)
67#error "GDB_TM_FILE: Pure multi-arch targets do not have a tm.h file."
68#endif
69
0f71a2f6
JM
70
71/* The following are pre-initialized by GDBARCH. */
72
104c1213 73extern const struct bfd_arch_info * gdbarch_bfd_arch_info (struct gdbarch *gdbarch);
0f71a2f6 74/* set_gdbarch_bfd_arch_info() - not applicable - pre-initialized. */
83905903
AC
75#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (TARGET_ARCHITECTURE)
76#error "Non multi-arch definition of TARGET_ARCHITECTURE"
77#endif
0f71a2f6 78#if GDB_MULTI_ARCH
6166d547 79#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (TARGET_ARCHITECTURE)
0f71a2f6
JM
80#define TARGET_ARCHITECTURE (gdbarch_bfd_arch_info (current_gdbarch))
81#endif
82#endif
83
104c1213 84extern int gdbarch_byte_order (struct gdbarch *gdbarch);
0f71a2f6 85/* set_gdbarch_byte_order() - not applicable - pre-initialized. */
83905903
AC
86#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (TARGET_BYTE_ORDER)
87#error "Non multi-arch definition of TARGET_BYTE_ORDER"
88#endif
0f71a2f6 89#if GDB_MULTI_ARCH
6166d547 90#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (TARGET_BYTE_ORDER)
0f71a2f6
JM
91#define TARGET_BYTE_ORDER (gdbarch_byte_order (current_gdbarch))
92#endif
93#endif
94
95
99e7bb18 96/* The following are initialized by the target dependent code. */
0f71a2f6 97
66b43ecb
AC
98/* Number of bits in a char or unsigned char for the target machine.
99 Just like CHAR_BIT in <limits.h> but describes the target machine.
100 v::TARGET_CHAR_BIT:int:char_bit::::8 * sizeof (char):8::0:
101
102 Number of bits in a short or unsigned short for the target machine. */
c4093a6a 103
66b43ecb
AC
104/* Default (value) for non- multi-arch platforms. */
105#if (!GDB_MULTI_ARCH) && !defined (TARGET_SHORT_BIT)
106#define TARGET_SHORT_BIT (2*TARGET_CHAR_BIT)
0f71a2f6
JM
107#endif
108
104c1213
JM
109extern int gdbarch_short_bit (struct gdbarch *gdbarch);
110extern void set_gdbarch_short_bit (struct gdbarch *gdbarch, int short_bit);
83905903
AC
111#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (TARGET_SHORT_BIT)
112#error "Non multi-arch definition of TARGET_SHORT_BIT"
113#endif
0f71a2f6 114#if GDB_MULTI_ARCH
6166d547 115#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (TARGET_SHORT_BIT)
0f71a2f6
JM
116#define TARGET_SHORT_BIT (gdbarch_short_bit (current_gdbarch))
117#endif
118#endif
119
66b43ecb
AC
120/* Number of bits in an int or unsigned int for the target machine. */
121
122/* Default (value) for non- multi-arch platforms. */
123#if (!GDB_MULTI_ARCH) && !defined (TARGET_INT_BIT)
124#define TARGET_INT_BIT (4*TARGET_CHAR_BIT)
125#endif
126
104c1213
JM
127extern int gdbarch_int_bit (struct gdbarch *gdbarch);
128extern void set_gdbarch_int_bit (struct gdbarch *gdbarch, int int_bit);
83905903
AC
129#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (TARGET_INT_BIT)
130#error "Non multi-arch definition of TARGET_INT_BIT"
131#endif
0f71a2f6 132#if GDB_MULTI_ARCH
6166d547 133#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (TARGET_INT_BIT)
0f71a2f6
JM
134#define TARGET_INT_BIT (gdbarch_int_bit (current_gdbarch))
135#endif
136#endif
137
66b43ecb
AC
138/* Number of bits in a long or unsigned long for the target machine. */
139
140/* Default (value) for non- multi-arch platforms. */
141#if (!GDB_MULTI_ARCH) && !defined (TARGET_LONG_BIT)
142#define TARGET_LONG_BIT (4*TARGET_CHAR_BIT)
143#endif
144
104c1213
JM
145extern int gdbarch_long_bit (struct gdbarch *gdbarch);
146extern void set_gdbarch_long_bit (struct gdbarch *gdbarch, int long_bit);
83905903
AC
147#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (TARGET_LONG_BIT)
148#error "Non multi-arch definition of TARGET_LONG_BIT"
149#endif
0f71a2f6 150#if GDB_MULTI_ARCH
6166d547 151#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (TARGET_LONG_BIT)
0f71a2f6
JM
152#define TARGET_LONG_BIT (gdbarch_long_bit (current_gdbarch))
153#endif
154#endif
155
66b43ecb
AC
156/* Number of bits in a long long or unsigned long long for the target
157 machine. */
158
159/* Default (value) for non- multi-arch platforms. */
160#if (!GDB_MULTI_ARCH) && !defined (TARGET_LONG_LONG_BIT)
161#define TARGET_LONG_LONG_BIT (2*TARGET_LONG_BIT)
162#endif
163
104c1213
JM
164extern int gdbarch_long_long_bit (struct gdbarch *gdbarch);
165extern void set_gdbarch_long_long_bit (struct gdbarch *gdbarch, int long_long_bit);
83905903
AC
166#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (TARGET_LONG_LONG_BIT)
167#error "Non multi-arch definition of TARGET_LONG_LONG_BIT"
168#endif
0f71a2f6 169#if GDB_MULTI_ARCH
6166d547 170#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (TARGET_LONG_LONG_BIT)
0f71a2f6
JM
171#define TARGET_LONG_LONG_BIT (gdbarch_long_long_bit (current_gdbarch))
172#endif
173#endif
174
66b43ecb
AC
175/* Number of bits in a float for the target machine. */
176
177/* Default (value) for non- multi-arch platforms. */
178#if (!GDB_MULTI_ARCH) && !defined (TARGET_FLOAT_BIT)
179#define TARGET_FLOAT_BIT (4*TARGET_CHAR_BIT)
180#endif
181
104c1213
JM
182extern int gdbarch_float_bit (struct gdbarch *gdbarch);
183extern void set_gdbarch_float_bit (struct gdbarch *gdbarch, int float_bit);
83905903
AC
184#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (TARGET_FLOAT_BIT)
185#error "Non multi-arch definition of TARGET_FLOAT_BIT"
186#endif
0f71a2f6 187#if GDB_MULTI_ARCH
6166d547 188#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (TARGET_FLOAT_BIT)
0f71a2f6
JM
189#define TARGET_FLOAT_BIT (gdbarch_float_bit (current_gdbarch))
190#endif
191#endif
192
66b43ecb
AC
193/* Number of bits in a double for the target machine. */
194
195/* Default (value) for non- multi-arch platforms. */
196#if (!GDB_MULTI_ARCH) && !defined (TARGET_DOUBLE_BIT)
197#define TARGET_DOUBLE_BIT (8*TARGET_CHAR_BIT)
198#endif
199
104c1213
JM
200extern int gdbarch_double_bit (struct gdbarch *gdbarch);
201extern void set_gdbarch_double_bit (struct gdbarch *gdbarch, int double_bit);
83905903
AC
202#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (TARGET_DOUBLE_BIT)
203#error "Non multi-arch definition of TARGET_DOUBLE_BIT"
204#endif
0f71a2f6 205#if GDB_MULTI_ARCH
6166d547 206#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (TARGET_DOUBLE_BIT)
0f71a2f6
JM
207#define TARGET_DOUBLE_BIT (gdbarch_double_bit (current_gdbarch))
208#endif
209#endif
210
66b43ecb
AC
211/* Number of bits in a long double for the target machine. */
212
213/* Default (value) for non- multi-arch platforms. */
214#if (!GDB_MULTI_ARCH) && !defined (TARGET_LONG_DOUBLE_BIT)
17ef5d92 215#define TARGET_LONG_DOUBLE_BIT (8*TARGET_CHAR_BIT)
66b43ecb
AC
216#endif
217
104c1213
JM
218extern int gdbarch_long_double_bit (struct gdbarch *gdbarch);
219extern void set_gdbarch_long_double_bit (struct gdbarch *gdbarch, int long_double_bit);
83905903
AC
220#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (TARGET_LONG_DOUBLE_BIT)
221#error "Non multi-arch definition of TARGET_LONG_DOUBLE_BIT"
222#endif
0f71a2f6 223#if GDB_MULTI_ARCH
6166d547 224#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (TARGET_LONG_DOUBLE_BIT)
0f71a2f6
JM
225#define TARGET_LONG_DOUBLE_BIT (gdbarch_long_double_bit (current_gdbarch))
226#endif
227#endif
228
52204a0b
DT
229/* For most targets, a pointer on the target and its representation as an
230 address in GDB have the same size and "look the same". For such a
231 target, you need only set TARGET_PTR_BIT / ptr_bit and TARGET_ADDR_BIT
232 / addr_bit will be set from it.
233
234 If TARGET_PTR_BIT and TARGET_ADDR_BIT are different, you'll probably
235 also need to set POINTER_TO_ADDRESS and ADDRESS_TO_POINTER as well.
236
237 ptr_bit is the size of a pointer on the target */
66b43ecb
AC
238
239/* Default (value) for non- multi-arch platforms. */
240#if (!GDB_MULTI_ARCH) && !defined (TARGET_PTR_BIT)
241#define TARGET_PTR_BIT (TARGET_INT_BIT)
242#endif
243
244extern int gdbarch_ptr_bit (struct gdbarch *gdbarch);
245extern void set_gdbarch_ptr_bit (struct gdbarch *gdbarch, int ptr_bit);
83905903
AC
246#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (TARGET_PTR_BIT)
247#error "Non multi-arch definition of TARGET_PTR_BIT"
248#endif
66b43ecb
AC
249#if GDB_MULTI_ARCH
250#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (TARGET_PTR_BIT)
251#define TARGET_PTR_BIT (gdbarch_ptr_bit (current_gdbarch))
252#endif
253#endif
254
52204a0b
DT
255/* addr_bit is the size of a target address as represented in gdb */
256
257/* Default (value) for non- multi-arch platforms. */
258#if (!GDB_MULTI_ARCH) && !defined (TARGET_ADDR_BIT)
259#define TARGET_ADDR_BIT (TARGET_PTR_BIT)
260#endif
261
262extern int gdbarch_addr_bit (struct gdbarch *gdbarch);
263extern void set_gdbarch_addr_bit (struct gdbarch *gdbarch, int addr_bit);
83905903
AC
264#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (TARGET_ADDR_BIT)
265#error "Non multi-arch definition of TARGET_ADDR_BIT"
266#endif
52204a0b
DT
267#if GDB_MULTI_ARCH
268#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (TARGET_ADDR_BIT)
269#define TARGET_ADDR_BIT (gdbarch_addr_bit (current_gdbarch))
270#endif
271#endif
272
66b43ecb
AC
273/* Number of bits in a BFD_VMA for the target object file format. */
274
275/* Default (value) for non- multi-arch platforms. */
276#if (!GDB_MULTI_ARCH) && !defined (TARGET_BFD_VMA_BIT)
277#define TARGET_BFD_VMA_BIT (TARGET_ARCHITECTURE->bits_per_address)
278#endif
279
280extern int gdbarch_bfd_vma_bit (struct gdbarch *gdbarch);
281extern void set_gdbarch_bfd_vma_bit (struct gdbarch *gdbarch, int bfd_vma_bit);
83905903
AC
282#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (TARGET_BFD_VMA_BIT)
283#error "Non multi-arch definition of TARGET_BFD_VMA_BIT"
284#endif
66b43ecb
AC
285#if GDB_MULTI_ARCH
286#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (TARGET_BFD_VMA_BIT)
287#define TARGET_BFD_VMA_BIT (gdbarch_bfd_vma_bit (current_gdbarch))
288#endif
289#endif
290
4e409299
JB
291/* One if `char' acts like `signed char', zero if `unsigned char'. */
292
293/* Default (value) for non- multi-arch platforms. */
294#if (!GDB_MULTI_ARCH) && !defined (TARGET_CHAR_SIGNED)
295#define TARGET_CHAR_SIGNED (1)
296#endif
297
298extern int gdbarch_char_signed (struct gdbarch *gdbarch);
299extern void set_gdbarch_char_signed (struct gdbarch *gdbarch, int char_signed);
300#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (TARGET_CHAR_SIGNED)
301#error "Non multi-arch definition of TARGET_CHAR_SIGNED"
302#endif
303#if GDB_MULTI_ARCH
304#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (TARGET_CHAR_SIGNED)
305#define TARGET_CHAR_SIGNED (gdbarch_char_signed (current_gdbarch))
306#endif
307#endif
308
be8dfb87
AC
309/* Default (function) for non- multi-arch platforms. */
310#if (!GDB_MULTI_ARCH) && !defined (TARGET_READ_PC)
39f77062 311#define TARGET_READ_PC(ptid) (generic_target_read_pc (ptid))
be8dfb87
AC
312#endif
313
39f77062
KB
314typedef CORE_ADDR (gdbarch_read_pc_ftype) (ptid_t ptid);
315extern CORE_ADDR gdbarch_read_pc (struct gdbarch *gdbarch, ptid_t ptid);
104c1213 316extern void set_gdbarch_read_pc (struct gdbarch *gdbarch, gdbarch_read_pc_ftype *read_pc);
83905903
AC
317#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (TARGET_READ_PC)
318#error "Non multi-arch definition of TARGET_READ_PC"
319#endif
0f71a2f6 320#if GDB_MULTI_ARCH
6166d547 321#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (TARGET_READ_PC)
39f77062 322#define TARGET_READ_PC(ptid) (gdbarch_read_pc (current_gdbarch, ptid))
0f71a2f6
JM
323#endif
324#endif
325
be8dfb87
AC
326/* Default (function) for non- multi-arch platforms. */
327#if (!GDB_MULTI_ARCH) && !defined (TARGET_WRITE_PC)
39f77062 328#define TARGET_WRITE_PC(val, ptid) (generic_target_write_pc (val, ptid))
be8dfb87
AC
329#endif
330
39f77062
KB
331typedef void (gdbarch_write_pc_ftype) (CORE_ADDR val, ptid_t ptid);
332extern void gdbarch_write_pc (struct gdbarch *gdbarch, CORE_ADDR val, ptid_t ptid);
104c1213 333extern void set_gdbarch_write_pc (struct gdbarch *gdbarch, gdbarch_write_pc_ftype *write_pc);
83905903
AC
334#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (TARGET_WRITE_PC)
335#error "Non multi-arch definition of TARGET_WRITE_PC"
336#endif
0f71a2f6 337#if GDB_MULTI_ARCH
6166d547 338#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (TARGET_WRITE_PC)
39f77062 339#define TARGET_WRITE_PC(val, ptid) (gdbarch_write_pc (current_gdbarch, val, ptid))
0f71a2f6
JM
340#endif
341#endif
342
be8dfb87
AC
343/* Default (function) for non- multi-arch platforms. */
344#if (!GDB_MULTI_ARCH) && !defined (TARGET_READ_FP)
345#define TARGET_READ_FP() (generic_target_read_fp ())
346#endif
347
104c1213
JM
348typedef CORE_ADDR (gdbarch_read_fp_ftype) (void);
349extern CORE_ADDR gdbarch_read_fp (struct gdbarch *gdbarch);
350extern void set_gdbarch_read_fp (struct gdbarch *gdbarch, gdbarch_read_fp_ftype *read_fp);
83905903
AC
351#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (TARGET_READ_FP)
352#error "Non multi-arch definition of TARGET_READ_FP"
353#endif
0f71a2f6 354#if GDB_MULTI_ARCH
6166d547 355#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (TARGET_READ_FP)
0f71a2f6
JM
356#define TARGET_READ_FP() (gdbarch_read_fp (current_gdbarch))
357#endif
358#endif
359
be8dfb87
AC
360/* Default (function) for non- multi-arch platforms. */
361#if (!GDB_MULTI_ARCH) && !defined (TARGET_READ_SP)
362#define TARGET_READ_SP() (generic_target_read_sp ())
363#endif
364
104c1213
JM
365typedef CORE_ADDR (gdbarch_read_sp_ftype) (void);
366extern CORE_ADDR gdbarch_read_sp (struct gdbarch *gdbarch);
367extern void set_gdbarch_read_sp (struct gdbarch *gdbarch, gdbarch_read_sp_ftype *read_sp);
83905903
AC
368#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (TARGET_READ_SP)
369#error "Non multi-arch definition of TARGET_READ_SP"
370#endif
0f71a2f6 371#if GDB_MULTI_ARCH
6166d547 372#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (TARGET_READ_SP)
0f71a2f6
JM
373#define TARGET_READ_SP() (gdbarch_read_sp (current_gdbarch))
374#endif
375#endif
376
be8dfb87
AC
377/* Default (function) for non- multi-arch platforms. */
378#if (!GDB_MULTI_ARCH) && !defined (TARGET_WRITE_SP)
379#define TARGET_WRITE_SP(val) (generic_target_write_sp (val))
380#endif
381
104c1213
JM
382typedef void (gdbarch_write_sp_ftype) (CORE_ADDR val);
383extern void gdbarch_write_sp (struct gdbarch *gdbarch, CORE_ADDR val);
384extern void set_gdbarch_write_sp (struct gdbarch *gdbarch, gdbarch_write_sp_ftype *write_sp);
83905903
AC
385#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (TARGET_WRITE_SP)
386#error "Non multi-arch definition of TARGET_WRITE_SP"
387#endif
0f71a2f6 388#if GDB_MULTI_ARCH
6166d547 389#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (TARGET_WRITE_SP)
0f71a2f6
JM
390#define TARGET_WRITE_SP(val) (gdbarch_write_sp (current_gdbarch, val))
391#endif
392#endif
393
39d4ef09
AC
394/* Function for getting target's idea of a frame pointer. FIXME: GDB's
395 whole scheme for dealing with "frames" and "frame pointers" needs a
396 serious shakedown. */
397
398/* Default (function) for non- multi-arch platforms. */
399#if (!GDB_MULTI_ARCH) && !defined (TARGET_VIRTUAL_FRAME_POINTER)
400#define TARGET_VIRTUAL_FRAME_POINTER(pc, frame_regnum, frame_offset) (legacy_virtual_frame_pointer (pc, frame_regnum, frame_offset))
401#endif
402
403typedef void (gdbarch_virtual_frame_pointer_ftype) (CORE_ADDR pc, int *frame_regnum, LONGEST *frame_offset);
404extern void gdbarch_virtual_frame_pointer (struct gdbarch *gdbarch, CORE_ADDR pc, int *frame_regnum, LONGEST *frame_offset);
405extern void set_gdbarch_virtual_frame_pointer (struct gdbarch *gdbarch, gdbarch_virtual_frame_pointer_ftype *virtual_frame_pointer);
406#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (TARGET_VIRTUAL_FRAME_POINTER)
407#error "Non multi-arch definition of TARGET_VIRTUAL_FRAME_POINTER"
408#endif
409#if GDB_MULTI_ARCH
410#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (TARGET_VIRTUAL_FRAME_POINTER)
411#define TARGET_VIRTUAL_FRAME_POINTER(pc, frame_regnum, frame_offset) (gdbarch_virtual_frame_pointer (current_gdbarch, pc, frame_regnum, frame_offset))
412#endif
413#endif
414
61a0eb5b
AC
415extern int gdbarch_register_read_p (struct gdbarch *gdbarch);
416
417typedef void (gdbarch_register_read_ftype) (struct gdbarch *gdbarch, int regnum, char *buf);
418extern void gdbarch_register_read (struct gdbarch *gdbarch, int regnum, char *buf);
419extern void set_gdbarch_register_read (struct gdbarch *gdbarch, gdbarch_register_read_ftype *register_read);
420
421extern int gdbarch_register_write_p (struct gdbarch *gdbarch);
422
423typedef void (gdbarch_register_write_ftype) (struct gdbarch *gdbarch, int regnum, char *buf);
424extern void gdbarch_register_write (struct gdbarch *gdbarch, int regnum, char *buf);
425extern void set_gdbarch_register_write (struct gdbarch *gdbarch, gdbarch_register_write_ftype *register_write);
426
104c1213
JM
427extern int gdbarch_num_regs (struct gdbarch *gdbarch);
428extern void set_gdbarch_num_regs (struct gdbarch *gdbarch, int num_regs);
83905903
AC
429#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (NUM_REGS)
430#error "Non multi-arch definition of NUM_REGS"
431#endif
0f71a2f6 432#if GDB_MULTI_ARCH
6166d547 433#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (NUM_REGS)
0f71a2f6
JM
434#define NUM_REGS (gdbarch_num_regs (current_gdbarch))
435#endif
436#endif
437
34620563
AC
438/* This macro gives the number of pseudo-registers that live in the
439 register namespace but do not get fetched or stored on the target.
440 These pseudo-registers may be aliases for other registers,
441 combinations of other registers, or they may be computed by GDB. */
442
0aba1244 443/* Default (value) for non- multi-arch platforms. */
6166d547 444#if (!GDB_MULTI_ARCH) && !defined (NUM_PSEUDO_REGS)
0aba1244
EZ
445#define NUM_PSEUDO_REGS (0)
446#endif
447
448extern int gdbarch_num_pseudo_regs (struct gdbarch *gdbarch);
449extern void set_gdbarch_num_pseudo_regs (struct gdbarch *gdbarch, int num_pseudo_regs);
83905903
AC
450#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (NUM_PSEUDO_REGS)
451#error "Non multi-arch definition of NUM_PSEUDO_REGS"
452#endif
0aba1244 453#if GDB_MULTI_ARCH
6166d547 454#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (NUM_PSEUDO_REGS)
0aba1244
EZ
455#define NUM_PSEUDO_REGS (gdbarch_num_pseudo_regs (current_gdbarch))
456#endif
457#endif
458
104c1213
JM
459extern int gdbarch_sp_regnum (struct gdbarch *gdbarch);
460extern void set_gdbarch_sp_regnum (struct gdbarch *gdbarch, int sp_regnum);
83905903
AC
461#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (SP_REGNUM)
462#error "Non multi-arch definition of SP_REGNUM"
463#endif
0f71a2f6 464#if GDB_MULTI_ARCH
6166d547 465#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (SP_REGNUM)
0f71a2f6
JM
466#define SP_REGNUM (gdbarch_sp_regnum (current_gdbarch))
467#endif
468#endif
469
104c1213
JM
470extern int gdbarch_fp_regnum (struct gdbarch *gdbarch);
471extern void set_gdbarch_fp_regnum (struct gdbarch *gdbarch, int fp_regnum);
83905903
AC
472#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (FP_REGNUM)
473#error "Non multi-arch definition of FP_REGNUM"
474#endif
0f71a2f6 475#if GDB_MULTI_ARCH
6166d547 476#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (FP_REGNUM)
0f71a2f6
JM
477#define FP_REGNUM (gdbarch_fp_regnum (current_gdbarch))
478#endif
479#endif
480
104c1213
JM
481extern int gdbarch_pc_regnum (struct gdbarch *gdbarch);
482extern void set_gdbarch_pc_regnum (struct gdbarch *gdbarch, int pc_regnum);
83905903
AC
483#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (PC_REGNUM)
484#error "Non multi-arch definition of PC_REGNUM"
485#endif
0f71a2f6 486#if GDB_MULTI_ARCH
6166d547 487#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (PC_REGNUM)
0f71a2f6
JM
488#define PC_REGNUM (gdbarch_pc_regnum (current_gdbarch))
489#endif
490#endif
491
60054393 492/* Default (value) for non- multi-arch platforms. */
6166d547 493#if (!GDB_MULTI_ARCH) && !defined (FP0_REGNUM)
60054393
MS
494#define FP0_REGNUM (-1)
495#endif
496
497extern int gdbarch_fp0_regnum (struct gdbarch *gdbarch);
498extern void set_gdbarch_fp0_regnum (struct gdbarch *gdbarch, int fp0_regnum);
83905903
AC
499#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (FP0_REGNUM)
500#error "Non multi-arch definition of FP0_REGNUM"
501#endif
60054393 502#if GDB_MULTI_ARCH
6166d547 503#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (FP0_REGNUM)
60054393
MS
504#define FP0_REGNUM (gdbarch_fp0_regnum (current_gdbarch))
505#endif
506#endif
507
03863182 508/* Default (value) for non- multi-arch platforms. */
6166d547 509#if (!GDB_MULTI_ARCH) && !defined (NPC_REGNUM)
03863182
AC
510#define NPC_REGNUM (-1)
511#endif
512
513extern int gdbarch_npc_regnum (struct gdbarch *gdbarch);
514extern void set_gdbarch_npc_regnum (struct gdbarch *gdbarch, int npc_regnum);
83905903
AC
515#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (NPC_REGNUM)
516#error "Non multi-arch definition of NPC_REGNUM"
517#endif
03863182 518#if GDB_MULTI_ARCH
6166d547 519#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (NPC_REGNUM)
03863182
AC
520#define NPC_REGNUM (gdbarch_npc_regnum (current_gdbarch))
521#endif
522#endif
523
524/* Default (value) for non- multi-arch platforms. */
6166d547 525#if (!GDB_MULTI_ARCH) && !defined (NNPC_REGNUM)
03863182
AC
526#define NNPC_REGNUM (-1)
527#endif
528
529extern int gdbarch_nnpc_regnum (struct gdbarch *gdbarch);
530extern void set_gdbarch_nnpc_regnum (struct gdbarch *gdbarch, int nnpc_regnum);
83905903
AC
531#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (NNPC_REGNUM)
532#error "Non multi-arch definition of NNPC_REGNUM"
533#endif
03863182 534#if GDB_MULTI_ARCH
6166d547 535#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (NNPC_REGNUM)
03863182
AC
536#define NNPC_REGNUM (gdbarch_nnpc_regnum (current_gdbarch))
537#endif
538#endif
539
88c72b7d
AC
540/* Convert stab register number (from `r' declaration) to a gdb REGNUM. */
541
542/* Default (function) for non- multi-arch platforms. */
543#if (!GDB_MULTI_ARCH) && !defined (STAB_REG_TO_REGNUM)
544#define STAB_REG_TO_REGNUM(stab_regnr) (no_op_reg_to_regnum (stab_regnr))
545#endif
546
547typedef int (gdbarch_stab_reg_to_regnum_ftype) (int stab_regnr);
548extern int gdbarch_stab_reg_to_regnum (struct gdbarch *gdbarch, int stab_regnr);
549extern void set_gdbarch_stab_reg_to_regnum (struct gdbarch *gdbarch, gdbarch_stab_reg_to_regnum_ftype *stab_reg_to_regnum);
83905903
AC
550#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (STAB_REG_TO_REGNUM)
551#error "Non multi-arch definition of STAB_REG_TO_REGNUM"
552#endif
88c72b7d
AC
553#if GDB_MULTI_ARCH
554#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (STAB_REG_TO_REGNUM)
555#define STAB_REG_TO_REGNUM(stab_regnr) (gdbarch_stab_reg_to_regnum (current_gdbarch, stab_regnr))
556#endif
557#endif
558
559/* Provide a default mapping from a ecoff register number to a gdb REGNUM. */
560
561/* Default (function) for non- multi-arch platforms. */
562#if (!GDB_MULTI_ARCH) && !defined (ECOFF_REG_TO_REGNUM)
563#define ECOFF_REG_TO_REGNUM(ecoff_regnr) (no_op_reg_to_regnum (ecoff_regnr))
564#endif
565
566typedef int (gdbarch_ecoff_reg_to_regnum_ftype) (int ecoff_regnr);
567extern int gdbarch_ecoff_reg_to_regnum (struct gdbarch *gdbarch, int ecoff_regnr);
568extern void set_gdbarch_ecoff_reg_to_regnum (struct gdbarch *gdbarch, gdbarch_ecoff_reg_to_regnum_ftype *ecoff_reg_to_regnum);
83905903
AC
569#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (ECOFF_REG_TO_REGNUM)
570#error "Non multi-arch definition of ECOFF_REG_TO_REGNUM"
571#endif
88c72b7d
AC
572#if GDB_MULTI_ARCH
573#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (ECOFF_REG_TO_REGNUM)
574#define ECOFF_REG_TO_REGNUM(ecoff_regnr) (gdbarch_ecoff_reg_to_regnum (current_gdbarch, ecoff_regnr))
575#endif
576#endif
577
578/* Provide a default mapping from a DWARF register number to a gdb REGNUM. */
579
580/* Default (function) for non- multi-arch platforms. */
581#if (!GDB_MULTI_ARCH) && !defined (DWARF_REG_TO_REGNUM)
582#define DWARF_REG_TO_REGNUM(dwarf_regnr) (no_op_reg_to_regnum (dwarf_regnr))
583#endif
584
585typedef int (gdbarch_dwarf_reg_to_regnum_ftype) (int dwarf_regnr);
586extern int gdbarch_dwarf_reg_to_regnum (struct gdbarch *gdbarch, int dwarf_regnr);
587extern void set_gdbarch_dwarf_reg_to_regnum (struct gdbarch *gdbarch, gdbarch_dwarf_reg_to_regnum_ftype *dwarf_reg_to_regnum);
83905903
AC
588#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (DWARF_REG_TO_REGNUM)
589#error "Non multi-arch definition of DWARF_REG_TO_REGNUM"
590#endif
88c72b7d
AC
591#if GDB_MULTI_ARCH
592#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (DWARF_REG_TO_REGNUM)
593#define DWARF_REG_TO_REGNUM(dwarf_regnr) (gdbarch_dwarf_reg_to_regnum (current_gdbarch, dwarf_regnr))
594#endif
595#endif
596
597/* Convert from an sdb register number to an internal gdb register number.
598 This should be defined in tm.h, if REGISTER_NAMES is not set up
599 to map one to one onto the sdb register numbers. */
600
601/* Default (function) for non- multi-arch platforms. */
602#if (!GDB_MULTI_ARCH) && !defined (SDB_REG_TO_REGNUM)
603#define SDB_REG_TO_REGNUM(sdb_regnr) (no_op_reg_to_regnum (sdb_regnr))
604#endif
605
606typedef int (gdbarch_sdb_reg_to_regnum_ftype) (int sdb_regnr);
607extern int gdbarch_sdb_reg_to_regnum (struct gdbarch *gdbarch, int sdb_regnr);
608extern void set_gdbarch_sdb_reg_to_regnum (struct gdbarch *gdbarch, gdbarch_sdb_reg_to_regnum_ftype *sdb_reg_to_regnum);
83905903
AC
609#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (SDB_REG_TO_REGNUM)
610#error "Non multi-arch definition of SDB_REG_TO_REGNUM"
611#endif
88c72b7d
AC
612#if GDB_MULTI_ARCH
613#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (SDB_REG_TO_REGNUM)
614#define SDB_REG_TO_REGNUM(sdb_regnr) (gdbarch_sdb_reg_to_regnum (current_gdbarch, sdb_regnr))
615#endif
616#endif
617
618/* Default (function) for non- multi-arch platforms. */
619#if (!GDB_MULTI_ARCH) && !defined (DWARF2_REG_TO_REGNUM)
620#define DWARF2_REG_TO_REGNUM(dwarf2_regnr) (no_op_reg_to_regnum (dwarf2_regnr))
621#endif
622
623typedef int (gdbarch_dwarf2_reg_to_regnum_ftype) (int dwarf2_regnr);
624extern int gdbarch_dwarf2_reg_to_regnum (struct gdbarch *gdbarch, int dwarf2_regnr);
625extern void set_gdbarch_dwarf2_reg_to_regnum (struct gdbarch *gdbarch, gdbarch_dwarf2_reg_to_regnum_ftype *dwarf2_reg_to_regnum);
83905903
AC
626#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (DWARF2_REG_TO_REGNUM)
627#error "Non multi-arch definition of DWARF2_REG_TO_REGNUM"
628#endif
88c72b7d
AC
629#if GDB_MULTI_ARCH
630#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (DWARF2_REG_TO_REGNUM)
631#define DWARF2_REG_TO_REGNUM(dwarf2_regnr) (gdbarch_dwarf2_reg_to_regnum (current_gdbarch, dwarf2_regnr))
632#endif
633#endif
634
33489c5b 635/* Default (function) for non- multi-arch platforms. */
6166d547 636#if (!GDB_MULTI_ARCH) && !defined (REGISTER_NAME)
33489c5b
AC
637#define REGISTER_NAME(regnr) (legacy_register_name (regnr))
638#endif
639
104c1213
JM
640typedef char * (gdbarch_register_name_ftype) (int regnr);
641extern char * gdbarch_register_name (struct gdbarch *gdbarch, int regnr);
642extern void set_gdbarch_register_name (struct gdbarch *gdbarch, gdbarch_register_name_ftype *register_name);
83905903
AC
643#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (REGISTER_NAME)
644#error "Non multi-arch definition of REGISTER_NAME"
645#endif
33489c5b 646#if GDB_MULTI_ARCH
6166d547 647#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (REGISTER_NAME)
0f71a2f6
JM
648#define REGISTER_NAME(regnr) (gdbarch_register_name (current_gdbarch, regnr))
649#endif
33489c5b 650#endif
0f71a2f6 651
104c1213
JM
652extern int gdbarch_register_size (struct gdbarch *gdbarch);
653extern void set_gdbarch_register_size (struct gdbarch *gdbarch, int register_size);
83905903
AC
654#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (REGISTER_SIZE)
655#error "Non multi-arch definition of REGISTER_SIZE"
656#endif
0f71a2f6 657#if GDB_MULTI_ARCH
6166d547 658#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (REGISTER_SIZE)
0f71a2f6
JM
659#define REGISTER_SIZE (gdbarch_register_size (current_gdbarch))
660#endif
661#endif
662
104c1213
JM
663extern int gdbarch_register_bytes (struct gdbarch *gdbarch);
664extern void set_gdbarch_register_bytes (struct gdbarch *gdbarch, int register_bytes);
83905903
AC
665#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (REGISTER_BYTES)
666#error "Non multi-arch definition of REGISTER_BYTES"
667#endif
0f71a2f6 668#if GDB_MULTI_ARCH
6166d547 669#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (REGISTER_BYTES)
0f71a2f6
JM
670#define REGISTER_BYTES (gdbarch_register_bytes (current_gdbarch))
671#endif
672#endif
673
104c1213
JM
674typedef int (gdbarch_register_byte_ftype) (int reg_nr);
675extern int gdbarch_register_byte (struct gdbarch *gdbarch, int reg_nr);
676extern void set_gdbarch_register_byte (struct gdbarch *gdbarch, gdbarch_register_byte_ftype *register_byte);
83905903
AC
677#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (REGISTER_BYTE)
678#error "Non multi-arch definition of REGISTER_BYTE"
679#endif
0f71a2f6 680#if GDB_MULTI_ARCH
6166d547 681#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (REGISTER_BYTE)
0f71a2f6
JM
682#define REGISTER_BYTE(reg_nr) (gdbarch_register_byte (current_gdbarch, reg_nr))
683#endif
684#endif
685
104c1213
JM
686typedef int (gdbarch_register_raw_size_ftype) (int reg_nr);
687extern int gdbarch_register_raw_size (struct gdbarch *gdbarch, int reg_nr);
688extern void set_gdbarch_register_raw_size (struct gdbarch *gdbarch, gdbarch_register_raw_size_ftype *register_raw_size);
83905903
AC
689#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (REGISTER_RAW_SIZE)
690#error "Non multi-arch definition of REGISTER_RAW_SIZE"
691#endif
0f71a2f6 692#if GDB_MULTI_ARCH
6166d547 693#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (REGISTER_RAW_SIZE)
0f71a2f6
JM
694#define REGISTER_RAW_SIZE(reg_nr) (gdbarch_register_raw_size (current_gdbarch, reg_nr))
695#endif
696#endif
697
104c1213
JM
698extern int gdbarch_max_register_raw_size (struct gdbarch *gdbarch);
699extern void set_gdbarch_max_register_raw_size (struct gdbarch *gdbarch, int max_register_raw_size);
83905903
AC
700#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (MAX_REGISTER_RAW_SIZE)
701#error "Non multi-arch definition of MAX_REGISTER_RAW_SIZE"
702#endif
0f71a2f6 703#if GDB_MULTI_ARCH
6166d547 704#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (MAX_REGISTER_RAW_SIZE)
0f71a2f6
JM
705#define MAX_REGISTER_RAW_SIZE (gdbarch_max_register_raw_size (current_gdbarch))
706#endif
707#endif
708
104c1213
JM
709typedef int (gdbarch_register_virtual_size_ftype) (int reg_nr);
710extern int gdbarch_register_virtual_size (struct gdbarch *gdbarch, int reg_nr);
711extern void set_gdbarch_register_virtual_size (struct gdbarch *gdbarch, gdbarch_register_virtual_size_ftype *register_virtual_size);
83905903
AC
712#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (REGISTER_VIRTUAL_SIZE)
713#error "Non multi-arch definition of REGISTER_VIRTUAL_SIZE"
714#endif
0f71a2f6 715#if GDB_MULTI_ARCH
6166d547 716#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (REGISTER_VIRTUAL_SIZE)
0f71a2f6
JM
717#define REGISTER_VIRTUAL_SIZE(reg_nr) (gdbarch_register_virtual_size (current_gdbarch, reg_nr))
718#endif
719#endif
720
104c1213
JM
721extern int gdbarch_max_register_virtual_size (struct gdbarch *gdbarch);
722extern void set_gdbarch_max_register_virtual_size (struct gdbarch *gdbarch, int max_register_virtual_size);
83905903
AC
723#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (MAX_REGISTER_VIRTUAL_SIZE)
724#error "Non multi-arch definition of MAX_REGISTER_VIRTUAL_SIZE"
725#endif
0f71a2f6 726#if GDB_MULTI_ARCH
6166d547 727#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (MAX_REGISTER_VIRTUAL_SIZE)
0f71a2f6
JM
728#define MAX_REGISTER_VIRTUAL_SIZE (gdbarch_max_register_virtual_size (current_gdbarch))
729#endif
730#endif
731
104c1213
JM
732typedef struct type * (gdbarch_register_virtual_type_ftype) (int reg_nr);
733extern struct type * gdbarch_register_virtual_type (struct gdbarch *gdbarch, int reg_nr);
734extern void set_gdbarch_register_virtual_type (struct gdbarch *gdbarch, gdbarch_register_virtual_type_ftype *register_virtual_type);
83905903
AC
735#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (REGISTER_VIRTUAL_TYPE)
736#error "Non multi-arch definition of REGISTER_VIRTUAL_TYPE"
737#endif
0f71a2f6 738#if GDB_MULTI_ARCH
6166d547 739#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (REGISTER_VIRTUAL_TYPE)
0f71a2f6
JM
740#define REGISTER_VIRTUAL_TYPE(reg_nr) (gdbarch_register_virtual_type (current_gdbarch, reg_nr))
741#endif
742#endif
743
666e11c5
EZ
744/* Default (function) for non- multi-arch platforms. */
745#if (!GDB_MULTI_ARCH) && !defined (DO_REGISTERS_INFO)
746#define DO_REGISTERS_INFO(reg_nr, fpregs) (do_registers_info (reg_nr, fpregs))
747#endif
748
749typedef void (gdbarch_do_registers_info_ftype) (int reg_nr, int fpregs);
750extern void gdbarch_do_registers_info (struct gdbarch *gdbarch, int reg_nr, int fpregs);
751extern void set_gdbarch_do_registers_info (struct gdbarch *gdbarch, gdbarch_do_registers_info_ftype *do_registers_info);
83905903
AC
752#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (DO_REGISTERS_INFO)
753#error "Non multi-arch definition of DO_REGISTERS_INFO"
754#endif
666e11c5
EZ
755#if GDB_MULTI_ARCH
756#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (DO_REGISTERS_INFO)
757#define DO_REGISTERS_INFO(reg_nr, fpregs) (gdbarch_do_registers_info (current_gdbarch, reg_nr, fpregs))
758#endif
759#endif
760
5e74b15c
RE
761/* Default (function) for non- multi-arch platforms. */
762#if (!GDB_MULTI_ARCH) && !defined (PRINT_FLOAT_INFO)
763#define PRINT_FLOAT_INFO() (default_print_float_info ())
764#endif
765
766typedef void (gdbarch_print_float_info_ftype) (void);
767extern void gdbarch_print_float_info (struct gdbarch *gdbarch);
768extern void set_gdbarch_print_float_info (struct gdbarch *gdbarch, gdbarch_print_float_info_ftype *print_float_info);
769#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (PRINT_FLOAT_INFO)
770#error "Non multi-arch definition of PRINT_FLOAT_INFO"
771#endif
772#if GDB_MULTI_ARCH
773#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (PRINT_FLOAT_INFO)
774#define PRINT_FLOAT_INFO() (gdbarch_print_float_info (current_gdbarch))
775#endif
776#endif
777
7c7651b2
AC
778/* MAP a GDB RAW register number onto a simulator register number. See
779 also include/...-sim.h. */
780
781/* Default (function) for non- multi-arch platforms. */
782#if (!GDB_MULTI_ARCH) && !defined (REGISTER_SIM_REGNO)
783#define REGISTER_SIM_REGNO(reg_nr) (default_register_sim_regno (reg_nr))
784#endif
785
786typedef int (gdbarch_register_sim_regno_ftype) (int reg_nr);
787extern int gdbarch_register_sim_regno (struct gdbarch *gdbarch, int reg_nr);
788extern void set_gdbarch_register_sim_regno (struct gdbarch *gdbarch, gdbarch_register_sim_regno_ftype *register_sim_regno);
83905903
AC
789#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (REGISTER_SIM_REGNO)
790#error "Non multi-arch definition of REGISTER_SIM_REGNO"
791#endif
7c7651b2
AC
792#if GDB_MULTI_ARCH
793#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (REGISTER_SIM_REGNO)
794#define REGISTER_SIM_REGNO(reg_nr) (gdbarch_register_sim_regno (current_gdbarch, reg_nr))
795#endif
796#endif
797
2649061d
AC
798#if defined (REGISTER_BYTES_OK)
799/* Legacy for systems yet to multi-arch REGISTER_BYTES_OK */
eee30e78 800#if !defined (REGISTER_BYTES_OK_P)
2649061d
AC
801#define REGISTER_BYTES_OK_P() (1)
802#endif
eee30e78 803#endif
2649061d
AC
804
805/* Default predicate for non- multi-arch targets. */
806#if (!GDB_MULTI_ARCH) && !defined (REGISTER_BYTES_OK_P)
807#define REGISTER_BYTES_OK_P() (0)
808#endif
809
810extern int gdbarch_register_bytes_ok_p (struct gdbarch *gdbarch);
83905903
AC
811#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (REGISTER_BYTES_OK_P)
812#error "Non multi-arch definition of REGISTER_BYTES_OK"
813#endif
2649061d
AC
814#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (REGISTER_BYTES_OK_P)
815#define REGISTER_BYTES_OK_P() (gdbarch_register_bytes_ok_p (current_gdbarch))
816#endif
817
818/* Default (function) for non- multi-arch platforms. */
819#if (!GDB_MULTI_ARCH) && !defined (REGISTER_BYTES_OK)
8e65ff28 820#define REGISTER_BYTES_OK(nr_bytes) (internal_error (__FILE__, __LINE__, "REGISTER_BYTES_OK"), 0)
2649061d
AC
821#endif
822
823typedef int (gdbarch_register_bytes_ok_ftype) (long nr_bytes);
824extern int gdbarch_register_bytes_ok (struct gdbarch *gdbarch, long nr_bytes);
825extern void set_gdbarch_register_bytes_ok (struct gdbarch *gdbarch, gdbarch_register_bytes_ok_ftype *register_bytes_ok);
83905903
AC
826#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (REGISTER_BYTES_OK)
827#error "Non multi-arch definition of REGISTER_BYTES_OK"
828#endif
2649061d
AC
829#if GDB_MULTI_ARCH
830#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (REGISTER_BYTES_OK)
831#define REGISTER_BYTES_OK(nr_bytes) (gdbarch_register_bytes_ok (current_gdbarch, nr_bytes))
832#endif
833#endif
834
01fb7433
AC
835/* Default (function) for non- multi-arch platforms. */
836#if (!GDB_MULTI_ARCH) && !defined (CANNOT_FETCH_REGISTER)
837#define CANNOT_FETCH_REGISTER(regnum) (cannot_register_not (regnum))
838#endif
839
840typedef int (gdbarch_cannot_fetch_register_ftype) (int regnum);
841extern int gdbarch_cannot_fetch_register (struct gdbarch *gdbarch, int regnum);
842extern void set_gdbarch_cannot_fetch_register (struct gdbarch *gdbarch, gdbarch_cannot_fetch_register_ftype *cannot_fetch_register);
83905903
AC
843#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (CANNOT_FETCH_REGISTER)
844#error "Non multi-arch definition of CANNOT_FETCH_REGISTER"
845#endif
01fb7433
AC
846#if GDB_MULTI_ARCH
847#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (CANNOT_FETCH_REGISTER)
848#define CANNOT_FETCH_REGISTER(regnum) (gdbarch_cannot_fetch_register (current_gdbarch, regnum))
849#endif
850#endif
851
852/* Default (function) for non- multi-arch platforms. */
853#if (!GDB_MULTI_ARCH) && !defined (CANNOT_STORE_REGISTER)
854#define CANNOT_STORE_REGISTER(regnum) (cannot_register_not (regnum))
855#endif
856
857typedef int (gdbarch_cannot_store_register_ftype) (int regnum);
858extern int gdbarch_cannot_store_register (struct gdbarch *gdbarch, int regnum);
859extern void set_gdbarch_cannot_store_register (struct gdbarch *gdbarch, gdbarch_cannot_store_register_ftype *cannot_store_register);
83905903
AC
860#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (CANNOT_STORE_REGISTER)
861#error "Non multi-arch definition of CANNOT_STORE_REGISTER"
862#endif
01fb7433
AC
863#if GDB_MULTI_ARCH
864#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (CANNOT_STORE_REGISTER)
865#define CANNOT_STORE_REGISTER(regnum) (gdbarch_cannot_store_register (current_gdbarch, regnum))
866#endif
867#endif
868
9df628e0
RE
869/* setjmp/longjmp support. */
870
871#if defined (GET_LONGJMP_TARGET)
872/* Legacy for systems yet to multi-arch GET_LONGJMP_TARGET */
873#if !defined (GET_LONGJMP_TARGET_P)
874#define GET_LONGJMP_TARGET_P() (1)
875#endif
876#endif
877
878/* Default predicate for non- multi-arch targets. */
879#if (!GDB_MULTI_ARCH) && !defined (GET_LONGJMP_TARGET_P)
880#define GET_LONGJMP_TARGET_P() (0)
881#endif
882
883extern int gdbarch_get_longjmp_target_p (struct gdbarch *gdbarch);
884#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (GET_LONGJMP_TARGET_P)
885#error "Non multi-arch definition of GET_LONGJMP_TARGET"
886#endif
887#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (GET_LONGJMP_TARGET_P)
888#define GET_LONGJMP_TARGET_P() (gdbarch_get_longjmp_target_p (current_gdbarch))
889#endif
890
891/* Default (function) for non- multi-arch platforms. */
892#if (!GDB_MULTI_ARCH) && !defined (GET_LONGJMP_TARGET)
893#define GET_LONGJMP_TARGET(pc) (internal_error (__FILE__, __LINE__, "GET_LONGJMP_TARGET"), 0)
894#endif
895
896typedef int (gdbarch_get_longjmp_target_ftype) (CORE_ADDR *pc);
897extern int gdbarch_get_longjmp_target (struct gdbarch *gdbarch, CORE_ADDR *pc);
898extern void set_gdbarch_get_longjmp_target (struct gdbarch *gdbarch, gdbarch_get_longjmp_target_ftype *get_longjmp_target);
899#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (GET_LONGJMP_TARGET)
900#error "Non multi-arch definition of GET_LONGJMP_TARGET"
901#endif
902#if GDB_MULTI_ARCH
903#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (GET_LONGJMP_TARGET)
904#define GET_LONGJMP_TARGET(pc) (gdbarch_get_longjmp_target (current_gdbarch, pc))
905#endif
906#endif
907
028c194b
AC
908/* Non multi-arch DUMMY_FRAMES are a mess (multi-arch ones are not that
909 much better but at least they are vaguely consistent). The headers
910 and body contain convoluted #if/#else sequences for determine how
911 things should be compiled. Instead of trying to mimic that
912 behaviour here (and hence entrench it further) gdbarch simply
913 reqires that these methods be set up from the word go. This also
914 avoids any potential problems with moving beyond multi-arch partial. */
915
104c1213
JM
916extern int gdbarch_use_generic_dummy_frames (struct gdbarch *gdbarch);
917extern void set_gdbarch_use_generic_dummy_frames (struct gdbarch *gdbarch, int use_generic_dummy_frames);
028c194b 918#if (GDB_MULTI_ARCH >= GDB_MULTI_ARCH_PARTIAL) && defined (USE_GENERIC_DUMMY_FRAMES)
83905903
AC
919#error "Non multi-arch definition of USE_GENERIC_DUMMY_FRAMES"
920#endif
0f71a2f6 921#if GDB_MULTI_ARCH
028c194b 922#if (GDB_MULTI_ARCH >= GDB_MULTI_ARCH_PARTIAL) || !defined (USE_GENERIC_DUMMY_FRAMES)
0f71a2f6
JM
923#define USE_GENERIC_DUMMY_FRAMES (gdbarch_use_generic_dummy_frames (current_gdbarch))
924#endif
925#endif
926
104c1213
JM
927extern int gdbarch_call_dummy_location (struct gdbarch *gdbarch);
928extern void set_gdbarch_call_dummy_location (struct gdbarch *gdbarch, int call_dummy_location);
028c194b 929#if (GDB_MULTI_ARCH >= GDB_MULTI_ARCH_PARTIAL) && defined (CALL_DUMMY_LOCATION)
83905903
AC
930#error "Non multi-arch definition of CALL_DUMMY_LOCATION"
931#endif
0f71a2f6 932#if GDB_MULTI_ARCH
028c194b 933#if (GDB_MULTI_ARCH >= GDB_MULTI_ARCH_PARTIAL) || !defined (CALL_DUMMY_LOCATION)
0f71a2f6
JM
934#define CALL_DUMMY_LOCATION (gdbarch_call_dummy_location (current_gdbarch))
935#endif
936#endif
937
104c1213
JM
938typedef CORE_ADDR (gdbarch_call_dummy_address_ftype) (void);
939extern CORE_ADDR gdbarch_call_dummy_address (struct gdbarch *gdbarch);
940extern void set_gdbarch_call_dummy_address (struct gdbarch *gdbarch, gdbarch_call_dummy_address_ftype *call_dummy_address);
83905903
AC
941#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (CALL_DUMMY_ADDRESS)
942#error "Non multi-arch definition of CALL_DUMMY_ADDRESS"
943#endif
0f71a2f6 944#if GDB_MULTI_ARCH
6166d547 945#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (CALL_DUMMY_ADDRESS)
0f71a2f6
JM
946#define CALL_DUMMY_ADDRESS() (gdbarch_call_dummy_address (current_gdbarch))
947#endif
948#endif
949
104c1213
JM
950extern CORE_ADDR gdbarch_call_dummy_start_offset (struct gdbarch *gdbarch);
951extern void set_gdbarch_call_dummy_start_offset (struct gdbarch *gdbarch, CORE_ADDR call_dummy_start_offset);
83905903
AC
952#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (CALL_DUMMY_START_OFFSET)
953#error "Non multi-arch definition of CALL_DUMMY_START_OFFSET"
954#endif
0f71a2f6 955#if GDB_MULTI_ARCH
6166d547 956#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (CALL_DUMMY_START_OFFSET)
0f71a2f6
JM
957#define CALL_DUMMY_START_OFFSET (gdbarch_call_dummy_start_offset (current_gdbarch))
958#endif
959#endif
960
104c1213
JM
961extern CORE_ADDR gdbarch_call_dummy_breakpoint_offset (struct gdbarch *gdbarch);
962extern void set_gdbarch_call_dummy_breakpoint_offset (struct gdbarch *gdbarch, CORE_ADDR call_dummy_breakpoint_offset);
83905903
AC
963#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (CALL_DUMMY_BREAKPOINT_OFFSET)
964#error "Non multi-arch definition of CALL_DUMMY_BREAKPOINT_OFFSET"
965#endif
0f71a2f6 966#if GDB_MULTI_ARCH
6166d547 967#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (CALL_DUMMY_BREAKPOINT_OFFSET)
0f71a2f6
JM
968#define CALL_DUMMY_BREAKPOINT_OFFSET (gdbarch_call_dummy_breakpoint_offset (current_gdbarch))
969#endif
970#endif
971
104c1213
JM
972extern int gdbarch_call_dummy_breakpoint_offset_p (struct gdbarch *gdbarch);
973extern void set_gdbarch_call_dummy_breakpoint_offset_p (struct gdbarch *gdbarch, int call_dummy_breakpoint_offset_p);
028c194b 974#if (GDB_MULTI_ARCH >= GDB_MULTI_ARCH_PARTIAL) && defined (CALL_DUMMY_BREAKPOINT_OFFSET_P)
83905903
AC
975#error "Non multi-arch definition of CALL_DUMMY_BREAKPOINT_OFFSET_P"
976#endif
0f71a2f6 977#if GDB_MULTI_ARCH
028c194b 978#if (GDB_MULTI_ARCH >= GDB_MULTI_ARCH_PARTIAL) || !defined (CALL_DUMMY_BREAKPOINT_OFFSET_P)
0f71a2f6
JM
979#define CALL_DUMMY_BREAKPOINT_OFFSET_P (gdbarch_call_dummy_breakpoint_offset_p (current_gdbarch))
980#endif
981#endif
982
104c1213
JM
983extern int gdbarch_call_dummy_length (struct gdbarch *gdbarch);
984extern void set_gdbarch_call_dummy_length (struct gdbarch *gdbarch, int call_dummy_length);
83905903
AC
985#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (CALL_DUMMY_LENGTH)
986#error "Non multi-arch definition of CALL_DUMMY_LENGTH"
987#endif
0f71a2f6 988#if GDB_MULTI_ARCH
6166d547 989#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (CALL_DUMMY_LENGTH)
0f71a2f6
JM
990#define CALL_DUMMY_LENGTH (gdbarch_call_dummy_length (current_gdbarch))
991#endif
992#endif
993
104c1213
JM
994typedef int (gdbarch_pc_in_call_dummy_ftype) (CORE_ADDR pc, CORE_ADDR sp, CORE_ADDR frame_address);
995extern int gdbarch_pc_in_call_dummy (struct gdbarch *gdbarch, CORE_ADDR pc, CORE_ADDR sp, CORE_ADDR frame_address);
996extern void set_gdbarch_pc_in_call_dummy (struct gdbarch *gdbarch, gdbarch_pc_in_call_dummy_ftype *pc_in_call_dummy);
028c194b 997#if (GDB_MULTI_ARCH >= GDB_MULTI_ARCH_PARTIAL) && defined (PC_IN_CALL_DUMMY)
83905903
AC
998#error "Non multi-arch definition of PC_IN_CALL_DUMMY"
999#endif
0f71a2f6 1000#if GDB_MULTI_ARCH
028c194b 1001#if (GDB_MULTI_ARCH >= GDB_MULTI_ARCH_PARTIAL) || !defined (PC_IN_CALL_DUMMY)
0f71a2f6
JM
1002#define PC_IN_CALL_DUMMY(pc, sp, frame_address) (gdbarch_pc_in_call_dummy (current_gdbarch, pc, sp, frame_address))
1003#endif
1004#endif
1005
104c1213
JM
1006extern int gdbarch_call_dummy_p (struct gdbarch *gdbarch);
1007extern void set_gdbarch_call_dummy_p (struct gdbarch *gdbarch, int call_dummy_p);
028c194b 1008#if (GDB_MULTI_ARCH >= GDB_MULTI_ARCH_PARTIAL) && defined (CALL_DUMMY_P)
83905903
AC
1009#error "Non multi-arch definition of CALL_DUMMY_P"
1010#endif
0f71a2f6 1011#if GDB_MULTI_ARCH
028c194b 1012#if (GDB_MULTI_ARCH >= GDB_MULTI_ARCH_PARTIAL) || !defined (CALL_DUMMY_P)
0f71a2f6
JM
1013#define CALL_DUMMY_P (gdbarch_call_dummy_p (current_gdbarch))
1014#endif
1015#endif
1016
33489c5b 1017/* Default (value) for non- multi-arch platforms. */
6166d547 1018#if (!GDB_MULTI_ARCH) && !defined (CALL_DUMMY_WORDS)
33489c5b
AC
1019#define CALL_DUMMY_WORDS (legacy_call_dummy_words)
1020#endif
1021
104c1213
JM
1022extern LONGEST * gdbarch_call_dummy_words (struct gdbarch *gdbarch);
1023extern void set_gdbarch_call_dummy_words (struct gdbarch *gdbarch, LONGEST * call_dummy_words);
83905903
AC
1024#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (CALL_DUMMY_WORDS)
1025#error "Non multi-arch definition of CALL_DUMMY_WORDS"
1026#endif
33489c5b 1027#if GDB_MULTI_ARCH
6166d547 1028#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (CALL_DUMMY_WORDS)
0f71a2f6
JM
1029#define CALL_DUMMY_WORDS (gdbarch_call_dummy_words (current_gdbarch))
1030#endif
33489c5b
AC
1031#endif
1032
1033/* Default (value) for non- multi-arch platforms. */
6166d547 1034#if (!GDB_MULTI_ARCH) && !defined (SIZEOF_CALL_DUMMY_WORDS)
33489c5b
AC
1035#define SIZEOF_CALL_DUMMY_WORDS (legacy_sizeof_call_dummy_words)
1036#endif
0f71a2f6 1037
104c1213
JM
1038extern int gdbarch_sizeof_call_dummy_words (struct gdbarch *gdbarch);
1039extern void set_gdbarch_sizeof_call_dummy_words (struct gdbarch *gdbarch, int sizeof_call_dummy_words);
83905903
AC
1040#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (SIZEOF_CALL_DUMMY_WORDS)
1041#error "Non multi-arch definition of SIZEOF_CALL_DUMMY_WORDS"
1042#endif
33489c5b 1043#if GDB_MULTI_ARCH
6166d547 1044#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (SIZEOF_CALL_DUMMY_WORDS)
0f71a2f6
JM
1045#define SIZEOF_CALL_DUMMY_WORDS (gdbarch_sizeof_call_dummy_words (current_gdbarch))
1046#endif
33489c5b 1047#endif
0f71a2f6 1048
104c1213
JM
1049extern int gdbarch_call_dummy_stack_adjust_p (struct gdbarch *gdbarch);
1050extern void set_gdbarch_call_dummy_stack_adjust_p (struct gdbarch *gdbarch, int call_dummy_stack_adjust_p);
028c194b 1051#if (GDB_MULTI_ARCH >= GDB_MULTI_ARCH_PARTIAL) && defined (CALL_DUMMY_STACK_ADJUST_P)
83905903
AC
1052#error "Non multi-arch definition of CALL_DUMMY_STACK_ADJUST_P"
1053#endif
0f71a2f6 1054#if GDB_MULTI_ARCH
028c194b 1055#if (GDB_MULTI_ARCH >= GDB_MULTI_ARCH_PARTIAL) || !defined (CALL_DUMMY_STACK_ADJUST_P)
0f71a2f6
JM
1056#define CALL_DUMMY_STACK_ADJUST_P (gdbarch_call_dummy_stack_adjust_p (current_gdbarch))
1057#endif
1058#endif
1059
104c1213
JM
1060extern int gdbarch_call_dummy_stack_adjust (struct gdbarch *gdbarch);
1061extern void set_gdbarch_call_dummy_stack_adjust (struct gdbarch *gdbarch, int call_dummy_stack_adjust);
83905903
AC
1062#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (CALL_DUMMY_STACK_ADJUST)
1063#error "Non multi-arch definition of CALL_DUMMY_STACK_ADJUST"
1064#endif
0f71a2f6 1065#if GDB_MULTI_ARCH
6166d547 1066#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (CALL_DUMMY_STACK_ADJUST)
0f71a2f6
JM
1067#define CALL_DUMMY_STACK_ADJUST (gdbarch_call_dummy_stack_adjust (current_gdbarch))
1068#endif
1069#endif
1070
104c1213
JM
1071typedef 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);
1072extern 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);
1073extern void set_gdbarch_fix_call_dummy (struct gdbarch *gdbarch, gdbarch_fix_call_dummy_ftype *fix_call_dummy);
83905903
AC
1074#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (FIX_CALL_DUMMY)
1075#error "Non multi-arch definition of FIX_CALL_DUMMY"
1076#endif
0f71a2f6 1077#if GDB_MULTI_ARCH
6166d547 1078#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (FIX_CALL_DUMMY)
0f71a2f6
JM
1079#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))
1080#endif
1081#endif
1082
10312cc4
AC
1083/* Default (function) for non- multi-arch platforms. */
1084#if (!GDB_MULTI_ARCH) && !defined (INIT_FRAME_PC_FIRST)
1085#define INIT_FRAME_PC_FIRST(fromleaf, prev) (init_frame_pc_noop (fromleaf, prev))
1086#endif
1087
1088typedef void (gdbarch_init_frame_pc_first_ftype) (int fromleaf, struct frame_info *prev);
1089extern void gdbarch_init_frame_pc_first (struct gdbarch *gdbarch, int fromleaf, struct frame_info *prev);
1090extern void set_gdbarch_init_frame_pc_first (struct gdbarch *gdbarch, gdbarch_init_frame_pc_first_ftype *init_frame_pc_first);
83905903
AC
1091#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (INIT_FRAME_PC_FIRST)
1092#error "Non multi-arch definition of INIT_FRAME_PC_FIRST"
1093#endif
10312cc4
AC
1094#if GDB_MULTI_ARCH
1095#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (INIT_FRAME_PC_FIRST)
1096#define INIT_FRAME_PC_FIRST(fromleaf, prev) (gdbarch_init_frame_pc_first (current_gdbarch, fromleaf, prev))
1097#endif
1098#endif
1099
1100/* Default (function) for non- multi-arch platforms. */
1101#if (!GDB_MULTI_ARCH) && !defined (INIT_FRAME_PC)
7824d2f2 1102#define INIT_FRAME_PC(fromleaf, prev) (init_frame_pc_default (fromleaf, prev))
10312cc4
AC
1103#endif
1104
1105typedef void (gdbarch_init_frame_pc_ftype) (int fromleaf, struct frame_info *prev);
1106extern void gdbarch_init_frame_pc (struct gdbarch *gdbarch, int fromleaf, struct frame_info *prev);
1107extern void set_gdbarch_init_frame_pc (struct gdbarch *gdbarch, gdbarch_init_frame_pc_ftype *init_frame_pc);
83905903
AC
1108#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (INIT_FRAME_PC)
1109#error "Non multi-arch definition of INIT_FRAME_PC"
1110#endif
10312cc4
AC
1111#if GDB_MULTI_ARCH
1112#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (INIT_FRAME_PC)
1113#define INIT_FRAME_PC(fromleaf, prev) (gdbarch_init_frame_pc (current_gdbarch, fromleaf, prev))
1114#endif
1115#endif
1116
104c1213
JM
1117extern int gdbarch_believe_pcc_promotion (struct gdbarch *gdbarch);
1118extern void set_gdbarch_believe_pcc_promotion (struct gdbarch *gdbarch, int believe_pcc_promotion);
83905903
AC
1119#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (BELIEVE_PCC_PROMOTION)
1120#error "Non multi-arch definition of BELIEVE_PCC_PROMOTION"
1121#endif
0f71a2f6 1122#if GDB_MULTI_ARCH
6166d547 1123#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (BELIEVE_PCC_PROMOTION)
0f71a2f6
JM
1124#define BELIEVE_PCC_PROMOTION (gdbarch_believe_pcc_promotion (current_gdbarch))
1125#endif
1126#endif
1127
104c1213
JM
1128extern int gdbarch_believe_pcc_promotion_type (struct gdbarch *gdbarch);
1129extern void set_gdbarch_believe_pcc_promotion_type (struct gdbarch *gdbarch, int believe_pcc_promotion_type);
83905903
AC
1130#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (BELIEVE_PCC_PROMOTION_TYPE)
1131#error "Non multi-arch definition of BELIEVE_PCC_PROMOTION_TYPE"
1132#endif
0f71a2f6 1133#if GDB_MULTI_ARCH
6166d547 1134#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (BELIEVE_PCC_PROMOTION_TYPE)
0f71a2f6
JM
1135#define BELIEVE_PCC_PROMOTION_TYPE (gdbarch_believe_pcc_promotion_type (current_gdbarch))
1136#endif
1137#endif
1138
33489c5b 1139/* Default (function) for non- multi-arch platforms. */
6166d547 1140#if (!GDB_MULTI_ARCH) && !defined (COERCE_FLOAT_TO_DOUBLE)
33489c5b
AC
1141#define COERCE_FLOAT_TO_DOUBLE(formal, actual) (default_coerce_float_to_double (formal, actual))
1142#endif
1143
b9a8e3bf
JB
1144typedef int (gdbarch_coerce_float_to_double_ftype) (struct type *formal, struct type *actual);
1145extern int gdbarch_coerce_float_to_double (struct gdbarch *gdbarch, struct type *formal, struct type *actual);
1146extern void set_gdbarch_coerce_float_to_double (struct gdbarch *gdbarch, gdbarch_coerce_float_to_double_ftype *coerce_float_to_double);
83905903
AC
1147#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (COERCE_FLOAT_TO_DOUBLE)
1148#error "Non multi-arch definition of COERCE_FLOAT_TO_DOUBLE"
1149#endif
33489c5b 1150#if GDB_MULTI_ARCH
6166d547 1151#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (COERCE_FLOAT_TO_DOUBLE)
b9a8e3bf
JB
1152#define COERCE_FLOAT_TO_DOUBLE(formal, actual) (gdbarch_coerce_float_to_double (current_gdbarch, formal, actual))
1153#endif
33489c5b 1154#endif
b9a8e3bf 1155
028c194b
AC
1156/* GET_SAVED_REGISTER is like DUMMY_FRAMES. It is at level one as the
1157 old code has strange #ifdef interaction. So far no one has found
1158 that default_get_saved_register() is the default they are after. */
1159
104c1213
JM
1160typedef void (gdbarch_get_saved_register_ftype) (char *raw_buffer, int *optimized, CORE_ADDR *addrp, struct frame_info *frame, int regnum, enum lval_type *lval);
1161extern 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);
1162extern void set_gdbarch_get_saved_register (struct gdbarch *gdbarch, gdbarch_get_saved_register_ftype *get_saved_register);
028c194b 1163#if (GDB_MULTI_ARCH >= GDB_MULTI_ARCH_PARTIAL) && defined (GET_SAVED_REGISTER)
83905903
AC
1164#error "Non multi-arch definition of GET_SAVED_REGISTER"
1165#endif
0f71a2f6 1166#if GDB_MULTI_ARCH
028c194b 1167#if (GDB_MULTI_ARCH >= GDB_MULTI_ARCH_PARTIAL) || !defined (GET_SAVED_REGISTER)
0f71a2f6
JM
1168#define GET_SAVED_REGISTER(raw_buffer, optimized, addrp, frame, regnum, lval) (gdbarch_get_saved_register (current_gdbarch, raw_buffer, optimized, addrp, frame, regnum, lval))
1169#endif
1170#endif
1171
33489c5b 1172/* Default (function) for non- multi-arch platforms. */
6166d547 1173#if (!GDB_MULTI_ARCH) && !defined (REGISTER_CONVERTIBLE)
33489c5b
AC
1174#define REGISTER_CONVERTIBLE(nr) (generic_register_convertible_not (nr))
1175#endif
1176
104c1213
JM
1177typedef int (gdbarch_register_convertible_ftype) (int nr);
1178extern int gdbarch_register_convertible (struct gdbarch *gdbarch, int nr);
1179extern void set_gdbarch_register_convertible (struct gdbarch *gdbarch, gdbarch_register_convertible_ftype *register_convertible);
83905903
AC
1180#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (REGISTER_CONVERTIBLE)
1181#error "Non multi-arch definition of REGISTER_CONVERTIBLE"
1182#endif
33489c5b 1183#if GDB_MULTI_ARCH
6166d547 1184#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (REGISTER_CONVERTIBLE)
0f71a2f6
JM
1185#define REGISTER_CONVERTIBLE(nr) (gdbarch_register_convertible (current_gdbarch, nr))
1186#endif
33489c5b
AC
1187#endif
1188
1189/* Default (function) for non- multi-arch platforms. */
6166d547 1190#if (!GDB_MULTI_ARCH) && !defined (REGISTER_CONVERT_TO_VIRTUAL)
8e65ff28 1191#define REGISTER_CONVERT_TO_VIRTUAL(regnum, type, from, to) (internal_error (__FILE__, __LINE__, "REGISTER_CONVERT_TO_VIRTUAL"), 0)
33489c5b 1192#endif
0f71a2f6 1193
104c1213
JM
1194typedef void (gdbarch_register_convert_to_virtual_ftype) (int regnum, struct type *type, char *from, char *to);
1195extern void gdbarch_register_convert_to_virtual (struct gdbarch *gdbarch, int regnum, struct type *type, char *from, char *to);
1196extern void set_gdbarch_register_convert_to_virtual (struct gdbarch *gdbarch, gdbarch_register_convert_to_virtual_ftype *register_convert_to_virtual);
83905903
AC
1197#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (REGISTER_CONVERT_TO_VIRTUAL)
1198#error "Non multi-arch definition of REGISTER_CONVERT_TO_VIRTUAL"
1199#endif
33489c5b 1200#if GDB_MULTI_ARCH
6166d547 1201#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (REGISTER_CONVERT_TO_VIRTUAL)
0f71a2f6
JM
1202#define REGISTER_CONVERT_TO_VIRTUAL(regnum, type, from, to) (gdbarch_register_convert_to_virtual (current_gdbarch, regnum, type, from, to))
1203#endif
33489c5b
AC
1204#endif
1205
1206/* Default (function) for non- multi-arch platforms. */
6166d547 1207#if (!GDB_MULTI_ARCH) && !defined (REGISTER_CONVERT_TO_RAW)
8e65ff28 1208#define REGISTER_CONVERT_TO_RAW(type, regnum, from, to) (internal_error (__FILE__, __LINE__, "REGISTER_CONVERT_TO_RAW"), 0)
33489c5b 1209#endif
0f71a2f6 1210
104c1213
JM
1211typedef void (gdbarch_register_convert_to_raw_ftype) (struct type *type, int regnum, char *from, char *to);
1212extern void gdbarch_register_convert_to_raw (struct gdbarch *gdbarch, struct type *type, int regnum, char *from, char *to);
1213extern void set_gdbarch_register_convert_to_raw (struct gdbarch *gdbarch, gdbarch_register_convert_to_raw_ftype *register_convert_to_raw);
83905903
AC
1214#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (REGISTER_CONVERT_TO_RAW)
1215#error "Non multi-arch definition of REGISTER_CONVERT_TO_RAW"
1216#endif
33489c5b 1217#if GDB_MULTI_ARCH
6166d547 1218#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (REGISTER_CONVERT_TO_RAW)
0f71a2f6
JM
1219#define REGISTER_CONVERT_TO_RAW(type, regnum, from, to) (gdbarch_register_convert_to_raw (current_gdbarch, type, regnum, from, to))
1220#endif
33489c5b
AC
1221#endif
1222
34620563
AC
1223/* This function is called when the value of a pseudo-register needs to
1224 be updated. Typically it will be defined on a per-architecture
1225 basis. */
1226
31e9866e
AC
1227#if defined (FETCH_PSEUDO_REGISTER)
1228/* Legacy for systems yet to multi-arch FETCH_PSEUDO_REGISTER */
1229#if !defined (FETCH_PSEUDO_REGISTER_P)
1230#define FETCH_PSEUDO_REGISTER_P() (1)
1231#endif
1232#endif
1233
1234/* Default predicate for non- multi-arch targets. */
1235#if (!GDB_MULTI_ARCH) && !defined (FETCH_PSEUDO_REGISTER_P)
1236#define FETCH_PSEUDO_REGISTER_P() (0)
1237#endif
1238
1239extern int gdbarch_fetch_pseudo_register_p (struct gdbarch *gdbarch);
1240#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (FETCH_PSEUDO_REGISTER_P)
1241#error "Non multi-arch definition of FETCH_PSEUDO_REGISTER"
1242#endif
1243#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (FETCH_PSEUDO_REGISTER_P)
1244#define FETCH_PSEUDO_REGISTER_P() (gdbarch_fetch_pseudo_register_p (current_gdbarch))
1245#endif
1246
7f1b2585 1247/* Default (function) for non- multi-arch platforms. */
6166d547 1248#if (!GDB_MULTI_ARCH) && !defined (FETCH_PSEUDO_REGISTER)
8e65ff28 1249#define FETCH_PSEUDO_REGISTER(regnum) (internal_error (__FILE__, __LINE__, "FETCH_PSEUDO_REGISTER"), 0)
7f1b2585
EZ
1250#endif
1251
1252typedef void (gdbarch_fetch_pseudo_register_ftype) (int regnum);
1253extern void gdbarch_fetch_pseudo_register (struct gdbarch *gdbarch, int regnum);
1254extern void set_gdbarch_fetch_pseudo_register (struct gdbarch *gdbarch, gdbarch_fetch_pseudo_register_ftype *fetch_pseudo_register);
83905903
AC
1255#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (FETCH_PSEUDO_REGISTER)
1256#error "Non multi-arch definition of FETCH_PSEUDO_REGISTER"
1257#endif
7f1b2585 1258#if GDB_MULTI_ARCH
6166d547 1259#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (FETCH_PSEUDO_REGISTER)
7f1b2585
EZ
1260#define FETCH_PSEUDO_REGISTER(regnum) (gdbarch_fetch_pseudo_register (current_gdbarch, regnum))
1261#endif
1262#endif
1263
34620563
AC
1264/* This function is called when the value of a pseudo-register needs to
1265 be set or stored. Typically it will be defined on a
1266 per-architecture basis. */
1267
31e9866e
AC
1268#if defined (STORE_PSEUDO_REGISTER)
1269/* Legacy for systems yet to multi-arch STORE_PSEUDO_REGISTER */
1270#if !defined (STORE_PSEUDO_REGISTER_P)
1271#define STORE_PSEUDO_REGISTER_P() (1)
1272#endif
1273#endif
1274
1275/* Default predicate for non- multi-arch targets. */
1276#if (!GDB_MULTI_ARCH) && !defined (STORE_PSEUDO_REGISTER_P)
1277#define STORE_PSEUDO_REGISTER_P() (0)
1278#endif
1279
1280extern int gdbarch_store_pseudo_register_p (struct gdbarch *gdbarch);
1281#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (STORE_PSEUDO_REGISTER_P)
1282#error "Non multi-arch definition of STORE_PSEUDO_REGISTER"
1283#endif
1284#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (STORE_PSEUDO_REGISTER_P)
1285#define STORE_PSEUDO_REGISTER_P() (gdbarch_store_pseudo_register_p (current_gdbarch))
1286#endif
1287
7f1b2585 1288/* Default (function) for non- multi-arch platforms. */
6166d547 1289#if (!GDB_MULTI_ARCH) && !defined (STORE_PSEUDO_REGISTER)
8e65ff28 1290#define STORE_PSEUDO_REGISTER(regnum) (internal_error (__FILE__, __LINE__, "STORE_PSEUDO_REGISTER"), 0)
7f1b2585
EZ
1291#endif
1292
1293typedef void (gdbarch_store_pseudo_register_ftype) (int regnum);
1294extern void gdbarch_store_pseudo_register (struct gdbarch *gdbarch, int regnum);
1295extern void set_gdbarch_store_pseudo_register (struct gdbarch *gdbarch, gdbarch_store_pseudo_register_ftype *store_pseudo_register);
83905903
AC
1296#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (STORE_PSEUDO_REGISTER)
1297#error "Non multi-arch definition of STORE_PSEUDO_REGISTER"
1298#endif
7f1b2585 1299#if GDB_MULTI_ARCH
6166d547 1300#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (STORE_PSEUDO_REGISTER)
7f1b2585
EZ
1301#define STORE_PSEUDO_REGISTER(regnum) (gdbarch_store_pseudo_register (current_gdbarch, regnum))
1302#endif
1303#endif
1304
33489c5b 1305/* Default (function) for non- multi-arch platforms. */
6166d547 1306#if (!GDB_MULTI_ARCH) && !defined (POINTER_TO_ADDRESS)
ac2e2ef7 1307#define POINTER_TO_ADDRESS(type, buf) (unsigned_pointer_to_address (type, buf))
33489c5b 1308#endif
4478b372 1309
ac2e2ef7
AC
1310typedef CORE_ADDR (gdbarch_pointer_to_address_ftype) (struct type *type, void *buf);
1311extern CORE_ADDR gdbarch_pointer_to_address (struct gdbarch *gdbarch, struct type *type, void *buf);
4478b372 1312extern void set_gdbarch_pointer_to_address (struct gdbarch *gdbarch, gdbarch_pointer_to_address_ftype *pointer_to_address);
83905903
AC
1313#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (POINTER_TO_ADDRESS)
1314#error "Non multi-arch definition of POINTER_TO_ADDRESS"
1315#endif
33489c5b 1316#if GDB_MULTI_ARCH
6166d547 1317#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (POINTER_TO_ADDRESS)
4478b372
JB
1318#define POINTER_TO_ADDRESS(type, buf) (gdbarch_pointer_to_address (current_gdbarch, type, buf))
1319#endif
33489c5b
AC
1320#endif
1321
1322/* Default (function) for non- multi-arch platforms. */
6166d547 1323#if (!GDB_MULTI_ARCH) && !defined (ADDRESS_TO_POINTER)
ac2e2ef7 1324#define ADDRESS_TO_POINTER(type, buf, addr) (unsigned_address_to_pointer (type, buf, addr))
33489c5b 1325#endif
4478b372 1326
ac2e2ef7
AC
1327typedef void (gdbarch_address_to_pointer_ftype) (struct type *type, void *buf, CORE_ADDR addr);
1328extern void gdbarch_address_to_pointer (struct gdbarch *gdbarch, struct type *type, void *buf, CORE_ADDR addr);
4478b372 1329extern void set_gdbarch_address_to_pointer (struct gdbarch *gdbarch, gdbarch_address_to_pointer_ftype *address_to_pointer);
83905903
AC
1330#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (ADDRESS_TO_POINTER)
1331#error "Non multi-arch definition of ADDRESS_TO_POINTER"
1332#endif
33489c5b 1333#if GDB_MULTI_ARCH
6166d547 1334#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (ADDRESS_TO_POINTER)
4478b372
JB
1335#define ADDRESS_TO_POINTER(type, buf, addr) (gdbarch_address_to_pointer (current_gdbarch, type, buf, addr))
1336#endif
33489c5b
AC
1337#endif
1338
fc0c74b1
AC
1339#if defined (INTEGER_TO_ADDRESS)
1340/* Legacy for systems yet to multi-arch INTEGER_TO_ADDRESS */
1341#if !defined (INTEGER_TO_ADDRESS_P)
1342#define INTEGER_TO_ADDRESS_P() (1)
1343#endif
1344#endif
1345
1346/* Default predicate for non- multi-arch targets. */
1347#if (!GDB_MULTI_ARCH) && !defined (INTEGER_TO_ADDRESS_P)
1348#define INTEGER_TO_ADDRESS_P() (0)
1349#endif
1350
1351extern int gdbarch_integer_to_address_p (struct gdbarch *gdbarch);
1352#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (INTEGER_TO_ADDRESS_P)
1353#error "Non multi-arch definition of INTEGER_TO_ADDRESS"
1354#endif
1355#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (INTEGER_TO_ADDRESS_P)
1356#define INTEGER_TO_ADDRESS_P() (gdbarch_integer_to_address_p (current_gdbarch))
1357#endif
1358
1359/* Default (function) for non- multi-arch platforms. */
1360#if (!GDB_MULTI_ARCH) && !defined (INTEGER_TO_ADDRESS)
73d3c16e 1361#define INTEGER_TO_ADDRESS(type, buf) (internal_error (__FILE__, __LINE__, "INTEGER_TO_ADDRESS"), 0)
fc0c74b1
AC
1362#endif
1363
1364typedef CORE_ADDR (gdbarch_integer_to_address_ftype) (struct type *type, void *buf);
1365extern CORE_ADDR gdbarch_integer_to_address (struct gdbarch *gdbarch, struct type *type, void *buf);
1366extern void set_gdbarch_integer_to_address (struct gdbarch *gdbarch, gdbarch_integer_to_address_ftype *integer_to_address);
1367#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (INTEGER_TO_ADDRESS)
1368#error "Non multi-arch definition of INTEGER_TO_ADDRESS"
1369#endif
1370#if GDB_MULTI_ARCH
1371#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (INTEGER_TO_ADDRESS)
1372#define INTEGER_TO_ADDRESS(type, buf) (gdbarch_integer_to_address (current_gdbarch, type, buf))
1373#endif
1374#endif
1375
33489c5b 1376/* Default (function) for non- multi-arch platforms. */
6166d547 1377#if (!GDB_MULTI_ARCH) && !defined (RETURN_VALUE_ON_STACK)
33489c5b
AC
1378#define RETURN_VALUE_ON_STACK(type) (generic_return_value_on_stack_not (type))
1379#endif
0f71a2f6 1380
71a9f22e
JB
1381typedef int (gdbarch_return_value_on_stack_ftype) (struct type *type);
1382extern int gdbarch_return_value_on_stack (struct gdbarch *gdbarch, struct type *type);
1383extern void set_gdbarch_return_value_on_stack (struct gdbarch *gdbarch, gdbarch_return_value_on_stack_ftype *return_value_on_stack);
83905903
AC
1384#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (RETURN_VALUE_ON_STACK)
1385#error "Non multi-arch definition of RETURN_VALUE_ON_STACK"
1386#endif
33489c5b 1387#if GDB_MULTI_ARCH
6166d547 1388#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (RETURN_VALUE_ON_STACK)
71a9f22e
JB
1389#define RETURN_VALUE_ON_STACK(type) (gdbarch_return_value_on_stack (current_gdbarch, type))
1390#endif
33489c5b 1391#endif
71a9f22e 1392
104c1213
JM
1393typedef void (gdbarch_extract_return_value_ftype) (struct type *type, char *regbuf, char *valbuf);
1394extern void gdbarch_extract_return_value (struct gdbarch *gdbarch, struct type *type, char *regbuf, char *valbuf);
1395extern void set_gdbarch_extract_return_value (struct gdbarch *gdbarch, gdbarch_extract_return_value_ftype *extract_return_value);
83905903
AC
1396#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (EXTRACT_RETURN_VALUE)
1397#error "Non multi-arch definition of EXTRACT_RETURN_VALUE"
1398#endif
0f71a2f6 1399#if GDB_MULTI_ARCH
6166d547 1400#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (EXTRACT_RETURN_VALUE)
0f71a2f6
JM
1401#define EXTRACT_RETURN_VALUE(type, regbuf, valbuf) (gdbarch_extract_return_value (current_gdbarch, type, regbuf, valbuf))
1402#endif
1403#endif
1404
c203844d
AC
1405/* Default (function) for non- multi-arch platforms. */
1406#if (!GDB_MULTI_ARCH) && !defined (PUSH_ARGUMENTS)
1407#define PUSH_ARGUMENTS(nargs, args, sp, struct_return, struct_addr) (default_push_arguments (nargs, args, sp, struct_return, struct_addr))
1408#endif
1409
104c1213
JM
1410typedef CORE_ADDR (gdbarch_push_arguments_ftype) (int nargs, struct value **args, CORE_ADDR sp, int struct_return, CORE_ADDR struct_addr);
1411extern CORE_ADDR gdbarch_push_arguments (struct gdbarch *gdbarch, int nargs, struct value **args, CORE_ADDR sp, int struct_return, CORE_ADDR struct_addr);
1412extern void set_gdbarch_push_arguments (struct gdbarch *gdbarch, gdbarch_push_arguments_ftype *push_arguments);
83905903
AC
1413#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (PUSH_ARGUMENTS)
1414#error "Non multi-arch definition of PUSH_ARGUMENTS"
1415#endif
0f71a2f6 1416#if GDB_MULTI_ARCH
6166d547 1417#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (PUSH_ARGUMENTS)
0f71a2f6
JM
1418#define PUSH_ARGUMENTS(nargs, args, sp, struct_return, struct_addr) (gdbarch_push_arguments (current_gdbarch, nargs, args, sp, struct_return, struct_addr))
1419#endif
1420#endif
1421
104c1213
JM
1422typedef void (gdbarch_push_dummy_frame_ftype) (void);
1423extern void gdbarch_push_dummy_frame (struct gdbarch *gdbarch);
1424extern void set_gdbarch_push_dummy_frame (struct gdbarch *gdbarch, gdbarch_push_dummy_frame_ftype *push_dummy_frame);
83905903
AC
1425#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (PUSH_DUMMY_FRAME)
1426#error "Non multi-arch definition of PUSH_DUMMY_FRAME"
1427#endif
0f71a2f6 1428#if GDB_MULTI_ARCH
6166d547 1429#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (PUSH_DUMMY_FRAME)
0f71a2f6
JM
1430#define PUSH_DUMMY_FRAME (gdbarch_push_dummy_frame (current_gdbarch))
1431#endif
1432#endif
1433
69a0d5f4
AC
1434#if defined (PUSH_RETURN_ADDRESS)
1435/* Legacy for systems yet to multi-arch PUSH_RETURN_ADDRESS */
1436#if !defined (PUSH_RETURN_ADDRESS_P)
1437#define PUSH_RETURN_ADDRESS_P() (1)
1438#endif
1439#endif
1440
1441/* Default predicate for non- multi-arch targets. */
1442#if (!GDB_MULTI_ARCH) && !defined (PUSH_RETURN_ADDRESS_P)
1443#define PUSH_RETURN_ADDRESS_P() (0)
1444#endif
1445
1446extern int gdbarch_push_return_address_p (struct gdbarch *gdbarch);
1447#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (PUSH_RETURN_ADDRESS_P)
1448#error "Non multi-arch definition of PUSH_RETURN_ADDRESS"
1449#endif
1450#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (PUSH_RETURN_ADDRESS_P)
1451#define PUSH_RETURN_ADDRESS_P() (gdbarch_push_return_address_p (current_gdbarch))
1452#endif
1453
1454/* Default (function) for non- multi-arch platforms. */
1455#if (!GDB_MULTI_ARCH) && !defined (PUSH_RETURN_ADDRESS)
1456#define PUSH_RETURN_ADDRESS(pc, sp) (internal_error (__FILE__, __LINE__, "PUSH_RETURN_ADDRESS"), 0)
1457#endif
1458
104c1213
JM
1459typedef CORE_ADDR (gdbarch_push_return_address_ftype) (CORE_ADDR pc, CORE_ADDR sp);
1460extern CORE_ADDR gdbarch_push_return_address (struct gdbarch *gdbarch, CORE_ADDR pc, CORE_ADDR sp);
1461extern void set_gdbarch_push_return_address (struct gdbarch *gdbarch, gdbarch_push_return_address_ftype *push_return_address);
83905903
AC
1462#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (PUSH_RETURN_ADDRESS)
1463#error "Non multi-arch definition of PUSH_RETURN_ADDRESS"
1464#endif
0f71a2f6 1465#if GDB_MULTI_ARCH
6166d547 1466#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (PUSH_RETURN_ADDRESS)
0f71a2f6
JM
1467#define PUSH_RETURN_ADDRESS(pc, sp) (gdbarch_push_return_address (current_gdbarch, pc, sp))
1468#endif
1469#endif
1470
104c1213
JM
1471typedef void (gdbarch_pop_frame_ftype) (void);
1472extern void gdbarch_pop_frame (struct gdbarch *gdbarch);
1473extern void set_gdbarch_pop_frame (struct gdbarch *gdbarch, gdbarch_pop_frame_ftype *pop_frame);
83905903
AC
1474#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (POP_FRAME)
1475#error "Non multi-arch definition of POP_FRAME"
1476#endif
0f71a2f6 1477#if GDB_MULTI_ARCH
6166d547 1478#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (POP_FRAME)
0f71a2f6
JM
1479#define POP_FRAME (gdbarch_pop_frame (current_gdbarch))
1480#endif
1481#endif
1482
104c1213
JM
1483typedef void (gdbarch_store_struct_return_ftype) (CORE_ADDR addr, CORE_ADDR sp);
1484extern void gdbarch_store_struct_return (struct gdbarch *gdbarch, CORE_ADDR addr, CORE_ADDR sp);
1485extern void set_gdbarch_store_struct_return (struct gdbarch *gdbarch, gdbarch_store_struct_return_ftype *store_struct_return);
83905903
AC
1486#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (STORE_STRUCT_RETURN)
1487#error "Non multi-arch definition of STORE_STRUCT_RETURN"
1488#endif
0f71a2f6 1489#if GDB_MULTI_ARCH
6166d547 1490#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (STORE_STRUCT_RETURN)
0f71a2f6
JM
1491#define STORE_STRUCT_RETURN(addr, sp) (gdbarch_store_struct_return (current_gdbarch, addr, sp))
1492#endif
1493#endif
1494
104c1213
JM
1495typedef void (gdbarch_store_return_value_ftype) (struct type *type, char *valbuf);
1496extern void gdbarch_store_return_value (struct gdbarch *gdbarch, struct type *type, char *valbuf);
1497extern void set_gdbarch_store_return_value (struct gdbarch *gdbarch, gdbarch_store_return_value_ftype *store_return_value);
83905903
AC
1498#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (STORE_RETURN_VALUE)
1499#error "Non multi-arch definition of STORE_RETURN_VALUE"
1500#endif
0f71a2f6 1501#if GDB_MULTI_ARCH
6166d547 1502#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (STORE_RETURN_VALUE)
0f71a2f6
JM
1503#define STORE_RETURN_VALUE(type, valbuf) (gdbarch_store_return_value (current_gdbarch, type, valbuf))
1504#endif
1505#endif
1506
d6dd581e
AC
1507#if defined (EXTRACT_STRUCT_VALUE_ADDRESS)
1508/* Legacy for systems yet to multi-arch EXTRACT_STRUCT_VALUE_ADDRESS */
1509#if !defined (EXTRACT_STRUCT_VALUE_ADDRESS_P)
1510#define EXTRACT_STRUCT_VALUE_ADDRESS_P() (1)
1511#endif
1512#endif
1513
1514/* Default predicate for non- multi-arch targets. */
1515#if (!GDB_MULTI_ARCH) && !defined (EXTRACT_STRUCT_VALUE_ADDRESS_P)
1516#define EXTRACT_STRUCT_VALUE_ADDRESS_P() (0)
1517#endif
1518
1519extern int gdbarch_extract_struct_value_address_p (struct gdbarch *gdbarch);
83905903
AC
1520#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (EXTRACT_STRUCT_VALUE_ADDRESS_P)
1521#error "Non multi-arch definition of EXTRACT_STRUCT_VALUE_ADDRESS"
1522#endif
d6dd581e
AC
1523#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (EXTRACT_STRUCT_VALUE_ADDRESS_P)
1524#define EXTRACT_STRUCT_VALUE_ADDRESS_P() (gdbarch_extract_struct_value_address_p (current_gdbarch))
1525#endif
1526
1527/* Default (function) for non- multi-arch platforms. */
1528#if (!GDB_MULTI_ARCH) && !defined (EXTRACT_STRUCT_VALUE_ADDRESS)
1529#define EXTRACT_STRUCT_VALUE_ADDRESS(regbuf) (internal_error (__FILE__, __LINE__, "EXTRACT_STRUCT_VALUE_ADDRESS"), 0)
1530#endif
1531
104c1213
JM
1532typedef CORE_ADDR (gdbarch_extract_struct_value_address_ftype) (char *regbuf);
1533extern CORE_ADDR gdbarch_extract_struct_value_address (struct gdbarch *gdbarch, char *regbuf);
1534extern void set_gdbarch_extract_struct_value_address (struct gdbarch *gdbarch, gdbarch_extract_struct_value_address_ftype *extract_struct_value_address);
83905903
AC
1535#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (EXTRACT_STRUCT_VALUE_ADDRESS)
1536#error "Non multi-arch definition of EXTRACT_STRUCT_VALUE_ADDRESS"
1537#endif
0f71a2f6 1538#if GDB_MULTI_ARCH
6166d547 1539#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (EXTRACT_STRUCT_VALUE_ADDRESS)
0f71a2f6
JM
1540#define EXTRACT_STRUCT_VALUE_ADDRESS(regbuf) (gdbarch_extract_struct_value_address (current_gdbarch, regbuf))
1541#endif
1542#endif
1543
56f12751
AC
1544/* Default (function) for non- multi-arch platforms. */
1545#if (!GDB_MULTI_ARCH) && !defined (USE_STRUCT_CONVENTION)
1546#define USE_STRUCT_CONVENTION(gcc_p, value_type) (generic_use_struct_convention (gcc_p, value_type))
1547#endif
1548
104c1213
JM
1549typedef int (gdbarch_use_struct_convention_ftype) (int gcc_p, struct type *value_type);
1550extern int gdbarch_use_struct_convention (struct gdbarch *gdbarch, int gcc_p, struct type *value_type);
1551extern void set_gdbarch_use_struct_convention (struct gdbarch *gdbarch, gdbarch_use_struct_convention_ftype *use_struct_convention);
83905903
AC
1552#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (USE_STRUCT_CONVENTION)
1553#error "Non multi-arch definition of USE_STRUCT_CONVENTION"
1554#endif
0f71a2f6 1555#if GDB_MULTI_ARCH
6166d547 1556#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (USE_STRUCT_CONVENTION)
0f71a2f6
JM
1557#define USE_STRUCT_CONVENTION(gcc_p, value_type) (gdbarch_use_struct_convention (current_gdbarch, gcc_p, value_type))
1558#endif
1559#endif
1560
104c1213
JM
1561typedef void (gdbarch_frame_init_saved_regs_ftype) (struct frame_info *frame);
1562extern void gdbarch_frame_init_saved_regs (struct gdbarch *gdbarch, struct frame_info *frame);
1563extern void set_gdbarch_frame_init_saved_regs (struct gdbarch *gdbarch, gdbarch_frame_init_saved_regs_ftype *frame_init_saved_regs);
83905903
AC
1564#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (FRAME_INIT_SAVED_REGS)
1565#error "Non multi-arch definition of FRAME_INIT_SAVED_REGS"
1566#endif
0f71a2f6 1567#if GDB_MULTI_ARCH
6166d547 1568#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (FRAME_INIT_SAVED_REGS)
0f71a2f6
JM
1569#define FRAME_INIT_SAVED_REGS(frame) (gdbarch_frame_init_saved_regs (current_gdbarch, frame))
1570#endif
1571#endif
1572
5fdff426
AC
1573#if defined (INIT_EXTRA_FRAME_INFO)
1574/* Legacy for systems yet to multi-arch INIT_EXTRA_FRAME_INFO */
1575#if !defined (INIT_EXTRA_FRAME_INFO_P)
1576#define INIT_EXTRA_FRAME_INFO_P() (1)
1577#endif
1578#endif
1579
1580/* Default predicate for non- multi-arch targets. */
1581#if (!GDB_MULTI_ARCH) && !defined (INIT_EXTRA_FRAME_INFO_P)
1582#define INIT_EXTRA_FRAME_INFO_P() (0)
1583#endif
1584
1585extern int gdbarch_init_extra_frame_info_p (struct gdbarch *gdbarch);
1586#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (INIT_EXTRA_FRAME_INFO_P)
1587#error "Non multi-arch definition of INIT_EXTRA_FRAME_INFO"
1588#endif
1589#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (INIT_EXTRA_FRAME_INFO_P)
1590#define INIT_EXTRA_FRAME_INFO_P() (gdbarch_init_extra_frame_info_p (current_gdbarch))
1591#endif
1592
1593/* Default (function) for non- multi-arch platforms. */
1594#if (!GDB_MULTI_ARCH) && !defined (INIT_EXTRA_FRAME_INFO)
1595#define INIT_EXTRA_FRAME_INFO(fromleaf, frame) (internal_error (__FILE__, __LINE__, "INIT_EXTRA_FRAME_INFO"), 0)
1596#endif
1597
104c1213
JM
1598typedef void (gdbarch_init_extra_frame_info_ftype) (int fromleaf, struct frame_info *frame);
1599extern void gdbarch_init_extra_frame_info (struct gdbarch *gdbarch, int fromleaf, struct frame_info *frame);
1600extern void set_gdbarch_init_extra_frame_info (struct gdbarch *gdbarch, gdbarch_init_extra_frame_info_ftype *init_extra_frame_info);
83905903
AC
1601#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (INIT_EXTRA_FRAME_INFO)
1602#error "Non multi-arch definition of INIT_EXTRA_FRAME_INFO"
1603#endif
0f71a2f6 1604#if GDB_MULTI_ARCH
6166d547 1605#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (INIT_EXTRA_FRAME_INFO)
0f71a2f6
JM
1606#define INIT_EXTRA_FRAME_INFO(fromleaf, frame) (gdbarch_init_extra_frame_info (current_gdbarch, fromleaf, frame))
1607#endif
1608#endif
1609
104c1213
JM
1610typedef CORE_ADDR (gdbarch_skip_prologue_ftype) (CORE_ADDR ip);
1611extern CORE_ADDR gdbarch_skip_prologue (struct gdbarch *gdbarch, CORE_ADDR ip);
1612extern void set_gdbarch_skip_prologue (struct gdbarch *gdbarch, gdbarch_skip_prologue_ftype *skip_prologue);
83905903
AC
1613#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (SKIP_PROLOGUE)
1614#error "Non multi-arch definition of SKIP_PROLOGUE"
1615#endif
0f71a2f6 1616#if GDB_MULTI_ARCH
6166d547 1617#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (SKIP_PROLOGUE)
0f71a2f6
JM
1618#define SKIP_PROLOGUE(ip) (gdbarch_skip_prologue (current_gdbarch, ip))
1619#endif
1620#endif
1621
33489c5b 1622/* Default (function) for non- multi-arch platforms. */
6166d547 1623#if (!GDB_MULTI_ARCH) && !defined (PROLOGUE_FRAMELESS_P)
33489c5b
AC
1624#define PROLOGUE_FRAMELESS_P(ip) (generic_prologue_frameless_p (ip))
1625#endif
1626
dad41f9a
AC
1627typedef int (gdbarch_prologue_frameless_p_ftype) (CORE_ADDR ip);
1628extern int gdbarch_prologue_frameless_p (struct gdbarch *gdbarch, CORE_ADDR ip);
1629extern void set_gdbarch_prologue_frameless_p (struct gdbarch *gdbarch, gdbarch_prologue_frameless_p_ftype *prologue_frameless_p);
83905903
AC
1630#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (PROLOGUE_FRAMELESS_P)
1631#error "Non multi-arch definition of PROLOGUE_FRAMELESS_P"
1632#endif
33489c5b 1633#if GDB_MULTI_ARCH
6166d547 1634#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (PROLOGUE_FRAMELESS_P)
dad41f9a
AC
1635#define PROLOGUE_FRAMELESS_P(ip) (gdbarch_prologue_frameless_p (current_gdbarch, ip))
1636#endif
33489c5b 1637#endif
dad41f9a 1638
104c1213
JM
1639typedef int (gdbarch_inner_than_ftype) (CORE_ADDR lhs, CORE_ADDR rhs);
1640extern int gdbarch_inner_than (struct gdbarch *gdbarch, CORE_ADDR lhs, CORE_ADDR rhs);
1641extern void set_gdbarch_inner_than (struct gdbarch *gdbarch, gdbarch_inner_than_ftype *inner_than);
83905903
AC
1642#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (INNER_THAN)
1643#error "Non multi-arch definition of INNER_THAN"
1644#endif
0f71a2f6 1645#if GDB_MULTI_ARCH
6166d547 1646#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (INNER_THAN)
0f71a2f6
JM
1647#define INNER_THAN(lhs, rhs) (gdbarch_inner_than (current_gdbarch, lhs, rhs))
1648#endif
1649#endif
1650
33489c5b 1651/* Default (function) for non- multi-arch platforms. */
6166d547 1652#if (!GDB_MULTI_ARCH) && !defined (BREAKPOINT_FROM_PC)
33489c5b
AC
1653#define BREAKPOINT_FROM_PC(pcptr, lenptr) (legacy_breakpoint_from_pc (pcptr, lenptr))
1654#endif
1655
104c1213
JM
1656typedef unsigned char * (gdbarch_breakpoint_from_pc_ftype) (CORE_ADDR *pcptr, int *lenptr);
1657extern unsigned char * gdbarch_breakpoint_from_pc (struct gdbarch *gdbarch, CORE_ADDR *pcptr, int *lenptr);
1658extern void set_gdbarch_breakpoint_from_pc (struct gdbarch *gdbarch, gdbarch_breakpoint_from_pc_ftype *breakpoint_from_pc);
83905903
AC
1659#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (BREAKPOINT_FROM_PC)
1660#error "Non multi-arch definition of BREAKPOINT_FROM_PC"
1661#endif
33489c5b 1662#if GDB_MULTI_ARCH
6166d547 1663#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (BREAKPOINT_FROM_PC)
0f71a2f6
JM
1664#define BREAKPOINT_FROM_PC(pcptr, lenptr) (gdbarch_breakpoint_from_pc (current_gdbarch, pcptr, lenptr))
1665#endif
33489c5b
AC
1666#endif
1667
1668/* Default (function) for non- multi-arch platforms. */
6166d547 1669#if (!GDB_MULTI_ARCH) && !defined (MEMORY_INSERT_BREAKPOINT)
33489c5b
AC
1670#define MEMORY_INSERT_BREAKPOINT(addr, contents_cache) (default_memory_insert_breakpoint (addr, contents_cache))
1671#endif
0f71a2f6 1672
917317f4
JM
1673typedef int (gdbarch_memory_insert_breakpoint_ftype) (CORE_ADDR addr, char *contents_cache);
1674extern int gdbarch_memory_insert_breakpoint (struct gdbarch *gdbarch, CORE_ADDR addr, char *contents_cache);
1675extern void set_gdbarch_memory_insert_breakpoint (struct gdbarch *gdbarch, gdbarch_memory_insert_breakpoint_ftype *memory_insert_breakpoint);
83905903
AC
1676#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (MEMORY_INSERT_BREAKPOINT)
1677#error "Non multi-arch definition of MEMORY_INSERT_BREAKPOINT"
1678#endif
33489c5b 1679#if GDB_MULTI_ARCH
6166d547 1680#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (MEMORY_INSERT_BREAKPOINT)
917317f4
JM
1681#define MEMORY_INSERT_BREAKPOINT(addr, contents_cache) (gdbarch_memory_insert_breakpoint (current_gdbarch, addr, contents_cache))
1682#endif
33489c5b
AC
1683#endif
1684
1685/* Default (function) for non- multi-arch platforms. */
6166d547 1686#if (!GDB_MULTI_ARCH) && !defined (MEMORY_REMOVE_BREAKPOINT)
33489c5b
AC
1687#define MEMORY_REMOVE_BREAKPOINT(addr, contents_cache) (default_memory_remove_breakpoint (addr, contents_cache))
1688#endif
917317f4
JM
1689
1690typedef int (gdbarch_memory_remove_breakpoint_ftype) (CORE_ADDR addr, char *contents_cache);
1691extern int gdbarch_memory_remove_breakpoint (struct gdbarch *gdbarch, CORE_ADDR addr, char *contents_cache);
1692extern void set_gdbarch_memory_remove_breakpoint (struct gdbarch *gdbarch, gdbarch_memory_remove_breakpoint_ftype *memory_remove_breakpoint);
83905903
AC
1693#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (MEMORY_REMOVE_BREAKPOINT)
1694#error "Non multi-arch definition of MEMORY_REMOVE_BREAKPOINT"
1695#endif
33489c5b 1696#if GDB_MULTI_ARCH
6166d547 1697#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (MEMORY_REMOVE_BREAKPOINT)
917317f4
JM
1698#define MEMORY_REMOVE_BREAKPOINT(addr, contents_cache) (gdbarch_memory_remove_breakpoint (current_gdbarch, addr, contents_cache))
1699#endif
33489c5b 1700#endif
917317f4 1701
104c1213
JM
1702extern CORE_ADDR gdbarch_decr_pc_after_break (struct gdbarch *gdbarch);
1703extern void set_gdbarch_decr_pc_after_break (struct gdbarch *gdbarch, CORE_ADDR decr_pc_after_break);
83905903
AC
1704#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (DECR_PC_AFTER_BREAK)
1705#error "Non multi-arch definition of DECR_PC_AFTER_BREAK"
1706#endif
0f71a2f6 1707#if GDB_MULTI_ARCH
6166d547 1708#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (DECR_PC_AFTER_BREAK)
0f71a2f6
JM
1709#define DECR_PC_AFTER_BREAK (gdbarch_decr_pc_after_break (current_gdbarch))
1710#endif
1711#endif
1712
e02bc4cc
DS
1713/* Default (function) for non- multi-arch platforms. */
1714#if (!GDB_MULTI_ARCH) && !defined (PREPARE_TO_PROCEED)
1715#define PREPARE_TO_PROCEED(select_it) (default_prepare_to_proceed (select_it))
1716#endif
1717
1718typedef int (gdbarch_prepare_to_proceed_ftype) (int select_it);
1719extern int gdbarch_prepare_to_proceed (struct gdbarch *gdbarch, int select_it);
1720extern void set_gdbarch_prepare_to_proceed (struct gdbarch *gdbarch, gdbarch_prepare_to_proceed_ftype *prepare_to_proceed);
83905903
AC
1721#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (PREPARE_TO_PROCEED)
1722#error "Non multi-arch definition of PREPARE_TO_PROCEED"
1723#endif
e02bc4cc
DS
1724#if GDB_MULTI_ARCH
1725#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (PREPARE_TO_PROCEED)
1726#define PREPARE_TO_PROCEED(select_it) (gdbarch_prepare_to_proceed (current_gdbarch, select_it))
1727#endif
1728#endif
1729
104c1213
JM
1730extern CORE_ADDR gdbarch_function_start_offset (struct gdbarch *gdbarch);
1731extern void set_gdbarch_function_start_offset (struct gdbarch *gdbarch, CORE_ADDR function_start_offset);
83905903
AC
1732#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (FUNCTION_START_OFFSET)
1733#error "Non multi-arch definition of FUNCTION_START_OFFSET"
1734#endif
0f71a2f6 1735#if GDB_MULTI_ARCH
6166d547 1736#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (FUNCTION_START_OFFSET)
0f71a2f6
JM
1737#define FUNCTION_START_OFFSET (gdbarch_function_start_offset (current_gdbarch))
1738#endif
1739#endif
1740
33489c5b 1741/* Default (function) for non- multi-arch platforms. */
6166d547 1742#if (!GDB_MULTI_ARCH) && !defined (REMOTE_TRANSLATE_XFER_ADDRESS)
33489c5b
AC
1743#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))
1744#endif
1745
104c1213
JM
1746typedef void (gdbarch_remote_translate_xfer_address_ftype) (CORE_ADDR gdb_addr, int gdb_len, CORE_ADDR *rem_addr, int *rem_len);
1747extern void gdbarch_remote_translate_xfer_address (struct gdbarch *gdbarch, CORE_ADDR gdb_addr, int gdb_len, CORE_ADDR *rem_addr, int *rem_len);
1748extern void set_gdbarch_remote_translate_xfer_address (struct gdbarch *gdbarch, gdbarch_remote_translate_xfer_address_ftype *remote_translate_xfer_address);
83905903
AC
1749#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (REMOTE_TRANSLATE_XFER_ADDRESS)
1750#error "Non multi-arch definition of REMOTE_TRANSLATE_XFER_ADDRESS"
1751#endif
33489c5b 1752#if GDB_MULTI_ARCH
6166d547 1753#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (REMOTE_TRANSLATE_XFER_ADDRESS)
0f71a2f6
JM
1754#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))
1755#endif
33489c5b 1756#endif
0f71a2f6 1757
104c1213
JM
1758extern CORE_ADDR gdbarch_frame_args_skip (struct gdbarch *gdbarch);
1759extern void set_gdbarch_frame_args_skip (struct gdbarch *gdbarch, CORE_ADDR frame_args_skip);
83905903
AC
1760#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (FRAME_ARGS_SKIP)
1761#error "Non multi-arch definition of FRAME_ARGS_SKIP"
1762#endif
0f71a2f6 1763#if GDB_MULTI_ARCH
6166d547 1764#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (FRAME_ARGS_SKIP)
0f71a2f6
JM
1765#define FRAME_ARGS_SKIP (gdbarch_frame_args_skip (current_gdbarch))
1766#endif
1767#endif
1768
33489c5b 1769/* Default (function) for non- multi-arch platforms. */
6166d547 1770#if (!GDB_MULTI_ARCH) && !defined (FRAMELESS_FUNCTION_INVOCATION)
33489c5b
AC
1771#define FRAMELESS_FUNCTION_INVOCATION(fi) (generic_frameless_function_invocation_not (fi))
1772#endif
1773
104c1213
JM
1774typedef int (gdbarch_frameless_function_invocation_ftype) (struct frame_info *fi);
1775extern int gdbarch_frameless_function_invocation (struct gdbarch *gdbarch, struct frame_info *fi);
1776extern void set_gdbarch_frameless_function_invocation (struct gdbarch *gdbarch, gdbarch_frameless_function_invocation_ftype *frameless_function_invocation);
83905903
AC
1777#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (FRAMELESS_FUNCTION_INVOCATION)
1778#error "Non multi-arch definition of FRAMELESS_FUNCTION_INVOCATION"
1779#endif
33489c5b 1780#if GDB_MULTI_ARCH
6166d547 1781#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (FRAMELESS_FUNCTION_INVOCATION)
0f71a2f6
JM
1782#define FRAMELESS_FUNCTION_INVOCATION(fi) (gdbarch_frameless_function_invocation (current_gdbarch, fi))
1783#endif
33489c5b 1784#endif
0f71a2f6 1785
104c1213
JM
1786typedef CORE_ADDR (gdbarch_frame_chain_ftype) (struct frame_info *frame);
1787extern CORE_ADDR gdbarch_frame_chain (struct gdbarch *gdbarch, struct frame_info *frame);
1788extern void set_gdbarch_frame_chain (struct gdbarch *gdbarch, gdbarch_frame_chain_ftype *frame_chain);
83905903
AC
1789#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (FRAME_CHAIN)
1790#error "Non multi-arch definition of FRAME_CHAIN"
1791#endif
0f71a2f6 1792#if GDB_MULTI_ARCH
6166d547 1793#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (FRAME_CHAIN)
0f71a2f6
JM
1794#define FRAME_CHAIN(frame) (gdbarch_frame_chain (current_gdbarch, frame))
1795#endif
1796#endif
1797
7f55af32
AC
1798/* Define a default FRAME_CHAIN_VALID, in the form that is suitable for
1799 most targets. If FRAME_CHAIN_VALID returns zero it means that the
1800 given frame is the outermost one and has no caller.
1801
1802 XXXX - both default and alternate frame_chain_valid functions are
1803 deprecated. New code should use dummy frames and one of the generic
1804 functions. */
1805
1806/* Default (function) for non- multi-arch platforms. */
1807#if (!GDB_MULTI_ARCH) && !defined (FRAME_CHAIN_VALID)
1808#define FRAME_CHAIN_VALID(chain, thisframe) (func_frame_chain_valid (chain, thisframe))
1809#endif
028c194b 1810
104c1213
JM
1811typedef int (gdbarch_frame_chain_valid_ftype) (CORE_ADDR chain, struct frame_info *thisframe);
1812extern int gdbarch_frame_chain_valid (struct gdbarch *gdbarch, CORE_ADDR chain, struct frame_info *thisframe);
1813extern void set_gdbarch_frame_chain_valid (struct gdbarch *gdbarch, gdbarch_frame_chain_valid_ftype *frame_chain_valid);
7f55af32 1814#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (FRAME_CHAIN_VALID)
83905903
AC
1815#error "Non multi-arch definition of FRAME_CHAIN_VALID"
1816#endif
0f71a2f6 1817#if GDB_MULTI_ARCH
7f55af32 1818#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (FRAME_CHAIN_VALID)
0f71a2f6
JM
1819#define FRAME_CHAIN_VALID(chain, thisframe) (gdbarch_frame_chain_valid (current_gdbarch, chain, thisframe))
1820#endif
1821#endif
1822
104c1213
JM
1823typedef CORE_ADDR (gdbarch_frame_saved_pc_ftype) (struct frame_info *fi);
1824extern CORE_ADDR gdbarch_frame_saved_pc (struct gdbarch *gdbarch, struct frame_info *fi);
1825extern void set_gdbarch_frame_saved_pc (struct gdbarch *gdbarch, gdbarch_frame_saved_pc_ftype *frame_saved_pc);
83905903
AC
1826#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (FRAME_SAVED_PC)
1827#error "Non multi-arch definition of FRAME_SAVED_PC"
1828#endif
0f71a2f6 1829#if GDB_MULTI_ARCH
6166d547 1830#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (FRAME_SAVED_PC)
0f71a2f6
JM
1831#define FRAME_SAVED_PC(fi) (gdbarch_frame_saved_pc (current_gdbarch, fi))
1832#endif
1833#endif
1834
104c1213
JM
1835typedef CORE_ADDR (gdbarch_frame_args_address_ftype) (struct frame_info *fi);
1836extern CORE_ADDR gdbarch_frame_args_address (struct gdbarch *gdbarch, struct frame_info *fi);
1837extern void set_gdbarch_frame_args_address (struct gdbarch *gdbarch, gdbarch_frame_args_address_ftype *frame_args_address);
83905903
AC
1838#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (FRAME_ARGS_ADDRESS)
1839#error "Non multi-arch definition of FRAME_ARGS_ADDRESS"
1840#endif
0f71a2f6 1841#if GDB_MULTI_ARCH
6166d547 1842#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (FRAME_ARGS_ADDRESS)
0f71a2f6
JM
1843#define FRAME_ARGS_ADDRESS(fi) (gdbarch_frame_args_address (current_gdbarch, fi))
1844#endif
1845#endif
1846
104c1213
JM
1847typedef CORE_ADDR (gdbarch_frame_locals_address_ftype) (struct frame_info *fi);
1848extern CORE_ADDR gdbarch_frame_locals_address (struct gdbarch *gdbarch, struct frame_info *fi);
1849extern void set_gdbarch_frame_locals_address (struct gdbarch *gdbarch, gdbarch_frame_locals_address_ftype *frame_locals_address);
83905903
AC
1850#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (FRAME_LOCALS_ADDRESS)
1851#error "Non multi-arch definition of FRAME_LOCALS_ADDRESS"
1852#endif
0f71a2f6 1853#if GDB_MULTI_ARCH
6166d547 1854#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (FRAME_LOCALS_ADDRESS)
0f71a2f6
JM
1855#define FRAME_LOCALS_ADDRESS(fi) (gdbarch_frame_locals_address (current_gdbarch, fi))
1856#endif
1857#endif
1858
104c1213
JM
1859typedef CORE_ADDR (gdbarch_saved_pc_after_call_ftype) (struct frame_info *frame);
1860extern CORE_ADDR gdbarch_saved_pc_after_call (struct gdbarch *gdbarch, struct frame_info *frame);
1861extern void set_gdbarch_saved_pc_after_call (struct gdbarch *gdbarch, gdbarch_saved_pc_after_call_ftype *saved_pc_after_call);
83905903
AC
1862#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (SAVED_PC_AFTER_CALL)
1863#error "Non multi-arch definition of SAVED_PC_AFTER_CALL"
1864#endif
0f71a2f6 1865#if GDB_MULTI_ARCH
6166d547 1866#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (SAVED_PC_AFTER_CALL)
0f71a2f6
JM
1867#define SAVED_PC_AFTER_CALL(frame) (gdbarch_saved_pc_after_call (current_gdbarch, frame))
1868#endif
1869#endif
1870
104c1213
JM
1871typedef int (gdbarch_frame_num_args_ftype) (struct frame_info *frame);
1872extern int gdbarch_frame_num_args (struct gdbarch *gdbarch, struct frame_info *frame);
1873extern void set_gdbarch_frame_num_args (struct gdbarch *gdbarch, gdbarch_frame_num_args_ftype *frame_num_args);
83905903
AC
1874#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (FRAME_NUM_ARGS)
1875#error "Non multi-arch definition of FRAME_NUM_ARGS"
1876#endif
0f71a2f6 1877#if GDB_MULTI_ARCH
6166d547 1878#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (FRAME_NUM_ARGS)
0f71a2f6
JM
1879#define FRAME_NUM_ARGS(frame) (gdbarch_frame_num_args (current_gdbarch, frame))
1880#endif
1881#endif
1882
2ada493a
AC
1883#if defined (STACK_ALIGN)
1884/* Legacy for systems yet to multi-arch STACK_ALIGN */
eee30e78 1885#if !defined (STACK_ALIGN_P)
2ada493a
AC
1886#define STACK_ALIGN_P() (1)
1887#endif
eee30e78 1888#endif
2ada493a 1889
33489c5b 1890/* Default predicate for non- multi-arch targets. */
6166d547 1891#if (!GDB_MULTI_ARCH) && !defined (STACK_ALIGN_P)
33489c5b
AC
1892#define STACK_ALIGN_P() (0)
1893#endif
1894
2ada493a 1895extern int gdbarch_stack_align_p (struct gdbarch *gdbarch);
83905903
AC
1896#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (STACK_ALIGN_P)
1897#error "Non multi-arch definition of STACK_ALIGN"
1898#endif
6166d547 1899#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (STACK_ALIGN_P)
2ada493a
AC
1900#define STACK_ALIGN_P() (gdbarch_stack_align_p (current_gdbarch))
1901#endif
1902
33489c5b 1903/* Default (function) for non- multi-arch platforms. */
6166d547 1904#if (!GDB_MULTI_ARCH) && !defined (STACK_ALIGN)
8e65ff28 1905#define STACK_ALIGN(sp) (internal_error (__FILE__, __LINE__, "STACK_ALIGN"), 0)
33489c5b
AC
1906#endif
1907
2ada493a
AC
1908typedef CORE_ADDR (gdbarch_stack_align_ftype) (CORE_ADDR sp);
1909extern CORE_ADDR gdbarch_stack_align (struct gdbarch *gdbarch, CORE_ADDR sp);
1910extern void set_gdbarch_stack_align (struct gdbarch *gdbarch, gdbarch_stack_align_ftype *stack_align);
83905903
AC
1911#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (STACK_ALIGN)
1912#error "Non multi-arch definition of STACK_ALIGN"
1913#endif
33489c5b 1914#if GDB_MULTI_ARCH
6166d547 1915#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (STACK_ALIGN)
2ada493a
AC
1916#define STACK_ALIGN(sp) (gdbarch_stack_align (current_gdbarch, sp))
1917#endif
33489c5b 1918#endif
2ada493a 1919
0a49d05e
AC
1920/* Default (value) for non- multi-arch platforms. */
1921#if (!GDB_MULTI_ARCH) && !defined (EXTRA_STACK_ALIGNMENT_NEEDED)
1922#define EXTRA_STACK_ALIGNMENT_NEEDED (1)
1923#endif
1924
1925extern int gdbarch_extra_stack_alignment_needed (struct gdbarch *gdbarch);
1926extern void set_gdbarch_extra_stack_alignment_needed (struct gdbarch *gdbarch, int extra_stack_alignment_needed);
83905903
AC
1927#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (EXTRA_STACK_ALIGNMENT_NEEDED)
1928#error "Non multi-arch definition of EXTRA_STACK_ALIGNMENT_NEEDED"
1929#endif
0a49d05e
AC
1930#if GDB_MULTI_ARCH
1931#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (EXTRA_STACK_ALIGNMENT_NEEDED)
1932#define EXTRA_STACK_ALIGNMENT_NEEDED (gdbarch_extra_stack_alignment_needed (current_gdbarch))
1933#endif
1934#endif
1935
d03e67c9
AC
1936#if defined (REG_STRUCT_HAS_ADDR)
1937/* Legacy for systems yet to multi-arch REG_STRUCT_HAS_ADDR */
eee30e78 1938#if !defined (REG_STRUCT_HAS_ADDR_P)
d03e67c9
AC
1939#define REG_STRUCT_HAS_ADDR_P() (1)
1940#endif
eee30e78 1941#endif
d03e67c9 1942
33489c5b 1943/* Default predicate for non- multi-arch targets. */
6166d547 1944#if (!GDB_MULTI_ARCH) && !defined (REG_STRUCT_HAS_ADDR_P)
33489c5b
AC
1945#define REG_STRUCT_HAS_ADDR_P() (0)
1946#endif
1947
d03e67c9 1948extern int gdbarch_reg_struct_has_addr_p (struct gdbarch *gdbarch);
83905903
AC
1949#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (REG_STRUCT_HAS_ADDR_P)
1950#error "Non multi-arch definition of REG_STRUCT_HAS_ADDR"
1951#endif
6166d547 1952#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (REG_STRUCT_HAS_ADDR_P)
d03e67c9
AC
1953#define REG_STRUCT_HAS_ADDR_P() (gdbarch_reg_struct_has_addr_p (current_gdbarch))
1954#endif
1955
33489c5b 1956/* Default (function) for non- multi-arch platforms. */
6166d547 1957#if (!GDB_MULTI_ARCH) && !defined (REG_STRUCT_HAS_ADDR)
8e65ff28 1958#define REG_STRUCT_HAS_ADDR(gcc_p, type) (internal_error (__FILE__, __LINE__, "REG_STRUCT_HAS_ADDR"), 0)
33489c5b
AC
1959#endif
1960
d03e67c9
AC
1961typedef int (gdbarch_reg_struct_has_addr_ftype) (int gcc_p, struct type *type);
1962extern int gdbarch_reg_struct_has_addr (struct gdbarch *gdbarch, int gcc_p, struct type *type);
1963extern void set_gdbarch_reg_struct_has_addr (struct gdbarch *gdbarch, gdbarch_reg_struct_has_addr_ftype *reg_struct_has_addr);
83905903
AC
1964#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (REG_STRUCT_HAS_ADDR)
1965#error "Non multi-arch definition of REG_STRUCT_HAS_ADDR"
1966#endif
33489c5b 1967#if GDB_MULTI_ARCH
6166d547 1968#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (REG_STRUCT_HAS_ADDR)
d03e67c9
AC
1969#define REG_STRUCT_HAS_ADDR(gcc_p, type) (gdbarch_reg_struct_has_addr (current_gdbarch, gcc_p, type))
1970#endif
33489c5b 1971#endif
d03e67c9 1972
d1e3cf49
AC
1973#if defined (SAVE_DUMMY_FRAME_TOS)
1974/* Legacy for systems yet to multi-arch SAVE_DUMMY_FRAME_TOS */
eee30e78 1975#if !defined (SAVE_DUMMY_FRAME_TOS_P)
d1e3cf49
AC
1976#define SAVE_DUMMY_FRAME_TOS_P() (1)
1977#endif
eee30e78 1978#endif
d1e3cf49
AC
1979
1980/* Default predicate for non- multi-arch targets. */
6166d547 1981#if (!GDB_MULTI_ARCH) && !defined (SAVE_DUMMY_FRAME_TOS_P)
d1e3cf49
AC
1982#define SAVE_DUMMY_FRAME_TOS_P() (0)
1983#endif
1984
1985extern int gdbarch_save_dummy_frame_tos_p (struct gdbarch *gdbarch);
83905903
AC
1986#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (SAVE_DUMMY_FRAME_TOS_P)
1987#error "Non multi-arch definition of SAVE_DUMMY_FRAME_TOS"
1988#endif
6166d547 1989#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (SAVE_DUMMY_FRAME_TOS_P)
d1e3cf49
AC
1990#define SAVE_DUMMY_FRAME_TOS_P() (gdbarch_save_dummy_frame_tos_p (current_gdbarch))
1991#endif
1992
1993/* Default (function) for non- multi-arch platforms. */
6166d547 1994#if (!GDB_MULTI_ARCH) && !defined (SAVE_DUMMY_FRAME_TOS)
8e65ff28 1995#define SAVE_DUMMY_FRAME_TOS(sp) (internal_error (__FILE__, __LINE__, "SAVE_DUMMY_FRAME_TOS"), 0)
d1e3cf49
AC
1996#endif
1997
1998typedef void (gdbarch_save_dummy_frame_tos_ftype) (CORE_ADDR sp);
1999extern void gdbarch_save_dummy_frame_tos (struct gdbarch *gdbarch, CORE_ADDR sp);
2000extern void set_gdbarch_save_dummy_frame_tos (struct gdbarch *gdbarch, gdbarch_save_dummy_frame_tos_ftype *save_dummy_frame_tos);
83905903
AC
2001#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (SAVE_DUMMY_FRAME_TOS)
2002#error "Non multi-arch definition of SAVE_DUMMY_FRAME_TOS"
2003#endif
d1e3cf49 2004#if GDB_MULTI_ARCH
6166d547 2005#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (SAVE_DUMMY_FRAME_TOS)
d1e3cf49
AC
2006#define SAVE_DUMMY_FRAME_TOS(sp) (gdbarch_save_dummy_frame_tos (current_gdbarch, sp))
2007#endif
2008#endif
2009
58d5518e
ND
2010extern int gdbarch_parm_boundary (struct gdbarch *gdbarch);
2011extern void set_gdbarch_parm_boundary (struct gdbarch *gdbarch, int parm_boundary);
83905903
AC
2012#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (PARM_BOUNDARY)
2013#error "Non multi-arch definition of PARM_BOUNDARY"
2014#endif
58d5518e
ND
2015#if GDB_MULTI_ARCH
2016#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (PARM_BOUNDARY)
2017#define PARM_BOUNDARY (gdbarch_parm_boundary (current_gdbarch))
2018#endif
2019#endif
2020
f0d4cc9e 2021/* Default (value) for non- multi-arch platforms. */
6166d547 2022#if (!GDB_MULTI_ARCH) && !defined (TARGET_FLOAT_FORMAT)
f0d4cc9e
AC
2023#define TARGET_FLOAT_FORMAT (default_float_format (current_gdbarch))
2024#endif
2025
2026extern const struct floatformat * gdbarch_float_format (struct gdbarch *gdbarch);
2027extern void set_gdbarch_float_format (struct gdbarch *gdbarch, const struct floatformat * float_format);
83905903
AC
2028#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (TARGET_FLOAT_FORMAT)
2029#error "Non multi-arch definition of TARGET_FLOAT_FORMAT"
2030#endif
f0d4cc9e 2031#if GDB_MULTI_ARCH
6166d547 2032#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (TARGET_FLOAT_FORMAT)
f0d4cc9e
AC
2033#define TARGET_FLOAT_FORMAT (gdbarch_float_format (current_gdbarch))
2034#endif
2035#endif
2036
2037/* Default (value) for non- multi-arch platforms. */
6166d547 2038#if (!GDB_MULTI_ARCH) && !defined (TARGET_DOUBLE_FORMAT)
f0d4cc9e
AC
2039#define TARGET_DOUBLE_FORMAT (default_double_format (current_gdbarch))
2040#endif
2041
2042extern const struct floatformat * gdbarch_double_format (struct gdbarch *gdbarch);
2043extern void set_gdbarch_double_format (struct gdbarch *gdbarch, const struct floatformat * double_format);
83905903
AC
2044#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (TARGET_DOUBLE_FORMAT)
2045#error "Non multi-arch definition of TARGET_DOUBLE_FORMAT"
2046#endif
f0d4cc9e 2047#if GDB_MULTI_ARCH
6166d547 2048#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (TARGET_DOUBLE_FORMAT)
f0d4cc9e
AC
2049#define TARGET_DOUBLE_FORMAT (gdbarch_double_format (current_gdbarch))
2050#endif
2051#endif
2052
2053/* Default (value) for non- multi-arch platforms. */
6166d547 2054#if (!GDB_MULTI_ARCH) && !defined (TARGET_LONG_DOUBLE_FORMAT)
2fa5c1e0 2055#define TARGET_LONG_DOUBLE_FORMAT (default_double_format (current_gdbarch))
f0d4cc9e
AC
2056#endif
2057
2058extern const struct floatformat * gdbarch_long_double_format (struct gdbarch *gdbarch);
2059extern void set_gdbarch_long_double_format (struct gdbarch *gdbarch, const struct floatformat * long_double_format);
83905903
AC
2060#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (TARGET_LONG_DOUBLE_FORMAT)
2061#error "Non multi-arch definition of TARGET_LONG_DOUBLE_FORMAT"
2062#endif
f0d4cc9e 2063#if GDB_MULTI_ARCH
6166d547 2064#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (TARGET_LONG_DOUBLE_FORMAT)
f0d4cc9e
AC
2065#define TARGET_LONG_DOUBLE_FORMAT (gdbarch_long_double_format (current_gdbarch))
2066#endif
2067#endif
2068
f517ea4e
PS
2069/* Default (function) for non- multi-arch platforms. */
2070#if (!GDB_MULTI_ARCH) && !defined (CONVERT_FROM_FUNC_PTR_ADDR)
875e1767 2071#define CONVERT_FROM_FUNC_PTR_ADDR(addr) (core_addr_identity (addr))
f517ea4e
PS
2072#endif
2073
2074typedef CORE_ADDR (gdbarch_convert_from_func_ptr_addr_ftype) (CORE_ADDR addr);
2075extern CORE_ADDR gdbarch_convert_from_func_ptr_addr (struct gdbarch *gdbarch, CORE_ADDR addr);
2076extern void set_gdbarch_convert_from_func_ptr_addr (struct gdbarch *gdbarch, gdbarch_convert_from_func_ptr_addr_ftype *convert_from_func_ptr_addr);
83905903
AC
2077#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (CONVERT_FROM_FUNC_PTR_ADDR)
2078#error "Non multi-arch definition of CONVERT_FROM_FUNC_PTR_ADDR"
2079#endif
f517ea4e
PS
2080#if GDB_MULTI_ARCH
2081#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (CONVERT_FROM_FUNC_PTR_ADDR)
2082#define CONVERT_FROM_FUNC_PTR_ADDR(addr) (gdbarch_convert_from_func_ptr_addr (current_gdbarch, addr))
2083#endif
2084#endif
2085
875e1767
AC
2086/* On some machines there are bits in addresses which are not really
2087 part of the address, but are used by the kernel, the hardware, etc.
2088 for special purposes. ADDR_BITS_REMOVE takes out any such bits so
2089 we get a "real" address such as one would find in a symbol table.
2090 This is used only for addresses of instructions, and even then I'm
2091 not sure it's used in all contexts. It exists to deal with there
2092 being a few stray bits in the PC which would mislead us, not as some
2093 sort of generic thing to handle alignment or segmentation (it's
2094 possible it should be in TARGET_READ_PC instead). */
2095
2096/* Default (function) for non- multi-arch platforms. */
2097#if (!GDB_MULTI_ARCH) && !defined (ADDR_BITS_REMOVE)
2098#define ADDR_BITS_REMOVE(addr) (core_addr_identity (addr))
2099#endif
2100
2101typedef CORE_ADDR (gdbarch_addr_bits_remove_ftype) (CORE_ADDR addr);
2102extern CORE_ADDR gdbarch_addr_bits_remove (struct gdbarch *gdbarch, CORE_ADDR addr);
2103extern void set_gdbarch_addr_bits_remove (struct gdbarch *gdbarch, gdbarch_addr_bits_remove_ftype *addr_bits_remove);
83905903
AC
2104#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (ADDR_BITS_REMOVE)
2105#error "Non multi-arch definition of ADDR_BITS_REMOVE"
2106#endif
875e1767
AC
2107#if GDB_MULTI_ARCH
2108#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (ADDR_BITS_REMOVE)
2109#define ADDR_BITS_REMOVE(addr) (gdbarch_addr_bits_remove (current_gdbarch, addr))
2110#endif
2111#endif
2112
181c1381
RE
2113/* It is not at all clear why SMASH_TEXT_ADDRESS is not folded into
2114 ADDR_BITS_REMOVE. */
2115
2116/* Default (function) for non- multi-arch platforms. */
2117#if (!GDB_MULTI_ARCH) && !defined (SMASH_TEXT_ADDRESS)
2118#define SMASH_TEXT_ADDRESS(addr) (core_addr_identity (addr))
2119#endif
2120
2121typedef CORE_ADDR (gdbarch_smash_text_address_ftype) (CORE_ADDR addr);
2122extern CORE_ADDR gdbarch_smash_text_address (struct gdbarch *gdbarch, CORE_ADDR addr);
2123extern void set_gdbarch_smash_text_address (struct gdbarch *gdbarch, gdbarch_smash_text_address_ftype *smash_text_address);
2124#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (SMASH_TEXT_ADDRESS)
2125#error "Non multi-arch definition of SMASH_TEXT_ADDRESS"
2126#endif
2127#if GDB_MULTI_ARCH
2128#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (SMASH_TEXT_ADDRESS)
2129#define SMASH_TEXT_ADDRESS(addr) (gdbarch_smash_text_address (current_gdbarch, addr))
2130#endif
2131#endif
2132
64c4637f
AC
2133/* FIXME/cagney/2001-01-18: This should be split in two. A target method that indicates if
2134 the target needs software single step. An ISA method to implement it.
2135
2136 FIXME/cagney/2001-01-18: This should be replaced with something that inserts breakpoints
2137 using the breakpoint system instead of blatting memory directly (as with rs6000).
2138
2139 FIXME/cagney/2001-01-18: The logic is backwards. It should be asking if the target can
2140 single step. If not, then implement single step using breakpoints. */
2141
2142#if defined (SOFTWARE_SINGLE_STEP)
2143/* Legacy for systems yet to multi-arch SOFTWARE_SINGLE_STEP */
2144#if !defined (SOFTWARE_SINGLE_STEP_P)
2145#define SOFTWARE_SINGLE_STEP_P() (1)
2146#endif
2147#endif
2148
2149/* Default predicate for non- multi-arch targets. */
2150#if (!GDB_MULTI_ARCH) && !defined (SOFTWARE_SINGLE_STEP_P)
2151#define SOFTWARE_SINGLE_STEP_P() (0)
2152#endif
2153
2154extern int gdbarch_software_single_step_p (struct gdbarch *gdbarch);
83905903
AC
2155#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (SOFTWARE_SINGLE_STEP_P)
2156#error "Non multi-arch definition of SOFTWARE_SINGLE_STEP"
2157#endif
64c4637f
AC
2158#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (SOFTWARE_SINGLE_STEP_P)
2159#define SOFTWARE_SINGLE_STEP_P() (gdbarch_software_single_step_p (current_gdbarch))
2160#endif
2161
2162/* Default (function) for non- multi-arch platforms. */
2163#if (!GDB_MULTI_ARCH) && !defined (SOFTWARE_SINGLE_STEP)
2164#define SOFTWARE_SINGLE_STEP(sig, insert_breakpoints_p) (internal_error (__FILE__, __LINE__, "SOFTWARE_SINGLE_STEP"), 0)
2165#endif
2166
2167typedef void (gdbarch_software_single_step_ftype) (enum target_signal sig, int insert_breakpoints_p);
2168extern void gdbarch_software_single_step (struct gdbarch *gdbarch, enum target_signal sig, int insert_breakpoints_p);
2169extern void set_gdbarch_software_single_step (struct gdbarch *gdbarch, gdbarch_software_single_step_ftype *software_single_step);
83905903
AC
2170#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (SOFTWARE_SINGLE_STEP)
2171#error "Non multi-arch definition of SOFTWARE_SINGLE_STEP"
2172#endif
64c4637f
AC
2173#if GDB_MULTI_ARCH
2174#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (SOFTWARE_SINGLE_STEP)
2175#define SOFTWARE_SINGLE_STEP(sig, insert_breakpoints_p) (gdbarch_software_single_step (current_gdbarch, sig, insert_breakpoints_p))
2176#endif
2177#endif
2178
2bf0cb65
EZ
2179/* Default (function) for non- multi-arch platforms. */
2180#if (!GDB_MULTI_ARCH) && !defined (TARGET_PRINT_INSN)
2181#define TARGET_PRINT_INSN(vma, info) (legacy_print_insn (vma, info))
2182#endif
2183
2184typedef int (gdbarch_print_insn_ftype) (bfd_vma vma, disassemble_info *info);
2185extern int gdbarch_print_insn (struct gdbarch *gdbarch, bfd_vma vma, disassemble_info *info);
2186extern void set_gdbarch_print_insn (struct gdbarch *gdbarch, gdbarch_print_insn_ftype *print_insn);
2187#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (TARGET_PRINT_INSN)
2188#error "Non multi-arch definition of TARGET_PRINT_INSN"
2189#endif
2190#if GDB_MULTI_ARCH
2191#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (TARGET_PRINT_INSN)
2192#define TARGET_PRINT_INSN(vma, info) (gdbarch_print_insn (current_gdbarch, vma, info))
2193#endif
2194#endif
2195
bdcd319a
CV
2196/* Default (function) for non- multi-arch platforms. */
2197#if (!GDB_MULTI_ARCH) && !defined (SKIP_TRAMPOLINE_CODE)
2198#define SKIP_TRAMPOLINE_CODE(pc) (generic_skip_trampoline_code (pc))
2199#endif
2200
2201typedef CORE_ADDR (gdbarch_skip_trampoline_code_ftype) (CORE_ADDR pc);
2202extern CORE_ADDR gdbarch_skip_trampoline_code (struct gdbarch *gdbarch, CORE_ADDR pc);
2203extern void set_gdbarch_skip_trampoline_code (struct gdbarch *gdbarch, gdbarch_skip_trampoline_code_ftype *skip_trampoline_code);
2204#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (SKIP_TRAMPOLINE_CODE)
2205#error "Non multi-arch definition of SKIP_TRAMPOLINE_CODE"
2206#endif
2207#if GDB_MULTI_ARCH
2208#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (SKIP_TRAMPOLINE_CODE)
2209#define SKIP_TRAMPOLINE_CODE(pc) (gdbarch_skip_trampoline_code (current_gdbarch, pc))
2210#endif
2211#endif
2212
68e9cc94
CV
2213/* For SVR4 shared libraries, each call goes through a small piece of
2214 trampoline code in the ".plt" section. IN_SOLIB_CALL_TRAMPOLINE evaluates
2215 to nonzero if we are current stopped in one of these. */
2216
2217/* Default (function) for non- multi-arch platforms. */
2218#if (!GDB_MULTI_ARCH) && !defined (IN_SOLIB_CALL_TRAMPOLINE)
2219#define IN_SOLIB_CALL_TRAMPOLINE(pc, name) (generic_in_solib_call_trampoline (pc, name))
2220#endif
2221
2222typedef int (gdbarch_in_solib_call_trampoline_ftype) (CORE_ADDR pc, char *name);
2223extern int gdbarch_in_solib_call_trampoline (struct gdbarch *gdbarch, CORE_ADDR pc, char *name);
2224extern void set_gdbarch_in_solib_call_trampoline (struct gdbarch *gdbarch, gdbarch_in_solib_call_trampoline_ftype *in_solib_call_trampoline);
2225#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (IN_SOLIB_CALL_TRAMPOLINE)
2226#error "Non multi-arch definition of IN_SOLIB_CALL_TRAMPOLINE"
2227#endif
2228#if GDB_MULTI_ARCH
2229#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (IN_SOLIB_CALL_TRAMPOLINE)
2230#define IN_SOLIB_CALL_TRAMPOLINE(pc, name) (gdbarch_in_solib_call_trampoline (current_gdbarch, pc, name))
2231#endif
2232#endif
2233
c12260ac
CV
2234/* A target might have problems with watchpoints as soon as the stack
2235 frame of the current function has been destroyed. This mostly happens
2236 as the first action in a funtion's epilogue. in_function_epilogue_p()
2237 is defined to return a non-zero value if either the given addr is one
2238 instruction after the stack destroying instruction up to the trailing
2239 return instruction or if we can figure out that the stack frame has
2240 already been invalidated regardless of the value of addr. Targets
2241 which don't suffer from that problem could just let this functionality
2242 untouched. */
2243
2244typedef int (gdbarch_in_function_epilogue_p_ftype) (struct gdbarch *gdbarch, CORE_ADDR addr);
2245extern int gdbarch_in_function_epilogue_p (struct gdbarch *gdbarch, CORE_ADDR addr);
2246extern void set_gdbarch_in_function_epilogue_p (struct gdbarch *gdbarch, gdbarch_in_function_epilogue_p_ftype *in_function_epilogue_p);
2247
552c04a7
TT
2248/* Given a vector of command-line arguments, return a newly allocated
2249 string which, when passed to the create_inferior function, will be
2250 parsed (on Unix systems, by the shell) to yield the same vector.
2251 This function should call error() if the argument vector is not
2252 representable for this target or if this target does not support
2253 command-line arguments.
2254 ARGC is the number of elements in the vector.
2255 ARGV is an array of strings, one per argument. */
2256
2257typedef char * (gdbarch_construct_inferior_arguments_ftype) (struct gdbarch *gdbarch, int argc, char **argv);
2258extern char * gdbarch_construct_inferior_arguments (struct gdbarch *gdbarch, int argc, char **argv);
2259extern void set_gdbarch_construct_inferior_arguments (struct gdbarch *gdbarch, gdbarch_construct_inferior_arguments_ftype *construct_inferior_arguments);
2260
b6af0555
JS
2261#if defined (DWARF2_BUILD_FRAME_INFO)
2262/* Legacy for systems yet to multi-arch DWARF2_BUILD_FRAME_INFO */
2263#if !defined (DWARF2_BUILD_FRAME_INFO_P)
2264#define DWARF2_BUILD_FRAME_INFO_P() (1)
2265#endif
2266#endif
2267
2268/* Default predicate for non- multi-arch targets. */
2269#if (!GDB_MULTI_ARCH) && !defined (DWARF2_BUILD_FRAME_INFO_P)
2270#define DWARF2_BUILD_FRAME_INFO_P() (0)
2271#endif
2272
2273extern int gdbarch_dwarf2_build_frame_info_p (struct gdbarch *gdbarch);
2274#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (DWARF2_BUILD_FRAME_INFO_P)
2275#error "Non multi-arch definition of DWARF2_BUILD_FRAME_INFO"
2276#endif
2277#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (DWARF2_BUILD_FRAME_INFO_P)
2278#define DWARF2_BUILD_FRAME_INFO_P() (gdbarch_dwarf2_build_frame_info_p (current_gdbarch))
2279#endif
2280
2281/* Default (function) for non- multi-arch platforms. */
2282#if (!GDB_MULTI_ARCH) && !defined (DWARF2_BUILD_FRAME_INFO)
2283#define DWARF2_BUILD_FRAME_INFO(objfile) (internal_error (__FILE__, __LINE__, "DWARF2_BUILD_FRAME_INFO"), 0)
2284#endif
2285
2286typedef void (gdbarch_dwarf2_build_frame_info_ftype) (struct objfile *objfile);
2287extern void gdbarch_dwarf2_build_frame_info (struct gdbarch *gdbarch, struct objfile *objfile);
2288extern void set_gdbarch_dwarf2_build_frame_info (struct gdbarch *gdbarch, gdbarch_dwarf2_build_frame_info_ftype *dwarf2_build_frame_info);
2289#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (DWARF2_BUILD_FRAME_INFO)
2290#error "Non multi-arch definition of DWARF2_BUILD_FRAME_INFO"
2291#endif
2292#if GDB_MULTI_ARCH
2293#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (DWARF2_BUILD_FRAME_INFO)
2294#define DWARF2_BUILD_FRAME_INFO(objfile) (gdbarch_dwarf2_build_frame_info (current_gdbarch, objfile))
2295#endif
2296#endif
2297
a2cf933a
EZ
2298/* Default (function) for non- multi-arch platforms. */
2299#if (!GDB_MULTI_ARCH) && !defined (ELF_MAKE_MSYMBOL_SPECIAL)
2300#define ELF_MAKE_MSYMBOL_SPECIAL(sym, msym) (default_elf_make_msymbol_special (sym, msym))
2301#endif
2302
2303typedef void (gdbarch_elf_make_msymbol_special_ftype) (asymbol *sym, struct minimal_symbol *msym);
2304extern void gdbarch_elf_make_msymbol_special (struct gdbarch *gdbarch, asymbol *sym, struct minimal_symbol *msym);
2305extern void set_gdbarch_elf_make_msymbol_special (struct gdbarch *gdbarch, gdbarch_elf_make_msymbol_special_ftype *elf_make_msymbol_special);
2306#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (ELF_MAKE_MSYMBOL_SPECIAL)
2307#error "Non multi-arch definition of ELF_MAKE_MSYMBOL_SPECIAL"
2308#endif
2309#if GDB_MULTI_ARCH
2310#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (ELF_MAKE_MSYMBOL_SPECIAL)
2311#define ELF_MAKE_MSYMBOL_SPECIAL(sym, msym) (gdbarch_elf_make_msymbol_special (current_gdbarch, sym, msym))
2312#endif
2313#endif
2314
2315/* Default (function) for non- multi-arch platforms. */
2316#if (!GDB_MULTI_ARCH) && !defined (COFF_MAKE_MSYMBOL_SPECIAL)
2317#define COFF_MAKE_MSYMBOL_SPECIAL(val, msym) (default_coff_make_msymbol_special (val, msym))
2318#endif
2319
2320typedef void (gdbarch_coff_make_msymbol_special_ftype) (int val, struct minimal_symbol *msym);
2321extern void gdbarch_coff_make_msymbol_special (struct gdbarch *gdbarch, int val, struct minimal_symbol *msym);
2322extern void set_gdbarch_coff_make_msymbol_special (struct gdbarch *gdbarch, gdbarch_coff_make_msymbol_special_ftype *coff_make_msymbol_special);
2323#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (COFF_MAKE_MSYMBOL_SPECIAL)
2324#error "Non multi-arch definition of COFF_MAKE_MSYMBOL_SPECIAL"
2325#endif
2326#if GDB_MULTI_ARCH
2327#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (COFF_MAKE_MSYMBOL_SPECIAL)
2328#define COFF_MAKE_MSYMBOL_SPECIAL(val, msym) (gdbarch_coff_make_msymbol_special (current_gdbarch, val, msym))
2329#endif
2330#endif
2331
104c1213 2332extern struct gdbarch_tdep *gdbarch_tdep (struct gdbarch *gdbarch);
0f71a2f6
JM
2333
2334
2335/* Mechanism for co-ordinating the selection of a specific
2336 architecture.
2337
2338 GDB targets (*-tdep.c) can register an interest in a specific
2339 architecture. Other GDB components can register a need to maintain
2340 per-architecture data.
2341
2342 The mechanisms below ensures that there is only a loose connection
2343 between the set-architecture command and the various GDB
99e7bb18 2344 components. Each component can independently register their need
0f71a2f6
JM
2345 to maintain architecture specific data with gdbarch.
2346
2347 Pragmatics:
2348
2349 Previously, a single TARGET_ARCHITECTURE_HOOK was provided. It
2350 didn't scale.
2351
2352 The more traditional mega-struct containing architecture specific
2353 data for all the various GDB components was also considered. Since
99e7bb18 2354 GDB is built from a variable number of (fairly independent)
0f71a2f6
JM
2355 components it was determined that the global aproach was not
2356 applicable. */
2357
2358
2359/* Register a new architectural family with GDB.
2360
2361 Register support for the specified ARCHITECTURE with GDB. When
2362 gdbarch determines that the specified architecture has been
2363 selected, the corresponding INIT function is called.
2364
2365 --
2366
2367 The INIT function takes two parameters: INFO which contains the
2368 information available to gdbarch about the (possibly new)
2369 architecture; ARCHES which is a list of the previously created
2370 ``struct gdbarch'' for this architecture.
2371
2372 The INIT function parameter INFO shall, as far as possible, be
2373 pre-initialized with information obtained from INFO.ABFD or
428721aa 2374 previously selected architecture (if similar).
0f71a2f6
JM
2375
2376 The INIT function shall return any of: NULL - indicating that it
ec3d358c 2377 doesn't recognize the selected architecture; an existing ``struct
0f71a2f6
JM
2378 gdbarch'' from the ARCHES list - indicating that the new
2379 architecture is just a synonym for an earlier architecture (see
2380 gdbarch_list_lookup_by_info()); a newly created ``struct gdbarch''
4b9b3959
AC
2381 - that describes the selected architecture (see gdbarch_alloc()).
2382
2383 The DUMP_TDEP function shall print out all target specific values.
2384 Care should be taken to ensure that the function works in both the
2385 multi-arch and non- multi-arch cases. */
0f71a2f6 2386
adf40b2e
JM
2387struct gdbarch_list
2388{
2389 struct gdbarch *gdbarch;
2390 struct gdbarch_list *next;
2391};
0f71a2f6 2392
adf40b2e
JM
2393struct gdbarch_info
2394{
adf40b2e
JM
2395 /* Use default: NULL (ZERO). */
2396 const struct bfd_arch_info *bfd_arch_info;
0f71a2f6 2397
428721aa 2398 /* Use default: BFD_ENDIAN_UNKNOWN (NB: is not ZERO). */
adf40b2e 2399 int byte_order;
0f71a2f6 2400
adf40b2e
JM
2401 /* Use default: NULL (ZERO). */
2402 bfd *abfd;
0f71a2f6 2403
adf40b2e
JM
2404 /* Use default: NULL (ZERO). */
2405 struct gdbarch_tdep_info *tdep_info;
2406};
0f71a2f6 2407
104c1213 2408typedef struct gdbarch *(gdbarch_init_ftype) (struct gdbarch_info info, struct gdbarch_list *arches);
4b9b3959 2409typedef void (gdbarch_dump_tdep_ftype) (struct gdbarch *gdbarch, struct ui_file *file);
0f71a2f6 2410
4b9b3959 2411/* DEPRECATED - use gdbarch_register() */
104c1213 2412extern void register_gdbarch_init (enum bfd_architecture architecture, gdbarch_init_ftype *);
0f71a2f6 2413
4b9b3959
AC
2414extern void gdbarch_register (enum bfd_architecture architecture,
2415 gdbarch_init_ftype *,
2416 gdbarch_dump_tdep_ftype *);
2417
0f71a2f6 2418
b4a20239
AC
2419/* Return a freshly allocated, NULL terminated, array of the valid
2420 architecture names. Since architectures are registered during the
2421 _initialize phase this function only returns useful information
2422 once initialization has been completed. */
2423
2424extern const char **gdbarch_printable_names (void);
2425
2426
0f71a2f6
JM
2427/* Helper function. Search the list of ARCHES for a GDBARCH that
2428 matches the information provided by INFO. */
2429
104c1213 2430extern struct gdbarch_list *gdbarch_list_lookup_by_info (struct gdbarch_list *arches, const struct gdbarch_info *info);
0f71a2f6
JM
2431
2432
2433/* Helper function. Create a preliminary ``struct gdbarch''. Perform
2434 basic initialization using values obtained from the INFO andTDEP
2435 parameters. set_gdbarch_*() functions are called to complete the
2436 initialization of the object. */
2437
104c1213 2438extern struct gdbarch *gdbarch_alloc (const struct gdbarch_info *info, struct gdbarch_tdep *tdep);
0f71a2f6
JM
2439
2440
4b9b3959
AC
2441/* Helper function. Free a partially-constructed ``struct gdbarch''.
2442 It is assumed that the caller freeds the ``struct
2443 gdbarch_tdep''. */
2444
058f20d5
JB
2445extern void gdbarch_free (struct gdbarch *);
2446
2447
b732d07d 2448/* Helper function. Force an update of the current architecture.
0f71a2f6 2449
b732d07d
AC
2450 The actual architecture selected is determined by INFO, ``(gdb) set
2451 architecture'' et.al., the existing architecture and BFD's default
2452 architecture. INFO should be initialized to zero and then selected
2453 fields should be updated.
0f71a2f6 2454
16f33e29
AC
2455 Returns non-zero if the update succeeds */
2456
2457extern int gdbarch_update_p (struct gdbarch_info info);
0f71a2f6
JM
2458
2459
2460
2461/* Register per-architecture data-pointer.
2462
2463 Reserve space for a per-architecture data-pointer. An identifier
2464 for the reserved data-pointer is returned. That identifer should
95160752 2465 be saved in a local static variable.
0f71a2f6 2466
95160752
AC
2467 The per-architecture data-pointer can be initialized in one of two
2468 ways: The value can be set explicitly using a call to
2469 set_gdbarch_data(); the value can be set implicitly using the value
2470 returned by a non-NULL INIT() callback. INIT(), when non-NULL is
2471 called after the basic architecture vector has been created.
0f71a2f6 2472
95160752
AC
2473 When a previously created architecture is re-selected, the
2474 per-architecture data-pointer for that previous architecture is
2475 restored. INIT() is not called.
2476
2477 During initialization, multiple assignments of the data-pointer are
2478 allowed, non-NULL values are deleted by calling FREE(). If the
2479 architecture is deleted using gdbarch_free() all non-NULL data
2480 pointers are also deleted using FREE().
0f71a2f6
JM
2481
2482 Multiple registrarants for any architecture are allowed (and
2483 strongly encouraged). */
2484
95160752 2485struct gdbarch_data;
0f71a2f6 2486
95160752
AC
2487typedef void *(gdbarch_data_init_ftype) (struct gdbarch *gdbarch);
2488typedef void (gdbarch_data_free_ftype) (struct gdbarch *gdbarch,
2489 void *pointer);
2490extern struct gdbarch_data *register_gdbarch_data (gdbarch_data_init_ftype *init,
2491 gdbarch_data_free_ftype *free);
2492extern void set_gdbarch_data (struct gdbarch *gdbarch,
2493 struct gdbarch_data *data,
2494 void *pointer);
0f71a2f6 2495
104c1213 2496extern void *gdbarch_data (struct gdbarch_data*);
0f71a2f6
JM
2497
2498
0f71a2f6
JM
2499/* Register per-architecture memory region.
2500
2501 Provide a memory-region swap mechanism. Per-architecture memory
2502 region are created. These memory regions are swapped whenever the
2503 architecture is changed. For a new architecture, the memory region
2504 is initialized with zero (0) and the INIT function is called.
2505
2506 Memory regions are swapped / initialized in the order that they are
2507 registered. NULL DATA and/or INIT values can be specified.
2508
2509 New code should use register_gdbarch_data(). */
2510
104c1213
JM
2511typedef void (gdbarch_swap_ftype) (void);
2512extern void register_gdbarch_swap (void *data, unsigned long size, gdbarch_swap_ftype *init);
e514a9d6 2513#define REGISTER_GDBARCH_SWAP(VAR) register_gdbarch_swap (&(VAR), sizeof ((VAR)), NULL)
0f71a2f6
JM
2514
2515
2516
99e7bb18 2517/* The target-system-dependent byte order is dynamic */
c906108c 2518
adf40b2e 2519extern int target_byte_order;
c906108c
SS
2520#ifndef TARGET_BYTE_ORDER
2521#define TARGET_BYTE_ORDER (target_byte_order + 0)
2522#endif
2523
adf40b2e 2524extern int target_byte_order_auto;
c906108c
SS
2525#ifndef TARGET_BYTE_ORDER_AUTO
2526#define TARGET_BYTE_ORDER_AUTO (target_byte_order_auto + 0)
2527#endif
2528
2529
2530
99e7bb18 2531/* The target-system-dependent BFD architecture is dynamic */
c906108c 2532
adf40b2e 2533extern int target_architecture_auto;
c906108c
SS
2534#ifndef TARGET_ARCHITECTURE_AUTO
2535#define TARGET_ARCHITECTURE_AUTO (target_architecture_auto + 0)
2536#endif
2537
adf40b2e 2538extern const struct bfd_arch_info *target_architecture;
c906108c
SS
2539#ifndef TARGET_ARCHITECTURE
2540#define TARGET_ARCHITECTURE (target_architecture + 0)
2541#endif
2542
c906108c 2543
99e7bb18 2544/* The target-system-dependent disassembler is semi-dynamic */
c906108c 2545
104c1213 2546extern int dis_asm_read_memory (bfd_vma memaddr, bfd_byte *myaddr,
ff844c8d 2547 unsigned int len, disassemble_info *info);
c906108c 2548
104c1213
JM
2549extern void dis_asm_memory_error (int status, bfd_vma memaddr,
2550 disassemble_info *info);
c906108c 2551
104c1213
JM
2552extern void dis_asm_print_address (bfd_vma addr,
2553 disassemble_info *info);
c906108c 2554
104c1213 2555extern int (*tm_print_insn) (bfd_vma, disassemble_info*);
adf40b2e 2556extern disassemble_info tm_print_insn_info;
c906108c
SS
2557#ifndef TARGET_PRINT_INSN_INFO
2558#define TARGET_PRINT_INSN_INFO (&tm_print_insn_info)
2559#endif
2560
2561
2562
99e7bb18 2563/* Set the dynamic target-system-dependent parameters (architecture,
c906108c
SS
2564 byte-order, ...) using information found in the BFD */
2565
104c1213 2566extern void set_gdbarch_from_file (bfd *);
c906108c
SS
2567
2568
e514a9d6
JM
2569/* Initialize the current architecture to the "first" one we find on
2570 our list. */
2571
2572extern void initialize_current_architecture (void);
2573
ceaa8edf
JB
2574/* For non-multiarched targets, do any initialization of the default
2575 gdbarch object necessary after the _initialize_MODULE functions
2576 have run. */
2577extern void initialize_non_multiarch ();
cce74817 2578
c906108c 2579/* gdbarch trace variable */
adf40b2e 2580extern int gdbarch_debug;
c906108c 2581
4b9b3959 2582extern void gdbarch_dump (struct gdbarch *gdbarch, struct ui_file *file);
0f71a2f6 2583
c906108c 2584#endif
This page took 0.423203 seconds and 4 git commands to generate.