Create new file regcache.h. Update all uses.
[deliverable/binutils-gdb.git] / gdb / remote-est.c
CommitLineData
c906108c 1/* Remote debugging interface for EST-300 ICE, for GDB
4e052eda 2 Copyright 1995, 2001 Free Software Foundation, Inc.
c906108c
SS
3 Contributed by Cygnus Support.
4
5 Written by Steve Chamberlain for Cygnus Support.
6 Re-written by Stu Grossman of Cygnus Support
7
c5aa993b 8 This file is part of GDB.
c906108c 9
c5aa993b
JM
10 This program is free software; you can redistribute it and/or modify
11 it under the terms of the GNU General Public License as published by
12 the Free Software Foundation; either version 2 of the License, or
13 (at your option) any later version.
c906108c 14
c5aa993b
JM
15 This program is distributed in the hope that it will be useful,
16 but WITHOUT ANY WARRANTY; without even the implied warranty of
17 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 GNU General Public License for more details.
c906108c 19
c5aa993b
JM
20 You should have received a copy of the GNU General Public License
21 along with this program; if not, write to the Free Software
22 Foundation, Inc., 59 Temple Place - Suite 330,
23 Boston, MA 02111-1307, USA. */
c906108c
SS
24
25#include "defs.h"
26#include "gdbcore.h"
27#include "target.h"
28#include "monitor.h"
29#include "serial.h"
4e052eda 30#include "regcache.h"
c906108c 31
a14ed312 32static void est_open (char *args, int from_tty);
c906108c
SS
33
34static void
fba45db2 35est_supply_register (char *regname, int regnamelen, char *val, int vallen)
c906108c
SS
36{
37 int regno;
38
39 if (regnamelen != 2)
40 return;
41
42 switch (regname[0])
43 {
44 case 'S':
45 if (regname[1] != 'R')
46 return;
47 regno = PS_REGNUM;
48 break;
49 case 'P':
50 if (regname[1] != 'C')
51 return;
52 regno = PC_REGNUM;
53 break;
54 case 'D':
55 if (regname[1] < '0' || regname[1] > '7')
56 return;
57 regno = regname[1] - '0' + D0_REGNUM;
58 break;
59 case 'A':
60 if (regname[1] < '0' || regname[1] > '7')
61 return;
62 regno = regname[1] - '0' + A0_REGNUM;
63 break;
64 default:
65 return;
66 }
67
68 monitor_supply_register (regno, val);
69}
70
71/*
72 * This array of registers needs to match the indexes used by GDB. The
73 * whole reason this exists is because the various ROM monitors use
74 * different names than GDB does, and don't support all the
75 * registers either. So, typing "info reg sp" becomes a "r30".
76 */
77
78static char *est_regnames[NUM_REGS] =
79{
80 "D0", "D1", "D2", "D3", "D4", "D5", "D6", "D7",
81 "A0", "A1", "A2", "A3", "A4", "A5", "A6", "A7",
82 "SR", "PC",
83};
84
85/*
86 * Define the monitor command strings. Since these are passed directly
87 * through to a printf style function, we need can include formatting
88 * strings. We also need a CR or LF on the end.
89 */
90
91static struct target_ops est_ops;
92
c5aa993b
JM
93static char *est_inits[] =
94{"he\r", /* Resets the prompt, and clears repeated cmds */
95 NULL};
c906108c 96
c5aa993b 97static struct monitor_ops est_cmds;
c906108c 98
c5aa993b
JM
99static void
100init_est_cmds (void)
c906108c 101{
c5aa993b
JM
102 est_cmds.flags = MO_CLR_BREAK_USES_ADDR | MO_FILL_USES_ADDR | MO_NEED_REGDUMP_AFTER_CONT |
103 MO_SREC_ACK | MO_SREC_ACK_PLUS;
104 est_cmds.init = est_inits; /* Init strings */
105 est_cmds.cont = "go\r"; /* continue command */
106 est_cmds.step = "sidr\r"; /* single step */
107 est_cmds.stop = "\003"; /* ^C interrupts the program */
108 est_cmds.set_break = "sb %x\r"; /* set a breakpoint */
109 est_cmds.clr_break = "rb %x\r"; /* clear a breakpoint */
110 est_cmds.clr_all_break = "rb\r"; /* clear all breakpoints */
111 est_cmds.fill = "bfb %x %x %x\r"; /* fill (start end val) */
112 est_cmds.setmem.cmdb = "smb %x %x\r"; /* setmem.cmdb (addr, value) */
113 est_cmds.setmem.cmdw = "smw %x %x\r"; /* setmem.cmdw (addr, value) */
114 est_cmds.setmem.cmdl = "sml %x %x\r"; /* setmem.cmdl (addr, value) */
115 est_cmds.setmem.cmdll = NULL; /* setmem.cmdll (addr, value) */
116 est_cmds.setmem.resp_delim = NULL; /* setreg.resp_delim */
117 est_cmds.setmem.term = NULL; /* setreg.term */
118 est_cmds.setmem.term_cmd = NULL; /* setreg.term_cmd */
119 est_cmds.getmem.cmdb = "dmb %x %x\r"; /* getmem.cmdb (addr, len) */
120 est_cmds.getmem.cmdw = "dmw %x %x\r"; /* getmem.cmdw (addr, len) */
121 est_cmds.getmem.cmdl = "dml %x %x\r"; /* getmem.cmdl (addr, len) */
122 est_cmds.getmem.cmdll = NULL; /* getmem.cmdll (addr, len) */
123 est_cmds.getmem.resp_delim = ": "; /* getmem.resp_delim */
124 est_cmds.getmem.term = NULL; /* getmem.term */
125 est_cmds.getmem.term_cmd = NULL; /* getmem.term_cmd */
126 est_cmds.setreg.cmd = "sr %s %x\r"; /* setreg.cmd (name, value) */
127 est_cmds.setreg.resp_delim = NULL; /* setreg.resp_delim */
128 est_cmds.setreg.term = NULL; /* setreg.term */
129 est_cmds.setreg.term_cmd = NULL; /* setreg.term_cmd */
130 est_cmds.getreg.cmd = "dr %s\r"; /* getreg.cmd (name) */
131 est_cmds.getreg.resp_delim = " = "; /* getreg.resp_delim */
132 est_cmds.getreg.term = NULL; /* getreg.term */
133 est_cmds.getreg.term_cmd = NULL; /* getreg.term_cmd */
134 est_cmds.dump_registers = "dr\r"; /* dump_registers */
135 est_cmds.register_pattern = "\\(\\w+\\) = \\([0-9a-fA-F]+\\)"; /* register_pattern */
136 est_cmds.supply_register = est_supply_register; /* supply_register */
137 est_cmds.load_routine = NULL; /* load_routine (defaults to SRECs) */
138 est_cmds.load = "dl\r"; /* download command */
139 est_cmds.loadresp = "+"; /* load response */
140 est_cmds.prompt = ">BKM>"; /* monitor command prompt */
141 est_cmds.line_term = "\r"; /* end-of-line terminator */
142 est_cmds.cmd_end = NULL; /* optional command terminator */
143 est_cmds.target = &est_ops; /* target operations */
144 est_cmds.stopbits = SERIAL_1_STOPBITS; /* number of stop bits */
145 est_cmds.regnames = est_regnames; /* registers names */
146 est_cmds.magic = MONITOR_OPS_MAGIC; /* magic */
147} /* init_est_cmds */
c906108c
SS
148
149static void
fba45db2 150est_open (char *args, int from_tty)
c906108c
SS
151{
152 monitor_open (args, &est_cmds, from_tty);
153}
154
155void
fba45db2 156_initialize_est (void)
c906108c 157{
c5aa993b 158 init_est_cmds ();
c906108c
SS
159 init_monitor_ops (&est_ops);
160
161 est_ops.to_shortname = "est";
162 est_ops.to_longname = "EST background debug monitor";
163 est_ops.to_doc = "Debug via the EST BDM.\n\
164Specify the serial device it is connected to (e.g. /dev/ttya).";
165 est_ops.to_open = est_open;
166
167 add_target (&est_ops);
168}
This page took 0.10223 seconds and 4 git commands to generate.