1/* Native-dependent code for Solaris SPARC. 2 3 Copyright (C) 2003, 2004, 2007 Free Software Foundation, Inc. 4 5 This file is part of GDB. 6 7 This program is free software; you can redistribute it and/or modify 8 it under the terms of the GNU General Public License as published by 9 the Free Software Foundation; either version 3 of the License, or 10 (at your option) any later version. 11 12 This program is distributed in the hope that it will be useful, 13 but WITHOUT ANY WARRANTY; without even the implied warranty of 14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 GNU General Public License for more details. 16 17 You should have received a copy of the GNU General Public License 18 along with this program. If not, see <http://www.gnu.org/licenses/>. */ 19 20#include "defs.h" 21#include "regcache.h" 22 23#include <sys/procfs.h> 24#include "gregset.h" 25 26#include "sparc-tdep.h" 27 28/* This file provids the (temporary) glue between the Solaris SPARC 29 target dependent code and the machine independent SVR4 /proc 30 support. */ 31 32/* Solaris 7 (Solaris 2.7, SunOS 5.7) and up support two process data 33 models, the traditional 32-bit data model (ILP32) and the 64-bit 34 data model (LP64). The format of /proc depends on the data model 35 of the observer (the controlling process, GDB in our case). The 36 Solaris header files conveniently define PR_MODEL_NATIVE to the 37 data model of the controlling process. If its value is 38 PR_MODEL_LP64, we know that GDB is being compiled as a 64-bit 39 program. 40 41 GNU/Linux uses the same formats as Solaris for its core files (but 42 not for ptrace(2)). The GNU/Linux headers don't define 43 PR_MODEL_NATIVE though. Therefore we rely on the __arch64__ define 44 provided by GCC to determine the appropriate data model. 45 46 Note that a 32-bit GDB won't be able to debug a 64-bit target 47 process using /proc on Solaris. */ 48 49#if (defined (__arch64__) || \ 50 (defined (PR_MODEL_NATIVE) && (PR_MODEL_NATIVE == PR_MODEL_LP64))) 51 52#include "sparc64-tdep.h" 53 54#define sparc_supply_gregset sparc64_supply_gregset 55#define sparc_supply_fpregset sparc64_supply_fpregset 56#define sparc_collect_gregset sparc64_collect_gregset 57#define sparc_collect_fpregset sparc64_collect_fpregset 58 59#define sparc_sol2_gregset sparc64_sol2_gregset 60#define sparc_sol2_fpregset sparc64_sol2_fpregset 61 62#else 63 64#define sparc_supply_gregset sparc32_supply_gregset 65#define sparc_supply_fpregset sparc32_supply_fpregset 66#define sparc_collect_gregset sparc32_collect_gregset 67#define sparc_collect_fpregset sparc32_collect_fpregset 68 69#define sparc_sol2_gregset sparc32_sol2_gregset 70#define sparc_sol2_fpregset sparc32_sol2_fpregset 71 72#endif 73 74void 75supply_gregset (struct regcache *regcache, const prgregset_t *gregs) 76{ 77 sparc_supply_gregset (&sparc_sol2_gregset, regcache, -1, gregs); 78} 79 80void 81supply_fpregset (struct regcache *regcache, const prfpregset_t *fpregs) 82{ 83 sparc_supply_fpregset (regcache, -1, fpregs); 84} 85 86void 87fill_gregset (const struct regcache *regcache, prgregset_t *gregs, int regnum) 88{ 89 sparc_collect_gregset (&sparc_sol2_gregset, regcache, regnum, gregs); 90} 91 92void 93fill_fpregset (const struct regcache *regcache, prfpregset_t *fpregs, int regnum) 94{ 95 sparc_collect_fpregset (regcache, regnum, fpregs); 96} 97