]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blame - gdb/sparc64-fbsd-nat.c
[binutils, ARM, 4/16] BF insns infrastructure with array of relocs in struct arm_it
[thirdparty/binutils-gdb.git] / gdb / sparc64-fbsd-nat.c
CommitLineData
8b39fe56
MK
1/* Native-dependent code for FreeBSD/sparc64.
2
42a4f53d 3 Copyright (C) 2003-2019 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
MK
19
20#include "defs.h"
37191c9c 21#include "regcache.h"
936df4b3 22#include "target.h"
8b39fe56 23
ca5807d9 24#include "fbsd-nat.h"
8b39fe56 25#include "sparc64-tdep.h"
386c036b 26#include "sparc-nat.h"
37191c9c
MK
27\f
28
29/* Support for debugging kernel virtual memory images. */
30
31#include <sys/types.h>
32#include <machine/pcb.h>
33
34#include "bsd-kvm.h"
35
36static int
37sparc64fbsd_kvm_supply_pcb (struct regcache *regcache, struct pcb *pcb)
38{
39 /* The following is true for FreeBSD 5.4:
40
41 The pcb contains %sp and %pc. Since the register windows are
42 explicitly flushed, we can find the `local' and `in' registers on
43 the stack. */
44
45 /* The stack pointer shouldn't be zero. */
46 if (pcb->pcb_sp == 0)
47 return 0;
48
73e1c03f
SM
49 regcache->raw_supply (SPARC_SP_REGNUM, &pcb->pcb_sp);
50 regcache->raw_supply (SPARC64_PC_REGNUM, &pcb->pcb_pc);
37191c9c
MK
51
52 /* Synthesize %npc. */
53 pcb->pcb_pc += 4;
73e1c03f 54 regcache->raw_supply (SPARC64_NPC_REGNUM, &pcb->pcb_pc);
37191c9c
MK
55
56 /* Read `local' and `in' registers from the stack. */
57 sparc_supply_rwindow (regcache, pcb->pcb_sp, -1);
58
59 return 1;
60}
8b39fe56 61
f6ac5f3d
PA
62/* Add some extra features to the generic SPARC target. */
63static sparc_target<fbsd_nat_target> the_sparc64_fbsd_nat_target;
64
8b39fe56
MK
65void
66_initialize_sparc64fbsd_nat (void)
67{
d9f719f1 68 add_inf_child_target (&the_sparc64_fbsd_nat_target);
f5ccf7a2 69
b4fd25c9 70 sparc_gregmap = &sparc64fbsd_gregmap;
37191c9c
MK
71
72 /* Support debugging kernel virtual memory images. */
73 bsd_kvm_add_target (sparc64fbsd_kvm_supply_pcb);
8b39fe56 74}