]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blame - gdb/sparc64-linux-nat.c
Convert struct target_ops to C++
[thirdparty/binutils-gdb.git] / gdb / sparc64-linux-nat.c
CommitLineData
386c036b 1/* Native-dependent code for GNU/Linux UltraSPARC.
8b39fe56 2
e2882c85 3 Copyright (C) 2003-2018 Free Software Foundation, Inc.
8b39fe56
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
8b39fe56
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/>. */
8b39fe56 19
386c036b 20#include "defs.h"
75e192e6
DM
21#include "regcache.h"
22
23#include <sys/procfs.h>
24#include "gregset.h"
386c036b
MK
25
26#include "sparc64-tdep.h"
75e192e6 27#include "sparc-tdep.h"
386c036b 28#include "sparc-nat.h"
10d6c8cd
DJ
29#include "inferior.h"
30#include "target.h"
31#include "linux-nat.h"
386c036b 32
f6ac5f3d
PA
33class sparc64_linux_nat_target final : public linux_nat_target
34{
35public:
36 /* Add our register access methods. */
37 void fetch_registers (struct regcache *regcache, int regnum) override
38 { sparc_fetch_inferior_registers (this, regcache, regnum); }
39
40 void store_registers (struct regcache *regcache, int regnum) override;
41 { sparc_store_inferior_registers (this, regcache, regnum); }
42};
43
44static sparc64_linux_nat_target the_sparc64_linux_nat_target;
45
b4fd25c9 46static const struct sparc_gregmap sparc64_linux_ptrace_gregmap =
386c036b
MK
47{
48 16 * 8, /* "tstate" */
49 17 * 8, /* %pc */
50 18 * 8, /* %npc */
51 19 * 8, /* %y */
52 -1, /* %wim */
53 -1, /* %tbr */
54 0 * 8, /* %g1 */
55 -1, /* %l0 */
56 4 /* sizeof (%y) */
57};
58\f
59
75e192e6 60void
7f7fe91e 61supply_gregset (struct regcache *regcache, const prgregset_t *gregs)
75e192e6 62{
b4fd25c9 63 sparc64_supply_gregset (sparc_gregmap, regcache, -1, gregs);
75e192e6
DM
64}
65
66void
7f7fe91e 67supply_fpregset (struct regcache *regcache, const prfpregset_t *fpregs)
75e192e6 68{
b4fd25c9 69 sparc64_supply_fpregset (&sparc64_bsd_fpregmap, regcache, -1, fpregs);
75e192e6
DM
70}
71
72void
7f7fe91e 73fill_gregset (const struct regcache *regcache, prgregset_t *gregs, int regnum)
75e192e6 74{
b4fd25c9 75 sparc64_collect_gregset (sparc_gregmap, regcache, regnum, gregs);
75e192e6
DM
76}
77
78void
7f7fe91e
UW
79fill_fpregset (const struct regcache *regcache,
80 prfpregset_t *fpregs, int regnum)
75e192e6 81{
b4fd25c9 82 sparc64_collect_fpregset (&sparc64_bsd_fpregmap, regcache, regnum, fpregs);
75e192e6
DM
83}
84
386c036b
MK
85void
86_initialize_sparc64_linux_nat (void)
87{
f6ac5f3d 88 target_ops *t = &the_sparc64_linux_nat_target;
10d6c8cd 89
b4fd25c9 90 sparc_fpregmap = &sparc64_bsd_fpregmap;
c2853f3d 91
10d6c8cd 92 /* Register the target. */
f6ac5f3d
PA
93 linux_target = &the_sparc64_linux_nat_target;
94 add_target (t);
10d6c8cd 95
58afddc6
WP
96 /* ADI support */
97 linux_nat_set_forget_process (t, sparc64_forget_process);
98
b4fd25c9 99 sparc_gregmap = &sparc64_linux_ptrace_gregmap;
386c036b 100}