* target-memory.c (blocks_to_erase): Correct off-by-one error.
[deliverable/binutils-gdb.git] / gdb / alpha-tdep.h
index b5e721830cf0185f53a3694f55fb68658529b4b1..87aaf8445a5406922e25d01884815be5c7971a08 100644 (file)
@@ -1,6 +1,6 @@
 /* Common target dependent code for GDB on Alpha systems.
-   Copyright 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2002 Free
-   Software Foundation, Inc.
+   Copyright (C) 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2002, 2003, 2007
+   Free Software Foundation, Inc.
 
    This file is part of GDB.
 
 
    You should have received a copy of the GNU General Public License
    along with this program; if not, write to the Free Software
-   Foundation, Inc., 59 Temple Place - Suite 330,
-   Boston, MA 02111-1307, USA.  */
+   Foundation, Inc., 51 Franklin Street, Fifth Floor,
+   Boston, MA 02110-1301, USA.  */
 
 #ifndef ALPHA_TDEP_H
 #define ALPHA_TDEP_H
 
+struct regcache;
+
 /* Say how long (ordinary) registers are.  This is a piece of bogosity
-   used in push_word and a few other places;  REGISTER_RAW_SIZE is the
+   used in push_word and a few other places; register_size() is the
    real way to know how big a register is.  */
 #define ALPHA_REGISTER_SIZE 8
 
 /* Number of machine registers.  */
-#define ALPHA_NUM_REGS 66
+#define ALPHA_NUM_REGS 67
 
 /* Total amount of space needed to store our copies of the machine's
    register state.  */
 #define ALPHA_REGISTER_BYTES (ALPHA_NUM_REGS * 8)
 
-/* Largest value REGISTER_RAW_SIZE can have.  */
-#define ALPHA_MAX_REGISTER_RAW_SIZE 8
-
-/* Largest value REGISTER_VIRTUAL_SIZE can have.  */
-#define ALPHA_MAX_REGISTER_VIRTUAL_SIZE 8
-
-/* Register numbers of various important registers.
-   Note that most of these values are "real" register numbers,
-   and correspond to the general registers of the machine,
-   and FP_REGNUM is a "phony" register number which is too large
-   to be an actual register number as far as the user is concerned
-   but serves to get the desired value when passed to read_register.  */
+/* Register numbers of various important registers.  Note that most of
+   these values are "real" register numbers, and correspond to the
+   general registers of the machine.  */
 
 #define ALPHA_V0_REGNUM             0  /* Function integer return value */
 #define ALPHA_T7_REGNUM             8  /* Return address register for OSF/1 __add* */
+#define ALPHA_S0_REGNUM      9 /* First saved register */
 #define ALPHA_GCC_FP_REGNUM 15  /* Used by gcc as frame register */
 #define ALPHA_A0_REGNUM     16  /* Loc of first arg during a subr call */
 #define ALPHA_T9_REGNUM     23  /* Return address register for OSF/1 __div* */
+#define ALPHA_RA_REGNUM     26  /* Contains return address value */
 #define ALPHA_T12_REGNUM    27  /* Contains start addr of current proc */
+#define ALPHA_GP_REGNUM     29  /* Contains the global pointer */
 #define ALPHA_SP_REGNUM     30  /* Contains address of top of stack */
-#define ALPHA_RA_REGNUM     26  /* Contains return address value */
 #define ALPHA_ZERO_REGNUM   31  /* Read-only register, always 0 */
 #define ALPHA_FP0_REGNUM    32  /* Floating point register 0 */
 #define ALPHA_FPA0_REGNUM   48  /* First float arg during a subr call */
 #define ALPHA_FPCR_REGNUM   63  /* Floating point control register */
 #define ALPHA_PC_REGNUM     64  /* Contains program counter */
-#define ALPHA_FP_REGNUM     65  /* Virtual frame pointer */
+#define ALPHA_UNIQUE_REGNUM 66 /* PAL_rduniq value */
+
+/* Instruction size.  */
+#define ALPHA_INSN_SIZE        4
 
 /* The alpha has two different virtual pointers for arguments and locals.
    
    pointer, the value of localoff is obtained from the PDR.  */
 #define ALPHA_NUM_ARG_REGS   6
 
-/* ABI variants that we know about.  If you add to this enum, please
-   update the table of names in alpha-tdep.c.  */
-enum alpha_abi
-{
-  ALPHA_ABI_UNKNOWN = 0,
-  ALPHA_ABI_OSF1,
-  ALPHA_ABI_LINUX,
-  ALPHA_ABI_FREEBSD,
-  ALPHA_ABI_NETBSD,
-
-  ALPHA_ABI_INVALID    /* Keep this last. */
-};
-
 /* Target-dependent structure in gdbarch.  */
 struct gdbarch_tdep
 {
-  enum alpha_abi alpha_abi;    /* OS/ABI of inferior.  */
-  const char *abi_name;                /* Name of the above.  */
-
-  CORE_ADDR vm_min_address;    /* used by heuristic_proc_start */
+  CORE_ADDR vm_min_address;    /* Used by alpha_heuristic_proc_start.  */
+
+  /* If PC is inside a dynamically-generated signal trampoline function
+     (i.e. one copied onto the user stack at run-time), return how many
+     bytes PC is beyond the start of that function.  Otherwise, return -1.  */
+  LONGEST (*dynamic_sigtramp_offset) (CORE_ADDR);
+
+  /* Translate a signal handler stack base address into the address of
+     the sigcontext structure for that signal handler.  */
+  CORE_ADDR (*sigcontext_addr) (struct frame_info *);
+
+  /* Does the PC fall in a signal trampoline.  */
+  /* NOTE: cagney/2004-04-30: Do not copy/clone this code.  Instead
+     look at tramp-frame.h and other simplier per-architecture
+     sigtramp unwinders.  */
+  int (*pc_in_sigtramp) (CORE_ADDR pc, char *name);
+
+  /* If TYPE will be returned in memory, return true.  */
+  int (*return_in_memory) (struct type *type);
+
+  /* Offset of registers in `struct sigcontext'.  */
+  int sc_pc_offset;
+  int sc_regs_offset;
+  int sc_fpregs_offset;
+
+  int jb_pc;                   /* Offset to PC value in jump buffer.
+                                  If htis is negative, longjmp support
+                                  will be disabled.  */
+  size_t jb_elt_size;          /* And the size of each entry in the buf. */
 };
 
+extern unsigned int alpha_read_insn (CORE_ADDR pc);
+extern int alpha_software_single_step (struct regcache *regcache);
+extern CORE_ADDR alpha_after_prologue (CORE_ADDR pc);
+
+extern void alpha_mdebug_init_abi (struct gdbarch_info, struct gdbarch *);
+extern void alpha_dwarf2_init_abi (struct gdbarch_info, struct gdbarch *);
+
+extern void alpha_supply_int_regs (struct regcache *, int, const void *,
+                                  const void *, const void *);
+extern void alpha_fill_int_regs (const struct regcache *, int,
+                                void *, void *, void *);
+extern void alpha_supply_fp_regs (struct regcache *, int,
+                                 const void *, const void *);
+extern void alpha_fill_fp_regs (const struct regcache *,
+                               int, void *, void *);
+
 #endif /* ALPHA_TDEP_H */
This page took 0.024563 seconds and 4 git commands to generate.