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