Update copyright year in most headers.
[deliverable/binutils-gdb.git] / gdb / mipsnbsd-nat.c
CommitLineData
45888261 1/* Native-dependent code for MIPS systems running NetBSD.
9f8e0089 2
4c38e0a4 3 Copyright (C) 2000, 2001, 2002, 2004, 2007, 2008, 2009, 2010
9b254dd1 4 Free Software Foundation, Inc.
45888261
JT
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
45888261
JT
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/>. */
45888261
JT
20
21#include "defs.h"
22#include "inferior.h"
23#include "regcache.h"
c6d1029f 24#include "target.h"
45888261
JT
25
26#include <sys/types.h>
27#include <sys/ptrace.h>
28#include <machine/reg.h>
29
c6d1029f
MK
30#include "mips-tdep.h"
31#include "mipsnbsd-tdep.h"
32#include "inf-ptrace.h"
33
45888261
JT
34/* Determine if PT_GETREGS fetches this register. */
35static int
74ed0bb4 36getregs_supplies (struct gdbarch *gdbarch, int regno)
45888261 37{
3e8c568d 38 return ((regno) >= MIPS_ZERO_REGNUM
74ed0bb4 39 && (regno) <= gdbarch_pc_regnum (gdbarch));
45888261
JT
40}
41
c6d1029f 42static void
28439f5e
PA
43mipsnbsd_fetch_inferior_registers (struct target_ops *ops,
44 struct regcache *regcache, int regno)
45888261 45{
74ed0bb4
MD
46 struct gdbarch *gdbarch = get_regcache_arch (regcache);
47 if (regno == -1 || getregs_supplies (gdbarch, regno))
45888261
JT
48 {
49 struct reg regs;
50
51 if (ptrace (PT_GETREGS, PIDGET (inferior_ptid),
9f8e0089 52 (PTRACE_TYPE_ARG3) &regs, 0) == -1)
e2e0b3e5 53 perror_with_name (_("Couldn't get registers"));
45888261 54
56be3814 55 mipsnbsd_supply_reg (regcache, (char *) &regs, regno);
45888261
JT
56 if (regno != -1)
57 return;
58 }
59
2eb4d78b 60 if (regno == -1 || regno >= gdbarch_fp0_regnum (get_regcache_arch (regcache)))
45888261
JT
61 {
62 struct fpreg fpregs;
63
64 if (ptrace (PT_GETFPREGS, PIDGET (inferior_ptid),
9f8e0089 65 (PTRACE_TYPE_ARG3) &fpregs, 0) == -1)
e2e0b3e5 66 perror_with_name (_("Couldn't get floating point status"));
45888261 67
56be3814 68 mipsnbsd_supply_fpreg (regcache, (char *) &fpregs, regno);
45888261
JT
69 }
70}
71
c6d1029f 72static void
28439f5e
PA
73mipsnbsd_store_inferior_registers (struct target_ops *ops,
74 struct regcache *regcache, int regno)
45888261 75{
74ed0bb4
MD
76 struct gdbarch *gdbarch = get_regcache_arch (regcache);
77 if (regno == -1 || getregs_supplies (gdbarch, regno))
45888261
JT
78 {
79 struct reg regs;
80
81 if (ptrace (PT_GETREGS, PIDGET (inferior_ptid),
9f8e0089 82 (PTRACE_TYPE_ARG3) &regs, 0) == -1)
e2e0b3e5 83 perror_with_name (_("Couldn't get registers"));
45888261 84
56be3814 85 mipsnbsd_fill_reg (regcache, (char *) &regs, regno);
45888261
JT
86
87 if (ptrace (PT_SETREGS, PIDGET (inferior_ptid),
9f8e0089 88 (PTRACE_TYPE_ARG3) &regs, 0) == -1)
e2e0b3e5 89 perror_with_name (_("Couldn't write registers"));
45888261
JT
90
91 if (regno != -1)
92 return;
93 }
94
2eb4d78b 95 if (regno == -1 || regno >= gdbarch_fp0_regnum (get_regcache_arch (regcache)))
45888261
JT
96 {
97 struct fpreg fpregs;
98
99 if (ptrace (PT_GETFPREGS, PIDGET (inferior_ptid),
9f8e0089 100 (PTRACE_TYPE_ARG3) &fpregs, 0) == -1)
e2e0b3e5 101 perror_with_name (_("Couldn't get floating point status"));
45888261 102
56be3814 103 mipsnbsd_fill_fpreg (regcache, (char *) &fpregs, regno);
45888261
JT
104
105 if (ptrace (PT_SETFPREGS, PIDGET (inferior_ptid),
9f8e0089 106 (PTRACE_TYPE_ARG3) &fpregs, 0) == -1)
e2e0b3e5 107 perror_with_name (_("Couldn't write floating point status"));
45888261
JT
108 }
109}
c6d1029f
MK
110\f
111
112/* Provide a prototype to silence -Wmissing-prototypes. */
113void _initialize_mipsnbsd_nat (void);
114
115void
116_initialize_mipsnbsd_nat (void)
117{
118 struct target_ops *t;
119
120 t = inf_ptrace_target ();
121 t->to_fetch_registers = mipsnbsd_fetch_inferior_registers;
122 t->to_store_registers = mipsnbsd_store_inferior_registers;
123 add_target (t);
124}
This page took 0.616962 seconds and 4 git commands to generate.