1130803Smarcel/* Target-dependent code for UltraSPARC. 2130803Smarcel 3130803Smarcel Copyright 2003, 2004 Free Software Foundation, Inc. 4130803Smarcel 5130803Smarcel This file is part of GDB. 6130803Smarcel 7130803Smarcel This program is free software; you can redistribute it and/or modify 8130803Smarcel it under the terms of the GNU General Public License as published by 9130803Smarcel the Free Software Foundation; either version 2 of the License, or 10130803Smarcel (at your option) any later version. 11130803Smarcel 12130803Smarcel This program is distributed in the hope that it will be useful, 13130803Smarcel but WITHOUT ANY WARRANTY; without even the implied warranty of 14130803Smarcel MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15130803Smarcel GNU General Public License for more details. 16130803Smarcel 17130803Smarcel You should have received a copy of the GNU General Public License 18130803Smarcel along with this program; if not, write to the Free Software 19130803Smarcel Foundation, Inc., 59 Temple Place - Suite 330, 20130803Smarcel Boston, MA 02111-1307, USA. */ 21130803Smarcel 22130803Smarcel#ifndef SPARC64_TDEP_H 23130803Smarcel#define SPARC64_TDEP_H 1 24130803Smarcel 25130803Smarcelstruct frame_info; 26130803Smarcelstruct gdbarch; 27130803Smarcelstruct regcache; 28130803Smarcelstruct sparc_gregset; 29130803Smarcelstruct trad_frame_saved_reg; 30130803Smarcel 31130803Smarcel#include "sparc-tdep.h" 32130803Smarcel 33130803Smarcel/* The stack pointer is offset from the stack frame by a BIAS of 2047 34130803Smarcel (0x7ff) for 64-bit code. BIAS is likely to be defined on SPARC 35130803Smarcel hosts, so undefine it first. */ 36130803Smarcel#undef BIAS 37130803Smarcel#define BIAS 2047 38130803Smarcel 39130803Smarcel/* Register offsets for the general-purpose register set. */ 40130803Smarcel 41130803Smarcel/* UltraSPARC doesn't have %psr. */ 42130803Smarcel#define r_tstate_offset r_psr_offset 43130803Smarcel 44130803Smarcel/* UltraSPARC doesn't have %wim either. */ 45130803Smarcel#define r_fprs_offset r_wim_offset 46130803Smarcel 47130803Smarcel/* Register numbers of various important registers. */ 48130803Smarcel 49130803Smarcelenum sparc64_regnum 50130803Smarcel{ 51130803Smarcel SPARC64_F32_REGNUM /* %f32 */ 52130803Smarcel = SPARC_F0_REGNUM + 32, 53130803Smarcel SPARC64_F62_REGNUM /* %f62 */ 54130803Smarcel = SPARC64_F32_REGNUM + 15, 55130803Smarcel SPARC64_PC_REGNUM, /* %pc */ 56130803Smarcel SPARC64_NPC_REGNUM, /* %npc */ 57130803Smarcel SPARC64_STATE_REGNUM, 58130803Smarcel SPARC64_FSR_REGNUM, /* %fsr */ 59130803Smarcel SPARC64_FPRS_REGNUM, /* %fprs */ 60130803Smarcel SPARC64_Y_REGNUM, /* %y */ 61130803Smarcel 62130803Smarcel /* Pseudo registers. */ 63130803Smarcel SPARC64_CWP_REGNUM, /* %cwp */ 64130803Smarcel SPARC64_PSTATE_REGNUM, /* %pstate */ 65130803Smarcel SPARC64_ASI_REGNUM, /* %asi */ 66130803Smarcel SPARC64_CCR_REGNUM, /* %ccr */ 67130803Smarcel SPARC64_D0_REGNUM, /* %d0 */ 68130803Smarcel SPARC64_D10_REGNUM /* %d10 */ 69130803Smarcel = SPARC64_D0_REGNUM + 5, 70130803Smarcel SPARC64_D30_REGNUM /* %d30 */ 71130803Smarcel = SPARC64_D0_REGNUM + 15, 72130803Smarcel SPARC64_D32_REGNUM /* %d32 */ 73130803Smarcel = SPARC64_D0_REGNUM + 16, 74130803Smarcel SPARC64_D62_REGNUM /* %d62 */ 75130803Smarcel = SPARC64_D0_REGNUM + 31, 76130803Smarcel SPARC64_Q0_REGNUM, /* %q0 */ 77130803Smarcel SPARC64_Q8_REGNUM /* %q8 */ 78130803Smarcel = SPARC64_Q0_REGNUM + 2, 79130803Smarcel SPARC64_Q28_REGNUM /* %q28 */ 80130803Smarcel = SPARC64_Q0_REGNUM + 7, 81130803Smarcel SPARC64_Q32_REGNUM /* %q32 */ 82130803Smarcel = SPARC64_Q0_REGNUM + 8, 83130803Smarcel SPARC64_Q60_REGNUM /* %q60 */ 84130803Smarcel = SPARC64_Q0_REGNUM + 15 85130803Smarcel}; 86130803Smarcel 87130803Smarcelextern void sparc64_init_abi (struct gdbarch_info info, 88130803Smarcel struct gdbarch *gdbarch); 89130803Smarcel 90130803Smarcelextern void sparc64_supply_gregset (const struct sparc_gregset *gregset, 91130803Smarcel struct regcache *regcache, 92130803Smarcel int regnum, const void *gregs); 93130803Smarcelextern void sparc64_collect_gregset (const struct sparc_gregset *gregset, 94130803Smarcel const struct regcache *regcache, 95130803Smarcel int regnum, void *gregs); 96130803Smarcelextern void sparc64_supply_fpregset (struct regcache *regcache, 97130803Smarcel int regnum, const void *fpregs); 98130803Smarcelextern void sparc64_collect_fpregset (const struct regcache *regcache, 99130803Smarcel int regnum, void *fpregs); 100130803Smarcel 101130803Smarcel/* Functions and variables exported from sparc64-sol2-tdep.c. */ 102130803Smarcel 103130803Smarcel/* Register offsets for Solaris 2. */ 104130803Smarcelextern const struct sparc_gregset sparc64_sol2_gregset; 105130803Smarcel 106130803Smarcelextern void sparc64_sol2_init_abi (struct gdbarch_info info, 107130803Smarcel struct gdbarch *gdbarch); 108130803Smarcel 109130803Smarcel/* Variables exported from sparc64fbsd-tdep.c. */ 110130803Smarcel 111130803Smarcel/* Register offsets for FreeBSD/sparc64. */ 112130803Smarcelextern const struct sparc_gregset sparc64fbsd_gregset; 113130803Smarcel 114130803Smarcel/* Functions and variables exported from sparc64nbsd-tdep.c. */ 115130803Smarcel 116130803Smarcel/* Register offsets for NetBSD/sparc64. */ 117130803Smarcelextern const struct sparc_gregset sparc64nbsd_gregset; 118130803Smarcel 119130803Smarcelextern struct trad_frame_saved_reg * 120130803Smarcel sparc64nbsd_sigcontext_saved_regs (CORE_ADDR sigcontext_addr, 121130803Smarcel struct frame_info *next_frame); 122130803Smarcel 123130803Smarcel#endif /* sparc64-tdep.h */ 124