]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blame - gdb/sparc-sol2-nat.c
*** empty log message ***
[thirdparty/binutils-gdb.git] / gdb / sparc-sol2-nat.c
CommitLineData
386c036b
MK
1/* Native-dependent code for Solaris SPARC.
2
6aba47ca 3 Copyright (C) 2003, 2004, 2007 Free Software Foundation, Inc.
386c036b
MK
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
a9762ec7 9 the Free Software Foundation; either version 3 of the License, or
386c036b
MK
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
a9762ec7 18 along with this program. If not, see <http://www.gnu.org/licenses/>. */
386c036b
MK
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
e226a4a0 49#if (defined (__arch64__) || \
fb316966 50 (defined (PR_MODEL_NATIVE) && (PR_MODEL_NATIVE == PR_MODEL_LP64)))
386c036b
MK
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
7f7fe91e 75supply_gregset (struct regcache *regcache, const prgregset_t *gregs)
386c036b 76{
7f7fe91e 77 sparc_supply_gregset (&sparc_sol2_gregset, regcache, -1, gregs);
386c036b
MK
78}
79
80void
7f7fe91e 81supply_fpregset (struct regcache *regcache, const prfpregset_t *fpregs)
386c036b 82{
7f7fe91e 83 sparc_supply_fpregset (regcache, -1, fpregs);
386c036b
MK
84}
85
86void
7f7fe91e 87fill_gregset (const struct regcache *regcache, prgregset_t *gregs, int regnum)
386c036b 88{
7f7fe91e 89 sparc_collect_gregset (&sparc_sol2_gregset, regcache, regnum, gregs);
386c036b
MK
90}
91
92void
7f7fe91e 93fill_fpregset (const struct regcache *regcache, prfpregset_t *fpregs, int regnum)
386c036b 94{
7f7fe91e 95 sparc_collect_fpregset (regcache, regnum, fpregs);
386c036b 96}