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