Create new file regcache.h. Update all uses.
[deliverable/binutils-gdb.git] / gdb / remote-vx68.c
CommitLineData
c906108c
SS
1/* 68k-dependent portions of the RPC protocol
2 used with a VxWorks target
3
c5aa993b 4 Contributed by Wind River Systems.
c906108c 5
c5aa993b 6 This file is part of GDB.
c906108c 7
c5aa993b
JM
8 This program is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation; either version 2 of the License, or
11 (at your option) any later version.
c906108c 12
c5aa993b
JM
13 This program is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
c906108c 17
c5aa993b
JM
18 You should have received a copy of the GNU General Public License
19 along with this program; if not, write to the Free Software
20 Foundation, Inc., 59 Temple Place - Suite 330,
21 Boston, MA 02111-1307, USA. */
c906108c
SS
22
23#include <stdio.h>
24#include "defs.h"
25
c5aa993b 26#include "vx-share/regPacket.h"
c906108c
SS
27#include "frame.h"
28#include "inferior.h"
c906108c
SS
29#include "target.h"
30#include "gdbcore.h"
31#include "command.h"
32#include "symtab.h"
33#include "symfile.h" /* for struct complaint */
4e052eda 34#include "regcache.h"
c906108c
SS
35
36#include "gdb_string.h"
37#include <errno.h>
c906108c
SS
38#include <fcntl.h>
39#include <sys/types.h>
40#include <sys/time.h>
41#include <sys/socket.h>
42
43#ifdef _AIX /* IBM claims "void *malloc()" not char * */
44#define malloc bogon_malloc
45#endif
46
47#include <rpc/rpc.h>
48
49#ifdef _AIX
50#undef malloc
51#endif
52
53#include <sys/time.h> /* UTek's <rpc/rpc.h> doesn't #incl this */
54#include <netdb.h>
55#include "vx-share/ptrace.h"
56#include "vx-share/xdr_ptrace.h"
57#include "vx-share/xdr_ld.h"
58#include "vx-share/xdr_rdb.h"
59#include "vx-share/dbgRpcLib.h"
60
61/* get rid of value.h if possible */
62#include <value.h>
63#include <symtab.h>
64
65/* Flag set if target has fpu */
66
67extern int target_has_fp;
68
69/* Generic register read/write routines in remote-vx.c. */
70
71extern void net_read_registers ();
72extern void net_write_registers ();
73
74/* Read a register or registers from the VxWorks target.
75 REGNO is the register to read, or -1 for all; currently,
76 it is ignored. FIXME look at regno to improve efficiency. */
77
78void
fba45db2 79vx_read_register (int regno)
c906108c
SS
80{
81 char mc68k_greg_packet[MC68K_GREG_PLEN];
82 char mc68k_fpreg_packet[MC68K_FPREG_PLEN];
83
84 /* Get general-purpose registers. */
85
86 net_read_registers (mc68k_greg_packet, MC68K_GREG_PLEN, PTRACE_GETREGS);
87
88 bcopy (&mc68k_greg_packet[MC68K_R_D0], registers, 16 * MC68K_GREG_SIZE);
89 bcopy (&mc68k_greg_packet[MC68K_R_SR], &registers[REGISTER_BYTE (PS_REGNUM)],
90 MC68K_GREG_SIZE);
91 bcopy (&mc68k_greg_packet[MC68K_R_PC], &registers[REGISTER_BYTE (PC_REGNUM)],
92 MC68K_GREG_SIZE);
93
94 /* Get floating-point registers, if the target system has them.
95 Otherwise, zero them. */
96
97 if (target_has_fp)
98 {
99 net_read_registers (mc68k_fpreg_packet, MC68K_FPREG_PLEN,
100 PTRACE_GETFPREGS);
101
102 bcopy (&mc68k_fpreg_packet[MC68K_R_FP0],
103 &registers[REGISTER_BYTE (FP0_REGNUM)],
104 MC68K_FPREG_SIZE * 8);
105 bcopy (&mc68k_fpreg_packet[MC68K_R_FPCR],
106 &registers[REGISTER_BYTE (FPC_REGNUM)],
107 MC68K_FPREG_PLEN - (MC68K_FPREG_SIZE * 8));
108 }
109 else
110 {
111 bzero (&registers[REGISTER_BYTE (FP0_REGNUM)],
112 MC68K_FPREG_SIZE * 8);
113 bzero (&registers[REGISTER_BYTE (FPC_REGNUM)],
114 MC68K_FPREG_PLEN - (MC68K_FPREG_SIZE * 8));
115 }
116
117 /* Mark the register cache valid. */
118
119 registers_fetched ();
120}
121
122/* Store a register or registers into the VxWorks target.
123 REGNO is the register to store, or -1 for all; currently,
124 it is ignored. FIXME look at regno to improve efficiency. */
125
126void
fba45db2 127vx_write_register (int regno)
c906108c
SS
128{
129 char mc68k_greg_packet[MC68K_GREG_PLEN];
130 char mc68k_fpreg_packet[MC68K_FPREG_PLEN];
131
132 /* Store general-purpose registers. */
133
134 bcopy (registers, &mc68k_greg_packet[MC68K_R_D0], 16 * MC68K_GREG_SIZE);
135 bcopy (&registers[REGISTER_BYTE (PS_REGNUM)],
136 &mc68k_greg_packet[MC68K_R_SR], MC68K_GREG_SIZE);
137 bcopy (&registers[REGISTER_BYTE (PC_REGNUM)],
138 &mc68k_greg_packet[MC68K_R_PC], MC68K_GREG_SIZE);
139
140 net_write_registers (mc68k_greg_packet, MC68K_GREG_PLEN, PTRACE_SETREGS);
141
142 /* Store floating point registers if the target has them. */
143
144 if (target_has_fp)
145 {
146 bcopy (&registers[REGISTER_BYTE (FP0_REGNUM)],
147 &mc68k_fpreg_packet[MC68K_R_FP0],
148 MC68K_FPREG_SIZE * 8);
149 bcopy (&registers[REGISTER_BYTE (FPC_REGNUM)],
150 &mc68k_fpreg_packet[MC68K_R_FPCR],
151 MC68K_FPREG_PLEN - (MC68K_FPREG_SIZE * 8));
152
153 net_write_registers (mc68k_fpreg_packet, MC68K_FPREG_PLEN,
154 PTRACE_SETFPREGS);
155 }
156}
This page took 0.114356 seconds and 4 git commands to generate.