]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blame - gdb/m88kbsd-nat.c
Updated copyright notices for most files.
[thirdparty/binutils-gdb.git] / gdb / m88kbsd-nat.c
CommitLineData
bf2ca189
MK
1/* Native-dependent code for Motorola 88000 BSD's.
2
0fb0cc75 3 Copyright (C) 2004, 2007, 2008, 2009 Free Software Foundation, Inc.
bf2ca189
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
bf2ca189
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/>. */
bf2ca189
MK
19
20#include "defs.h"
21#include "inferior.h"
22#include "regcache.h"
bc8ffc12 23#include "target.h"
bf2ca189
MK
24
25#include <sys/types.h>
26#include <sys/ptrace.h>
27#include <machine/reg.h>
28
29#include "m88k-tdep.h"
bc8ffc12 30#include "inf-ptrace.h"
bf2ca189
MK
31
32/* Supply the general-purpose registers stored in GREGS to REGCACHE. */
33
34static void
35m88kbsd_supply_gregset (struct regcache *regcache, const void *gregs)
36{
37 const char *regs = gregs;
38 int regnum;
39
40 for (regnum = 0; regnum < M88K_NUM_REGS; regnum++)
41 regcache_raw_supply (regcache, regnum, regs + regnum * 4);
42}
43
44/* Collect the general-purpose registers from REGCACHE and store them
45 in GREGS. */
46
47static void
48m88kbsd_collect_gregset (const struct regcache *regcache,
49 void *gregs, int regnum)
50{
51 char *regs = gregs;
52 int i;
53
54 for (i = 0; i < M88K_NUM_REGS; i++)
55 {
56 if (regnum == -1 || regnum == i)
57 regcache_raw_collect (regcache, i, regs + i * 4);
58 }
59}
60\f
61
62/* Fetch register REGNUM from the inferior. If REGNUM is -1, do this
63 for all registers. */
64
bc8ffc12 65static void
56be3814 66m88kbsd_fetch_inferior_registers (struct regcache *regcache, int regnum)
bf2ca189
MK
67{
68 struct reg regs;
69
70 if (ptrace (PT_GETREGS, PIDGET (inferior_ptid),
9f8e0089 71 (PTRACE_TYPE_ARG3) &regs, 0) == -1)
e2e0b3e5 72 perror_with_name (_("Couldn't get registers"));
bf2ca189 73
56be3814 74 m88kbsd_supply_gregset (regcache, &regs);
bf2ca189
MK
75}
76
77/* Store register REGNUM back into the inferior. If REGNUM is -1, do
78 this for all registers. */
79
bc8ffc12 80static void
56be3814 81m88kbsd_store_inferior_registers (struct regcache *regcache, int regnum)
bf2ca189
MK
82{
83 struct reg regs;
84
85 if (ptrace (PT_GETREGS, PIDGET (inferior_ptid),
9f8e0089 86 (PTRACE_TYPE_ARG3) &regs, 0) == -1)
e2e0b3e5 87 perror_with_name (_("Couldn't get registers"));
bf2ca189 88
56be3814 89 m88kbsd_collect_gregset (regcache, &regs, regnum);
bf2ca189
MK
90
91 if (ptrace (PT_SETREGS, PIDGET (inferior_ptid),
9f8e0089 92 (PTRACE_TYPE_ARG3) &regs, 0) == -1)
e2e0b3e5 93 perror_with_name (_("Couldn't write registers"));
bf2ca189 94}
bc8ffc12
MK
95\f
96
97/* Provide a prototype to silence -Wmissing-prototypes. */
98void _initialize_m88kbsd_nat (void);
99
100void
101_initialize_m88kbsd_nat (void)
102{
103 struct target_ops *t;
104
105 t = inf_ptrace_target ();
106 t->to_fetch_registers = m88kbsd_fetch_inferior_registers;
107 t->to_store_registers = m88kbsd_store_inferior_registers;
108 add_target (t);
109}