1 /* Generic support for remote debugging interfaces.
3 Copyright 1993, 1994, 1998 Free Software Foundation, Inc.
5 This file is part of GDB.
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
9 the Free Software Foundation; either version 2 of the License, or
10 (at your option) any later version.
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.
17 You should have received a copy of the GNU General Public License
18 along with this program; if not, write to the Free Software
19 Foundation, Inc., 59 Temple Place - Suite 330,
20 Boston, MA 02111-1307, USA. */
22 /* This file actually contains two distinct logical "packages". They
23 are packaged together in this one file because they are typically
26 The first package is an addition to the serial package. The
27 addition provides reading and writing with debugging output and
28 timeouts based on user settable variables. These routines are
29 intended to support serial port based remote backends. These
30 functions are prefixed with sr_.
32 The second package is a collection of more or less generic
33 functions for use by remote backends. They support user settable
34 variables for debugging, retries, and the like.
38 * a pass through mode a la kermit or telnet.
40 * ask remote to change his baud rate.
46 #include "gdb_string.h"
50 #include "gdbcore.h" /* for exec_bfd */
51 #include "inferior.h" /* for generic_mourn_inferior */
52 #include "remote-utils.h"
55 void _initialize_sr_support (void);
57 struct _sr_settings sr_settings
=
61 remote-bug.c had "with a timeout of 2, we time out waiting for
62 the prompt after an s-record dump."
64 remote.c had (2): This was 5 seconds, which is a long time to
65 sit and wait. Unless this is going though some terminal server
66 or multiplexer or other form of hairy serial connection, I
67 would think 2 seconds would be plenty.
72 NULL
, /* descriptor */
75 struct gr_settings
*gr_settings
= NULL
;
77 static void usage (char *, char *);
78 static void sr_com (char *, int);
86 fprintf_unfiltered (gdb_stderr
, "Unrecognized arguments: `%s'.\n", junk
);
88 error ("Usage: target %s [DEVICE [SPEED [DEBUG]]]\n\
89 where DEVICE is the name of a device or HOST:PORT", proto
, proto
);
94 #define CHECKDONE(p, q) \
106 sr_scan_args (proto
, args
)
113 /* if no args, then nothing to do. */
114 if (args
== NULL
|| *args
== '\0')
117 /* scan off white space. */
118 for (p
= args
; isspace (*p
); ++p
);;
120 /* find end of device name. */
121 for (q
= p
; *q
!= '\0' && !isspace (*q
); ++q
);;
123 /* check for missing or empty device name. */
125 sr_set_device (savestring (p
, q
- p
));
127 /* look for baud rate. */
128 n
= strtol (q
, &p
, 10);
130 /* check for missing or empty baud rate. */
134 /* look for debug value. */
135 n
= strtol (p
, &q
, 10);
137 /* check for missing or empty debug value. */
141 /* scan off remaining white space. */
142 for (p
= q
; isspace (*p
); ++p
);;
144 /* if not end of string, then there's unrecognized junk. */
152 gr_generic_checkin ()
159 gr_open (args
, from_tty
, gr
)
162 struct gr_settings
*gr
;
164 target_preopen (from_tty
);
165 sr_scan_args (gr
->ops
->to_shortname
, args
);
166 unpush_target (gr
->ops
);
170 gr_set_dcache (dcache_init (gr
->readfunc
, gr
->writefunc
));
172 if (sr_get_desc () != NULL
)
175 /* If no args are specified, then we use the device specified by a
176 previous command or "set remotedevice". But if there is no
177 device, better stop now, not dump core. */
179 if (sr_get_device () == NULL
)
180 usage (gr
->ops
->to_shortname
, NULL
);
182 sr_set_desc (SERIAL_OPEN (sr_get_device ()));
184 perror_with_name ((char *) sr_get_device ());
188 if (SERIAL_SETBAUDRATE (sr_get_desc (), baud_rate
) != 0)
190 SERIAL_CLOSE (sr_get_desc ());
191 perror_with_name (sr_get_device ());
195 SERIAL_RAW (sr_get_desc ());
197 /* If there is something sitting in the buffer we might take it as a
198 response to a command, which would be bad. */
199 SERIAL_FLUSH_INPUT (sr_get_desc ());
201 /* default retries */
202 if (sr_get_retries () == 0)
205 /* default clear breakpoint function */
206 if (gr_settings
->clear_all_breakpoints
== NULL
)
207 gr_settings
->clear_all_breakpoints
= remove_breakpoints
;
211 printf_filtered ("Remote debugging using `%s'", sr_get_device ());
213 printf_filtered (" at baud rate of %d",
215 printf_filtered ("\n");
218 push_target (gr
->ops
);
220 gr_clear_all_breakpoints ();
224 /* Read a character from the remote system masking it down to 7 bits
225 and doing all the fancy timeout stuff. */
232 buf
= SERIAL_READCHAR (sr_get_desc (), sr_get_timeout ());
234 if (buf
== SERIAL_TIMEOUT
)
235 error ("Timeout reading from remote system.");
237 if (sr_get_debug () > 0)
238 printf_unfiltered ("%c", buf
);
248 buf
= SERIAL_READCHAR (sr_get_desc (), 0);
249 if (buf
== SERIAL_TIMEOUT
)
251 if (sr_get_debug () > 0)
254 printf_unfiltered ("%c", buf
);
256 printf_unfiltered ("<empty character poll>");
262 /* Keep discarding input from the remote system, until STRING is found.
263 Let the user break out immediately. */
273 if (sr_readchar () == *p
)
294 if (SERIAL_WRITE (sr_get_desc (), a
, l
) != 0)
295 perror_with_name ("sr_write: Error writing to remote");
297 if (sr_get_debug () > 0)
298 for (i
= 0; i
< l
; i
++)
299 printf_unfiltered ("%c", a
[i
]);
308 sr_write (s
, strlen (s
));
314 sr_timed_read (buf
, n
)
335 /* Get a hex digit from the remote system & return its value. If
336 ignore_space is nonzero, ignore spaces (not newline, tab, etc). */
339 sr_get_hex_digit (ignore_space
)
347 if (ch
>= '0' && ch
<= '9')
349 else if (ch
>= 'A' && ch
<= 'F')
350 return ch
- 'A' + 10;
351 else if (ch
>= 'a' && ch
<= 'f')
352 return ch
- 'a' + 10;
353 else if (ch
!= ' ' || !ignore_space
)
356 error ("Invalid hex digit from remote system.");
361 /* Get a byte from the remote and put it in *BYT. Accept any number
364 sr_get_hex_byte (byt
)
369 val
= sr_get_hex_digit (1) << 4;
370 val
|= sr_get_hex_digit (0);
374 /* Read a 32-bit hex word from the remote, preceded by a space */
382 for (j
= 0; j
< 8; j
++)
383 val
= (val
<< 4) + sr_get_hex_digit (j
== 0);
387 /* Put a command string, in args, out to the remote. The remote is assumed to
388 be in raw mode, all writing/reading done through desc.
389 Ouput from the remote is placed on the users terminal until the
390 prompt from the remote is seen.
391 FIXME: Can't handle commands that take input. */
394 sr_com (args
, fromtty
)
403 /* Clear all input so only command relative output is displayed */
406 sr_write ("\030", 1);
407 registers_changed ();
415 gr_clear_all_breakpoints ();
419 SERIAL_CLOSE (sr_get_desc ());
427 takes a program previously attached to and detaches it.
428 We better not have left any breakpoints
429 in the program or it'll die when it hits one.
430 Close the open connection to the remote debugger.
431 Use this when you want to detach and do something else
435 gr_detach (args
, from_tty
)
440 error ("Argument given to \"detach\" when remotely debugging.");
443 gr_clear_all_breakpoints ();
447 puts_filtered ("Ending remote debugging.\n");
454 struct target_ops
*ops
;
457 printf_filtered ("\tAttached to DOS asynctsr\n");
459 printf_filtered ("\tAttached to %s", sr_get_device ());
461 printf_filtered ("at %d baud", baud_rate
);
462 printf_filtered ("\n");
467 printf_filtered ("\tand running program %s\n",
468 bfd_get_filename (exec_bfd
));
470 printf_filtered ("\tusing the %s protocol.\n", ops
->to_shortname
);
476 gr_clear_all_breakpoints ();
477 unpush_target (gr_get_ops ());
478 generic_mourn_inferior ();
487 /* This is called not only when we first attach, but also when the
488 user types "run" after having attached. */
490 gr_create_inferior (execfile
, args
, env
)
498 error ("Can't pass arguments to remote process.");
500 if (execfile
== 0 || exec_bfd
== 0)
501 error ("No executable file specified");
503 entry_pt
= (int) bfd_get_start_address (exec_bfd
);
507 gr_clear_all_breakpoints ();
509 init_wait_for_inferior ();
512 insert_breakpoints (); /* Needed to get correct instruction in cache */
513 proceed (entry_pt
, -1, 0);
516 /* Given a null terminated list of strings LIST, read the input until we find one of
517 them. Return the index of the string found or -1 on error. '?' means match
518 any single character. Note that with the algorithm we use, the initial
519 character of the string cannot recur in the string, or we will not find some
520 cases of the string in the input. If PASSTHROUGH is non-zero, then
521 pass non-matching data on. */
524 gr_multi_scan (list
, passthrough
)
528 char *swallowed
= NULL
; /* holding area */
529 char *swallowed_p
= swallowed
; /* Current position in swallowed. */
537 /* Look through the strings. Count them. Find the largest one so we can
538 allocate a holding area. */
540 for (max_length
= string_count
= i
= 0;
544 int length
= strlen (list
[i
]);
546 if (length
> max_length
)
550 /* if we have no strings, then something is wrong. */
551 if (string_count
== 0)
554 /* otherwise, we will need a holding area big enough to hold almost two
555 copies of our largest string. */
556 swallowed_p
= swallowed
= alloca (max_length
<< 1);
558 /* and a list of pointers to current scan points. */
559 plist
= (char **) alloca (string_count
* sizeof (*plist
));
562 for (i
= 0; i
< string_count
; ++i
)
565 for (ch
= sr_readchar (); /* loop forever */ ; ch
= sr_readchar ())
567 QUIT
; /* Let user quit and leave process running */
570 for (i
= 0; i
< string_count
; ++i
)
572 if (ch
== *plist
[i
] || *plist
[i
] == '?')
575 if (*plist
[i
] == '\0')
591 /* Print out any characters which have been swallowed. */
594 for (p
= swallowed
; p
< swallowed_p
; ++p
)
595 fputc_unfiltered (*p
, gdb_stdout
);
597 fputc_unfiltered (ch
, gdb_stdout
);
600 swallowed_p
= swallowed
;
609 /* Get ready to modify the registers array. On machines which store
610 individual registers, this doesn't need to do anything. On machines
611 which store all the registers in one fell swoop, this makes sure
612 that registers contains all the registers from the program being
616 gr_prepare_to_store ()
618 /* Do nothing, since we assume we can store individual regs */
621 /* Read a word from remote address ADDR and return it.
622 * This goes through the data cache.
628 return dcache_fetch (gr_get_dcache (), addr
);
631 /* Write a word WORD into remote address ADDR.
632 This goes through the data cache. */
635 gr_store_word (addr
, word
)
639 dcache_poke (gr_get_dcache (), addr
, word
);
643 _initialize_sr_support ()
645 /* FIXME-now: if target is open... */
646 add_show_from_set (add_set_cmd ("remotedevice", no_class
,
647 var_filename
, (char *) &sr_settings
.device
,
648 "Set device for remote serial I/O.\n\
649 This device is used as the serial port when debugging using remote\n\
650 targets.", &setlist
),
653 add_com ("remote <command>", class_obscure
, sr_com
,
654 "Send a command to the remote monitor.");
This page took 0.042478 seconds and 4 git commands to generate.