X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=gdb%2Falpha-tdep.h;h=2c2b100612558a0bf4e861ddf7deb11431c2ea1f;hb=4ee62156d969867d3d3ffedf656a74643f77279e;hp=8b1cf3ece6b4a9246a9531aa6f3bea0af965266b;hpb=accc6d1ff368635135fb961397da748a4505008c;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/alpha-tdep.h b/gdb/alpha-tdep.h index 8b1cf3ece6..2c2b100612 100644 --- a/gdb/alpha-tdep.h +++ b/gdb/alpha-tdep.h @@ -1,12 +1,12 @@ /* 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, + 2008, 2009 Free Software Foundation, Inc. This file is part of GDB. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or + the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, @@ -15,52 +15,44 @@ GNU General Public License for more details. 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. */ + along with this program. If not, see . */ #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 - -/* 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 +#define ALPHA_NUM_REGS 67 -/* 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. @@ -76,35 +68,33 @@ 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); + LONGEST (*dynamic_sigtramp_offset) (struct gdbarch *, CORE_ADDR); - /* If FRAME refers to a sigtramp frame, return the address of the next - frame. */ - CORE_ADDR (*skip_sigtramp_frame) (struct frame_info *, 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) (struct gdbarch *gdbarch, 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 @@ -112,10 +102,20 @@ struct gdbarch_tdep size_t jb_elt_size; /* And the size of each entry in the buf. */ }; -void alpha_software_single_step (enum target_signal, int); - -void alpha_gdbarch_register_os_abi (enum alpha_abi, - void (*init_abi)(struct gdbarch_info, - struct gdbarch *)); +extern unsigned int alpha_read_insn (struct gdbarch *gdbarch, CORE_ADDR pc); +extern int alpha_software_single_step (struct frame_info *frame); +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 */