X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=gdb%2Fsparc64-tdep.h;h=5930f51a31e29b0ba8c0bb86d94107fe94392ec2;hb=7a893eb8c1c037df38184beb7d993222a68d7c3d;hp=e7b910d55fe305327d1b2f31094d0e5a9adb850d;hpb=3567a8eaa2eac49fa28b7a0d8a1572280c5e8bc2;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/sparc64-tdep.h b/gdb/sparc64-tdep.h index e7b910d55f..5930f51a31 100644 --- a/gdb/sparc64-tdep.h +++ b/gdb/sparc64-tdep.h @@ -1,12 +1,13 @@ /* Target-dependent code for UltraSPARC. - Copyright 2003 Free Software Foundation, Inc. + Copyright (C) 2003, 2004, 2006, 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,89 +16,119 @@ 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 SPARC64_TDEP_H -#define SPARC62_TDEP_H 1 +#define SPARC64_TDEP_H 1 -/* Register numbers of various important registers. */ +struct frame_info; +struct gdbarch; +struct regcache; +struct sparc_gregset; +struct trad_frame_saved_reg; -enum sparc_regnum -{ - SPARC_G0_REGNUM, /* %g0 */ - SPARC_G1_REGNUM, - SPARC_G2_REGNUM, - SPARC_G3_REGNUM, - SPARC_G4_REGNUM, - SPARC_G5_REGNUM, - SPARC_G6_REGNUM, - SPARC_G7_REGNUM, /* %g7 */ - SPARC_O0_REGNUM, /* %o0 */ - SPARC_O1_REGNUM, - SPARC_O2_REGNUM, - SPARC_O3_REGNUM, - SPARC_O4_REGNUM, - SPARC_O5_REGNUM, - SPARC_SP_REGNUM, /* %sp (%o6) */ - SPARC_O7_REGNUM, /* %o7 */ - SPARC_L0_REGNUM, /* %l0 */ - SPARC_L1_REGNUM, - SPARC_L2_REGNUM, - SPARC_L3_REGNUM, - SPARC_L4_REGNUM, - SPARC_L5_REGNUM, - SPARC_L6_REGNUM, - SPARC_L7_REGNUM, /* %l7 */ - SPARC_I0_REGNUM, /* %i0 */ - SPARC_I1_REGNUM, - SPARC_I2_REGNUM, - SPARC_I3_REGNUM, - SPARC_I4_REGNUM, - SPARC_I5_REGNUM, - SPARC_FP_REGNUM, /* %fp (%i6) */ - SPARC_I7_REGNUM, /* %i7 */ - SPARC_F0_REGNUM, /* %f0 */ - SPARC_F31_REGNUM = SPARC_F0_REGNUM + 31 /* %f31 */ -}; +#include "sparc-tdep.h" + +/* The stack pointer is offset from the stack frame by a BIAS of 2047 + (0x7ff) for 64-bit code. BIAS is likely to be defined on SPARC + hosts, so undefine it first. */ +#undef BIAS +#define BIAS 2047 + +/* Register offsets for the general-purpose register set. */ + +/* UltraSPARC doesn't have %psr. */ +#define r_tstate_offset r_psr_offset + +/* UltraSPARC doesn't have %wim either. */ +#define r_fprs_offset r_wim_offset + +/* Register numbers of various important registers. */ enum sparc64_regnum { - SPARC64_F32_REGNUM = SPARC_F0_REGNUM + 32, /* %f32 */ - SPARC64_F62_REGNUM = SPARC64_F32_REGNUM + 15, /* %f62 */ + SPARC64_F32_REGNUM /* %f32 */ + = SPARC_F0_REGNUM + 32, + SPARC64_F62_REGNUM /* %f62 */ + = SPARC64_F32_REGNUM + 15, SPARC64_PC_REGNUM, /* %pc */ SPARC64_NPC_REGNUM, /* %npc */ SPARC64_STATE_REGNUM, SPARC64_FSR_REGNUM, /* %fsr */ SPARC64_FPRS_REGNUM, /* %fprs */ SPARC64_Y_REGNUM, /* %y */ - + /* Pseudo registers. */ SPARC64_CWP_REGNUM, /* %cwp */ SPARC64_PSTATE_REGNUM, /* %pstate */ SPARC64_ASI_REGNUM, /* %asi */ SPARC64_CCR_REGNUM, /* %ccr */ SPARC64_D0_REGNUM, /* %d0 */ - SPARC64_D10_REGNUM = SPARC64_D0_REGNUM + 5, /* %d10 */ - SPARC64_D30_REGNUM = SPARC64_D0_REGNUM + 15, /* %d30 */ - SPARC64_D32_REGNUM = SPARC64_D0_REGNUM + 16, /* %d32 */ - SPARC64_D62_REGNUM = SPARC64_D0_REGNUM + 31, /* %d62 */ + SPARC64_D10_REGNUM /* %d10 */ + = SPARC64_D0_REGNUM + 5, + SPARC64_D30_REGNUM /* %d30 */ + = SPARC64_D0_REGNUM + 15, + SPARC64_D32_REGNUM /* %d32 */ + = SPARC64_D0_REGNUM + 16, + SPARC64_D62_REGNUM /* %d62 */ + = SPARC64_D0_REGNUM + 31, SPARC64_Q0_REGNUM, /* %q0 */ - SPARC64_Q8_REGNUM = SPARC64_Q0_REGNUM + 2, /* %q8 */ - SPARC64_Q28_REGNUM = SPARC64_Q0_REGNUM + 7, /* %q28 */ - SPARC64_Q32_REGNUM = SPARC64_Q0_REGNUM + 8, /* %q32 */ - SPARC64_Q60_REGNUM = SPARC64_Q0_REGNUM + 15 /* %q60 */ + SPARC64_Q8_REGNUM /* %q8 */ + = SPARC64_Q0_REGNUM + 2, + SPARC64_Q28_REGNUM /* %q28 */ + = SPARC64_Q0_REGNUM + 7, + SPARC64_Q32_REGNUM /* %q32 */ + = SPARC64_Q0_REGNUM + 8, + SPARC64_Q60_REGNUM /* %q60 */ + = SPARC64_Q0_REGNUM + 15 }; -extern void sparc_supply_rwindow (CORE_ADDR sp, int regnum); -extern void sparc_fill_rwindow (CORE_ADDR sp, int regnum); +/* Processor state bits. */ +#define SPARC64_PSTATE_AG 0x001 +#define SPARC64_PSTATE_IE 0x002 +#define SPARC64_PSTATE_PRIV 0x004 +#define SPARC64_PSTATE_AM 0x008 +#define SPARC64_PSTATE_PEF 0x010 +#define SPARC64_PSTATE_RED 0x020 +#define SPARC64_PSTATE_TLE 0x100 +#define SPARC64_PSTATE_CLE 0x200 +#define SPARC64_PSTATE_PID0 0x400 +#define SPARC64_PSTATE_PID1 0x800 + +extern void sparc64_init_abi (struct gdbarch_info info, + struct gdbarch *gdbarch); + +extern void sparc64_supply_gregset (const struct sparc_gregset *gregset, + struct regcache *regcache, + int regnum, const void *gregs); +extern void sparc64_collect_gregset (const struct sparc_gregset *gregset, + const struct regcache *regcache, + int regnum, void *gregs); +extern void sparc64_supply_fpregset (struct regcache *regcache, + int regnum, const void *fpregs); +extern void sparc64_collect_fpregset (const struct regcache *regcache, + int regnum, void *fpregs); + +/* Functions and variables exported from sparc64-sol2-tdep.c. */ + +/* Register offsets for Solaris 2. */ +extern const struct sparc_gregset sparc64_sol2_gregset; + +extern void sparc64_sol2_init_abi (struct gdbarch_info info, + struct gdbarch *gdbarch); + +/* Variables exported from sparc64fbsd-tdep.c. */ + +/* Register offsets for FreeBSD/sparc64. */ +extern const struct sparc_gregset sparc64fbsd_gregset; + +/* Functions and variables exported from sparc64nbsd-tdep.c. */ -/* Functions exported from sparc64fbsd-tdep.c. */ +/* Register offsets for NetBSD/sparc64. */ +extern const struct sparc_gregset sparc64nbsd_gregset; -extern void sparc64fbsd_supply_reg (const char *regs, int regnum); -extern void sparc64fbsd_fill_reg (char *regs, int regnum); -extern void sparc64fbsd_supply_fpreg (const char *regs, int regnum); -extern void sparc64fbsd_fill_fpreg (char *regs, int regnum); +extern struct trad_frame_saved_reg * + sparc64nbsd_sigcontext_saved_regs (CORE_ADDR sigcontext_addr, + struct frame_info *next_frame); #endif /* sparc64-tdep.h */