* gas/bfin/{bit2.s, cache2.s, control_code2.s, event2.s,
[deliverable/binutils-gdb.git] / gdb / mipsnbsd-nat.c
CommitLineData
45888261 1/* Native-dependent code for MIPS systems running NetBSD.
9f8e0089 2
9b254dd1
DJ
3 Copyright (C) 2000, 2001, 2002, 2004, 2007, 2008
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
36getregs_supplies (int regno)
37{
3e8c568d
UW
38 return ((regno) >= MIPS_ZERO_REGNUM
39 && (regno) <= gdbarch_pc_regnum (current_gdbarch));
45888261
JT
40}
41
c6d1029f 42static void
56be3814 43mipsnbsd_fetch_inferior_registers (struct regcache *regcache, int regno)
45888261
JT
44{
45 if (regno == -1 || getregs_supplies (regno))
46 {
47 struct reg regs;
48
49 if (ptrace (PT_GETREGS, PIDGET (inferior_ptid),
9f8e0089 50 (PTRACE_TYPE_ARG3) &regs, 0) == -1)
e2e0b3e5 51 perror_with_name (_("Couldn't get registers"));
45888261 52
56be3814 53 mipsnbsd_supply_reg (regcache, (char *) &regs, regno);
45888261
JT
54 if (regno != -1)
55 return;
56 }
57
2eb4d78b 58 if (regno == -1 || regno >= gdbarch_fp0_regnum (get_regcache_arch (regcache)))
45888261
JT
59 {
60 struct fpreg fpregs;
61
62 if (ptrace (PT_GETFPREGS, PIDGET (inferior_ptid),
9f8e0089 63 (PTRACE_TYPE_ARG3) &fpregs, 0) == -1)
e2e0b3e5 64 perror_with_name (_("Couldn't get floating point status"));
45888261 65
56be3814 66 mipsnbsd_supply_fpreg (regcache, (char *) &fpregs, regno);
45888261
JT
67 }
68}
69
c6d1029f 70static void
56be3814 71mipsnbsd_store_inferior_registers (struct regcache *regcache, int regno)
45888261
JT
72{
73 if (regno == -1 || getregs_supplies (regno))
74 {
75 struct reg regs;
76
77 if (ptrace (PT_GETREGS, PIDGET (inferior_ptid),
9f8e0089 78 (PTRACE_TYPE_ARG3) &regs, 0) == -1)
e2e0b3e5 79 perror_with_name (_("Couldn't get registers"));
45888261 80
56be3814 81 mipsnbsd_fill_reg (regcache, (char *) &regs, regno);
45888261
JT
82
83 if (ptrace (PT_SETREGS, PIDGET (inferior_ptid),
9f8e0089 84 (PTRACE_TYPE_ARG3) &regs, 0) == -1)
e2e0b3e5 85 perror_with_name (_("Couldn't write registers"));
45888261
JT
86
87 if (regno != -1)
88 return;
89 }
90
2eb4d78b 91 if (regno == -1 || regno >= gdbarch_fp0_regnum (get_regcache_arch (regcache)))
45888261
JT
92 {
93 struct fpreg fpregs;
94
95 if (ptrace (PT_GETFPREGS, PIDGET (inferior_ptid),
9f8e0089 96 (PTRACE_TYPE_ARG3) &fpregs, 0) == -1)
e2e0b3e5 97 perror_with_name (_("Couldn't get floating point status"));
45888261 98
56be3814 99 mipsnbsd_fill_fpreg (regcache, (char *) &fpregs, regno);
45888261
JT
100
101 if (ptrace (PT_SETFPREGS, PIDGET (inferior_ptid),
9f8e0089 102 (PTRACE_TYPE_ARG3) &fpregs, 0) == -1)
e2e0b3e5 103 perror_with_name (_("Couldn't write floating point status"));
45888261
JT
104 }
105}
c6d1029f
MK
106\f
107
108/* Provide a prototype to silence -Wmissing-prototypes. */
109void _initialize_mipsnbsd_nat (void);
110
111void
112_initialize_mipsnbsd_nat (void)
113{
114 struct target_ops *t;
115
116 t = inf_ptrace_target ();
117 t->to_fetch_registers = mipsnbsd_fetch_inferior_registers;
118 t->to_store_registers = mipsnbsd_store_inferior_registers;
119 add_target (t);
120}
This page took 0.55179 seconds and 4 git commands to generate.