]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blame - gdb/m88kbsd-nat.c
Skip gdb.server/ tests if lack of XML support
[thirdparty/binutils-gdb.git] / gdb / m88kbsd-nat.c
CommitLineData
bf2ca189
MK
1/* Native-dependent code for Motorola 88000 BSD's.
2
618f726f 3 Copyright (C) 2004-2016 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
28439f5e
PA
66m88kbsd_fetch_inferior_registers (struct target_ops *ops,
67 struct regcache *regcache, int regnum)
bf2ca189
MK
68{
69 struct reg regs;
70
dfd4cc63 71 if (ptrace (PT_GETREGS, ptid_get_pid (inferior_ptid),
9f8e0089 72 (PTRACE_TYPE_ARG3) &regs, 0) == -1)
e2e0b3e5 73 perror_with_name (_("Couldn't get registers"));
bf2ca189 74
56be3814 75 m88kbsd_supply_gregset (regcache, &regs);
bf2ca189
MK
76}
77
78/* Store register REGNUM back into the inferior. If REGNUM is -1, do
79 this for all registers. */
80
bc8ffc12 81static void
28439f5e
PA
82m88kbsd_store_inferior_registers (struct target_ops *ops,
83 struct regcache *regcache, int regnum)
bf2ca189
MK
84{
85 struct reg regs;
86
dfd4cc63 87 if (ptrace (PT_GETREGS, ptid_get_pid (inferior_ptid),
9f8e0089 88 (PTRACE_TYPE_ARG3) &regs, 0) == -1)
e2e0b3e5 89 perror_with_name (_("Couldn't get registers"));
bf2ca189 90
56be3814 91 m88kbsd_collect_gregset (regcache, &regs, regnum);
bf2ca189 92
dfd4cc63 93 if (ptrace (PT_SETREGS, ptid_get_pid (inferior_ptid),
9f8e0089 94 (PTRACE_TYPE_ARG3) &regs, 0) == -1)
e2e0b3e5 95 perror_with_name (_("Couldn't write registers"));
bf2ca189 96}
bc8ffc12
MK
97\f
98
99/* Provide a prototype to silence -Wmissing-prototypes. */
100void _initialize_m88kbsd_nat (void);
101
102void
103_initialize_m88kbsd_nat (void)
104{
105 struct target_ops *t;
106
107 t = inf_ptrace_target ();
108 t->to_fetch_registers = m88kbsd_fetch_inferior_registers;
109 t->to_store_registers = m88kbsd_store_inferior_registers;
110 add_target (t);
111}