rebuild with patched automake
[deliverable/binutils-gdb.git] / gdb / gdbarch.h
CommitLineData
adf40b2e 1/* Dynamic architecture support for GDB, the GNU debugger.
b83266a0 2 Copyright 1998-1999, Free Software Foundation, Inc.
c906108c 3
c5aa993b 4 This file is part of GDB.
c906108c 5
c5aa993b
JM
6 This program is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 2 of the License, or
9 (at your option) any later version.
c906108c 10
c5aa993b
JM
11 This program is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
c906108c 15
c5aa993b
JM
16 You should have received a copy of the GNU General Public License
17 along with this program; if not, write to the Free Software
18 Foundation, Inc., 59 Temple Place - Suite 330,
19 Boston, MA 02111-1307, USA. */
c906108c 20
adf40b2e
JM
21/* *INDENT-OFF* */ /* typedef (f)();'' confuses indent */
22
c906108c
SS
23#ifndef GDBARCH_H
24#define GDBARCH_H
25
cce74817
JM
26#ifdef __STDC__
27struct frame_info;
28struct value;
29enum lval_type;
30#endif
31
0f71a2f6
JM
32
33#ifndef GDB_MULTI_ARCH
34#define GDB_MULTI_ARCH 0
35#endif
36
37extern struct gdbarch *current_gdbarch;
38
39
40/* See gdb/doc/gdbint.texi for a discussion of the GDB_MULTI_ARCH
41 macro */
42
43
44/* If any of the following are defined, the target wasn't correctly
45 converted. */
46
47#if GDB_MULTI_ARCH
48#if defined (CALL_DUMMY)
49#error "CALL_DUMMY: replaced by CALL_DUMMY_WORDS/SIZEOF_CALL_DUMMY_WORDS"
50#endif
51#endif
52
53#if GDB_MULTI_ARCH
54#if defined (REGISTER_NAMES)
55#error "REGISTER_NAMES: replaced by REGISTER_NAME"
56#endif
57#endif
58
59#if GDB_MULTI_ARCH
60#if defined (EXTRA_FRAME_INFO)
61#error "EXTRA_FRAME_INFO: replaced by struct frame_extra_info"
62#endif
63#endif
64
65#if GDB_MULTI_ARCH
66#if defined (FRAME_FIND_SAVED_REGS)
67#error "FRAME_FIND_SAVED_REGS: replaced by FRAME_INIT_SAVED_REGS"
68#endif
69#endif
70
71
72/* The following are pre-initialized by GDBARCH. */
73
adf40b2e 74extern const struct bfd_arch_info * gdbarch_bfd_arch_info PARAMS ((struct gdbarch *gdbarch));
0f71a2f6
JM
75/* set_gdbarch_bfd_arch_info() - not applicable - pre-initialized. */
76#if GDB_MULTI_ARCH
77#if (GDB_MULTI_ARCH > 1) || !defined (TARGET_ARCHITECTURE)
78#define TARGET_ARCHITECTURE (gdbarch_bfd_arch_info (current_gdbarch))
79#endif
80#endif
81
adf40b2e 82extern int gdbarch_byte_order PARAMS ((struct gdbarch *gdbarch));
0f71a2f6
JM
83/* set_gdbarch_byte_order() - not applicable - pre-initialized. */
84#if GDB_MULTI_ARCH
85#if (GDB_MULTI_ARCH > 1) || !defined (TARGET_BYTE_ORDER)
86#define TARGET_BYTE_ORDER (gdbarch_byte_order (current_gdbarch))
87#endif
88#endif
89
90
91/* The following are initialized by the target dependant code. */
92
adf40b2e
JM
93extern int gdbarch_ptr_bit PARAMS ((struct gdbarch *gdbarch));
94extern void set_gdbarch_ptr_bit PARAMS ((struct gdbarch *gdbarch, int ptr_bit));
0f71a2f6
JM
95#if GDB_MULTI_ARCH
96#if (GDB_MULTI_ARCH > 1) || !defined (TARGET_PTR_BIT)
97#define TARGET_PTR_BIT (gdbarch_ptr_bit (current_gdbarch))
98#endif
99#endif
100
adf40b2e
JM
101extern int gdbarch_short_bit PARAMS ((struct gdbarch *gdbarch));
102extern void set_gdbarch_short_bit PARAMS ((struct gdbarch *gdbarch, int short_bit));
0f71a2f6
JM
103#if GDB_MULTI_ARCH
104#if (GDB_MULTI_ARCH > 1) || !defined (TARGET_SHORT_BIT)
105#define TARGET_SHORT_BIT (gdbarch_short_bit (current_gdbarch))
106#endif
107#endif
108
adf40b2e
JM
109extern int gdbarch_int_bit PARAMS ((struct gdbarch *gdbarch));
110extern void set_gdbarch_int_bit PARAMS ((struct gdbarch *gdbarch, int int_bit));
0f71a2f6
JM
111#if GDB_MULTI_ARCH
112#if (GDB_MULTI_ARCH > 1) || !defined (TARGET_INT_BIT)
113#define TARGET_INT_BIT (gdbarch_int_bit (current_gdbarch))
114#endif
115#endif
116
adf40b2e
JM
117extern int gdbarch_long_bit PARAMS ((struct gdbarch *gdbarch));
118extern void set_gdbarch_long_bit PARAMS ((struct gdbarch *gdbarch, int long_bit));
0f71a2f6
JM
119#if GDB_MULTI_ARCH
120#if (GDB_MULTI_ARCH > 1) || !defined (TARGET_LONG_BIT)
121#define TARGET_LONG_BIT (gdbarch_long_bit (current_gdbarch))
122#endif
123#endif
124
adf40b2e
JM
125extern int gdbarch_long_long_bit PARAMS ((struct gdbarch *gdbarch));
126extern void set_gdbarch_long_long_bit PARAMS ((struct gdbarch *gdbarch, int long_long_bit));
0f71a2f6
JM
127#if GDB_MULTI_ARCH
128#if (GDB_MULTI_ARCH > 1) || !defined (TARGET_LONG_LONG_BIT)
129#define TARGET_LONG_LONG_BIT (gdbarch_long_long_bit (current_gdbarch))
130#endif
131#endif
132
adf40b2e
JM
133extern int gdbarch_float_bit PARAMS ((struct gdbarch *gdbarch));
134extern void set_gdbarch_float_bit PARAMS ((struct gdbarch *gdbarch, int float_bit));
0f71a2f6
JM
135#if GDB_MULTI_ARCH
136#if (GDB_MULTI_ARCH > 1) || !defined (TARGET_FLOAT_BIT)
137#define TARGET_FLOAT_BIT (gdbarch_float_bit (current_gdbarch))
138#endif
139#endif
140
adf40b2e
JM
141extern int gdbarch_double_bit PARAMS ((struct gdbarch *gdbarch));
142extern void set_gdbarch_double_bit PARAMS ((struct gdbarch *gdbarch, int double_bit));
0f71a2f6
JM
143#if GDB_MULTI_ARCH
144#if (GDB_MULTI_ARCH > 1) || !defined (TARGET_DOUBLE_BIT)
145#define TARGET_DOUBLE_BIT (gdbarch_double_bit (current_gdbarch))
146#endif
147#endif
148
adf40b2e
JM
149extern int gdbarch_long_double_bit PARAMS ((struct gdbarch *gdbarch));
150extern void set_gdbarch_long_double_bit PARAMS ((struct gdbarch *gdbarch, int long_double_bit));
0f71a2f6
JM
151#if GDB_MULTI_ARCH
152#if (GDB_MULTI_ARCH > 1) || !defined (TARGET_LONG_DOUBLE_BIT)
153#define TARGET_LONG_DOUBLE_BIT (gdbarch_long_double_bit (current_gdbarch))
154#endif
155#endif
156
adf40b2e
JM
157typedef CORE_ADDR (gdbarch_read_pc_ftype) PARAMS ((int pid));
158extern CORE_ADDR gdbarch_read_pc PARAMS ((struct gdbarch *gdbarch, int pid));
159extern void set_gdbarch_read_pc PARAMS ((struct gdbarch *gdbarch, gdbarch_read_pc_ftype *read_pc));
0f71a2f6
JM
160#if GDB_MULTI_ARCH
161#if (GDB_MULTI_ARCH > 1) || !defined (TARGET_READ_PC)
162#define TARGET_READ_PC(pid) (gdbarch_read_pc (current_gdbarch, pid))
163#endif
164#endif
165
adf40b2e
JM
166typedef void (gdbarch_write_pc_ftype) PARAMS ((CORE_ADDR val, int pid));
167extern void gdbarch_write_pc PARAMS ((struct gdbarch *gdbarch, CORE_ADDR val, int pid));
168extern void set_gdbarch_write_pc PARAMS ((struct gdbarch *gdbarch, gdbarch_write_pc_ftype *write_pc));
0f71a2f6
JM
169#if GDB_MULTI_ARCH
170#if (GDB_MULTI_ARCH > 1) || !defined (TARGET_WRITE_PC)
171#define TARGET_WRITE_PC(val, pid) (gdbarch_write_pc (current_gdbarch, val, pid))
172#endif
173#endif
174
adf40b2e
JM
175typedef CORE_ADDR (gdbarch_read_fp_ftype) PARAMS ((void));
176extern CORE_ADDR gdbarch_read_fp PARAMS ((struct gdbarch *gdbarch));
177extern void set_gdbarch_read_fp PARAMS ((struct gdbarch *gdbarch, gdbarch_read_fp_ftype *read_fp));
0f71a2f6
JM
178#if GDB_MULTI_ARCH
179#if (GDB_MULTI_ARCH > 1) || !defined (TARGET_READ_FP)
180#define TARGET_READ_FP() (gdbarch_read_fp (current_gdbarch))
181#endif
182#endif
183
adf40b2e
JM
184typedef void (gdbarch_write_fp_ftype) PARAMS ((CORE_ADDR val));
185extern void gdbarch_write_fp PARAMS ((struct gdbarch *gdbarch, CORE_ADDR val));
186extern void set_gdbarch_write_fp PARAMS ((struct gdbarch *gdbarch, gdbarch_write_fp_ftype *write_fp));
0f71a2f6
JM
187#if GDB_MULTI_ARCH
188#if (GDB_MULTI_ARCH > 1) || !defined (TARGET_WRITE_FP)
189#define TARGET_WRITE_FP(val) (gdbarch_write_fp (current_gdbarch, val))
190#endif
191#endif
192
adf40b2e
JM
193typedef CORE_ADDR (gdbarch_read_sp_ftype) PARAMS ((void));
194extern CORE_ADDR gdbarch_read_sp PARAMS ((struct gdbarch *gdbarch));
195extern void set_gdbarch_read_sp PARAMS ((struct gdbarch *gdbarch, gdbarch_read_sp_ftype *read_sp));
0f71a2f6
JM
196#if GDB_MULTI_ARCH
197#if (GDB_MULTI_ARCH > 1) || !defined (TARGET_READ_SP)
198#define TARGET_READ_SP() (gdbarch_read_sp (current_gdbarch))
199#endif
200#endif
201
adf40b2e
JM
202typedef void (gdbarch_write_sp_ftype) PARAMS ((CORE_ADDR val));
203extern void gdbarch_write_sp PARAMS ((struct gdbarch *gdbarch, CORE_ADDR val));
204extern void set_gdbarch_write_sp PARAMS ((struct gdbarch *gdbarch, gdbarch_write_sp_ftype *write_sp));
0f71a2f6
JM
205#if GDB_MULTI_ARCH
206#if (GDB_MULTI_ARCH > 1) || !defined (TARGET_WRITE_SP)
207#define TARGET_WRITE_SP(val) (gdbarch_write_sp (current_gdbarch, val))
208#endif
209#endif
210
adf40b2e
JM
211extern int gdbarch_num_regs PARAMS ((struct gdbarch *gdbarch));
212extern void set_gdbarch_num_regs PARAMS ((struct gdbarch *gdbarch, int num_regs));
0f71a2f6
JM
213#if GDB_MULTI_ARCH
214#if (GDB_MULTI_ARCH > 1) || !defined (NUM_REGS)
215#define NUM_REGS (gdbarch_num_regs (current_gdbarch))
216#endif
217#endif
218
adf40b2e
JM
219extern int gdbarch_sp_regnum PARAMS ((struct gdbarch *gdbarch));
220extern void set_gdbarch_sp_regnum PARAMS ((struct gdbarch *gdbarch, int sp_regnum));
0f71a2f6
JM
221#if GDB_MULTI_ARCH
222#if (GDB_MULTI_ARCH > 1) || !defined (SP_REGNUM)
223#define SP_REGNUM (gdbarch_sp_regnum (current_gdbarch))
224#endif
225#endif
226
adf40b2e
JM
227extern int gdbarch_fp_regnum PARAMS ((struct gdbarch *gdbarch));
228extern void set_gdbarch_fp_regnum PARAMS ((struct gdbarch *gdbarch, int fp_regnum));
0f71a2f6
JM
229#if GDB_MULTI_ARCH
230#if (GDB_MULTI_ARCH > 1) || !defined (FP_REGNUM)
231#define FP_REGNUM (gdbarch_fp_regnum (current_gdbarch))
232#endif
233#endif
234
adf40b2e
JM
235extern int gdbarch_pc_regnum PARAMS ((struct gdbarch *gdbarch));
236extern void set_gdbarch_pc_regnum PARAMS ((struct gdbarch *gdbarch, int pc_regnum));
0f71a2f6
JM
237#if GDB_MULTI_ARCH
238#if (GDB_MULTI_ARCH > 1) || !defined (PC_REGNUM)
239#define PC_REGNUM (gdbarch_pc_regnum (current_gdbarch))
240#endif
241#endif
242
adf40b2e
JM
243typedef char * (gdbarch_register_name_ftype) PARAMS ((int regnr));
244extern char * gdbarch_register_name PARAMS ((struct gdbarch *gdbarch, int regnr));
245extern void set_gdbarch_register_name PARAMS ((struct gdbarch *gdbarch, gdbarch_register_name_ftype *register_name));
0f71a2f6
JM
246#if GDB_MULTI_ARCH
247#if (GDB_MULTI_ARCH > 1) || !defined (REGISTER_NAME)
248#define REGISTER_NAME(regnr) (gdbarch_register_name (current_gdbarch, regnr))
249#endif
250#endif
251
adf40b2e
JM
252extern int gdbarch_register_size PARAMS ((struct gdbarch *gdbarch));
253extern void set_gdbarch_register_size PARAMS ((struct gdbarch *gdbarch, int register_size));
0f71a2f6
JM
254#if GDB_MULTI_ARCH
255#if (GDB_MULTI_ARCH > 1) || !defined (REGISTER_SIZE)
256#define REGISTER_SIZE (gdbarch_register_size (current_gdbarch))
257#endif
258#endif
259
adf40b2e
JM
260extern int gdbarch_register_bytes PARAMS ((struct gdbarch *gdbarch));
261extern void set_gdbarch_register_bytes PARAMS ((struct gdbarch *gdbarch, int register_bytes));
0f71a2f6
JM
262#if GDB_MULTI_ARCH
263#if (GDB_MULTI_ARCH > 1) || !defined (REGISTER_BYTES)
264#define REGISTER_BYTES (gdbarch_register_bytes (current_gdbarch))
265#endif
266#endif
267
adf40b2e
JM
268typedef int (gdbarch_register_byte_ftype) PARAMS ((int reg_nr));
269extern int gdbarch_register_byte PARAMS ((struct gdbarch *gdbarch, int reg_nr));
270extern void set_gdbarch_register_byte PARAMS ((struct gdbarch *gdbarch, gdbarch_register_byte_ftype *register_byte));
0f71a2f6
JM
271#if GDB_MULTI_ARCH
272#if (GDB_MULTI_ARCH > 1) || !defined (REGISTER_BYTE)
273#define REGISTER_BYTE(reg_nr) (gdbarch_register_byte (current_gdbarch, reg_nr))
274#endif
275#endif
276
adf40b2e
JM
277typedef int (gdbarch_register_raw_size_ftype) PARAMS ((int reg_nr));
278extern int gdbarch_register_raw_size PARAMS ((struct gdbarch *gdbarch, int reg_nr));
279extern void set_gdbarch_register_raw_size PARAMS ((struct gdbarch *gdbarch, gdbarch_register_raw_size_ftype *register_raw_size));
0f71a2f6
JM
280#if GDB_MULTI_ARCH
281#if (GDB_MULTI_ARCH > 1) || !defined (REGISTER_RAW_SIZE)
282#define REGISTER_RAW_SIZE(reg_nr) (gdbarch_register_raw_size (current_gdbarch, reg_nr))
283#endif
284#endif
285
adf40b2e
JM
286extern int gdbarch_max_register_raw_size PARAMS ((struct gdbarch *gdbarch));
287extern void set_gdbarch_max_register_raw_size PARAMS ((struct gdbarch *gdbarch, int max_register_raw_size));
0f71a2f6
JM
288#if GDB_MULTI_ARCH
289#if (GDB_MULTI_ARCH > 1) || !defined (MAX_REGISTER_RAW_SIZE)
290#define MAX_REGISTER_RAW_SIZE (gdbarch_max_register_raw_size (current_gdbarch))
291#endif
292#endif
293
adf40b2e
JM
294typedef int (gdbarch_register_virtual_size_ftype) PARAMS ((int reg_nr));
295extern int gdbarch_register_virtual_size PARAMS ((struct gdbarch *gdbarch, int reg_nr));
296extern void set_gdbarch_register_virtual_size PARAMS ((struct gdbarch *gdbarch, gdbarch_register_virtual_size_ftype *register_virtual_size));
0f71a2f6
JM
297#if GDB_MULTI_ARCH
298#if (GDB_MULTI_ARCH > 1) || !defined (REGISTER_VIRTUAL_SIZE)
299#define REGISTER_VIRTUAL_SIZE(reg_nr) (gdbarch_register_virtual_size (current_gdbarch, reg_nr))
300#endif
301#endif
302
adf40b2e
JM
303extern int gdbarch_max_register_virtual_size PARAMS ((struct gdbarch *gdbarch));
304extern void set_gdbarch_max_register_virtual_size PARAMS ((struct gdbarch *gdbarch, int max_register_virtual_size));
0f71a2f6
JM
305#if GDB_MULTI_ARCH
306#if (GDB_MULTI_ARCH > 1) || !defined (MAX_REGISTER_VIRTUAL_SIZE)
307#define MAX_REGISTER_VIRTUAL_SIZE (gdbarch_max_register_virtual_size (current_gdbarch))
308#endif
309#endif
310
adf40b2e
JM
311typedef struct type * (gdbarch_register_virtual_type_ftype) PARAMS ((int reg_nr));
312extern struct type * gdbarch_register_virtual_type PARAMS ((struct gdbarch *gdbarch, int reg_nr));
313extern void set_gdbarch_register_virtual_type PARAMS ((struct gdbarch *gdbarch, gdbarch_register_virtual_type_ftype *register_virtual_type));
0f71a2f6
JM
314#if GDB_MULTI_ARCH
315#if (GDB_MULTI_ARCH > 1) || !defined (REGISTER_VIRTUAL_TYPE)
316#define REGISTER_VIRTUAL_TYPE(reg_nr) (gdbarch_register_virtual_type (current_gdbarch, reg_nr))
317#endif
318#endif
319
adf40b2e
JM
320extern int gdbarch_use_generic_dummy_frames PARAMS ((struct gdbarch *gdbarch));
321extern void set_gdbarch_use_generic_dummy_frames PARAMS ((struct gdbarch *gdbarch, int use_generic_dummy_frames));
0f71a2f6
JM
322#if GDB_MULTI_ARCH
323#if (GDB_MULTI_ARCH > 1) || !defined (USE_GENERIC_DUMMY_FRAMES)
324#define USE_GENERIC_DUMMY_FRAMES (gdbarch_use_generic_dummy_frames (current_gdbarch))
325#endif
326#endif
327
adf40b2e
JM
328extern int gdbarch_call_dummy_location PARAMS ((struct gdbarch *gdbarch));
329extern void set_gdbarch_call_dummy_location PARAMS ((struct gdbarch *gdbarch, int call_dummy_location));
0f71a2f6
JM
330#if GDB_MULTI_ARCH
331#if (GDB_MULTI_ARCH > 1) || !defined (CALL_DUMMY_LOCATION)
332#define CALL_DUMMY_LOCATION (gdbarch_call_dummy_location (current_gdbarch))
333#endif
334#endif
335
adf40b2e
JM
336typedef CORE_ADDR (gdbarch_call_dummy_address_ftype) PARAMS ((void));
337extern CORE_ADDR gdbarch_call_dummy_address PARAMS ((struct gdbarch *gdbarch));
338extern void set_gdbarch_call_dummy_address PARAMS ((struct gdbarch *gdbarch, gdbarch_call_dummy_address_ftype *call_dummy_address));
0f71a2f6
JM
339#if GDB_MULTI_ARCH
340#if (GDB_MULTI_ARCH > 1) || !defined (CALL_DUMMY_ADDRESS)
341#define CALL_DUMMY_ADDRESS() (gdbarch_call_dummy_address (current_gdbarch))
342#endif
343#endif
344
adf40b2e
JM
345extern CORE_ADDR gdbarch_call_dummy_start_offset PARAMS ((struct gdbarch *gdbarch));
346extern void set_gdbarch_call_dummy_start_offset PARAMS ((struct gdbarch *gdbarch, CORE_ADDR call_dummy_start_offset));
0f71a2f6
JM
347#if GDB_MULTI_ARCH
348#if (GDB_MULTI_ARCH > 1) || !defined (CALL_DUMMY_START_OFFSET)
349#define CALL_DUMMY_START_OFFSET (gdbarch_call_dummy_start_offset (current_gdbarch))
350#endif
351#endif
352
adf40b2e
JM
353extern CORE_ADDR gdbarch_call_dummy_breakpoint_offset PARAMS ((struct gdbarch *gdbarch));
354extern void set_gdbarch_call_dummy_breakpoint_offset PARAMS ((struct gdbarch *gdbarch, CORE_ADDR call_dummy_breakpoint_offset));
0f71a2f6
JM
355#if GDB_MULTI_ARCH
356#if (GDB_MULTI_ARCH > 1) || !defined (CALL_DUMMY_BREAKPOINT_OFFSET)
357#define CALL_DUMMY_BREAKPOINT_OFFSET (gdbarch_call_dummy_breakpoint_offset (current_gdbarch))
358#endif
359#endif
360
adf40b2e
JM
361extern int gdbarch_call_dummy_breakpoint_offset_p PARAMS ((struct gdbarch *gdbarch));
362extern void set_gdbarch_call_dummy_breakpoint_offset_p PARAMS ((struct gdbarch *gdbarch, int call_dummy_breakpoint_offset_p));
0f71a2f6
JM
363#if GDB_MULTI_ARCH
364#if (GDB_MULTI_ARCH > 1) || !defined (CALL_DUMMY_BREAKPOINT_OFFSET_P)
365#define CALL_DUMMY_BREAKPOINT_OFFSET_P (gdbarch_call_dummy_breakpoint_offset_p (current_gdbarch))
366#endif
367#endif
368
adf40b2e
JM
369extern int gdbarch_call_dummy_length PARAMS ((struct gdbarch *gdbarch));
370extern void set_gdbarch_call_dummy_length PARAMS ((struct gdbarch *gdbarch, int call_dummy_length));
0f71a2f6
JM
371#if GDB_MULTI_ARCH
372#if (GDB_MULTI_ARCH > 1) || !defined (CALL_DUMMY_LENGTH)
373#define CALL_DUMMY_LENGTH (gdbarch_call_dummy_length (current_gdbarch))
374#endif
375#endif
376
adf40b2e
JM
377typedef int (gdbarch_pc_in_call_dummy_ftype) PARAMS ((CORE_ADDR pc, CORE_ADDR sp, CORE_ADDR frame_address));
378extern int gdbarch_pc_in_call_dummy PARAMS ((struct gdbarch *gdbarch, CORE_ADDR pc, CORE_ADDR sp, CORE_ADDR frame_address));
379extern void set_gdbarch_pc_in_call_dummy PARAMS ((struct gdbarch *gdbarch, gdbarch_pc_in_call_dummy_ftype *pc_in_call_dummy));
0f71a2f6
JM
380#if GDB_MULTI_ARCH
381#if (GDB_MULTI_ARCH > 1) || !defined (PC_IN_CALL_DUMMY)
382#define PC_IN_CALL_DUMMY(pc, sp, frame_address) (gdbarch_pc_in_call_dummy (current_gdbarch, pc, sp, frame_address))
383#endif
384#endif
385
adf40b2e
JM
386extern int gdbarch_call_dummy_p PARAMS ((struct gdbarch *gdbarch));
387extern void set_gdbarch_call_dummy_p PARAMS ((struct gdbarch *gdbarch, int call_dummy_p));
0f71a2f6
JM
388#if GDB_MULTI_ARCH
389#if (GDB_MULTI_ARCH > 1) || !defined (CALL_DUMMY_P)
390#define CALL_DUMMY_P (gdbarch_call_dummy_p (current_gdbarch))
391#endif
392#endif
393
adf40b2e
JM
394extern LONGEST * gdbarch_call_dummy_words PARAMS ((struct gdbarch *gdbarch));
395extern void set_gdbarch_call_dummy_words PARAMS ((struct gdbarch *gdbarch, LONGEST * call_dummy_words));
0f71a2f6
JM
396#if GDB_MULTI_ARCH
397#if (GDB_MULTI_ARCH > 1) || !defined (CALL_DUMMY_WORDS)
398#define CALL_DUMMY_WORDS (gdbarch_call_dummy_words (current_gdbarch))
399#endif
400#endif
401
adf40b2e
JM
402extern int gdbarch_sizeof_call_dummy_words PARAMS ((struct gdbarch *gdbarch));
403extern void set_gdbarch_sizeof_call_dummy_words PARAMS ((struct gdbarch *gdbarch, int sizeof_call_dummy_words));
0f71a2f6
JM
404#if GDB_MULTI_ARCH
405#if (GDB_MULTI_ARCH > 1) || !defined (SIZEOF_CALL_DUMMY_WORDS)
406#define SIZEOF_CALL_DUMMY_WORDS (gdbarch_sizeof_call_dummy_words (current_gdbarch))
407#endif
408#endif
409
adf40b2e
JM
410extern int gdbarch_call_dummy_stack_adjust_p PARAMS ((struct gdbarch *gdbarch));
411extern void set_gdbarch_call_dummy_stack_adjust_p PARAMS ((struct gdbarch *gdbarch, int call_dummy_stack_adjust_p));
0f71a2f6
JM
412#if GDB_MULTI_ARCH
413#if (GDB_MULTI_ARCH > 1) || !defined (CALL_DUMMY_STACK_ADJUST_P)
414#define CALL_DUMMY_STACK_ADJUST_P (gdbarch_call_dummy_stack_adjust_p (current_gdbarch))
415#endif
416#endif
417
adf40b2e
JM
418extern int gdbarch_call_dummy_stack_adjust PARAMS ((struct gdbarch *gdbarch));
419extern void set_gdbarch_call_dummy_stack_adjust PARAMS ((struct gdbarch *gdbarch, int call_dummy_stack_adjust));
0f71a2f6
JM
420#if GDB_MULTI_ARCH
421#if (GDB_MULTI_ARCH > 1) || !defined (CALL_DUMMY_STACK_ADJUST)
422#define CALL_DUMMY_STACK_ADJUST (gdbarch_call_dummy_stack_adjust (current_gdbarch))
423#endif
424#endif
425
adf40b2e
JM
426typedef void (gdbarch_fix_call_dummy_ftype) PARAMS ((char *dummy, CORE_ADDR pc, CORE_ADDR fun, int nargs, struct value **args, struct type *type, int gcc_p));
427extern void gdbarch_fix_call_dummy PARAMS ((struct gdbarch *gdbarch, char *dummy, CORE_ADDR pc, CORE_ADDR fun, int nargs, struct value **args, struct type *type, int gcc_p));
428extern void set_gdbarch_fix_call_dummy PARAMS ((struct gdbarch *gdbarch, gdbarch_fix_call_dummy_ftype *fix_call_dummy));
0f71a2f6
JM
429#if GDB_MULTI_ARCH
430#if (GDB_MULTI_ARCH > 1) || !defined (FIX_CALL_DUMMY)
431#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))
432#endif
433#endif
434
adf40b2e
JM
435extern int gdbarch_believe_pcc_promotion PARAMS ((struct gdbarch *gdbarch));
436extern void set_gdbarch_believe_pcc_promotion PARAMS ((struct gdbarch *gdbarch, int believe_pcc_promotion));
0f71a2f6
JM
437#if GDB_MULTI_ARCH
438#if (GDB_MULTI_ARCH > 1) || !defined (BELIEVE_PCC_PROMOTION)
439#define BELIEVE_PCC_PROMOTION (gdbarch_believe_pcc_promotion (current_gdbarch))
440#endif
441#endif
442
adf40b2e
JM
443extern int gdbarch_believe_pcc_promotion_type PARAMS ((struct gdbarch *gdbarch));
444extern void set_gdbarch_believe_pcc_promotion_type PARAMS ((struct gdbarch *gdbarch, int believe_pcc_promotion_type));
0f71a2f6
JM
445#if GDB_MULTI_ARCH
446#if (GDB_MULTI_ARCH > 1) || !defined (BELIEVE_PCC_PROMOTION_TYPE)
447#define BELIEVE_PCC_PROMOTION_TYPE (gdbarch_believe_pcc_promotion_type (current_gdbarch))
448#endif
449#endif
450
adf40b2e
JM
451typedef void (gdbarch_get_saved_register_ftype) PARAMS ((char *raw_buffer, int *optimized, CORE_ADDR *addrp, struct frame_info *frame, int regnum, enum lval_type *lval));
452extern void gdbarch_get_saved_register PARAMS ((struct gdbarch *gdbarch, char *raw_buffer, int *optimized, CORE_ADDR *addrp, struct frame_info *frame, int regnum, enum lval_type *lval));
453extern void set_gdbarch_get_saved_register PARAMS ((struct gdbarch *gdbarch, gdbarch_get_saved_register_ftype *get_saved_register));
0f71a2f6
JM
454#if GDB_MULTI_ARCH
455#if (GDB_MULTI_ARCH > 1) || !defined (GET_SAVED_REGISTER)
456#define GET_SAVED_REGISTER(raw_buffer, optimized, addrp, frame, regnum, lval) (gdbarch_get_saved_register (current_gdbarch, raw_buffer, optimized, addrp, frame, regnum, lval))
457#endif
458#endif
459
adf40b2e
JM
460typedef int (gdbarch_register_convertible_ftype) PARAMS ((int nr));
461extern int gdbarch_register_convertible PARAMS ((struct gdbarch *gdbarch, int nr));
462extern void set_gdbarch_register_convertible PARAMS ((struct gdbarch *gdbarch, gdbarch_register_convertible_ftype *register_convertible));
0f71a2f6
JM
463#if GDB_MULTI_ARCH
464#if (GDB_MULTI_ARCH > 1) || !defined (REGISTER_CONVERTIBLE)
465#define REGISTER_CONVERTIBLE(nr) (gdbarch_register_convertible (current_gdbarch, nr))
466#endif
467#endif
468
adf40b2e
JM
469typedef void (gdbarch_register_convert_to_virtual_ftype) PARAMS ((int regnum, struct type *type, char *from, char *to));
470extern void gdbarch_register_convert_to_virtual PARAMS ((struct gdbarch *gdbarch, int regnum, struct type *type, char *from, char *to));
471extern void set_gdbarch_register_convert_to_virtual PARAMS ((struct gdbarch *gdbarch, gdbarch_register_convert_to_virtual_ftype *register_convert_to_virtual));
0f71a2f6
JM
472#if GDB_MULTI_ARCH
473#if (GDB_MULTI_ARCH > 1) || !defined (REGISTER_CONVERT_TO_VIRTUAL)
474#define REGISTER_CONVERT_TO_VIRTUAL(regnum, type, from, to) (gdbarch_register_convert_to_virtual (current_gdbarch, regnum, type, from, to))
475#endif
476#endif
477
adf40b2e
JM
478typedef void (gdbarch_register_convert_to_raw_ftype) PARAMS ((struct type *type, int regnum, char *from, char *to));
479extern void gdbarch_register_convert_to_raw PARAMS ((struct gdbarch *gdbarch, struct type *type, int regnum, char *from, char *to));
480extern void set_gdbarch_register_convert_to_raw PARAMS ((struct gdbarch *gdbarch, gdbarch_register_convert_to_raw_ftype *register_convert_to_raw));
0f71a2f6
JM
481#if GDB_MULTI_ARCH
482#if (GDB_MULTI_ARCH > 1) || !defined (REGISTER_CONVERT_TO_RAW)
483#define REGISTER_CONVERT_TO_RAW(type, regnum, from, to) (gdbarch_register_convert_to_raw (current_gdbarch, type, regnum, from, to))
484#endif
485#endif
486
adf40b2e
JM
487typedef void (gdbarch_extract_return_value_ftype) PARAMS ((struct type *type, char *regbuf, char *valbuf));
488extern void gdbarch_extract_return_value PARAMS ((struct gdbarch *gdbarch, struct type *type, char *regbuf, char *valbuf));
489extern void set_gdbarch_extract_return_value PARAMS ((struct gdbarch *gdbarch, gdbarch_extract_return_value_ftype *extract_return_value));
0f71a2f6
JM
490#if GDB_MULTI_ARCH
491#if (GDB_MULTI_ARCH > 1) || !defined (EXTRACT_RETURN_VALUE)
492#define EXTRACT_RETURN_VALUE(type, regbuf, valbuf) (gdbarch_extract_return_value (current_gdbarch, type, regbuf, valbuf))
493#endif
494#endif
495
adf40b2e
JM
496typedef CORE_ADDR (gdbarch_push_arguments_ftype) PARAMS ((int nargs, struct value **args, CORE_ADDR sp, int struct_return, CORE_ADDR struct_addr));
497extern CORE_ADDR gdbarch_push_arguments PARAMS ((struct gdbarch *gdbarch, int nargs, struct value **args, CORE_ADDR sp, int struct_return, CORE_ADDR struct_addr));
498extern void set_gdbarch_push_arguments PARAMS ((struct gdbarch *gdbarch, gdbarch_push_arguments_ftype *push_arguments));
0f71a2f6
JM
499#if GDB_MULTI_ARCH
500#if (GDB_MULTI_ARCH > 1) || !defined (PUSH_ARGUMENTS)
501#define PUSH_ARGUMENTS(nargs, args, sp, struct_return, struct_addr) (gdbarch_push_arguments (current_gdbarch, nargs, args, sp, struct_return, struct_addr))
502#endif
503#endif
504
adf40b2e
JM
505typedef void (gdbarch_push_dummy_frame_ftype) PARAMS ((void));
506extern void gdbarch_push_dummy_frame PARAMS ((struct gdbarch *gdbarch));
507extern void set_gdbarch_push_dummy_frame PARAMS ((struct gdbarch *gdbarch, gdbarch_push_dummy_frame_ftype *push_dummy_frame));
0f71a2f6
JM
508#if GDB_MULTI_ARCH
509#if (GDB_MULTI_ARCH > 1) || !defined (PUSH_DUMMY_FRAME)
510#define PUSH_DUMMY_FRAME (gdbarch_push_dummy_frame (current_gdbarch))
511#endif
512#endif
513
adf40b2e
JM
514typedef CORE_ADDR (gdbarch_push_return_address_ftype) PARAMS ((CORE_ADDR pc, CORE_ADDR sp));
515extern CORE_ADDR gdbarch_push_return_address PARAMS ((struct gdbarch *gdbarch, CORE_ADDR pc, CORE_ADDR sp));
516extern void set_gdbarch_push_return_address PARAMS ((struct gdbarch *gdbarch, gdbarch_push_return_address_ftype *push_return_address));
0f71a2f6
JM
517#if GDB_MULTI_ARCH
518#if (GDB_MULTI_ARCH > 1) || !defined (PUSH_RETURN_ADDRESS)
519#define PUSH_RETURN_ADDRESS(pc, sp) (gdbarch_push_return_address (current_gdbarch, pc, sp))
520#endif
521#endif
522
adf40b2e
JM
523typedef void (gdbarch_pop_frame_ftype) PARAMS ((void));
524extern void gdbarch_pop_frame PARAMS ((struct gdbarch *gdbarch));
525extern void set_gdbarch_pop_frame PARAMS ((struct gdbarch *gdbarch, gdbarch_pop_frame_ftype *pop_frame));
0f71a2f6
JM
526#if GDB_MULTI_ARCH
527#if (GDB_MULTI_ARCH > 1) || !defined (POP_FRAME)
528#define POP_FRAME (gdbarch_pop_frame (current_gdbarch))
529#endif
530#endif
531
adf40b2e
JM
532typedef CORE_ADDR (gdbarch_d10v_make_daddr_ftype) PARAMS ((CORE_ADDR x));
533extern CORE_ADDR gdbarch_d10v_make_daddr PARAMS ((struct gdbarch *gdbarch, CORE_ADDR x));
534extern void set_gdbarch_d10v_make_daddr PARAMS ((struct gdbarch *gdbarch, gdbarch_d10v_make_daddr_ftype *d10v_make_daddr));
0f71a2f6
JM
535#if GDB_MULTI_ARCH
536#if (GDB_MULTI_ARCH > 1) || !defined (D10V_MAKE_DADDR)
537#define D10V_MAKE_DADDR(x) (gdbarch_d10v_make_daddr (current_gdbarch, x))
538#endif
539#endif
540
adf40b2e
JM
541typedef CORE_ADDR (gdbarch_d10v_make_iaddr_ftype) PARAMS ((CORE_ADDR x));
542extern CORE_ADDR gdbarch_d10v_make_iaddr PARAMS ((struct gdbarch *gdbarch, CORE_ADDR x));
543extern void set_gdbarch_d10v_make_iaddr PARAMS ((struct gdbarch *gdbarch, gdbarch_d10v_make_iaddr_ftype *d10v_make_iaddr));
0f71a2f6
JM
544#if GDB_MULTI_ARCH
545#if (GDB_MULTI_ARCH > 1) || !defined (D10V_MAKE_IADDR)
546#define D10V_MAKE_IADDR(x) (gdbarch_d10v_make_iaddr (current_gdbarch, x))
547#endif
548#endif
549
adf40b2e
JM
550typedef int (gdbarch_d10v_daddr_p_ftype) PARAMS ((CORE_ADDR x));
551extern int gdbarch_d10v_daddr_p PARAMS ((struct gdbarch *gdbarch, CORE_ADDR x));
552extern void set_gdbarch_d10v_daddr_p PARAMS ((struct gdbarch *gdbarch, gdbarch_d10v_daddr_p_ftype *d10v_daddr_p));
0f71a2f6
JM
553#if GDB_MULTI_ARCH
554#if (GDB_MULTI_ARCH > 1) || !defined (D10V_DADDR_P)
555#define D10V_DADDR_P(x) (gdbarch_d10v_daddr_p (current_gdbarch, x))
556#endif
557#endif
558
adf40b2e
JM
559typedef int (gdbarch_d10v_iaddr_p_ftype) PARAMS ((CORE_ADDR x));
560extern int gdbarch_d10v_iaddr_p PARAMS ((struct gdbarch *gdbarch, CORE_ADDR x));
561extern void set_gdbarch_d10v_iaddr_p PARAMS ((struct gdbarch *gdbarch, gdbarch_d10v_iaddr_p_ftype *d10v_iaddr_p));
0f71a2f6
JM
562#if GDB_MULTI_ARCH
563#if (GDB_MULTI_ARCH > 1) || !defined (D10V_IADDR_P)
564#define D10V_IADDR_P(x) (gdbarch_d10v_iaddr_p (current_gdbarch, x))
565#endif
566#endif
567
adf40b2e
JM
568typedef CORE_ADDR (gdbarch_d10v_convert_daddr_to_raw_ftype) PARAMS ((CORE_ADDR x));
569extern CORE_ADDR gdbarch_d10v_convert_daddr_to_raw PARAMS ((struct gdbarch *gdbarch, CORE_ADDR x));
570extern void set_gdbarch_d10v_convert_daddr_to_raw PARAMS ((struct gdbarch *gdbarch, gdbarch_d10v_convert_daddr_to_raw_ftype *d10v_convert_daddr_to_raw));
0f71a2f6
JM
571#if GDB_MULTI_ARCH
572#if (GDB_MULTI_ARCH > 1) || !defined (D10V_CONVERT_DADDR_TO_RAW)
573#define D10V_CONVERT_DADDR_TO_RAW(x) (gdbarch_d10v_convert_daddr_to_raw (current_gdbarch, x))
574#endif
575#endif
576
adf40b2e
JM
577typedef CORE_ADDR (gdbarch_d10v_convert_iaddr_to_raw_ftype) PARAMS ((CORE_ADDR x));
578extern CORE_ADDR gdbarch_d10v_convert_iaddr_to_raw PARAMS ((struct gdbarch *gdbarch, CORE_ADDR x));
579extern void set_gdbarch_d10v_convert_iaddr_to_raw PARAMS ((struct gdbarch *gdbarch, gdbarch_d10v_convert_iaddr_to_raw_ftype *d10v_convert_iaddr_to_raw));
0f71a2f6
JM
580#if GDB_MULTI_ARCH
581#if (GDB_MULTI_ARCH > 1) || !defined (D10V_CONVERT_IADDR_TO_RAW)
582#define D10V_CONVERT_IADDR_TO_RAW(x) (gdbarch_d10v_convert_iaddr_to_raw (current_gdbarch, x))
583#endif
584#endif
585
adf40b2e
JM
586typedef void (gdbarch_store_struct_return_ftype) PARAMS ((CORE_ADDR addr, CORE_ADDR sp));
587extern void gdbarch_store_struct_return PARAMS ((struct gdbarch *gdbarch, CORE_ADDR addr, CORE_ADDR sp));
588extern void set_gdbarch_store_struct_return PARAMS ((struct gdbarch *gdbarch, gdbarch_store_struct_return_ftype *store_struct_return));
0f71a2f6
JM
589#if GDB_MULTI_ARCH
590#if (GDB_MULTI_ARCH > 1) || !defined (STORE_STRUCT_RETURN)
591#define STORE_STRUCT_RETURN(addr, sp) (gdbarch_store_struct_return (current_gdbarch, addr, sp))
592#endif
593#endif
594
adf40b2e
JM
595typedef void (gdbarch_store_return_value_ftype) PARAMS ((struct type *type, char *valbuf));
596extern void gdbarch_store_return_value PARAMS ((struct gdbarch *gdbarch, struct type *type, char *valbuf));
597extern void set_gdbarch_store_return_value PARAMS ((struct gdbarch *gdbarch, gdbarch_store_return_value_ftype *store_return_value));
0f71a2f6
JM
598#if GDB_MULTI_ARCH
599#if (GDB_MULTI_ARCH > 1) || !defined (STORE_RETURN_VALUE)
600#define STORE_RETURN_VALUE(type, valbuf) (gdbarch_store_return_value (current_gdbarch, type, valbuf))
601#endif
602#endif
603
adf40b2e
JM
604typedef CORE_ADDR (gdbarch_extract_struct_value_address_ftype) PARAMS ((char *regbuf));
605extern CORE_ADDR gdbarch_extract_struct_value_address PARAMS ((struct gdbarch *gdbarch, char *regbuf));
606extern void set_gdbarch_extract_struct_value_address PARAMS ((struct gdbarch *gdbarch, gdbarch_extract_struct_value_address_ftype *extract_struct_value_address));
0f71a2f6
JM
607#if GDB_MULTI_ARCH
608#if (GDB_MULTI_ARCH > 1) || !defined (EXTRACT_STRUCT_VALUE_ADDRESS)
609#define EXTRACT_STRUCT_VALUE_ADDRESS(regbuf) (gdbarch_extract_struct_value_address (current_gdbarch, regbuf))
610#endif
611#endif
612
adf40b2e
JM
613typedef int (gdbarch_use_struct_convention_ftype) PARAMS ((int gcc_p, struct type *value_type));
614extern int gdbarch_use_struct_convention PARAMS ((struct gdbarch *gdbarch, int gcc_p, struct type *value_type));
615extern void set_gdbarch_use_struct_convention PARAMS ((struct gdbarch *gdbarch, gdbarch_use_struct_convention_ftype *use_struct_convention));
0f71a2f6
JM
616#if GDB_MULTI_ARCH
617#if (GDB_MULTI_ARCH > 1) || !defined (USE_STRUCT_CONVENTION)
618#define USE_STRUCT_CONVENTION(gcc_p, value_type) (gdbarch_use_struct_convention (current_gdbarch, gcc_p, value_type))
619#endif
620#endif
621
adf40b2e
JM
622typedef void (gdbarch_frame_init_saved_regs_ftype) PARAMS ((struct frame_info *frame));
623extern void gdbarch_frame_init_saved_regs PARAMS ((struct gdbarch *gdbarch, struct frame_info *frame));
624extern void set_gdbarch_frame_init_saved_regs PARAMS ((struct gdbarch *gdbarch, gdbarch_frame_init_saved_regs_ftype *frame_init_saved_regs));
0f71a2f6
JM
625#if GDB_MULTI_ARCH
626#if (GDB_MULTI_ARCH > 1) || !defined (FRAME_INIT_SAVED_REGS)
627#define FRAME_INIT_SAVED_REGS(frame) (gdbarch_frame_init_saved_regs (current_gdbarch, frame))
628#endif
629#endif
630
adf40b2e
JM
631typedef void (gdbarch_init_extra_frame_info_ftype) PARAMS ((int fromleaf, struct frame_info *frame));
632extern void gdbarch_init_extra_frame_info PARAMS ((struct gdbarch *gdbarch, int fromleaf, struct frame_info *frame));
633extern void set_gdbarch_init_extra_frame_info PARAMS ((struct gdbarch *gdbarch, gdbarch_init_extra_frame_info_ftype *init_extra_frame_info));
0f71a2f6
JM
634#if GDB_MULTI_ARCH
635#if (GDB_MULTI_ARCH > 1) || !defined (INIT_EXTRA_FRAME_INFO)
636#define INIT_EXTRA_FRAME_INFO(fromleaf, frame) (gdbarch_init_extra_frame_info (current_gdbarch, fromleaf, frame))
637#endif
638#endif
639
adf40b2e
JM
640typedef CORE_ADDR (gdbarch_skip_prologue_ftype) PARAMS ((CORE_ADDR ip));
641extern CORE_ADDR gdbarch_skip_prologue PARAMS ((struct gdbarch *gdbarch, CORE_ADDR ip));
642extern void set_gdbarch_skip_prologue PARAMS ((struct gdbarch *gdbarch, gdbarch_skip_prologue_ftype *skip_prologue));
0f71a2f6
JM
643#if GDB_MULTI_ARCH
644#if (GDB_MULTI_ARCH > 1) || !defined (SKIP_PROLOGUE)
645#define SKIP_PROLOGUE(ip) (gdbarch_skip_prologue (current_gdbarch, ip))
646#endif
647#endif
648
adf40b2e
JM
649typedef int (gdbarch_inner_than_ftype) PARAMS ((CORE_ADDR lhs, CORE_ADDR rhs));
650extern int gdbarch_inner_than PARAMS ((struct gdbarch *gdbarch, CORE_ADDR lhs, CORE_ADDR rhs));
651extern void set_gdbarch_inner_than PARAMS ((struct gdbarch *gdbarch, gdbarch_inner_than_ftype *inner_than));
0f71a2f6
JM
652#if GDB_MULTI_ARCH
653#if (GDB_MULTI_ARCH > 1) || !defined (INNER_THAN)
654#define INNER_THAN(lhs, rhs) (gdbarch_inner_than (current_gdbarch, lhs, rhs))
655#endif
656#endif
657
adf40b2e
JM
658typedef unsigned char * (gdbarch_breakpoint_from_pc_ftype) PARAMS ((CORE_ADDR *pcptr, int *lenptr));
659extern unsigned char * gdbarch_breakpoint_from_pc PARAMS ((struct gdbarch *gdbarch, CORE_ADDR *pcptr, int *lenptr));
660extern void set_gdbarch_breakpoint_from_pc PARAMS ((struct gdbarch *gdbarch, gdbarch_breakpoint_from_pc_ftype *breakpoint_from_pc));
0f71a2f6
JM
661#if GDB_MULTI_ARCH
662#if (GDB_MULTI_ARCH > 1) || !defined (BREAKPOINT_FROM_PC)
663#define BREAKPOINT_FROM_PC(pcptr, lenptr) (gdbarch_breakpoint_from_pc (current_gdbarch, pcptr, lenptr))
664#endif
665#endif
666
adf40b2e
JM
667extern CORE_ADDR gdbarch_decr_pc_after_break PARAMS ((struct gdbarch *gdbarch));
668extern void set_gdbarch_decr_pc_after_break PARAMS ((struct gdbarch *gdbarch, CORE_ADDR decr_pc_after_break));
0f71a2f6
JM
669#if GDB_MULTI_ARCH
670#if (GDB_MULTI_ARCH > 1) || !defined (DECR_PC_AFTER_BREAK)
671#define DECR_PC_AFTER_BREAK (gdbarch_decr_pc_after_break (current_gdbarch))
672#endif
673#endif
674
adf40b2e
JM
675extern CORE_ADDR gdbarch_function_start_offset PARAMS ((struct gdbarch *gdbarch));
676extern void set_gdbarch_function_start_offset PARAMS ((struct gdbarch *gdbarch, CORE_ADDR function_start_offset));
0f71a2f6
JM
677#if GDB_MULTI_ARCH
678#if (GDB_MULTI_ARCH > 1) || !defined (FUNCTION_START_OFFSET)
679#define FUNCTION_START_OFFSET (gdbarch_function_start_offset (current_gdbarch))
680#endif
681#endif
682
adf40b2e
JM
683typedef void (gdbarch_remote_translate_xfer_address_ftype) PARAMS ((CORE_ADDR gdb_addr, int gdb_len, CORE_ADDR *rem_addr, int *rem_len));
684extern void gdbarch_remote_translate_xfer_address PARAMS ((struct gdbarch *gdbarch, CORE_ADDR gdb_addr, int gdb_len, CORE_ADDR *rem_addr, int *rem_len));
685extern void set_gdbarch_remote_translate_xfer_address PARAMS ((struct gdbarch *gdbarch, gdbarch_remote_translate_xfer_address_ftype *remote_translate_xfer_address));
0f71a2f6
JM
686#if GDB_MULTI_ARCH
687#if (GDB_MULTI_ARCH > 1) || !defined (REMOTE_TRANSLATE_XFER_ADDRESS)
688#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))
689#endif
690#endif
691
adf40b2e
JM
692extern CORE_ADDR gdbarch_frame_args_skip PARAMS ((struct gdbarch *gdbarch));
693extern void set_gdbarch_frame_args_skip PARAMS ((struct gdbarch *gdbarch, CORE_ADDR frame_args_skip));
0f71a2f6
JM
694#if GDB_MULTI_ARCH
695#if (GDB_MULTI_ARCH > 1) || !defined (FRAME_ARGS_SKIP)
696#define FRAME_ARGS_SKIP (gdbarch_frame_args_skip (current_gdbarch))
697#endif
698#endif
699
adf40b2e
JM
700typedef int (gdbarch_frameless_function_invocation_ftype) PARAMS ((struct frame_info *fi));
701extern int gdbarch_frameless_function_invocation PARAMS ((struct gdbarch *gdbarch, struct frame_info *fi));
702extern void set_gdbarch_frameless_function_invocation PARAMS ((struct gdbarch *gdbarch, gdbarch_frameless_function_invocation_ftype *frameless_function_invocation));
0f71a2f6
JM
703#if GDB_MULTI_ARCH
704#if (GDB_MULTI_ARCH > 1) || !defined (FRAMELESS_FUNCTION_INVOCATION)
705#define FRAMELESS_FUNCTION_INVOCATION(fi) (gdbarch_frameless_function_invocation (current_gdbarch, fi))
706#endif
707#endif
708
adf40b2e
JM
709typedef CORE_ADDR (gdbarch_frame_chain_ftype) PARAMS ((struct frame_info *frame));
710extern CORE_ADDR gdbarch_frame_chain PARAMS ((struct gdbarch *gdbarch, struct frame_info *frame));
711extern void set_gdbarch_frame_chain PARAMS ((struct gdbarch *gdbarch, gdbarch_frame_chain_ftype *frame_chain));
0f71a2f6
JM
712#if GDB_MULTI_ARCH
713#if (GDB_MULTI_ARCH > 1) || !defined (FRAME_CHAIN)
714#define FRAME_CHAIN(frame) (gdbarch_frame_chain (current_gdbarch, frame))
715#endif
716#endif
717
adf40b2e
JM
718typedef int (gdbarch_frame_chain_valid_ftype) PARAMS ((CORE_ADDR chain, struct frame_info *thisframe));
719extern int gdbarch_frame_chain_valid PARAMS ((struct gdbarch *gdbarch, CORE_ADDR chain, struct frame_info *thisframe));
720extern void set_gdbarch_frame_chain_valid PARAMS ((struct gdbarch *gdbarch, gdbarch_frame_chain_valid_ftype *frame_chain_valid));
0f71a2f6
JM
721#if GDB_MULTI_ARCH
722#if (GDB_MULTI_ARCH > 1) || !defined (FRAME_CHAIN_VALID)
723#define FRAME_CHAIN_VALID(chain, thisframe) (gdbarch_frame_chain_valid (current_gdbarch, chain, thisframe))
724#endif
725#endif
726
adf40b2e
JM
727typedef CORE_ADDR (gdbarch_frame_saved_pc_ftype) PARAMS ((struct frame_info *fi));
728extern CORE_ADDR gdbarch_frame_saved_pc PARAMS ((struct gdbarch *gdbarch, struct frame_info *fi));
729extern void set_gdbarch_frame_saved_pc PARAMS ((struct gdbarch *gdbarch, gdbarch_frame_saved_pc_ftype *frame_saved_pc));
0f71a2f6
JM
730#if GDB_MULTI_ARCH
731#if (GDB_MULTI_ARCH > 1) || !defined (FRAME_SAVED_PC)
732#define FRAME_SAVED_PC(fi) (gdbarch_frame_saved_pc (current_gdbarch, fi))
733#endif
734#endif
735
adf40b2e
JM
736typedef CORE_ADDR (gdbarch_frame_args_address_ftype) PARAMS ((struct frame_info *fi));
737extern CORE_ADDR gdbarch_frame_args_address PARAMS ((struct gdbarch *gdbarch, struct frame_info *fi));
738extern void set_gdbarch_frame_args_address PARAMS ((struct gdbarch *gdbarch, gdbarch_frame_args_address_ftype *frame_args_address));
0f71a2f6
JM
739#if GDB_MULTI_ARCH
740#if (GDB_MULTI_ARCH > 1) || !defined (FRAME_ARGS_ADDRESS)
741#define FRAME_ARGS_ADDRESS(fi) (gdbarch_frame_args_address (current_gdbarch, fi))
742#endif
743#endif
744
adf40b2e
JM
745typedef CORE_ADDR (gdbarch_frame_locals_address_ftype) PARAMS ((struct frame_info *fi));
746extern CORE_ADDR gdbarch_frame_locals_address PARAMS ((struct gdbarch *gdbarch, struct frame_info *fi));
747extern void set_gdbarch_frame_locals_address PARAMS ((struct gdbarch *gdbarch, gdbarch_frame_locals_address_ftype *frame_locals_address));
0f71a2f6
JM
748#if GDB_MULTI_ARCH
749#if (GDB_MULTI_ARCH > 1) || !defined (FRAME_LOCALS_ADDRESS)
750#define FRAME_LOCALS_ADDRESS(fi) (gdbarch_frame_locals_address (current_gdbarch, fi))
751#endif
752#endif
753
adf40b2e
JM
754typedef CORE_ADDR (gdbarch_saved_pc_after_call_ftype) PARAMS ((struct frame_info *frame));
755extern CORE_ADDR gdbarch_saved_pc_after_call PARAMS ((struct gdbarch *gdbarch, struct frame_info *frame));
756extern void set_gdbarch_saved_pc_after_call PARAMS ((struct gdbarch *gdbarch, gdbarch_saved_pc_after_call_ftype *saved_pc_after_call));
0f71a2f6
JM
757#if GDB_MULTI_ARCH
758#if (GDB_MULTI_ARCH > 1) || !defined (SAVED_PC_AFTER_CALL)
759#define SAVED_PC_AFTER_CALL(frame) (gdbarch_saved_pc_after_call (current_gdbarch, frame))
760#endif
761#endif
762
adf40b2e
JM
763typedef int (gdbarch_frame_num_args_ftype) PARAMS ((struct frame_info *frame));
764extern int gdbarch_frame_num_args PARAMS ((struct gdbarch *gdbarch, struct frame_info *frame));
765extern void set_gdbarch_frame_num_args PARAMS ((struct gdbarch *gdbarch, gdbarch_frame_num_args_ftype *frame_num_args));
0f71a2f6
JM
766#if GDB_MULTI_ARCH
767#if (GDB_MULTI_ARCH > 1) || !defined (FRAME_NUM_ARGS)
768#define FRAME_NUM_ARGS(frame) (gdbarch_frame_num_args (current_gdbarch, frame))
769#endif
770#endif
771
adf40b2e 772extern struct gdbarch_tdep *gdbarch_tdep PARAMS ((struct gdbarch *gdbarch));
0f71a2f6
JM
773
774
775/* Mechanism for co-ordinating the selection of a specific
776 architecture.
777
778 GDB targets (*-tdep.c) can register an interest in a specific
779 architecture. Other GDB components can register a need to maintain
780 per-architecture data.
781
782 The mechanisms below ensures that there is only a loose connection
783 between the set-architecture command and the various GDB
784 components. Each component can independantly register their need
785 to maintain architecture specific data with gdbarch.
786
787 Pragmatics:
788
789 Previously, a single TARGET_ARCHITECTURE_HOOK was provided. It
790 didn't scale.
791
792 The more traditional mega-struct containing architecture specific
793 data for all the various GDB components was also considered. Since
794 GDB is built from a variable number of (fairly independant)
795 components it was determined that the global aproach was not
796 applicable. */
797
798
799/* Register a new architectural family with GDB.
800
801 Register support for the specified ARCHITECTURE with GDB. When
802 gdbarch determines that the specified architecture has been
803 selected, the corresponding INIT function is called.
804
805 --
806
807 The INIT function takes two parameters: INFO which contains the
808 information available to gdbarch about the (possibly new)
809 architecture; ARCHES which is a list of the previously created
810 ``struct gdbarch'' for this architecture.
811
812 The INIT function parameter INFO shall, as far as possible, be
813 pre-initialized with information obtained from INFO.ABFD or
814 previously selected architecture (if similar). INIT shall ensure
815 that the INFO.BYTE_ORDER is non-zero.
816
817 The INIT function shall return any of: NULL - indicating that it
818 doesn't reconize the selected architecture; an existing ``struct
819 gdbarch'' from the ARCHES list - indicating that the new
820 architecture is just a synonym for an earlier architecture (see
821 gdbarch_list_lookup_by_info()); a newly created ``struct gdbarch''
822 - that describes the selected architecture (see
823 gdbarch_alloc()). */
824
adf40b2e
JM
825struct gdbarch_list
826{
827 struct gdbarch *gdbarch;
828 struct gdbarch_list *next;
829};
0f71a2f6 830
adf40b2e
JM
831struct gdbarch_info
832{
833 /* Use default: bfd_arch_unknown (ZERO). */
834 enum bfd_architecture bfd_architecture;
0f71a2f6 835
adf40b2e
JM
836 /* Use default: NULL (ZERO). */
837 const struct bfd_arch_info *bfd_arch_info;
0f71a2f6 838
adf40b2e
JM
839 /* Use default: 0 (ZERO). */
840 int byte_order;
0f71a2f6 841
adf40b2e
JM
842 /* Use default: NULL (ZERO). */
843 bfd *abfd;
0f71a2f6 844
adf40b2e
JM
845 /* Use default: NULL (ZERO). */
846 struct gdbarch_tdep_info *tdep_info;
847};
0f71a2f6 848
adf40b2e 849typedef struct gdbarch *(gdbarch_init_ftype) PARAMS ((struct gdbarch_info info, struct gdbarch_list *arches));
0f71a2f6 850
adf40b2e 851extern void register_gdbarch_init PARAMS ((enum bfd_architecture architecture, gdbarch_init_ftype *));
0f71a2f6
JM
852
853
854/* Helper function. Search the list of ARCHES for a GDBARCH that
855 matches the information provided by INFO. */
856
adf40b2e 857extern struct gdbarch_list *gdbarch_list_lookup_by_info PARAMS ((struct gdbarch_list *arches, const struct gdbarch_info *info));
0f71a2f6
JM
858
859
860/* Helper function. Create a preliminary ``struct gdbarch''. Perform
861 basic initialization using values obtained from the INFO andTDEP
862 parameters. set_gdbarch_*() functions are called to complete the
863 initialization of the object. */
864
adf40b2e 865extern struct gdbarch *gdbarch_alloc PARAMS ((const struct gdbarch_info *info, struct gdbarch_tdep *tdep));
0f71a2f6
JM
866
867
868/* Helper function. Force an update of the current architecture. Used
869 by legacy targets that have added their own target specific
870 architecture manipulation commands.
871
872 The INFO parameter shall be fully initialized (``memset (&INFO,
873 sizeof (info), 0)'' set relevant fields) before gdbarch_update() is
874 called. gdbarch_update() shall initialize any ``default'' fields
875 using information obtained from the previous architecture or
876 INFO.ABFD (if specified) before calling the corresponding
877 architectures INIT function. */
878
adf40b2e 879extern int gdbarch_update PARAMS ((struct gdbarch_info info));
0f71a2f6
JM
880
881
882
883/* Register per-architecture data-pointer.
884
885 Reserve space for a per-architecture data-pointer. An identifier
886 for the reserved data-pointer is returned. That identifer should
887 be saved in a local static.
888
889 When a new architecture is selected, INIT() is called. When a
890 previous architecture is re-selected, the per-architecture
891 data-pointer for that previous architecture is restored (INIT() is
892 not called).
893
894 INIT() shall return the initial value for the per-architecture
895 data-pointer for the current architecture.
896
897 Multiple registrarants for any architecture are allowed (and
898 strongly encouraged). */
899
adf40b2e
JM
900typedef void *(gdbarch_data_ftype) PARAMS ((void));
901extern struct gdbarch_data *register_gdbarch_data PARAMS ((gdbarch_data_ftype *init));
0f71a2f6
JM
902
903/* Return the value of the per-architecture data-pointer for the
904 current architecture. */
905
adf40b2e 906extern void *gdbarch_data PARAMS ((struct gdbarch_data*));
0f71a2f6
JM
907
908
909
910/* Register per-architecture memory region.
911
912 Provide a memory-region swap mechanism. Per-architecture memory
913 region are created. These memory regions are swapped whenever the
914 architecture is changed. For a new architecture, the memory region
915 is initialized with zero (0) and the INIT function is called.
916
917 Memory regions are swapped / initialized in the order that they are
918 registered. NULL DATA and/or INIT values can be specified.
919
920 New code should use register_gdbarch_data(). */
921
adf40b2e
JM
922typedef void (gdbarch_swap_ftype) PARAMS ((void));
923extern void register_gdbarch_swap PARAMS ((void *data, unsigned long size, gdbarch_swap_ftype *init));
0f71a2f6
JM
924
925
926
c906108c
SS
927/* The target-system-dependant byte order is dynamic */
928
929/* TARGET_BYTE_ORDER_SELECTABLE_P determines if the target endianness
b83266a0 930 is selectable at runtime. The user can use the ``set endian''
c906108c
SS
931 command to change it. TARGET_BYTE_ORDER_AUTO is nonzero when
932 target_byte_order should be auto-detected (from the program image
933 say). */
934
0f71a2f6
JM
935#if GDB_MULTI_ARCH
936/* Multi-arch GDB is always bi-endian. */
937#define TARGET_BYTE_ORDER_SELECTABLE_P 1
938#endif
939
c906108c
SS
940#ifndef TARGET_BYTE_ORDER_SELECTABLE_P
941/* compat - Catch old targets that define TARGET_BYTE_ORDER_SLECTABLE
942 when they should have defined TARGET_BYTE_ORDER_SELECTABLE_P 1 */
943#ifdef TARGET_BYTE_ORDER_SELECTABLE
944#define TARGET_BYTE_ORDER_SELECTABLE_P 1
945#else
946#define TARGET_BYTE_ORDER_SELECTABLE_P 0
947#endif
948#endif
949
adf40b2e 950extern int target_byte_order;
c906108c
SS
951#ifdef TARGET_BYTE_ORDER_SELECTABLE
952/* compat - Catch old targets that define TARGET_BYTE_ORDER_SELECTABLE
953 and expect defs.h to re-define TARGET_BYTE_ORDER. */
954#undef TARGET_BYTE_ORDER
955#endif
956#ifndef TARGET_BYTE_ORDER
957#define TARGET_BYTE_ORDER (target_byte_order + 0)
958#endif
959
adf40b2e 960extern int target_byte_order_auto;
c906108c
SS
961#ifndef TARGET_BYTE_ORDER_AUTO
962#define TARGET_BYTE_ORDER_AUTO (target_byte_order_auto + 0)
963#endif
964
965
966
967/* The target-system-dependant BFD architecture is dynamic */
968
adf40b2e 969extern int target_architecture_auto;
c906108c
SS
970#ifndef TARGET_ARCHITECTURE_AUTO
971#define TARGET_ARCHITECTURE_AUTO (target_architecture_auto + 0)
972#endif
973
adf40b2e 974extern const struct bfd_arch_info *target_architecture;
c906108c
SS
975#ifndef TARGET_ARCHITECTURE
976#define TARGET_ARCHITECTURE (target_architecture + 0)
977#endif
978
979/* Notify the target dependant backend of a change to the selected
980 architecture. A zero return status indicates that the target did
981 not like the change. */
982
adf40b2e 983extern int (*target_architecture_hook) PARAMS ((const struct bfd_arch_info *));
c906108c
SS
984
985
986
987/* The target-system-dependant disassembler is semi-dynamic */
988
989#include "dis-asm.h" /* Get defs for disassemble_info */
990
adf40b2e
JM
991extern int dis_asm_read_memory PARAMS ((bfd_vma memaddr, bfd_byte *myaddr,
992 int len, disassemble_info *info));
c906108c 993
adf40b2e
JM
994extern void dis_asm_memory_error PARAMS ((int status, bfd_vma memaddr,
995 disassemble_info *info));
c906108c 996
adf40b2e
JM
997extern void dis_asm_print_address PARAMS ((bfd_vma addr,
998 disassemble_info *info));
c906108c 999
adf40b2e
JM
1000extern int (*tm_print_insn) PARAMS ((bfd_vma, disassemble_info*));
1001extern disassemble_info tm_print_insn_info;
c906108c
SS
1002#ifndef TARGET_PRINT_INSN
1003#define TARGET_PRINT_INSN(vma, info) (*tm_print_insn) (vma, info)
1004#endif
1005#ifndef TARGET_PRINT_INSN_INFO
1006#define TARGET_PRINT_INSN_INFO (&tm_print_insn_info)
1007#endif
1008
1009
1010
7a292a7a
SS
1011/* Explicit test for D10V architecture.
1012 USE of these macro's is *STRONGLY* discouraged. */
1013
1014#define GDB_TARGET_IS_D10V (TARGET_ARCHITECTURE->arch == bfd_arch_d10v)
1015#ifndef D10V_MAKE_DADDR
0f71a2f6 1016#define D10V_MAKE_DADDR(X) (fatal ("gdbarch: D10V_MAKE_DADDR"), 0)
7a292a7a
SS
1017#endif
1018#ifndef D10V_MAKE_IADDR
0f71a2f6 1019#define D10V_MAKE_IADDR(X) (fatal ("gdbarch: D10V_MAKE_IADDR"), 0)
7a292a7a
SS
1020#endif
1021
1022
392a587b
JM
1023/* Fallback definition of FRAMELESS_FUNCTION_INVOCATION */
1024#ifndef FRAMELESS_FUNCTION_INVOCATION
1025#define FRAMELESS_FUNCTION_INVOCATION(FI) (0)
1026#endif
1027
7a292a7a 1028
392a587b 1029/* Fallback definition of REGISTER_CONVERTIBLE etc */
adf40b2e 1030extern int generic_register_convertible_not PARAMS ((int reg_nr));
392a587b
JM
1031#ifndef REGISTER_CONVERTIBLE
1032#define REGISTER_CONVERTIBLE(x) (0)
1033#endif
1034#ifndef REGISTER_CONVERT_TO_VIRTUAL
1035#define REGISTER_CONVERT_TO_VIRTUAL(x, y, z, a)
1036#endif
1037#ifndef REGISTER_CONVERT_TO_RAW
1038#define REGISTER_CONVERT_TO_RAW(x, y, z, a)
1039#endif
7a292a7a
SS
1040
1041
ac9a91a7
JM
1042/* Fallback definition for EXTRACT_STRUCT_VALUE_ADDRESS */
1043#ifndef EXTRACT_STRUCT_VALUE_ADDRESS
1044#define EXTRACT_STRUCT_VALUE_ADDRESS_P (0)
0f71a2f6 1045#define EXTRACT_STRUCT_VALUE_ADDRESS(X) (fatal ("gdbarch: EXTRACT_STRUCT_VALUE_ADDRESS"), 0)
ac9a91a7
JM
1046#else
1047#ifndef EXTRACT_STRUCT_VALUE_ADDRESS_P
1048#define EXTRACT_STRUCT_VALUE_ADDRESS_P (1)
1049#endif
1050#endif
1051
1052
cce74817
JM
1053/* Fallback definition for REGISTER_NAME for systems still defining
1054 REGISTER_NAMES. */
1055#ifndef REGISTER_NAME
adf40b2e 1056extern char *gdb_register_names[];
cce74817
JM
1057#define REGISTER_NAME(i) gdb_register_names[i]
1058#endif
1059
1060
c906108c
SS
1061/* Set the dynamic target-system-dependant parameters (architecture,
1062 byte-order, ...) using information found in the BFD */
1063
adf40b2e 1064extern void set_gdbarch_from_file PARAMS ((bfd *));
c906108c
SS
1065
1066
1067/* Explicitly set the dynamic target-system-dependant parameters based
1068 on bfd_architecture and machine. */
1069
adf40b2e 1070extern void set_architecture_from_arch_mach PARAMS ((enum bfd_architecture, unsigned long));
c906108c
SS
1071
1072
cce74817
JM
1073/* Helper function for targets that don't know how my arguments are
1074 being passed */
1075
adf40b2e 1076extern int frame_num_args_unknown PARAMS ((struct frame_info *fi));
cce74817
JM
1077
1078
c906108c 1079/* gdbarch trace variable */
adf40b2e 1080extern int gdbarch_debug;
c906108c 1081
adf40b2e 1082extern void gdbarch_dump PARAMS ((void));
0f71a2f6 1083
c906108c 1084#endif
This page took 0.085778 seconds and 4 git commands to generate.