Fix library-list.dtd -> library-list-svr4.dtd
[deliverable/binutils-gdb.git] / gdb / vax-nat.c
CommitLineData
b9e1c0d6
MK
1/* Native-dependent code for VAX UNIXen (including older BSD's).
2
ecd75fc8 3 Copyright (C) 2004-2014 Free Software Foundation, Inc.
b9e1c0d6
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
b9e1c0d6
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/>. */
b9e1c0d6
MK
19
20#include "defs.h"
21#include "inferior.h"
22
b9e1c0d6
MK
23#include <sys/types.h>
24#include <sys/dir.h>
25#include <sys/user.h>
26
27#ifdef HAVE_SYS_PTRACE_H
28#include <sys/ptrace.h>
29#endif
30
31#ifndef PT_READ_U
32#define PT_READ_U 3
33#endif
34
35#ifdef SYS_REG_H
36/* UNIX 32V and derivatives (including 3BSD). */
37#include <sys/reg.h>
38#else
39/* 4.2BSD and derivatives. */
40#include <machine/reg.h>
41#endif
42
43#include "vax-tdep.h"
2a2de4ce 44#include "inf-ptrace.h"
b9e1c0d6 45
b021a221 46/* Address of the user structure. This is the value for 32V; 3BSD
b9e1c0d6 47 uses a different value, but hey, who's still using those systems? */
de732108 48static CORE_ADDR vax_kernel_u_addr = 0x80020000;
b9e1c0d6
MK
49
50/* Location of the user's stored registers; usage is `u.u_ar0[XX]'.
51 For 4.2BSD and ULTRIX these are negative! See <machine/reg.h>. */
52static int vax_register_index[] =
53{
54 R0, R1, R2, R3, R4, R5,
55 R6, R7, R8, R9, R10, R11,
56 AP, FP, SP, PC, PS
57};
58
de732108 59static CORE_ADDR
b9e1c0d6
MK
60vax_register_u_addr (CORE_ADDR u_ar0, int regnum)
61{
62 gdb_assert (regnum >= 0 && regnum < ARRAY_SIZE (vax_register_index));
63
64 /* Type is `int *u_ar0'. See <sys/user.h>. */
65 return u_ar0 + vax_register_index[regnum - VAX_R0_REGNUM] * 4;
66}
b9e1c0d6 67
2a2de4ce 68static CORE_ADDR
7714d83a 69vax_register_u_offset (struct gdbarch *gdbarch, int regnum, int store_p)
b9e1c0d6
MK
70{
71 size_t u_ar0_offset = offsetof (struct user, u_ar0);
72 CORE_ADDR u_ar0;
73 int pid;
74
75 errno = 0;
dfd4cc63 76 pid = ptid_get_pid (inferior_ptid);
b9e1c0d6
MK
77 u_ar0 = ptrace (PT_READ_U, pid, u_ar0_offset, 0);
78 if (errno)
e2e0b3e5 79 perror_with_name (_("Unable to determine location of registers"));
b9e1c0d6
MK
80
81 return vax_register_u_addr (u_ar0, regnum) - vax_kernel_u_addr;
82}
83\f
84
85#include <nlist.h>
86
87#ifndef _PATH_UNIX
88#define _PATH_UNIX "/vmunix"
89#endif
90
91/* Provide a prototype to silence -Wmissing-prototypes. */
92void _initialize_vax_nat (void);
93
94void
95_initialize_vax_nat (void)
96{
97 struct nlist names[2];
98
99 names[0].n_name = "_u";
100 names[1].n_name = NULL;
101 if (nlist (_PATH_UNIX, names) == 0)
102 vax_kernel_u_addr = names[0].n_value;
2a2de4ce
MK
103
104 add_target (inf_ptrace_trad_target (vax_register_u_offset));
b9e1c0d6 105}
This page took 1.189713 seconds and 4 git commands to generate.