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