198944Sobrien/* *INDENT-OFF* */ /* THIS FILE IS GENERATED */
246283Sdfr
398944Sobrien/* Dynamic architecture support for GDB, the GNU debugger.
446283Sdfr
5130803Smarcel   Copyright 1998, 1999, 2000, 2001, 2002, 2003, 2004 Free
6130803Smarcel   Software Foundation, Inc.
7130803Smarcel
898944Sobrien   This file is part of GDB.
946283Sdfr
1098944Sobrien   This program is free software; you can redistribute it and/or modify
1198944Sobrien   it under the terms of the GNU General Public License as published by
1298944Sobrien   the Free Software Foundation; either version 2 of the License, or
1398944Sobrien   (at your option) any later version.
1446283Sdfr
1598944Sobrien   This program is distributed in the hope that it will be useful,
1698944Sobrien   but WITHOUT ANY WARRANTY; without even the implied warranty of
1798944Sobrien   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
1898944Sobrien   GNU General Public License for more details.
1946283Sdfr
2098944Sobrien   You should have received a copy of the GNU General Public License
2198944Sobrien   along with this program; if not, write to the Free Software
2298944Sobrien   Foundation, Inc., 59 Temple Place - Suite 330,
2398944Sobrien   Boston, MA 02111-1307, USA.  */
2498944Sobrien
2598944Sobrien/* This file was created with the aid of ``gdbarch.sh''.
2698944Sobrien
2798944Sobrien   The Bourne shell script ``gdbarch.sh'' creates the files
2898944Sobrien   ``new-gdbarch.c'' and ``new-gdbarch.h and then compares them
2998944Sobrien   against the existing ``gdbarch.[hc]''.  Any differences found
3098944Sobrien   being reported.
3198944Sobrien
3298944Sobrien   If editing this file, please also run gdbarch.sh and merge any
3398944Sobrien   changes into that script. Conversely, when making sweeping changes
3498944Sobrien   to this file, modifying gdbarch.sh and using its output may prove
3598944Sobrien   easier. */
3698944Sobrien
3746283Sdfr#ifndef GDBARCH_H
3846283Sdfr#define GDBARCH_H
3946283Sdfr
40130803Smarcelstruct floatformat;
41130803Smarcelstruct ui_file;
4298944Sobrienstruct frame_info;
4398944Sobrienstruct value;
4498944Sobrienstruct objfile;
4598944Sobrienstruct minimal_symbol;
46130803Smarcelstruct regcache;
47130803Smarcelstruct reggroup;
48130803Smarcelstruct regset;
49130803Smarcelstruct disassemble_info;
50130803Smarcelstruct target_ops;
5146283Sdfr
5298944Sobrienextern struct gdbarch *current_gdbarch;
5346283Sdfr
5498944Sobrien
5598944Sobrien/* If any of the following are defined, the target wasn't correctly
5698944Sobrien   converted. */
5798944Sobrien
5898944Sobrien#if (GDB_MULTI_ARCH >= GDB_MULTI_ARCH_PURE) && defined (GDB_TM_FILE)
5998944Sobrien#error "GDB_TM_FILE: Pure multi-arch targets do not have a tm.h file."
6098944Sobrien#endif
6198944Sobrien
6298944Sobrien
6398944Sobrien/* The following are pre-initialized by GDBARCH. */
6498944Sobrien
6598944Sobrienextern const struct bfd_arch_info * gdbarch_bfd_arch_info (struct gdbarch *gdbarch);
6698944Sobrien/* set_gdbarch_bfd_arch_info() - not applicable - pre-initialized. */
6798944Sobrien#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (TARGET_ARCHITECTURE)
6898944Sobrien#error "Non multi-arch definition of TARGET_ARCHITECTURE"
6998944Sobrien#endif
70130803Smarcel#if !defined (TARGET_ARCHITECTURE)
7198944Sobrien#define TARGET_ARCHITECTURE (gdbarch_bfd_arch_info (current_gdbarch))
7298944Sobrien#endif
7398944Sobrien
7498944Sobrienextern int gdbarch_byte_order (struct gdbarch *gdbarch);
7598944Sobrien/* set_gdbarch_byte_order() - not applicable - pre-initialized. */
7698944Sobrien#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (TARGET_BYTE_ORDER)
7798944Sobrien#error "Non multi-arch definition of TARGET_BYTE_ORDER"
7898944Sobrien#endif
79130803Smarcel#if !defined (TARGET_BYTE_ORDER)
8098944Sobrien#define TARGET_BYTE_ORDER (gdbarch_byte_order (current_gdbarch))
8198944Sobrien#endif
82130803Smarcel
83130803Smarcelextern enum gdb_osabi gdbarch_osabi (struct gdbarch *gdbarch);
84130803Smarcel/* set_gdbarch_osabi() - not applicable - pre-initialized. */
85130803Smarcel#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (TARGET_OSABI)
86130803Smarcel#error "Non multi-arch definition of TARGET_OSABI"
8798944Sobrien#endif
88130803Smarcel#if !defined (TARGET_OSABI)
89130803Smarcel#define TARGET_OSABI (gdbarch_osabi (current_gdbarch))
90130803Smarcel#endif
9198944Sobrien
9298944Sobrien
9398944Sobrien/* The following are initialized by the target dependent code. */
9498944Sobrien
9598944Sobrien/* Number of bits in a char or unsigned char for the target machine.
9698944Sobrien   Just like CHAR_BIT in <limits.h> but describes the target machine.
97130803Smarcel   v:2:TARGET_CHAR_BIT:int:char_bit::::8 * sizeof (char):8::0:
9898944Sobrien
9998944Sobrien   Number of bits in a short or unsigned short for the target machine. */
10098944Sobrien
10198944Sobrienextern int gdbarch_short_bit (struct gdbarch *gdbarch);
10298944Sobrienextern void set_gdbarch_short_bit (struct gdbarch *gdbarch, int short_bit);
10398944Sobrien#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (TARGET_SHORT_BIT)
10498944Sobrien#error "Non multi-arch definition of TARGET_SHORT_BIT"
10598944Sobrien#endif
106130803Smarcel#if !defined (TARGET_SHORT_BIT)
10798944Sobrien#define TARGET_SHORT_BIT (gdbarch_short_bit (current_gdbarch))
10898944Sobrien#endif
10998944Sobrien
11098944Sobrien/* Number of bits in an int or unsigned int for the target machine. */
11198944Sobrien
11298944Sobrienextern int gdbarch_int_bit (struct gdbarch *gdbarch);
11398944Sobrienextern void set_gdbarch_int_bit (struct gdbarch *gdbarch, int int_bit);
11498944Sobrien#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (TARGET_INT_BIT)
11598944Sobrien#error "Non multi-arch definition of TARGET_INT_BIT"
11698944Sobrien#endif
117130803Smarcel#if !defined (TARGET_INT_BIT)
11898944Sobrien#define TARGET_INT_BIT (gdbarch_int_bit (current_gdbarch))
11998944Sobrien#endif
12098944Sobrien
12198944Sobrien/* Number of bits in a long or unsigned long for the target machine. */
12298944Sobrien
12398944Sobrienextern int gdbarch_long_bit (struct gdbarch *gdbarch);
12498944Sobrienextern void set_gdbarch_long_bit (struct gdbarch *gdbarch, int long_bit);
12598944Sobrien#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (TARGET_LONG_BIT)
12698944Sobrien#error "Non multi-arch definition of TARGET_LONG_BIT"
12798944Sobrien#endif
128130803Smarcel#if !defined (TARGET_LONG_BIT)
12998944Sobrien#define TARGET_LONG_BIT (gdbarch_long_bit (current_gdbarch))
13098944Sobrien#endif
13198944Sobrien
13298944Sobrien/* Number of bits in a long long or unsigned long long for the target
13398944Sobrien   machine. */
13498944Sobrien
13598944Sobrienextern int gdbarch_long_long_bit (struct gdbarch *gdbarch);
13698944Sobrienextern void set_gdbarch_long_long_bit (struct gdbarch *gdbarch, int long_long_bit);
13798944Sobrien#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (TARGET_LONG_LONG_BIT)
13898944Sobrien#error "Non multi-arch definition of TARGET_LONG_LONG_BIT"
13998944Sobrien#endif
140130803Smarcel#if !defined (TARGET_LONG_LONG_BIT)
14198944Sobrien#define TARGET_LONG_LONG_BIT (gdbarch_long_long_bit (current_gdbarch))
14298944Sobrien#endif
14398944Sobrien
14498944Sobrien/* Number of bits in a float for the target machine. */
14598944Sobrien
14698944Sobrienextern int gdbarch_float_bit (struct gdbarch *gdbarch);
14798944Sobrienextern void set_gdbarch_float_bit (struct gdbarch *gdbarch, int float_bit);
14898944Sobrien#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (TARGET_FLOAT_BIT)
14998944Sobrien#error "Non multi-arch definition of TARGET_FLOAT_BIT"
15098944Sobrien#endif
151130803Smarcel#if !defined (TARGET_FLOAT_BIT)
15298944Sobrien#define TARGET_FLOAT_BIT (gdbarch_float_bit (current_gdbarch))
15398944Sobrien#endif
15498944Sobrien
15598944Sobrien/* Number of bits in a double for the target machine. */
15698944Sobrien
15798944Sobrienextern int gdbarch_double_bit (struct gdbarch *gdbarch);
15898944Sobrienextern void set_gdbarch_double_bit (struct gdbarch *gdbarch, int double_bit);
15998944Sobrien#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (TARGET_DOUBLE_BIT)
16098944Sobrien#error "Non multi-arch definition of TARGET_DOUBLE_BIT"
16198944Sobrien#endif
162130803Smarcel#if !defined (TARGET_DOUBLE_BIT)
16398944Sobrien#define TARGET_DOUBLE_BIT (gdbarch_double_bit (current_gdbarch))
16498944Sobrien#endif
16598944Sobrien
16698944Sobrien/* Number of bits in a long double for the target machine. */
16798944Sobrien
16898944Sobrienextern int gdbarch_long_double_bit (struct gdbarch *gdbarch);
16998944Sobrienextern void set_gdbarch_long_double_bit (struct gdbarch *gdbarch, int long_double_bit);
17098944Sobrien#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (TARGET_LONG_DOUBLE_BIT)
17198944Sobrien#error "Non multi-arch definition of TARGET_LONG_DOUBLE_BIT"
17298944Sobrien#endif
173130803Smarcel#if !defined (TARGET_LONG_DOUBLE_BIT)
17498944Sobrien#define TARGET_LONG_DOUBLE_BIT (gdbarch_long_double_bit (current_gdbarch))
17598944Sobrien#endif
17698944Sobrien
17798944Sobrien/* For most targets, a pointer on the target and its representation as an
17898944Sobrien   address in GDB have the same size and "look the same".  For such a
17998944Sobrien   target, you need only set TARGET_PTR_BIT / ptr_bit and TARGET_ADDR_BIT
18098944Sobrien   / addr_bit will be set from it.
18198944Sobrien
18298944Sobrien   If TARGET_PTR_BIT and TARGET_ADDR_BIT are different, you'll probably
18398944Sobrien   also need to set POINTER_TO_ADDRESS and ADDRESS_TO_POINTER as well.
18498944Sobrien
18598944Sobrien   ptr_bit is the size of a pointer on the target */
18698944Sobrien
18798944Sobrienextern int gdbarch_ptr_bit (struct gdbarch *gdbarch);
18898944Sobrienextern void set_gdbarch_ptr_bit (struct gdbarch *gdbarch, int ptr_bit);
18998944Sobrien#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (TARGET_PTR_BIT)
19098944Sobrien#error "Non multi-arch definition of TARGET_PTR_BIT"
19198944Sobrien#endif
192130803Smarcel#if !defined (TARGET_PTR_BIT)
19398944Sobrien#define TARGET_PTR_BIT (gdbarch_ptr_bit (current_gdbarch))
19498944Sobrien#endif
19598944Sobrien
19698944Sobrien/* addr_bit is the size of a target address as represented in gdb */
19798944Sobrien
19898944Sobrienextern int gdbarch_addr_bit (struct gdbarch *gdbarch);
19998944Sobrienextern void set_gdbarch_addr_bit (struct gdbarch *gdbarch, int addr_bit);
20098944Sobrien#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (TARGET_ADDR_BIT)
20198944Sobrien#error "Non multi-arch definition of TARGET_ADDR_BIT"
20298944Sobrien#endif
203130803Smarcel#if !defined (TARGET_ADDR_BIT)
20498944Sobrien#define TARGET_ADDR_BIT (gdbarch_addr_bit (current_gdbarch))
20598944Sobrien#endif
20698944Sobrien
20798944Sobrien/* Number of bits in a BFD_VMA for the target object file format. */
20898944Sobrien
20998944Sobrienextern int gdbarch_bfd_vma_bit (struct gdbarch *gdbarch);
21098944Sobrienextern void set_gdbarch_bfd_vma_bit (struct gdbarch *gdbarch, int bfd_vma_bit);
21198944Sobrien#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (TARGET_BFD_VMA_BIT)
21298944Sobrien#error "Non multi-arch definition of TARGET_BFD_VMA_BIT"
21398944Sobrien#endif
214130803Smarcel#if !defined (TARGET_BFD_VMA_BIT)
21598944Sobrien#define TARGET_BFD_VMA_BIT (gdbarch_bfd_vma_bit (current_gdbarch))
21698944Sobrien#endif
21798944Sobrien
21898944Sobrien/* One if `char' acts like `signed char', zero if `unsigned char'. */
21998944Sobrien
22098944Sobrienextern int gdbarch_char_signed (struct gdbarch *gdbarch);
22198944Sobrienextern void set_gdbarch_char_signed (struct gdbarch *gdbarch, int char_signed);
22298944Sobrien#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (TARGET_CHAR_SIGNED)
22398944Sobrien#error "Non multi-arch definition of TARGET_CHAR_SIGNED"
22498944Sobrien#endif
225130803Smarcel#if !defined (TARGET_CHAR_SIGNED)
22698944Sobrien#define TARGET_CHAR_SIGNED (gdbarch_char_signed (current_gdbarch))
22798944Sobrien#endif
228130803Smarcel
229130803Smarcel#if defined (TARGET_READ_PC)
230130803Smarcel/* Legacy for systems yet to multi-arch TARGET_READ_PC */
231130803Smarcel#if !defined (TARGET_READ_PC_P)
232130803Smarcel#define TARGET_READ_PC_P() (1)
23398944Sobrien#endif
234130803Smarcel#endif
23598944Sobrien
236130803Smarcelextern int gdbarch_read_pc_p (struct gdbarch *gdbarch);
237130803Smarcel#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (TARGET_READ_PC_P)
238130803Smarcel#error "Non multi-arch definition of TARGET_READ_PC"
23998944Sobrien#endif
240130803Smarcel#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (TARGET_READ_PC_P)
241130803Smarcel#define TARGET_READ_PC_P() (gdbarch_read_pc_p (current_gdbarch))
242130803Smarcel#endif
24398944Sobrien
24498944Sobrientypedef CORE_ADDR (gdbarch_read_pc_ftype) (ptid_t ptid);
24598944Sobrienextern CORE_ADDR gdbarch_read_pc (struct gdbarch *gdbarch, ptid_t ptid);
24698944Sobrienextern void set_gdbarch_read_pc (struct gdbarch *gdbarch, gdbarch_read_pc_ftype *read_pc);
24798944Sobrien#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (TARGET_READ_PC)
24898944Sobrien#error "Non multi-arch definition of TARGET_READ_PC"
24998944Sobrien#endif
250130803Smarcel#if !defined (TARGET_READ_PC)
25198944Sobrien#define TARGET_READ_PC(ptid) (gdbarch_read_pc (current_gdbarch, ptid))
25298944Sobrien#endif
25398944Sobrien
25498944Sobrientypedef void (gdbarch_write_pc_ftype) (CORE_ADDR val, ptid_t ptid);
25598944Sobrienextern void gdbarch_write_pc (struct gdbarch *gdbarch, CORE_ADDR val, ptid_t ptid);
25698944Sobrienextern void set_gdbarch_write_pc (struct gdbarch *gdbarch, gdbarch_write_pc_ftype *write_pc);
25798944Sobrien#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (TARGET_WRITE_PC)
25898944Sobrien#error "Non multi-arch definition of TARGET_WRITE_PC"
25998944Sobrien#endif
260130803Smarcel#if !defined (TARGET_WRITE_PC)
26198944Sobrien#define TARGET_WRITE_PC(val, ptid) (gdbarch_write_pc (current_gdbarch, val, ptid))
26298944Sobrien#endif
26398944Sobrien
264130803Smarcel/* UNWIND_SP is a direct replacement for TARGET_READ_SP. */
26598944Sobrien
266130803Smarcel#if defined (TARGET_READ_SP)
267130803Smarcel/* Legacy for systems yet to multi-arch TARGET_READ_SP */
268130803Smarcel#if !defined (TARGET_READ_SP_P)
269130803Smarcel#define TARGET_READ_SP_P() (1)
27098944Sobrien#endif
27198944Sobrien#endif
27298944Sobrien
273130803Smarcelextern int gdbarch_read_sp_p (struct gdbarch *gdbarch);
274130803Smarcel#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (TARGET_READ_SP_P)
275130803Smarcel#error "Non multi-arch definition of TARGET_READ_SP"
27698944Sobrien#endif
277130803Smarcel#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (TARGET_READ_SP_P)
278130803Smarcel#define TARGET_READ_SP_P() (gdbarch_read_sp_p (current_gdbarch))
27998944Sobrien#endif
28098944Sobrien
28198944Sobrientypedef CORE_ADDR (gdbarch_read_sp_ftype) (void);
28298944Sobrienextern CORE_ADDR gdbarch_read_sp (struct gdbarch *gdbarch);
28398944Sobrienextern void set_gdbarch_read_sp (struct gdbarch *gdbarch, gdbarch_read_sp_ftype *read_sp);
28498944Sobrien#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (TARGET_READ_SP)
28598944Sobrien#error "Non multi-arch definition of TARGET_READ_SP"
28698944Sobrien#endif
287130803Smarcel#if !defined (TARGET_READ_SP)
28898944Sobrien#define TARGET_READ_SP() (gdbarch_read_sp (current_gdbarch))
28998944Sobrien#endif
29098944Sobrien
29198944Sobrien/* Function for getting target's idea of a frame pointer.  FIXME: GDB's
29298944Sobrien   whole scheme for dealing with "frames" and "frame pointers" needs a
29398944Sobrien   serious shakedown. */
29498944Sobrien
29598944Sobrientypedef void (gdbarch_virtual_frame_pointer_ftype) (CORE_ADDR pc, int *frame_regnum, LONGEST *frame_offset);
29698944Sobrienextern void gdbarch_virtual_frame_pointer (struct gdbarch *gdbarch, CORE_ADDR pc, int *frame_regnum, LONGEST *frame_offset);
29798944Sobrienextern void set_gdbarch_virtual_frame_pointer (struct gdbarch *gdbarch, gdbarch_virtual_frame_pointer_ftype *virtual_frame_pointer);
29898944Sobrien#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (TARGET_VIRTUAL_FRAME_POINTER)
29998944Sobrien#error "Non multi-arch definition of TARGET_VIRTUAL_FRAME_POINTER"
30098944Sobrien#endif
301130803Smarcel#if !defined (TARGET_VIRTUAL_FRAME_POINTER)
30298944Sobrien#define TARGET_VIRTUAL_FRAME_POINTER(pc, frame_regnum, frame_offset) (gdbarch_virtual_frame_pointer (current_gdbarch, pc, frame_regnum, frame_offset))
30398944Sobrien#endif
30498944Sobrien
305130803Smarcelextern int gdbarch_pseudo_register_read_p (struct gdbarch *gdbarch);
30698944Sobrien
307130803Smarceltypedef void (gdbarch_pseudo_register_read_ftype) (struct gdbarch *gdbarch, struct regcache *regcache, int cookednum, void *buf);
308130803Smarcelextern void gdbarch_pseudo_register_read (struct gdbarch *gdbarch, struct regcache *regcache, int cookednum, void *buf);
309130803Smarcelextern void set_gdbarch_pseudo_register_read (struct gdbarch *gdbarch, gdbarch_pseudo_register_read_ftype *pseudo_register_read);
31098944Sobrien
311130803Smarcelextern int gdbarch_pseudo_register_write_p (struct gdbarch *gdbarch);
31298944Sobrien
313130803Smarceltypedef void (gdbarch_pseudo_register_write_ftype) (struct gdbarch *gdbarch, struct regcache *regcache, int cookednum, const void *buf);
314130803Smarcelextern void gdbarch_pseudo_register_write (struct gdbarch *gdbarch, struct regcache *regcache, int cookednum, const void *buf);
315130803Smarcelextern void set_gdbarch_pseudo_register_write (struct gdbarch *gdbarch, gdbarch_pseudo_register_write_ftype *pseudo_register_write);
31698944Sobrien
31798944Sobrienextern int gdbarch_num_regs (struct gdbarch *gdbarch);
31898944Sobrienextern void set_gdbarch_num_regs (struct gdbarch *gdbarch, int num_regs);
31998944Sobrien#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (NUM_REGS)
32098944Sobrien#error "Non multi-arch definition of NUM_REGS"
32198944Sobrien#endif
322130803Smarcel#if !defined (NUM_REGS)
32398944Sobrien#define NUM_REGS (gdbarch_num_regs (current_gdbarch))
32498944Sobrien#endif
32598944Sobrien
32698944Sobrien/* This macro gives the number of pseudo-registers that live in the
32798944Sobrien   register namespace but do not get fetched or stored on the target.
32898944Sobrien   These pseudo-registers may be aliases for other registers,
32998944Sobrien   combinations of other registers, or they may be computed by GDB. */
33098944Sobrien
33198944Sobrienextern int gdbarch_num_pseudo_regs (struct gdbarch *gdbarch);
33298944Sobrienextern void set_gdbarch_num_pseudo_regs (struct gdbarch *gdbarch, int num_pseudo_regs);
33398944Sobrien#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (NUM_PSEUDO_REGS)
33498944Sobrien#error "Non multi-arch definition of NUM_PSEUDO_REGS"
33598944Sobrien#endif
336130803Smarcel#if !defined (NUM_PSEUDO_REGS)
33798944Sobrien#define NUM_PSEUDO_REGS (gdbarch_num_pseudo_regs (current_gdbarch))
33898944Sobrien#endif
33998944Sobrien
340130803Smarcel/* GDB's standard (or well known) register numbers.  These can map onto
341130803Smarcel   a real register or a pseudo (computed) register or not be defined at
342130803Smarcel   all (-1).
343130803Smarcel   SP_REGNUM will hopefully be replaced by UNWIND_SP. */
344130803Smarcel
34598944Sobrienextern int gdbarch_sp_regnum (struct gdbarch *gdbarch);
34698944Sobrienextern void set_gdbarch_sp_regnum (struct gdbarch *gdbarch, int sp_regnum);
34798944Sobrien#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (SP_REGNUM)
34898944Sobrien#error "Non multi-arch definition of SP_REGNUM"
34998944Sobrien#endif
350130803Smarcel#if !defined (SP_REGNUM)
35198944Sobrien#define SP_REGNUM (gdbarch_sp_regnum (current_gdbarch))
35298944Sobrien#endif
35398944Sobrien
35498944Sobrienextern int gdbarch_pc_regnum (struct gdbarch *gdbarch);
35598944Sobrienextern void set_gdbarch_pc_regnum (struct gdbarch *gdbarch, int pc_regnum);
35698944Sobrien#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (PC_REGNUM)
35798944Sobrien#error "Non multi-arch definition of PC_REGNUM"
35898944Sobrien#endif
359130803Smarcel#if !defined (PC_REGNUM)
36098944Sobrien#define PC_REGNUM (gdbarch_pc_regnum (current_gdbarch))
36198944Sobrien#endif
36298944Sobrien
363130803Smarcelextern int gdbarch_ps_regnum (struct gdbarch *gdbarch);
364130803Smarcelextern void set_gdbarch_ps_regnum (struct gdbarch *gdbarch, int ps_regnum);
365130803Smarcel#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (PS_REGNUM)
366130803Smarcel#error "Non multi-arch definition of PS_REGNUM"
36798944Sobrien#endif
368130803Smarcel#if !defined (PS_REGNUM)
369130803Smarcel#define PS_REGNUM (gdbarch_ps_regnum (current_gdbarch))
370130803Smarcel#endif
37198944Sobrien
37298944Sobrienextern int gdbarch_fp0_regnum (struct gdbarch *gdbarch);
37398944Sobrienextern void set_gdbarch_fp0_regnum (struct gdbarch *gdbarch, int fp0_regnum);
37498944Sobrien#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (FP0_REGNUM)
37598944Sobrien#error "Non multi-arch definition of FP0_REGNUM"
37698944Sobrien#endif
377130803Smarcel#if !defined (FP0_REGNUM)
37898944Sobrien#define FP0_REGNUM (gdbarch_fp0_regnum (current_gdbarch))
37998944Sobrien#endif
38098944Sobrien
38198944Sobrien/* Convert stab register number (from `r' declaration) to a gdb REGNUM. */
38298944Sobrien
38398944Sobrientypedef int (gdbarch_stab_reg_to_regnum_ftype) (int stab_regnr);
38498944Sobrienextern int gdbarch_stab_reg_to_regnum (struct gdbarch *gdbarch, int stab_regnr);
38598944Sobrienextern void set_gdbarch_stab_reg_to_regnum (struct gdbarch *gdbarch, gdbarch_stab_reg_to_regnum_ftype *stab_reg_to_regnum);
38698944Sobrien#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (STAB_REG_TO_REGNUM)
38798944Sobrien#error "Non multi-arch definition of STAB_REG_TO_REGNUM"
38898944Sobrien#endif
389130803Smarcel#if !defined (STAB_REG_TO_REGNUM)
39098944Sobrien#define STAB_REG_TO_REGNUM(stab_regnr) (gdbarch_stab_reg_to_regnum (current_gdbarch, stab_regnr))
39198944Sobrien#endif
39298944Sobrien
39398944Sobrien/* Provide a default mapping from a ecoff register number to a gdb REGNUM. */
39498944Sobrien
39598944Sobrientypedef int (gdbarch_ecoff_reg_to_regnum_ftype) (int ecoff_regnr);
39698944Sobrienextern int gdbarch_ecoff_reg_to_regnum (struct gdbarch *gdbarch, int ecoff_regnr);
39798944Sobrienextern void set_gdbarch_ecoff_reg_to_regnum (struct gdbarch *gdbarch, gdbarch_ecoff_reg_to_regnum_ftype *ecoff_reg_to_regnum);
39898944Sobrien#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (ECOFF_REG_TO_REGNUM)
39998944Sobrien#error "Non multi-arch definition of ECOFF_REG_TO_REGNUM"
40098944Sobrien#endif
401130803Smarcel#if !defined (ECOFF_REG_TO_REGNUM)
40298944Sobrien#define ECOFF_REG_TO_REGNUM(ecoff_regnr) (gdbarch_ecoff_reg_to_regnum (current_gdbarch, ecoff_regnr))
40398944Sobrien#endif
40498944Sobrien
40598944Sobrien/* Provide a default mapping from a DWARF register number to a gdb REGNUM. */
40698944Sobrien
40798944Sobrientypedef int (gdbarch_dwarf_reg_to_regnum_ftype) (int dwarf_regnr);
40898944Sobrienextern int gdbarch_dwarf_reg_to_regnum (struct gdbarch *gdbarch, int dwarf_regnr);
40998944Sobrienextern void set_gdbarch_dwarf_reg_to_regnum (struct gdbarch *gdbarch, gdbarch_dwarf_reg_to_regnum_ftype *dwarf_reg_to_regnum);
41098944Sobrien#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (DWARF_REG_TO_REGNUM)
41198944Sobrien#error "Non multi-arch definition of DWARF_REG_TO_REGNUM"
41298944Sobrien#endif
413130803Smarcel#if !defined (DWARF_REG_TO_REGNUM)
41498944Sobrien#define DWARF_REG_TO_REGNUM(dwarf_regnr) (gdbarch_dwarf_reg_to_regnum (current_gdbarch, dwarf_regnr))
41598944Sobrien#endif
41698944Sobrien
417130803Smarcel/* Convert from an sdb register number to an internal gdb register number. */
41898944Sobrien
41998944Sobrientypedef int (gdbarch_sdb_reg_to_regnum_ftype) (int sdb_regnr);
42098944Sobrienextern int gdbarch_sdb_reg_to_regnum (struct gdbarch *gdbarch, int sdb_regnr);
42198944Sobrienextern void set_gdbarch_sdb_reg_to_regnum (struct gdbarch *gdbarch, gdbarch_sdb_reg_to_regnum_ftype *sdb_reg_to_regnum);
42298944Sobrien#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (SDB_REG_TO_REGNUM)
42398944Sobrien#error "Non multi-arch definition of SDB_REG_TO_REGNUM"
42498944Sobrien#endif
425130803Smarcel#if !defined (SDB_REG_TO_REGNUM)
42698944Sobrien#define SDB_REG_TO_REGNUM(sdb_regnr) (gdbarch_sdb_reg_to_regnum (current_gdbarch, sdb_regnr))
42798944Sobrien#endif
42898944Sobrien
42998944Sobrientypedef int (gdbarch_dwarf2_reg_to_regnum_ftype) (int dwarf2_regnr);
43098944Sobrienextern int gdbarch_dwarf2_reg_to_regnum (struct gdbarch *gdbarch, int dwarf2_regnr);
43198944Sobrienextern void set_gdbarch_dwarf2_reg_to_regnum (struct gdbarch *gdbarch, gdbarch_dwarf2_reg_to_regnum_ftype *dwarf2_reg_to_regnum);
43298944Sobrien#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (DWARF2_REG_TO_REGNUM)
43398944Sobrien#error "Non multi-arch definition of DWARF2_REG_TO_REGNUM"
43498944Sobrien#endif
435130803Smarcel#if !defined (DWARF2_REG_TO_REGNUM)
43698944Sobrien#define DWARF2_REG_TO_REGNUM(dwarf2_regnr) (gdbarch_dwarf2_reg_to_regnum (current_gdbarch, dwarf2_regnr))
43798944Sobrien#endif
43898944Sobrien
439130803Smarceltypedef const char * (gdbarch_register_name_ftype) (int regnr);
440130803Smarcelextern const char * gdbarch_register_name (struct gdbarch *gdbarch, int regnr);
44198944Sobrienextern void set_gdbarch_register_name (struct gdbarch *gdbarch, gdbarch_register_name_ftype *register_name);
44298944Sobrien#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (REGISTER_NAME)
44398944Sobrien#error "Non multi-arch definition of REGISTER_NAME"
44498944Sobrien#endif
445130803Smarcel#if !defined (REGISTER_NAME)
44698944Sobrien#define REGISTER_NAME(regnr) (gdbarch_register_name (current_gdbarch, regnr))
44798944Sobrien#endif
448130803Smarcel
449130803Smarcel/* REGISTER_TYPE is a direct replacement for DEPRECATED_REGISTER_VIRTUAL_TYPE. */
450130803Smarcel
451130803Smarcelextern int gdbarch_register_type_p (struct gdbarch *gdbarch);
452130803Smarcel
453130803Smarceltypedef struct type * (gdbarch_register_type_ftype) (struct gdbarch *gdbarch, int reg_nr);
454130803Smarcelextern struct type * gdbarch_register_type (struct gdbarch *gdbarch, int reg_nr);
455130803Smarcelextern void set_gdbarch_register_type (struct gdbarch *gdbarch, gdbarch_register_type_ftype *register_type);
456130803Smarcel
457130803Smarcel/* REGISTER_TYPE is a direct replacement for DEPRECATED_REGISTER_VIRTUAL_TYPE. */
458130803Smarcel
459130803Smarcel#if defined (DEPRECATED_REGISTER_VIRTUAL_TYPE)
460130803Smarcel/* Legacy for systems yet to multi-arch DEPRECATED_REGISTER_VIRTUAL_TYPE */
461130803Smarcel#if !defined (DEPRECATED_REGISTER_VIRTUAL_TYPE_P)
462130803Smarcel#define DEPRECATED_REGISTER_VIRTUAL_TYPE_P() (1)
46398944Sobrien#endif
464130803Smarcel#endif
46598944Sobrien
466130803Smarcelextern int gdbarch_deprecated_register_virtual_type_p (struct gdbarch *gdbarch);
467130803Smarcel#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (DEPRECATED_REGISTER_VIRTUAL_TYPE_P)
468130803Smarcel#error "Non multi-arch definition of DEPRECATED_REGISTER_VIRTUAL_TYPE"
46998944Sobrien#endif
470130803Smarcel#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (DEPRECATED_REGISTER_VIRTUAL_TYPE_P)
471130803Smarcel#define DEPRECATED_REGISTER_VIRTUAL_TYPE_P() (gdbarch_deprecated_register_virtual_type_p (current_gdbarch))
47298944Sobrien#endif
473130803Smarcel
474130803Smarceltypedef struct type * (gdbarch_deprecated_register_virtual_type_ftype) (int reg_nr);
475130803Smarcelextern struct type * gdbarch_deprecated_register_virtual_type (struct gdbarch *gdbarch, int reg_nr);
476130803Smarcelextern void set_gdbarch_deprecated_register_virtual_type (struct gdbarch *gdbarch, gdbarch_deprecated_register_virtual_type_ftype *deprecated_register_virtual_type);
477130803Smarcel#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (DEPRECATED_REGISTER_VIRTUAL_TYPE)
478130803Smarcel#error "Non multi-arch definition of DEPRECATED_REGISTER_VIRTUAL_TYPE"
47998944Sobrien#endif
480130803Smarcel#if !defined (DEPRECATED_REGISTER_VIRTUAL_TYPE)
481130803Smarcel#define DEPRECATED_REGISTER_VIRTUAL_TYPE(reg_nr) (gdbarch_deprecated_register_virtual_type (current_gdbarch, reg_nr))
482130803Smarcel#endif
48398944Sobrien
484130803Smarcel/* DEPRECATED_REGISTER_BYTES can be deleted.  The value is computed
485130803Smarcel   from REGISTER_TYPE. */
486130803Smarcel
487130803Smarcelextern int gdbarch_deprecated_register_bytes (struct gdbarch *gdbarch);
488130803Smarcelextern void set_gdbarch_deprecated_register_bytes (struct gdbarch *gdbarch, int deprecated_register_bytes);
489130803Smarcel#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (DEPRECATED_REGISTER_BYTES)
490130803Smarcel#error "Non multi-arch definition of DEPRECATED_REGISTER_BYTES"
49198944Sobrien#endif
492130803Smarcel#if !defined (DEPRECATED_REGISTER_BYTES)
493130803Smarcel#define DEPRECATED_REGISTER_BYTES (gdbarch_deprecated_register_bytes (current_gdbarch))
49498944Sobrien#endif
495130803Smarcel
496130803Smarcel/* If the value returned by DEPRECATED_REGISTER_BYTE agrees with the
497130803Smarcel   register offsets computed using just REGISTER_TYPE, this can be
498130803Smarcel   deleted.  See: maint print registers.  NOTE: cagney/2002-05-02: This
499130803Smarcel   function with predicate has a valid (callable) initial value.  As a
500130803Smarcel   consequence, even when the predicate is false, the corresponding
501130803Smarcel   function works.  This simplifies the migration process - old code,
502130803Smarcel   calling DEPRECATED_REGISTER_BYTE, doesn't need to be modified. */
503130803Smarcel
504130803Smarcel#if defined (DEPRECATED_REGISTER_BYTE)
505130803Smarcel/* Legacy for systems yet to multi-arch DEPRECATED_REGISTER_BYTE */
506130803Smarcel#if !defined (DEPRECATED_REGISTER_BYTE_P)
507130803Smarcel#define DEPRECATED_REGISTER_BYTE_P() (1)
50898944Sobrien#endif
509130803Smarcel#endif
51098944Sobrien
511130803Smarcelextern int gdbarch_deprecated_register_byte_p (struct gdbarch *gdbarch);
512130803Smarcel#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (DEPRECATED_REGISTER_BYTE_P)
513130803Smarcel#error "Non multi-arch definition of DEPRECATED_REGISTER_BYTE"
51498944Sobrien#endif
515130803Smarcel#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (DEPRECATED_REGISTER_BYTE_P)
516130803Smarcel#define DEPRECATED_REGISTER_BYTE_P() (gdbarch_deprecated_register_byte_p (current_gdbarch))
51798944Sobrien#endif
518130803Smarcel
519130803Smarceltypedef int (gdbarch_deprecated_register_byte_ftype) (int reg_nr);
520130803Smarcelextern int gdbarch_deprecated_register_byte (struct gdbarch *gdbarch, int reg_nr);
521130803Smarcelextern void set_gdbarch_deprecated_register_byte (struct gdbarch *gdbarch, gdbarch_deprecated_register_byte_ftype *deprecated_register_byte);
522130803Smarcel#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (DEPRECATED_REGISTER_BYTE)
523130803Smarcel#error "Non multi-arch definition of DEPRECATED_REGISTER_BYTE"
52498944Sobrien#endif
525130803Smarcel#if !defined (DEPRECATED_REGISTER_BYTE)
526130803Smarcel#define DEPRECATED_REGISTER_BYTE(reg_nr) (gdbarch_deprecated_register_byte (current_gdbarch, reg_nr))
527130803Smarcel#endif
52898944Sobrien
529130803Smarcel/* If all registers have identical raw and virtual sizes and those
530130803Smarcel   sizes agree with the value computed from REGISTER_TYPE,
531130803Smarcel   DEPRECATED_REGISTER_RAW_SIZE can be deleted.  See: maint print
532130803Smarcel   registers. */
533130803Smarcel
534130803Smarcel#if defined (DEPRECATED_REGISTER_RAW_SIZE)
535130803Smarcel/* Legacy for systems yet to multi-arch DEPRECATED_REGISTER_RAW_SIZE */
536130803Smarcel#if !defined (DEPRECATED_REGISTER_RAW_SIZE_P)
537130803Smarcel#define DEPRECATED_REGISTER_RAW_SIZE_P() (1)
53898944Sobrien#endif
53998944Sobrien#endif
540130803Smarcel
541130803Smarcelextern int gdbarch_deprecated_register_raw_size_p (struct gdbarch *gdbarch);
542130803Smarcel#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (DEPRECATED_REGISTER_RAW_SIZE_P)
543130803Smarcel#error "Non multi-arch definition of DEPRECATED_REGISTER_RAW_SIZE"
54498944Sobrien#endif
545130803Smarcel#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (DEPRECATED_REGISTER_RAW_SIZE_P)
546130803Smarcel#define DEPRECATED_REGISTER_RAW_SIZE_P() (gdbarch_deprecated_register_raw_size_p (current_gdbarch))
547130803Smarcel#endif
54898944Sobrien
549130803Smarceltypedef int (gdbarch_deprecated_register_raw_size_ftype) (int reg_nr);
550130803Smarcelextern int gdbarch_deprecated_register_raw_size (struct gdbarch *gdbarch, int reg_nr);
551130803Smarcelextern void set_gdbarch_deprecated_register_raw_size (struct gdbarch *gdbarch, gdbarch_deprecated_register_raw_size_ftype *deprecated_register_raw_size);
552130803Smarcel#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (DEPRECATED_REGISTER_RAW_SIZE)
553130803Smarcel#error "Non multi-arch definition of DEPRECATED_REGISTER_RAW_SIZE"
55498944Sobrien#endif
555130803Smarcel#if !defined (DEPRECATED_REGISTER_RAW_SIZE)
556130803Smarcel#define DEPRECATED_REGISTER_RAW_SIZE(reg_nr) (gdbarch_deprecated_register_raw_size (current_gdbarch, reg_nr))
55798944Sobrien#endif
558130803Smarcel
559130803Smarcel/* If all registers have identical raw and virtual sizes and those
560130803Smarcel   sizes agree with the value computed from REGISTER_TYPE,
561130803Smarcel   DEPRECATED_REGISTER_VIRTUAL_SIZE can be deleted.  See: maint print
562130803Smarcel   registers. */
563130803Smarcel
564130803Smarcel#if defined (DEPRECATED_REGISTER_VIRTUAL_SIZE)
565130803Smarcel/* Legacy for systems yet to multi-arch DEPRECATED_REGISTER_VIRTUAL_SIZE */
566130803Smarcel#if !defined (DEPRECATED_REGISTER_VIRTUAL_SIZE_P)
567130803Smarcel#define DEPRECATED_REGISTER_VIRTUAL_SIZE_P() (1)
56898944Sobrien#endif
569130803Smarcel#endif
57098944Sobrien
571130803Smarcelextern int gdbarch_deprecated_register_virtual_size_p (struct gdbarch *gdbarch);
572130803Smarcel#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (DEPRECATED_REGISTER_VIRTUAL_SIZE_P)
573130803Smarcel#error "Non multi-arch definition of DEPRECATED_REGISTER_VIRTUAL_SIZE"
57498944Sobrien#endif
575130803Smarcel#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (DEPRECATED_REGISTER_VIRTUAL_SIZE_P)
576130803Smarcel#define DEPRECATED_REGISTER_VIRTUAL_SIZE_P() (gdbarch_deprecated_register_virtual_size_p (current_gdbarch))
57798944Sobrien#endif
578130803Smarcel
579130803Smarceltypedef int (gdbarch_deprecated_register_virtual_size_ftype) (int reg_nr);
580130803Smarcelextern int gdbarch_deprecated_register_virtual_size (struct gdbarch *gdbarch, int reg_nr);
581130803Smarcelextern void set_gdbarch_deprecated_register_virtual_size (struct gdbarch *gdbarch, gdbarch_deprecated_register_virtual_size_ftype *deprecated_register_virtual_size);
582130803Smarcel#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (DEPRECATED_REGISTER_VIRTUAL_SIZE)
583130803Smarcel#error "Non multi-arch definition of DEPRECATED_REGISTER_VIRTUAL_SIZE"
58498944Sobrien#endif
585130803Smarcel#if !defined (DEPRECATED_REGISTER_VIRTUAL_SIZE)
586130803Smarcel#define DEPRECATED_REGISTER_VIRTUAL_SIZE(reg_nr) (gdbarch_deprecated_register_virtual_size (current_gdbarch, reg_nr))
587130803Smarcel#endif
58898944Sobrien
589130803Smarcel/* DEPRECATED_MAX_REGISTER_RAW_SIZE can be deleted.  It has been
590130803Smarcel   replaced by the constant MAX_REGISTER_SIZE. */
591130803Smarcel
592130803Smarcel#if defined (DEPRECATED_MAX_REGISTER_RAW_SIZE)
593130803Smarcel/* Legacy for systems yet to multi-arch DEPRECATED_MAX_REGISTER_RAW_SIZE */
594130803Smarcel#if !defined (DEPRECATED_MAX_REGISTER_RAW_SIZE_P)
595130803Smarcel#define DEPRECATED_MAX_REGISTER_RAW_SIZE_P() (1)
59698944Sobrien#endif
59798944Sobrien#endif
59898944Sobrien
599130803Smarcelextern int gdbarch_deprecated_max_register_raw_size_p (struct gdbarch *gdbarch);
600130803Smarcel#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (DEPRECATED_MAX_REGISTER_RAW_SIZE_P)
601130803Smarcel#error "Non multi-arch definition of DEPRECATED_MAX_REGISTER_RAW_SIZE"
60298944Sobrien#endif
603130803Smarcel#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (DEPRECATED_MAX_REGISTER_RAW_SIZE_P)
604130803Smarcel#define DEPRECATED_MAX_REGISTER_RAW_SIZE_P() (gdbarch_deprecated_max_register_raw_size_p (current_gdbarch))
60598944Sobrien#endif
60698944Sobrien
607130803Smarcelextern int gdbarch_deprecated_max_register_raw_size (struct gdbarch *gdbarch);
608130803Smarcelextern void set_gdbarch_deprecated_max_register_raw_size (struct gdbarch *gdbarch, int deprecated_max_register_raw_size);
609130803Smarcel#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (DEPRECATED_MAX_REGISTER_RAW_SIZE)
610130803Smarcel#error "Non multi-arch definition of DEPRECATED_MAX_REGISTER_RAW_SIZE"
61198944Sobrien#endif
612130803Smarcel#if !defined (DEPRECATED_MAX_REGISTER_RAW_SIZE)
613130803Smarcel#define DEPRECATED_MAX_REGISTER_RAW_SIZE (gdbarch_deprecated_max_register_raw_size (current_gdbarch))
614130803Smarcel#endif
61598944Sobrien
616130803Smarcel/* DEPRECATED_MAX_REGISTER_VIRTUAL_SIZE can be deleted.  It has been
617130803Smarcel   replaced by the constant MAX_REGISTER_SIZE. */
618130803Smarcel
619130803Smarcel#if defined (DEPRECATED_MAX_REGISTER_VIRTUAL_SIZE)
620130803Smarcel/* Legacy for systems yet to multi-arch DEPRECATED_MAX_REGISTER_VIRTUAL_SIZE */
621130803Smarcel#if !defined (DEPRECATED_MAX_REGISTER_VIRTUAL_SIZE_P)
622130803Smarcel#define DEPRECATED_MAX_REGISTER_VIRTUAL_SIZE_P() (1)
62398944Sobrien#endif
62498944Sobrien#endif
62598944Sobrien
626130803Smarcelextern int gdbarch_deprecated_max_register_virtual_size_p (struct gdbarch *gdbarch);
627130803Smarcel#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (DEPRECATED_MAX_REGISTER_VIRTUAL_SIZE_P)
628130803Smarcel#error "Non multi-arch definition of DEPRECATED_MAX_REGISTER_VIRTUAL_SIZE"
62998944Sobrien#endif
630130803Smarcel#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (DEPRECATED_MAX_REGISTER_VIRTUAL_SIZE_P)
631130803Smarcel#define DEPRECATED_MAX_REGISTER_VIRTUAL_SIZE_P() (gdbarch_deprecated_max_register_virtual_size_p (current_gdbarch))
632130803Smarcel#endif
63398944Sobrien
634130803Smarcelextern int gdbarch_deprecated_max_register_virtual_size (struct gdbarch *gdbarch);
635130803Smarcelextern void set_gdbarch_deprecated_max_register_virtual_size (struct gdbarch *gdbarch, int deprecated_max_register_virtual_size);
636130803Smarcel#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (DEPRECATED_MAX_REGISTER_VIRTUAL_SIZE)
637130803Smarcel#error "Non multi-arch definition of DEPRECATED_MAX_REGISTER_VIRTUAL_SIZE"
63898944Sobrien#endif
639130803Smarcel#if !defined (DEPRECATED_MAX_REGISTER_VIRTUAL_SIZE)
640130803Smarcel#define DEPRECATED_MAX_REGISTER_VIRTUAL_SIZE (gdbarch_deprecated_max_register_virtual_size (current_gdbarch))
64198944Sobrien#endif
64298944Sobrien
643130803Smarcel/* See gdbint.texinfo, and PUSH_DUMMY_CALL. */
64498944Sobrien
645130803Smarcelextern int gdbarch_unwind_dummy_id_p (struct gdbarch *gdbarch);
646130803Smarcel
647130803Smarceltypedef struct frame_id (gdbarch_unwind_dummy_id_ftype) (struct gdbarch *gdbarch, struct frame_info *info);
648130803Smarcelextern struct frame_id gdbarch_unwind_dummy_id (struct gdbarch *gdbarch, struct frame_info *info);
649130803Smarcelextern void set_gdbarch_unwind_dummy_id (struct gdbarch *gdbarch, gdbarch_unwind_dummy_id_ftype *unwind_dummy_id);
650130803Smarcel
651130803Smarcel/* Implement UNWIND_DUMMY_ID and PUSH_DUMMY_CALL, then delete
652130803Smarcel   SAVE_DUMMY_FRAME_TOS. */
653130803Smarcel
654130803Smarcel#if defined (DEPRECATED_SAVE_DUMMY_FRAME_TOS)
655130803Smarcel/* Legacy for systems yet to multi-arch DEPRECATED_SAVE_DUMMY_FRAME_TOS */
656130803Smarcel#if !defined (DEPRECATED_SAVE_DUMMY_FRAME_TOS_P)
657130803Smarcel#define DEPRECATED_SAVE_DUMMY_FRAME_TOS_P() (1)
65898944Sobrien#endif
659130803Smarcel#endif
66098944Sobrien
661130803Smarcelextern int gdbarch_deprecated_save_dummy_frame_tos_p (struct gdbarch *gdbarch);
662130803Smarcel#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (DEPRECATED_SAVE_DUMMY_FRAME_TOS_P)
663130803Smarcel#error "Non multi-arch definition of DEPRECATED_SAVE_DUMMY_FRAME_TOS"
66498944Sobrien#endif
665130803Smarcel#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (DEPRECATED_SAVE_DUMMY_FRAME_TOS_P)
666130803Smarcel#define DEPRECATED_SAVE_DUMMY_FRAME_TOS_P() (gdbarch_deprecated_save_dummy_frame_tos_p (current_gdbarch))
66798944Sobrien#endif
66898944Sobrien
669130803Smarceltypedef void (gdbarch_deprecated_save_dummy_frame_tos_ftype) (CORE_ADDR sp);
670130803Smarcelextern void gdbarch_deprecated_save_dummy_frame_tos (struct gdbarch *gdbarch, CORE_ADDR sp);
671130803Smarcelextern void set_gdbarch_deprecated_save_dummy_frame_tos (struct gdbarch *gdbarch, gdbarch_deprecated_save_dummy_frame_tos_ftype *deprecated_save_dummy_frame_tos);
672130803Smarcel#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (DEPRECATED_SAVE_DUMMY_FRAME_TOS)
673130803Smarcel#error "Non multi-arch definition of DEPRECATED_SAVE_DUMMY_FRAME_TOS"
67498944Sobrien#endif
675130803Smarcel#if !defined (DEPRECATED_SAVE_DUMMY_FRAME_TOS)
676130803Smarcel#define DEPRECATED_SAVE_DUMMY_FRAME_TOS(sp) (gdbarch_deprecated_save_dummy_frame_tos (current_gdbarch, sp))
67798944Sobrien#endif
67898944Sobrien
679130803Smarcel/* Implement UNWIND_DUMMY_ID and PUSH_DUMMY_CALL, then delete
680130803Smarcel   DEPRECATED_FP_REGNUM. */
681130803Smarcel
682130803Smarcelextern int gdbarch_deprecated_fp_regnum (struct gdbarch *gdbarch);
683130803Smarcelextern void set_gdbarch_deprecated_fp_regnum (struct gdbarch *gdbarch, int deprecated_fp_regnum);
684130803Smarcel#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (DEPRECATED_FP_REGNUM)
685130803Smarcel#error "Non multi-arch definition of DEPRECATED_FP_REGNUM"
68698944Sobrien#endif
687130803Smarcel#if !defined (DEPRECATED_FP_REGNUM)
688130803Smarcel#define DEPRECATED_FP_REGNUM (gdbarch_deprecated_fp_regnum (current_gdbarch))
689130803Smarcel#endif
69098944Sobrien
691130803Smarcel/* Implement UNWIND_DUMMY_ID and PUSH_DUMMY_CALL, then delete
692130803Smarcel   DEPRECATED_TARGET_READ_FP. */
693130803Smarcel
694130803Smarcel#if defined (DEPRECATED_TARGET_READ_FP)
695130803Smarcel/* Legacy for systems yet to multi-arch DEPRECATED_TARGET_READ_FP */
696130803Smarcel#if !defined (DEPRECATED_TARGET_READ_FP_P)
697130803Smarcel#define DEPRECATED_TARGET_READ_FP_P() (1)
69898944Sobrien#endif
69998944Sobrien#endif
70098944Sobrien
701130803Smarcelextern int gdbarch_deprecated_target_read_fp_p (struct gdbarch *gdbarch);
702130803Smarcel#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (DEPRECATED_TARGET_READ_FP_P)
703130803Smarcel#error "Non multi-arch definition of DEPRECATED_TARGET_READ_FP"
70498944Sobrien#endif
705130803Smarcel#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (DEPRECATED_TARGET_READ_FP_P)
706130803Smarcel#define DEPRECATED_TARGET_READ_FP_P() (gdbarch_deprecated_target_read_fp_p (current_gdbarch))
707130803Smarcel#endif
70898944Sobrien
709130803Smarceltypedef CORE_ADDR (gdbarch_deprecated_target_read_fp_ftype) (void);
710130803Smarcelextern CORE_ADDR gdbarch_deprecated_target_read_fp (struct gdbarch *gdbarch);
711130803Smarcelextern void set_gdbarch_deprecated_target_read_fp (struct gdbarch *gdbarch, gdbarch_deprecated_target_read_fp_ftype *deprecated_target_read_fp);
712130803Smarcel#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (DEPRECATED_TARGET_READ_FP)
713130803Smarcel#error "Non multi-arch definition of DEPRECATED_TARGET_READ_FP"
71498944Sobrien#endif
715130803Smarcel#if !defined (DEPRECATED_TARGET_READ_FP)
716130803Smarcel#define DEPRECATED_TARGET_READ_FP() (gdbarch_deprecated_target_read_fp (current_gdbarch))
71798944Sobrien#endif
71898944Sobrien
719130803Smarcel/* See gdbint.texinfo.  See infcall.c.  New, all singing all dancing,
720130803Smarcel   replacement for DEPRECATED_PUSH_ARGUMENTS. */
721130803Smarcel
722130803Smarcelextern int gdbarch_push_dummy_call_p (struct gdbarch *gdbarch);
723130803Smarcel
724130803Smarceltypedef CORE_ADDR (gdbarch_push_dummy_call_ftype) (struct gdbarch *gdbarch, CORE_ADDR func_addr, struct regcache *regcache, CORE_ADDR bp_addr, int nargs, struct value **args, CORE_ADDR sp, int struct_return, CORE_ADDR struct_addr);
725130803Smarcelextern CORE_ADDR gdbarch_push_dummy_call (struct gdbarch *gdbarch, CORE_ADDR func_addr, struct regcache *regcache, CORE_ADDR bp_addr, int nargs, struct value **args, CORE_ADDR sp, int struct_return, CORE_ADDR struct_addr);
726130803Smarcelextern void set_gdbarch_push_dummy_call (struct gdbarch *gdbarch, gdbarch_push_dummy_call_ftype *push_dummy_call);
727130803Smarcel
728130803Smarcel/* PUSH_DUMMY_CALL is a direct replacement for DEPRECATED_PUSH_ARGUMENTS. */
729130803Smarcel
730130803Smarcel#if defined (DEPRECATED_PUSH_ARGUMENTS)
731130803Smarcel/* Legacy for systems yet to multi-arch DEPRECATED_PUSH_ARGUMENTS */
732130803Smarcel#if !defined (DEPRECATED_PUSH_ARGUMENTS_P)
733130803Smarcel#define DEPRECATED_PUSH_ARGUMENTS_P() (1)
73498944Sobrien#endif
735130803Smarcel#endif
73698944Sobrien
737130803Smarcelextern int gdbarch_deprecated_push_arguments_p (struct gdbarch *gdbarch);
738130803Smarcel#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (DEPRECATED_PUSH_ARGUMENTS_P)
739130803Smarcel#error "Non multi-arch definition of DEPRECATED_PUSH_ARGUMENTS"
74098944Sobrien#endif
741130803Smarcel#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (DEPRECATED_PUSH_ARGUMENTS_P)
742130803Smarcel#define DEPRECATED_PUSH_ARGUMENTS_P() (gdbarch_deprecated_push_arguments_p (current_gdbarch))
74398944Sobrien#endif
74498944Sobrien
745130803Smarceltypedef CORE_ADDR (gdbarch_deprecated_push_arguments_ftype) (int nargs, struct value **args, CORE_ADDR sp, int struct_return, CORE_ADDR struct_addr);
746130803Smarcelextern CORE_ADDR gdbarch_deprecated_push_arguments (struct gdbarch *gdbarch, int nargs, struct value **args, CORE_ADDR sp, int struct_return, CORE_ADDR struct_addr);
747130803Smarcelextern void set_gdbarch_deprecated_push_arguments (struct gdbarch *gdbarch, gdbarch_deprecated_push_arguments_ftype *deprecated_push_arguments);
748130803Smarcel#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (DEPRECATED_PUSH_ARGUMENTS)
749130803Smarcel#error "Non multi-arch definition of DEPRECATED_PUSH_ARGUMENTS"
75098944Sobrien#endif
751130803Smarcel#if !defined (DEPRECATED_PUSH_ARGUMENTS)
752130803Smarcel#define DEPRECATED_PUSH_ARGUMENTS(nargs, args, sp, struct_return, struct_addr) (gdbarch_deprecated_push_arguments (current_gdbarch, nargs, args, sp, struct_return, struct_addr))
753130803Smarcel#endif
75498944Sobrien
755130803Smarcel/* DEPRECATED_USE_GENERIC_DUMMY_FRAMES can be deleted.  Always true. */
756130803Smarcel
757130803Smarcelextern int gdbarch_deprecated_use_generic_dummy_frames (struct gdbarch *gdbarch);
758130803Smarcelextern void set_gdbarch_deprecated_use_generic_dummy_frames (struct gdbarch *gdbarch, int deprecated_use_generic_dummy_frames);
759130803Smarcel#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (DEPRECATED_USE_GENERIC_DUMMY_FRAMES)
760130803Smarcel#error "Non multi-arch definition of DEPRECATED_USE_GENERIC_DUMMY_FRAMES"
76198944Sobrien#endif
762130803Smarcel#if !defined (DEPRECATED_USE_GENERIC_DUMMY_FRAMES)
763130803Smarcel#define DEPRECATED_USE_GENERIC_DUMMY_FRAMES (gdbarch_deprecated_use_generic_dummy_frames (current_gdbarch))
76498944Sobrien#endif
76598944Sobrien
766130803Smarcel/* Implement PUSH_RETURN_ADDRESS, and then merge in
767130803Smarcel   DEPRECATED_PUSH_RETURN_ADDRESS. */
76898944Sobrien
769130803Smarcel#if defined (DEPRECATED_PUSH_RETURN_ADDRESS)
770130803Smarcel/* Legacy for systems yet to multi-arch DEPRECATED_PUSH_RETURN_ADDRESS */
771130803Smarcel#if !defined (DEPRECATED_PUSH_RETURN_ADDRESS_P)
772130803Smarcel#define DEPRECATED_PUSH_RETURN_ADDRESS_P() (1)
77398944Sobrien#endif
77498944Sobrien#endif
77598944Sobrien
776130803Smarcelextern int gdbarch_deprecated_push_return_address_p (struct gdbarch *gdbarch);
777130803Smarcel#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (DEPRECATED_PUSH_RETURN_ADDRESS_P)
778130803Smarcel#error "Non multi-arch definition of DEPRECATED_PUSH_RETURN_ADDRESS"
77998944Sobrien#endif
780130803Smarcel#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (DEPRECATED_PUSH_RETURN_ADDRESS_P)
781130803Smarcel#define DEPRECATED_PUSH_RETURN_ADDRESS_P() (gdbarch_deprecated_push_return_address_p (current_gdbarch))
782130803Smarcel#endif
78398944Sobrien
784130803Smarceltypedef CORE_ADDR (gdbarch_deprecated_push_return_address_ftype) (CORE_ADDR pc, CORE_ADDR sp);
785130803Smarcelextern CORE_ADDR gdbarch_deprecated_push_return_address (struct gdbarch *gdbarch, CORE_ADDR pc, CORE_ADDR sp);
786130803Smarcelextern void set_gdbarch_deprecated_push_return_address (struct gdbarch *gdbarch, gdbarch_deprecated_push_return_address_ftype *deprecated_push_return_address);
787130803Smarcel#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (DEPRECATED_PUSH_RETURN_ADDRESS)
788130803Smarcel#error "Non multi-arch definition of DEPRECATED_PUSH_RETURN_ADDRESS"
78998944Sobrien#endif
790130803Smarcel#if !defined (DEPRECATED_PUSH_RETURN_ADDRESS)
791130803Smarcel#define DEPRECATED_PUSH_RETURN_ADDRESS(pc, sp) (gdbarch_deprecated_push_return_address (current_gdbarch, pc, sp))
79298944Sobrien#endif
79398944Sobrien
794130803Smarcel/* Implement PUSH_DUMMY_CALL, then merge in DEPRECATED_DUMMY_WRITE_SP. */
795130803Smarcel
796130803Smarcel#if defined (DEPRECATED_DUMMY_WRITE_SP)
797130803Smarcel/* Legacy for systems yet to multi-arch DEPRECATED_DUMMY_WRITE_SP */
798130803Smarcel#if !defined (DEPRECATED_DUMMY_WRITE_SP_P)
799130803Smarcel#define DEPRECATED_DUMMY_WRITE_SP_P() (1)
80098944Sobrien#endif
801130803Smarcel#endif
80298944Sobrien
803130803Smarcelextern int gdbarch_deprecated_dummy_write_sp_p (struct gdbarch *gdbarch);
804130803Smarcel#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (DEPRECATED_DUMMY_WRITE_SP_P)
805130803Smarcel#error "Non multi-arch definition of DEPRECATED_DUMMY_WRITE_SP"
80698944Sobrien#endif
807130803Smarcel#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (DEPRECATED_DUMMY_WRITE_SP_P)
808130803Smarcel#define DEPRECATED_DUMMY_WRITE_SP_P() (gdbarch_deprecated_dummy_write_sp_p (current_gdbarch))
80998944Sobrien#endif
810130803Smarcel
811130803Smarceltypedef void (gdbarch_deprecated_dummy_write_sp_ftype) (CORE_ADDR val);
812130803Smarcelextern void gdbarch_deprecated_dummy_write_sp (struct gdbarch *gdbarch, CORE_ADDR val);
813130803Smarcelextern void set_gdbarch_deprecated_dummy_write_sp (struct gdbarch *gdbarch, gdbarch_deprecated_dummy_write_sp_ftype *deprecated_dummy_write_sp);
814130803Smarcel#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (DEPRECATED_DUMMY_WRITE_SP)
815130803Smarcel#error "Non multi-arch definition of DEPRECATED_DUMMY_WRITE_SP"
81698944Sobrien#endif
817130803Smarcel#if !defined (DEPRECATED_DUMMY_WRITE_SP)
818130803Smarcel#define DEPRECATED_DUMMY_WRITE_SP(val) (gdbarch_deprecated_dummy_write_sp (current_gdbarch, val))
819130803Smarcel#endif
82098944Sobrien
821130803Smarcel/* DEPRECATED_REGISTER_SIZE can be deleted. */
82298944Sobrien
823130803Smarcelextern int gdbarch_deprecated_register_size (struct gdbarch *gdbarch);
824130803Smarcelextern void set_gdbarch_deprecated_register_size (struct gdbarch *gdbarch, int deprecated_register_size);
825130803Smarcel#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (DEPRECATED_REGISTER_SIZE)
826130803Smarcel#error "Non multi-arch definition of DEPRECATED_REGISTER_SIZE"
82798944Sobrien#endif
828130803Smarcel#if !defined (DEPRECATED_REGISTER_SIZE)
829130803Smarcel#define DEPRECATED_REGISTER_SIZE (gdbarch_deprecated_register_size (current_gdbarch))
83098944Sobrien#endif
83198944Sobrien
83298944Sobrienextern int gdbarch_call_dummy_location (struct gdbarch *gdbarch);
83398944Sobrienextern void set_gdbarch_call_dummy_location (struct gdbarch *gdbarch, int call_dummy_location);
834130803Smarcel#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (CALL_DUMMY_LOCATION)
83598944Sobrien#error "Non multi-arch definition of CALL_DUMMY_LOCATION"
83698944Sobrien#endif
837130803Smarcel#if !defined (CALL_DUMMY_LOCATION)
83898944Sobrien#define CALL_DUMMY_LOCATION (gdbarch_call_dummy_location (current_gdbarch))
83998944Sobrien#endif
840130803Smarcel
841130803Smarcel/* DEPRECATED_CALL_DUMMY_START_OFFSET can be deleted. */
842130803Smarcel
843130803Smarcelextern CORE_ADDR gdbarch_deprecated_call_dummy_start_offset (struct gdbarch *gdbarch);
844130803Smarcelextern void set_gdbarch_deprecated_call_dummy_start_offset (struct gdbarch *gdbarch, CORE_ADDR deprecated_call_dummy_start_offset);
845130803Smarcel#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (DEPRECATED_CALL_DUMMY_START_OFFSET)
846130803Smarcel#error "Non multi-arch definition of DEPRECATED_CALL_DUMMY_START_OFFSET"
84798944Sobrien#endif
848130803Smarcel#if !defined (DEPRECATED_CALL_DUMMY_START_OFFSET)
849130803Smarcel#define DEPRECATED_CALL_DUMMY_START_OFFSET (gdbarch_deprecated_call_dummy_start_offset (current_gdbarch))
850130803Smarcel#endif
85198944Sobrien
852130803Smarcel/* DEPRECATED_CALL_DUMMY_BREAKPOINT_OFFSET can be deleted. */
853130803Smarcel
854130803Smarcelextern CORE_ADDR gdbarch_deprecated_call_dummy_breakpoint_offset (struct gdbarch *gdbarch);
855130803Smarcelextern void set_gdbarch_deprecated_call_dummy_breakpoint_offset (struct gdbarch *gdbarch, CORE_ADDR deprecated_call_dummy_breakpoint_offset);
856130803Smarcel#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (DEPRECATED_CALL_DUMMY_BREAKPOINT_OFFSET)
857130803Smarcel#error "Non multi-arch definition of DEPRECATED_CALL_DUMMY_BREAKPOINT_OFFSET"
85898944Sobrien#endif
859130803Smarcel#if !defined (DEPRECATED_CALL_DUMMY_BREAKPOINT_OFFSET)
860130803Smarcel#define DEPRECATED_CALL_DUMMY_BREAKPOINT_OFFSET (gdbarch_deprecated_call_dummy_breakpoint_offset (current_gdbarch))
86198944Sobrien#endif
862130803Smarcel
863130803Smarcel/* DEPRECATED_CALL_DUMMY_LENGTH can be deleted. */
864130803Smarcel
865130803Smarcelextern int gdbarch_deprecated_call_dummy_length (struct gdbarch *gdbarch);
866130803Smarcelextern void set_gdbarch_deprecated_call_dummy_length (struct gdbarch *gdbarch, int deprecated_call_dummy_length);
867130803Smarcel#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (DEPRECATED_CALL_DUMMY_LENGTH)
868130803Smarcel#error "Non multi-arch definition of DEPRECATED_CALL_DUMMY_LENGTH"
86998944Sobrien#endif
870130803Smarcel#if !defined (DEPRECATED_CALL_DUMMY_LENGTH)
871130803Smarcel#define DEPRECATED_CALL_DUMMY_LENGTH (gdbarch_deprecated_call_dummy_length (current_gdbarch))
872130803Smarcel#endif
87398944Sobrien
874130803Smarcel/* DEPRECATED_CALL_DUMMY_WORDS can be deleted. */
875130803Smarcel
876130803Smarcelextern LONGEST * gdbarch_deprecated_call_dummy_words (struct gdbarch *gdbarch);
877130803Smarcelextern void set_gdbarch_deprecated_call_dummy_words (struct gdbarch *gdbarch, LONGEST * deprecated_call_dummy_words);
878130803Smarcel#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (DEPRECATED_CALL_DUMMY_WORDS)
879130803Smarcel#error "Non multi-arch definition of DEPRECATED_CALL_DUMMY_WORDS"
88098944Sobrien#endif
881130803Smarcel#if !defined (DEPRECATED_CALL_DUMMY_WORDS)
882130803Smarcel#define DEPRECATED_CALL_DUMMY_WORDS (gdbarch_deprecated_call_dummy_words (current_gdbarch))
88398944Sobrien#endif
884130803Smarcel
885130803Smarcel/* Implement PUSH_DUMMY_CALL, then delete DEPRECATED_SIZEOF_CALL_DUMMY_WORDS. */
886130803Smarcel
887130803Smarcelextern int gdbarch_deprecated_sizeof_call_dummy_words (struct gdbarch *gdbarch);
888130803Smarcelextern void set_gdbarch_deprecated_sizeof_call_dummy_words (struct gdbarch *gdbarch, int deprecated_sizeof_call_dummy_words);
889130803Smarcel#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (DEPRECATED_SIZEOF_CALL_DUMMY_WORDS)
890130803Smarcel#error "Non multi-arch definition of DEPRECATED_SIZEOF_CALL_DUMMY_WORDS"
89198944Sobrien#endif
892130803Smarcel#if !defined (DEPRECATED_SIZEOF_CALL_DUMMY_WORDS)
893130803Smarcel#define DEPRECATED_SIZEOF_CALL_DUMMY_WORDS (gdbarch_deprecated_sizeof_call_dummy_words (current_gdbarch))
894130803Smarcel#endif
89598944Sobrien
896130803Smarcel/* DEPRECATED_FIX_CALL_DUMMY can be deleted.  For the SPARC, implement
897130803Smarcel   PUSH_DUMMY_CODE and set CALL_DUMMY_LOCATION to ON_STACK. */
898130803Smarcel
899130803Smarcel#if defined (DEPRECATED_FIX_CALL_DUMMY)
900130803Smarcel/* Legacy for systems yet to multi-arch DEPRECATED_FIX_CALL_DUMMY */
901130803Smarcel#if !defined (DEPRECATED_FIX_CALL_DUMMY_P)
902130803Smarcel#define DEPRECATED_FIX_CALL_DUMMY_P() (1)
90398944Sobrien#endif
90498944Sobrien#endif
905130803Smarcel
906130803Smarcelextern int gdbarch_deprecated_fix_call_dummy_p (struct gdbarch *gdbarch);
907130803Smarcel#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (DEPRECATED_FIX_CALL_DUMMY_P)
908130803Smarcel#error "Non multi-arch definition of DEPRECATED_FIX_CALL_DUMMY"
90998944Sobrien#endif
910130803Smarcel#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (DEPRECATED_FIX_CALL_DUMMY_P)
911130803Smarcel#define DEPRECATED_FIX_CALL_DUMMY_P() (gdbarch_deprecated_fix_call_dummy_p (current_gdbarch))
912130803Smarcel#endif
91398944Sobrien
914130803Smarceltypedef void (gdbarch_deprecated_fix_call_dummy_ftype) (char *dummy, CORE_ADDR pc, CORE_ADDR fun, int nargs, struct value **args, struct type *type, int gcc_p);
915130803Smarcelextern void gdbarch_deprecated_fix_call_dummy (struct gdbarch *gdbarch, char *dummy, CORE_ADDR pc, CORE_ADDR fun, int nargs, struct value **args, struct type *type, int gcc_p);
916130803Smarcelextern void set_gdbarch_deprecated_fix_call_dummy (struct gdbarch *gdbarch, gdbarch_deprecated_fix_call_dummy_ftype *deprecated_fix_call_dummy);
917130803Smarcel#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (DEPRECATED_FIX_CALL_DUMMY)
918130803Smarcel#error "Non multi-arch definition of DEPRECATED_FIX_CALL_DUMMY"
91998944Sobrien#endif
920130803Smarcel#if !defined (DEPRECATED_FIX_CALL_DUMMY)
921130803Smarcel#define DEPRECATED_FIX_CALL_DUMMY(dummy, pc, fun, nargs, args, type, gcc_p) (gdbarch_deprecated_fix_call_dummy (current_gdbarch, dummy, pc, fun, nargs, args, type, gcc_p))
92298944Sobrien#endif
923130803Smarcel
924130803Smarcel/* This is a replacement for DEPRECATED_FIX_CALL_DUMMY et.al. */
925130803Smarcel
926130803Smarcelextern int gdbarch_push_dummy_code_p (struct gdbarch *gdbarch);
927130803Smarcel
928130803Smarceltypedef CORE_ADDR (gdbarch_push_dummy_code_ftype) (struct gdbarch *gdbarch, CORE_ADDR sp, CORE_ADDR funaddr, int using_gcc, struct value **args, int nargs, struct type *value_type, CORE_ADDR *real_pc, CORE_ADDR *bp_addr);
929130803Smarcelextern CORE_ADDR gdbarch_push_dummy_code (struct gdbarch *gdbarch, CORE_ADDR sp, CORE_ADDR funaddr, int using_gcc, struct value **args, int nargs, struct type *value_type, CORE_ADDR *real_pc, CORE_ADDR *bp_addr);
930130803Smarcelextern void set_gdbarch_push_dummy_code (struct gdbarch *gdbarch, gdbarch_push_dummy_code_ftype *push_dummy_code);
931130803Smarcel
932130803Smarcel/* Implement PUSH_DUMMY_CALL, then delete DEPRECATED_PUSH_DUMMY_FRAME. */
933130803Smarcel
934130803Smarcel#if defined (DEPRECATED_PUSH_DUMMY_FRAME)
935130803Smarcel/* Legacy for systems yet to multi-arch DEPRECATED_PUSH_DUMMY_FRAME */
936130803Smarcel#if !defined (DEPRECATED_PUSH_DUMMY_FRAME_P)
937130803Smarcel#define DEPRECATED_PUSH_DUMMY_FRAME_P() (1)
93898944Sobrien#endif
939130803Smarcel#endif
94098944Sobrien
941130803Smarcelextern int gdbarch_deprecated_push_dummy_frame_p (struct gdbarch *gdbarch);
942130803Smarcel#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (DEPRECATED_PUSH_DUMMY_FRAME_P)
943130803Smarcel#error "Non multi-arch definition of DEPRECATED_PUSH_DUMMY_FRAME"
94498944Sobrien#endif
945130803Smarcel#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (DEPRECATED_PUSH_DUMMY_FRAME_P)
946130803Smarcel#define DEPRECATED_PUSH_DUMMY_FRAME_P() (gdbarch_deprecated_push_dummy_frame_p (current_gdbarch))
94798944Sobrien#endif
948130803Smarcel
949130803Smarceltypedef void (gdbarch_deprecated_push_dummy_frame_ftype) (void);
950130803Smarcelextern void gdbarch_deprecated_push_dummy_frame (struct gdbarch *gdbarch);
951130803Smarcelextern void set_gdbarch_deprecated_push_dummy_frame (struct gdbarch *gdbarch, gdbarch_deprecated_push_dummy_frame_ftype *deprecated_push_dummy_frame);
952130803Smarcel#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (DEPRECATED_PUSH_DUMMY_FRAME)
953130803Smarcel#error "Non multi-arch definition of DEPRECATED_PUSH_DUMMY_FRAME"
95498944Sobrien#endif
955130803Smarcel#if !defined (DEPRECATED_PUSH_DUMMY_FRAME)
956130803Smarcel#define DEPRECATED_PUSH_DUMMY_FRAME (gdbarch_deprecated_push_dummy_frame (current_gdbarch))
957130803Smarcel#endif
95898944Sobrien
959130803Smarcel#if defined (DEPRECATED_DO_REGISTERS_INFO)
960130803Smarcel/* Legacy for systems yet to multi-arch DEPRECATED_DO_REGISTERS_INFO */
961130803Smarcel#if !defined (DEPRECATED_DO_REGISTERS_INFO_P)
962130803Smarcel#define DEPRECATED_DO_REGISTERS_INFO_P() (1)
96398944Sobrien#endif
96498944Sobrien#endif
965130803Smarcel
966130803Smarcelextern int gdbarch_deprecated_do_registers_info_p (struct gdbarch *gdbarch);
967130803Smarcel#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (DEPRECATED_DO_REGISTERS_INFO_P)
968130803Smarcel#error "Non multi-arch definition of DEPRECATED_DO_REGISTERS_INFO"
96998944Sobrien#endif
970130803Smarcel#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (DEPRECATED_DO_REGISTERS_INFO_P)
971130803Smarcel#define DEPRECATED_DO_REGISTERS_INFO_P() (gdbarch_deprecated_do_registers_info_p (current_gdbarch))
972130803Smarcel#endif
97398944Sobrien
974130803Smarceltypedef void (gdbarch_deprecated_do_registers_info_ftype) (int reg_nr, int fpregs);
975130803Smarcelextern void gdbarch_deprecated_do_registers_info (struct gdbarch *gdbarch, int reg_nr, int fpregs);
976130803Smarcelextern void set_gdbarch_deprecated_do_registers_info (struct gdbarch *gdbarch, gdbarch_deprecated_do_registers_info_ftype *deprecated_do_registers_info);
977130803Smarcel#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (DEPRECATED_DO_REGISTERS_INFO)
978130803Smarcel#error "Non multi-arch definition of DEPRECATED_DO_REGISTERS_INFO"
97998944Sobrien#endif
980130803Smarcel#if !defined (DEPRECATED_DO_REGISTERS_INFO)
981130803Smarcel#define DEPRECATED_DO_REGISTERS_INFO(reg_nr, fpregs) (gdbarch_deprecated_do_registers_info (current_gdbarch, reg_nr, fpregs))
98298944Sobrien#endif
983130803Smarcel
984130803Smarceltypedef void (gdbarch_print_registers_info_ftype) (struct gdbarch *gdbarch, struct ui_file *file, struct frame_info *frame, int regnum, int all);
985130803Smarcelextern void gdbarch_print_registers_info (struct gdbarch *gdbarch, struct ui_file *file, struct frame_info *frame, int regnum, int all);
986130803Smarcelextern void set_gdbarch_print_registers_info (struct gdbarch *gdbarch, gdbarch_print_registers_info_ftype *print_registers_info);
987130803Smarcel
988130803Smarcelextern int gdbarch_print_float_info_p (struct gdbarch *gdbarch);
989130803Smarcel
990130803Smarceltypedef void (gdbarch_print_float_info_ftype) (struct gdbarch *gdbarch, struct ui_file *file, struct frame_info *frame, const char *args);
991130803Smarcelextern void gdbarch_print_float_info (struct gdbarch *gdbarch, struct ui_file *file, struct frame_info *frame, const char *args);
992130803Smarcelextern void set_gdbarch_print_float_info (struct gdbarch *gdbarch, gdbarch_print_float_info_ftype *print_float_info);
993130803Smarcel
994130803Smarcelextern int gdbarch_print_vector_info_p (struct gdbarch *gdbarch);
995130803Smarcel
996130803Smarceltypedef void (gdbarch_print_vector_info_ftype) (struct gdbarch *gdbarch, struct ui_file *file, struct frame_info *frame, const char *args);
997130803Smarcelextern void gdbarch_print_vector_info (struct gdbarch *gdbarch, struct ui_file *file, struct frame_info *frame, const char *args);
998130803Smarcelextern void set_gdbarch_print_vector_info (struct gdbarch *gdbarch, gdbarch_print_vector_info_ftype *print_vector_info);
999130803Smarcel
1000130803Smarcel/* MAP a GDB RAW register number onto a simulator register number.  See
1001130803Smarcel   also include/...-sim.h. */
1002130803Smarcel
1003130803Smarceltypedef int (gdbarch_register_sim_regno_ftype) (int reg_nr);
1004130803Smarcelextern int gdbarch_register_sim_regno (struct gdbarch *gdbarch, int reg_nr);
1005130803Smarcelextern void set_gdbarch_register_sim_regno (struct gdbarch *gdbarch, gdbarch_register_sim_regno_ftype *register_sim_regno);
1006130803Smarcel#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (REGISTER_SIM_REGNO)
1007130803Smarcel#error "Non multi-arch definition of REGISTER_SIM_REGNO"
100898944Sobrien#endif
1009130803Smarcel#if !defined (REGISTER_SIM_REGNO)
1010130803Smarcel#define REGISTER_SIM_REGNO(reg_nr) (gdbarch_register_sim_regno (current_gdbarch, reg_nr))
1011130803Smarcel#endif
101298944Sobrien
1013130803Smarcel#if defined (REGISTER_BYTES_OK)
1014130803Smarcel/* Legacy for systems yet to multi-arch REGISTER_BYTES_OK */
1015130803Smarcel#if !defined (REGISTER_BYTES_OK_P)
1016130803Smarcel#define REGISTER_BYTES_OK_P() (1)
101798944Sobrien#endif
1018130803Smarcel#endif
101998944Sobrien
1020130803Smarcelextern int gdbarch_register_bytes_ok_p (struct gdbarch *gdbarch);
1021130803Smarcel#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (REGISTER_BYTES_OK_P)
1022130803Smarcel#error "Non multi-arch definition of REGISTER_BYTES_OK"
102398944Sobrien#endif
1024130803Smarcel#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (REGISTER_BYTES_OK_P)
1025130803Smarcel#define REGISTER_BYTES_OK_P() (gdbarch_register_bytes_ok_p (current_gdbarch))
102698944Sobrien#endif
1027130803Smarcel
1028130803Smarceltypedef int (gdbarch_register_bytes_ok_ftype) (long nr_bytes);
1029130803Smarcelextern int gdbarch_register_bytes_ok (struct gdbarch *gdbarch, long nr_bytes);
1030130803Smarcelextern void set_gdbarch_register_bytes_ok (struct gdbarch *gdbarch, gdbarch_register_bytes_ok_ftype *register_bytes_ok);
1031130803Smarcel#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (REGISTER_BYTES_OK)
1032130803Smarcel#error "Non multi-arch definition of REGISTER_BYTES_OK"
103398944Sobrien#endif
1034130803Smarcel#if !defined (REGISTER_BYTES_OK)
1035130803Smarcel#define REGISTER_BYTES_OK(nr_bytes) (gdbarch_register_bytes_ok (current_gdbarch, nr_bytes))
1036130803Smarcel#endif
103798944Sobrien
1038130803Smarceltypedef int (gdbarch_cannot_fetch_register_ftype) (int regnum);
1039130803Smarcelextern int gdbarch_cannot_fetch_register (struct gdbarch *gdbarch, int regnum);
1040130803Smarcelextern void set_gdbarch_cannot_fetch_register (struct gdbarch *gdbarch, gdbarch_cannot_fetch_register_ftype *cannot_fetch_register);
1041130803Smarcel#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (CANNOT_FETCH_REGISTER)
1042130803Smarcel#error "Non multi-arch definition of CANNOT_FETCH_REGISTER"
104398944Sobrien#endif
1044130803Smarcel#if !defined (CANNOT_FETCH_REGISTER)
1045130803Smarcel#define CANNOT_FETCH_REGISTER(regnum) (gdbarch_cannot_fetch_register (current_gdbarch, regnum))
1046130803Smarcel#endif
104798944Sobrien
1048130803Smarceltypedef int (gdbarch_cannot_store_register_ftype) (int regnum);
1049130803Smarcelextern int gdbarch_cannot_store_register (struct gdbarch *gdbarch, int regnum);
1050130803Smarcelextern void set_gdbarch_cannot_store_register (struct gdbarch *gdbarch, gdbarch_cannot_store_register_ftype *cannot_store_register);
1051130803Smarcel#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (CANNOT_STORE_REGISTER)
1052130803Smarcel#error "Non multi-arch definition of CANNOT_STORE_REGISTER"
105398944Sobrien#endif
1054130803Smarcel#if !defined (CANNOT_STORE_REGISTER)
1055130803Smarcel#define CANNOT_STORE_REGISTER(regnum) (gdbarch_cannot_store_register (current_gdbarch, regnum))
105698944Sobrien#endif
1057130803Smarcel
1058130803Smarcel/* setjmp/longjmp support. */
1059130803Smarcel
1060130803Smarcel#if defined (GET_LONGJMP_TARGET)
1061130803Smarcel/* Legacy for systems yet to multi-arch GET_LONGJMP_TARGET */
1062130803Smarcel#if !defined (GET_LONGJMP_TARGET_P)
1063130803Smarcel#define GET_LONGJMP_TARGET_P() (1)
106498944Sobrien#endif
1065130803Smarcel#endif
106698944Sobrien
1067130803Smarcelextern int gdbarch_get_longjmp_target_p (struct gdbarch *gdbarch);
1068130803Smarcel#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (GET_LONGJMP_TARGET_P)
1069130803Smarcel#error "Non multi-arch definition of GET_LONGJMP_TARGET"
107098944Sobrien#endif
1071130803Smarcel#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (GET_LONGJMP_TARGET_P)
1072130803Smarcel#define GET_LONGJMP_TARGET_P() (gdbarch_get_longjmp_target_p (current_gdbarch))
107398944Sobrien#endif
1074130803Smarcel
1075130803Smarceltypedef int (gdbarch_get_longjmp_target_ftype) (CORE_ADDR *pc);
1076130803Smarcelextern int gdbarch_get_longjmp_target (struct gdbarch *gdbarch, CORE_ADDR *pc);
1077130803Smarcelextern void set_gdbarch_get_longjmp_target (struct gdbarch *gdbarch, gdbarch_get_longjmp_target_ftype *get_longjmp_target);
1078130803Smarcel#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (GET_LONGJMP_TARGET)
1079130803Smarcel#error "Non multi-arch definition of GET_LONGJMP_TARGET"
108098944Sobrien#endif
1081130803Smarcel#if !defined (GET_LONGJMP_TARGET)
1082130803Smarcel#define GET_LONGJMP_TARGET(pc) (gdbarch_get_longjmp_target (current_gdbarch, pc))
1083130803Smarcel#endif
108498944Sobrien
1085130803Smarcel/* NOTE: cagney/2002-11-24: This function with predicate has a valid
1086130803Smarcel   (callable) initial value.  As a consequence, even when the predicate
1087130803Smarcel   is false, the corresponding function works.  This simplifies the
1088130803Smarcel   migration process - old code, calling DEPRECATED_PC_IN_CALL_DUMMY(),
1089130803Smarcel   doesn't need to be modified. */
1090130803Smarcel
1091130803Smarcel#if defined (DEPRECATED_PC_IN_CALL_DUMMY)
1092130803Smarcel/* Legacy for systems yet to multi-arch DEPRECATED_PC_IN_CALL_DUMMY */
1093130803Smarcel#if !defined (DEPRECATED_PC_IN_CALL_DUMMY_P)
1094130803Smarcel#define DEPRECATED_PC_IN_CALL_DUMMY_P() (1)
109598944Sobrien#endif
109698944Sobrien#endif
1097130803Smarcel
1098130803Smarcelextern int gdbarch_deprecated_pc_in_call_dummy_p (struct gdbarch *gdbarch);
1099130803Smarcel#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (DEPRECATED_PC_IN_CALL_DUMMY_P)
1100130803Smarcel#error "Non multi-arch definition of DEPRECATED_PC_IN_CALL_DUMMY"
110198944Sobrien#endif
1102130803Smarcel#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (DEPRECATED_PC_IN_CALL_DUMMY_P)
1103130803Smarcel#define DEPRECATED_PC_IN_CALL_DUMMY_P() (gdbarch_deprecated_pc_in_call_dummy_p (current_gdbarch))
1104130803Smarcel#endif
110598944Sobrien
1106130803Smarceltypedef int (gdbarch_deprecated_pc_in_call_dummy_ftype) (CORE_ADDR pc, CORE_ADDR sp, CORE_ADDR frame_address);
1107130803Smarcelextern int gdbarch_deprecated_pc_in_call_dummy (struct gdbarch *gdbarch, CORE_ADDR pc, CORE_ADDR sp, CORE_ADDR frame_address);
1108130803Smarcelextern void set_gdbarch_deprecated_pc_in_call_dummy (struct gdbarch *gdbarch, gdbarch_deprecated_pc_in_call_dummy_ftype *deprecated_pc_in_call_dummy);
1109130803Smarcel#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (DEPRECATED_PC_IN_CALL_DUMMY)
1110130803Smarcel#error "Non multi-arch definition of DEPRECATED_PC_IN_CALL_DUMMY"
111198944Sobrien#endif
1112130803Smarcel#if !defined (DEPRECATED_PC_IN_CALL_DUMMY)
1113130803Smarcel#define DEPRECATED_PC_IN_CALL_DUMMY(pc, sp, frame_address) (gdbarch_deprecated_pc_in_call_dummy (current_gdbarch, pc, sp, frame_address))
111498944Sobrien#endif
1115130803Smarcel
1116130803Smarcel#if defined (DEPRECATED_INIT_FRAME_PC_FIRST)
1117130803Smarcel/* Legacy for systems yet to multi-arch DEPRECATED_INIT_FRAME_PC_FIRST */
1118130803Smarcel#if !defined (DEPRECATED_INIT_FRAME_PC_FIRST_P)
1119130803Smarcel#define DEPRECATED_INIT_FRAME_PC_FIRST_P() (1)
112098944Sobrien#endif
1121130803Smarcel#endif
112298944Sobrien
1123130803Smarcelextern int gdbarch_deprecated_init_frame_pc_first_p (struct gdbarch *gdbarch);
1124130803Smarcel#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (DEPRECATED_INIT_FRAME_PC_FIRST_P)
1125130803Smarcel#error "Non multi-arch definition of DEPRECATED_INIT_FRAME_PC_FIRST"
112698944Sobrien#endif
1127130803Smarcel#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (DEPRECATED_INIT_FRAME_PC_FIRST_P)
1128130803Smarcel#define DEPRECATED_INIT_FRAME_PC_FIRST_P() (gdbarch_deprecated_init_frame_pc_first_p (current_gdbarch))
1129130803Smarcel#endif
113098944Sobrien
1131130803Smarceltypedef CORE_ADDR (gdbarch_deprecated_init_frame_pc_first_ftype) (int fromleaf, struct frame_info *prev);
1132130803Smarcelextern CORE_ADDR gdbarch_deprecated_init_frame_pc_first (struct gdbarch *gdbarch, int fromleaf, struct frame_info *prev);
1133130803Smarcelextern void set_gdbarch_deprecated_init_frame_pc_first (struct gdbarch *gdbarch, gdbarch_deprecated_init_frame_pc_first_ftype *deprecated_init_frame_pc_first);
1134130803Smarcel#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (DEPRECATED_INIT_FRAME_PC_FIRST)
1135130803Smarcel#error "Non multi-arch definition of DEPRECATED_INIT_FRAME_PC_FIRST"
113698944Sobrien#endif
1137130803Smarcel#if !defined (DEPRECATED_INIT_FRAME_PC_FIRST)
1138130803Smarcel#define DEPRECATED_INIT_FRAME_PC_FIRST(fromleaf, prev) (gdbarch_deprecated_init_frame_pc_first (current_gdbarch, fromleaf, prev))
113998944Sobrien#endif
1140130803Smarcel
1141130803Smarcel#if defined (DEPRECATED_INIT_FRAME_PC)
1142130803Smarcel/* Legacy for systems yet to multi-arch DEPRECATED_INIT_FRAME_PC */
1143130803Smarcel#if !defined (DEPRECATED_INIT_FRAME_PC_P)
1144130803Smarcel#define DEPRECATED_INIT_FRAME_PC_P() (1)
114598944Sobrien#endif
1146130803Smarcel#endif
114798944Sobrien
1148130803Smarcelextern int gdbarch_deprecated_init_frame_pc_p (struct gdbarch *gdbarch);
1149130803Smarcel#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (DEPRECATED_INIT_FRAME_PC_P)
1150130803Smarcel#error "Non multi-arch definition of DEPRECATED_INIT_FRAME_PC"
115198944Sobrien#endif
1152130803Smarcel#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (DEPRECATED_INIT_FRAME_PC_P)
1153130803Smarcel#define DEPRECATED_INIT_FRAME_PC_P() (gdbarch_deprecated_init_frame_pc_p (current_gdbarch))
1154130803Smarcel#endif
115598944Sobrien
1156130803Smarceltypedef CORE_ADDR (gdbarch_deprecated_init_frame_pc_ftype) (int fromleaf, struct frame_info *prev);
1157130803Smarcelextern CORE_ADDR gdbarch_deprecated_init_frame_pc (struct gdbarch *gdbarch, int fromleaf, struct frame_info *prev);
1158130803Smarcelextern void set_gdbarch_deprecated_init_frame_pc (struct gdbarch *gdbarch, gdbarch_deprecated_init_frame_pc_ftype *deprecated_init_frame_pc);
1159130803Smarcel#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (DEPRECATED_INIT_FRAME_PC)
1160130803Smarcel#error "Non multi-arch definition of DEPRECATED_INIT_FRAME_PC"
116198944Sobrien#endif
1162130803Smarcel#if !defined (DEPRECATED_INIT_FRAME_PC)
1163130803Smarcel#define DEPRECATED_INIT_FRAME_PC(fromleaf, prev) (gdbarch_deprecated_init_frame_pc (current_gdbarch, fromleaf, prev))
116498944Sobrien#endif
116598944Sobrien
116698944Sobrienextern int gdbarch_believe_pcc_promotion (struct gdbarch *gdbarch);
116798944Sobrienextern void set_gdbarch_believe_pcc_promotion (struct gdbarch *gdbarch, int believe_pcc_promotion);
116898944Sobrien#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (BELIEVE_PCC_PROMOTION)
116998944Sobrien#error "Non multi-arch definition of BELIEVE_PCC_PROMOTION"
117098944Sobrien#endif
1171130803Smarcel#if !defined (BELIEVE_PCC_PROMOTION)
117298944Sobrien#define BELIEVE_PCC_PROMOTION (gdbarch_believe_pcc_promotion (current_gdbarch))
117398944Sobrien#endif
117498944Sobrien
117598944Sobrienextern int gdbarch_believe_pcc_promotion_type (struct gdbarch *gdbarch);
117698944Sobrienextern void set_gdbarch_believe_pcc_promotion_type (struct gdbarch *gdbarch, int believe_pcc_promotion_type);
117798944Sobrien#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (BELIEVE_PCC_PROMOTION_TYPE)
117898944Sobrien#error "Non multi-arch definition of BELIEVE_PCC_PROMOTION_TYPE"
117998944Sobrien#endif
1180130803Smarcel#if !defined (BELIEVE_PCC_PROMOTION_TYPE)
118198944Sobrien#define BELIEVE_PCC_PROMOTION_TYPE (gdbarch_believe_pcc_promotion_type (current_gdbarch))
118298944Sobrien#endif
118398944Sobrien
1184130803Smarcel#if defined (DEPRECATED_GET_SAVED_REGISTER)
1185130803Smarcel/* Legacy for systems yet to multi-arch DEPRECATED_GET_SAVED_REGISTER */
1186130803Smarcel#if !defined (DEPRECATED_GET_SAVED_REGISTER_P)
1187130803Smarcel#define DEPRECATED_GET_SAVED_REGISTER_P() (1)
118898944Sobrien#endif
118998944Sobrien#endif
119098944Sobrien
1191130803Smarcelextern int gdbarch_deprecated_get_saved_register_p (struct gdbarch *gdbarch);
1192130803Smarcel#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (DEPRECATED_GET_SAVED_REGISTER_P)
1193130803Smarcel#error "Non multi-arch definition of DEPRECATED_GET_SAVED_REGISTER"
119498944Sobrien#endif
1195130803Smarcel#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (DEPRECATED_GET_SAVED_REGISTER_P)
1196130803Smarcel#define DEPRECATED_GET_SAVED_REGISTER_P() (gdbarch_deprecated_get_saved_register_p (current_gdbarch))
119798944Sobrien#endif
119898944Sobrien
1199130803Smarceltypedef void (gdbarch_deprecated_get_saved_register_ftype) (char *raw_buffer, int *optimized, CORE_ADDR *addrp, struct frame_info *frame, int regnum, enum lval_type *lval);
1200130803Smarcelextern void gdbarch_deprecated_get_saved_register (struct gdbarch *gdbarch, char *raw_buffer, int *optimized, CORE_ADDR *addrp, struct frame_info *frame, int regnum, enum lval_type *lval);
1201130803Smarcelextern void set_gdbarch_deprecated_get_saved_register (struct gdbarch *gdbarch, gdbarch_deprecated_get_saved_register_ftype *deprecated_get_saved_register);
1202130803Smarcel#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (DEPRECATED_GET_SAVED_REGISTER)
1203130803Smarcel#error "Non multi-arch definition of DEPRECATED_GET_SAVED_REGISTER"
120498944Sobrien#endif
1205130803Smarcel#if !defined (DEPRECATED_GET_SAVED_REGISTER)
1206130803Smarcel#define DEPRECATED_GET_SAVED_REGISTER(raw_buffer, optimized, addrp, frame, regnum, lval) (gdbarch_deprecated_get_saved_register (current_gdbarch, raw_buffer, optimized, addrp, frame, regnum, lval))
120798944Sobrien#endif
120898944Sobrien
1209130803Smarcel/* For register <-> value conversions, replaced by CONVERT_REGISTER_P et.al.
1210130803Smarcel   For raw <-> cooked register conversions, replaced by pseudo registers. */
121198944Sobrien
1212130803Smarcel#if defined (DEPRECATED_REGISTER_CONVERTIBLE)
1213130803Smarcel/* Legacy for systems yet to multi-arch DEPRECATED_REGISTER_CONVERTIBLE */
1214130803Smarcel#if !defined (DEPRECATED_REGISTER_CONVERTIBLE_P)
1215130803Smarcel#define DEPRECATED_REGISTER_CONVERTIBLE_P() (1)
121698944Sobrien#endif
121798944Sobrien#endif
121898944Sobrien
1219130803Smarcelextern int gdbarch_deprecated_register_convertible_p (struct gdbarch *gdbarch);
1220130803Smarcel#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (DEPRECATED_REGISTER_CONVERTIBLE_P)
1221130803Smarcel#error "Non multi-arch definition of DEPRECATED_REGISTER_CONVERTIBLE"
122298944Sobrien#endif
1223130803Smarcel#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (DEPRECATED_REGISTER_CONVERTIBLE_P)
1224130803Smarcel#define DEPRECATED_REGISTER_CONVERTIBLE_P() (gdbarch_deprecated_register_convertible_p (current_gdbarch))
122598944Sobrien#endif
122698944Sobrien
1227130803Smarceltypedef int (gdbarch_deprecated_register_convertible_ftype) (int nr);
1228130803Smarcelextern int gdbarch_deprecated_register_convertible (struct gdbarch *gdbarch, int nr);
1229130803Smarcelextern void set_gdbarch_deprecated_register_convertible (struct gdbarch *gdbarch, gdbarch_deprecated_register_convertible_ftype *deprecated_register_convertible);
1230130803Smarcel#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (DEPRECATED_REGISTER_CONVERTIBLE)
1231130803Smarcel#error "Non multi-arch definition of DEPRECATED_REGISTER_CONVERTIBLE"
123298944Sobrien#endif
1233130803Smarcel#if !defined (DEPRECATED_REGISTER_CONVERTIBLE)
1234130803Smarcel#define DEPRECATED_REGISTER_CONVERTIBLE(nr) (gdbarch_deprecated_register_convertible (current_gdbarch, nr))
123598944Sobrien#endif
123698944Sobrien
1237130803Smarcel/* For register <-> value conversions, replaced by CONVERT_REGISTER_P et.al.
1238130803Smarcel   For raw <-> cooked register conversions, replaced by pseudo registers. */
123998944Sobrien
1240130803Smarceltypedef void (gdbarch_deprecated_register_convert_to_virtual_ftype) (int regnum, struct type *type, char *from, char *to);
1241130803Smarcelextern void gdbarch_deprecated_register_convert_to_virtual (struct gdbarch *gdbarch, int regnum, struct type *type, char *from, char *to);
1242130803Smarcelextern void set_gdbarch_deprecated_register_convert_to_virtual (struct gdbarch *gdbarch, gdbarch_deprecated_register_convert_to_virtual_ftype *deprecated_register_convert_to_virtual);
1243130803Smarcel#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (DEPRECATED_REGISTER_CONVERT_TO_VIRTUAL)
1244130803Smarcel#error "Non multi-arch definition of DEPRECATED_REGISTER_CONVERT_TO_VIRTUAL"
124598944Sobrien#endif
1246130803Smarcel#if !defined (DEPRECATED_REGISTER_CONVERT_TO_VIRTUAL)
1247130803Smarcel#define DEPRECATED_REGISTER_CONVERT_TO_VIRTUAL(regnum, type, from, to) (gdbarch_deprecated_register_convert_to_virtual (current_gdbarch, regnum, type, from, to))
124898944Sobrien#endif
124998944Sobrien
1250130803Smarcel/* For register <-> value conversions, replaced by CONVERT_REGISTER_P et.al.
1251130803Smarcel   For raw <-> cooked register conversions, replaced by pseudo registers. */
125298944Sobrien
1253130803Smarceltypedef void (gdbarch_deprecated_register_convert_to_raw_ftype) (struct type *type, int regnum, const char *from, char *to);
1254130803Smarcelextern void gdbarch_deprecated_register_convert_to_raw (struct gdbarch *gdbarch, struct type *type, int regnum, const char *from, char *to);
1255130803Smarcelextern void set_gdbarch_deprecated_register_convert_to_raw (struct gdbarch *gdbarch, gdbarch_deprecated_register_convert_to_raw_ftype *deprecated_register_convert_to_raw);
1256130803Smarcel#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (DEPRECATED_REGISTER_CONVERT_TO_RAW)
1257130803Smarcel#error "Non multi-arch definition of DEPRECATED_REGISTER_CONVERT_TO_RAW"
125898944Sobrien#endif
1259130803Smarcel#if !defined (DEPRECATED_REGISTER_CONVERT_TO_RAW)
1260130803Smarcel#define DEPRECATED_REGISTER_CONVERT_TO_RAW(type, regnum, from, to) (gdbarch_deprecated_register_convert_to_raw (current_gdbarch, type, regnum, from, to))
126198944Sobrien#endif
126298944Sobrien
1263130803Smarceltypedef int (gdbarch_convert_register_p_ftype) (int regnum, struct type *type);
1264130803Smarcelextern int gdbarch_convert_register_p (struct gdbarch *gdbarch, int regnum, struct type *type);
1265130803Smarcelextern void set_gdbarch_convert_register_p (struct gdbarch *gdbarch, gdbarch_convert_register_p_ftype *convert_register_p);
1266130803Smarcel#if (GDB_MULTI_ARCH >= GDB_MULTI_ARCH_PARTIAL) && defined (CONVERT_REGISTER_P)
1267130803Smarcel#error "Non multi-arch definition of CONVERT_REGISTER_P"
126898944Sobrien#endif
1269130803Smarcel#if !defined (CONVERT_REGISTER_P)
1270130803Smarcel#define CONVERT_REGISTER_P(regnum, type) (gdbarch_convert_register_p (current_gdbarch, regnum, type))
127198944Sobrien#endif
127298944Sobrien
1273130803Smarceltypedef void (gdbarch_register_to_value_ftype) (struct frame_info *frame, int regnum, struct type *type, void *buf);
1274130803Smarcelextern void gdbarch_register_to_value (struct gdbarch *gdbarch, struct frame_info *frame, int regnum, struct type *type, void *buf);
1275130803Smarcelextern void set_gdbarch_register_to_value (struct gdbarch *gdbarch, gdbarch_register_to_value_ftype *register_to_value);
1276130803Smarcel#if (GDB_MULTI_ARCH >= GDB_MULTI_ARCH_PARTIAL) && defined (REGISTER_TO_VALUE)
1277130803Smarcel#error "Non multi-arch definition of REGISTER_TO_VALUE"
127898944Sobrien#endif
1279130803Smarcel#if !defined (REGISTER_TO_VALUE)
1280130803Smarcel#define REGISTER_TO_VALUE(frame, regnum, type, buf) (gdbarch_register_to_value (current_gdbarch, frame, regnum, type, buf))
128198944Sobrien#endif
128298944Sobrien
1283130803Smarceltypedef void (gdbarch_value_to_register_ftype) (struct frame_info *frame, int regnum, struct type *type, const void *buf);
1284130803Smarcelextern void gdbarch_value_to_register (struct gdbarch *gdbarch, struct frame_info *frame, int regnum, struct type *type, const void *buf);
1285130803Smarcelextern void set_gdbarch_value_to_register (struct gdbarch *gdbarch, gdbarch_value_to_register_ftype *value_to_register);
1286130803Smarcel#if (GDB_MULTI_ARCH >= GDB_MULTI_ARCH_PARTIAL) && defined (VALUE_TO_REGISTER)
1287130803Smarcel#error "Non multi-arch definition of VALUE_TO_REGISTER"
128898944Sobrien#endif
1289130803Smarcel#if !defined (VALUE_TO_REGISTER)
1290130803Smarcel#define VALUE_TO_REGISTER(frame, regnum, type, buf) (gdbarch_value_to_register (current_gdbarch, frame, regnum, type, buf))
129198944Sobrien#endif
129298944Sobrien
1293130803Smarceltypedef CORE_ADDR (gdbarch_pointer_to_address_ftype) (struct type *type, const void *buf);
1294130803Smarcelextern CORE_ADDR gdbarch_pointer_to_address (struct gdbarch *gdbarch, struct type *type, const void *buf);
129598944Sobrienextern void set_gdbarch_pointer_to_address (struct gdbarch *gdbarch, gdbarch_pointer_to_address_ftype *pointer_to_address);
129698944Sobrien#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (POINTER_TO_ADDRESS)
129798944Sobrien#error "Non multi-arch definition of POINTER_TO_ADDRESS"
129898944Sobrien#endif
1299130803Smarcel#if !defined (POINTER_TO_ADDRESS)
130098944Sobrien#define POINTER_TO_ADDRESS(type, buf) (gdbarch_pointer_to_address (current_gdbarch, type, buf))
130198944Sobrien#endif
130298944Sobrien
130398944Sobrientypedef void (gdbarch_address_to_pointer_ftype) (struct type *type, void *buf, CORE_ADDR addr);
130498944Sobrienextern void gdbarch_address_to_pointer (struct gdbarch *gdbarch, struct type *type, void *buf, CORE_ADDR addr);
130598944Sobrienextern void set_gdbarch_address_to_pointer (struct gdbarch *gdbarch, gdbarch_address_to_pointer_ftype *address_to_pointer);
130698944Sobrien#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (ADDRESS_TO_POINTER)
130798944Sobrien#error "Non multi-arch definition of ADDRESS_TO_POINTER"
130898944Sobrien#endif
1309130803Smarcel#if !defined (ADDRESS_TO_POINTER)
131098944Sobrien#define ADDRESS_TO_POINTER(type, buf, addr) (gdbarch_address_to_pointer (current_gdbarch, type, buf, addr))
131198944Sobrien#endif
131298944Sobrien
131398944Sobrien#if defined (INTEGER_TO_ADDRESS)
131498944Sobrien/* Legacy for systems yet to multi-arch INTEGER_TO_ADDRESS */
131598944Sobrien#if !defined (INTEGER_TO_ADDRESS_P)
131698944Sobrien#define INTEGER_TO_ADDRESS_P() (1)
131798944Sobrien#endif
131898944Sobrien#endif
131998944Sobrien
132098944Sobrienextern int gdbarch_integer_to_address_p (struct gdbarch *gdbarch);
132198944Sobrien#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (INTEGER_TO_ADDRESS_P)
132298944Sobrien#error "Non multi-arch definition of INTEGER_TO_ADDRESS"
132398944Sobrien#endif
132498944Sobrien#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (INTEGER_TO_ADDRESS_P)
132598944Sobrien#define INTEGER_TO_ADDRESS_P() (gdbarch_integer_to_address_p (current_gdbarch))
132698944Sobrien#endif
132798944Sobrien
132898944Sobrientypedef CORE_ADDR (gdbarch_integer_to_address_ftype) (struct type *type, void *buf);
132998944Sobrienextern CORE_ADDR gdbarch_integer_to_address (struct gdbarch *gdbarch, struct type *type, void *buf);
133098944Sobrienextern void set_gdbarch_integer_to_address (struct gdbarch *gdbarch, gdbarch_integer_to_address_ftype *integer_to_address);
133198944Sobrien#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (INTEGER_TO_ADDRESS)
133298944Sobrien#error "Non multi-arch definition of INTEGER_TO_ADDRESS"
133398944Sobrien#endif
1334130803Smarcel#if !defined (INTEGER_TO_ADDRESS)
133598944Sobrien#define INTEGER_TO_ADDRESS(type, buf) (gdbarch_integer_to_address (current_gdbarch, type, buf))
133698944Sobrien#endif
133798944Sobrien
1338130803Smarcel#if defined (DEPRECATED_POP_FRAME)
1339130803Smarcel/* Legacy for systems yet to multi-arch DEPRECATED_POP_FRAME */
1340130803Smarcel#if !defined (DEPRECATED_POP_FRAME_P)
1341130803Smarcel#define DEPRECATED_POP_FRAME_P() (1)
134298944Sobrien#endif
1343130803Smarcel#endif
134498944Sobrien
1345130803Smarcelextern int gdbarch_deprecated_pop_frame_p (struct gdbarch *gdbarch);
1346130803Smarcel#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (DEPRECATED_POP_FRAME_P)
1347130803Smarcel#error "Non multi-arch definition of DEPRECATED_POP_FRAME"
134898944Sobrien#endif
1349130803Smarcel#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (DEPRECATED_POP_FRAME_P)
1350130803Smarcel#define DEPRECATED_POP_FRAME_P() (gdbarch_deprecated_pop_frame_p (current_gdbarch))
135198944Sobrien#endif
135298944Sobrien
1353130803Smarceltypedef void (gdbarch_deprecated_pop_frame_ftype) (void);
1354130803Smarcelextern void gdbarch_deprecated_pop_frame (struct gdbarch *gdbarch);
1355130803Smarcelextern void set_gdbarch_deprecated_pop_frame (struct gdbarch *gdbarch, gdbarch_deprecated_pop_frame_ftype *deprecated_pop_frame);
1356130803Smarcel#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (DEPRECATED_POP_FRAME)
1357130803Smarcel#error "Non multi-arch definition of DEPRECATED_POP_FRAME"
135898944Sobrien#endif
1359130803Smarcel#if !defined (DEPRECATED_POP_FRAME)
1360130803Smarcel#define DEPRECATED_POP_FRAME (gdbarch_deprecated_pop_frame (current_gdbarch))
136198944Sobrien#endif
136298944Sobrien
1363130803Smarcel/* NOTE: cagney/2003-03-24: Replaced by PUSH_ARGUMENTS. */
136498944Sobrien
1365130803Smarcel#if defined (DEPRECATED_STORE_STRUCT_RETURN)
1366130803Smarcel/* Legacy for systems yet to multi-arch DEPRECATED_STORE_STRUCT_RETURN */
1367130803Smarcel#if !defined (DEPRECATED_STORE_STRUCT_RETURN_P)
1368130803Smarcel#define DEPRECATED_STORE_STRUCT_RETURN_P() (1)
136998944Sobrien#endif
137098944Sobrien#endif
137198944Sobrien
1372130803Smarcelextern int gdbarch_deprecated_store_struct_return_p (struct gdbarch *gdbarch);
1373130803Smarcel#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (DEPRECATED_STORE_STRUCT_RETURN_P)
1374130803Smarcel#error "Non multi-arch definition of DEPRECATED_STORE_STRUCT_RETURN"
137598944Sobrien#endif
1376130803Smarcel#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (DEPRECATED_STORE_STRUCT_RETURN_P)
1377130803Smarcel#define DEPRECATED_STORE_STRUCT_RETURN_P() (gdbarch_deprecated_store_struct_return_p (current_gdbarch))
137898944Sobrien#endif
137998944Sobrien
1380130803Smarceltypedef void (gdbarch_deprecated_store_struct_return_ftype) (CORE_ADDR addr, CORE_ADDR sp);
1381130803Smarcelextern void gdbarch_deprecated_store_struct_return (struct gdbarch *gdbarch, CORE_ADDR addr, CORE_ADDR sp);
1382130803Smarcelextern void set_gdbarch_deprecated_store_struct_return (struct gdbarch *gdbarch, gdbarch_deprecated_store_struct_return_ftype *deprecated_store_struct_return);
1383130803Smarcel#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (DEPRECATED_STORE_STRUCT_RETURN)
1384130803Smarcel#error "Non multi-arch definition of DEPRECATED_STORE_STRUCT_RETURN"
138598944Sobrien#endif
1386130803Smarcel#if !defined (DEPRECATED_STORE_STRUCT_RETURN)
1387130803Smarcel#define DEPRECATED_STORE_STRUCT_RETURN(addr, sp) (gdbarch_deprecated_store_struct_return (current_gdbarch, addr, sp))
138898944Sobrien#endif
138998944Sobrien
1390130803Smarcel/* It has been suggested that this, well actually its predecessor,
1391130803Smarcel   should take the type/value of the function to be called and not the
1392130803Smarcel   return type.  This is left as an exercise for the reader. */
139398944Sobrien
1394130803Smarcelextern int gdbarch_return_value_p (struct gdbarch *gdbarch);
139598944Sobrien
1396130803Smarceltypedef enum return_value_convention (gdbarch_return_value_ftype) (struct gdbarch *gdbarch, struct type *valtype, struct regcache *regcache, void *readbuf, const void *writebuf);
1397130803Smarcelextern enum return_value_convention gdbarch_return_value (struct gdbarch *gdbarch, struct type *valtype, struct regcache *regcache, void *readbuf, const void *writebuf);
1398130803Smarcelextern void set_gdbarch_return_value (struct gdbarch *gdbarch, gdbarch_return_value_ftype *return_value);
139998944Sobrien
1400130803Smarcel/* The deprecated methods RETURN_VALUE_ON_STACK, EXTRACT_RETURN_VALUE,
1401130803Smarcel   STORE_RETURN_VALUE and USE_STRUCT_CONVENTION have all been folded
1402130803Smarcel   into RETURN_VALUE. */
140398944Sobrien
1404130803Smarceltypedef int (gdbarch_return_value_on_stack_ftype) (struct type *type);
1405130803Smarcelextern int gdbarch_return_value_on_stack (struct gdbarch *gdbarch, struct type *type);
1406130803Smarcelextern void set_gdbarch_return_value_on_stack (struct gdbarch *gdbarch, gdbarch_return_value_on_stack_ftype *return_value_on_stack);
1407130803Smarcel#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (RETURN_VALUE_ON_STACK)
1408130803Smarcel#error "Non multi-arch definition of RETURN_VALUE_ON_STACK"
140998944Sobrien#endif
1410130803Smarcel#if !defined (RETURN_VALUE_ON_STACK)
1411130803Smarcel#define RETURN_VALUE_ON_STACK(type) (gdbarch_return_value_on_stack (current_gdbarch, type))
141298944Sobrien#endif
141398944Sobrien
1414130803Smarceltypedef void (gdbarch_extract_return_value_ftype) (struct type *type, struct regcache *regcache, void *valbuf);
1415130803Smarcelextern void gdbarch_extract_return_value (struct gdbarch *gdbarch, struct type *type, struct regcache *regcache, void *valbuf);
1416130803Smarcelextern void set_gdbarch_extract_return_value (struct gdbarch *gdbarch, gdbarch_extract_return_value_ftype *extract_return_value);
1417130803Smarcel#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (EXTRACT_RETURN_VALUE)
1418130803Smarcel#error "Non multi-arch definition of EXTRACT_RETURN_VALUE"
141998944Sobrien#endif
1420130803Smarcel#if !defined (EXTRACT_RETURN_VALUE)
1421130803Smarcel#define EXTRACT_RETURN_VALUE(type, regcache, valbuf) (gdbarch_extract_return_value (current_gdbarch, type, regcache, valbuf))
142298944Sobrien#endif
142398944Sobrien
1424130803Smarceltypedef void (gdbarch_store_return_value_ftype) (struct type *type, struct regcache *regcache, const void *valbuf);
1425130803Smarcelextern void gdbarch_store_return_value (struct gdbarch *gdbarch, struct type *type, struct regcache *regcache, const void *valbuf);
142698944Sobrienextern void set_gdbarch_store_return_value (struct gdbarch *gdbarch, gdbarch_store_return_value_ftype *store_return_value);
142798944Sobrien#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (STORE_RETURN_VALUE)
142898944Sobrien#error "Non multi-arch definition of STORE_RETURN_VALUE"
142998944Sobrien#endif
1430130803Smarcel#if !defined (STORE_RETURN_VALUE)
1431130803Smarcel#define STORE_RETURN_VALUE(type, regcache, valbuf) (gdbarch_store_return_value (current_gdbarch, type, regcache, valbuf))
143298944Sobrien#endif
143398944Sobrien
1434130803Smarceltypedef void (gdbarch_deprecated_extract_return_value_ftype) (struct type *type, char *regbuf, char *valbuf);
1435130803Smarcelextern void gdbarch_deprecated_extract_return_value (struct gdbarch *gdbarch, struct type *type, char *regbuf, char *valbuf);
1436130803Smarcelextern void set_gdbarch_deprecated_extract_return_value (struct gdbarch *gdbarch, gdbarch_deprecated_extract_return_value_ftype *deprecated_extract_return_value);
1437130803Smarcel#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (DEPRECATED_EXTRACT_RETURN_VALUE)
1438130803Smarcel#error "Non multi-arch definition of DEPRECATED_EXTRACT_RETURN_VALUE"
143998944Sobrien#endif
1440130803Smarcel#if !defined (DEPRECATED_EXTRACT_RETURN_VALUE)
1441130803Smarcel#define DEPRECATED_EXTRACT_RETURN_VALUE(type, regbuf, valbuf) (gdbarch_deprecated_extract_return_value (current_gdbarch, type, regbuf, valbuf))
144298944Sobrien#endif
144398944Sobrien
1444130803Smarceltypedef void (gdbarch_deprecated_store_return_value_ftype) (struct type *type, char *valbuf);
1445130803Smarcelextern void gdbarch_deprecated_store_return_value (struct gdbarch *gdbarch, struct type *type, char *valbuf);
1446130803Smarcelextern void set_gdbarch_deprecated_store_return_value (struct gdbarch *gdbarch, gdbarch_deprecated_store_return_value_ftype *deprecated_store_return_value);
1447130803Smarcel#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (DEPRECATED_STORE_RETURN_VALUE)
1448130803Smarcel#error "Non multi-arch definition of DEPRECATED_STORE_RETURN_VALUE"
144998944Sobrien#endif
1450130803Smarcel#if !defined (DEPRECATED_STORE_RETURN_VALUE)
1451130803Smarcel#define DEPRECATED_STORE_RETURN_VALUE(type, valbuf) (gdbarch_deprecated_store_return_value (current_gdbarch, type, valbuf))
145298944Sobrien#endif
145398944Sobrien
145498944Sobrientypedef int (gdbarch_use_struct_convention_ftype) (int gcc_p, struct type *value_type);
145598944Sobrienextern int gdbarch_use_struct_convention (struct gdbarch *gdbarch, int gcc_p, struct type *value_type);
145698944Sobrienextern void set_gdbarch_use_struct_convention (struct gdbarch *gdbarch, gdbarch_use_struct_convention_ftype *use_struct_convention);
145798944Sobrien#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (USE_STRUCT_CONVENTION)
145898944Sobrien#error "Non multi-arch definition of USE_STRUCT_CONVENTION"
145998944Sobrien#endif
1460130803Smarcel#if !defined (USE_STRUCT_CONVENTION)
146198944Sobrien#define USE_STRUCT_CONVENTION(gcc_p, value_type) (gdbarch_use_struct_convention (current_gdbarch, gcc_p, value_type))
146298944Sobrien#endif
1463130803Smarcel
1464130803Smarcel/* As of 2004-01-17 only the 32-bit SPARC ABI has been identified as an
1465130803Smarcel   ABI suitable for the implementation of a robust extract
1466130803Smarcel   struct-convention return-value address method (the sparc saves the
1467130803Smarcel   address in the callers frame).  All the other cases so far examined,
1468130803Smarcel   the DEPRECATED_EXTRACT_STRUCT_VALUE implementation has been
1469130803Smarcel   erreneous - the code was incorrectly assuming that the return-value
1470130803Smarcel   address, stored in a register, was preserved across the entire
1471130803Smarcel   function call.
1472130803Smarcel   For the moment retain DEPRECATED_EXTRACT_STRUCT_VALUE as a marker of
1473130803Smarcel   the ABIs that are still to be analyzed - perhaps this should simply
1474130803Smarcel   be deleted.  The commented out extract_returned_value_address method
1475130803Smarcel   is provided as a starting point for the 32-bit SPARC.  It, or
1476130803Smarcel   something like it, along with changes to both infcmd.c and stack.c
1477130803Smarcel   will be needed for that case to work.  NB: It is passed the callers
1478130803Smarcel   frame since it is only after the callee has returned that this
1479130803Smarcel   function is used.
1480130803Smarcel  M:::CORE_ADDR:extract_returned_value_address:struct frame_info *caller_frame:caller_frame */
1481130803Smarcel
1482130803Smarcel#if defined (DEPRECATED_EXTRACT_STRUCT_VALUE_ADDRESS)
1483130803Smarcel/* Legacy for systems yet to multi-arch DEPRECATED_EXTRACT_STRUCT_VALUE_ADDRESS */
1484130803Smarcel#if !defined (DEPRECATED_EXTRACT_STRUCT_VALUE_ADDRESS_P)
1485130803Smarcel#define DEPRECATED_EXTRACT_STRUCT_VALUE_ADDRESS_P() (1)
148698944Sobrien#endif
1487130803Smarcel#endif
148898944Sobrien
1489130803Smarcelextern int gdbarch_deprecated_extract_struct_value_address_p (struct gdbarch *gdbarch);
1490130803Smarcel#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (DEPRECATED_EXTRACT_STRUCT_VALUE_ADDRESS_P)
1491130803Smarcel#error "Non multi-arch definition of DEPRECATED_EXTRACT_STRUCT_VALUE_ADDRESS"
149298944Sobrien#endif
1493130803Smarcel#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (DEPRECATED_EXTRACT_STRUCT_VALUE_ADDRESS_P)
1494130803Smarcel#define DEPRECATED_EXTRACT_STRUCT_VALUE_ADDRESS_P() (gdbarch_deprecated_extract_struct_value_address_p (current_gdbarch))
149598944Sobrien#endif
1496130803Smarcel
1497130803Smarceltypedef CORE_ADDR (gdbarch_deprecated_extract_struct_value_address_ftype) (struct regcache *regcache);
1498130803Smarcelextern CORE_ADDR gdbarch_deprecated_extract_struct_value_address (struct gdbarch *gdbarch, struct regcache *regcache);
1499130803Smarcelextern void set_gdbarch_deprecated_extract_struct_value_address (struct gdbarch *gdbarch, gdbarch_deprecated_extract_struct_value_address_ftype *deprecated_extract_struct_value_address);
1500130803Smarcel#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (DEPRECATED_EXTRACT_STRUCT_VALUE_ADDRESS)
1501130803Smarcel#error "Non multi-arch definition of DEPRECATED_EXTRACT_STRUCT_VALUE_ADDRESS"
150298944Sobrien#endif
1503130803Smarcel#if !defined (DEPRECATED_EXTRACT_STRUCT_VALUE_ADDRESS)
1504130803Smarcel#define DEPRECATED_EXTRACT_STRUCT_VALUE_ADDRESS(regcache) (gdbarch_deprecated_extract_struct_value_address (current_gdbarch, regcache))
1505130803Smarcel#endif
150698944Sobrien
1507130803Smarcel#if defined (DEPRECATED_FRAME_INIT_SAVED_REGS)
1508130803Smarcel/* Legacy for systems yet to multi-arch DEPRECATED_FRAME_INIT_SAVED_REGS */
1509130803Smarcel#if !defined (DEPRECATED_FRAME_INIT_SAVED_REGS_P)
1510130803Smarcel#define DEPRECATED_FRAME_INIT_SAVED_REGS_P() (1)
151198944Sobrien#endif
151298944Sobrien#endif
151398944Sobrien
1514130803Smarcelextern int gdbarch_deprecated_frame_init_saved_regs_p (struct gdbarch *gdbarch);
1515130803Smarcel#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (DEPRECATED_FRAME_INIT_SAVED_REGS_P)
1516130803Smarcel#error "Non multi-arch definition of DEPRECATED_FRAME_INIT_SAVED_REGS"
151798944Sobrien#endif
1518130803Smarcel#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (DEPRECATED_FRAME_INIT_SAVED_REGS_P)
1519130803Smarcel#define DEPRECATED_FRAME_INIT_SAVED_REGS_P() (gdbarch_deprecated_frame_init_saved_regs_p (current_gdbarch))
1520130803Smarcel#endif
152198944Sobrien
1522130803Smarceltypedef void (gdbarch_deprecated_frame_init_saved_regs_ftype) (struct frame_info *frame);
1523130803Smarcelextern void gdbarch_deprecated_frame_init_saved_regs (struct gdbarch *gdbarch, struct frame_info *frame);
1524130803Smarcelextern void set_gdbarch_deprecated_frame_init_saved_regs (struct gdbarch *gdbarch, gdbarch_deprecated_frame_init_saved_regs_ftype *deprecated_frame_init_saved_regs);
1525130803Smarcel#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (DEPRECATED_FRAME_INIT_SAVED_REGS)
1526130803Smarcel#error "Non multi-arch definition of DEPRECATED_FRAME_INIT_SAVED_REGS"
152798944Sobrien#endif
1528130803Smarcel#if !defined (DEPRECATED_FRAME_INIT_SAVED_REGS)
1529130803Smarcel#define DEPRECATED_FRAME_INIT_SAVED_REGS(frame) (gdbarch_deprecated_frame_init_saved_regs (current_gdbarch, frame))
153098944Sobrien#endif
153198944Sobrien
1532130803Smarcel#if defined (DEPRECATED_INIT_EXTRA_FRAME_INFO)
1533130803Smarcel/* Legacy for systems yet to multi-arch DEPRECATED_INIT_EXTRA_FRAME_INFO */
1534130803Smarcel#if !defined (DEPRECATED_INIT_EXTRA_FRAME_INFO_P)
1535130803Smarcel#define DEPRECATED_INIT_EXTRA_FRAME_INFO_P() (1)
153698944Sobrien#endif
1537130803Smarcel#endif
153898944Sobrien
1539130803Smarcelextern int gdbarch_deprecated_init_extra_frame_info_p (struct gdbarch *gdbarch);
1540130803Smarcel#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (DEPRECATED_INIT_EXTRA_FRAME_INFO_P)
1541130803Smarcel#error "Non multi-arch definition of DEPRECATED_INIT_EXTRA_FRAME_INFO"
154298944Sobrien#endif
1543130803Smarcel#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (DEPRECATED_INIT_EXTRA_FRAME_INFO_P)
1544130803Smarcel#define DEPRECATED_INIT_EXTRA_FRAME_INFO_P() (gdbarch_deprecated_init_extra_frame_info_p (current_gdbarch))
154598944Sobrien#endif
1546130803Smarcel
1547130803Smarceltypedef void (gdbarch_deprecated_init_extra_frame_info_ftype) (int fromleaf, struct frame_info *frame);
1548130803Smarcelextern void gdbarch_deprecated_init_extra_frame_info (struct gdbarch *gdbarch, int fromleaf, struct frame_info *frame);
1549130803Smarcelextern void set_gdbarch_deprecated_init_extra_frame_info (struct gdbarch *gdbarch, gdbarch_deprecated_init_extra_frame_info_ftype *deprecated_init_extra_frame_info);
1550130803Smarcel#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (DEPRECATED_INIT_EXTRA_FRAME_INFO)
1551130803Smarcel#error "Non multi-arch definition of DEPRECATED_INIT_EXTRA_FRAME_INFO"
155298944Sobrien#endif
1553130803Smarcel#if !defined (DEPRECATED_INIT_EXTRA_FRAME_INFO)
1554130803Smarcel#define DEPRECATED_INIT_EXTRA_FRAME_INFO(fromleaf, frame) (gdbarch_deprecated_init_extra_frame_info (current_gdbarch, fromleaf, frame))
1555130803Smarcel#endif
155698944Sobrien
155798944Sobrientypedef CORE_ADDR (gdbarch_skip_prologue_ftype) (CORE_ADDR ip);
155898944Sobrienextern CORE_ADDR gdbarch_skip_prologue (struct gdbarch *gdbarch, CORE_ADDR ip);
155998944Sobrienextern void set_gdbarch_skip_prologue (struct gdbarch *gdbarch, gdbarch_skip_prologue_ftype *skip_prologue);
156098944Sobrien#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (SKIP_PROLOGUE)
156198944Sobrien#error "Non multi-arch definition of SKIP_PROLOGUE"
156298944Sobrien#endif
1563130803Smarcel#if !defined (SKIP_PROLOGUE)
156498944Sobrien#define SKIP_PROLOGUE(ip) (gdbarch_skip_prologue (current_gdbarch, ip))
156598944Sobrien#endif
156698944Sobrien
156798944Sobrientypedef int (gdbarch_inner_than_ftype) (CORE_ADDR lhs, CORE_ADDR rhs);
156898944Sobrienextern int gdbarch_inner_than (struct gdbarch *gdbarch, CORE_ADDR lhs, CORE_ADDR rhs);
156998944Sobrienextern void set_gdbarch_inner_than (struct gdbarch *gdbarch, gdbarch_inner_than_ftype *inner_than);
157098944Sobrien#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (INNER_THAN)
157198944Sobrien#error "Non multi-arch definition of INNER_THAN"
157298944Sobrien#endif
1573130803Smarcel#if !defined (INNER_THAN)
157498944Sobrien#define INNER_THAN(lhs, rhs) (gdbarch_inner_than (current_gdbarch, lhs, rhs))
157598944Sobrien#endif
157698944Sobrien
1577130803Smarceltypedef const unsigned char * (gdbarch_breakpoint_from_pc_ftype) (CORE_ADDR *pcptr, int *lenptr);
1578130803Smarcelextern const unsigned char * gdbarch_breakpoint_from_pc (struct gdbarch *gdbarch, CORE_ADDR *pcptr, int *lenptr);
157998944Sobrienextern void set_gdbarch_breakpoint_from_pc (struct gdbarch *gdbarch, gdbarch_breakpoint_from_pc_ftype *breakpoint_from_pc);
158098944Sobrien#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (BREAKPOINT_FROM_PC)
158198944Sobrien#error "Non multi-arch definition of BREAKPOINT_FROM_PC"
158298944Sobrien#endif
1583130803Smarcel#if !defined (BREAKPOINT_FROM_PC)
158498944Sobrien#define BREAKPOINT_FROM_PC(pcptr, lenptr) (gdbarch_breakpoint_from_pc (current_gdbarch, pcptr, lenptr))
158598944Sobrien#endif
158698944Sobrien
1587130803Smarcelextern int gdbarch_adjust_breakpoint_address_p (struct gdbarch *gdbarch);
158898944Sobrien
1589130803Smarceltypedef CORE_ADDR (gdbarch_adjust_breakpoint_address_ftype) (struct gdbarch *gdbarch, CORE_ADDR bpaddr);
1590130803Smarcelextern CORE_ADDR gdbarch_adjust_breakpoint_address (struct gdbarch *gdbarch, CORE_ADDR bpaddr);
1591130803Smarcelextern void set_gdbarch_adjust_breakpoint_address (struct gdbarch *gdbarch, gdbarch_adjust_breakpoint_address_ftype *adjust_breakpoint_address);
1592130803Smarcel
159398944Sobrientypedef int (gdbarch_memory_insert_breakpoint_ftype) (CORE_ADDR addr, char *contents_cache);
159498944Sobrienextern int gdbarch_memory_insert_breakpoint (struct gdbarch *gdbarch, CORE_ADDR addr, char *contents_cache);
159598944Sobrienextern void set_gdbarch_memory_insert_breakpoint (struct gdbarch *gdbarch, gdbarch_memory_insert_breakpoint_ftype *memory_insert_breakpoint);
159698944Sobrien#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (MEMORY_INSERT_BREAKPOINT)
159798944Sobrien#error "Non multi-arch definition of MEMORY_INSERT_BREAKPOINT"
159898944Sobrien#endif
1599130803Smarcel#if !defined (MEMORY_INSERT_BREAKPOINT)
160098944Sobrien#define MEMORY_INSERT_BREAKPOINT(addr, contents_cache) (gdbarch_memory_insert_breakpoint (current_gdbarch, addr, contents_cache))
160198944Sobrien#endif
160298944Sobrien
160398944Sobrientypedef int (gdbarch_memory_remove_breakpoint_ftype) (CORE_ADDR addr, char *contents_cache);
160498944Sobrienextern int gdbarch_memory_remove_breakpoint (struct gdbarch *gdbarch, CORE_ADDR addr, char *contents_cache);
160598944Sobrienextern void set_gdbarch_memory_remove_breakpoint (struct gdbarch *gdbarch, gdbarch_memory_remove_breakpoint_ftype *memory_remove_breakpoint);
160698944Sobrien#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (MEMORY_REMOVE_BREAKPOINT)
160798944Sobrien#error "Non multi-arch definition of MEMORY_REMOVE_BREAKPOINT"
160898944Sobrien#endif
1609130803Smarcel#if !defined (MEMORY_REMOVE_BREAKPOINT)
161098944Sobrien#define MEMORY_REMOVE_BREAKPOINT(addr, contents_cache) (gdbarch_memory_remove_breakpoint (current_gdbarch, addr, contents_cache))
161198944Sobrien#endif
161298944Sobrien
161398944Sobrienextern CORE_ADDR gdbarch_decr_pc_after_break (struct gdbarch *gdbarch);
161498944Sobrienextern void set_gdbarch_decr_pc_after_break (struct gdbarch *gdbarch, CORE_ADDR decr_pc_after_break);
161598944Sobrien#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (DECR_PC_AFTER_BREAK)
161698944Sobrien#error "Non multi-arch definition of DECR_PC_AFTER_BREAK"
161798944Sobrien#endif
1618130803Smarcel#if !defined (DECR_PC_AFTER_BREAK)
161998944Sobrien#define DECR_PC_AFTER_BREAK (gdbarch_decr_pc_after_break (current_gdbarch))
162098944Sobrien#endif
162198944Sobrien
162298944Sobrienextern CORE_ADDR gdbarch_function_start_offset (struct gdbarch *gdbarch);
162398944Sobrienextern void set_gdbarch_function_start_offset (struct gdbarch *gdbarch, CORE_ADDR function_start_offset);
162498944Sobrien#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (FUNCTION_START_OFFSET)
162598944Sobrien#error "Non multi-arch definition of FUNCTION_START_OFFSET"
162698944Sobrien#endif
1627130803Smarcel#if !defined (FUNCTION_START_OFFSET)
162898944Sobrien#define FUNCTION_START_OFFSET (gdbarch_function_start_offset (current_gdbarch))
162998944Sobrien#endif
163098944Sobrien
1631130803Smarceltypedef void (gdbarch_remote_translate_xfer_address_ftype) (struct gdbarch *gdbarch, struct regcache *regcache, CORE_ADDR gdb_addr, int gdb_len, CORE_ADDR *rem_addr, int *rem_len);
1632130803Smarcelextern void gdbarch_remote_translate_xfer_address (struct gdbarch *gdbarch, struct regcache *regcache, CORE_ADDR gdb_addr, int gdb_len, CORE_ADDR *rem_addr, int *rem_len);
163398944Sobrienextern void set_gdbarch_remote_translate_xfer_address (struct gdbarch *gdbarch, gdbarch_remote_translate_xfer_address_ftype *remote_translate_xfer_address);
163498944Sobrien
163598944Sobrienextern CORE_ADDR gdbarch_frame_args_skip (struct gdbarch *gdbarch);
163698944Sobrienextern void set_gdbarch_frame_args_skip (struct gdbarch *gdbarch, CORE_ADDR frame_args_skip);
163798944Sobrien#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (FRAME_ARGS_SKIP)
163898944Sobrien#error "Non multi-arch definition of FRAME_ARGS_SKIP"
163998944Sobrien#endif
1640130803Smarcel#if !defined (FRAME_ARGS_SKIP)
164198944Sobrien#define FRAME_ARGS_SKIP (gdbarch_frame_args_skip (current_gdbarch))
164298944Sobrien#endif
1643130803Smarcel
1644130803Smarcel/* DEPRECATED_FRAMELESS_FUNCTION_INVOCATION is not needed.  The new
1645130803Smarcel   frame code works regardless of the type of frame - frameless,
1646130803Smarcel   stackless, or normal. */
1647130803Smarcel
1648130803Smarcel#if defined (DEPRECATED_FRAMELESS_FUNCTION_INVOCATION)
1649130803Smarcel/* Legacy for systems yet to multi-arch DEPRECATED_FRAMELESS_FUNCTION_INVOCATION */
1650130803Smarcel#if !defined (DEPRECATED_FRAMELESS_FUNCTION_INVOCATION_P)
1651130803Smarcel#define DEPRECATED_FRAMELESS_FUNCTION_INVOCATION_P() (1)
165298944Sobrien#endif
1653130803Smarcel#endif
165498944Sobrien
1655130803Smarcelextern int gdbarch_deprecated_frameless_function_invocation_p (struct gdbarch *gdbarch);
1656130803Smarcel#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (DEPRECATED_FRAMELESS_FUNCTION_INVOCATION_P)
1657130803Smarcel#error "Non multi-arch definition of DEPRECATED_FRAMELESS_FUNCTION_INVOCATION"
165898944Sobrien#endif
1659130803Smarcel#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (DEPRECATED_FRAMELESS_FUNCTION_INVOCATION_P)
1660130803Smarcel#define DEPRECATED_FRAMELESS_FUNCTION_INVOCATION_P() (gdbarch_deprecated_frameless_function_invocation_p (current_gdbarch))
1661130803Smarcel#endif
166298944Sobrien
1663130803Smarceltypedef int (gdbarch_deprecated_frameless_function_invocation_ftype) (struct frame_info *fi);
1664130803Smarcelextern int gdbarch_deprecated_frameless_function_invocation (struct gdbarch *gdbarch, struct frame_info *fi);
1665130803Smarcelextern void set_gdbarch_deprecated_frameless_function_invocation (struct gdbarch *gdbarch, gdbarch_deprecated_frameless_function_invocation_ftype *deprecated_frameless_function_invocation);
1666130803Smarcel#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (DEPRECATED_FRAMELESS_FUNCTION_INVOCATION)
1667130803Smarcel#error "Non multi-arch definition of DEPRECATED_FRAMELESS_FUNCTION_INVOCATION"
166898944Sobrien#endif
1669130803Smarcel#if !defined (DEPRECATED_FRAMELESS_FUNCTION_INVOCATION)
1670130803Smarcel#define DEPRECATED_FRAMELESS_FUNCTION_INVOCATION(fi) (gdbarch_deprecated_frameless_function_invocation (current_gdbarch, fi))
167198944Sobrien#endif
1672130803Smarcel
1673130803Smarcel#if defined (DEPRECATED_FRAME_CHAIN)
1674130803Smarcel/* Legacy for systems yet to multi-arch DEPRECATED_FRAME_CHAIN */
1675130803Smarcel#if !defined (DEPRECATED_FRAME_CHAIN_P)
1676130803Smarcel#define DEPRECATED_FRAME_CHAIN_P() (1)
167798944Sobrien#endif
1678130803Smarcel#endif
167998944Sobrien
1680130803Smarcelextern int gdbarch_deprecated_frame_chain_p (struct gdbarch *gdbarch);
1681130803Smarcel#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (DEPRECATED_FRAME_CHAIN_P)
1682130803Smarcel#error "Non multi-arch definition of DEPRECATED_FRAME_CHAIN"
168398944Sobrien#endif
1684130803Smarcel#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (DEPRECATED_FRAME_CHAIN_P)
1685130803Smarcel#define DEPRECATED_FRAME_CHAIN_P() (gdbarch_deprecated_frame_chain_p (current_gdbarch))
168698944Sobrien#endif
1687130803Smarcel
1688130803Smarceltypedef CORE_ADDR (gdbarch_deprecated_frame_chain_ftype) (struct frame_info *frame);
1689130803Smarcelextern CORE_ADDR gdbarch_deprecated_frame_chain (struct gdbarch *gdbarch, struct frame_info *frame);
1690130803Smarcelextern void set_gdbarch_deprecated_frame_chain (struct gdbarch *gdbarch, gdbarch_deprecated_frame_chain_ftype *deprecated_frame_chain);
1691130803Smarcel#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (DEPRECATED_FRAME_CHAIN)
1692130803Smarcel#error "Non multi-arch definition of DEPRECATED_FRAME_CHAIN"
169398944Sobrien#endif
1694130803Smarcel#if !defined (DEPRECATED_FRAME_CHAIN)
1695130803Smarcel#define DEPRECATED_FRAME_CHAIN(frame) (gdbarch_deprecated_frame_chain (current_gdbarch, frame))
1696130803Smarcel#endif
169798944Sobrien
1698130803Smarcel#if defined (DEPRECATED_FRAME_CHAIN_VALID)
1699130803Smarcel/* Legacy for systems yet to multi-arch DEPRECATED_FRAME_CHAIN_VALID */
1700130803Smarcel#if !defined (DEPRECATED_FRAME_CHAIN_VALID_P)
1701130803Smarcel#define DEPRECATED_FRAME_CHAIN_VALID_P() (1)
1702130803Smarcel#endif
1703130803Smarcel#endif
170498944Sobrien
1705130803Smarcelextern int gdbarch_deprecated_frame_chain_valid_p (struct gdbarch *gdbarch);
1706130803Smarcel#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (DEPRECATED_FRAME_CHAIN_VALID_P)
1707130803Smarcel#error "Non multi-arch definition of DEPRECATED_FRAME_CHAIN_VALID"
170898944Sobrien#endif
1709130803Smarcel#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (DEPRECATED_FRAME_CHAIN_VALID_P)
1710130803Smarcel#define DEPRECATED_FRAME_CHAIN_VALID_P() (gdbarch_deprecated_frame_chain_valid_p (current_gdbarch))
1711130803Smarcel#endif
171298944Sobrien
1713130803Smarceltypedef int (gdbarch_deprecated_frame_chain_valid_ftype) (CORE_ADDR chain, struct frame_info *thisframe);
1714130803Smarcelextern int gdbarch_deprecated_frame_chain_valid (struct gdbarch *gdbarch, CORE_ADDR chain, struct frame_info *thisframe);
1715130803Smarcelextern void set_gdbarch_deprecated_frame_chain_valid (struct gdbarch *gdbarch, gdbarch_deprecated_frame_chain_valid_ftype *deprecated_frame_chain_valid);
1716130803Smarcel#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (DEPRECATED_FRAME_CHAIN_VALID)
1717130803Smarcel#error "Non multi-arch definition of DEPRECATED_FRAME_CHAIN_VALID"
171898944Sobrien#endif
1719130803Smarcel#if !defined (DEPRECATED_FRAME_CHAIN_VALID)
1720130803Smarcel#define DEPRECATED_FRAME_CHAIN_VALID(chain, thisframe) (gdbarch_deprecated_frame_chain_valid (current_gdbarch, chain, thisframe))
172198944Sobrien#endif
172298944Sobrien
1723130803Smarcel/* DEPRECATED_FRAME_SAVED_PC has been replaced by UNWIND_PC.  Please
1724130803Smarcel   note, per UNWIND_PC's doco, that while the two have similar
1725130803Smarcel   interfaces they have very different underlying implementations. */
1726130803Smarcel
1727130803Smarcel#if defined (DEPRECATED_FRAME_SAVED_PC)
1728130803Smarcel/* Legacy for systems yet to multi-arch DEPRECATED_FRAME_SAVED_PC */
1729130803Smarcel#if !defined (DEPRECATED_FRAME_SAVED_PC_P)
1730130803Smarcel#define DEPRECATED_FRAME_SAVED_PC_P() (1)
173198944Sobrien#endif
173298944Sobrien#endif
173398944Sobrien
1734130803Smarcelextern int gdbarch_deprecated_frame_saved_pc_p (struct gdbarch *gdbarch);
1735130803Smarcel#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (DEPRECATED_FRAME_SAVED_PC_P)
1736130803Smarcel#error "Non multi-arch definition of DEPRECATED_FRAME_SAVED_PC"
173798944Sobrien#endif
1738130803Smarcel#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (DEPRECATED_FRAME_SAVED_PC_P)
1739130803Smarcel#define DEPRECATED_FRAME_SAVED_PC_P() (gdbarch_deprecated_frame_saved_pc_p (current_gdbarch))
174098944Sobrien#endif
174198944Sobrien
1742130803Smarceltypedef CORE_ADDR (gdbarch_deprecated_frame_saved_pc_ftype) (struct frame_info *fi);
1743130803Smarcelextern CORE_ADDR gdbarch_deprecated_frame_saved_pc (struct gdbarch *gdbarch, struct frame_info *fi);
1744130803Smarcelextern void set_gdbarch_deprecated_frame_saved_pc (struct gdbarch *gdbarch, gdbarch_deprecated_frame_saved_pc_ftype *deprecated_frame_saved_pc);
1745130803Smarcel#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (DEPRECATED_FRAME_SAVED_PC)
1746130803Smarcel#error "Non multi-arch definition of DEPRECATED_FRAME_SAVED_PC"
174798944Sobrien#endif
1748130803Smarcel#if !defined (DEPRECATED_FRAME_SAVED_PC)
1749130803Smarcel#define DEPRECATED_FRAME_SAVED_PC(fi) (gdbarch_deprecated_frame_saved_pc (current_gdbarch, fi))
175098944Sobrien#endif
175198944Sobrien
1752130803Smarcelextern int gdbarch_unwind_pc_p (struct gdbarch *gdbarch);
1753130803Smarcel
1754130803Smarceltypedef CORE_ADDR (gdbarch_unwind_pc_ftype) (struct gdbarch *gdbarch, struct frame_info *next_frame);
1755130803Smarcelextern CORE_ADDR gdbarch_unwind_pc (struct gdbarch *gdbarch, struct frame_info *next_frame);
1756130803Smarcelextern void set_gdbarch_unwind_pc (struct gdbarch *gdbarch, gdbarch_unwind_pc_ftype *unwind_pc);
1757130803Smarcel
1758130803Smarcelextern int gdbarch_unwind_sp_p (struct gdbarch *gdbarch);
1759130803Smarcel
1760130803Smarceltypedef CORE_ADDR (gdbarch_unwind_sp_ftype) (struct gdbarch *gdbarch, struct frame_info *next_frame);
1761130803Smarcelextern CORE_ADDR gdbarch_unwind_sp (struct gdbarch *gdbarch, struct frame_info *next_frame);
1762130803Smarcelextern void set_gdbarch_unwind_sp (struct gdbarch *gdbarch, gdbarch_unwind_sp_ftype *unwind_sp);
1763130803Smarcel
1764130803Smarcel/* DEPRECATED_FRAME_ARGS_ADDRESS as been replaced by the per-frame
1765130803Smarcel   frame-base.  Enable frame-base before frame-unwind. */
1766130803Smarcel
1767130803Smarcel#if defined (DEPRECATED_FRAME_ARGS_ADDRESS)
1768130803Smarcel/* Legacy for systems yet to multi-arch DEPRECATED_FRAME_ARGS_ADDRESS */
1769130803Smarcel#if !defined (DEPRECATED_FRAME_ARGS_ADDRESS_P)
1770130803Smarcel#define DEPRECATED_FRAME_ARGS_ADDRESS_P() (1)
177198944Sobrien#endif
177298944Sobrien#endif
177398944Sobrien
1774130803Smarcelextern int gdbarch_deprecated_frame_args_address_p (struct gdbarch *gdbarch);
1775130803Smarcel#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (DEPRECATED_FRAME_ARGS_ADDRESS_P)
1776130803Smarcel#error "Non multi-arch definition of DEPRECATED_FRAME_ARGS_ADDRESS"
177798944Sobrien#endif
1778130803Smarcel#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (DEPRECATED_FRAME_ARGS_ADDRESS_P)
1779130803Smarcel#define DEPRECATED_FRAME_ARGS_ADDRESS_P() (gdbarch_deprecated_frame_args_address_p (current_gdbarch))
178098944Sobrien#endif
178198944Sobrien
1782130803Smarceltypedef CORE_ADDR (gdbarch_deprecated_frame_args_address_ftype) (struct frame_info *fi);
1783130803Smarcelextern CORE_ADDR gdbarch_deprecated_frame_args_address (struct gdbarch *gdbarch, struct frame_info *fi);
1784130803Smarcelextern void set_gdbarch_deprecated_frame_args_address (struct gdbarch *gdbarch, gdbarch_deprecated_frame_args_address_ftype *deprecated_frame_args_address);
1785130803Smarcel#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (DEPRECATED_FRAME_ARGS_ADDRESS)
1786130803Smarcel#error "Non multi-arch definition of DEPRECATED_FRAME_ARGS_ADDRESS"
178798944Sobrien#endif
1788130803Smarcel#if !defined (DEPRECATED_FRAME_ARGS_ADDRESS)
1789130803Smarcel#define DEPRECATED_FRAME_ARGS_ADDRESS(fi) (gdbarch_deprecated_frame_args_address (current_gdbarch, fi))
179098944Sobrien#endif
179198944Sobrien
1792130803Smarcel/* DEPRECATED_FRAME_LOCALS_ADDRESS as been replaced by the per-frame
1793130803Smarcel   frame-base.  Enable frame-base before frame-unwind. */
1794130803Smarcel
1795130803Smarcel#if defined (DEPRECATED_FRAME_LOCALS_ADDRESS)
1796130803Smarcel/* Legacy for systems yet to multi-arch DEPRECATED_FRAME_LOCALS_ADDRESS */
1797130803Smarcel#if !defined (DEPRECATED_FRAME_LOCALS_ADDRESS_P)
1798130803Smarcel#define DEPRECATED_FRAME_LOCALS_ADDRESS_P() (1)
179998944Sobrien#endif
1800130803Smarcel#endif
180198944Sobrien
1802130803Smarcelextern int gdbarch_deprecated_frame_locals_address_p (struct gdbarch *gdbarch);
1803130803Smarcel#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (DEPRECATED_FRAME_LOCALS_ADDRESS_P)
1804130803Smarcel#error "Non multi-arch definition of DEPRECATED_FRAME_LOCALS_ADDRESS"
180598944Sobrien#endif
1806130803Smarcel#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (DEPRECATED_FRAME_LOCALS_ADDRESS_P)
1807130803Smarcel#define DEPRECATED_FRAME_LOCALS_ADDRESS_P() (gdbarch_deprecated_frame_locals_address_p (current_gdbarch))
180898944Sobrien#endif
180998944Sobrien
1810130803Smarceltypedef CORE_ADDR (gdbarch_deprecated_frame_locals_address_ftype) (struct frame_info *fi);
1811130803Smarcelextern CORE_ADDR gdbarch_deprecated_frame_locals_address (struct gdbarch *gdbarch, struct frame_info *fi);
1812130803Smarcelextern void set_gdbarch_deprecated_frame_locals_address (struct gdbarch *gdbarch, gdbarch_deprecated_frame_locals_address_ftype *deprecated_frame_locals_address);
1813130803Smarcel#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (DEPRECATED_FRAME_LOCALS_ADDRESS)
1814130803Smarcel#error "Non multi-arch definition of DEPRECATED_FRAME_LOCALS_ADDRESS"
181598944Sobrien#endif
1816130803Smarcel#if !defined (DEPRECATED_FRAME_LOCALS_ADDRESS)
1817130803Smarcel#define DEPRECATED_FRAME_LOCALS_ADDRESS(fi) (gdbarch_deprecated_frame_locals_address (current_gdbarch, fi))
1818130803Smarcel#endif
181998944Sobrien
1820130803Smarcel#if defined (DEPRECATED_SAVED_PC_AFTER_CALL)
1821130803Smarcel/* Legacy for systems yet to multi-arch DEPRECATED_SAVED_PC_AFTER_CALL */
1822130803Smarcel#if !defined (DEPRECATED_SAVED_PC_AFTER_CALL_P)
1823130803Smarcel#define DEPRECATED_SAVED_PC_AFTER_CALL_P() (1)
182498944Sobrien#endif
182598944Sobrien#endif
182698944Sobrien
1827130803Smarcelextern int gdbarch_deprecated_saved_pc_after_call_p (struct gdbarch *gdbarch);
1828130803Smarcel#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (DEPRECATED_SAVED_PC_AFTER_CALL_P)
1829130803Smarcel#error "Non multi-arch definition of DEPRECATED_SAVED_PC_AFTER_CALL"
183098944Sobrien#endif
1831130803Smarcel#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (DEPRECATED_SAVED_PC_AFTER_CALL_P)
1832130803Smarcel#define DEPRECATED_SAVED_PC_AFTER_CALL_P() (gdbarch_deprecated_saved_pc_after_call_p (current_gdbarch))
1833130803Smarcel#endif
183498944Sobrien
1835130803Smarceltypedef CORE_ADDR (gdbarch_deprecated_saved_pc_after_call_ftype) (struct frame_info *frame);
1836130803Smarcelextern CORE_ADDR gdbarch_deprecated_saved_pc_after_call (struct gdbarch *gdbarch, struct frame_info *frame);
1837130803Smarcelextern void set_gdbarch_deprecated_saved_pc_after_call (struct gdbarch *gdbarch, gdbarch_deprecated_saved_pc_after_call_ftype *deprecated_saved_pc_after_call);
1838130803Smarcel#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (DEPRECATED_SAVED_PC_AFTER_CALL)
1839130803Smarcel#error "Non multi-arch definition of DEPRECATED_SAVED_PC_AFTER_CALL"
184098944Sobrien#endif
1841130803Smarcel#if !defined (DEPRECATED_SAVED_PC_AFTER_CALL)
1842130803Smarcel#define DEPRECATED_SAVED_PC_AFTER_CALL(frame) (gdbarch_deprecated_saved_pc_after_call (current_gdbarch, frame))
184398944Sobrien#endif
184498944Sobrien
1845130803Smarcel#if defined (FRAME_NUM_ARGS)
1846130803Smarcel/* Legacy for systems yet to multi-arch FRAME_NUM_ARGS */
1847130803Smarcel#if !defined (FRAME_NUM_ARGS_P)
1848130803Smarcel#define FRAME_NUM_ARGS_P() (1)
184998944Sobrien#endif
185098944Sobrien#endif
185198944Sobrien
1852130803Smarcelextern int gdbarch_frame_num_args_p (struct gdbarch *gdbarch);
1853130803Smarcel#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (FRAME_NUM_ARGS_P)
1854130803Smarcel#error "Non multi-arch definition of FRAME_NUM_ARGS"
185598944Sobrien#endif
1856130803Smarcel#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (FRAME_NUM_ARGS_P)
1857130803Smarcel#define FRAME_NUM_ARGS_P() (gdbarch_frame_num_args_p (current_gdbarch))
1858130803Smarcel#endif
185998944Sobrien
1860130803Smarceltypedef int (gdbarch_frame_num_args_ftype) (struct frame_info *frame);
1861130803Smarcelextern int gdbarch_frame_num_args (struct gdbarch *gdbarch, struct frame_info *frame);
1862130803Smarcelextern void set_gdbarch_frame_num_args (struct gdbarch *gdbarch, gdbarch_frame_num_args_ftype *frame_num_args);
1863130803Smarcel#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (FRAME_NUM_ARGS)
1864130803Smarcel#error "Non multi-arch definition of FRAME_NUM_ARGS"
186598944Sobrien#endif
1866130803Smarcel#if !defined (FRAME_NUM_ARGS)
1867130803Smarcel#define FRAME_NUM_ARGS(frame) (gdbarch_frame_num_args (current_gdbarch, frame))
186898944Sobrien#endif
186998944Sobrien
1870130803Smarcel/* DEPRECATED_STACK_ALIGN has been replaced by an initial aligning call
1871130803Smarcel   to frame_align and the requirement that methods such as
1872130803Smarcel   push_dummy_call and frame_red_zone_size maintain correct stack/frame
1873130803Smarcel   alignment. */
1874130803Smarcel
1875130803Smarcel#if defined (DEPRECATED_STACK_ALIGN)
1876130803Smarcel/* Legacy for systems yet to multi-arch DEPRECATED_STACK_ALIGN */
1877130803Smarcel#if !defined (DEPRECATED_STACK_ALIGN_P)
1878130803Smarcel#define DEPRECATED_STACK_ALIGN_P() (1)
187998944Sobrien#endif
1880130803Smarcel#endif
188198944Sobrien
1882130803Smarcelextern int gdbarch_deprecated_stack_align_p (struct gdbarch *gdbarch);
1883130803Smarcel#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (DEPRECATED_STACK_ALIGN_P)
1884130803Smarcel#error "Non multi-arch definition of DEPRECATED_STACK_ALIGN"
188598944Sobrien#endif
1886130803Smarcel#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (DEPRECATED_STACK_ALIGN_P)
1887130803Smarcel#define DEPRECATED_STACK_ALIGN_P() (gdbarch_deprecated_stack_align_p (current_gdbarch))
188898944Sobrien#endif
188998944Sobrien
1890130803Smarceltypedef CORE_ADDR (gdbarch_deprecated_stack_align_ftype) (CORE_ADDR sp);
1891130803Smarcelextern CORE_ADDR gdbarch_deprecated_stack_align (struct gdbarch *gdbarch, CORE_ADDR sp);
1892130803Smarcelextern void set_gdbarch_deprecated_stack_align (struct gdbarch *gdbarch, gdbarch_deprecated_stack_align_ftype *deprecated_stack_align);
1893130803Smarcel#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (DEPRECATED_STACK_ALIGN)
1894130803Smarcel#error "Non multi-arch definition of DEPRECATED_STACK_ALIGN"
189598944Sobrien#endif
1896130803Smarcel#if !defined (DEPRECATED_STACK_ALIGN)
1897130803Smarcel#define DEPRECATED_STACK_ALIGN(sp) (gdbarch_deprecated_stack_align (current_gdbarch, sp))
189898944Sobrien#endif
189998944Sobrien
1900130803Smarcelextern int gdbarch_frame_align_p (struct gdbarch *gdbarch);
1901130803Smarcel
1902130803Smarceltypedef CORE_ADDR (gdbarch_frame_align_ftype) (struct gdbarch *gdbarch, CORE_ADDR address);
1903130803Smarcelextern CORE_ADDR gdbarch_frame_align (struct gdbarch *gdbarch, CORE_ADDR address);
1904130803Smarcelextern void set_gdbarch_frame_align (struct gdbarch *gdbarch, gdbarch_frame_align_ftype *frame_align);
1905130803Smarcel
1906130803Smarcel/* DEPRECATED_REG_STRUCT_HAS_ADDR has been replaced by
1907130803Smarcel   stabs_argument_has_addr. */
1908130803Smarcel
1909130803Smarcel#if defined (DEPRECATED_REG_STRUCT_HAS_ADDR)
1910130803Smarcel/* Legacy for systems yet to multi-arch DEPRECATED_REG_STRUCT_HAS_ADDR */
1911130803Smarcel#if !defined (DEPRECATED_REG_STRUCT_HAS_ADDR_P)
1912130803Smarcel#define DEPRECATED_REG_STRUCT_HAS_ADDR_P() (1)
191398944Sobrien#endif
1914130803Smarcel#endif
191598944Sobrien
1916130803Smarcelextern int gdbarch_deprecated_reg_struct_has_addr_p (struct gdbarch *gdbarch);
1917130803Smarcel#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (DEPRECATED_REG_STRUCT_HAS_ADDR_P)
1918130803Smarcel#error "Non multi-arch definition of DEPRECATED_REG_STRUCT_HAS_ADDR"
191998944Sobrien#endif
1920130803Smarcel#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (DEPRECATED_REG_STRUCT_HAS_ADDR_P)
1921130803Smarcel#define DEPRECATED_REG_STRUCT_HAS_ADDR_P() (gdbarch_deprecated_reg_struct_has_addr_p (current_gdbarch))
192298944Sobrien#endif
192398944Sobrien
1924130803Smarceltypedef int (gdbarch_deprecated_reg_struct_has_addr_ftype) (int gcc_p, struct type *type);
1925130803Smarcelextern int gdbarch_deprecated_reg_struct_has_addr (struct gdbarch *gdbarch, int gcc_p, struct type *type);
1926130803Smarcelextern void set_gdbarch_deprecated_reg_struct_has_addr (struct gdbarch *gdbarch, gdbarch_deprecated_reg_struct_has_addr_ftype *deprecated_reg_struct_has_addr);
1927130803Smarcel#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (DEPRECATED_REG_STRUCT_HAS_ADDR)
1928130803Smarcel#error "Non multi-arch definition of DEPRECATED_REG_STRUCT_HAS_ADDR"
192998944Sobrien#endif
1930130803Smarcel#if !defined (DEPRECATED_REG_STRUCT_HAS_ADDR)
1931130803Smarcel#define DEPRECATED_REG_STRUCT_HAS_ADDR(gcc_p, type) (gdbarch_deprecated_reg_struct_has_addr (current_gdbarch, gcc_p, type))
1932130803Smarcel#endif
193398944Sobrien
1934130803Smarceltypedef int (gdbarch_stabs_argument_has_addr_ftype) (struct gdbarch *gdbarch, struct type *type);
1935130803Smarcelextern int gdbarch_stabs_argument_has_addr (struct gdbarch *gdbarch, struct type *type);
1936130803Smarcelextern void set_gdbarch_stabs_argument_has_addr (struct gdbarch *gdbarch, gdbarch_stabs_argument_has_addr_ftype *stabs_argument_has_addr);
1937130803Smarcel
1938130803Smarcelextern int gdbarch_frame_red_zone_size (struct gdbarch *gdbarch);
1939130803Smarcelextern void set_gdbarch_frame_red_zone_size (struct gdbarch *gdbarch, int frame_red_zone_size);
1940130803Smarcel#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (FRAME_RED_ZONE_SIZE)
1941130803Smarcel#error "Non multi-arch definition of FRAME_RED_ZONE_SIZE"
194298944Sobrien#endif
1943130803Smarcel#if !defined (FRAME_RED_ZONE_SIZE)
1944130803Smarcel#define FRAME_RED_ZONE_SIZE (gdbarch_frame_red_zone_size (current_gdbarch))
194598944Sobrien#endif
194698944Sobrien
194798944Sobrienextern int gdbarch_parm_boundary (struct gdbarch *gdbarch);
194898944Sobrienextern void set_gdbarch_parm_boundary (struct gdbarch *gdbarch, int parm_boundary);
194998944Sobrien#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (PARM_BOUNDARY)
195098944Sobrien#error "Non multi-arch definition of PARM_BOUNDARY"
195198944Sobrien#endif
1952130803Smarcel#if !defined (PARM_BOUNDARY)
195398944Sobrien#define PARM_BOUNDARY (gdbarch_parm_boundary (current_gdbarch))
195498944Sobrien#endif
195598944Sobrien
195698944Sobrienextern const struct floatformat * gdbarch_float_format (struct gdbarch *gdbarch);
195798944Sobrienextern void set_gdbarch_float_format (struct gdbarch *gdbarch, const struct floatformat * float_format);
195898944Sobrien#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (TARGET_FLOAT_FORMAT)
195998944Sobrien#error "Non multi-arch definition of TARGET_FLOAT_FORMAT"
196098944Sobrien#endif
1961130803Smarcel#if !defined (TARGET_FLOAT_FORMAT)
196298944Sobrien#define TARGET_FLOAT_FORMAT (gdbarch_float_format (current_gdbarch))
196398944Sobrien#endif
196498944Sobrien
196598944Sobrienextern const struct floatformat * gdbarch_double_format (struct gdbarch *gdbarch);
196698944Sobrienextern void set_gdbarch_double_format (struct gdbarch *gdbarch, const struct floatformat * double_format);
196798944Sobrien#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (TARGET_DOUBLE_FORMAT)
196898944Sobrien#error "Non multi-arch definition of TARGET_DOUBLE_FORMAT"
196998944Sobrien#endif
1970130803Smarcel#if !defined (TARGET_DOUBLE_FORMAT)
197198944Sobrien#define TARGET_DOUBLE_FORMAT (gdbarch_double_format (current_gdbarch))
197298944Sobrien#endif
197398944Sobrien
197498944Sobrienextern const struct floatformat * gdbarch_long_double_format (struct gdbarch *gdbarch);
197598944Sobrienextern void set_gdbarch_long_double_format (struct gdbarch *gdbarch, const struct floatformat * long_double_format);
197698944Sobrien#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (TARGET_LONG_DOUBLE_FORMAT)
197798944Sobrien#error "Non multi-arch definition of TARGET_LONG_DOUBLE_FORMAT"
197898944Sobrien#endif
1979130803Smarcel#if !defined (TARGET_LONG_DOUBLE_FORMAT)
198098944Sobrien#define TARGET_LONG_DOUBLE_FORMAT (gdbarch_long_double_format (current_gdbarch))
198198944Sobrien#endif
198298944Sobrien
1983130803Smarceltypedef CORE_ADDR (gdbarch_convert_from_func_ptr_addr_ftype) (struct gdbarch *gdbarch, CORE_ADDR addr, struct target_ops *targ);
1984130803Smarcelextern CORE_ADDR gdbarch_convert_from_func_ptr_addr (struct gdbarch *gdbarch, CORE_ADDR addr, struct target_ops *targ);
198598944Sobrienextern void set_gdbarch_convert_from_func_ptr_addr (struct gdbarch *gdbarch, gdbarch_convert_from_func_ptr_addr_ftype *convert_from_func_ptr_addr);
198698944Sobrien
198798944Sobrien/* On some machines there are bits in addresses which are not really
198898944Sobrien   part of the address, but are used by the kernel, the hardware, etc.
198998944Sobrien   for special purposes.  ADDR_BITS_REMOVE takes out any such bits so
199098944Sobrien   we get a "real" address such as one would find in a symbol table.
199198944Sobrien   This is used only for addresses of instructions, and even then I'm
199298944Sobrien   not sure it's used in all contexts.  It exists to deal with there
199398944Sobrien   being a few stray bits in the PC which would mislead us, not as some
199498944Sobrien   sort of generic thing to handle alignment or segmentation (it's
199598944Sobrien   possible it should be in TARGET_READ_PC instead). */
199698944Sobrien
199798944Sobrientypedef CORE_ADDR (gdbarch_addr_bits_remove_ftype) (CORE_ADDR addr);
199898944Sobrienextern CORE_ADDR gdbarch_addr_bits_remove (struct gdbarch *gdbarch, CORE_ADDR addr);
199998944Sobrienextern void set_gdbarch_addr_bits_remove (struct gdbarch *gdbarch, gdbarch_addr_bits_remove_ftype *addr_bits_remove);
200098944Sobrien#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (ADDR_BITS_REMOVE)
200198944Sobrien#error "Non multi-arch definition of ADDR_BITS_REMOVE"
200298944Sobrien#endif
2003130803Smarcel#if !defined (ADDR_BITS_REMOVE)
200498944Sobrien#define ADDR_BITS_REMOVE(addr) (gdbarch_addr_bits_remove (current_gdbarch, addr))
200598944Sobrien#endif
200698944Sobrien
200798944Sobrien/* It is not at all clear why SMASH_TEXT_ADDRESS is not folded into
200898944Sobrien   ADDR_BITS_REMOVE. */
200998944Sobrien
201098944Sobrientypedef CORE_ADDR (gdbarch_smash_text_address_ftype) (CORE_ADDR addr);
201198944Sobrienextern CORE_ADDR gdbarch_smash_text_address (struct gdbarch *gdbarch, CORE_ADDR addr);
201298944Sobrienextern void set_gdbarch_smash_text_address (struct gdbarch *gdbarch, gdbarch_smash_text_address_ftype *smash_text_address);
201398944Sobrien#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (SMASH_TEXT_ADDRESS)
201498944Sobrien#error "Non multi-arch definition of SMASH_TEXT_ADDRESS"
201598944Sobrien#endif
2016130803Smarcel#if !defined (SMASH_TEXT_ADDRESS)
201798944Sobrien#define SMASH_TEXT_ADDRESS(addr) (gdbarch_smash_text_address (current_gdbarch, addr))
201898944Sobrien#endif
201998944Sobrien
202098944Sobrien/* FIXME/cagney/2001-01-18: This should be split in two.  A target method that indicates if
202198944Sobrien   the target needs software single step.  An ISA method to implement it.
202298944Sobrien
202398944Sobrien   FIXME/cagney/2001-01-18: This should be replaced with something that inserts breakpoints
202498944Sobrien   using the breakpoint system instead of blatting memory directly (as with rs6000).
202598944Sobrien
202698944Sobrien   FIXME/cagney/2001-01-18: The logic is backwards.  It should be asking if the target can
202798944Sobrien   single step.  If not, then implement single step using breakpoints. */
202898944Sobrien
202998944Sobrien#if defined (SOFTWARE_SINGLE_STEP)
203098944Sobrien/* Legacy for systems yet to multi-arch SOFTWARE_SINGLE_STEP */
203198944Sobrien#if !defined (SOFTWARE_SINGLE_STEP_P)
203298944Sobrien#define SOFTWARE_SINGLE_STEP_P() (1)
203398944Sobrien#endif
203498944Sobrien#endif
203598944Sobrien
203698944Sobrienextern int gdbarch_software_single_step_p (struct gdbarch *gdbarch);
203798944Sobrien#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (SOFTWARE_SINGLE_STEP_P)
203898944Sobrien#error "Non multi-arch definition of SOFTWARE_SINGLE_STEP"
203998944Sobrien#endif
204098944Sobrien#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (SOFTWARE_SINGLE_STEP_P)
204198944Sobrien#define SOFTWARE_SINGLE_STEP_P() (gdbarch_software_single_step_p (current_gdbarch))
204298944Sobrien#endif
204398944Sobrien
204498944Sobrientypedef void (gdbarch_software_single_step_ftype) (enum target_signal sig, int insert_breakpoints_p);
204598944Sobrienextern void gdbarch_software_single_step (struct gdbarch *gdbarch, enum target_signal sig, int insert_breakpoints_p);
204698944Sobrienextern void set_gdbarch_software_single_step (struct gdbarch *gdbarch, gdbarch_software_single_step_ftype *software_single_step);
204798944Sobrien#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (SOFTWARE_SINGLE_STEP)
204898944Sobrien#error "Non multi-arch definition of SOFTWARE_SINGLE_STEP"
204998944Sobrien#endif
2050130803Smarcel#if !defined (SOFTWARE_SINGLE_STEP)
205198944Sobrien#define SOFTWARE_SINGLE_STEP(sig, insert_breakpoints_p) (gdbarch_software_single_step (current_gdbarch, sig, insert_breakpoints_p))
205298944Sobrien#endif
205398944Sobrien
2054130803Smarcel/* FIXME: cagney/2003-08-28: Need to find a better way of selecting the
2055130803Smarcel   disassembler.  Perhaphs objdump can handle it? */
205698944Sobrien
2057130803Smarceltypedef int (gdbarch_print_insn_ftype) (bfd_vma vma, struct disassemble_info *info);
2058130803Smarcelextern int gdbarch_print_insn (struct gdbarch *gdbarch, bfd_vma vma, struct disassemble_info *info);
205998944Sobrienextern void set_gdbarch_print_insn (struct gdbarch *gdbarch, gdbarch_print_insn_ftype *print_insn);
206098944Sobrien#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (TARGET_PRINT_INSN)
206198944Sobrien#error "Non multi-arch definition of TARGET_PRINT_INSN"
206298944Sobrien#endif
2063130803Smarcel#if !defined (TARGET_PRINT_INSN)
206498944Sobrien#define TARGET_PRINT_INSN(vma, info) (gdbarch_print_insn (current_gdbarch, vma, info))
206598944Sobrien#endif
206698944Sobrien
206798944Sobrientypedef CORE_ADDR (gdbarch_skip_trampoline_code_ftype) (CORE_ADDR pc);
206898944Sobrienextern CORE_ADDR gdbarch_skip_trampoline_code (struct gdbarch *gdbarch, CORE_ADDR pc);
206998944Sobrienextern void set_gdbarch_skip_trampoline_code (struct gdbarch *gdbarch, gdbarch_skip_trampoline_code_ftype *skip_trampoline_code);
207098944Sobrien#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (SKIP_TRAMPOLINE_CODE)
207198944Sobrien#error "Non multi-arch definition of SKIP_TRAMPOLINE_CODE"
207298944Sobrien#endif
2073130803Smarcel#if !defined (SKIP_TRAMPOLINE_CODE)
207498944Sobrien#define SKIP_TRAMPOLINE_CODE(pc) (gdbarch_skip_trampoline_code (current_gdbarch, pc))
207598944Sobrien#endif
207698944Sobrien
2077130803Smarcel/* If IN_SOLIB_DYNSYM_RESOLVE_CODE returns true, and SKIP_SOLIB_RESOLVER
2078130803Smarcel   evaluates non-zero, this is the address where the debugger will place
2079130803Smarcel   a step-resume breakpoint to get us past the dynamic linker. */
2080130803Smarcel
2081130803Smarceltypedef CORE_ADDR (gdbarch_skip_solib_resolver_ftype) (struct gdbarch *gdbarch, CORE_ADDR pc);
2082130803Smarcelextern CORE_ADDR gdbarch_skip_solib_resolver (struct gdbarch *gdbarch, CORE_ADDR pc);
2083130803Smarcelextern void set_gdbarch_skip_solib_resolver (struct gdbarch *gdbarch, gdbarch_skip_solib_resolver_ftype *skip_solib_resolver);
2084130803Smarcel
208598944Sobrien/* For SVR4 shared libraries, each call goes through a small piece of
208698944Sobrien   trampoline code in the ".plt" section.  IN_SOLIB_CALL_TRAMPOLINE evaluates
2087130803Smarcel   to nonzero if we are currently stopped in one of these. */
208898944Sobrien
208998944Sobrientypedef int (gdbarch_in_solib_call_trampoline_ftype) (CORE_ADDR pc, char *name);
209098944Sobrienextern int gdbarch_in_solib_call_trampoline (struct gdbarch *gdbarch, CORE_ADDR pc, char *name);
209198944Sobrienextern void set_gdbarch_in_solib_call_trampoline (struct gdbarch *gdbarch, gdbarch_in_solib_call_trampoline_ftype *in_solib_call_trampoline);
209298944Sobrien#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (IN_SOLIB_CALL_TRAMPOLINE)
209398944Sobrien#error "Non multi-arch definition of IN_SOLIB_CALL_TRAMPOLINE"
209498944Sobrien#endif
2095130803Smarcel#if !defined (IN_SOLIB_CALL_TRAMPOLINE)
209698944Sobrien#define IN_SOLIB_CALL_TRAMPOLINE(pc, name) (gdbarch_in_solib_call_trampoline (current_gdbarch, pc, name))
209798944Sobrien#endif
2098130803Smarcel
2099130803Smarcel/* Some systems also have trampoline code for returning from shared libs. */
2100130803Smarcel
2101130803Smarceltypedef int (gdbarch_in_solib_return_trampoline_ftype) (CORE_ADDR pc, char *name);
2102130803Smarcelextern int gdbarch_in_solib_return_trampoline (struct gdbarch *gdbarch, CORE_ADDR pc, char *name);
2103130803Smarcelextern void set_gdbarch_in_solib_return_trampoline (struct gdbarch *gdbarch, gdbarch_in_solib_return_trampoline_ftype *in_solib_return_trampoline);
2104130803Smarcel#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (IN_SOLIB_RETURN_TRAMPOLINE)
2105130803Smarcel#error "Non multi-arch definition of IN_SOLIB_RETURN_TRAMPOLINE"
210698944Sobrien#endif
2107130803Smarcel#if !defined (IN_SOLIB_RETURN_TRAMPOLINE)
2108130803Smarcel#define IN_SOLIB_RETURN_TRAMPOLINE(pc, name) (gdbarch_in_solib_return_trampoline (current_gdbarch, pc, name))
2109130803Smarcel#endif
211098944Sobrien
2111130803Smarcel/* Sigtramp is a routine that the kernel calls (which then calls the
2112130803Smarcel   signal handler).  On most machines it is a library routine that is
2113130803Smarcel   linked into the executable.
2114130803Smarcel
2115130803Smarcel   This macro, given a program counter value and the name of the
2116130803Smarcel   function in which that PC resides (which can be null if the name is
2117130803Smarcel   not known), returns nonzero if the PC and name show that we are in
2118130803Smarcel   sigtramp.
2119130803Smarcel
2120130803Smarcel   On most machines just see if the name is sigtramp (and if we have
2121130803Smarcel   no name, assume we are not in sigtramp).
2122130803Smarcel
2123130803Smarcel   FIXME: cagney/2002-04-21: The function find_pc_partial_function
2124130803Smarcel   calls find_pc_sect_partial_function() which calls PC_IN_SIGTRAMP.
2125130803Smarcel   This means PC_IN_SIGTRAMP function can't be implemented by doing its
2126130803Smarcel   own local NAME lookup.
2127130803Smarcel
2128130803Smarcel   FIXME: cagney/2002-04-21: PC_IN_SIGTRAMP is something of a mess.
2129130803Smarcel   Some code also depends on SIGTRAMP_START and SIGTRAMP_END but other
2130130803Smarcel   does not. */
2131130803Smarcel
2132130803Smarceltypedef int (gdbarch_pc_in_sigtramp_ftype) (CORE_ADDR pc, char *name);
2133130803Smarcelextern int gdbarch_pc_in_sigtramp (struct gdbarch *gdbarch, CORE_ADDR pc, char *name);
2134130803Smarcelextern void set_gdbarch_pc_in_sigtramp (struct gdbarch *gdbarch, gdbarch_pc_in_sigtramp_ftype *pc_in_sigtramp);
2135130803Smarcel#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (PC_IN_SIGTRAMP)
2136130803Smarcel#error "Non multi-arch definition of PC_IN_SIGTRAMP"
2137130803Smarcel#endif
2138130803Smarcel#if !defined (PC_IN_SIGTRAMP)
2139130803Smarcel#define PC_IN_SIGTRAMP(pc, name) (gdbarch_pc_in_sigtramp (current_gdbarch, pc, name))
2140130803Smarcel#endif
2141130803Smarcel
2142130803Smarcel#if defined (SIGTRAMP_START)
2143130803Smarcel/* Legacy for systems yet to multi-arch SIGTRAMP_START */
2144130803Smarcel#if !defined (SIGTRAMP_START_P)
2145130803Smarcel#define SIGTRAMP_START_P() (1)
2146130803Smarcel#endif
2147130803Smarcel#endif
2148130803Smarcel
2149130803Smarcelextern int gdbarch_sigtramp_start_p (struct gdbarch *gdbarch);
2150130803Smarcel#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (SIGTRAMP_START_P)
2151130803Smarcel#error "Non multi-arch definition of SIGTRAMP_START"
2152130803Smarcel#endif
2153130803Smarcel#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (SIGTRAMP_START_P)
2154130803Smarcel#define SIGTRAMP_START_P() (gdbarch_sigtramp_start_p (current_gdbarch))
2155130803Smarcel#endif
2156130803Smarcel
2157130803Smarceltypedef CORE_ADDR (gdbarch_sigtramp_start_ftype) (CORE_ADDR pc);
2158130803Smarcelextern CORE_ADDR gdbarch_sigtramp_start (struct gdbarch *gdbarch, CORE_ADDR pc);
2159130803Smarcelextern void set_gdbarch_sigtramp_start (struct gdbarch *gdbarch, gdbarch_sigtramp_start_ftype *sigtramp_start);
2160130803Smarcel#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (SIGTRAMP_START)
2161130803Smarcel#error "Non multi-arch definition of SIGTRAMP_START"
2162130803Smarcel#endif
2163130803Smarcel#if !defined (SIGTRAMP_START)
2164130803Smarcel#define SIGTRAMP_START(pc) (gdbarch_sigtramp_start (current_gdbarch, pc))
2165130803Smarcel#endif
2166130803Smarcel
2167130803Smarcel#if defined (SIGTRAMP_END)
2168130803Smarcel/* Legacy for systems yet to multi-arch SIGTRAMP_END */
2169130803Smarcel#if !defined (SIGTRAMP_END_P)
2170130803Smarcel#define SIGTRAMP_END_P() (1)
2171130803Smarcel#endif
2172130803Smarcel#endif
2173130803Smarcel
2174130803Smarcelextern int gdbarch_sigtramp_end_p (struct gdbarch *gdbarch);
2175130803Smarcel#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (SIGTRAMP_END_P)
2176130803Smarcel#error "Non multi-arch definition of SIGTRAMP_END"
2177130803Smarcel#endif
2178130803Smarcel#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (SIGTRAMP_END_P)
2179130803Smarcel#define SIGTRAMP_END_P() (gdbarch_sigtramp_end_p (current_gdbarch))
2180130803Smarcel#endif
2181130803Smarcel
2182130803Smarceltypedef CORE_ADDR (gdbarch_sigtramp_end_ftype) (CORE_ADDR pc);
2183130803Smarcelextern CORE_ADDR gdbarch_sigtramp_end (struct gdbarch *gdbarch, CORE_ADDR pc);
2184130803Smarcelextern void set_gdbarch_sigtramp_end (struct gdbarch *gdbarch, gdbarch_sigtramp_end_ftype *sigtramp_end);
2185130803Smarcel#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (SIGTRAMP_END)
2186130803Smarcel#error "Non multi-arch definition of SIGTRAMP_END"
2187130803Smarcel#endif
2188130803Smarcel#if !defined (SIGTRAMP_END)
2189130803Smarcel#define SIGTRAMP_END(pc) (gdbarch_sigtramp_end (current_gdbarch, pc))
2190130803Smarcel#endif
2191130803Smarcel
219298944Sobrien/* A target might have problems with watchpoints as soon as the stack
219398944Sobrien   frame of the current function has been destroyed.  This mostly happens
219498944Sobrien   as the first action in a funtion's epilogue.  in_function_epilogue_p()
219598944Sobrien   is defined to return a non-zero value if either the given addr is one
219698944Sobrien   instruction after the stack destroying instruction up to the trailing
219798944Sobrien   return instruction or if we can figure out that the stack frame has
219898944Sobrien   already been invalidated regardless of the value of addr.  Targets
219998944Sobrien   which don't suffer from that problem could just let this functionality
220098944Sobrien   untouched. */
220198944Sobrien
220298944Sobrientypedef int (gdbarch_in_function_epilogue_p_ftype) (struct gdbarch *gdbarch, CORE_ADDR addr);
220398944Sobrienextern int gdbarch_in_function_epilogue_p (struct gdbarch *gdbarch, CORE_ADDR addr);
220498944Sobrienextern void set_gdbarch_in_function_epilogue_p (struct gdbarch *gdbarch, gdbarch_in_function_epilogue_p_ftype *in_function_epilogue_p);
220598944Sobrien
220698944Sobrien/* Given a vector of command-line arguments, return a newly allocated
220798944Sobrien   string which, when passed to the create_inferior function, will be
220898944Sobrien   parsed (on Unix systems, by the shell) to yield the same vector.
220998944Sobrien   This function should call error() if the argument vector is not
221098944Sobrien   representable for this target or if this target does not support
221198944Sobrien   command-line arguments.
221298944Sobrien   ARGC is the number of elements in the vector.
221398944Sobrien   ARGV is an array of strings, one per argument. */
221498944Sobrien
221598944Sobrientypedef char * (gdbarch_construct_inferior_arguments_ftype) (struct gdbarch *gdbarch, int argc, char **argv);
221698944Sobrienextern char * gdbarch_construct_inferior_arguments (struct gdbarch *gdbarch, int argc, char **argv);
221798944Sobrienextern void set_gdbarch_construct_inferior_arguments (struct gdbarch *gdbarch, gdbarch_construct_inferior_arguments_ftype *construct_inferior_arguments);
221898944Sobrien
2219130803Smarceltypedef void (gdbarch_elf_make_msymbol_special_ftype) (asymbol *sym, struct minimal_symbol *msym);
2220130803Smarcelextern void gdbarch_elf_make_msymbol_special (struct gdbarch *gdbarch, asymbol *sym, struct minimal_symbol *msym);
2221130803Smarcelextern void set_gdbarch_elf_make_msymbol_special (struct gdbarch *gdbarch, gdbarch_elf_make_msymbol_special_ftype *elf_make_msymbol_special);
2222130803Smarcel#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (ELF_MAKE_MSYMBOL_SPECIAL)
2223130803Smarcel#error "Non multi-arch definition of ELF_MAKE_MSYMBOL_SPECIAL"
222498944Sobrien#endif
2225130803Smarcel#if !defined (ELF_MAKE_MSYMBOL_SPECIAL)
2226130803Smarcel#define ELF_MAKE_MSYMBOL_SPECIAL(sym, msym) (gdbarch_elf_make_msymbol_special (current_gdbarch, sym, msym))
222798944Sobrien#endif
222898944Sobrien
2229130803Smarceltypedef void (gdbarch_coff_make_msymbol_special_ftype) (int val, struct minimal_symbol *msym);
2230130803Smarcelextern void gdbarch_coff_make_msymbol_special (struct gdbarch *gdbarch, int val, struct minimal_symbol *msym);
2231130803Smarcelextern void set_gdbarch_coff_make_msymbol_special (struct gdbarch *gdbarch, gdbarch_coff_make_msymbol_special_ftype *coff_make_msymbol_special);
2232130803Smarcel#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (COFF_MAKE_MSYMBOL_SPECIAL)
2233130803Smarcel#error "Non multi-arch definition of COFF_MAKE_MSYMBOL_SPECIAL"
223498944Sobrien#endif
2235130803Smarcel#if !defined (COFF_MAKE_MSYMBOL_SPECIAL)
2236130803Smarcel#define COFF_MAKE_MSYMBOL_SPECIAL(val, msym) (gdbarch_coff_make_msymbol_special (current_gdbarch, val, msym))
2237130803Smarcel#endif
223898944Sobrien
2239130803Smarcelextern const char * gdbarch_name_of_malloc (struct gdbarch *gdbarch);
2240130803Smarcelextern void set_gdbarch_name_of_malloc (struct gdbarch *gdbarch, const char * name_of_malloc);
2241130803Smarcel#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (NAME_OF_MALLOC)
2242130803Smarcel#error "Non multi-arch definition of NAME_OF_MALLOC"
224398944Sobrien#endif
2244130803Smarcel#if !defined (NAME_OF_MALLOC)
2245130803Smarcel#define NAME_OF_MALLOC (gdbarch_name_of_malloc (current_gdbarch))
224698944Sobrien#endif
224798944Sobrien
2248130803Smarcelextern int gdbarch_cannot_step_breakpoint (struct gdbarch *gdbarch);
2249130803Smarcelextern void set_gdbarch_cannot_step_breakpoint (struct gdbarch *gdbarch, int cannot_step_breakpoint);
2250130803Smarcel#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (CANNOT_STEP_BREAKPOINT)
2251130803Smarcel#error "Non multi-arch definition of CANNOT_STEP_BREAKPOINT"
225298944Sobrien#endif
2253130803Smarcel#if !defined (CANNOT_STEP_BREAKPOINT)
2254130803Smarcel#define CANNOT_STEP_BREAKPOINT (gdbarch_cannot_step_breakpoint (current_gdbarch))
2255130803Smarcel#endif
225698944Sobrien
2257130803Smarcelextern int gdbarch_have_nonsteppable_watchpoint (struct gdbarch *gdbarch);
2258130803Smarcelextern void set_gdbarch_have_nonsteppable_watchpoint (struct gdbarch *gdbarch, int have_nonsteppable_watchpoint);
2259130803Smarcel#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (HAVE_NONSTEPPABLE_WATCHPOINT)
2260130803Smarcel#error "Non multi-arch definition of HAVE_NONSTEPPABLE_WATCHPOINT"
226198944Sobrien#endif
2262130803Smarcel#if !defined (HAVE_NONSTEPPABLE_WATCHPOINT)
2263130803Smarcel#define HAVE_NONSTEPPABLE_WATCHPOINT (gdbarch_have_nonsteppable_watchpoint (current_gdbarch))
226498944Sobrien#endif
2265130803Smarcel
2266130803Smarcel#if defined (ADDRESS_CLASS_TYPE_FLAGS)
2267130803Smarcel/* Legacy for systems yet to multi-arch ADDRESS_CLASS_TYPE_FLAGS */
2268130803Smarcel#if !defined (ADDRESS_CLASS_TYPE_FLAGS_P)
2269130803Smarcel#define ADDRESS_CLASS_TYPE_FLAGS_P() (1)
227098944Sobrien#endif
2271130803Smarcel#endif
227298944Sobrien
2273130803Smarcelextern int gdbarch_address_class_type_flags_p (struct gdbarch *gdbarch);
2274130803Smarcel#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (ADDRESS_CLASS_TYPE_FLAGS_P)
2275130803Smarcel#error "Non multi-arch definition of ADDRESS_CLASS_TYPE_FLAGS"
227698944Sobrien#endif
2277130803Smarcel#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (ADDRESS_CLASS_TYPE_FLAGS_P)
2278130803Smarcel#define ADDRESS_CLASS_TYPE_FLAGS_P() (gdbarch_address_class_type_flags_p (current_gdbarch))
2279130803Smarcel#endif
228098944Sobrien
2281130803Smarceltypedef int (gdbarch_address_class_type_flags_ftype) (int byte_size, int dwarf2_addr_class);
2282130803Smarcelextern int gdbarch_address_class_type_flags (struct gdbarch *gdbarch, int byte_size, int dwarf2_addr_class);
2283130803Smarcelextern void set_gdbarch_address_class_type_flags (struct gdbarch *gdbarch, gdbarch_address_class_type_flags_ftype *address_class_type_flags);
2284130803Smarcel#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (ADDRESS_CLASS_TYPE_FLAGS)
2285130803Smarcel#error "Non multi-arch definition of ADDRESS_CLASS_TYPE_FLAGS"
228698944Sobrien#endif
2287130803Smarcel#if !defined (ADDRESS_CLASS_TYPE_FLAGS)
2288130803Smarcel#define ADDRESS_CLASS_TYPE_FLAGS(byte_size, dwarf2_addr_class) (gdbarch_address_class_type_flags (current_gdbarch, byte_size, dwarf2_addr_class))
228998944Sobrien#endif
2290130803Smarcel
2291130803Smarcelextern int gdbarch_address_class_type_flags_to_name_p (struct gdbarch *gdbarch);
2292130803Smarcel
2293130803Smarceltypedef const char * (gdbarch_address_class_type_flags_to_name_ftype) (struct gdbarch *gdbarch, int type_flags);
2294130803Smarcelextern const char * gdbarch_address_class_type_flags_to_name (struct gdbarch *gdbarch, int type_flags);
2295130803Smarcelextern void set_gdbarch_address_class_type_flags_to_name (struct gdbarch *gdbarch, gdbarch_address_class_type_flags_to_name_ftype *address_class_type_flags_to_name);
2296130803Smarcel
2297130803Smarcelextern int gdbarch_address_class_name_to_type_flags_p (struct gdbarch *gdbarch);
2298130803Smarcel
2299130803Smarceltypedef int (gdbarch_address_class_name_to_type_flags_ftype) (struct gdbarch *gdbarch, const char *name, int *type_flags_ptr);
2300130803Smarcelextern int gdbarch_address_class_name_to_type_flags (struct gdbarch *gdbarch, const char *name, int *type_flags_ptr);
2301130803Smarcelextern void set_gdbarch_address_class_name_to_type_flags (struct gdbarch *gdbarch, gdbarch_address_class_name_to_type_flags_ftype *address_class_name_to_type_flags);
2302130803Smarcel
2303130803Smarcel/* Is a register in a group */
2304130803Smarcel
2305130803Smarceltypedef int (gdbarch_register_reggroup_p_ftype) (struct gdbarch *gdbarch, int regnum, struct reggroup *reggroup);
2306130803Smarcelextern int gdbarch_register_reggroup_p (struct gdbarch *gdbarch, int regnum, struct reggroup *reggroup);
2307130803Smarcelextern void set_gdbarch_register_reggroup_p (struct gdbarch *gdbarch, gdbarch_register_reggroup_p_ftype *register_reggroup_p);
2308130803Smarcel
2309130803Smarcel/* Fetch the pointer to the ith function argument. */
2310130803Smarcel
2311130803Smarcel#if defined (FETCH_POINTER_ARGUMENT)
2312130803Smarcel/* Legacy for systems yet to multi-arch FETCH_POINTER_ARGUMENT */
2313130803Smarcel#if !defined (FETCH_POINTER_ARGUMENT_P)
2314130803Smarcel#define FETCH_POINTER_ARGUMENT_P() (1)
231598944Sobrien#endif
2316130803Smarcel#endif
231798944Sobrien
2318130803Smarcelextern int gdbarch_fetch_pointer_argument_p (struct gdbarch *gdbarch);
2319130803Smarcel#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (FETCH_POINTER_ARGUMENT_P)
2320130803Smarcel#error "Non multi-arch definition of FETCH_POINTER_ARGUMENT"
232198944Sobrien#endif
2322130803Smarcel#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (FETCH_POINTER_ARGUMENT_P)
2323130803Smarcel#define FETCH_POINTER_ARGUMENT_P() (gdbarch_fetch_pointer_argument_p (current_gdbarch))
2324130803Smarcel#endif
232598944Sobrien
2326130803Smarceltypedef CORE_ADDR (gdbarch_fetch_pointer_argument_ftype) (struct frame_info *frame, int argi, struct type *type);
2327130803Smarcelextern CORE_ADDR gdbarch_fetch_pointer_argument (struct gdbarch *gdbarch, struct frame_info *frame, int argi, struct type *type);
2328130803Smarcelextern void set_gdbarch_fetch_pointer_argument (struct gdbarch *gdbarch, gdbarch_fetch_pointer_argument_ftype *fetch_pointer_argument);
2329130803Smarcel#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (FETCH_POINTER_ARGUMENT)
2330130803Smarcel#error "Non multi-arch definition of FETCH_POINTER_ARGUMENT"
233198944Sobrien#endif
2332130803Smarcel#if !defined (FETCH_POINTER_ARGUMENT)
2333130803Smarcel#define FETCH_POINTER_ARGUMENT(frame, argi, type) (gdbarch_fetch_pointer_argument (current_gdbarch, frame, argi, type))
233498944Sobrien#endif
233598944Sobrien
2336130803Smarcel/* Return the appropriate register set for a core file section with
2337130803Smarcel   name SECT_NAME and size SECT_SIZE. */
2338130803Smarcel
2339130803Smarcelextern int gdbarch_regset_from_core_section_p (struct gdbarch *gdbarch);
2340130803Smarcel
2341130803Smarceltypedef const struct regset * (gdbarch_regset_from_core_section_ftype) (struct gdbarch *gdbarch, const char *sect_name, size_t sect_size);
2342130803Smarcelextern const struct regset * gdbarch_regset_from_core_section (struct gdbarch *gdbarch, const char *sect_name, size_t sect_size);
2343130803Smarcelextern void set_gdbarch_regset_from_core_section (struct gdbarch *gdbarch, gdbarch_regset_from_core_section_ftype *regset_from_core_section);
2344130803Smarcel
234598944Sobrienextern struct gdbarch_tdep *gdbarch_tdep (struct gdbarch *gdbarch);
234698944Sobrien
234798944Sobrien
234898944Sobrien/* Mechanism for co-ordinating the selection of a specific
234998944Sobrien   architecture.
235098944Sobrien
235198944Sobrien   GDB targets (*-tdep.c) can register an interest in a specific
235298944Sobrien   architecture.  Other GDB components can register a need to maintain
235398944Sobrien   per-architecture data.
235498944Sobrien
235598944Sobrien   The mechanisms below ensures that there is only a loose connection
235698944Sobrien   between the set-architecture command and the various GDB
235798944Sobrien   components.  Each component can independently register their need
235898944Sobrien   to maintain architecture specific data with gdbarch.
235998944Sobrien
236098944Sobrien   Pragmatics:
236198944Sobrien
236298944Sobrien   Previously, a single TARGET_ARCHITECTURE_HOOK was provided.  It
236398944Sobrien   didn't scale.
236498944Sobrien
236598944Sobrien   The more traditional mega-struct containing architecture specific
236698944Sobrien   data for all the various GDB components was also considered.  Since
236798944Sobrien   GDB is built from a variable number of (fairly independent)
236898944Sobrien   components it was determined that the global aproach was not
236998944Sobrien   applicable. */
237098944Sobrien
237198944Sobrien
237298944Sobrien/* Register a new architectural family with GDB.
237398944Sobrien
237498944Sobrien   Register support for the specified ARCHITECTURE with GDB.  When
237598944Sobrien   gdbarch determines that the specified architecture has been
237698944Sobrien   selected, the corresponding INIT function is called.
237798944Sobrien
237898944Sobrien   --
237998944Sobrien
238098944Sobrien   The INIT function takes two parameters: INFO which contains the
238198944Sobrien   information available to gdbarch about the (possibly new)
238298944Sobrien   architecture; ARCHES which is a list of the previously created
238398944Sobrien   ``struct gdbarch'' for this architecture.
238498944Sobrien
2385130803Smarcel   The INFO parameter is, as far as possible, be pre-initialized with
2386130803Smarcel   information obtained from INFO.ABFD or the previously selected
2387130803Smarcel   architecture.
238898944Sobrien
2389130803Smarcel   The ARCHES parameter is a linked list (sorted most recently used)
2390130803Smarcel   of all the previously created architures for this architecture
2391130803Smarcel   family.  The (possibly NULL) ARCHES->gdbarch can used to access
2392130803Smarcel   values from the previously selected architecture for this
2393130803Smarcel   architecture family.  The global ``current_gdbarch'' shall not be
2394130803Smarcel   used.
2395130803Smarcel
239698944Sobrien   The INIT function shall return any of: NULL - indicating that it
239798944Sobrien   doesn't recognize the selected architecture; an existing ``struct
239898944Sobrien   gdbarch'' from the ARCHES list - indicating that the new
239998944Sobrien   architecture is just a synonym for an earlier architecture (see
240098944Sobrien   gdbarch_list_lookup_by_info()); a newly created ``struct gdbarch''
240198944Sobrien   - that describes the selected architecture (see gdbarch_alloc()).
240298944Sobrien
240398944Sobrien   The DUMP_TDEP function shall print out all target specific values.
240498944Sobrien   Care should be taken to ensure that the function works in both the
240598944Sobrien   multi-arch and non- multi-arch cases. */
240698944Sobrien
240798944Sobrienstruct gdbarch_list
240898944Sobrien{
240998944Sobrien  struct gdbarch *gdbarch;
241098944Sobrien  struct gdbarch_list *next;
241198944Sobrien};
241298944Sobrien
241398944Sobrienstruct gdbarch_info
241498944Sobrien{
241598944Sobrien  /* Use default: NULL (ZERO). */
241698944Sobrien  const struct bfd_arch_info *bfd_arch_info;
241798944Sobrien
241898944Sobrien  /* Use default: BFD_ENDIAN_UNKNOWN (NB: is not ZERO).  */
241998944Sobrien  int byte_order;
242098944Sobrien
242198944Sobrien  /* Use default: NULL (ZERO). */
242298944Sobrien  bfd *abfd;
242398944Sobrien
242498944Sobrien  /* Use default: NULL (ZERO). */
242598944Sobrien  struct gdbarch_tdep_info *tdep_info;
2426130803Smarcel
2427130803Smarcel  /* Use default: GDB_OSABI_UNINITIALIZED (-1).  */
2428130803Smarcel  enum gdb_osabi osabi;
242998944Sobrien};
243098944Sobrien
243198944Sobrientypedef struct gdbarch *(gdbarch_init_ftype) (struct gdbarch_info info, struct gdbarch_list *arches);
243298944Sobrientypedef void (gdbarch_dump_tdep_ftype) (struct gdbarch *gdbarch, struct ui_file *file);
243398944Sobrien
243498944Sobrien/* DEPRECATED - use gdbarch_register() */
243598944Sobrienextern void register_gdbarch_init (enum bfd_architecture architecture, gdbarch_init_ftype *);
243698944Sobrien
243798944Sobrienextern void gdbarch_register (enum bfd_architecture architecture,
243898944Sobrien                              gdbarch_init_ftype *,
243998944Sobrien                              gdbarch_dump_tdep_ftype *);
244098944Sobrien
244198944Sobrien
244298944Sobrien/* Return a freshly allocated, NULL terminated, array of the valid
244398944Sobrien   architecture names.  Since architectures are registered during the
244498944Sobrien   _initialize phase this function only returns useful information
244598944Sobrien   once initialization has been completed. */
244698944Sobrien
244798944Sobrienextern const char **gdbarch_printable_names (void);
244898944Sobrien
244998944Sobrien
245098944Sobrien/* Helper function.  Search the list of ARCHES for a GDBARCH that
245198944Sobrien   matches the information provided by INFO. */
245298944Sobrien
245398944Sobrienextern struct gdbarch_list *gdbarch_list_lookup_by_info (struct gdbarch_list *arches,  const struct gdbarch_info *info);
245498944Sobrien
245598944Sobrien
245698944Sobrien/* Helper function.  Create a preliminary ``struct gdbarch''.  Perform
245798944Sobrien   basic initialization using values obtained from the INFO andTDEP
245898944Sobrien   parameters.  set_gdbarch_*() functions are called to complete the
245998944Sobrien   initialization of the object. */
246098944Sobrien
246198944Sobrienextern struct gdbarch *gdbarch_alloc (const struct gdbarch_info *info, struct gdbarch_tdep *tdep);
246298944Sobrien
246398944Sobrien
246498944Sobrien/* Helper function.  Free a partially-constructed ``struct gdbarch''.
246598944Sobrien   It is assumed that the caller freeds the ``struct
246698944Sobrien   gdbarch_tdep''. */
246798944Sobrien
246898944Sobrienextern void gdbarch_free (struct gdbarch *);
246998944Sobrien
247098944Sobrien
2471130803Smarcel/* Helper function.  Allocate memory from the ``struct gdbarch''
2472130803Smarcel   obstack.  The memory is freed when the corresponding architecture
2473130803Smarcel   is also freed.  */
2474130803Smarcel
2475130803Smarcelextern void *gdbarch_obstack_zalloc (struct gdbarch *gdbarch, long size);
2476130803Smarcel#define GDBARCH_OBSTACK_CALLOC(GDBARCH, NR, TYPE) ((TYPE *) gdbarch_obstack_zalloc ((GDBARCH), (NR) * sizeof (TYPE)))
2477130803Smarcel#define GDBARCH_OBSTACK_ZALLOC(GDBARCH, TYPE) ((TYPE *) gdbarch_obstack_zalloc ((GDBARCH), sizeof (TYPE)))
2478130803Smarcel
2479130803Smarcel
248098944Sobrien/* Helper function. Force an update of the current architecture.
248198944Sobrien
248298944Sobrien   The actual architecture selected is determined by INFO, ``(gdb) set
248398944Sobrien   architecture'' et.al., the existing architecture and BFD's default
248498944Sobrien   architecture.  INFO should be initialized to zero and then selected
248598944Sobrien   fields should be updated.
248698944Sobrien
248798944Sobrien   Returns non-zero if the update succeeds */
248898944Sobrien
248998944Sobrienextern int gdbarch_update_p (struct gdbarch_info info);
249098944Sobrien
249198944Sobrien
2492130803Smarcel/* Helper function.  Find an architecture matching info.
249398944Sobrien
2494130803Smarcel   INFO should be initialized using gdbarch_info_init, relevant fields
2495130803Smarcel   set, and then finished using gdbarch_info_fill.
2496130803Smarcel
2497130803Smarcel   Returns the corresponding architecture, or NULL if no matching
2498130803Smarcel   architecture was found.  "current_gdbarch" is not updated.  */
2499130803Smarcel
2500130803Smarcelextern struct gdbarch *gdbarch_find_by_info (struct gdbarch_info info);
2501130803Smarcel
2502130803Smarcel
2503130803Smarcel/* Helper function.  Set the global "current_gdbarch" to "gdbarch".
2504130803Smarcel
2505130803Smarcel   FIXME: kettenis/20031124: Of the functions that follow, only
2506130803Smarcel   gdbarch_from_bfd is supposed to survive.  The others will
2507130803Smarcel   dissappear since in the future GDB will (hopefully) be truly
2508130803Smarcel   multi-arch.  However, for now we're still stuck with the concept of
2509130803Smarcel   a single active architecture.  */
2510130803Smarcel
2511130803Smarcelextern void deprecated_current_gdbarch_select_hack (struct gdbarch *gdbarch);
2512130803Smarcel
2513130803Smarcel
251498944Sobrien/* Register per-architecture data-pointer.
251598944Sobrien
251698944Sobrien   Reserve space for a per-architecture data-pointer.  An identifier
251798944Sobrien   for the reserved data-pointer is returned.  That identifer should
251898944Sobrien   be saved in a local static variable.
251998944Sobrien
2520130803Smarcel   The per-architecture data-pointer is either initialized explicitly
2521130803Smarcel   (set_gdbarch_data()) or implicitly (by INIT() via a call to
2522130803Smarcel   gdbarch_data()).
252398944Sobrien
2524130803Smarcel   Memory for the per-architecture data shall be allocated using
2525130803Smarcel   gdbarch_obstack_zalloc.  That memory will be deleted when the
2526130803Smarcel   corresponding architecture object is deleted.
2527130803Smarcel
252898944Sobrien   When a previously created architecture is re-selected, the
252998944Sobrien   per-architecture data-pointer for that previous architecture is
2530130803Smarcel   restored.  INIT() is not re-called.
253198944Sobrien
253298944Sobrien   Multiple registrarants for any architecture are allowed (and
253398944Sobrien   strongly encouraged).  */
253498944Sobrien
253598944Sobrienstruct gdbarch_data;
253698944Sobrien
253798944Sobrientypedef void *(gdbarch_data_init_ftype) (struct gdbarch *gdbarch);
2538130803Smarcelextern struct gdbarch_data *register_gdbarch_data (gdbarch_data_init_ftype *init);
253998944Sobrienextern void set_gdbarch_data (struct gdbarch *gdbarch,
254098944Sobrien			      struct gdbarch_data *data,
254198944Sobrien			      void *pointer);
254298944Sobrien
2543130803Smarcelextern void *gdbarch_data (struct gdbarch *gdbarch, struct gdbarch_data *);
254498944Sobrien
254598944Sobrien
2546130803Smarcel
254798944Sobrien/* Register per-architecture memory region.
254898944Sobrien
254998944Sobrien   Provide a memory-region swap mechanism.  Per-architecture memory
255098944Sobrien   region are created.  These memory regions are swapped whenever the
255198944Sobrien   architecture is changed.  For a new architecture, the memory region
255298944Sobrien   is initialized with zero (0) and the INIT function is called.
255398944Sobrien
255498944Sobrien   Memory regions are swapped / initialized in the order that they are
255598944Sobrien   registered.  NULL DATA and/or INIT values can be specified.
255698944Sobrien
255798944Sobrien   New code should use register_gdbarch_data(). */
255898944Sobrien
255998944Sobrientypedef void (gdbarch_swap_ftype) (void);
2560130803Smarcelextern void deprecated_register_gdbarch_swap (void *data, unsigned long size, gdbarch_swap_ftype *init);
2561130803Smarcel#define DEPRECATED_REGISTER_GDBARCH_SWAP(VAR) deprecated_register_gdbarch_swap (&(VAR), sizeof ((VAR)), NULL)
256298944Sobrien
256398944Sobrien
256498944Sobrien
256598944Sobrien/* Set the dynamic target-system-dependent parameters (architecture,
256646283Sdfr   byte-order, ...) using information found in the BFD */
256746283Sdfr
256898944Sobrienextern void set_gdbarch_from_file (bfd *);
256946283Sdfr
257046283Sdfr
257198944Sobrien/* Initialize the current architecture to the "first" one we find on
257298944Sobrien   our list.  */
257346283Sdfr
257498944Sobrienextern void initialize_current_architecture (void);
257546283Sdfr
257646283Sdfr/* gdbarch trace variable */
257746283Sdfrextern int gdbarch_debug;
257846283Sdfr
257998944Sobrienextern void gdbarch_dump (struct gdbarch *gdbarch, struct ui_file *file);
258098944Sobrien
258146283Sdfr#endif
2582