]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blame - gdb/i386-netbsd-nat.c
Update copyright year range in all GDB files
[thirdparty/binutils-gdb.git] / gdb / i386-netbsd-nat.c
CommitLineData
9062529b
MK
1/* Native-dependent code for NetBSD/i386.
2
3666a048 3 Copyright (C) 2004-2021 Free Software Foundation, Inc.
9062529b
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
9062529b
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/>. */
9062529b
MK
19
20#include "defs.h"
21#include "gdbcore.h"
22#include "regcache.h"
9692934b 23#include "target.h"
9062529b
MK
24
25#include "i386-tdep.h"
03b62bbb 26#include "i386-bsd-nat.h"
9062529b
MK
27
28/* Support for debugging kernel virtual memory images. */
29
30#include <sys/types.h>
31#include <machine/frame.h>
32#include <machine/pcb.h>
33
1b71cfcf 34#include "netbsd-nat.h"
9062529b
MK
35#include "bsd-kvm.h"
36
37static int
38i386nbsd_supply_pcb (struct regcache *regcache, struct pcb *pcb)
39{
40 struct switchframe sf;
41
42 /* The following is true for NetBSD 1.6.2:
43
44 The pcb contains %esp and %ebp at the point of the context switch
45 in cpu_switch(). At that point we have a stack frame as
46 described by `struct switchframe', which for NetBSD 1.6.2 has the
47 following layout:
48
49 interrupt level
50 %edi
51 %esi
52 %ebx
53 %eip
54
55 we reconstruct the register state as it would look when we just
56 returned from cpu_switch(). */
57
58 /* The stack pointer shouldn't be zero. */
59 if (pcb->pcb_esp == 0)
60 return 0;
61
df80278b 62 read_memory (pcb->pcb_esp, (gdb_byte *)&sf, sizeof sf);
9062529b 63 pcb->pcb_esp += sizeof (struct switchframe);
73e1c03f
SM
64 regcache->raw_supply (I386_EDI_REGNUM, &sf.sf_edi);
65 regcache->raw_supply (I386_ESI_REGNUM, &sf.sf_esi);
66 regcache->raw_supply (I386_EBP_REGNUM, &pcb->pcb_ebp);
67 regcache->raw_supply (I386_ESP_REGNUM, &pcb->pcb_esp);
68 regcache->raw_supply (I386_EBX_REGNUM, &sf.sf_ebx);
69 regcache->raw_supply (I386_EIP_REGNUM, &sf.sf_eip);
9062529b
MK
70
71 return 1;
72}
9062529b 73
f6ac5f3d
PA
74static i386_bsd_nat_target<nbsd_nat_target> the_i386_nbsd_nat_target;
75
6c265988 76void _initialize_i386nbsd_nat ();
9062529b 77void
6c265988 78_initialize_i386nbsd_nat ()
9062529b 79{
d9f719f1 80 add_inf_child_target (&the_i386_nbsd_nat_target);
9692934b 81
9062529b
MK
82 /* Support debugging kernel virtual memory images. */
83 bsd_kvm_add_target (i386nbsd_supply_pcb);
84}