]> Git Repo - binutils.git/blob - gdb/remote-eb.c
* i386gnu-nat.c: Include "i386-tdep.h".
[binutils.git] / gdb / remote-eb.c
1 /* OBSOLETE /* Remote debugging interface for AMD 29000 EBMON on IBM PC, for GDB. */
2 /* OBSOLETE    Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1998, 1999, 2000, 2001 */
3 /* OBSOLETE    Free Software Foundation, Inc. */
4 /* OBSOLETE    Contributed by Cygnus Support.  Written by Jim Kingdon for Cygnus. */
5 /* OBSOLETE  */
6 /* OBSOLETE    This file is part of GDB. */
7 /* OBSOLETE  */
8 /* OBSOLETE    This program is free software; you can redistribute it and/or modify */
9 /* OBSOLETE    it under the terms of the GNU General Public License as published by */
10 /* OBSOLETE    the Free Software Foundation; either version 2 of the License, or */
11 /* OBSOLETE    (at your option) any later version. */
12 /* OBSOLETE  */
13 /* OBSOLETE    This program is distributed in the hope that it will be useful, */
14 /* OBSOLETE    but WITHOUT ANY WARRANTY; without even the implied warranty of */
15 /* OBSOLETE    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the */
16 /* OBSOLETE    GNU General Public License for more details. */
17 /* OBSOLETE  */
18 /* OBSOLETE    You should have received a copy of the GNU General Public License */
19 /* OBSOLETE    along with this program; if not, write to the Free Software */
20 /* OBSOLETE    Foundation, Inc., 59 Temple Place - Suite 330, */
21 /* OBSOLETE    Boston, MA 02111-1307, USA.  */ */
22 /* OBSOLETE  */
23 /* OBSOLETE /* This is like remote.c but is for an esoteric situation-- */
24 /* OBSOLETE    having a a29k board in a PC hooked up to a unix machine with */
25 /* OBSOLETE    a serial line, and running ctty com1 on the PC, through which */
26 /* OBSOLETE    the unix machine can run ebmon.  Not to mention that the PC */
27 /* OBSOLETE    has PC/NFS, so it can access the same executables that gdb can, */
28 /* OBSOLETE    over the net in real time.  */ */
29 /* OBSOLETE  */
30 /* OBSOLETE #include "defs.h" */
31 /* OBSOLETE #include "gdb_string.h" */
32 /* OBSOLETE #include "regcache.h" */
33 /* OBSOLETE  */
34 /* OBSOLETE #include "inferior.h" */
35 /* OBSOLETE #include "bfd.h" */
36 /* OBSOLETE #include "symfile.h" */
37 /* OBSOLETE #include "value.h" */
38 /* OBSOLETE #include <ctype.h> */
39 /* OBSOLETE #include <fcntl.h> */
40 /* OBSOLETE #include <signal.h> */
41 /* OBSOLETE #include <errno.h> */
42 /* OBSOLETE #include "terminal.h" */
43 /* OBSOLETE #include "target.h" */
44 /* OBSOLETE #include "gdbcore.h" */
45 /* OBSOLETE  */
46 /* OBSOLETE extern struct target_ops eb_ops;    /* Forward declaration */ */
47 /* OBSOLETE  */
48 /* OBSOLETE static void eb_close (); */
49 /* OBSOLETE  */
50 /* OBSOLETE #define LOG_FILE "eb.log" */
51 /* OBSOLETE #if defined (LOG_FILE) */
52 /* OBSOLETE FILE *log_file; */
53 /* OBSOLETE #endif */
54 /* OBSOLETE  */
55 /* OBSOLETE static int timeout = 24; */
56 /* OBSOLETE  */
57 /* OBSOLETE /* Descriptor for I/O to remote machine.  Initialize it to -1 so that */
58 /* OBSOLETE    eb_open knows that we don't have a file open when the program */
59 /* OBSOLETE    starts.  */ */
60 /* OBSOLETE int eb_desc = -1; */
61 /* OBSOLETE  */
62 /* OBSOLETE /* stream which is fdopen'd from eb_desc.  Only valid when */
63 /* OBSOLETE    eb_desc != -1.  */ */
64 /* OBSOLETE FILE *eb_stream; */
65 /* OBSOLETE  */
66 /* OBSOLETE /* Read a character from the remote system, doing all the fancy */
67 /* OBSOLETE    timeout stuff.  */ */
68 /* OBSOLETE static int */
69 /* OBSOLETE readchar (void) */
70 /* OBSOLETE { */
71 /* OBSOLETE   char buf; */
72 /* OBSOLETE  */
73 /* OBSOLETE   buf = '\0'; */
74 /* OBSOLETE #ifdef HAVE_TERMIO */
75 /* OBSOLETE   /* termio does the timeout for us.  */ */
76 /* OBSOLETE   read (eb_desc, &buf, 1); */
77 /* OBSOLETE #else */
78 /* OBSOLETE   alarm (timeout); */
79 /* OBSOLETE   if (read (eb_desc, &buf, 1) < 0) */
80 /* OBSOLETE     { */
81 /* OBSOLETE       if (errno == EINTR) */
82 /* OBSOLETE     error ("Timeout reading from remote system."); */
83 /* OBSOLETE       else */
84 /* OBSOLETE     perror_with_name ("remote"); */
85 /* OBSOLETE     } */
86 /* OBSOLETE   alarm (0); */
87 /* OBSOLETE #endif */
88 /* OBSOLETE  */
89 /* OBSOLETE   if (buf == '\0') */
90 /* OBSOLETE     error ("Timeout reading from remote system."); */
91 /* OBSOLETE #if defined (LOG_FILE) */
92 /* OBSOLETE   putc (buf & 0x7f, log_file); */
93 /* OBSOLETE #endif */
94 /* OBSOLETE   return buf & 0x7f; */
95 /* OBSOLETE } */
96 /* OBSOLETE  */
97 /* OBSOLETE /* Keep discarding input from the remote system, until STRING is found.  */
98 /* OBSOLETE    Let the user break out immediately.  */ */
99 /* OBSOLETE static void */
100 /* OBSOLETE expect (char *string) */
101 /* OBSOLETE { */
102 /* OBSOLETE   char *p = string; */
103 /* OBSOLETE  */
104 /* OBSOLETE   immediate_quit++; */
105 /* OBSOLETE   while (1) */
106 /* OBSOLETE     { */
107 /* OBSOLETE       if (readchar () == *p) */
108 /* OBSOLETE     { */
109 /* OBSOLETE       p++; */
110 /* OBSOLETE       if (*p == '\0') */
111 /* OBSOLETE         { */
112 /* OBSOLETE           immediate_quit--; */
113 /* OBSOLETE           return; */
114 /* OBSOLETE         } */
115 /* OBSOLETE     } */
116 /* OBSOLETE       else */
117 /* OBSOLETE     p = string; */
118 /* OBSOLETE     } */
119 /* OBSOLETE } */
120 /* OBSOLETE  */
121 /* OBSOLETE /* Keep discarding input until we see the ebmon prompt. */
122 /* OBSOLETE  */
123 /* OBSOLETE    The convention for dealing with the prompt is that you */
124 /* OBSOLETE    o give your command */
125 /* OBSOLETE    o *then* wait for the prompt. */
126 /* OBSOLETE  */
127 /* OBSOLETE    Thus the last thing that a procedure does with the serial line */
128 /* OBSOLETE    will be an expect_prompt().  Exception:  eb_resume does not */
129 /* OBSOLETE    wait for the prompt, because the terminal is being handed over */
130 /* OBSOLETE    to the inferior.  However, the next thing which happens after that */
131 /* OBSOLETE    is a eb_wait which does wait for the prompt. */
132 /* OBSOLETE    Note that this includes abnormal exit, e.g. error().  This is */
133 /* OBSOLETE    necessary to prevent getting into states from which we can't */
134 /* OBSOLETE    recover.  */ */
135 /* OBSOLETE static void */
136 /* OBSOLETE expect_prompt (void) */
137 /* OBSOLETE { */
138 /* OBSOLETE #if defined (LOG_FILE) */
139 /* OBSOLETE   /* This is a convenient place to do this.  The idea is to do it often */
140 /* OBSOLETE      enough that we never lose much data if we terminate abnormally.  */ */
141 /* OBSOLETE   fflush (log_file); */
142 /* OBSOLETE #endif */
143 /* OBSOLETE   expect ("\n# "); */
144 /* OBSOLETE } */
145 /* OBSOLETE  */
146 /* OBSOLETE /* Get a hex digit from the remote system & return its value. */
147 /* OBSOLETE    If ignore_space is nonzero, ignore spaces (not newline, tab, etc).  */ */
148 /* OBSOLETE static int */
149 /* OBSOLETE get_hex_digit (int ignore_space) */
150 /* OBSOLETE { */
151 /* OBSOLETE   int ch; */
152 /* OBSOLETE   while (1) */
153 /* OBSOLETE     { */
154 /* OBSOLETE       ch = readchar (); */
155 /* OBSOLETE       if (ch >= '0' && ch <= '9') */
156 /* OBSOLETE     return ch - '0'; */
157 /* OBSOLETE       else if (ch >= 'A' && ch <= 'F') */
158 /* OBSOLETE     return ch - 'A' + 10; */
159 /* OBSOLETE       else if (ch >= 'a' && ch <= 'f') */
160 /* OBSOLETE     return ch - 'a' + 10; */
161 /* OBSOLETE       else if (ch == ' ' && ignore_space) */
162 /* OBSOLETE     ; */
163 /* OBSOLETE       else */
164 /* OBSOLETE     { */
165 /* OBSOLETE       expect_prompt (); */
166 /* OBSOLETE       error ("Invalid hex digit from remote system."); */
167 /* OBSOLETE     } */
168 /* OBSOLETE     } */
169 /* OBSOLETE } */
170 /* OBSOLETE  */
171 /* OBSOLETE /* Get a byte from eb_desc and put it in *BYT.  Accept any number */
172 /* OBSOLETE    leading spaces.  */ */
173 /* OBSOLETE static void */
174 /* OBSOLETE get_hex_byte (char *byt) */
175 /* OBSOLETE { */
176 /* OBSOLETE   int val; */
177 /* OBSOLETE  */
178 /* OBSOLETE   val = get_hex_digit (1) << 4; */
179 /* OBSOLETE   val |= get_hex_digit (0); */
180 /* OBSOLETE   *byt = val; */
181 /* OBSOLETE } */
182 /* OBSOLETE  */
183 /* OBSOLETE /* Get N 32-bit words from remote, each preceded by a space, */
184 /* OBSOLETE    and put them in registers starting at REGNO.  */ */
185 /* OBSOLETE static void */
186 /* OBSOLETE get_hex_regs (int n, int regno) */
187 /* OBSOLETE { */
188 /* OBSOLETE   long val; */
189 /* OBSOLETE   int i; */
190 /* OBSOLETE  */
191 /* OBSOLETE   for (i = 0; i < n; i++) */
192 /* OBSOLETE     { */
193 /* OBSOLETE       int j; */
194 /* OBSOLETE  */
195 /* OBSOLETE       val = 0; */
196 /* OBSOLETE       for (j = 0; j < 8; j++) */
197 /* OBSOLETE     val = (val << 4) + get_hex_digit (j == 0); */
198 /* OBSOLETE       supply_register (regno++, (char *) &val); */
199 /* OBSOLETE     } */
200 /* OBSOLETE } */
201 /* OBSOLETE  */
202 /* OBSOLETE /* Called when SIGALRM signal sent due to alarm() timeout.  */ */
203 /* OBSOLETE #ifndef HAVE_TERMIO */
204 /* OBSOLETE  */
205 /* OBSOLETE volatile int n_alarms; */
206 /* OBSOLETE  */
207 /* OBSOLETE void */
208 /* OBSOLETE eb_timer (void) */
209 /* OBSOLETE { */
210 /* OBSOLETE #if 0 */
211 /* OBSOLETE   if (kiodebug) */
212 /* OBSOLETE     printf ("eb_timer called\n"); */
213 /* OBSOLETE #endif */
214 /* OBSOLETE   n_alarms++; */
215 /* OBSOLETE } */
216 /* OBSOLETE #endif */
217 /* OBSOLETE  */
218 /* OBSOLETE /* malloc'd name of the program on the remote system.  */ */
219 /* OBSOLETE static char *prog_name = NULL; */
220 /* OBSOLETE  */
221 /* OBSOLETE /* Nonzero if we have loaded the file ("yc") and not yet issued a "gi" */
222 /* OBSOLETE    command.  "gi" is supposed to happen exactly once for each "yc".  */ */
223 /* OBSOLETE static int need_gi = 0; */
224 /* OBSOLETE  */
225 /* OBSOLETE /* Number of SIGTRAPs we need to simulate.  That is, the next */
226 /* OBSOLETE    NEED_ARTIFICIAL_TRAP calls to eb_wait should just return */
227 /* OBSOLETE    SIGTRAP without actually waiting for anything.  */ */
228 /* OBSOLETE  */
229 /* OBSOLETE static int need_artificial_trap = 0; */
230 /* OBSOLETE  */
231 /* OBSOLETE /* This is called not only when we first attach, but also when the */
232 /* OBSOLETE    user types "run" after having attached.  */ */
233 /* OBSOLETE static void */
234 /* OBSOLETE eb_create_inferior (char *execfile, char *args, char **env) */
235 /* OBSOLETE { */
236 /* OBSOLETE   int entry_pt; */
237 /* OBSOLETE  */
238 /* OBSOLETE   if (args && *args) */
239 /* OBSOLETE     error ("Can't pass arguments to remote EBMON process"); */
240 /* OBSOLETE  */
241 /* OBSOLETE   if (execfile == 0 || exec_bfd == 0) */
242 /* OBSOLETE     error ("No executable file specified"); */
243 /* OBSOLETE  */
244 /* OBSOLETE   entry_pt = (int) bfd_get_start_address (exec_bfd); */
245 /* OBSOLETE  */
246 /* OBSOLETE   { */
247 /* OBSOLETE     /* OK, now read in the file.  Y=read, C=COFF, D=no symbols */
248 /* OBSOLETE        0=start address, %s=filename.  */ */
249 /* OBSOLETE  */
250 /* OBSOLETE     fprintf (eb_stream, "YC D,0:%s", prog_name); */
251 /* OBSOLETE  */
252 /* OBSOLETE     if (args != NULL) */
253 /* OBSOLETE       fprintf (eb_stream, " %s", args); */
254 /* OBSOLETE  */
255 /* OBSOLETE     fprintf (eb_stream, "\n"); */
256 /* OBSOLETE     fflush (eb_stream); */
257 /* OBSOLETE  */
258 /* OBSOLETE     expect_prompt (); */
259 /* OBSOLETE  */
260 /* OBSOLETE     need_gi = 1; */
261 /* OBSOLETE   } */
262 /* OBSOLETE  */
263 /* OBSOLETE /* The "process" (board) is already stopped awaiting our commands, and */
264 /* OBSOLETE    the program is already downloaded.  We just set its PC and go.  */ */
265 /* OBSOLETE  */
266 /* OBSOLETE   clear_proceed_status (); */
267 /* OBSOLETE  */
268 /* OBSOLETE   /* Tell wait_for_inferior that we've started a new process.  */ */
269 /* OBSOLETE   init_wait_for_inferior (); */
270 /* OBSOLETE  */
271 /* OBSOLETE   /* Set up the "saved terminal modes" of the inferior */
272 /* OBSOLETE      based on what modes we are starting it with.  */ */
273 /* OBSOLETE   target_terminal_init (); */
274 /* OBSOLETE  */
275 /* OBSOLETE   /* Install inferior's terminal modes.  */ */
276 /* OBSOLETE   target_terminal_inferior (); */
277 /* OBSOLETE  */
278 /* OBSOLETE   /* insert_step_breakpoint ();  FIXME, do we need this?  */ */
279 /* OBSOLETE   proceed ((CORE_ADDR) entry_pt, TARGET_SIGNAL_DEFAULT, 0); /* Let 'er rip... */ */
280 /* OBSOLETE } */
281 /* OBSOLETE  */
282 /* OBSOLETE /* Translate baud rates from integers to damn B_codes.  Unix should */
283 /* OBSOLETE    have outgrown this crap years ago, but even POSIX wouldn't buck it.  */ */
284 /* OBSOLETE  */
285 /* OBSOLETE #ifndef B19200 */
286 /* OBSOLETE #define B19200 EXTA */
287 /* OBSOLETE #endif */
288 /* OBSOLETE #ifndef B38400 */
289 /* OBSOLETE #define B38400 EXTB */
290 /* OBSOLETE #endif */
291 /* OBSOLETE  */
292 /* OBSOLETE struct */
293 /* OBSOLETE { */
294 /* OBSOLETE   int rate, damn_b; */
295 /* OBSOLETE } */
296 /* OBSOLETE baudtab[] = */
297 /* OBSOLETE { */
298 /* OBSOLETE   { */
299 /* OBSOLETE     0, B0 */
300 /* OBSOLETE   } */
301 /* OBSOLETE   , */
302 /* OBSOLETE   { */
303 /* OBSOLETE     50, B50 */
304 /* OBSOLETE   } */
305 /* OBSOLETE   , */
306 /* OBSOLETE   { */
307 /* OBSOLETE     75, B75 */
308 /* OBSOLETE   } */
309 /* OBSOLETE   , */
310 /* OBSOLETE   { */
311 /* OBSOLETE     110, B110 */
312 /* OBSOLETE   } */
313 /* OBSOLETE   , */
314 /* OBSOLETE   { */
315 /* OBSOLETE     134, B134 */
316 /* OBSOLETE   } */
317 /* OBSOLETE   , */
318 /* OBSOLETE   { */
319 /* OBSOLETE     150, B150 */
320 /* OBSOLETE   } */
321 /* OBSOLETE   , */
322 /* OBSOLETE   { */
323 /* OBSOLETE     200, B200 */
324 /* OBSOLETE   } */
325 /* OBSOLETE   , */
326 /* OBSOLETE   { */
327 /* OBSOLETE     300, B300 */
328 /* OBSOLETE   } */
329 /* OBSOLETE   , */
330 /* OBSOLETE   { */
331 /* OBSOLETE     600, B600 */
332 /* OBSOLETE   } */
333 /* OBSOLETE   , */
334 /* OBSOLETE   { */
335 /* OBSOLETE     1200, B1200 */
336 /* OBSOLETE   } */
337 /* OBSOLETE   , */
338 /* OBSOLETE   { */
339 /* OBSOLETE     1800, B1800 */
340 /* OBSOLETE   } */
341 /* OBSOLETE   , */
342 /* OBSOLETE   { */
343 /* OBSOLETE     2400, B2400 */
344 /* OBSOLETE   } */
345 /* OBSOLETE   , */
346 /* OBSOLETE   { */
347 /* OBSOLETE     4800, B4800 */
348 /* OBSOLETE   } */
349 /* OBSOLETE   , */
350 /* OBSOLETE   { */
351 /* OBSOLETE     9600, B9600 */
352 /* OBSOLETE   } */
353 /* OBSOLETE   , */
354 /* OBSOLETE   { */
355 /* OBSOLETE     19200, B19200 */
356 /* OBSOLETE   } */
357 /* OBSOLETE   , */
358 /* OBSOLETE   { */
359 /* OBSOLETE     38400, B38400 */
360 /* OBSOLETE   } */
361 /* OBSOLETE   , */
362 /* OBSOLETE   { */
363 /* OBSOLETE     -1, -1 */
364 /* OBSOLETE   } */
365 /* OBSOLETE   , */
366 /* OBSOLETE }; */
367 /* OBSOLETE  */
368 /* OBSOLETE int */
369 /* OBSOLETE damn_b (int rate) */
370 /* OBSOLETE { */
371 /* OBSOLETE   int i; */
372 /* OBSOLETE  */
373 /* OBSOLETE   for (i = 0; baudtab[i].rate != -1; i++) */
374 /* OBSOLETE     if (rate == baudtab[i].rate) */
375 /* OBSOLETE       return baudtab[i].damn_b; */
376 /* OBSOLETE   return B38400;            /* Random */ */
377 /* OBSOLETE } */
378 /* OBSOLETE  */
379 /* OBSOLETE  */
380 /* OBSOLETE /* Open a connection to a remote debugger. */
381 /* OBSOLETE    NAME is the filename used for communication, then a space, */
382 /* OBSOLETE    then the name of the program as we should name it to EBMON.  */ */
383 /* OBSOLETE  */
384 /* OBSOLETE static int baudrate = 9600; */
385 /* OBSOLETE static char *dev_name; */
386 /* OBSOLETE void */
387 /* OBSOLETE eb_open (char *name, int from_tty) */
388 /* OBSOLETE { */
389 /* OBSOLETE   TERMINAL sg; */
390 /* OBSOLETE  */
391 /* OBSOLETE   char *p; */
392 /* OBSOLETE  */
393 /* OBSOLETE   target_preopen (from_tty); */
394 /* OBSOLETE  */
395 /* OBSOLETE   /* Find the first whitespace character, it separates dev_name from */
396 /* OBSOLETE      prog_name.  */ */
397 /* OBSOLETE   if (name == 0) */
398 /* OBSOLETE     goto erroid; */
399 /* OBSOLETE  */
400 /* OBSOLETE   for (p = name; */
401 /* OBSOLETE        *p != '\0' && !isspace (*p); p++) */
402 /* OBSOLETE     ; */
403 /* OBSOLETE   if (*p == '\0') */
404 /* OBSOLETE   erroid: */
405 /* OBSOLETE     error ("\ */
406 /* OBSOLETE Please include the name of the device for the serial port,\n\ */
407 /* OBSOLETE the baud rate, and the name of the program to run on the remote system."); */
408 /* OBSOLETE   dev_name = alloca (p - name + 1); */
409 /* OBSOLETE   strncpy (dev_name, name, p - name); */
410 /* OBSOLETE   dev_name[p - name] = '\0'; */
411 /* OBSOLETE  */
412 /* OBSOLETE   /* Skip over the whitespace after dev_name */ */
413 /* OBSOLETE   for (; isspace (*p); p++) */
414 /* OBSOLETE     /*EMPTY */ ; */
415 /* OBSOLETE  */
416 /* OBSOLETE   if (1 != sscanf (p, "%d ", &baudrate)) */
417 /* OBSOLETE     goto erroid; */
418 /* OBSOLETE  */
419 /* OBSOLETE   /* Skip the number and then the spaces */ */
420 /* OBSOLETE   for (; isdigit (*p); p++) */
421 /* OBSOLETE     /*EMPTY */ ; */
422 /* OBSOLETE   for (; isspace (*p); p++) */
423 /* OBSOLETE     /*EMPTY */ ; */
424 /* OBSOLETE  */
425 /* OBSOLETE   if (prog_name != NULL) */
426 /* OBSOLETE     xfree (prog_name); */
427 /* OBSOLETE   prog_name = savestring (p, strlen (p)); */
428 /* OBSOLETE  */
429 /* OBSOLETE   eb_close (0); */
430 /* OBSOLETE  */
431 /* OBSOLETE   eb_desc = open (dev_name, O_RDWR); */
432 /* OBSOLETE   if (eb_desc < 0) */
433 /* OBSOLETE     perror_with_name (dev_name); */
434 /* OBSOLETE   ioctl (eb_desc, TIOCGETP, &sg); */
435 /* OBSOLETE #ifdef HAVE_TERMIO */
436 /* OBSOLETE   sg.c_cc[VMIN] = 0;                /* read with timeout.  */ */
437 /* OBSOLETE   sg.c_cc[VTIME] = timeout * 10; */
438 /* OBSOLETE   sg.c_lflag &= ~(ICANON | ECHO); */
439 /* OBSOLETE   sg.c_cflag = (sg.c_cflag & ~CBAUD) | damn_b (baudrate); */
440 /* OBSOLETE #else */
441 /* OBSOLETE   sg.sg_ispeed = damn_b (baudrate); */
442 /* OBSOLETE   sg.sg_ospeed = damn_b (baudrate); */
443 /* OBSOLETE   sg.sg_flags |= RAW | ANYP; */
444 /* OBSOLETE   sg.sg_flags &= ~ECHO; */
445 /* OBSOLETE #endif */
446 /* OBSOLETE  */
447 /* OBSOLETE   ioctl (eb_desc, TIOCSETP, &sg); */
448 /* OBSOLETE   eb_stream = fdopen (eb_desc, "r+"); */
449 /* OBSOLETE  */
450 /* OBSOLETE   push_target (&eb_ops); */
451 /* OBSOLETE   if (from_tty) */
452 /* OBSOLETE     printf ("Remote %s debugging %s using %s\n", target_shortname, */
453 /* OBSOLETE         prog_name, dev_name); */
454 /* OBSOLETE  */
455 /* OBSOLETE #ifndef HAVE_TERMIO */
456 /* OBSOLETE #ifndef NO_SIGINTERRUPT */
457 /* OBSOLETE   /* Cause SIGALRM's to make reads fail with EINTR instead of resuming */
458 /* OBSOLETE      the read.  */ */
459 /* OBSOLETE   if (siginterrupt (SIGALRM, 1) != 0) */
460 /* OBSOLETE     perror ("eb_open: error in siginterrupt"); */
461 /* OBSOLETE #endif */
462 /* OBSOLETE  */
463 /* OBSOLETE   /* Set up read timeout timer.  */ */
464 /* OBSOLETE   if ((void (*)) signal (SIGALRM, eb_timer) == (void (*)) -1) */
465 /* OBSOLETE     perror ("eb_open: error in signal"); */
466 /* OBSOLETE #endif */
467 /* OBSOLETE  */
468 /* OBSOLETE #if defined (LOG_FILE) */
469 /* OBSOLETE   log_file = fopen (LOG_FILE, "w"); */
470 /* OBSOLETE   if (log_file == NULL) */
471 /* OBSOLETE     perror_with_name (LOG_FILE); */
472 /* OBSOLETE #endif */
473 /* OBSOLETE  */
474 /* OBSOLETE   /* Hello?  Are you there?  */ */
475 /* OBSOLETE   write (eb_desc, "\n", 1); */
476 /* OBSOLETE  */
477 /* OBSOLETE   expect_prompt (); */
478 /* OBSOLETE } */
479 /* OBSOLETE  */
480 /* OBSOLETE /* Close out all files and local state before this target loses control. */ */
481 /* OBSOLETE  */
482 /* OBSOLETE static void */
483 /* OBSOLETE eb_close (int quitting) */
484 /* OBSOLETE { */
485 /* OBSOLETE  */
486 /* OBSOLETE   /* Due to a bug in Unix, fclose closes not only the stdio stream, */
487 /* OBSOLETE      but also the file descriptor.  So we don't actually close */
488 /* OBSOLETE      eb_desc.  */ */
489 /* OBSOLETE   if (eb_stream) */
490 /* OBSOLETE     fclose (eb_stream);             /* This also closes eb_desc */ */
491 /* OBSOLETE   if (eb_desc >= 0) */
492 /* OBSOLETE     /* close (eb_desc); */ */
493 /* OBSOLETE  */
494 /* OBSOLETE     /* Do not try to close eb_desc again, later in the program.  */ */
495 /* OBSOLETE     eb_stream = NULL; */
496 /* OBSOLETE   eb_desc = -1; */
497 /* OBSOLETE  */
498 /* OBSOLETE #if defined (LOG_FILE) */
499 /* OBSOLETE   if (log_file) */
500 /* OBSOLETE     { */
501 /* OBSOLETE       if (ferror (log_file)) */
502 /* OBSOLETE     printf ("Error writing log file.\n"); */
503 /* OBSOLETE       if (fclose (log_file) != 0) */
504 /* OBSOLETE     printf ("Error closing log file.\n"); */
505 /* OBSOLETE     } */
506 /* OBSOLETE #endif */
507 /* OBSOLETE } */
508 /* OBSOLETE  */
509 /* OBSOLETE /* Terminate the open connection to the remote debugger. */
510 /* OBSOLETE    Use this when you want to detach and do something else */
511 /* OBSOLETE    with your gdb.  */ */
512 /* OBSOLETE void */
513 /* OBSOLETE eb_detach (int from_tty) */
514 /* OBSOLETE { */
515 /* OBSOLETE   pop_target ();            /* calls eb_close to do the real work */ */
516 /* OBSOLETE   if (from_tty) */
517 /* OBSOLETE     printf ("Ending remote %s debugging\n", target_shortname); */
518 /* OBSOLETE } */
519 /* OBSOLETE  */
520 /* OBSOLETE /* Tell the remote machine to resume.  */ */
521 /* OBSOLETE  */
522 /* OBSOLETE void */
523 /* OBSOLETE eb_resume (ptid_t ptid, int step, enum target_signal sig) */
524 /* OBSOLETE { */
525 /* OBSOLETE   if (step) */
526 /* OBSOLETE     { */
527 /* OBSOLETE       write (eb_desc, "t 1,s\n", 6); */
528 /* OBSOLETE       /* Wait for the echo.  */ */
529 /* OBSOLETE       expect ("t 1,s\r"); */
530 /* OBSOLETE       /* Then comes a line containing the instruction we stepped to.  */ */
531 /* OBSOLETE       expect ("\n@"); */
532 /* OBSOLETE       /* Then we get the prompt.  */ */
533 /* OBSOLETE       expect_prompt (); */
534 /* OBSOLETE  */
535 /* OBSOLETE       /* Force the next eb_wait to return a trap.  Not doing anything */
536 /* OBSOLETE          about I/O from the target means that the user has to type */
537 /* OBSOLETE          "continue" to see any.  This should be fixed.  */ */
538 /* OBSOLETE       need_artificial_trap = 1; */
539 /* OBSOLETE     } */
540 /* OBSOLETE   else */
541 /* OBSOLETE     { */
542 /* OBSOLETE       if (need_gi) */
543 /* OBSOLETE     { */
544 /* OBSOLETE       need_gi = 0; */
545 /* OBSOLETE       write (eb_desc, "gi\n", 3); */
546 /* OBSOLETE  */
547 /* OBSOLETE       /* Swallow the echo of "gi".  */ */
548 /* OBSOLETE       expect ("gi\r"); */
549 /* OBSOLETE     } */
550 /* OBSOLETE       else */
551 /* OBSOLETE     { */
552 /* OBSOLETE       write (eb_desc, "GR\n", 3); */
553 /* OBSOLETE       /* Swallow the echo.  */ */
554 /* OBSOLETE       expect ("GR\r"); */
555 /* OBSOLETE     } */
556 /* OBSOLETE     } */
557 /* OBSOLETE } */
558 /* OBSOLETE  */
559 /* OBSOLETE /* Wait until the remote machine stops, then return, */
560 /* OBSOLETE    storing status in STATUS just as `wait' would.  */ */
561 /* OBSOLETE  */
562 /* OBSOLETE ptid_t */
563 /* OBSOLETE eb_wait (ptid_t ptid, struct target_waitstatus *status) */
564 /* OBSOLETE { */
565 /* OBSOLETE   /* Strings to look for.  '?' means match any single character.   */
566 /* OBSOLETE      Note that with the algorithm we use, the initial character */
567 /* OBSOLETE      of the string cannot recur in the string, or we will not */
568 /* OBSOLETE      find some cases of the string in the input.  */ */
569 /* OBSOLETE  */
570 /* OBSOLETE   static char bpt[] = "Invalid interrupt taken - #0x50 - "; */
571 /* OBSOLETE   /* It would be tempting to look for "\n[__exit + 0x8]\n" */
572 /* OBSOLETE      but that requires loading symbols with "yc i" and even if */
573 /* OBSOLETE      we did do that we don't know that the file has symbols.  */ */
574 /* OBSOLETE   static char exitmsg[] = "\n@????????I    JMPTI     GR121,LR0"; */
575 /* OBSOLETE   char *bp = bpt; */
576 /* OBSOLETE   char *ep = exitmsg; */
577 /* OBSOLETE  */
578 /* OBSOLETE   /* Large enough for either sizeof (bpt) or sizeof (exitmsg) chars.  */ */
579 /* OBSOLETE   char swallowed[50]; */
580 /* OBSOLETE   /* Current position in swallowed.  */ */
581 /* OBSOLETE   char *swallowed_p = swallowed; */
582 /* OBSOLETE  */
583 /* OBSOLETE   int ch; */
584 /* OBSOLETE   int ch_handled; */
585 /* OBSOLETE  */
586 /* OBSOLETE   int old_timeout = timeout; */
587 /* OBSOLETE  */
588 /* OBSOLETE   status->kind = TARGET_WAITKIND_EXITED; */
589 /* OBSOLETE   status->value.integer = 0; */
590 /* OBSOLETE  */
591 /* OBSOLETE   if (need_artificial_trap != 0) */
592 /* OBSOLETE     { */
593 /* OBSOLETE       status->kind = TARGET_WAITKIND_STOPPED; */
594 /* OBSOLETE       status->value.sig = TARGET_SIGNAL_TRAP; */
595 /* OBSOLETE       need_artificial_trap--; */
596 /* OBSOLETE       return 0; */
597 /* OBSOLETE     } */
598 /* OBSOLETE  */
599 /* OBSOLETE   timeout = 0;                      /* Don't time out -- user program is running. */ */
600 /* OBSOLETE   while (1) */
601 /* OBSOLETE     { */
602 /* OBSOLETE       ch_handled = 0; */
603 /* OBSOLETE       ch = readchar (); */
604 /* OBSOLETE       if (ch == *bp) */
605 /* OBSOLETE     { */
606 /* OBSOLETE       bp++; */
607 /* OBSOLETE       if (*bp == '\0') */
608 /* OBSOLETE         break; */
609 /* OBSOLETE       ch_handled = 1; */
610 /* OBSOLETE  */
611 /* OBSOLETE       *swallowed_p++ = ch; */
612 /* OBSOLETE     } */
613 /* OBSOLETE       else */
614 /* OBSOLETE     bp = bpt; */
615 /* OBSOLETE  */
616 /* OBSOLETE       if (ch == *ep || *ep == '?') */
617 /* OBSOLETE     { */
618 /* OBSOLETE       ep++; */
619 /* OBSOLETE       if (*ep == '\0') */
620 /* OBSOLETE         break; */
621 /* OBSOLETE  */
622 /* OBSOLETE       if (!ch_handled) */
623 /* OBSOLETE         *swallowed_p++ = ch; */
624 /* OBSOLETE       ch_handled = 1; */
625 /* OBSOLETE     } */
626 /* OBSOLETE       else */
627 /* OBSOLETE     ep = exitmsg; */
628 /* OBSOLETE  */
629 /* OBSOLETE       if (!ch_handled) */
630 /* OBSOLETE     { */
631 /* OBSOLETE       char *p; */
632 /* OBSOLETE  */
633 /* OBSOLETE       /* Print out any characters which have been swallowed.  */ */
634 /* OBSOLETE       for (p = swallowed; p < swallowed_p; ++p) */
635 /* OBSOLETE         putc (*p, stdout); */
636 /* OBSOLETE       swallowed_p = swallowed; */
637 /* OBSOLETE  */
638 /* OBSOLETE       putc (ch, stdout); */
639 /* OBSOLETE     } */
640 /* OBSOLETE     } */
641 /* OBSOLETE   expect_prompt (); */
642 /* OBSOLETE   if (*bp == '\0') */
643 /* OBSOLETE     { */
644 /* OBSOLETE       status->kind = TARGET_WAITKIND_STOPPED; */
645 /* OBSOLETE       status->value.sig = TARGET_SIGNAL_TRAP; */
646 /* OBSOLETE     } */
647 /* OBSOLETE   else */
648 /* OBSOLETE     { */
649 /* OBSOLETE       status->kind = TARGET_WAITKIND_EXITED; */
650 /* OBSOLETE       status->value.integer = 0; */
651 /* OBSOLETE     } */
652 /* OBSOLETE   timeout = old_timeout; */
653 /* OBSOLETE  */
654 /* OBSOLETE   return 0; */
655 /* OBSOLETE } */
656 /* OBSOLETE  */
657 /* OBSOLETE /* Return the name of register number REGNO */
658 /* OBSOLETE    in the form input and output by EBMON. */
659 /* OBSOLETE  */
660 /* OBSOLETE    Returns a pointer to a static buffer containing the answer.  */ */
661 /* OBSOLETE static char * */
662 /* OBSOLETE get_reg_name (int regno) */
663 /* OBSOLETE { */
664 /* OBSOLETE   static char buf[80]; */
665 /* OBSOLETE   if (regno >= GR96_REGNUM && regno < GR96_REGNUM + 32) */
666 /* OBSOLETE     sprintf (buf, "GR%03d", regno - GR96_REGNUM + 96); */
667 /* OBSOLETE   else if (regno >= LR0_REGNUM && regno < LR0_REGNUM + 128) */
668 /* OBSOLETE     sprintf (buf, "LR%03d", regno - LR0_REGNUM); */
669 /* OBSOLETE   else if (regno == Q_REGNUM) */
670 /* OBSOLETE     strcpy (buf, "SR131"); */
671 /* OBSOLETE   else if (regno >= BP_REGNUM && regno <= CR_REGNUM) */
672 /* OBSOLETE     sprintf (buf, "SR%03d", regno - BP_REGNUM + 133); */
673 /* OBSOLETE   else if (regno == ALU_REGNUM) */
674 /* OBSOLETE     strcpy (buf, "SR132"); */
675 /* OBSOLETE   else if (regno >= IPC_REGNUM && regno <= IPB_REGNUM) */
676 /* OBSOLETE     sprintf (buf, "SR%03d", regno - IPC_REGNUM + 128); */
677 /* OBSOLETE   else if (regno >= VAB_REGNUM && regno <= LRU_REGNUM) */
678 /* OBSOLETE     sprintf (buf, "SR%03d", regno - VAB_REGNUM); */
679 /* OBSOLETE   else if (regno == GR1_REGNUM) */
680 /* OBSOLETE     strcpy (buf, "GR001"); */
681 /* OBSOLETE   return buf; */
682 /* OBSOLETE } */
683 /* OBSOLETE  */
684 /* OBSOLETE /* Read the remote registers into the block REGS.  */ */
685 /* OBSOLETE  */
686 /* OBSOLETE static void */
687 /* OBSOLETE eb_fetch_registers (void) */
688 /* OBSOLETE { */
689 /* OBSOLETE   int reg_index; */
690 /* OBSOLETE   int regnum_index; */
691 /* OBSOLETE   char tempbuf[10]; */
692 /* OBSOLETE   int i; */
693 /* OBSOLETE  */
694 /* OBSOLETE #if 0 */
695 /* OBSOLETE   /* This should not be necessary, because one is supposed to read the */
696 /* OBSOLETE      registers only when the inferior is stopped (at least with */
697 /* OBSOLETE      ptrace() and why not make it the same for remote?).  */ */
698 /* OBSOLETE   /* ^A is the "normal character" used to make sure we are talking to EBMON */
699 /* OBSOLETE      and not to the program being debugged.  */ */
700 /* OBSOLETE   write (eb_desc, "\001\n"); */
701 /* OBSOLETE   expect_prompt (); */
702 /* OBSOLETE #endif */
703 /* OBSOLETE  */
704 /* OBSOLETE   write (eb_desc, "dw gr96,gr127\n", 14); */
705 /* OBSOLETE   for (reg_index = 96, regnum_index = GR96_REGNUM; */
706 /* OBSOLETE        reg_index < 128; */
707 /* OBSOLETE        reg_index += 4, regnum_index += 4) */
708 /* OBSOLETE     { */
709 /* OBSOLETE       sprintf (tempbuf, "GR%03d ", reg_index); */
710 /* OBSOLETE       expect (tempbuf); */
711 /* OBSOLETE       get_hex_regs (4, regnum_index); */
712 /* OBSOLETE       expect ("\n"); */
713 /* OBSOLETE     } */
714 /* OBSOLETE  */
715 /* OBSOLETE   for (i = 0; i < 128; i += 32) */
716 /* OBSOLETE     { */
717 /* OBSOLETE       /* The PC has a tendency to hang if we get these */
718 /* OBSOLETE          all in one fell swoop ("dw lr0,lr127").  */ */
719 /* OBSOLETE       sprintf (tempbuf, "dw lr%d\n", i); */
720 /* OBSOLETE       write (eb_desc, tempbuf, strlen (tempbuf)); */
721 /* OBSOLETE       for (reg_index = i, regnum_index = LR0_REGNUM + i; */
722 /* OBSOLETE        reg_index < i + 32; */
723 /* OBSOLETE        reg_index += 4, regnum_index += 4) */
724 /* OBSOLETE     { */
725 /* OBSOLETE       sprintf (tempbuf, "LR%03d ", reg_index); */
726 /* OBSOLETE       expect (tempbuf); */
727 /* OBSOLETE       get_hex_regs (4, regnum_index); */
728 /* OBSOLETE       expect ("\n"); */
729 /* OBSOLETE     } */
730 /* OBSOLETE     } */
731 /* OBSOLETE  */
732 /* OBSOLETE   write (eb_desc, "dw sr133,sr133\n", 15); */
733 /* OBSOLETE   expect ("SR133          "); */
734 /* OBSOLETE   get_hex_regs (1, BP_REGNUM); */
735 /* OBSOLETE   expect ("\n"); */
736 /* OBSOLETE  */
737 /* OBSOLETE   write (eb_desc, "dw sr134,sr134\n", 15); */
738 /* OBSOLETE   expect ("SR134                   "); */
739 /* OBSOLETE   get_hex_regs (1, FC_REGNUM); */
740 /* OBSOLETE   expect ("\n"); */
741 /* OBSOLETE  */
742 /* OBSOLETE   write (eb_desc, "dw sr135,sr135\n", 15); */
743 /* OBSOLETE   expect ("SR135                            "); */
744 /* OBSOLETE   get_hex_regs (1, CR_REGNUM); */
745 /* OBSOLETE   expect ("\n"); */
746 /* OBSOLETE  */
747 /* OBSOLETE   write (eb_desc, "dw sr131,sr131\n", 15); */
748 /* OBSOLETE   expect ("SR131                            "); */
749 /* OBSOLETE   get_hex_regs (1, Q_REGNUM); */
750 /* OBSOLETE   expect ("\n"); */
751 /* OBSOLETE  */
752 /* OBSOLETE   write (eb_desc, "dw sr0,sr14\n", 12); */
753 /* OBSOLETE   for (reg_index = 0, regnum_index = VAB_REGNUM; */
754 /* OBSOLETE        regnum_index <= LRU_REGNUM; */
755 /* OBSOLETE        regnum_index += 4, reg_index += 4) */
756 /* OBSOLETE     { */
757 /* OBSOLETE       sprintf (tempbuf, "SR%03d ", reg_index); */
758 /* OBSOLETE       expect (tempbuf); */
759 /* OBSOLETE       get_hex_regs (reg_index == 12 ? 3 : 4, regnum_index); */
760 /* OBSOLETE       expect ("\n"); */
761 /* OBSOLETE     } */
762 /* OBSOLETE  */
763 /* OBSOLETE   /* There doesn't seem to be any way to get these.  */ */
764 /* OBSOLETE   { */
765 /* OBSOLETE     int val = -1; */
766 /* OBSOLETE     supply_register (FPE_REGNUM, (char *) &val); */
767 /* OBSOLETE     supply_register (INTE_REGNUM, (char *) &val); */
768 /* OBSOLETE     supply_register (FPS_REGNUM, (char *) &val); */
769 /* OBSOLETE     supply_register (EXO_REGNUM, (char *) &val); */
770 /* OBSOLETE   } */
771 /* OBSOLETE  */
772 /* OBSOLETE   write (eb_desc, "dw gr1,gr1\n", 11); */
773 /* OBSOLETE   expect ("GR001 "); */
774 /* OBSOLETE   get_hex_regs (1, GR1_REGNUM); */
775 /* OBSOLETE   expect_prompt (); */
776 /* OBSOLETE } */
777 /* OBSOLETE  */
778 /* OBSOLETE /* Fetch register REGNO, or all registers if REGNO is -1. */
779 /* OBSOLETE    Returns errno value.  */ */
780 /* OBSOLETE void */
781 /* OBSOLETE eb_fetch_register (int regno) */
782 /* OBSOLETE { */
783 /* OBSOLETE   if (regno == -1) */
784 /* OBSOLETE     eb_fetch_registers (); */
785 /* OBSOLETE   else */
786 /* OBSOLETE     { */
787 /* OBSOLETE       char *name = get_reg_name (regno); */
788 /* OBSOLETE       fprintf (eb_stream, "dw %s,%s\n", name, name); */
789 /* OBSOLETE       expect (name); */
790 /* OBSOLETE       expect (" "); */
791 /* OBSOLETE       get_hex_regs (1, regno); */
792 /* OBSOLETE       expect_prompt (); */
793 /* OBSOLETE     } */
794 /* OBSOLETE   return; */
795 /* OBSOLETE } */
796 /* OBSOLETE  */
797 /* OBSOLETE /* Store the remote registers from the contents of the block REGS.  */ */
798 /* OBSOLETE  */
799 /* OBSOLETE static void */
800 /* OBSOLETE eb_store_registers (void) */
801 /* OBSOLETE { */
802 /* OBSOLETE   int i, j; */
803 /* OBSOLETE   fprintf (eb_stream, "s gr1,%x\n", read_register (GR1_REGNUM)); */
804 /* OBSOLETE   expect_prompt (); */
805 /* OBSOLETE  */
806 /* OBSOLETE   for (j = 0; j < 32; j += 16) */
807 /* OBSOLETE     { */
808 /* OBSOLETE       fprintf (eb_stream, "s gr%d,", j + 96); */
809 /* OBSOLETE       for (i = 0; i < 15; ++i) */
810 /* OBSOLETE     fprintf (eb_stream, "%x,", read_register (GR96_REGNUM + j + i)); */
811 /* OBSOLETE       fprintf (eb_stream, "%x\n", read_register (GR96_REGNUM + j + 15)); */
812 /* OBSOLETE       expect_prompt (); */
813 /* OBSOLETE     } */
814 /* OBSOLETE  */
815 /* OBSOLETE   for (j = 0; j < 128; j += 16) */
816 /* OBSOLETE     { */
817 /* OBSOLETE       fprintf (eb_stream, "s lr%d,", j); */
818 /* OBSOLETE       for (i = 0; i < 15; ++i) */
819 /* OBSOLETE     fprintf (eb_stream, "%x,", read_register (LR0_REGNUM + j + i)); */
820 /* OBSOLETE       fprintf (eb_stream, "%x\n", read_register (LR0_REGNUM + j + 15)); */
821 /* OBSOLETE       expect_prompt (); */
822 /* OBSOLETE     } */
823 /* OBSOLETE  */
824 /* OBSOLETE   fprintf (eb_stream, "s sr133,%x,%x,%x\n", read_register (BP_REGNUM), */
825 /* OBSOLETE        read_register (FC_REGNUM), read_register (CR_REGNUM)); */
826 /* OBSOLETE   expect_prompt (); */
827 /* OBSOLETE   fprintf (eb_stream, "s sr131,%x\n", read_register (Q_REGNUM)); */
828 /* OBSOLETE   expect_prompt (); */
829 /* OBSOLETE   fprintf (eb_stream, "s sr0,"); */
830 /* OBSOLETE   for (i = 0; i < 11; ++i) */
831 /* OBSOLETE     fprintf (eb_stream, "%x,", read_register (VAB_REGNUM + i)); */
832 /* OBSOLETE   fprintf (eb_stream, "%x\n", read_register (VAB_REGNUM + 11)); */
833 /* OBSOLETE   expect_prompt (); */
834 /* OBSOLETE } */
835 /* OBSOLETE  */
836 /* OBSOLETE /* Store register REGNO, or all if REGNO == 0. */
837 /* OBSOLETE    Return errno value.  */ */
838 /* OBSOLETE void */
839 /* OBSOLETE eb_store_register (int regno) */
840 /* OBSOLETE { */
841 /* OBSOLETE   if (regno == -1) */
842 /* OBSOLETE     eb_store_registers (); */
843 /* OBSOLETE   else */
844 /* OBSOLETE     { */
845 /* OBSOLETE       char *name = get_reg_name (regno); */
846 /* OBSOLETE       fprintf (eb_stream, "s %s,%x\n", name, read_register (regno)); */
847 /* OBSOLETE       /* Setting GR1 changes the numbers of all the locals, so */
848 /* OBSOLETE          invalidate the register cache.  Do this *after* calling */
849 /* OBSOLETE          read_register, because we want read_register to return the */
850 /* OBSOLETE          value that write_register has just stuffed into the registers */
851 /* OBSOLETE          array, not the value of the register fetched from the */
852 /* OBSOLETE          inferior.  */ */
853 /* OBSOLETE       if (regno == GR1_REGNUM) */
854 /* OBSOLETE     registers_changed (); */
855 /* OBSOLETE       expect_prompt (); */
856 /* OBSOLETE     } */
857 /* OBSOLETE } */
858 /* OBSOLETE  */
859 /* OBSOLETE /* Get ready to modify the registers array.  On machines which store */
860 /* OBSOLETE    individual registers, this doesn't need to do anything.  On machines */
861 /* OBSOLETE    which store all the registers in one fell swoop, this makes sure */
862 /* OBSOLETE    that registers contains all the registers from the program being */
863 /* OBSOLETE    debugged.  */ */
864 /* OBSOLETE  */
865 /* OBSOLETE void */
866 /* OBSOLETE eb_prepare_to_store (void) */
867 /* OBSOLETE { */
868 /* OBSOLETE   /* Do nothing, since we can store individual regs */ */
869 /* OBSOLETE } */
870 /* OBSOLETE  */
871 /* OBSOLETE /* Transfer LEN bytes between GDB address MYADDR and target address */
872 /* OBSOLETE    MEMADDR.  If WRITE is non-zero, transfer them to the target, */
873 /* OBSOLETE    otherwise transfer them from the target.  TARGET is unused. */
874 /* OBSOLETE  */
875 /* OBSOLETE    Returns the number of bytes transferred. */ */
876 /* OBSOLETE  */
877 /* OBSOLETE int */
878 /* OBSOLETE eb_xfer_inferior_memory (CORE_ADDR memaddr, char *myaddr, int len, int write, */
879 /* OBSOLETE                      struct mem_attrib *attrib ATTRIBUTE_UNUSED, */
880 /* OBSOLETE                      struct target_ops *target ATTRIBUTE_UNUSED) */
881 /* OBSOLETE { */
882 /* OBSOLETE   if (write) */
883 /* OBSOLETE     return eb_write_inferior_memory (memaddr, myaddr, len); */
884 /* OBSOLETE   else */
885 /* OBSOLETE     return eb_read_inferior_memory (memaddr, myaddr, len); */
886 /* OBSOLETE } */
887 /* OBSOLETE  */
888 /* OBSOLETE void */
889 /* OBSOLETE eb_files_info (void) */
890 /* OBSOLETE { */
891 /* OBSOLETE   printf ("\tAttached to %s at %d baud and running program %s.\n", */
892 /* OBSOLETE       dev_name, baudrate, prog_name); */
893 /* OBSOLETE } */
894 /* OBSOLETE  */
895 /* OBSOLETE /* Copy LEN bytes of data from debugger memory at MYADDR */
896 /* OBSOLETE    to inferior's memory at MEMADDR.  Returns length moved.  */ */
897 /* OBSOLETE int */
898 /* OBSOLETE eb_write_inferior_memory (CORE_ADDR memaddr, char *myaddr, int len) */
899 /* OBSOLETE { */
900 /* OBSOLETE   int i; */
901 /* OBSOLETE  */
902 /* OBSOLETE   for (i = 0; i < len; i++) */
903 /* OBSOLETE     { */
904 /* OBSOLETE       if ((i % 16) == 0) */
905 /* OBSOLETE     fprintf (eb_stream, "sb %x,", memaddr + i); */
906 /* OBSOLETE       if ((i % 16) == 15 || i == len - 1) */
907 /* OBSOLETE     { */
908 /* OBSOLETE       fprintf (eb_stream, "%x\n", ((unsigned char *) myaddr)[i]); */
909 /* OBSOLETE       expect_prompt (); */
910 /* OBSOLETE     } */
911 /* OBSOLETE       else */
912 /* OBSOLETE     fprintf (eb_stream, "%x,", ((unsigned char *) myaddr)[i]); */
913 /* OBSOLETE     } */
914 /* OBSOLETE   return len; */
915 /* OBSOLETE } */
916 /* OBSOLETE  */
917 /* OBSOLETE /* Read LEN bytes from inferior memory at MEMADDR.  Put the result */
918 /* OBSOLETE    at debugger address MYADDR.  Returns length moved.  */ */
919 /* OBSOLETE int */
920 /* OBSOLETE eb_read_inferior_memory (CORE_ADDR memaddr, char *myaddr, int len) */
921 /* OBSOLETE { */
922 /* OBSOLETE   int i; */
923 /* OBSOLETE  */
924 /* OBSOLETE   /* Number of bytes read so far.  */ */
925 /* OBSOLETE   int count; */
926 /* OBSOLETE  */
927 /* OBSOLETE   /* Starting address of this pass.  */ */
928 /* OBSOLETE   unsigned long startaddr; */
929 /* OBSOLETE  */
930 /* OBSOLETE   /* Number of bytes to read in this pass.  */ */
931 /* OBSOLETE   int len_this_pass; */
932 /* OBSOLETE  */
933 /* OBSOLETE   /* Note that this code works correctly if startaddr is just less */
934 /* OBSOLETE      than UINT_MAX (well, really CORE_ADDR_MAX if there was such a */
935 /* OBSOLETE      thing).  That is, something like */
936 /* OBSOLETE      eb_read_bytes (CORE_ADDR_MAX - 4, foo, 4) */
937 /* OBSOLETE      works--it never adds len to memaddr and gets 0.  */ */
938 /* OBSOLETE   /* However, something like */
939 /* OBSOLETE      eb_read_bytes (CORE_ADDR_MAX - 3, foo, 4) */
940 /* OBSOLETE      doesn't need to work.  Detect it and give up if there's an attempt */
941 /* OBSOLETE      to do that.  */ */
942 /* OBSOLETE   if (((memaddr - 1) + len) < memaddr) */
943 /* OBSOLETE     { */
944 /* OBSOLETE       errno = EIO; */
945 /* OBSOLETE       return 0; */
946 /* OBSOLETE     } */
947 /* OBSOLETE  */
948 /* OBSOLETE   startaddr = memaddr; */
949 /* OBSOLETE   count = 0; */
950 /* OBSOLETE   while (count < len) */
951 /* OBSOLETE     { */
952 /* OBSOLETE       len_this_pass = 16; */
953 /* OBSOLETE       if ((startaddr % 16) != 0) */
954 /* OBSOLETE     len_this_pass -= startaddr % 16; */
955 /* OBSOLETE       if (len_this_pass > (len - count)) */
956 /* OBSOLETE     len_this_pass = (len - count); */
957 /* OBSOLETE  */
958 /* OBSOLETE       fprintf (eb_stream, "db %x,%x\n", startaddr, */
959 /* OBSOLETE            (startaddr - 1) + len_this_pass); */
960 /* OBSOLETE       expect ("\n"); */
961 /* OBSOLETE  */
962 /* OBSOLETE       /* Look for 8 hex digits.  */ */
963 /* OBSOLETE       i = 0; */
964 /* OBSOLETE       while (1) */
965 /* OBSOLETE     { */
966 /* OBSOLETE       if (isxdigit (readchar ())) */
967 /* OBSOLETE         ++i; */
968 /* OBSOLETE       else */
969 /* OBSOLETE         { */
970 /* OBSOLETE           expect_prompt (); */
971 /* OBSOLETE           error ("Hex digit expected from remote system."); */
972 /* OBSOLETE         } */
973 /* OBSOLETE       if (i >= 8) */
974 /* OBSOLETE         break; */
975 /* OBSOLETE     } */
976 /* OBSOLETE  */
977 /* OBSOLETE       expect ("  "); */
978 /* OBSOLETE  */
979 /* OBSOLETE       for (i = 0; i < len_this_pass; i++) */
980 /* OBSOLETE     get_hex_byte (&myaddr[count++]); */
981 /* OBSOLETE  */
982 /* OBSOLETE       expect_prompt (); */
983 /* OBSOLETE  */
984 /* OBSOLETE       startaddr += len_this_pass; */
985 /* OBSOLETE     } */
986 /* OBSOLETE   return len; */
987 /* OBSOLETE } */
988 /* OBSOLETE  */
989 /* OBSOLETE static void */
990 /* OBSOLETE eb_kill (char *args, int from_tty) */
991 /* OBSOLETE { */
992 /* OBSOLETE   return;                   /* Ignore attempts to kill target system */ */
993 /* OBSOLETE } */
994 /* OBSOLETE  */
995 /* OBSOLETE /* Clean up when a program exits. */
996 /* OBSOLETE  */
997 /* OBSOLETE    The program actually lives on in the remote processor's RAM, and may be */
998 /* OBSOLETE    run again without a download.  Don't leave it full of breakpoint */
999 /* OBSOLETE    instructions.  */ */
1000 /* OBSOLETE  */
1001 /* OBSOLETE void */
1002 /* OBSOLETE eb_mourn_inferior (void) */
1003 /* OBSOLETE { */
1004 /* OBSOLETE   remove_breakpoints (); */
1005 /* OBSOLETE   unpush_target (&eb_ops); */
1006 /* OBSOLETE   generic_mourn_inferior ();        /* Do all the proper things now */ */
1007 /* OBSOLETE } */
1008 /* OBSOLETE /* Define the target subroutine names */ */
1009 /* OBSOLETE  */
1010 /* OBSOLETE struct target_ops eb_ops; */
1011 /* OBSOLETE  */
1012 /* OBSOLETE static void */
1013 /* OBSOLETE init_eb_ops (void) */
1014 /* OBSOLETE { */
1015 /* OBSOLETE   eb_ops.to_shortname = "amd-eb"; */
1016 /* OBSOLETE   eb_ops.to_longname = "Remote serial AMD EBMON target"; */
1017 /* OBSOLETE   eb_ops.to_doc = "Use a remote computer running EBMON connected by a serial line.\n\ */
1018 /* OBSOLETE Arguments are the name of the device for the serial line,\n\ */
1019 /* OBSOLETE the speed to connect at in bits per second, and the filename of the\n\ */
1020 /* OBSOLETE executable as it exists on the remote computer.  For example,\n\ */
1021 /* OBSOLETE target amd-eb /dev/ttya 9600 demo", */
1022 /* OBSOLETE     eb_ops.to_open = eb_open; */
1023 /* OBSOLETE   eb_ops.to_close = eb_close; */
1024 /* OBSOLETE   eb_ops.to_attach = 0; */
1025 /* OBSOLETE   eb_ops.to_post_attach = NULL; */
1026 /* OBSOLETE   eb_ops.to_require_attach = NULL; */
1027 /* OBSOLETE   eb_ops.to_detach = eb_detach; */
1028 /* OBSOLETE   eb_ops.to_require_detach = NULL; */
1029 /* OBSOLETE   eb_ops.to_resume = eb_resume; */
1030 /* OBSOLETE   eb_ops.to_wait = eb_wait; */
1031 /* OBSOLETE   eb_ops.to_post_wait = NULL; */
1032 /* OBSOLETE   eb_ops.to_fetch_registers = eb_fetch_register; */
1033 /* OBSOLETE   eb_ops.to_store_registers = eb_store_register; */
1034 /* OBSOLETE   eb_ops.to_prepare_to_store = eb_prepare_to_store; */
1035 /* OBSOLETE   eb_ops.to_xfer_memory = eb_xfer_inferior_memory; */
1036 /* OBSOLETE   eb_ops.to_files_info = eb_files_info; */
1037 /* OBSOLETE   eb_ops.to_insert_breakpoint = 0; */
1038 /* OBSOLETE   eb_ops.to_remove_breakpoint = 0;  /* Breakpoints */ */
1039 /* OBSOLETE   eb_ops.to_terminal_init = 0; */
1040 /* OBSOLETE   eb_ops.to_terminal_inferior = 0; */
1041 /* OBSOLETE   eb_ops.to_terminal_ours_for_output = 0; */
1042 /* OBSOLETE   eb_ops.to_terminal_ours = 0; */
1043 /* OBSOLETE   eb_ops.to_terminal_info = 0;      /* Terminal handling */ */
1044 /* OBSOLETE   eb_ops.to_kill = eb_kill; */
1045 /* OBSOLETE   eb_ops.to_load = generic_load;    /* load */ */
1046 /* OBSOLETE   eb_ops.to_lookup_symbol = 0;      /* lookup_symbol */ */
1047 /* OBSOLETE   eb_ops.to_create_inferior = eb_create_inferior; */
1048 /* OBSOLETE   eb_ops.to_post_startup_inferior = NULL; */
1049 /* OBSOLETE   eb_ops.to_acknowledge_created_inferior = NULL; */
1050 /* OBSOLETE   eb_ops.to_clone_and_follow_inferior = NULL; */
1051 /* OBSOLETE   eb_ops.to_post_follow_inferior_by_clone = NULL; */
1052 /* OBSOLETE   eb_ops.to_insert_fork_catchpoint = NULL; */
1053 /* OBSOLETE   eb_ops.to_remove_fork_catchpoint = NULL; */
1054 /* OBSOLETE   eb_ops.to_insert_vfork_catchpoint = NULL; */
1055 /* OBSOLETE   eb_ops.to_remove_vfork_catchpoint = NULL; */
1056 /* OBSOLETE   eb_ops.to_has_forked = NULL; */
1057 /* OBSOLETE   eb_ops.to_has_vforked = NULL; */
1058 /* OBSOLETE   eb_ops.to_can_follow_vfork_prior_to_exec = NULL; */
1059 /* OBSOLETE   eb_ops.to_post_follow_vfork = NULL; */
1060 /* OBSOLETE   eb_ops.to_insert_exec_catchpoint = NULL; */
1061 /* OBSOLETE   eb_ops.to_remove_exec_catchpoint = NULL; */
1062 /* OBSOLETE   eb_ops.to_has_execd = NULL; */
1063 /* OBSOLETE   eb_ops.to_reported_exec_events_per_exec_call = NULL; */
1064 /* OBSOLETE   eb_ops.to_has_exited = NULL; */
1065 /* OBSOLETE   eb_ops.to_mourn_inferior = eb_mourn_inferior; */
1066 /* OBSOLETE   eb_ops.to_can_run = 0;    /* can_run */ */
1067 /* OBSOLETE   eb_ops.to_notice_signals = 0;     /* notice_signals */ */
1068 /* OBSOLETE   eb_ops.to_thread_alive = 0;       /* thread-alive */ */
1069 /* OBSOLETE   eb_ops.to_stop = 0;               /* to_stop */ */
1070 /* OBSOLETE   eb_ops.to_pid_to_exec_file = NULL; */
1071 /* OBSOLETE   eb_ops.to_stratum = process_stratum; */
1072 /* OBSOLETE   eb_ops.DONT_USE = 0;              /* next */ */
1073 /* OBSOLETE   eb_ops.to_has_all_memory = 1; */
1074 /* OBSOLETE   eb_ops.to_has_memory = 1; */
1075 /* OBSOLETE   eb_ops.to_has_stack = 1; */
1076 /* OBSOLETE   eb_ops.to_has_registers = 1; */
1077 /* OBSOLETE   eb_ops.to_has_execution = 1;      /* all mem, mem, stack, regs, exec */ */
1078 /* OBSOLETE   eb_ops.to_sections = 0;   /* sections */ */
1079 /* OBSOLETE   eb_ops.to_sections_end = 0;       /* sections end */ */
1080 /* OBSOLETE   eb_ops.to_magic = OPS_MAGIC;      /* Always the last thing */ */
1081 /* OBSOLETE }; */
1082 /* OBSOLETE  */
1083 /* OBSOLETE void */
1084 /* OBSOLETE _initialize_remote_eb (void) */
1085 /* OBSOLETE { */
1086 /* OBSOLETE   init_eb_ops (); */
1087 /* OBSOLETE   add_target (&eb_ops); */
1088 /* OBSOLETE } */
This page took 0.092097 seconds and 4 git commands to generate.