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