1 /* Generic support for remote debugging interfaces.
3 Copyright 1993, 1994 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., 675 Mass Ave, Cambridge, MA 02139, USA. */
21 /* This file actually contains two distinct logical "packages". They
22 are packaged together in this one file because they are typically
25 The first package is an addition to the serial package. The
26 addition provides reading and writing with debugging output and
27 timeouts based on user settable variables. These routines are
28 intended to support serial port based remote backends. These
29 functions are prefixed with sr_.
31 The second package is a collection of more or less generic
32 functions for use by remote backends. They support user settable
33 variables for debugging, retries, and the like.
37 * a pass through mode a la kermit or telnet.
39 * ask remote to change his baud rate.
49 #include "gdbcore.h" /* for exec_bfd */
50 #include "inferior.h" /* for generic_mourn_inferior */
51 #include "remote-utils.h"
53 struct _sr_settings sr_settings
= {
56 remote-bug.c had "with a timeout of 2, we time out waiting for
57 the prompt after an s-record dump."
59 remote.c had (2): This was 5 seconds, which is a long time to
60 sit and wait. Unless this is going though some terminal server
61 or multiplexer or other form of hairy serial connection, I
62 would think 2 seconds would be plenty.
67 NULL
, /* descriptor */
70 struct gr_settings
*gr_settings
= NULL
;
78 fprintf_unfiltered(gdb_stderr
, "Unrecognized arguments: `%s'.\n", junk
);
80 error ("Usage: target %s [DEVICE [SPEED [DEBUG]]]\n\
81 where DEVICE is the name of a device or HOST:PORT", proto
, proto
);
86 #define CHECKDONE(p, q) \
98 sr_scan_args(proto
, args
)
107 /* if no args, then nothing to do. */
108 if (args
== NULL
|| *args
== '\0')
111 /* scan off white space. */
112 for (p
= args
; isspace(*p
); ++p
) ;;
114 /* find end of device name. */
115 for (q
= p
; *q
!= '\0' && !isspace(*q
); ++q
) ;;
117 /* check for missing or empty device name. */
119 sr_set_device(savestring(p
, q
- p
));
121 /* look for baud rate. */
122 n
= strtol(q
, &p
, 10);
124 /* check for missing or empty baud rate. */
128 /* look for debug value. */
129 n
= strtol(p
, &q
, 10);
131 /* check for missing or empty debug value. */
135 /* scan off remaining white space. */
136 for (p
= q
; isspace(*p
); ++p
) ;;
138 /* if not end of string, then there's unrecognized junk. */
153 gr_open(args
, from_tty
, gr
)
156 struct gr_settings
*gr
;
158 target_preopen(from_tty
);
159 sr_scan_args(gr
->ops
->to_shortname
, args
);
160 unpush_target(gr
->ops
);
164 gr_set_dcache(dcache_init(gr
->readfunc
, gr
->writefunc
));
166 if (sr_get_desc() != NULL
)
169 /* If no args are specified, then we use the device specified by a
170 previous command or "set remotedevice". But if there is no
171 device, better stop now, not dump core. */
173 if (sr_get_device () == NULL
)
174 usage (gr
->ops
->to_shortname
, NULL
);
176 sr_set_desc(SERIAL_OPEN (sr_get_device()));
178 perror_with_name((char *) sr_get_device());
180 if (SERIAL_SETBAUDRATE(sr_get_desc(), sr_get_baud_rate()) != 0)
182 SERIAL_CLOSE(sr_get_desc());
183 perror_with_name(sr_get_device());
186 SERIAL_RAW (sr_get_desc());
188 /* If there is something sitting in the buffer we might take it as a
189 response to a command, which would be bad. */
190 SERIAL_FLUSH_INPUT (sr_get_desc ());
192 /* default retries */
193 if (sr_get_retries() == 0)
196 /* default clear breakpoint function */
197 if (gr_settings
->clear_all_breakpoints
== NULL
)
198 gr_settings
->clear_all_breakpoints
= remove_breakpoints
;
201 printf_filtered ("Remote debugging using `%s' at baud rate of %d\n",
202 sr_get_device(), sr_get_baud_rate());
204 push_target(gr
->ops
);
206 gr_clear_all_breakpoints ();
210 /* Read a character from the remote system masking it down to 7 bits
211 and doing all the fancy timeout stuff. */
218 buf
= SERIAL_READCHAR (sr_get_desc(), sr_get_timeout());
220 if (buf
== SERIAL_TIMEOUT
)
221 error ("Timeout reading from remote system.");
223 if (sr_get_debug() > 0)
224 printf_unfiltered ("%c", buf
);
234 buf
= SERIAL_READCHAR (sr_get_desc(), 0);
235 if (buf
== SERIAL_TIMEOUT
)
237 if (sr_get_debug() > 0)
239 printf_unfiltered ("%c", buf
);
241 printf_unfiltered ("<empty character poll>");
246 /* Keep discarding input from the remote system, until STRING is found.
247 Let the user break out immediately. */
257 if (sr_readchar () == *p
)
278 if (SERIAL_WRITE (sr_get_desc(), a
, l
) != 0)
279 perror_with_name ("sr_write: Error writing to remote");
281 if (sr_get_debug() > 0)
282 for (i
= 0; i
< l
; i
++)
283 printf_unfiltered ("%c", a
[i
]);
292 sr_write (s
, strlen (s
));
298 sr_timed_read (buf
, n
)
319 /* Get a hex digit from the remote system & return its value. If
320 ignore_space is nonzero, ignore spaces (not newline, tab, etc). */
323 sr_get_hex_digit (ignore_space
)
331 if (ch
>= '0' && ch
<= '9')
333 else if (ch
>= 'A' && ch
<= 'F')
334 return ch
- 'A' + 10;
335 else if (ch
>= 'a' && ch
<= 'f')
336 return ch
- 'a' + 10;
337 else if (ch
!= ' ' || !ignore_space
)
340 error ("Invalid hex digit from remote system.");
345 /* Get a byte from the remote and put it in *BYT. Accept any number
348 sr_get_hex_byte (byt
)
353 val
= sr_get_hex_digit (1) << 4;
354 val
|= sr_get_hex_digit (0);
358 /* Read a 32-bit hex word from the remote, preceded by a space */
366 for (j
= 0; j
< 8; j
++)
367 val
= (val
<< 4) + sr_get_hex_digit (j
== 0);
371 /* Put a command string, in args, out to the remote. The remote is assumed to
372 be in raw mode, all writing/reading done through desc.
373 Ouput from the remote is placed on the users terminal until the
374 prompt from the remote is seen.
375 FIXME: Can't handle commands that take input. */
378 sr_com (args
, fromtty
)
387 /* Clear all input so only command relative output is displayed */
390 sr_write ("\030", 1);
398 gr_clear_all_breakpoints();
402 SERIAL_CLOSE (sr_get_desc());
410 takes a program previously attached to and detaches it.
411 We better not have left any breakpoints
412 in the program or it'll die when it hits one.
413 Close the open connection to the remote debugger.
414 Use this when you want to detach and do something else
418 gr_detach(args
, from_tty
)
423 error ("Argument given to \"detach\" when remotely debugging.");
426 gr_clear_all_breakpoints ();
430 puts_filtered ("Ending remote debugging.\n");
437 struct target_ops
*ops
;
440 printf_filtered ("\tAttached to DOS asynctsr\n");
442 printf_filtered ("\tAttached to %s at %d baud\n",
443 sr_get_device(), sr_get_baud_rate());
448 printf_filtered ("\tand running program %s\n",
449 bfd_get_filename (exec_bfd
));
451 printf_filtered ("\tusing the %s protocol.\n", ops
->to_shortname
);
457 gr_clear_all_breakpoints ();
458 unpush_target (gr_get_ops());
459 generic_mourn_inferior ();
468 /* This is called not only when we first attach, but also when the
469 user types "run" after having attached. */
471 gr_create_inferior (execfile
, args
, env
)
479 error ("Can't pass arguments to remote process.");
481 if (execfile
== 0 || exec_bfd
== 0)
482 error ("No exec file specified");
484 entry_pt
= (int) bfd_get_start_address (exec_bfd
);
488 gr_clear_all_breakpoints ();
490 init_wait_for_inferior ();
493 insert_breakpoints (); /* Needed to get correct instruction in cache */
494 proceed (entry_pt
, -1, 0);
497 /* Given a null terminated list of strings LIST, read the input until we find one of
498 them. Return the index of the string found or -1 on error. '?' means match
499 any single character. Note that with the algorithm we use, the initial
500 character of the string cannot recur in the string, or we will not find some
501 cases of the string in the input. If PASSTHROUGH is non-zero, then
502 pass non-matching data on. */
505 gr_multi_scan (list
, passthrough
)
509 char *swallowed
= NULL
; /* holding area */
510 char *swallowed_p
= swallowed
; /* Current position in swallowed. */
518 /* Look through the strings. Count them. Find the largest one so we can
519 allocate a holding area. */
521 for (max_length
= string_count
= i
= 0;
525 int length
= strlen(list
[i
]);
527 if (length
> max_length
)
531 /* if we have no strings, then something is wrong. */
532 if (string_count
== 0)
535 /* otherwise, we will need a holding area big enough to hold almost two
536 copies of our largest string. */
537 swallowed_p
= swallowed
= alloca(max_length
<< 1);
539 /* and a list of pointers to current scan points. */
540 plist
= (char **) alloca (string_count
* sizeof(*plist
));
543 for (i
= 0; i
< string_count
; ++i
)
546 for (ch
= sr_readchar(); /* loop forever */ ; ch
= sr_readchar())
548 QUIT
; /* Let user quit and leave process running */
551 for (i
= 0; i
< string_count
; ++i
)
553 if (ch
== *plist
[i
] || *plist
[i
] == '?')
556 if (*plist
[i
] == '\0')
572 /* Print out any characters which have been swallowed. */
575 for (p
= swallowed
; p
< swallowed_p
; ++p
)
576 fputc_unfiltered (*p
, gdb_stdout
);
578 fputc_unfiltered (ch
, gdb_stdout
);
581 swallowed_p
= swallowed
;
590 /* Get ready to modify the registers array. On machines which store
591 individual registers, this doesn't need to do anything. On machines
592 which store all the registers in one fell swoop, this makes sure
593 that registers contains all the registers from the program being
597 gr_prepare_to_store ()
599 /* Do nothing, since we assume we can store individual regs */
602 /* Read a word from remote address ADDR and return it.
603 * This goes through the data cache.
609 return dcache_fetch (gr_get_dcache(), addr
);
612 /* Write a word WORD into remote address ADDR.
613 This goes through the data cache. */
616 gr_store_word (addr
, word
)
620 dcache_poke (gr_get_dcache(), addr
, word
);
623 /* general purpose load a file specified on the command line
624 into target memory. */
627 gr_load_image (args
, fromtty
)
634 struct cleanup
*old_cleanups
;
636 char *buffer
= xmalloc (delta
);
638 abfd
= bfd_openr (args
, (char *) 0);
641 perror_with_name (args
);
643 old_cleanups
= make_cleanup (bfd_close
, abfd
);
647 if (!bfd_check_format (abfd
, bfd_object
))
648 error ("It doesn't seem to be an object file.\n");
650 for (s
= abfd
->sections
; s
&& !quit_flag
; s
= s
->next
)
652 if (bfd_get_section_flags (abfd
, s
) & SEC_LOAD
)
655 printf_filtered ("%s\t: 0x%4x .. 0x%4x ",
656 s
->name
, s
->vma
, s
->vma
+ s
->_raw_size
);
658 for (i
= 0; i
< s
->_raw_size
&& !quit_flag
; i
+= delta
)
660 int sub_delta
= delta
;
661 if (sub_delta
> s
->_raw_size
- i
)
662 sub_delta
= s
->_raw_size
- i
;
664 bfd_get_section_contents (abfd
, s
, buffer
, i
, sub_delta
);
665 target_write_memory (s
->vma
+ i
, buffer
, sub_delta
);
666 printf_filtered ("*");
669 printf_filtered ("\n");
674 write_pc (bfd_get_start_address (abfd
));
676 discard_cleanups (old_cleanups
);
681 _initialize_sr_support ()
683 /* FIXME-now: if target is open... */
684 add_show_from_set (add_set_cmd ("remotedevice", no_class
,
685 var_filename
, (char *)&sr_settings
.device
,
686 "Set device for remote serial I/O.\n\
687 This device is used as the serial port when debugging using remote\n\
688 targets.", &setlist
),
691 add_com ("remote <command>", class_obscure
, sr_com
,
692 "Send a command to the remote monitor.");
This page took 0.042687 seconds and 4 git commands to generate.