]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blob - gdb/remote.c
import gdb-1999-11-08 snapshot
[thirdparty/binutils-gdb.git] / gdb / remote.c
1 /* Remote target communications for serial-line targets in custom GDB protocol
2 Copyright 1988, 91, 92, 93, 94, 95, 96, 97, 98, 1999
3 Free Software Foundation, Inc.
4
5 This file is part of GDB.
6
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.
11
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.
16
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. */
21
22 /* See the GDB User Guide for details of the GDB remote protocol. */
23
24 #include "defs.h"
25 #include "gdb_string.h"
26 #include <ctype.h>
27 #include <fcntl.h>
28 #include "frame.h"
29 #include "inferior.h"
30 #include "bfd.h"
31 #include "symfile.h"
32 #include "target.h"
33 #include "wait.h"
34 /*#include "terminal.h" */
35 #include "gdbcmd.h"
36 #include "objfiles.h"
37 #include "gdb-stabs.h"
38 #include "gdbthread.h"
39 #include "remote.h"
40
41 #include "dcache.h"
42
43 #include <ctype.h>
44 #include <sys/time.h>
45 #ifdef USG
46 #include <sys/types.h>
47 #endif
48
49 #include "event-loop.h"
50 #include "event-top.h"
51 #include "inf-loop.h"
52
53 #include <signal.h>
54 #include "serial.h"
55
56 /* Prototypes for local functions */
57 static void cleanup_sigint_signal_handler (void *dummy);
58 static void initialize_sigint_signal_handler (void);
59
60 static void handle_remote_sigint PARAMS ((int));
61 static void handle_remote_sigint_twice PARAMS ((int));
62 static void async_remote_interrupt PARAMS ((gdb_client_data));
63 void async_remote_interrupt_twice PARAMS ((gdb_client_data));
64
65 static void build_remote_gdbarch_data PARAMS ((void));
66
67 static int remote_write_bytes (CORE_ADDR memaddr, char *myaddr, int len);
68
69 static int remote_read_bytes PARAMS ((CORE_ADDR memaddr,
70 char *myaddr, int len));
71
72 static void remote_files_info PARAMS ((struct target_ops * ignore));
73
74 static int remote_xfer_memory PARAMS ((CORE_ADDR memaddr, char *myaddr,
75 int len, int should_write,
76 struct target_ops * target));
77
78 static void remote_prepare_to_store PARAMS ((void));
79
80 static void remote_fetch_registers PARAMS ((int regno));
81
82 static void remote_resume PARAMS ((int pid, int step,
83 enum target_signal siggnal));
84 static void remote_async_resume PARAMS ((int pid, int step,
85 enum target_signal siggnal));
86 static int remote_start_remote PARAMS ((PTR));
87
88 static void remote_open PARAMS ((char *name, int from_tty));
89 static void remote_async_open PARAMS ((char *name, int from_tty));
90
91 static void extended_remote_open PARAMS ((char *name, int from_tty));
92 static void extended_remote_async_open PARAMS ((char *name, int from_tty));
93
94 static void remote_open_1 PARAMS ((char *, int, struct target_ops *,
95 int extended_p));
96 static void remote_async_open_1 PARAMS ((char *, int, struct target_ops *,
97 int extended_p));
98
99 static void remote_close PARAMS ((int quitting));
100
101 static void remote_store_registers PARAMS ((int regno));
102
103 static void remote_mourn PARAMS ((void));
104 static void remote_async_mourn PARAMS ((void));
105
106 static void extended_remote_restart PARAMS ((void));
107
108 static void extended_remote_mourn PARAMS ((void));
109
110 static void extended_remote_create_inferior PARAMS ((char *, char *, char **));
111 static void extended_remote_async_create_inferior PARAMS ((char *, char *, char **));
112
113 static void remote_mourn_1 PARAMS ((struct target_ops *));
114
115 static void remote_send PARAMS ((char *buf));
116
117 static int readchar PARAMS ((int timeout));
118
119 static int remote_wait PARAMS ((int pid, struct target_waitstatus * status));
120 static int remote_async_wait PARAMS ((int pid, struct target_waitstatus * status));
121
122 static void remote_kill PARAMS ((void));
123 static void remote_async_kill PARAMS ((void));
124
125 static int tohex PARAMS ((int nib));
126
127 static void remote_detach PARAMS ((char *args, int from_tty));
128 static void remote_async_detach PARAMS ((char *args, int from_tty));
129
130 static void remote_interrupt PARAMS ((int signo));
131
132 static void remote_interrupt_twice PARAMS ((int signo));
133
134 static void interrupt_query PARAMS ((void));
135
136 static void set_thread PARAMS ((int, int));
137
138 static int remote_thread_alive PARAMS ((int));
139
140 static void get_offsets PARAMS ((void));
141
142 static int read_frame PARAMS ((char *));
143
144 static int remote_insert_breakpoint PARAMS ((CORE_ADDR, char *));
145
146 static int remote_remove_breakpoint PARAMS ((CORE_ADDR, char *));
147
148 static int hexnumlen PARAMS ((ULONGEST num));
149
150 static void init_remote_ops PARAMS ((void));
151
152 static void init_extended_remote_ops PARAMS ((void));
153
154 static void init_remote_cisco_ops PARAMS ((void));
155
156 static struct target_ops remote_cisco_ops;
157
158 static void remote_stop PARAMS ((void));
159
160 static int ishex PARAMS ((int ch, int *val));
161
162 static int stubhex PARAMS ((int ch));
163
164 static int remote_query PARAMS ((int /*char */ , char *, char *, int *));
165
166 static int hexnumstr PARAMS ((char *, ULONGEST));
167
168 static int hexnumnstr PARAMS ((char *, ULONGEST, int));
169
170 static CORE_ADDR remote_address_masked PARAMS ((CORE_ADDR));
171
172 static void print_packet PARAMS ((char *));
173
174 static unsigned long crc32 PARAMS ((unsigned char *, int, unsigned int));
175
176 static void compare_sections_command PARAMS ((char *, int));
177
178 static void packet_command PARAMS ((char *, int));
179
180 static int stub_unpack_int PARAMS ((char *buff, int fieldlength));
181
182 static int remote_current_thread PARAMS ((int oldpid));
183
184 static void remote_find_new_threads PARAMS ((void));
185
186 static void record_currthread PARAMS ((int currthread));
187
188 /* exported functions */
189
190 extern int fromhex PARAMS ((int a));
191
192 static int putpkt_binary PARAMS ((char *buf, int cnt));
193
194 static void check_binary_download PARAMS ((CORE_ADDR addr));
195
196 struct packet_config;
197
198 static void show_packet_config_cmd PARAMS ((struct packet_config * config));
199
200 static void set_packet_config_cmd PARAMS ((struct packet_config * config,
201 struct cmd_list_element * c));
202
203 static void add_packet_config_cmd PARAMS ((struct packet_config * config,
204 char *name,
205 char *title,
206 void (*set_func) (char *args, int from_tty, struct cmd_list_element * c),
207 void (*show_func) (char *name, int from_tty),
208 struct cmd_list_element **setlist,
209 struct cmd_list_element **showlist));
210
211 static void init_packet_config PARAMS ((struct packet_config * config));
212
213 static void set_remote_protocol_P_packet_cmd PARAMS ((char *args,
214 int from_tty,
215 struct cmd_list_element * c));
216
217 static void show_remote_protocol_P_packet_cmd PARAMS ((char *args,
218 int from_tty));
219
220 static void set_remote_protocol_Z_packet_cmd PARAMS ((char *args,
221 int from_tty,
222 struct cmd_list_element * c));
223
224 static void show_remote_protocol_Z_packet_cmd PARAMS ((char *args,
225 int from_tty));
226
227
228
229
230 /* Define the target subroutine names */
231
232 void open_remote_target PARAMS ((char *, int, struct target_ops *, int));
233
234 void _initialize_remote PARAMS ((void));
235
236 /* */
237
238 static struct target_ops remote_ops;
239
240 static struct target_ops extended_remote_ops;
241
242 /* Temporary target ops. Just like the remote_ops and
243 extended_remote_ops, but with asynchronous support. */
244 static struct target_ops remote_async_ops;
245
246 static struct target_ops extended_async_remote_ops;
247
248 /* This was 5 seconds, which is a long time to sit and wait.
249 Unless this is going though some terminal server or multiplexer or
250 other form of hairy serial connection, I would think 2 seconds would
251 be plenty. */
252
253 /* Changed to allow option to set timeout value.
254 was static int remote_timeout = 2; */
255 extern int remote_timeout;
256
257 /* FIXME: cagney/1999-09-23: Even though getpkt was called with
258 ``forever'' still use the normal timeout mechanism. This is
259 currently used by the ASYNC code to guarentee that target reads
260 during the initial connect always time-out. Once getpkt has been
261 modified to return a timeout indication and, in turn
262 remote_wait()/wait_for_inferior() have gained a timeout parameter
263 this can go away. */
264 static int wait_forever_enabled_p = 1;
265
266
267 /* This variable chooses whether to send a ^C or a break when the user
268 requests program interruption. Although ^C is usually what remote
269 systems expect, and that is the default here, sometimes a break is
270 preferable instead. */
271
272 static int remote_break;
273
274 /* Descriptor for I/O to remote machine. Initialize it to NULL so that
275 remote_open knows that we don't have a file open when the program
276 starts. */
277 static serial_t remote_desc = NULL;
278
279 /* This is set by the target (thru the 'S' message)
280 to denote that the target is in kernel mode. */
281 static int cisco_kernel_mode = 0;
282
283 /* This variable sets the number of bits in an address that are to be
284 sent in a memory ("M" or "m") packet. Normally, after stripping
285 leading zeros, the entire address would be sent. This variable
286 restricts the address to REMOTE_ADDRESS_SIZE bits. HISTORY: The
287 initial implementation of remote.c restricted the address sent in
288 memory packets to ``host::sizeof long'' bytes - (typically 32
289 bits). Consequently, for 64 bit targets, the upper 32 bits of an
290 address was never sent. Since fixing this bug may cause a break in
291 some remote targets this variable is principly provided to
292 facilitate backward compatibility. */
293
294 static int remote_address_size;
295
296 /* Tempoary to track who currently owns the terminal. See
297 target_async_terminal_* for more details. */
298
299 static int remote_async_terminal_ours_p;
300
301 \f
302 /* This is the size (in chars) of the first response to the ``g''
303 packet. It is used as a heuristic when determining the maximum
304 size of memory-read and memory-write packets. A target will
305 typically only reserve a buffer large enough to hold the ``g''
306 packet. The size does not include packet overhead (headers and
307 trailers). */
308
309 static long actual_register_packet_size;
310
311 /* This is the maximum size (in chars) of a non read/write packet. It
312 is also used as a cap on the size of read/write packets. */
313
314 static long remote_packet_size;
315 /* compatibility. */
316 #define PBUFSIZ (remote_packet_size)
317
318 /* User configurable variables for the number of characters in a
319 memory read/write packet. MIN (PBUFSIZ, g-packet-size) is the
320 default. Some targets need smaller values (fifo overruns, et.al.)
321 and some users need larger values (speed up transfers). The
322 variables ``preferred_*'' (the user request), ``current_*'' (what
323 was actually set) and ``forced_*'' (Positive - a soft limit,
324 negative - a hard limit). */
325
326 struct memory_packet_config
327 {
328 char *name;
329 long size;
330 int fixed_p;
331 };
332
333 /* Compute the current size of a read/write packet. Since this makes
334 use of ``actual_register_packet_size'' the computation is dynamic. */
335
336 static long
337 get_memory_packet_size (struct memory_packet_config *config)
338 {
339 /* NOTE: The somewhat arbitrary 16k comes from the knowledge (folk
340 law?) that some hosts don't cope very well with large alloca()
341 calls. Eventually the alloca() code will be replaced by calls to
342 xmalloc() and make_cleanups() allowing this restriction to either
343 be lifted or removed. */
344 #ifndef MAX_REMOTE_PACKET_SIZE
345 #define MAX_REMOTE_PACKET_SIZE 16384
346 #endif
347 /* NOTE: 16 is just chosen at random. */
348 #ifndef MIN_REMOTE_PACKET_SIZE
349 #define MIN_REMOTE_PACKET_SIZE 16
350 #endif
351 long what_they_get;
352 if (config->fixed_p)
353 {
354 if (config->size <= 0)
355 what_they_get = MAX_REMOTE_PACKET_SIZE;
356 else
357 what_they_get = config->size;
358 }
359 else
360 {
361 what_they_get = remote_packet_size;
362 /* Limit the packet to the size specified by the user. */
363 if (config->size > 0
364 && what_they_get > config->size)
365 what_they_get = config->size;
366 /* Limit it to the size of the targets ``g'' response. */
367 if (actual_register_packet_size > 0
368 && what_they_get > actual_register_packet_size)
369 what_they_get = actual_register_packet_size;
370 }
371 if (what_they_get > MAX_REMOTE_PACKET_SIZE)
372 what_they_get = MAX_REMOTE_PACKET_SIZE;
373 if (what_they_get < MIN_REMOTE_PACKET_SIZE)
374 what_they_get = MIN_REMOTE_PACKET_SIZE;
375 return what_they_get;
376 }
377
378 /* Update the size of a read/write packet. If they user wants
379 something really big then do a sanity check. */
380
381 static void
382 set_memory_packet_size (char *args, struct memory_packet_config *config)
383 {
384 int fixed_p = config->fixed_p;
385 long size = config->size;
386 if (args == NULL)
387 error ("Argument required (integer, `fixed' or `limited').");
388 else if (strcmp (args, "hard") == 0
389 || strcmp (args, "fixed") == 0)
390 fixed_p = 1;
391 else if (strcmp (args, "soft") == 0
392 || strcmp (args, "limit") == 0)
393 fixed_p = 0;
394 else
395 {
396 char *end;
397 size = strtoul (args, &end, 0);
398 if (args == end)
399 error ("Invalid %s (bad syntax).", config->name);
400 #if 0
401 /* Instead of explicitly capping the size of a packet to
402 MAX_REMOTE_PACKET_SIZE or dissallowing it, the user is
403 instead allowed to set the size to something arbitrarily
404 large. */
405 if (size > MAX_REMOTE_PACKET_SIZE)
406 error ("Invalid %s (too large).", config->name);
407 #endif
408 }
409 /* Extra checks? */
410 if (fixed_p && !config->fixed_p)
411 {
412 if (! query ("The target may not be able to correctly handle a %s\n"
413 "of %ld bytes. Change the packet size? ",
414 config->name, size))
415 error ("Packet size not changed.");
416 }
417 /* Update the config. */
418 config->fixed_p = fixed_p;
419 config->size = size;
420 }
421
422 static void
423 show_memory_packet_size (struct memory_packet_config *config)
424 {
425 printf_filtered ("The %s is %ld. ", config->name, config->size);
426 if (config->fixed_p)
427 printf_filtered ("Packets are fixed at %ld bytes.\n",
428 get_memory_packet_size (config));
429 else
430 printf_filtered ("Packets are limited to %ld bytes.\n",
431 get_memory_packet_size (config));
432 }
433
434 static struct memory_packet_config memory_write_packet_config =
435 {
436 "memory-write-packet-size",
437 };
438
439 static void
440 set_memory_write_packet_size (char *args, int from_tty)
441 {
442 set_memory_packet_size (args, &memory_write_packet_config);
443 }
444
445 static void
446 show_memory_write_packet_size (char *args, int from_tty)
447 {
448 show_memory_packet_size (&memory_write_packet_config);
449 }
450
451 static long
452 get_memory_write_packet_size (void)
453 {
454 return get_memory_packet_size (&memory_write_packet_config);
455 }
456
457 static struct memory_packet_config memory_read_packet_config =
458 {
459 "memory-read-packet-size",
460 };
461
462 static void
463 set_memory_read_packet_size (char *args, int from_tty)
464 {
465 set_memory_packet_size (args, &memory_read_packet_config);
466 }
467
468 static void
469 show_memory_read_packet_size (char *args, int from_tty)
470 {
471 show_memory_packet_size (&memory_read_packet_config);
472 }
473
474 static long
475 get_memory_read_packet_size (void)
476 {
477 long size = get_memory_packet_size (&memory_read_packet_config);
478 /* FIXME: cagney/1999-11-07: Functions like getpkt() need to get an
479 extra buffer size argument before the memory read size can be
480 increased beyond PBUFSIZ. */
481 if (size > PBUFSIZ)
482 size = PBUFSIZ;
483 return size;
484 }
485
486 /* Register packet size initialization. Since the bounds change when
487 the architecture changes (namely REGISTER_BYTES) this all needs to
488 be multi-arched. */
489
490 static void
491 register_remote_packet_sizes (void)
492 {
493 REGISTER_GDBARCH_SWAP (remote_packet_size);
494 REGISTER_GDBARCH_SWAP (actual_register_packet_size);
495 }
496
497 static void
498 build_remote_packet_sizes (void)
499 {
500 /* Maximum number of characters in a packet. This default m68k-stub.c and
501 i386-stub.c stubs. */
502 remote_packet_size = 400;
503 /* Should REGISTER_BYTES needs more space than the default, adjust
504 the size accordingly. Remember that each byte is encoded as two
505 characters. 32 is the overhead for the packet header /
506 footer. NOTE: cagney/1999-10-26: I suspect that 8
507 (``$NN:G...#NN'') is a better guess, the below has been padded a
508 little. */
509 if (REGISTER_BYTES > ((remote_packet_size - 32) / 2))
510 remote_packet_size = (REGISTER_BYTES * 2 + 32);
511
512 /* This one is filled in when a ``g'' packet is received. */
513 actual_register_packet_size = 0;
514 }
515 \f
516 /* Generic configuration support for packets the stub optionally
517 supports. Allows the user to specify the use of the packet as well
518 as allowing GDB to auto-detect support in the remote stub. */
519
520 enum packet_support
521 {
522 PACKET_SUPPORT_UNKNOWN = 0,
523 PACKET_ENABLE,
524 PACKET_DISABLE
525 };
526
527 enum packet_detect
528 {
529 PACKET_AUTO_DETECT = 0,
530 PACKET_MANUAL_DETECT
531 };
532
533 struct packet_config
534 {
535 char *state;
536 char *name;
537 char *title;
538 enum packet_detect detect;
539 enum packet_support support;
540 };
541
542 static char packet_support_auto[] = "auto";
543 static char packet_enable[] = "enable";
544 static char packet_disable[] = "disable";
545 static char *packet_support_enums[] =
546 {
547 packet_support_auto,
548 packet_enable,
549 packet_disable,
550 0,
551 };
552
553 static void
554 set_packet_config_cmd (config, c)
555 struct packet_config *config;
556 struct cmd_list_element *c;
557 {
558 if (config->state == packet_enable)
559 {
560 config->detect = PACKET_MANUAL_DETECT;
561 config->support = PACKET_ENABLE;
562 }
563 else if (config->state == packet_disable)
564 {
565 config->detect = PACKET_MANUAL_DETECT;
566 config->support = PACKET_DISABLE;
567 }
568 else if (config->state == packet_support_auto)
569 {
570 config->detect = PACKET_AUTO_DETECT;
571 config->support = PACKET_SUPPORT_UNKNOWN;
572 }
573 else
574 internal_error ("Bad enum value");
575 }
576
577 static void
578 show_packet_config_cmd (config)
579 struct packet_config *config;
580 {
581 char *support = "internal-error";
582 switch (config->support)
583 {
584 case PACKET_ENABLE:
585 support = "enabled";
586 break;
587 case PACKET_DISABLE:
588 support = "disabled";
589 break;
590 case PACKET_SUPPORT_UNKNOWN:
591 support = "unknown";
592 break;
593 }
594 switch (config->detect)
595 {
596 case PACKET_AUTO_DETECT:
597 printf_filtered ("Support for remote protocol `%s' (%s) packet is auto-detected, currently %s.\n",
598 config->name, config->title, support);
599 break;
600 case PACKET_MANUAL_DETECT:
601 printf_filtered ("Support for remote protocol `%s' (%s) is currently %s.\n",
602 config->name, config->title, support);
603 }
604 }
605
606 static void
607 add_packet_config_cmd (config, name, title, set_func, show_func,
608 setlist, showlist)
609 struct packet_config *config;
610 char *name;
611 char *title;
612 void (*set_func) PARAMS ((char *args, int from_tty,
613 struct cmd_list_element * c));
614 void (*show_func) PARAMS ((char *name, int from_tty));
615 struct cmd_list_element **setlist;
616 struct cmd_list_element **showlist;
617 {
618 struct cmd_list_element *c;
619 char *set_doc;
620 char *show_doc;
621 char *full_name;
622 config->name = name;
623 config->title = title;
624 asprintf (&set_doc, "Set use of remote protocol `%s' (%s) packet",
625 name, title);
626 asprintf (&show_doc, "Show current use of remote protocol `%s' (%s) packet",
627 name, title);
628 asprintf (&full_name, "%s-packet", name);
629 c = add_set_enum_cmd (full_name,
630 class_obscure, packet_support_enums,
631 (char *) &config->state,
632 set_doc, setlist);
633 c->function.sfunc = set_func;
634 add_cmd (full_name, class_obscure, show_func, show_doc, showlist);
635 }
636
637 static void
638 init_packet_config (config)
639 struct packet_config *config;
640 {
641 switch (config->detect)
642 {
643 case PACKET_AUTO_DETECT:
644 config->support = PACKET_SUPPORT_UNKNOWN;
645 break;
646 case PACKET_MANUAL_DETECT:
647 /* let the user beware */
648 break;
649 }
650 }
651
652 /* Should we try the 'P' (set register) request? */
653
654 static struct packet_config remote_protocol_P;
655
656 static void
657 set_remote_protocol_P_packet_cmd (args, from_tty, c)
658 char *args;
659 int from_tty;
660 struct cmd_list_element *c;
661 {
662 set_packet_config_cmd (&remote_protocol_P, c);
663 }
664
665 static void
666 show_remote_protocol_P_packet_cmd (args, from_tty)
667 char *args;
668 int from_tty;
669 {
670 show_packet_config_cmd (&remote_protocol_P);
671 }
672
673 /* Should we try the 'Z' (set breakpoint) request? */
674
675 static struct packet_config remote_protocol_Z;
676
677 static void
678 set_remote_protocol_Z_packet_cmd (args, from_tty, c)
679 char *args;
680 int from_tty;
681 struct cmd_list_element *c;
682 {
683 set_packet_config_cmd (&remote_protocol_Z, c);
684 }
685
686 static void
687 show_remote_protocol_Z_packet_cmd (args, from_tty)
688 char *args;
689 int from_tty;
690 {
691 show_packet_config_cmd (&remote_protocol_Z);
692 }
693
694 /* Should we try the 'X' (remote binary download) packet?
695
696 This variable (available to the user via "set remote X-packet")
697 dictates whether downloads are sent in binary (via the 'X' packet).
698 We assume that the stub can, and attempt to do it. This will be
699 cleared if the stub does not understand it. This switch is still
700 needed, though in cases when the packet is supported in the stub,
701 but the connection does not allow it (i.e., 7-bit serial connection
702 only). */
703
704 static struct packet_config remote_protocol_binary_download;
705
706 static void
707 set_remote_protocol_binary_download_cmd (char *args,
708 int from_tty,
709 struct cmd_list_element *c)
710 {
711 set_packet_config_cmd (&remote_protocol_binary_download, c);
712 }
713
714 static void
715 show_remote_protocol_binary_download_cmd (char *args,
716 int from_tty)
717 {
718 show_packet_config_cmd (&remote_protocol_binary_download);
719 }
720
721
722 /* Tokens for use by the asynchronous signal handlers for SIGINT */
723 PTR sigint_remote_twice_token;
724 PTR sigint_remote_token;
725
726 /* These are pointers to hook functions that may be set in order to
727 modify resume/wait behavior for a particular architecture. */
728
729 void (*target_resume_hook) PARAMS ((void));
730 void (*target_wait_loop_hook) PARAMS ((void));
731 \f
732
733
734 /* These are the threads which we last sent to the remote system.
735 -1 for all or -2 for not sent yet. */
736 static int general_thread;
737 static int continue_thread;
738
739 /* Call this function as a result of
740 1) A halt indication (T packet) containing a thread id
741 2) A direct query of currthread
742 3) Successful execution of set thread
743 */
744
745 static void
746 record_currthread (currthread)
747 int currthread;
748 {
749 general_thread = currthread;
750
751 /* If this is a new thread, add it to GDB's thread list.
752 If we leave it up to WFI to do this, bad things will happen. */
753 if (!in_thread_list (currthread))
754 {
755 add_thread (currthread);
756 printf_filtered ("[New %s]\n", target_pid_to_str (currthread));
757 }
758 }
759
760 #define MAGIC_NULL_PID 42000
761
762 static void
763 set_thread (th, gen)
764 int th;
765 int gen;
766 {
767 char *buf = alloca (PBUFSIZ);
768 int state = gen ? general_thread : continue_thread;
769
770 if (state == th)
771 return;
772
773 buf[0] = 'H';
774 buf[1] = gen ? 'g' : 'c';
775 if (th == MAGIC_NULL_PID)
776 {
777 buf[2] = '0';
778 buf[3] = '\0';
779 }
780 else if (th < 0)
781 sprintf (&buf[2], "-%x", -th);
782 else
783 sprintf (&buf[2], "%x", th);
784 putpkt (buf);
785 getpkt (buf, 0);
786 if (gen)
787 general_thread = th;
788 else
789 continue_thread = th;
790 }
791 \f
792 /* Return nonzero if the thread TH is still alive on the remote system. */
793
794 static int
795 remote_thread_alive (tid)
796 int tid;
797 {
798 char buf[16];
799
800 if (tid < 0)
801 sprintf (buf, "T-%08x", -tid);
802 else
803 sprintf (buf, "T%08x", tid);
804 putpkt (buf);
805 getpkt (buf, 0);
806 return (buf[0] == 'O' && buf[1] == 'K');
807 }
808
809 /* About these extended threadlist and threadinfo packets. They are
810 variable length packets but, the fields within them are often fixed
811 length. They are redundent enough to send over UDP as is the
812 remote protocol in general. There is a matching unit test module
813 in libstub. */
814
815 #define OPAQUETHREADBYTES 8
816
817 /* a 64 bit opaque identifier */
818 typedef unsigned char threadref[OPAQUETHREADBYTES];
819
820 /* WARNING: This threadref data structure comes from the remote O.S., libstub
821 protocol encoding, and remote.c. it is not particularly changable */
822
823 /* Right now, the internal structure is int. We want it to be bigger.
824 Plan to fix this.
825 */
826
827 typedef int gdb_threadref; /* internal GDB thread reference */
828
829 /* gdb_ext_thread_info is an internal GDB data structure which is
830 equivalint to the reply of the remote threadinfo packet */
831
832 struct gdb_ext_thread_info
833 {
834 threadref threadid; /* External form of thread reference */
835 int active; /* Has state interesting to GDB? , regs, stack */
836 char display[256]; /* Brief state display, name, blocked/syspended */
837 char shortname[32]; /* To be used to name threads */
838 char more_display[256]; /* Long info, statistics, queue depth, whatever */
839 };
840
841 /* The volume of remote transfers can be limited by submitting
842 a mask containing bits specifying the desired information.
843 Use a union of these values as the 'selection' parameter to
844 get_thread_info. FIXME: Make these TAG names more thread specific.
845 */
846
847 #define TAG_THREADID 1
848 #define TAG_EXISTS 2
849 #define TAG_DISPLAY 4
850 #define TAG_THREADNAME 8
851 #define TAG_MOREDISPLAY 16
852
853 #define BUF_THREAD_ID_SIZE (OPAQUETHREADBYTES*2)
854
855 char *unpack_varlen_hex PARAMS ((char *buff, int *result));
856
857 static char *unpack_nibble PARAMS ((char *buf, int *val));
858
859 static char *pack_nibble PARAMS ((char *buf, int nibble));
860
861 static char *pack_hex_byte PARAMS ((char *pkt, int /*unsigned char */ byte));
862
863 static char *unpack_byte PARAMS ((char *buf, int *value));
864
865 static char *pack_int PARAMS ((char *buf, int value));
866
867 static char *unpack_int PARAMS ((char *buf, int *value));
868
869 static char *unpack_string PARAMS ((char *src, char *dest, int length));
870
871 static char *pack_threadid PARAMS ((char *pkt, threadref * id));
872
873 static char *unpack_threadid PARAMS ((char *inbuf, threadref * id));
874
875 void int_to_threadref PARAMS ((threadref * id, int value));
876
877 static int threadref_to_int PARAMS ((threadref * ref));
878
879 static void copy_threadref PARAMS ((threadref * dest, threadref * src));
880
881 static int threadmatch PARAMS ((threadref * dest, threadref * src));
882
883 static char *pack_threadinfo_request PARAMS ((char *pkt, int mode,
884 threadref * id));
885
886 static int remote_unpack_thread_info_response PARAMS ((char *pkt,
887 threadref * expectedref,
888 struct gdb_ext_thread_info * info));
889
890
891 static int remote_get_threadinfo PARAMS ((threadref * threadid,
892 int fieldset, /*TAG mask */
893 struct gdb_ext_thread_info * info));
894
895 static int adapt_remote_get_threadinfo PARAMS ((gdb_threadref * ref,
896 int selection,
897 struct gdb_ext_thread_info * info));
898
899 static char *pack_threadlist_request PARAMS ((char *pkt, int startflag,
900 int threadcount,
901 threadref * nextthread));
902
903 static int parse_threadlist_response PARAMS ((char *pkt,
904 int result_limit,
905 threadref * original_echo,
906 threadref * resultlist,
907 int *doneflag));
908
909 static int remote_get_threadlist PARAMS ((int startflag,
910 threadref * nextthread,
911 int result_limit,
912 int *done,
913 int *result_count,
914 threadref * threadlist));
915
916 typedef int (*rmt_thread_action) (threadref * ref, void *context);
917
918 static int remote_threadlist_iterator PARAMS ((rmt_thread_action stepfunction,
919 void *context, int looplimit));
920
921 static int remote_newthread_step PARAMS ((threadref * ref, void *context));
922
923 /* encode 64 bits in 16 chars of hex */
924
925 static const char hexchars[] = "0123456789abcdef";
926
927 static int
928 ishex (ch, val)
929 int ch;
930 int *val;
931 {
932 if ((ch >= 'a') && (ch <= 'f'))
933 {
934 *val = ch - 'a' + 10;
935 return 1;
936 }
937 if ((ch >= 'A') && (ch <= 'F'))
938 {
939 *val = ch - 'A' + 10;
940 return 1;
941 }
942 if ((ch >= '0') && (ch <= '9'))
943 {
944 *val = ch - '0';
945 return 1;
946 }
947 return 0;
948 }
949
950 static int
951 stubhex (ch)
952 int ch;
953 {
954 if (ch >= 'a' && ch <= 'f')
955 return ch - 'a' + 10;
956 if (ch >= '0' && ch <= '9')
957 return ch - '0';
958 if (ch >= 'A' && ch <= 'F')
959 return ch - 'A' + 10;
960 return -1;
961 }
962
963 static int
964 stub_unpack_int (buff, fieldlength)
965 char *buff;
966 int fieldlength;
967 {
968 int nibble;
969 int retval = 0;
970
971 while (fieldlength)
972 {
973 nibble = stubhex (*buff++);
974 retval |= nibble;
975 fieldlength--;
976 if (fieldlength)
977 retval = retval << 4;
978 }
979 return retval;
980 }
981
982 char *
983 unpack_varlen_hex (buff, result)
984 char *buff; /* packet to parse */
985 int *result;
986 {
987 int nibble;
988 int retval = 0;
989
990 while (ishex (*buff, &nibble))
991 {
992 buff++;
993 retval = retval << 4;
994 retval |= nibble & 0x0f;
995 }
996 *result = retval;
997 return buff;
998 }
999
1000 static char *
1001 unpack_nibble (buf, val)
1002 char *buf;
1003 int *val;
1004 {
1005 ishex (*buf++, val);
1006 return buf;
1007 }
1008
1009 static char *
1010 pack_nibble (buf, nibble)
1011 char *buf;
1012 int nibble;
1013 {
1014 *buf++ = hexchars[(nibble & 0x0f)];
1015 return buf;
1016 }
1017
1018 static char *
1019 pack_hex_byte (pkt, byte)
1020 char *pkt;
1021 int byte;
1022 {
1023 *pkt++ = hexchars[(byte >> 4) & 0xf];
1024 *pkt++ = hexchars[(byte & 0xf)];
1025 return pkt;
1026 }
1027
1028 static char *
1029 unpack_byte (buf, value)
1030 char *buf;
1031 int *value;
1032 {
1033 *value = stub_unpack_int (buf, 2);
1034 return buf + 2;
1035 }
1036
1037 static char *
1038 pack_int (buf, value)
1039 char *buf;
1040 int value;
1041 {
1042 buf = pack_hex_byte (buf, (value >> 24) & 0xff);
1043 buf = pack_hex_byte (buf, (value >> 16) & 0xff);
1044 buf = pack_hex_byte (buf, (value >> 8) & 0x0ff);
1045 buf = pack_hex_byte (buf, (value & 0xff));
1046 return buf;
1047 }
1048
1049 static char *
1050 unpack_int (buf, value)
1051 char *buf;
1052 int *value;
1053 {
1054 *value = stub_unpack_int (buf, 8);
1055 return buf + 8;
1056 }
1057
1058 #if 0 /* currently unused, uncomment when needed */
1059 static char *pack_string PARAMS ((char *pkt, char *string));
1060
1061 static char *
1062 pack_string (pkt, string)
1063 char *pkt;
1064 char *string;
1065 {
1066 char ch;
1067 int len;
1068
1069 len = strlen (string);
1070 if (len > 200)
1071 len = 200; /* Bigger than most GDB packets, junk??? */
1072 pkt = pack_hex_byte (pkt, len);
1073 while (len-- > 0)
1074 {
1075 ch = *string++;
1076 if ((ch == '\0') || (ch == '#'))
1077 ch = '*'; /* Protect encapsulation */
1078 *pkt++ = ch;
1079 }
1080 return pkt;
1081 }
1082 #endif /* 0 (unused) */
1083
1084 static char *
1085 unpack_string (src, dest, length)
1086 char *src;
1087 char *dest;
1088 int length;
1089 {
1090 while (length--)
1091 *dest++ = *src++;
1092 *dest = '\0';
1093 return src;
1094 }
1095
1096 static char *
1097 pack_threadid (pkt, id)
1098 char *pkt;
1099 threadref *id;
1100 {
1101 char *limit;
1102 unsigned char *altid;
1103
1104 altid = (unsigned char *) id;
1105 limit = pkt + BUF_THREAD_ID_SIZE;
1106 while (pkt < limit)
1107 pkt = pack_hex_byte (pkt, *altid++);
1108 return pkt;
1109 }
1110
1111
1112 static char *
1113 unpack_threadid (inbuf, id)
1114 char *inbuf;
1115 threadref *id;
1116 {
1117 char *altref;
1118 char *limit = inbuf + BUF_THREAD_ID_SIZE;
1119 int x, y;
1120
1121 altref = (char *) id;
1122
1123 while (inbuf < limit)
1124 {
1125 x = stubhex (*inbuf++);
1126 y = stubhex (*inbuf++);
1127 *altref++ = (x << 4) | y;
1128 }
1129 return inbuf;
1130 }
1131
1132 /* Externally, threadrefs are 64 bits but internally, they are still
1133 ints. This is due to a mismatch of specifications. We would like
1134 to use 64bit thread references internally. This is an adapter
1135 function. */
1136
1137 void
1138 int_to_threadref (id, value)
1139 threadref *id;
1140 int value;
1141 {
1142 unsigned char *scan;
1143
1144 scan = (unsigned char *) id;
1145 {
1146 int i = 4;
1147 while (i--)
1148 *scan++ = 0;
1149 }
1150 *scan++ = (value >> 24) & 0xff;
1151 *scan++ = (value >> 16) & 0xff;
1152 *scan++ = (value >> 8) & 0xff;
1153 *scan++ = (value & 0xff);
1154 }
1155
1156 static int
1157 threadref_to_int (ref)
1158 threadref *ref;
1159 {
1160 int i, value = 0;
1161 unsigned char *scan;
1162
1163 scan = (char *) ref;
1164 scan += 4;
1165 i = 4;
1166 while (i-- > 0)
1167 value = (value << 8) | ((*scan++) & 0xff);
1168 return value;
1169 }
1170
1171 static void
1172 copy_threadref (dest, src)
1173 threadref *dest;
1174 threadref *src;
1175 {
1176 int i;
1177 unsigned char *csrc, *cdest;
1178
1179 csrc = (unsigned char *) src;
1180 cdest = (unsigned char *) dest;
1181 i = 8;
1182 while (i--)
1183 *cdest++ = *csrc++;
1184 }
1185
1186 static int
1187 threadmatch (dest, src)
1188 threadref *dest;
1189 threadref *src;
1190 {
1191 /* things are broken right now, so just assume we got a match */
1192 #if 0
1193 unsigned char *srcp, *destp;
1194 int i, result;
1195 srcp = (char *) src;
1196 destp = (char *) dest;
1197
1198 result = 1;
1199 while (i-- > 0)
1200 result &= (*srcp++ == *destp++) ? 1 : 0;
1201 return result;
1202 #endif
1203 return 1;
1204 }
1205
1206 /*
1207 threadid:1, # always request threadid
1208 context_exists:2,
1209 display:4,
1210 unique_name:8,
1211 more_display:16
1212 */
1213
1214 /* Encoding: 'Q':8,'P':8,mask:32,threadid:64 */
1215
1216 static char *
1217 pack_threadinfo_request (pkt, mode, id)
1218 char *pkt;
1219 int mode;
1220 threadref *id;
1221 {
1222 *pkt++ = 'q'; /* Info Query */
1223 *pkt++ = 'P'; /* process or thread info */
1224 pkt = pack_int (pkt, mode); /* mode */
1225 pkt = pack_threadid (pkt, id); /* threadid */
1226 *pkt = '\0'; /* terminate */
1227 return pkt;
1228 }
1229
1230 /* These values tag the fields in a thread info response packet */
1231 /* Tagging the fields allows us to request specific fields and to
1232 add more fields as time goes by */
1233
1234 #define TAG_THREADID 1 /* Echo the thread identifier */
1235 #define TAG_EXISTS 2 /* Is this process defined enough to
1236 fetch registers and its stack */
1237 #define TAG_DISPLAY 4 /* A short thing maybe to put on a window */
1238 #define TAG_THREADNAME 8 /* string, maps 1-to-1 with a thread is */
1239 #define TAG_MOREDISPLAY 16 /* Whatever the kernel wants to say about
1240 the process */
1241
1242 static int
1243 remote_unpack_thread_info_response (pkt, expectedref, info)
1244 char *pkt;
1245 threadref *expectedref;
1246 struct gdb_ext_thread_info *info;
1247 {
1248 int mask, length;
1249 unsigned int tag;
1250 threadref ref;
1251 char *limit = pkt + PBUFSIZ; /* plausable parsing limit */
1252 int retval = 1;
1253
1254 /* info->threadid = 0; FIXME: implement zero_threadref */
1255 info->active = 0;
1256 info->display[0] = '\0';
1257 info->shortname[0] = '\0';
1258 info->more_display[0] = '\0';
1259
1260 /* Assume the characters indicating the packet type have been stripped */
1261 pkt = unpack_int (pkt, &mask); /* arg mask */
1262 pkt = unpack_threadid (pkt, &ref);
1263
1264 if (mask == 0)
1265 warning ("Incomplete response to threadinfo request\n");
1266 if (!threadmatch (&ref, expectedref))
1267 { /* This is an answer to a different request */
1268 warning ("ERROR RMT Thread info mismatch\n");
1269 return 0;
1270 }
1271 copy_threadref (&info->threadid, &ref);
1272
1273 /* Loop on tagged fields , try to bail if somthing goes wrong */
1274
1275 while ((pkt < limit) && mask && *pkt) /* packets are terminated with nulls */
1276 {
1277 pkt = unpack_int (pkt, &tag); /* tag */
1278 pkt = unpack_byte (pkt, &length); /* length */
1279 if (!(tag & mask)) /* tags out of synch with mask */
1280 {
1281 warning ("ERROR RMT: threadinfo tag mismatch\n");
1282 retval = 0;
1283 break;
1284 }
1285 if (tag == TAG_THREADID)
1286 {
1287 if (length != 16)
1288 {
1289 warning ("ERROR RMT: length of threadid is not 16\n");
1290 retval = 0;
1291 break;
1292 }
1293 pkt = unpack_threadid (pkt, &ref);
1294 mask = mask & ~TAG_THREADID;
1295 continue;
1296 }
1297 if (tag == TAG_EXISTS)
1298 {
1299 info->active = stub_unpack_int (pkt, length);
1300 pkt += length;
1301 mask = mask & ~(TAG_EXISTS);
1302 if (length > 8)
1303 {
1304 warning ("ERROR RMT: 'exists' length too long\n");
1305 retval = 0;
1306 break;
1307 }
1308 continue;
1309 }
1310 if (tag == TAG_THREADNAME)
1311 {
1312 pkt = unpack_string (pkt, &info->shortname[0], length);
1313 mask = mask & ~TAG_THREADNAME;
1314 continue;
1315 }
1316 if (tag == TAG_DISPLAY)
1317 {
1318 pkt = unpack_string (pkt, &info->display[0], length);
1319 mask = mask & ~TAG_DISPLAY;
1320 continue;
1321 }
1322 if (tag == TAG_MOREDISPLAY)
1323 {
1324 pkt = unpack_string (pkt, &info->more_display[0], length);
1325 mask = mask & ~TAG_MOREDISPLAY;
1326 continue;
1327 }
1328 warning ("ERROR RMT: unknown thread info tag\n");
1329 break; /* Not a tag we know about */
1330 }
1331 return retval;
1332 }
1333
1334 static int
1335 remote_get_threadinfo (threadid, fieldset, info)
1336 threadref *threadid;
1337 int fieldset; /* TAG mask */
1338 struct gdb_ext_thread_info *info;
1339 {
1340 int result;
1341 char *threadinfo_pkt = alloca (PBUFSIZ);
1342
1343 pack_threadinfo_request (threadinfo_pkt, fieldset, threadid);
1344 putpkt (threadinfo_pkt);
1345 getpkt (threadinfo_pkt, 0);
1346 result = remote_unpack_thread_info_response (threadinfo_pkt + 2, threadid,
1347 info);
1348 return result;
1349 }
1350
1351 /* Unfortunately, 61 bit thread-ids are bigger than the internal
1352 representation of a threadid. */
1353
1354 static int
1355 adapt_remote_get_threadinfo (ref, selection, info)
1356 gdb_threadref *ref;
1357 int selection;
1358 struct gdb_ext_thread_info *info;
1359 {
1360 threadref lclref;
1361
1362 int_to_threadref (&lclref, *ref);
1363 return remote_get_threadinfo (&lclref, selection, info);
1364 }
1365
1366 /* Format: i'Q':8,i"L":8,initflag:8,batchsize:16,lastthreadid:32 */
1367
1368 static char *
1369 pack_threadlist_request (pkt, startflag, threadcount, nextthread)
1370 char *pkt;
1371 int startflag;
1372 int threadcount;
1373 threadref *nextthread;
1374 {
1375 *pkt++ = 'q'; /* info query packet */
1376 *pkt++ = 'L'; /* Process LIST or threadLIST request */
1377 pkt = pack_nibble (pkt, startflag); /* initflag 1 bytes */
1378 pkt = pack_hex_byte (pkt, threadcount); /* threadcount 2 bytes */
1379 pkt = pack_threadid (pkt, nextthread); /* 64 bit thread identifier */
1380 *pkt = '\0';
1381 return pkt;
1382 }
1383
1384 /* Encoding: 'q':8,'M':8,count:16,done:8,argthreadid:64,(threadid:64)* */
1385
1386 static int
1387 parse_threadlist_response (pkt, result_limit, original_echo, resultlist,
1388 doneflag)
1389 char *pkt;
1390 int result_limit;
1391 threadref *original_echo;
1392 threadref *resultlist;
1393 int *doneflag;
1394 {
1395 char *limit;
1396 int count, resultcount, done;
1397
1398 resultcount = 0;
1399 /* Assume the 'q' and 'M chars have been stripped. */
1400 limit = pkt + (PBUFSIZ - BUF_THREAD_ID_SIZE); /* done parse past here */
1401 pkt = unpack_byte (pkt, &count); /* count field */
1402 pkt = unpack_nibble (pkt, &done);
1403 /* The first threadid is the argument threadid. */
1404 pkt = unpack_threadid (pkt, original_echo); /* should match query packet */
1405 while ((count-- > 0) && (pkt < limit))
1406 {
1407 pkt = unpack_threadid (pkt, resultlist++);
1408 if (resultcount++ >= result_limit)
1409 break;
1410 }
1411 if (doneflag)
1412 *doneflag = done;
1413 return resultcount;
1414 }
1415
1416 static int
1417 remote_get_threadlist (startflag, nextthread, result_limit,
1418 done, result_count, threadlist)
1419 int startflag;
1420 threadref *nextthread;
1421 int result_limit;
1422 int *done;
1423 int *result_count;
1424 threadref *threadlist;
1425
1426 {
1427 static threadref echo_nextthread;
1428 char *threadlist_packet = alloca (PBUFSIZ);
1429 char *t_response = alloca (PBUFSIZ);
1430 int result = 1;
1431
1432 /* Trancate result limit to be smaller than the packet size */
1433 if ((((result_limit + 1) * BUF_THREAD_ID_SIZE) + 10) >= PBUFSIZ)
1434 result_limit = (PBUFSIZ / BUF_THREAD_ID_SIZE) - 2;
1435
1436 pack_threadlist_request (threadlist_packet,
1437 startflag, result_limit, nextthread);
1438 putpkt (threadlist_packet);
1439 getpkt (t_response, 0);
1440
1441 *result_count =
1442 parse_threadlist_response (t_response + 2, result_limit, &echo_nextthread,
1443 threadlist, done);
1444
1445 if (!threadmatch (&echo_nextthread, nextthread))
1446 {
1447 /* FIXME: This is a good reason to drop the packet */
1448 /* Possably, there is a duplicate response */
1449 /* Possabilities :
1450 retransmit immediatly - race conditions
1451 retransmit after timeout - yes
1452 exit
1453 wait for packet, then exit
1454 */
1455 warning ("HMM: threadlist did not echo arg thread, dropping it\n");
1456 return 0; /* I choose simply exiting */
1457 }
1458 if (*result_count <= 0)
1459 {
1460 if (*done != 1)
1461 {
1462 warning ("RMT ERROR : failed to get remote thread list\n");
1463 result = 0;
1464 }
1465 return result; /* break; */
1466 }
1467 if (*result_count > result_limit)
1468 {
1469 *result_count = 0;
1470 warning ("RMT ERROR: threadlist response longer than requested\n");
1471 return 0;
1472 }
1473 return result;
1474 }
1475
1476 /* This is the interface between remote and threads, remotes upper interface */
1477
1478 /* remote_find_new_threads retrieves the thread list and for each
1479 thread in the list, looks up the thread in GDB's internal list,
1480 ading the thread if it does not already exist. This involves
1481 getting partial thread lists from the remote target so, polling the
1482 quit_flag is required. */
1483
1484
1485 /* About this many threadisds fit in a packet. */
1486
1487 #define MAXTHREADLISTRESULTS 32
1488
1489 static int
1490 remote_threadlist_iterator (stepfunction, context, looplimit)
1491 rmt_thread_action stepfunction;
1492 void *context;
1493 int looplimit;
1494 {
1495 int done, i, result_count;
1496 int startflag = 1;
1497 int result = 1;
1498 int loopcount = 0;
1499 static threadref nextthread;
1500 static threadref resultthreadlist[MAXTHREADLISTRESULTS];
1501
1502 done = 0;
1503 while (!done)
1504 {
1505 if (loopcount++ > looplimit)
1506 {
1507 result = 0;
1508 warning ("Remote fetch threadlist -infinite loop-\n");
1509 break;
1510 }
1511 if (!remote_get_threadlist (startflag, &nextthread, MAXTHREADLISTRESULTS,
1512 &done, &result_count, resultthreadlist))
1513 {
1514 result = 0;
1515 break;
1516 }
1517 /* clear for later iterations */
1518 startflag = 0;
1519 /* Setup to resume next batch of thread references, set nextthread. */
1520 if (result_count >= 1)
1521 copy_threadref (&nextthread, &resultthreadlist[result_count - 1]);
1522 i = 0;
1523 while (result_count--)
1524 if (!(result = (*stepfunction) (&resultthreadlist[i++], context)))
1525 break;
1526 }
1527 return result;
1528 }
1529
1530 static int
1531 remote_newthread_step (ref, context)
1532 threadref *ref;
1533 void *context;
1534 {
1535 int pid;
1536
1537 pid = threadref_to_int (ref);
1538 if (!in_thread_list (pid))
1539 add_thread (pid);
1540 return 1; /* continue iterator */
1541 }
1542
1543 #define CRAZY_MAX_THREADS 1000
1544
1545 static int
1546 remote_current_thread (oldpid)
1547 int oldpid;
1548 {
1549 char *buf = alloca (PBUFSIZ);
1550
1551 putpkt ("qC");
1552 getpkt (buf, 0);
1553 if (buf[0] == 'Q' && buf[1] == 'C')
1554 return strtol (&buf[2], NULL, 16);
1555 else
1556 return oldpid;
1557 }
1558
1559 /* Find new threads for info threads command. */
1560
1561 static void
1562 remote_find_new_threads ()
1563 {
1564 remote_threadlist_iterator (remote_newthread_step, 0,
1565 CRAZY_MAX_THREADS);
1566 if (inferior_pid == MAGIC_NULL_PID) /* ack ack ack */
1567 inferior_pid = remote_current_thread (inferior_pid);
1568 }
1569
1570 static void
1571 remote_threads_info (void)
1572 {
1573 char *buf = alloca (PBUFSIZ);
1574 char *bufp;
1575 int tid;
1576
1577 if (remote_desc == 0) /* paranoia */
1578 error ("Command can only be used when connected to the remote target.");
1579
1580 putpkt ("qfThreadInfo");
1581 getpkt (bufp = buf, 0);
1582 if (bufp[0] == '\0') /* q packet not recognized! */
1583 { /* try old jmetzler method */
1584 remote_find_new_threads ();
1585 return;
1586 }
1587 else /* try new 'q' method */
1588 while (*bufp++ == 'm') /* reply contains one or more TID */
1589 {
1590 do
1591 {
1592 tid = strtol (bufp, &bufp, 16);
1593 if (tid != 0 && !in_thread_list (tid))
1594 add_thread (tid);
1595 }
1596 while (*bufp++ == ','); /* comma-separated list */
1597 putpkt ("qsThreadInfo");
1598 getpkt (bufp = buf, 0);
1599 }
1600 }
1601 \f
1602
1603 /* Restart the remote side; this is an extended protocol operation. */
1604
1605 static void
1606 extended_remote_restart ()
1607 {
1608 char *buf = alloca (PBUFSIZ);
1609
1610 /* Send the restart command; for reasons I don't understand the
1611 remote side really expects a number after the "R". */
1612 buf[0] = 'R';
1613 sprintf (&buf[1], "%x", 0);
1614 putpkt (buf);
1615
1616 /* Now query for status so this looks just like we restarted
1617 gdbserver from scratch. */
1618 putpkt ("?");
1619 getpkt (buf, 0);
1620 }
1621 \f
1622 /* Clean up connection to a remote debugger. */
1623
1624 /* ARGSUSED */
1625 static void
1626 remote_close (quitting)
1627 int quitting;
1628 {
1629 if (remote_desc)
1630 SERIAL_CLOSE (remote_desc);
1631 remote_desc = NULL;
1632 }
1633
1634 /* Query the remote side for the text, data and bss offsets. */
1635
1636 static void
1637 get_offsets ()
1638 {
1639 char *buf = alloca (PBUFSIZ);
1640 char *ptr;
1641 int lose;
1642 CORE_ADDR text_addr, data_addr, bss_addr;
1643 struct section_offsets *offs;
1644
1645 putpkt ("qOffsets");
1646
1647 getpkt (buf, 0);
1648
1649 if (buf[0] == '\000')
1650 return; /* Return silently. Stub doesn't support
1651 this command. */
1652 if (buf[0] == 'E')
1653 {
1654 warning ("Remote failure reply: %s", buf);
1655 return;
1656 }
1657
1658 /* Pick up each field in turn. This used to be done with scanf, but
1659 scanf will make trouble if CORE_ADDR size doesn't match
1660 conversion directives correctly. The following code will work
1661 with any size of CORE_ADDR. */
1662 text_addr = data_addr = bss_addr = 0;
1663 ptr = buf;
1664 lose = 0;
1665
1666 if (strncmp (ptr, "Text=", 5) == 0)
1667 {
1668 ptr += 5;
1669 /* Don't use strtol, could lose on big values. */
1670 while (*ptr && *ptr != ';')
1671 text_addr = (text_addr << 4) + fromhex (*ptr++);
1672 }
1673 else
1674 lose = 1;
1675
1676 if (!lose && strncmp (ptr, ";Data=", 6) == 0)
1677 {
1678 ptr += 6;
1679 while (*ptr && *ptr != ';')
1680 data_addr = (data_addr << 4) + fromhex (*ptr++);
1681 }
1682 else
1683 lose = 1;
1684
1685 if (!lose && strncmp (ptr, ";Bss=", 5) == 0)
1686 {
1687 ptr += 5;
1688 while (*ptr && *ptr != ';')
1689 bss_addr = (bss_addr << 4) + fromhex (*ptr++);
1690 }
1691 else
1692 lose = 1;
1693
1694 if (lose)
1695 error ("Malformed response to offset query, %s", buf);
1696
1697 if (symfile_objfile == NULL)
1698 return;
1699
1700 offs = (struct section_offsets *) alloca (SIZEOF_SECTION_OFFSETS);
1701 memcpy (offs, symfile_objfile->section_offsets, SIZEOF_SECTION_OFFSETS);
1702
1703 ANOFFSET (offs, SECT_OFF_TEXT) = text_addr;
1704
1705 /* This is a temporary kludge to force data and bss to use the same offsets
1706 because that's what nlmconv does now. The real solution requires changes
1707 to the stub and remote.c that I don't have time to do right now. */
1708
1709 ANOFFSET (offs, SECT_OFF_DATA) = data_addr;
1710 ANOFFSET (offs, SECT_OFF_BSS) = data_addr;
1711
1712 objfile_relocate (symfile_objfile, offs);
1713 }
1714
1715 /*
1716 * Cisco version of section offsets:
1717 *
1718 * Instead of having GDB query the target for the section offsets,
1719 * Cisco lets the target volunteer the information! It's also in
1720 * a different format, so here are the functions that will decode
1721 * a section offset packet from a Cisco target.
1722 */
1723
1724 /*
1725 * Function: remote_cisco_section_offsets
1726 *
1727 * Returns: zero for success, non-zero for failure
1728 */
1729
1730 static int
1731 remote_cisco_section_offsets (text_addr, data_addr, bss_addr,
1732 text_offs, data_offs, bss_offs)
1733 bfd_vma text_addr;
1734 bfd_vma data_addr;
1735 bfd_vma bss_addr;
1736 bfd_signed_vma *text_offs;
1737 bfd_signed_vma *data_offs;
1738 bfd_signed_vma *bss_offs;
1739 {
1740 bfd_vma text_base, data_base, bss_base;
1741 struct minimal_symbol *start;
1742 asection *sect;
1743 bfd *abfd;
1744 int len;
1745 char *p;
1746
1747 if (symfile_objfile == NULL)
1748 return -1; /* no can do nothin' */
1749
1750 start = lookup_minimal_symbol ("_start", NULL, NULL);
1751 if (start == NULL)
1752 return -1; /* Can't find "_start" symbol */
1753
1754 data_base = bss_base = 0;
1755 text_base = SYMBOL_VALUE_ADDRESS (start);
1756
1757 abfd = symfile_objfile->obfd;
1758 for (sect = abfd->sections;
1759 sect != 0;
1760 sect = sect->next)
1761 {
1762 p = (unsigned char *) bfd_get_section_name (abfd, sect);
1763 len = strlen (p);
1764 if (strcmp (p + len - 4, "data") == 0) /* ends in "data" */
1765 if (data_base == 0 ||
1766 data_base > bfd_get_section_vma (abfd, sect))
1767 data_base = bfd_get_section_vma (abfd, sect);
1768 if (strcmp (p + len - 3, "bss") == 0) /* ends in "bss" */
1769 if (bss_base == 0 ||
1770 bss_base > bfd_get_section_vma (abfd, sect))
1771 bss_base = bfd_get_section_vma (abfd, sect);
1772 }
1773 *text_offs = text_addr - text_base;
1774 *data_offs = data_addr - data_base;
1775 *bss_offs = bss_addr - bss_base;
1776 if (remote_debug)
1777 {
1778 char tmp[128];
1779
1780 sprintf (tmp, "VMA: text = 0x");
1781 sprintf_vma (tmp + strlen (tmp), text_addr);
1782 sprintf (tmp + strlen (tmp), " data = 0x");
1783 sprintf_vma (tmp + strlen (tmp), data_addr);
1784 sprintf (tmp + strlen (tmp), " bss = 0x");
1785 sprintf_vma (tmp + strlen (tmp), bss_addr);
1786 fprintf_filtered (gdb_stdlog, tmp);
1787 fprintf_filtered (gdb_stdlog,
1788 "Reloc offset: text = 0x%s data = 0x%s bss = 0x%s\n",
1789 paddr_nz (*text_offs),
1790 paddr_nz (*data_offs),
1791 paddr_nz (*bss_offs));
1792 }
1793
1794 return 0;
1795 }
1796
1797 /*
1798 * Function: remote_cisco_objfile_relocate
1799 *
1800 * Relocate the symbol file for a remote target.
1801 */
1802
1803 void
1804 remote_cisco_objfile_relocate (text_off, data_off, bss_off)
1805 bfd_signed_vma text_off;
1806 bfd_signed_vma data_off;
1807 bfd_signed_vma bss_off;
1808 {
1809 struct section_offsets *offs;
1810
1811 if (text_off != 0 || data_off != 0 || bss_off != 0)
1812 {
1813 /* FIXME: This code assumes gdb-stabs.h is being used; it's
1814 broken for xcoff, dwarf, sdb-coff, etc. But there is no
1815 simple canonical representation for this stuff. */
1816
1817 offs = (struct section_offsets *) alloca (SIZEOF_SECTION_OFFSETS);
1818 memcpy (offs, symfile_objfile->section_offsets, SIZEOF_SECTION_OFFSETS);
1819
1820 ANOFFSET (offs, SECT_OFF_TEXT) = text_off;
1821 ANOFFSET (offs, SECT_OFF_DATA) = data_off;
1822 ANOFFSET (offs, SECT_OFF_BSS) = bss_off;
1823
1824 /* First call the standard objfile_relocate. */
1825 objfile_relocate (symfile_objfile, offs);
1826
1827 /* Now we need to fix up the section entries already attached to
1828 the exec target. These entries will control memory transfers
1829 from the exec file. */
1830
1831 exec_set_section_offsets (text_off, data_off, bss_off);
1832 }
1833 }
1834
1835 /* Stub for catch_errors. */
1836
1837 static int
1838 remote_start_remote_dummy (dummy)
1839 char *dummy;
1840 {
1841 start_remote (); /* Initialize gdb process mechanisms */
1842 return 1;
1843 }
1844
1845 static int
1846 remote_start_remote (dummy)
1847 PTR dummy;
1848 {
1849 immediate_quit = 1; /* Allow user to interrupt it */
1850
1851 /* Ack any packet which the remote side has already sent. */
1852 SERIAL_WRITE (remote_desc, "+", 1);
1853
1854 /* Let the stub know that we want it to return the thread. */
1855 set_thread (-1, 0);
1856
1857 inferior_pid = remote_current_thread (inferior_pid);
1858
1859 get_offsets (); /* Get text, data & bss offsets */
1860
1861 putpkt ("?"); /* initiate a query from remote machine */
1862 immediate_quit = 0;
1863
1864 return remote_start_remote_dummy (dummy);
1865 }
1866
1867 /* Open a connection to a remote debugger.
1868 NAME is the filename used for communication. */
1869
1870 static void
1871 remote_open (name, from_tty)
1872 char *name;
1873 int from_tty;
1874 {
1875 remote_open_1 (name, from_tty, &remote_ops, 0);
1876 }
1877
1878 /* Just like remote_open, but with asynchronous support. */
1879 static void
1880 remote_async_open (name, from_tty)
1881 char *name;
1882 int from_tty;
1883 {
1884 remote_async_open_1 (name, from_tty, &remote_async_ops, 0);
1885 }
1886
1887 /* Open a connection to a remote debugger using the extended
1888 remote gdb protocol. NAME is the filename used for communication. */
1889
1890 static void
1891 extended_remote_open (name, from_tty)
1892 char *name;
1893 int from_tty;
1894 {
1895 remote_open_1 (name, from_tty, &extended_remote_ops, 1 /*extended_p */ );
1896 }
1897
1898 /* Just like extended_remote_open, but with asynchronous support. */
1899 static void
1900 extended_remote_async_open (name, from_tty)
1901 char *name;
1902 int from_tty;
1903 {
1904 remote_async_open_1 (name, from_tty, &extended_async_remote_ops, 1 /*extended_p */ );
1905 }
1906
1907 /* Generic code for opening a connection to a remote target. */
1908
1909 static DCACHE *remote_dcache;
1910
1911 static void
1912 remote_open_1 (name, from_tty, target, extended_p)
1913 char *name;
1914 int from_tty;
1915 struct target_ops *target;
1916 int extended_p;
1917 {
1918 if (name == 0)
1919 error ("To open a remote debug connection, you need to specify what\n\
1920 serial device is attached to the remote system (e.g. /dev/ttya).");
1921
1922 /* See FIXME above */
1923 wait_forever_enabled_p = 1;
1924
1925 target_preopen (from_tty);
1926
1927 unpush_target (target);
1928
1929 remote_dcache = dcache_init (remote_read_bytes, remote_write_bytes);
1930
1931 remote_desc = SERIAL_OPEN (name);
1932 if (!remote_desc)
1933 perror_with_name (name);
1934
1935 if (baud_rate != -1)
1936 {
1937 if (SERIAL_SETBAUDRATE (remote_desc, baud_rate))
1938 {
1939 SERIAL_CLOSE (remote_desc);
1940 perror_with_name (name);
1941 }
1942 }
1943
1944 SERIAL_RAW (remote_desc);
1945
1946 /* If there is something sitting in the buffer we might take it as a
1947 response to a command, which would be bad. */
1948 SERIAL_FLUSH_INPUT (remote_desc);
1949
1950 if (from_tty)
1951 {
1952 puts_filtered ("Remote debugging using ");
1953 puts_filtered (name);
1954 puts_filtered ("\n");
1955 }
1956 push_target (target); /* Switch to using remote target now */
1957
1958 init_packet_config (&remote_protocol_P);
1959 init_packet_config (&remote_protocol_Z);
1960
1961 general_thread = -2;
1962 continue_thread = -2;
1963
1964 /* Force remote_write_bytes to check whether target supports
1965 binary downloading. */
1966 init_packet_config (&remote_protocol_binary_download);
1967
1968 /* Without this, some commands which require an active target (such
1969 as kill) won't work. This variable serves (at least) double duty
1970 as both the pid of the target process (if it has such), and as a
1971 flag indicating that a target is active. These functions should
1972 be split out into seperate variables, especially since GDB will
1973 someday have a notion of debugging several processes. */
1974
1975 inferior_pid = MAGIC_NULL_PID;
1976 /* Start the remote connection; if error (0), discard this target.
1977 In particular, if the user quits, be sure to discard it
1978 (we'd be in an inconsistent state otherwise). */
1979 if (!catch_errors (remote_start_remote, NULL,
1980 "Couldn't establish connection to remote target\n",
1981 RETURN_MASK_ALL))
1982 {
1983 pop_target ();
1984 return;
1985 }
1986
1987 if (extended_p)
1988 {
1989 /* tell the remote that we're using the extended protocol. */
1990 char *buf = alloca (PBUFSIZ);
1991 putpkt ("!");
1992 getpkt (buf, 0);
1993 }
1994 }
1995
1996 /* Just like remote_open but with asynchronous support. */
1997 static void
1998 remote_async_open_1 (name, from_tty, target, extended_p)
1999 char *name;
2000 int from_tty;
2001 struct target_ops *target;
2002 int extended_p;
2003 {
2004 if (name == 0)
2005 error ("To open a remote debug connection, you need to specify what\n\
2006 serial device is attached to the remote system (e.g. /dev/ttya).");
2007
2008 target_preopen (from_tty);
2009
2010 unpush_target (target);
2011
2012 remote_dcache = dcache_init (remote_read_bytes, remote_write_bytes);
2013
2014 remote_desc = SERIAL_OPEN (name);
2015 if (!remote_desc)
2016 perror_with_name (name);
2017
2018 if (baud_rate != -1)
2019 {
2020 if (SERIAL_SETBAUDRATE (remote_desc, baud_rate))
2021 {
2022 SERIAL_CLOSE (remote_desc);
2023 perror_with_name (name);
2024 }
2025 }
2026
2027 SERIAL_RAW (remote_desc);
2028
2029 /* If there is something sitting in the buffer we might take it as a
2030 response to a command, which would be bad. */
2031 SERIAL_FLUSH_INPUT (remote_desc);
2032
2033 if (from_tty)
2034 {
2035 puts_filtered ("Remote debugging using ");
2036 puts_filtered (name);
2037 puts_filtered ("\n");
2038 }
2039
2040 push_target (target); /* Switch to using remote target now */
2041
2042 init_packet_config (&remote_protocol_P);
2043 init_packet_config (&remote_protocol_Z);
2044
2045 general_thread = -2;
2046 continue_thread = -2;
2047
2048 /* Force remote_write_bytes to check whether target supports
2049 binary downloading. */
2050 init_packet_config (&remote_protocol_binary_download);
2051
2052 /* Without this, some commands which require an active target (such
2053 as kill) won't work. This variable serves (at least) double duty
2054 as both the pid of the target process (if it has such), and as a
2055 flag indicating that a target is active. These functions should
2056 be split out into seperate variables, especially since GDB will
2057 someday have a notion of debugging several processes. */
2058 inferior_pid = MAGIC_NULL_PID;
2059
2060 /* With this target we start out by owning the terminal. */
2061 remote_async_terminal_ours_p = 1;
2062
2063 /* FIXME: cagney/1999-09-23: During the initial connection it is
2064 assumed that the target is already ready and able to respond to
2065 requests. Unfortunatly remote_start_remote() eventually calls
2066 wait_for_inferior() with no timeout. wait_forever_enabled_p gets
2067 around this. Eventually a mechanism that allows
2068 wait_for_inferior() to expect/get timeouts will be
2069 implemented. */
2070 wait_forever_enabled_p = 0;
2071
2072 /* Start the remote connection; if error (0), discard this target.
2073 In particular, if the user quits, be sure to discard it
2074 (we'd be in an inconsistent state otherwise). */
2075 if (!catch_errors (remote_start_remote, NULL,
2076 "Couldn't establish connection to remote target\n",
2077 RETURN_MASK_ALL))
2078 {
2079 pop_target ();
2080 wait_forever_enabled_p = 1;
2081 return;
2082 }
2083
2084 wait_forever_enabled_p = 1;
2085
2086 if (extended_p)
2087 {
2088 /* tell the remote that we're using the extended protocol. */
2089 char *buf = alloca (PBUFSIZ);
2090 putpkt ("!");
2091 getpkt (buf, 0);
2092 }
2093 }
2094
2095 /* This takes a program previously attached to and detaches it. After
2096 this is done, GDB can be used to debug some other program. We
2097 better not have left any breakpoints in the target program or it'll
2098 die when it hits one. */
2099
2100 static void
2101 remote_detach (args, from_tty)
2102 char *args;
2103 int from_tty;
2104 {
2105 char *buf = alloca (PBUFSIZ);
2106
2107 if (args)
2108 error ("Argument given to \"detach\" when remotely debugging.");
2109
2110 /* Tell the remote target to detach. */
2111 strcpy (buf, "D");
2112 remote_send (buf);
2113
2114 pop_target ();
2115 if (from_tty)
2116 puts_filtered ("Ending remote debugging.\n");
2117
2118 }
2119
2120 /* Same as remote_detach, but with async support. */
2121 static void
2122 remote_async_detach (args, from_tty)
2123 char *args;
2124 int from_tty;
2125 {
2126 char *buf = alloca (PBUFSIZ);
2127
2128 if (args)
2129 error ("Argument given to \"detach\" when remotely debugging.");
2130
2131 /* Tell the remote target to detach. */
2132 strcpy (buf, "D");
2133 remote_send (buf);
2134
2135 /* Unregister the file descriptor from the event loop. */
2136 if (SERIAL_IS_ASYNC_P (remote_desc))
2137 SERIAL_ASYNC (remote_desc, NULL, 0);
2138
2139 pop_target ();
2140 if (from_tty)
2141 puts_filtered ("Ending remote debugging.\n");
2142 }
2143
2144 /* Convert hex digit A to a number. */
2145
2146 int
2147 fromhex (a)
2148 int a;
2149 {
2150 if (a >= '0' && a <= '9')
2151 return a - '0';
2152 else if (a >= 'a' && a <= 'f')
2153 return a - 'a' + 10;
2154 else if (a >= 'A' && a <= 'F')
2155 return a - 'A' + 10;
2156 else
2157 error ("Reply contains invalid hex digit %d", a);
2158 }
2159
2160 /* Convert number NIB to a hex digit. */
2161
2162 static int
2163 tohex (nib)
2164 int nib;
2165 {
2166 if (nib < 10)
2167 return '0' + nib;
2168 else
2169 return 'a' + nib - 10;
2170 }
2171 \f
2172 /* Tell the remote machine to resume. */
2173
2174 static enum target_signal last_sent_signal = TARGET_SIGNAL_0;
2175
2176 static int last_sent_step;
2177
2178 static void
2179 remote_resume (pid, step, siggnal)
2180 int pid, step;
2181 enum target_signal siggnal;
2182 {
2183 char *buf = alloca (PBUFSIZ);
2184
2185 if (pid == -1)
2186 set_thread (0, 0); /* run any thread */
2187 else
2188 set_thread (pid, 0); /* run this thread */
2189
2190 dcache_flush (remote_dcache);
2191
2192 last_sent_signal = siggnal;
2193 last_sent_step = step;
2194
2195 /* A hook for when we need to do something at the last moment before
2196 resumption. */
2197 if (target_resume_hook)
2198 (*target_resume_hook) ();
2199
2200 if (siggnal != TARGET_SIGNAL_0)
2201 {
2202 buf[0] = step ? 'S' : 'C';
2203 buf[1] = tohex (((int) siggnal >> 4) & 0xf);
2204 buf[2] = tohex ((int) siggnal & 0xf);
2205 buf[3] = '\0';
2206 }
2207 else
2208 strcpy (buf, step ? "s" : "c");
2209
2210 putpkt (buf);
2211 }
2212
2213 /* Same as remote_resume, but with async support. */
2214 static void
2215 remote_async_resume (pid, step, siggnal)
2216 int pid, step;
2217 enum target_signal siggnal;
2218 {
2219 char *buf = alloca (PBUFSIZ);
2220
2221 if (pid == -1)
2222 set_thread (0, 0); /* run any thread */
2223 else
2224 set_thread (pid, 0); /* run this thread */
2225
2226 dcache_flush (remote_dcache);
2227
2228 last_sent_signal = siggnal;
2229 last_sent_step = step;
2230
2231 /* A hook for when we need to do something at the last moment before
2232 resumption. */
2233 if (target_resume_hook)
2234 (*target_resume_hook) ();
2235
2236 if (siggnal != TARGET_SIGNAL_0)
2237 {
2238 buf[0] = step ? 'S' : 'C';
2239 buf[1] = tohex (((int) siggnal >> 4) & 0xf);
2240 buf[2] = tohex ((int) siggnal & 0xf);
2241 buf[3] = '\0';
2242 }
2243 else
2244 strcpy (buf, step ? "s" : "c");
2245
2246 /* We are about to start executing the inferior, let's register it
2247 with the event loop. NOTE: this is the one place where all the
2248 execution commands end up. We could alternatively do this in each
2249 of the execution commands in infcmd.c.*/
2250 /* FIXME: ezannoni 1999-09-28: We may need to move this out of here
2251 into infcmd.c in order to allow inferior function calls to work
2252 NOT asynchronously. */
2253 if (event_loop_p && SERIAL_CAN_ASYNC_P (remote_desc))
2254 target_async (inferior_event_handler, 0);
2255 /* Tell the world that the target is now executing. */
2256 /* FIXME: cagney/1999-09-23: Is it the targets responsibility to set
2257 this? Instead, should the client of target just assume (for
2258 async targets) that the target is going to start executing? Is
2259 this information already found in the continuation block? */
2260 if (SERIAL_IS_ASYNC_P (remote_desc))
2261 target_executing = 1;
2262 putpkt (buf);
2263 }
2264 \f
2265
2266 /* Set up the signal handler for SIGINT, while the target is
2267 executing, ovewriting the 'regular' SIGINT signal handler. */
2268 static void
2269 initialize_sigint_signal_handler ()
2270 {
2271 sigint_remote_token =
2272 create_async_signal_handler (async_remote_interrupt, NULL);
2273 signal (SIGINT, handle_remote_sigint);
2274 }
2275
2276 /* Signal handler for SIGINT, while the target is executing. */
2277 static void
2278 handle_remote_sigint (sig)
2279 int sig;
2280 {
2281 signal (sig, handle_remote_sigint_twice);
2282 sigint_remote_twice_token =
2283 create_async_signal_handler (async_remote_interrupt_twice, NULL);
2284 mark_async_signal_handler_wrapper (sigint_remote_token);
2285 }
2286
2287 /* Signal handler for SIGINT, installed after SIGINT has already been
2288 sent once. It will take effect the second time that the user sends
2289 a ^C. */
2290 static void
2291 handle_remote_sigint_twice (sig)
2292 int sig;
2293 {
2294 signal (sig, handle_sigint);
2295 sigint_remote_twice_token =
2296 create_async_signal_handler (inferior_event_handler_wrapper, NULL);
2297 mark_async_signal_handler_wrapper (sigint_remote_twice_token);
2298 }
2299
2300 /* Perform the real interruption of the target execution, in response
2301 to a ^C. */
2302 static void
2303 async_remote_interrupt (arg)
2304 gdb_client_data arg;
2305 {
2306 if (remote_debug)
2307 fprintf_unfiltered (gdb_stdlog, "remote_interrupt called\n");
2308
2309 target_stop ();
2310 }
2311
2312 /* Perform interrupt, if the first attempt did not succeed. Just give
2313 up on the target alltogether. */
2314 void
2315 async_remote_interrupt_twice (arg)
2316 gdb_client_data arg;
2317 {
2318 if (remote_debug)
2319 fprintf_unfiltered (gdb_stdlog, "remote_interrupt_twice called\n");
2320 /* Do something only if the target was not killed by the previous
2321 cntl-C. */
2322 if (target_executing)
2323 {
2324 interrupt_query ();
2325 signal (SIGINT, handle_remote_sigint);
2326 }
2327 }
2328
2329 /* Reinstall the usual SIGINT handlers, after the target has
2330 stopped. */
2331 static void
2332 cleanup_sigint_signal_handler (void *dummy)
2333 {
2334 signal (SIGINT, handle_sigint);
2335 if (sigint_remote_twice_token)
2336 delete_async_signal_handler ((struct async_signal_handler **) & sigint_remote_twice_token);
2337 if (sigint_remote_token)
2338 delete_async_signal_handler ((struct async_signal_handler **) & sigint_remote_token);
2339 }
2340
2341 /* Send ^C to target to halt it. Target will respond, and send us a
2342 packet. */
2343 static void (*ofunc) PARAMS ((int));
2344
2345 /* The command line interface's stop routine. This function is installed
2346 as a signal handler for SIGINT. The first time a user requests a
2347 stop, we call remote_stop to send a break or ^C. If there is no
2348 response from the target (it didn't stop when the user requested it),
2349 we ask the user if he'd like to detach from the target. */
2350 static void
2351 remote_interrupt (signo)
2352 int signo;
2353 {
2354 /* If this doesn't work, try more severe steps. */
2355 signal (signo, remote_interrupt_twice);
2356
2357 if (remote_debug)
2358 fprintf_unfiltered (gdb_stdlog, "remote_interrupt called\n");
2359
2360 target_stop ();
2361 }
2362
2363 /* The user typed ^C twice. */
2364
2365 static void
2366 remote_interrupt_twice (signo)
2367 int signo;
2368 {
2369 signal (signo, ofunc);
2370 interrupt_query ();
2371 signal (signo, remote_interrupt);
2372 }
2373
2374 /* This is the generic stop called via the target vector. When a target
2375 interrupt is requested, either by the command line or the GUI, we
2376 will eventually end up here. */
2377 static void
2378 remote_stop ()
2379 {
2380 /* Send a break or a ^C, depending on user preference. */
2381 if (remote_debug)
2382 fprintf_unfiltered (gdb_stdlog, "remote_stop called\n");
2383
2384 if (remote_break)
2385 SERIAL_SEND_BREAK (remote_desc);
2386 else
2387 SERIAL_WRITE (remote_desc, "\003", 1);
2388 }
2389
2390 /* Ask the user what to do when an interrupt is received. */
2391
2392 static void
2393 interrupt_query ()
2394 {
2395 target_terminal_ours ();
2396
2397 if (query ("Interrupted while waiting for the program.\n\
2398 Give up (and stop debugging it)? "))
2399 {
2400 target_mourn_inferior ();
2401 return_to_top_level (RETURN_QUIT);
2402 }
2403
2404 target_terminal_inferior ();
2405 }
2406
2407 /* Enable/disable target terminal ownership. Most targets can use
2408 terminal groups to control terminal ownership. Remote targets are
2409 different in that explicit transfer of ownership to/from GDB/target
2410 is required. */
2411
2412 static void
2413 remote_async_terminal_inferior (void)
2414 {
2415 /* FIXME: cagney/1999-09-27: Shouldn't need to test for
2416 sync_execution here. This function should only be called when
2417 GDB is resuming the inferior in the forground. A background
2418 resume (``run&'') should leave GDB in control of the terminal and
2419 consequently should not call this code. */
2420 if (!sync_execution)
2421 return;
2422 /* FIXME: cagney/1999-09-27: Closely related to the above. Make
2423 calls target_terminal_*() idenpotent. The event-loop GDB talking
2424 to an asynchronous target with a synchronous command calls this
2425 function from both event-top.c and infrun.c/infcmd.c. Once GDB
2426 stops trying to transfer the terminal to the target when it
2427 shouldn't this guard can go away. */
2428 if (!remote_async_terminal_ours_p)
2429 return;
2430 delete_file_handler (input_fd);
2431 remote_async_terminal_ours_p = 0;
2432 initialize_sigint_signal_handler ();
2433 /* NOTE: At this point we could also register our selves as the
2434 recipient of all input. Any characters typed could then be
2435 passed on down to the target. */
2436 }
2437
2438 static void
2439 remote_async_terminal_ours (void)
2440 {
2441 /* See FIXME in remote_async_terminal_inferior. */
2442 if (!sync_execution)
2443 return;
2444 /* See FIXME in remote_async_terminal_inferior. */
2445 if (remote_async_terminal_ours_p)
2446 return;
2447 cleanup_sigint_signal_handler (NULL);
2448 add_file_handler (input_fd, stdin_event_handler, 0);
2449 remote_async_terminal_ours_p = 1;
2450 }
2451
2452 /* If nonzero, ignore the next kill. */
2453
2454 int kill_kludge;
2455
2456 void
2457 remote_console_output (char *msg)
2458 {
2459 char *p;
2460
2461 for (p = msg; p[0] && p[1]; p += 2)
2462 {
2463 char tb[2];
2464 char c = fromhex (p[0]) * 16 + fromhex (p[1]);
2465 tb[0] = c;
2466 tb[1] = 0;
2467 fputs_unfiltered (tb, gdb_stdtarg);
2468 }
2469 gdb_flush (gdb_stdtarg);
2470 }
2471
2472 /* Wait until the remote machine stops, then return,
2473 storing status in STATUS just as `wait' would.
2474 Returns "pid", which in the case of a multi-threaded
2475 remote OS, is the thread-id. */
2476
2477 static int
2478 remote_wait (pid, status)
2479 int pid;
2480 struct target_waitstatus *status;
2481 {
2482 unsigned char *buf = alloca (PBUFSIZ);
2483 int thread_num = -1;
2484
2485 status->kind = TARGET_WAITKIND_EXITED;
2486 status->value.integer = 0;
2487
2488 while (1)
2489 {
2490 unsigned char *p;
2491
2492 ofunc = signal (SIGINT, remote_interrupt);
2493 getpkt ((char *) buf, 1);
2494 signal (SIGINT, ofunc);
2495
2496 /* This is a hook for when we need to do something (perhaps the
2497 collection of trace data) every time the target stops. */
2498 if (target_wait_loop_hook)
2499 (*target_wait_loop_hook) ();
2500
2501 switch (buf[0])
2502 {
2503 case 'E': /* Error of some sort */
2504 warning ("Remote failure reply: %s", buf);
2505 continue;
2506 case 'T': /* Status with PC, SP, FP, ... */
2507 {
2508 int i;
2509 long regno;
2510 char regs[MAX_REGISTER_RAW_SIZE];
2511
2512 /* Expedited reply, containing Signal, {regno, reg} repeat */
2513 /* format is: 'Tssn...:r...;n...:r...;n...:r...;#cc', where
2514 ss = signal number
2515 n... = register number
2516 r... = register contents
2517 */
2518 p = &buf[3]; /* after Txx */
2519
2520 while (*p)
2521 {
2522 unsigned char *p1;
2523 char *p_temp;
2524
2525 /* Read the register number */
2526 regno = strtol ((const char *) p, &p_temp, 16);
2527 p1 = (unsigned char *) p_temp;
2528
2529 if (p1 == p) /* No register number present here */
2530 {
2531 p1 = (unsigned char *) strchr ((const char *) p, ':');
2532 if (p1 == NULL)
2533 warning ("Malformed packet(a) (missing colon): %s\n\
2534 Packet: '%s'\n",
2535 p, buf);
2536 if (strncmp ((const char *) p, "thread", p1 - p) == 0)
2537 {
2538 p_temp = unpack_varlen_hex (++p1, &thread_num);
2539 record_currthread (thread_num);
2540 p = (unsigned char *) p_temp;
2541 }
2542 }
2543 else
2544 {
2545 p = p1;
2546
2547 if (*p++ != ':')
2548 warning ("Malformed packet(b) (missing colon): %s\n\
2549 Packet: '%s'\n",
2550 p, buf);
2551
2552 if (regno >= NUM_REGS)
2553 warning ("Remote sent bad register number %ld: %s\n\
2554 Packet: '%s'\n",
2555 regno, p, buf);
2556
2557 for (i = 0; i < REGISTER_RAW_SIZE (regno); i++)
2558 {
2559 if (p[0] == 0 || p[1] == 0)
2560 warning ("Remote reply is too short: %s", buf);
2561 regs[i] = fromhex (p[0]) * 16 + fromhex (p[1]);
2562 p += 2;
2563 }
2564 supply_register (regno, regs);
2565 }
2566
2567 if (*p++ != ';')
2568 {
2569 warning ("Remote register badly formatted: %s", buf);
2570 warning (" here: %s", p);
2571 }
2572 }
2573 }
2574 /* fall through */
2575 case 'S': /* Old style status, just signal only */
2576 status->kind = TARGET_WAITKIND_STOPPED;
2577 status->value.sig = (enum target_signal)
2578 (((fromhex (buf[1])) << 4) + (fromhex (buf[2])));
2579
2580 if (buf[3] == 'p')
2581 {
2582 /* Export Cisco kernel mode as a convenience variable
2583 (so that it can be used in the GDB prompt if desired). */
2584
2585 if (cisco_kernel_mode == 1)
2586 set_internalvar (lookup_internalvar ("cisco_kernel_mode"),
2587 value_from_string ("PDEBUG-"));
2588 cisco_kernel_mode = 0;
2589 thread_num = strtol ((const char *) &buf[4], NULL, 16);
2590 record_currthread (thread_num);
2591 }
2592 else if (buf[3] == 'k')
2593 {
2594 /* Export Cisco kernel mode as a convenience variable
2595 (so that it can be used in the GDB prompt if desired). */
2596
2597 if (cisco_kernel_mode == 1)
2598 set_internalvar (lookup_internalvar ("cisco_kernel_mode"),
2599 value_from_string ("KDEBUG-"));
2600 cisco_kernel_mode = 1;
2601 }
2602 goto got_status;
2603 case 'N': /* Cisco special: status and offsets */
2604 {
2605 bfd_vma text_addr, data_addr, bss_addr;
2606 bfd_signed_vma text_off, data_off, bss_off;
2607 unsigned char *p1;
2608
2609 status->kind = TARGET_WAITKIND_STOPPED;
2610 status->value.sig = (enum target_signal)
2611 (((fromhex (buf[1])) << 4) + (fromhex (buf[2])));
2612
2613 if (symfile_objfile == NULL)
2614 {
2615 warning ("Relocation packet received with no symbol file. \
2616 Packet Dropped");
2617 goto got_status;
2618 }
2619
2620 /* Relocate object file. Buffer format is NAATT;DD;BB
2621 * where AA is the signal number, TT is the new text
2622 * address, DD * is the new data address, and BB is the
2623 * new bss address. */
2624
2625 p = &buf[3];
2626 text_addr = strtoul (p, (char **) &p1, 16);
2627 if (p1 == p || *p1 != ';')
2628 warning ("Malformed relocation packet: Packet '%s'", buf);
2629 p = p1 + 1;
2630 data_addr = strtoul (p, (char **) &p1, 16);
2631 if (p1 == p || *p1 != ';')
2632 warning ("Malformed relocation packet: Packet '%s'", buf);
2633 p = p1 + 1;
2634 bss_addr = strtoul (p, (char **) &p1, 16);
2635 if (p1 == p)
2636 warning ("Malformed relocation packet: Packet '%s'", buf);
2637
2638 if (remote_cisco_section_offsets (text_addr, data_addr, bss_addr,
2639 &text_off, &data_off, &bss_off)
2640 == 0)
2641 if (text_off != 0 || data_off != 0 || bss_off != 0)
2642 remote_cisco_objfile_relocate (text_off, data_off, bss_off);
2643
2644 goto got_status;
2645 }
2646 case 'W': /* Target exited */
2647 {
2648 /* The remote process exited. */
2649 status->kind = TARGET_WAITKIND_EXITED;
2650 status->value.integer = (fromhex (buf[1]) << 4) + fromhex (buf[2]);
2651 goto got_status;
2652 }
2653 case 'X':
2654 status->kind = TARGET_WAITKIND_SIGNALLED;
2655 status->value.sig = (enum target_signal)
2656 (((fromhex (buf[1])) << 4) + (fromhex (buf[2])));
2657 kill_kludge = 1;
2658
2659 goto got_status;
2660 case 'O': /* Console output */
2661 remote_console_output (buf + 1);
2662 continue;
2663 case '\0':
2664 if (last_sent_signal != TARGET_SIGNAL_0)
2665 {
2666 /* Zero length reply means that we tried 'S' or 'C' and
2667 the remote system doesn't support it. */
2668 target_terminal_ours_for_output ();
2669 printf_filtered
2670 ("Can't send signals to this remote system. %s not sent.\n",
2671 target_signal_to_name (last_sent_signal));
2672 last_sent_signal = TARGET_SIGNAL_0;
2673 target_terminal_inferior ();
2674
2675 strcpy ((char *) buf, last_sent_step ? "s" : "c");
2676 putpkt ((char *) buf);
2677 continue;
2678 }
2679 /* else fallthrough */
2680 default:
2681 warning ("Invalid remote reply: %s", buf);
2682 continue;
2683 }
2684 }
2685 got_status:
2686 if (thread_num != -1)
2687 {
2688 return thread_num;
2689 }
2690 return inferior_pid;
2691 }
2692
2693 /* Async version of remote_wait. */
2694 static int
2695 remote_async_wait (pid, status)
2696 int pid;
2697 struct target_waitstatus *status;
2698 {
2699 unsigned char *buf = alloca (PBUFSIZ);
2700 int thread_num = -1;
2701
2702 status->kind = TARGET_WAITKIND_EXITED;
2703 status->value.integer = 0;
2704
2705 while (1)
2706 {
2707 unsigned char *p;
2708
2709 if (!SERIAL_IS_ASYNC_P (remote_desc))
2710 ofunc = signal (SIGINT, remote_interrupt);
2711 /* FIXME: cagney/1999-09-27: If we're in async mode we should
2712 _never_ wait for ever -> test on target_is_async_p().
2713 However, before we do that we need to ensure that the caller
2714 knows how to take the target into/out of async mode. */
2715 getpkt ((char *) buf, wait_forever_enabled_p);
2716 if (!SERIAL_IS_ASYNC_P (remote_desc))
2717 signal (SIGINT, ofunc);
2718
2719 /* This is a hook for when we need to do something (perhaps the
2720 collection of trace data) every time the target stops. */
2721 if (target_wait_loop_hook)
2722 (*target_wait_loop_hook) ();
2723
2724 switch (buf[0])
2725 {
2726 case 'E': /* Error of some sort */
2727 warning ("Remote failure reply: %s", buf);
2728 continue;
2729 case 'T': /* Status with PC, SP, FP, ... */
2730 {
2731 int i;
2732 long regno;
2733 char regs[MAX_REGISTER_RAW_SIZE];
2734
2735 /* Expedited reply, containing Signal, {regno, reg} repeat */
2736 /* format is: 'Tssn...:r...;n...:r...;n...:r...;#cc', where
2737 ss = signal number
2738 n... = register number
2739 r... = register contents
2740 */
2741 p = &buf[3]; /* after Txx */
2742
2743 while (*p)
2744 {
2745 unsigned char *p1;
2746 char *p_temp;
2747
2748 /* Read the register number */
2749 regno = strtol ((const char *) p, &p_temp, 16);
2750 p1 = (unsigned char *) p_temp;
2751
2752 if (p1 == p) /* No register number present here */
2753 {
2754 p1 = (unsigned char *) strchr ((const char *) p, ':');
2755 if (p1 == NULL)
2756 warning ("Malformed packet(a) (missing colon): %s\n\
2757 Packet: '%s'\n",
2758 p, buf);
2759 if (strncmp ((const char *) p, "thread", p1 - p) == 0)
2760 {
2761 p_temp = unpack_varlen_hex (++p1, &thread_num);
2762 record_currthread (thread_num);
2763 p = (unsigned char *) p_temp;
2764 }
2765 }
2766 else
2767 {
2768 p = p1;
2769
2770 if (*p++ != ':')
2771 warning ("Malformed packet(b) (missing colon): %s\n\
2772 Packet: '%s'\n",
2773 p, buf);
2774
2775 if (regno >= NUM_REGS)
2776 warning ("Remote sent bad register number %ld: %s\n\
2777 Packet: '%s'\n",
2778 regno, p, buf);
2779
2780 for (i = 0; i < REGISTER_RAW_SIZE (regno); i++)
2781 {
2782 if (p[0] == 0 || p[1] == 0)
2783 warning ("Remote reply is too short: %s", buf);
2784 regs[i] = fromhex (p[0]) * 16 + fromhex (p[1]);
2785 p += 2;
2786 }
2787 supply_register (regno, regs);
2788 }
2789
2790 if (*p++ != ';')
2791 {
2792 warning ("Remote register badly formatted: %s", buf);
2793 warning (" here: %s", p);
2794 }
2795 }
2796 }
2797 /* fall through */
2798 case 'S': /* Old style status, just signal only */
2799 status->kind = TARGET_WAITKIND_STOPPED;
2800 status->value.sig = (enum target_signal)
2801 (((fromhex (buf[1])) << 4) + (fromhex (buf[2])));
2802
2803 if (buf[3] == 'p')
2804 {
2805 /* Export Cisco kernel mode as a convenience variable
2806 (so that it can be used in the GDB prompt if desired). */
2807
2808 if (cisco_kernel_mode == 1)
2809 set_internalvar (lookup_internalvar ("cisco_kernel_mode"),
2810 value_from_string ("PDEBUG-"));
2811 cisco_kernel_mode = 0;
2812 thread_num = strtol ((const char *) &buf[4], NULL, 16);
2813 record_currthread (thread_num);
2814 }
2815 else if (buf[3] == 'k')
2816 {
2817 /* Export Cisco kernel mode as a convenience variable
2818 (so that it can be used in the GDB prompt if desired). */
2819
2820 if (cisco_kernel_mode == 1)
2821 set_internalvar (lookup_internalvar ("cisco_kernel_mode"),
2822 value_from_string ("KDEBUG-"));
2823 cisco_kernel_mode = 1;
2824 }
2825 goto got_status;
2826 case 'N': /* Cisco special: status and offsets */
2827 {
2828 bfd_vma text_addr, data_addr, bss_addr;
2829 bfd_signed_vma text_off, data_off, bss_off;
2830 unsigned char *p1;
2831
2832 status->kind = TARGET_WAITKIND_STOPPED;
2833 status->value.sig = (enum target_signal)
2834 (((fromhex (buf[1])) << 4) + (fromhex (buf[2])));
2835
2836 if (symfile_objfile == NULL)
2837 {
2838 warning ("Relocation packet recieved with no symbol file. \
2839 Packet Dropped");
2840 goto got_status;
2841 }
2842
2843 /* Relocate object file. Buffer format is NAATT;DD;BB
2844 * where AA is the signal number, TT is the new text
2845 * address, DD * is the new data address, and BB is the
2846 * new bss address. */
2847
2848 p = &buf[3];
2849 text_addr = strtoul (p, (char **) &p1, 16);
2850 if (p1 == p || *p1 != ';')
2851 warning ("Malformed relocation packet: Packet '%s'", buf);
2852 p = p1 + 1;
2853 data_addr = strtoul (p, (char **) &p1, 16);
2854 if (p1 == p || *p1 != ';')
2855 warning ("Malformed relocation packet: Packet '%s'", buf);
2856 p = p1 + 1;
2857 bss_addr = strtoul (p, (char **) &p1, 16);
2858 if (p1 == p)
2859 warning ("Malformed relocation packet: Packet '%s'", buf);
2860
2861 if (remote_cisco_section_offsets (text_addr, data_addr, bss_addr,
2862 &text_off, &data_off, &bss_off)
2863 == 0)
2864 if (text_off != 0 || data_off != 0 || bss_off != 0)
2865 remote_cisco_objfile_relocate (text_off, data_off, bss_off);
2866
2867 goto got_status;
2868 }
2869 case 'W': /* Target exited */
2870 {
2871 /* The remote process exited. */
2872 status->kind = TARGET_WAITKIND_EXITED;
2873 status->value.integer = (fromhex (buf[1]) << 4) + fromhex (buf[2]);
2874 goto got_status;
2875 }
2876 case 'X':
2877 status->kind = TARGET_WAITKIND_SIGNALLED;
2878 status->value.sig = (enum target_signal)
2879 (((fromhex (buf[1])) << 4) + (fromhex (buf[2])));
2880 kill_kludge = 1;
2881
2882 goto got_status;
2883 case 'O': /* Console output */
2884 remote_console_output (buf + 1);
2885 continue;
2886 case '\0':
2887 if (last_sent_signal != TARGET_SIGNAL_0)
2888 {
2889 /* Zero length reply means that we tried 'S' or 'C' and
2890 the remote system doesn't support it. */
2891 target_terminal_ours_for_output ();
2892 printf_filtered
2893 ("Can't send signals to this remote system. %s not sent.\n",
2894 target_signal_to_name (last_sent_signal));
2895 last_sent_signal = TARGET_SIGNAL_0;
2896 target_terminal_inferior ();
2897
2898 strcpy ((char *) buf, last_sent_step ? "s" : "c");
2899 putpkt ((char *) buf);
2900 continue;
2901 }
2902 /* else fallthrough */
2903 default:
2904 warning ("Invalid remote reply: %s", buf);
2905 continue;
2906 }
2907 }
2908 got_status:
2909 if (thread_num != -1)
2910 {
2911 return thread_num;
2912 }
2913 return inferior_pid;
2914 }
2915
2916 /* Number of bytes of registers this stub implements. */
2917
2918 static int register_bytes_found;
2919
2920 /* Read the remote registers into the block REGS. */
2921 /* Currently we just read all the registers, so we don't use regno. */
2922
2923 /* ARGSUSED */
2924 static void
2925 remote_fetch_registers (regno)
2926 int regno;
2927 {
2928 char *buf = alloca (PBUFSIZ);
2929 int i;
2930 char *p;
2931 char regs[REGISTER_BYTES];
2932
2933 set_thread (inferior_pid, 1);
2934
2935 sprintf (buf, "g");
2936 remote_send (buf);
2937
2938 /* Save the size of the packet sent to us by the target. Its used
2939 as a heuristic when determining the max size of packets that the
2940 target can safely receive. */
2941 if (actual_register_packet_size == 0)
2942 actual_register_packet_size = strlen (buf);
2943
2944 /* Unimplemented registers read as all bits zero. */
2945 memset (regs, 0, REGISTER_BYTES);
2946
2947 /* We can get out of synch in various cases. If the first character
2948 in the buffer is not a hex character, assume that has happened
2949 and try to fetch another packet to read. */
2950 while ((buf[0] < '0' || buf[0] > '9')
2951 && (buf[0] < 'a' || buf[0] > 'f')
2952 && buf[0] != 'x') /* New: unavailable register value */
2953 {
2954 if (remote_debug)
2955 fprintf_unfiltered (gdb_stdlog,
2956 "Bad register packet; fetching a new packet\n");
2957 getpkt (buf, 0);
2958 }
2959
2960 /* Reply describes registers byte by byte, each byte encoded as two
2961 hex characters. Suck them all up, then supply them to the
2962 register cacheing/storage mechanism. */
2963
2964 p = buf;
2965 for (i = 0; i < REGISTER_BYTES; i++)
2966 {
2967 if (p[0] == 0)
2968 break;
2969 if (p[1] == 0)
2970 {
2971 warning ("Remote reply is of odd length: %s", buf);
2972 /* Don't change register_bytes_found in this case, and don't
2973 print a second warning. */
2974 goto supply_them;
2975 }
2976 if (p[0] == 'x' && p[1] == 'x')
2977 regs[i] = 0; /* 'x' */
2978 else
2979 regs[i] = fromhex (p[0]) * 16 + fromhex (p[1]);
2980 p += 2;
2981 }
2982
2983 if (i != register_bytes_found)
2984 {
2985 register_bytes_found = i;
2986 #ifdef REGISTER_BYTES_OK
2987 if (!REGISTER_BYTES_OK (i))
2988 warning ("Remote reply is too short: %s", buf);
2989 #endif
2990 }
2991
2992 supply_them:
2993 for (i = 0; i < NUM_REGS; i++)
2994 {
2995 supply_register (i, &regs[REGISTER_BYTE (i)]);
2996 if (buf[REGISTER_BYTE (i) * 2] == 'x')
2997 register_valid[i] = -1; /* register value not available */
2998 }
2999 }
3000
3001 /* Prepare to store registers. Since we may send them all (using a
3002 'G' request), we have to read out the ones we don't want to change
3003 first. */
3004
3005 static void
3006 remote_prepare_to_store ()
3007 {
3008 /* Make sure the entire registers array is valid. */
3009 switch (remote_protocol_P.support)
3010 {
3011 case PACKET_DISABLE:
3012 case PACKET_SUPPORT_UNKNOWN:
3013 read_register_bytes (0, (char *) NULL, REGISTER_BYTES);
3014 break;
3015 case PACKET_ENABLE:
3016 break;
3017 }
3018 }
3019
3020 /* Helper: Attempt to store REGNO using the P packet. Return fail IFF
3021 packet was not recognized. */
3022
3023 static int
3024 store_register_using_P (regno)
3025 int regno;
3026 {
3027 /* Try storing a single register. */
3028 char *buf = alloca (PBUFSIZ);
3029 char *regp;
3030 char *p;
3031 int i;
3032
3033 sprintf (buf, "P%x=", regno);
3034 p = buf + strlen (buf);
3035 regp = &registers[REGISTER_BYTE (regno)];
3036 for (i = 0; i < REGISTER_RAW_SIZE (regno); ++i)
3037 {
3038 *p++ = tohex ((regp[i] >> 4) & 0xf);
3039 *p++ = tohex (regp[i] & 0xf);
3040 }
3041 *p = '\0';
3042 remote_send (buf);
3043
3044 return buf[0] != '\0';
3045 }
3046
3047
3048 /* Store register REGNO, or all registers if REGNO == -1, from the contents
3049 of REGISTERS. FIXME: ignores errors. */
3050
3051 static void
3052 remote_store_registers (regno)
3053 int regno;
3054 {
3055 char *buf = alloca (PBUFSIZ);
3056 int i;
3057 char *p;
3058
3059 set_thread (inferior_pid, 1);
3060
3061 if (regno >= 0)
3062 {
3063 switch (remote_protocol_P.support)
3064 {
3065 case PACKET_DISABLE:
3066 break;
3067 case PACKET_ENABLE:
3068 if (store_register_using_P (regno))
3069 return;
3070 else
3071 error ("Protocol error: P packet not recognized by stub");
3072 case PACKET_SUPPORT_UNKNOWN:
3073 if (store_register_using_P (regno))
3074 {
3075 /* The stub recognized the 'P' packet. Remember this. */
3076 remote_protocol_P.support = PACKET_ENABLE;
3077 return;
3078 }
3079 else
3080 {
3081 /* The stub does not support the 'P' packet. Use 'G'
3082 instead, and don't try using 'P' in the future (it
3083 will just waste our time). */
3084 remote_protocol_P.support = PACKET_DISABLE;
3085 break;
3086 }
3087 }
3088 }
3089
3090 buf[0] = 'G';
3091
3092 /* Command describes registers byte by byte,
3093 each byte encoded as two hex characters. */
3094
3095 p = buf + 1;
3096 /* remote_prepare_to_store insures that register_bytes_found gets set. */
3097 for (i = 0; i < register_bytes_found; i++)
3098 {
3099 *p++ = tohex ((registers[i] >> 4) & 0xf);
3100 *p++ = tohex (registers[i] & 0xf);
3101 }
3102 *p = '\0';
3103
3104 remote_send (buf);
3105 }
3106
3107 /* Use of the data cache *used* to be disabled because it loses for looking
3108 at and changing hardware I/O ports and the like. Accepting `volatile'
3109 would perhaps be one way to fix it. Another idea would be to use the
3110 executable file for the text segment (for all SEC_CODE sections?
3111 For all SEC_READONLY sections?). This has problems if you want to
3112 actually see what the memory contains (e.g. self-modifying code,
3113 clobbered memory, user downloaded the wrong thing).
3114
3115 Because it speeds so much up, it's now enabled, if you're playing
3116 with registers you turn it of (set remotecache 0). */
3117
3118 /* Read a word from remote address ADDR and return it.
3119 This goes through the data cache. */
3120
3121 #if 0 /* unused? */
3122 static int
3123 remote_fetch_word (addr)
3124 CORE_ADDR addr;
3125 {
3126 return dcache_fetch (remote_dcache, addr);
3127 }
3128
3129 /* Write a word WORD into remote address ADDR.
3130 This goes through the data cache. */
3131
3132 static void
3133 remote_store_word (addr, word)
3134 CORE_ADDR addr;
3135 int word;
3136 {
3137 dcache_poke (remote_dcache, addr, word);
3138 }
3139 #endif /* 0 (unused?) */
3140 \f
3141
3142
3143 /* Return the number of hex digits in num. */
3144
3145 static int
3146 hexnumlen (num)
3147 ULONGEST num;
3148 {
3149 int i;
3150
3151 for (i = 0; num != 0; i++)
3152 num >>= 4;
3153
3154 return max (i, 1);
3155 }
3156
3157 /* Set BUF to the minimum number of hex digits representing NUM. */
3158
3159 static int
3160 hexnumstr (buf, num)
3161 char *buf;
3162 ULONGEST num;
3163 {
3164 int len = hexnumlen (num);
3165 return hexnumnstr (buf, num, len);
3166 }
3167
3168
3169 /* Set BUF to the hex digits representing NUM, padded to WIDTH characters. */
3170
3171 static int
3172 hexnumnstr (buf, num, width)
3173 char *buf;
3174 ULONGEST num;
3175 int width;
3176 {
3177 int i;
3178
3179 buf[width] = '\0';
3180
3181 for (i = width - 1; i >= 0; i--)
3182 {
3183 buf[i] = "0123456789abcdef"[(num & 0xf)];
3184 num >>= 4;
3185 }
3186
3187 return width;
3188 }
3189
3190 /* Mask all but the least significant REMOTE_ADDRESS_SIZE bits. */
3191
3192 static CORE_ADDR
3193 remote_address_masked (addr)
3194 CORE_ADDR addr;
3195 {
3196 if (remote_address_size > 0
3197 && remote_address_size < (sizeof (ULONGEST) * 8))
3198 {
3199 /* Only create a mask when that mask can safely be constructed
3200 in a ULONGEST variable. */
3201 ULONGEST mask = 1;
3202 mask = (mask << remote_address_size) - 1;
3203 addr &= mask;
3204 }
3205 return addr;
3206 }
3207
3208 /* Determine whether the remote target supports binary downloading.
3209 This is accomplished by sending a no-op memory write of zero length
3210 to the target at the specified address. It does not suffice to send
3211 the whole packet, since many stubs strip the eighth bit and subsequently
3212 compute a wrong checksum, which causes real havoc with remote_write_bytes.
3213
3214 NOTE: This can still lose if the serial line is not eight-bit
3215 clean. In cases like this, the user should clear "remote
3216 X-packet". */
3217
3218 static void
3219 check_binary_download (addr)
3220 CORE_ADDR addr;
3221 {
3222 switch (remote_protocol_binary_download.support)
3223 {
3224 case PACKET_DISABLE:
3225 break;
3226 case PACKET_ENABLE:
3227 break;
3228 case PACKET_SUPPORT_UNKNOWN:
3229 {
3230 char *buf = alloca (PBUFSIZ);
3231 char *p;
3232
3233 p = buf;
3234 *p++ = 'X';
3235 p += hexnumstr (p, (ULONGEST) addr);
3236 *p++ = ',';
3237 p += hexnumstr (p, (ULONGEST) 0);
3238 *p++ = ':';
3239 *p = '\0';
3240
3241 putpkt_binary (buf, (int) (p - buf));
3242 getpkt (buf, 0);
3243
3244 if (buf[0] == '\0')
3245 {
3246 if (remote_debug)
3247 fprintf_unfiltered (gdb_stdlog,
3248 "binary downloading NOT suppported by target\n");
3249 remote_protocol_binary_download.support = PACKET_DISABLE;
3250 }
3251 else
3252 {
3253 if (remote_debug)
3254 fprintf_unfiltered (gdb_stdlog,
3255 "binary downloading suppported by target\n");
3256 remote_protocol_binary_download.support = PACKET_ENABLE;
3257 }
3258 break;
3259 }
3260 }
3261 }
3262
3263 /* Write memory data directly to the remote machine.
3264 This does not inform the data cache; the data cache uses this.
3265 MEMADDR is the address in the remote memory space.
3266 MYADDR is the address of the buffer in our space.
3267 LEN is the number of bytes.
3268
3269 Returns number of bytes transferred, or 0 (setting errno) for
3270 error. Only transfer a single packet. */
3271
3272 static int
3273 remote_write_bytes (CORE_ADDR memaddr, char *myaddr, int len)
3274 {
3275 unsigned char *buf;
3276 int max_buf_size; /* Max size of packet output buffer */
3277 unsigned char *p;
3278 unsigned char *plen;
3279 int plenlen;
3280 int todo;
3281 int nr_bytes;
3282
3283 /* Verify that the target can support a binary download */
3284 check_binary_download (memaddr);
3285
3286 /* Determine the max packet size. */
3287 max_buf_size = get_memory_write_packet_size ();
3288 buf = alloca (max_buf_size + 1);
3289
3290 /* Subtract header overhead from max payload size - $M<memaddr>,<len>:#nn */
3291 max_buf_size -= 2 + hexnumlen (memaddr + len - 1) + 1 + hexnumlen (len) + 4;
3292
3293 /* construct "M"<memaddr>","<len>":" */
3294 /* sprintf (buf, "M%lx,%x:", (unsigned long) memaddr, todo); */
3295 p = buf;
3296
3297 /* Append [XM]. Compute a best guess of the number of bytes
3298 actually transfered. */
3299 switch (remote_protocol_binary_download.support)
3300 {
3301 case PACKET_ENABLE:
3302 *p++ = 'X';
3303 /* Best guess at number of bytes that will fit. */
3304 todo = min (len, max_buf_size);
3305 break;
3306 case PACKET_DISABLE:
3307 *p++ = 'M';
3308 /* num bytes that will fit */
3309 todo = min (len, max_buf_size / 2);
3310 break;
3311 case PACKET_SUPPORT_UNKNOWN:
3312 internal_error ("remote_write_bytes: bad switch");
3313 }
3314
3315 /* Append <memaddr> */
3316 memaddr = remote_address_masked (memaddr);
3317 p += hexnumstr (p, (ULONGEST) memaddr);
3318 *p++ = ',';
3319
3320 /* Append <len>. Retain the location/size of <len>. It may
3321 need to be adjusted once the packet body has been created. */
3322 plen = p;
3323 plenlen = hexnumstr (p, (ULONGEST) todo);
3324 p += plenlen;
3325 *p++ = ':';
3326 *p = '\0';
3327
3328 /* Append the packet body. */
3329 switch (remote_protocol_binary_download.support)
3330 {
3331 case PACKET_ENABLE:
3332 /* Binary mode. Send target system values byte by byte, in
3333 increasing byte addresses. Only escape certain critical
3334 characters. */
3335 for (nr_bytes = 0;
3336 (nr_bytes < todo) && (p - buf) < (max_buf_size - 2);
3337 nr_bytes++)
3338 {
3339 switch (myaddr[nr_bytes] & 0xff)
3340 {
3341 case '$':
3342 case '#':
3343 case 0x7d:
3344 /* These must be escaped */
3345 *p++ = 0x7d;
3346 *p++ = (myaddr[nr_bytes] & 0xff) ^ 0x20;
3347 break;
3348 default:
3349 *p++ = myaddr[nr_bytes] & 0xff;
3350 break;
3351 }
3352 }
3353 if (nr_bytes < todo)
3354 {
3355 /* Escape chars have filled up the buffer prematurely,
3356 and we have actually sent fewer bytes than planned.
3357 Fix-up the length field of the packet. Use the same
3358 number of characters as before. */
3359
3360 plen += hexnumnstr (plen, (ULONGEST) nr_bytes, plenlen);
3361 *plen = ':'; /* overwrite \0 from hexnumnstr() */
3362 }
3363 break;
3364 case PACKET_DISABLE:
3365 /* Normal mode: Send target system values byte by byte, in
3366 increasing byte addresses. Each byte is encoded as a two hex
3367 value. */
3368 for (nr_bytes = 0; nr_bytes < todo; nr_bytes++)
3369 {
3370 *p++ = tohex ((myaddr[nr_bytes] >> 4) & 0xf);
3371 *p++ = tohex (myaddr[nr_bytes] & 0xf);
3372 }
3373 *p = '\0';
3374 break;
3375 case PACKET_SUPPORT_UNKNOWN:
3376 internal_error ("remote_write_bytes: bad switch");
3377 }
3378
3379 putpkt_binary (buf, (int) (p - buf));
3380 getpkt (buf, 0);
3381
3382 if (buf[0] == 'E')
3383 {
3384 /* There is no correspondance between what the remote protocol
3385 uses for errors and errno codes. We would like a cleaner way
3386 of representing errors (big enough to include errno codes,
3387 bfd_error codes, and others). But for now just return EIO. */
3388 errno = EIO;
3389 return 0;
3390 }
3391
3392 /* Return NR_BYTES, not TODO, in case escape chars caused us to send fewer
3393 bytes than we'd planned. */
3394 return nr_bytes;
3395 }
3396
3397 /* Read memory data directly from the remote machine.
3398 This does not use the data cache; the data cache uses this.
3399 MEMADDR is the address in the remote memory space.
3400 MYADDR is the address of the buffer in our space.
3401 LEN is the number of bytes.
3402
3403 Returns number of bytes transferred, or 0 for error. */
3404
3405 /* NOTE: cagney/1999-10-18: This function (and its siblings in other
3406 remote targets) shouldn't attempt to read the entire buffer.
3407 Instead it should read a single packet worth of data and then
3408 return the byte size of that packet to the caller. The caller (its
3409 caller and its callers caller ;-) already contains code for
3410 handling partial reads. */
3411
3412 static int
3413 remote_read_bytes (memaddr, myaddr, len)
3414 CORE_ADDR memaddr;
3415 char *myaddr;
3416 int len;
3417 {
3418 char *buf;
3419 int max_buf_size; /* Max size of packet output buffer */
3420 int origlen;
3421
3422 /* Create a buffer big enough for this packet. */
3423 max_buf_size = get_memory_read_packet_size ();
3424 buf = alloca (max_buf_size);
3425
3426 origlen = len;
3427 while (len > 0)
3428 {
3429 char *p;
3430 int todo;
3431 int i;
3432
3433 todo = min (len, max_buf_size / 2); /* num bytes that will fit */
3434
3435 /* construct "m"<memaddr>","<len>" */
3436 /* sprintf (buf, "m%lx,%x", (unsigned long) memaddr, todo); */
3437 memaddr = remote_address_masked (memaddr);
3438 p = buf;
3439 *p++ = 'm';
3440 p += hexnumstr (p, (ULONGEST) memaddr);
3441 *p++ = ',';
3442 p += hexnumstr (p, (ULONGEST) todo);
3443 *p = '\0';
3444
3445 putpkt (buf);
3446 getpkt (buf, 0);
3447
3448 if (buf[0] == 'E')
3449 {
3450 /* There is no correspondance between what the remote protocol uses
3451 for errors and errno codes. We would like a cleaner way of
3452 representing errors (big enough to include errno codes, bfd_error
3453 codes, and others). But for now just return EIO. */
3454 errno = EIO;
3455 return 0;
3456 }
3457
3458 /* Reply describes memory byte by byte,
3459 each byte encoded as two hex characters. */
3460
3461 p = buf;
3462 for (i = 0; i < todo; i++)
3463 {
3464 if (p[0] == 0 || p[1] == 0)
3465 /* Reply is short. This means that we were able to read
3466 only part of what we wanted to. */
3467 return i + (origlen - len);
3468 myaddr[i] = fromhex (p[0]) * 16 + fromhex (p[1]);
3469 p += 2;
3470 }
3471 myaddr += todo;
3472 memaddr += todo;
3473 len -= todo;
3474 }
3475 return origlen;
3476 }
3477 \f
3478 /* Read or write LEN bytes from inferior memory at MEMADDR,
3479 transferring to or from debugger address BUFFER. Write to inferior if
3480 SHOULD_WRITE is nonzero. Returns length of data written or read; 0
3481 for error. */
3482
3483 #ifndef REMOTE_TRANSLATE_XFER_ADDRESS
3484 #define REMOTE_TRANSLATE_XFER_ADDRESS(MEM_ADDR, MEM_LEN, TARG_ADDR, TARG_LEN) \
3485 (*(TARG_ADDR) = (MEM_ADDR), *(TARG_LEN) = (MEM_LEN))
3486 #endif
3487
3488 /* ARGSUSED */
3489 static int
3490 remote_xfer_memory (mem_addr, buffer, mem_len, should_write, target)
3491 CORE_ADDR mem_addr;
3492 char *buffer;
3493 int mem_len;
3494 int should_write;
3495 struct target_ops *target; /* ignored */
3496 {
3497 CORE_ADDR targ_addr;
3498 int targ_len;
3499 REMOTE_TRANSLATE_XFER_ADDRESS (mem_addr, mem_len, &targ_addr, &targ_len);
3500 if (targ_len <= 0)
3501 return 0;
3502
3503 return dcache_xfer_memory (remote_dcache, targ_addr, buffer,
3504 targ_len, should_write);
3505 }
3506
3507
3508 #if 0
3509 /* Enable after 4.12. */
3510
3511 void
3512 remote_search (len, data, mask, startaddr, increment, lorange, hirange
3513 addr_found, data_found)
3514 int len;
3515 char *data;
3516 char *mask;
3517 CORE_ADDR startaddr;
3518 int increment;
3519 CORE_ADDR lorange;
3520 CORE_ADDR hirange;
3521 CORE_ADDR *addr_found;
3522 char *data_found;
3523 {
3524 if (increment == -4 && len == 4)
3525 {
3526 long mask_long, data_long;
3527 long data_found_long;
3528 CORE_ADDR addr_we_found;
3529 char *buf = alloca (PBUFSIZ);
3530 long returned_long[2];
3531 char *p;
3532
3533 mask_long = extract_unsigned_integer (mask, len);
3534 data_long = extract_unsigned_integer (data, len);
3535 sprintf (buf, "t%x:%x,%x", startaddr, data_long, mask_long);
3536 putpkt (buf);
3537 getpkt (buf, 0);
3538 if (buf[0] == '\0')
3539 {
3540 /* The stub doesn't support the 't' request. We might want to
3541 remember this fact, but on the other hand the stub could be
3542 switched on us. Maybe we should remember it only until
3543 the next "target remote". */
3544 generic_search (len, data, mask, startaddr, increment, lorange,
3545 hirange, addr_found, data_found);
3546 return;
3547 }
3548
3549 if (buf[0] == 'E')
3550 /* There is no correspondance between what the remote protocol uses
3551 for errors and errno codes. We would like a cleaner way of
3552 representing errors (big enough to include errno codes, bfd_error
3553 codes, and others). But for now just use EIO. */
3554 memory_error (EIO, startaddr);
3555 p = buf;
3556 addr_we_found = 0;
3557 while (*p != '\0' && *p != ',')
3558 addr_we_found = (addr_we_found << 4) + fromhex (*p++);
3559 if (*p == '\0')
3560 error ("Protocol error: short return for search");
3561
3562 data_found_long = 0;
3563 while (*p != '\0' && *p != ',')
3564 data_found_long = (data_found_long << 4) + fromhex (*p++);
3565 /* Ignore anything after this comma, for future extensions. */
3566
3567 if (addr_we_found < lorange || addr_we_found >= hirange)
3568 {
3569 *addr_found = 0;
3570 return;
3571 }
3572
3573 *addr_found = addr_we_found;
3574 *data_found = store_unsigned_integer (data_we_found, len);
3575 return;
3576 }
3577 generic_search (len, data, mask, startaddr, increment, lorange,
3578 hirange, addr_found, data_found);
3579 }
3580 #endif /* 0 */
3581 \f
3582 static void
3583 remote_files_info (ignore)
3584 struct target_ops *ignore;
3585 {
3586 puts_filtered ("Debugging a target over a serial line.\n");
3587 }
3588 \f
3589 /* Stuff for dealing with the packets which are part of this protocol.
3590 See comment at top of file for details. */
3591
3592 /* Read a single character from the remote end, masking it down to 7 bits. */
3593
3594 static int
3595 readchar (timeout)
3596 int timeout;
3597 {
3598 int ch;
3599
3600 ch = SERIAL_READCHAR (remote_desc, timeout);
3601
3602 if (ch >= 0)
3603 return (ch & 0x7f);
3604
3605 switch ((enum serial_rc) ch)
3606 {
3607 case SERIAL_EOF:
3608 target_mourn_inferior ();
3609 error ("Remote connection closed");
3610 /* no return */
3611 case SERIAL_ERROR:
3612 perror_with_name ("Remote communication error");
3613 /* no return */
3614 case SERIAL_TIMEOUT:
3615 break;
3616 }
3617 return ch;
3618 }
3619
3620 /* Send the command in BUF to the remote machine, and read the reply
3621 into BUF. Report an error if we get an error reply. */
3622
3623 static void
3624 remote_send (buf)
3625 char *buf;
3626 {
3627 putpkt (buf);
3628 getpkt (buf, 0);
3629
3630 if (buf[0] == 'E')
3631 error ("Remote failure reply: %s", buf);
3632 }
3633
3634 /* Display a null-terminated packet on stdout, for debugging, using C
3635 string notation. */
3636
3637 static void
3638 print_packet (buf)
3639 char *buf;
3640 {
3641 puts_filtered ("\"");
3642 fputstr_filtered (buf, '"', gdb_stdout);
3643 puts_filtered ("\"");
3644 }
3645
3646 int
3647 putpkt (buf)
3648 char *buf;
3649 {
3650 return putpkt_binary (buf, strlen (buf));
3651 }
3652
3653 /* Send a packet to the remote machine, with error checking. The data
3654 of the packet is in BUF. The string in BUF can be at most PBUFSIZ - 5
3655 to account for the $, # and checksum, and for a possible /0 if we are
3656 debugging (remote_debug) and want to print the sent packet as a string */
3657
3658 static int
3659 putpkt_binary (buf, cnt)
3660 char *buf;
3661 int cnt;
3662 {
3663 int i;
3664 unsigned char csum = 0;
3665 char *buf2 = alloca (cnt + 6);
3666 char *junkbuf = alloca (PBUFSIZ);
3667
3668 int ch;
3669 int tcount = 0;
3670 char *p;
3671
3672 /* Copy the packet into buffer BUF2, encapsulating it
3673 and giving it a checksum. */
3674
3675 p = buf2;
3676 *p++ = '$';
3677
3678 for (i = 0; i < cnt; i++)
3679 {
3680 csum += buf[i];
3681 *p++ = buf[i];
3682 }
3683 *p++ = '#';
3684 *p++ = tohex ((csum >> 4) & 0xf);
3685 *p++ = tohex (csum & 0xf);
3686
3687 /* Send it over and over until we get a positive ack. */
3688
3689 while (1)
3690 {
3691 int started_error_output = 0;
3692
3693 if (remote_debug)
3694 {
3695 *p = '\0';
3696 fprintf_unfiltered (gdb_stdlog, "Sending packet: ");
3697 fputstrn_unfiltered (buf2, p - buf2, 0, gdb_stdlog);
3698 fprintf_unfiltered (gdb_stdlog, "...");
3699 gdb_flush (gdb_stdlog);
3700 }
3701 if (SERIAL_WRITE (remote_desc, buf2, p - buf2))
3702 perror_with_name ("putpkt: write failed");
3703
3704 /* read until either a timeout occurs (-2) or '+' is read */
3705 while (1)
3706 {
3707 ch = readchar (remote_timeout);
3708
3709 if (remote_debug)
3710 {
3711 switch (ch)
3712 {
3713 case '+':
3714 case SERIAL_TIMEOUT:
3715 case '$':
3716 if (started_error_output)
3717 {
3718 putchar_unfiltered ('\n');
3719 started_error_output = 0;
3720 }
3721 }
3722 }
3723
3724 switch (ch)
3725 {
3726 case '+':
3727 if (remote_debug)
3728 fprintf_unfiltered (gdb_stdlog, "Ack\n");
3729 return 1;
3730 case SERIAL_TIMEOUT:
3731 tcount++;
3732 if (tcount > 3)
3733 return 0;
3734 break; /* Retransmit buffer */
3735 case '$':
3736 {
3737 /* It's probably an old response, and we're out of sync.
3738 Just gobble up the packet and ignore it. */
3739 getpkt (junkbuf, 0);
3740 continue; /* Now, go look for + */
3741 }
3742 default:
3743 if (remote_debug)
3744 {
3745 if (!started_error_output)
3746 {
3747 started_error_output = 1;
3748 fprintf_unfiltered (gdb_stdlog, "putpkt: Junk: ");
3749 }
3750 fputc_unfiltered (ch & 0177, gdb_stdlog);
3751 }
3752 continue;
3753 }
3754 break; /* Here to retransmit */
3755 }
3756
3757 #if 0
3758 /* This is wrong. If doing a long backtrace, the user should be
3759 able to get out next time we call QUIT, without anything as
3760 violent as interrupt_query. If we want to provide a way out of
3761 here without getting to the next QUIT, it should be based on
3762 hitting ^C twice as in remote_wait. */
3763 if (quit_flag)
3764 {
3765 quit_flag = 0;
3766 interrupt_query ();
3767 }
3768 #endif
3769 }
3770 }
3771
3772 static int remote_cisco_mode;
3773
3774 /* Come here after finding the start of the frame. Collect the rest
3775 into BUF, verifying the checksum, length, and handling run-length
3776 compression. Returns 0 on any error, 1 on success. */
3777
3778 static int
3779 read_frame (buf)
3780 char *buf;
3781 {
3782 unsigned char csum;
3783 char *bp;
3784 int c;
3785
3786 csum = 0;
3787 bp = buf;
3788
3789 while (1)
3790 {
3791 c = readchar (remote_timeout);
3792
3793 switch (c)
3794 {
3795 case SERIAL_TIMEOUT:
3796 if (remote_debug)
3797 fputs_filtered ("Timeout in mid-packet, retrying\n", gdb_stdlog);
3798 return 0;
3799 case '$':
3800 if (remote_debug)
3801 fputs_filtered ("Saw new packet start in middle of old one\n",
3802 gdb_stdlog);
3803 return 0; /* Start a new packet, count retries */
3804 case '#':
3805 {
3806 unsigned char pktcsum;
3807
3808 *bp = '\000';
3809
3810 pktcsum = fromhex (readchar (remote_timeout)) << 4;
3811 pktcsum |= fromhex (readchar (remote_timeout));
3812
3813 if (csum == pktcsum)
3814 return 1;
3815
3816 if (remote_debug)
3817 {
3818 fprintf_filtered (gdb_stdlog,
3819 "Bad checksum, sentsum=0x%x, csum=0x%x, buf=",
3820 pktcsum, csum);
3821 fputs_filtered (buf, gdb_stdlog);
3822 fputs_filtered ("\n", gdb_stdlog);
3823 }
3824 return 0;
3825 }
3826 case '*': /* Run length encoding */
3827 {
3828 int repeat;
3829 csum += c;
3830
3831 if (remote_cisco_mode == 0)
3832 {
3833 c = readchar (remote_timeout);
3834 csum += c;
3835 repeat = c - ' ' + 3; /* Compute repeat count */
3836 }
3837 else
3838 {
3839 /* Cisco's run-length encoding variant uses two
3840 hex chars to represent the repeat count. */
3841
3842 c = readchar (remote_timeout);
3843 csum += c;
3844 repeat = fromhex (c) << 4;
3845 c = readchar (remote_timeout);
3846 csum += c;
3847 repeat += fromhex (c);
3848 }
3849
3850 if (repeat > 0 && repeat <= 255
3851 && bp + repeat - 1 < buf + PBUFSIZ - 1)
3852 {
3853 memset (bp, *(bp - 1), repeat);
3854 bp += c;
3855 continue;
3856 }
3857
3858 *bp = '\0';
3859 printf_filtered ("Repeat count %d too large for buffer: ", repeat);
3860 puts_filtered (buf);
3861 puts_filtered ("\n");
3862 return 0;
3863 }
3864 default:
3865 if (bp < buf + PBUFSIZ - 1)
3866 {
3867 *bp++ = c;
3868 csum += c;
3869 continue;
3870 }
3871
3872 *bp = '\0';
3873 puts_filtered ("Remote packet too long: ");
3874 puts_filtered (buf);
3875 puts_filtered ("\n");
3876
3877 return 0;
3878 }
3879 }
3880 }
3881
3882 /* Read a packet from the remote machine, with error checking, and
3883 store it in BUF. BUF is expected to be of size PBUFSIZ. If
3884 FOREVER, wait forever rather than timing out; this is used while
3885 the target is executing user code. */
3886
3887 void
3888 getpkt (buf, forever)
3889 char *buf;
3890 int forever;
3891 {
3892 int c;
3893 int tries;
3894 int timeout;
3895 int val;
3896
3897 strcpy (buf, "timeout");
3898
3899 if (forever)
3900 {
3901 timeout = watchdog > 0 ? watchdog : -1;
3902 }
3903
3904 else
3905 timeout = remote_timeout;
3906
3907 #define MAX_TRIES 3
3908
3909 for (tries = 1; tries <= MAX_TRIES; tries++)
3910 {
3911 /* This can loop forever if the remote side sends us characters
3912 continuously, but if it pauses, we'll get a zero from readchar
3913 because of timeout. Then we'll count that as a retry. */
3914
3915 /* Note that we will only wait forever prior to the start of a packet.
3916 After that, we expect characters to arrive at a brisk pace. They
3917 should show up within remote_timeout intervals. */
3918
3919 do
3920 {
3921 c = readchar (timeout);
3922
3923 if (c == SERIAL_TIMEOUT)
3924 {
3925 if (forever) /* Watchdog went off? Kill the target. */
3926 {
3927 QUIT;
3928 target_mourn_inferior ();
3929 error ("Watchdog has expired. Target detached.\n");
3930 }
3931 if (remote_debug)
3932 fputs_filtered ("Timed out.\n", gdb_stdlog);
3933 goto retry;
3934 }
3935 }
3936 while (c != '$');
3937
3938 /* We've found the start of a packet, now collect the data. */
3939
3940 val = read_frame (buf);
3941
3942 if (val == 1)
3943 {
3944 if (remote_debug)
3945 {
3946 fprintf_unfiltered (gdb_stdlog, "Packet received: ");
3947 fputstr_unfiltered (buf, 0, gdb_stdlog);
3948 fprintf_unfiltered (gdb_stdlog, "\n");
3949 }
3950 SERIAL_WRITE (remote_desc, "+", 1);
3951 return;
3952 }
3953
3954 /* Try the whole thing again. */
3955 retry:
3956 SERIAL_WRITE (remote_desc, "-", 1);
3957 }
3958
3959 /* We have tried hard enough, and just can't receive the packet. Give up. */
3960
3961 printf_unfiltered ("Ignoring packet error, continuing...\n");
3962 SERIAL_WRITE (remote_desc, "+", 1);
3963 }
3964 \f
3965 static void
3966 remote_kill ()
3967 {
3968 /* For some mysterious reason, wait_for_inferior calls kill instead of
3969 mourn after it gets TARGET_WAITKIND_SIGNALLED. Work around it. */
3970 if (kill_kludge)
3971 {
3972 kill_kludge = 0;
3973 target_mourn_inferior ();
3974 return;
3975 }
3976
3977 /* Use catch_errors so the user can quit from gdb even when we aren't on
3978 speaking terms with the remote system. */
3979 catch_errors ((catch_errors_ftype *) putpkt, "k", "", RETURN_MASK_ERROR);
3980
3981 /* Don't wait for it to die. I'm not really sure it matters whether
3982 we do or not. For the existing stubs, kill is a noop. */
3983 target_mourn_inferior ();
3984 }
3985
3986 /* Async version of remote_kill. */
3987 static void
3988 remote_async_kill ()
3989 {
3990 /* Unregister the file descriptor from the event loop. */
3991 if (SERIAL_IS_ASYNC_P (remote_desc))
3992 SERIAL_ASYNC (remote_desc, NULL, 0);
3993
3994 /* For some mysterious reason, wait_for_inferior calls kill instead of
3995 mourn after it gets TARGET_WAITKIND_SIGNALLED. Work around it. */
3996 if (kill_kludge)
3997 {
3998 kill_kludge = 0;
3999 target_mourn_inferior ();
4000 return;
4001 }
4002
4003 /* Use catch_errors so the user can quit from gdb even when we aren't on
4004 speaking terms with the remote system. */
4005 catch_errors ((catch_errors_ftype *) putpkt, "k", "", RETURN_MASK_ERROR);
4006
4007 /* Don't wait for it to die. I'm not really sure it matters whether
4008 we do or not. For the existing stubs, kill is a noop. */
4009 target_mourn_inferior ();
4010 }
4011
4012 static void
4013 remote_mourn ()
4014 {
4015 remote_mourn_1 (&remote_ops);
4016 }
4017
4018 static void
4019 remote_async_mourn ()
4020 {
4021 remote_mourn_1 (&remote_async_ops);
4022 }
4023
4024 static void
4025 extended_remote_mourn ()
4026 {
4027 /* We do _not_ want to mourn the target like this; this will
4028 remove the extended remote target from the target stack,
4029 and the next time the user says "run" it'll fail.
4030
4031 FIXME: What is the right thing to do here? */
4032 #if 0
4033 remote_mourn_1 (&extended_remote_ops);
4034 #endif
4035 }
4036
4037 /* Worker function for remote_mourn. */
4038 static void
4039 remote_mourn_1 (target)
4040 struct target_ops *target;
4041 {
4042 unpush_target (target);
4043 generic_mourn_inferior ();
4044 }
4045
4046 /* In the extended protocol we want to be able to do things like
4047 "run" and have them basically work as expected. So we need
4048 a special create_inferior function.
4049
4050 FIXME: One day add support for changing the exec file
4051 we're debugging, arguments and an environment. */
4052
4053 static void
4054 extended_remote_create_inferior (exec_file, args, env)
4055 char *exec_file;
4056 char *args;
4057 char **env;
4058 {
4059 /* Rip out the breakpoints; we'll reinsert them after restarting
4060 the remote server. */
4061 remove_breakpoints ();
4062
4063 /* Now restart the remote server. */
4064 extended_remote_restart ();
4065
4066 /* Now put the breakpoints back in. This way we're safe if the
4067 restart function works via a unix fork on the remote side. */
4068 insert_breakpoints ();
4069
4070 /* Clean up from the last time we were running. */
4071 clear_proceed_status ();
4072
4073 /* Let the remote process run. */
4074 proceed (-1, TARGET_SIGNAL_0, 0);
4075 }
4076
4077 /* Async version of extended_remote_create_inferior. */
4078 static void
4079 extended_remote_async_create_inferior (exec_file, args, env)
4080 char *exec_file;
4081 char *args;
4082 char **env;
4083 {
4084 /* Rip out the breakpoints; we'll reinsert them after restarting
4085 the remote server. */
4086 remove_breakpoints ();
4087
4088 /* If running asynchronously, register the target file descriptor
4089 with the event loop. */
4090 if (event_loop_p && target_can_async_p ())
4091 target_async (inferior_event_handler, 0);
4092
4093 /* Now restart the remote server. */
4094 extended_remote_restart ();
4095
4096 /* Now put the breakpoints back in. This way we're safe if the
4097 restart function works via a unix fork on the remote side. */
4098 insert_breakpoints ();
4099
4100 /* Clean up from the last time we were running. */
4101 clear_proceed_status ();
4102
4103 /* Let the remote process run. */
4104 proceed (-1, TARGET_SIGNAL_0, 0);
4105 }
4106 \f
4107
4108 /* On some machines, e.g. 68k, we may use a different breakpoint instruction
4109 than other targets; in those use REMOTE_BREAKPOINT instead of just
4110 BREAKPOINT. Also, bi-endian targets may define LITTLE_REMOTE_BREAKPOINT
4111 and BIG_REMOTE_BREAKPOINT. If none of these are defined, we just call
4112 the standard routines that are in mem-break.c. */
4113
4114 /* FIXME, these ought to be done in a more dynamic fashion. For instance,
4115 the choice of breakpoint instruction affects target program design and
4116 vice versa, and by making it user-tweakable, the special code here
4117 goes away and we need fewer special GDB configurations. */
4118
4119 #if defined (LITTLE_REMOTE_BREAKPOINT) && defined (BIG_REMOTE_BREAKPOINT) && !defined(REMOTE_BREAKPOINT)
4120 #define REMOTE_BREAKPOINT
4121 #endif
4122
4123 #ifdef REMOTE_BREAKPOINT
4124
4125 /* If the target isn't bi-endian, just pretend it is. */
4126 #if !defined (LITTLE_REMOTE_BREAKPOINT) && !defined (BIG_REMOTE_BREAKPOINT)
4127 #define LITTLE_REMOTE_BREAKPOINT REMOTE_BREAKPOINT
4128 #define BIG_REMOTE_BREAKPOINT REMOTE_BREAKPOINT
4129 #endif
4130
4131 static unsigned char big_break_insn[] = BIG_REMOTE_BREAKPOINT;
4132 static unsigned char little_break_insn[] = LITTLE_REMOTE_BREAKPOINT;
4133
4134 #endif /* REMOTE_BREAKPOINT */
4135
4136 /* Insert a breakpoint on targets that don't have any better breakpoint
4137 support. We read the contents of the target location and stash it,
4138 then overwrite it with a breakpoint instruction. ADDR is the target
4139 location in the target machine. CONTENTS_CACHE is a pointer to
4140 memory allocated for saving the target contents. It is guaranteed
4141 by the caller to be long enough to save sizeof BREAKPOINT bytes (this
4142 is accomplished via BREAKPOINT_MAX). */
4143
4144 static int
4145 remote_insert_breakpoint (addr, contents_cache)
4146 CORE_ADDR addr;
4147 char *contents_cache;
4148 {
4149 #ifdef REMOTE_BREAKPOINT
4150 int val;
4151 #endif
4152 int bp_size;
4153
4154 /* Try the "Z" packet if it is not already disabled.
4155 If it succeeds, then set the support to PACKET_ENABLE.
4156 If it fails, and the user has explicitly requested the Z support
4157 then report an error, otherwise, mark it disabled and go on. */
4158
4159 if ((remote_protocol_Z.support == PACKET_ENABLE)
4160 || (remote_protocol_Z.support == PACKET_SUPPORT_UNKNOWN))
4161 {
4162 char *buf = alloca (PBUFSIZ);
4163 char *p = buf;
4164
4165 addr = remote_address_masked (addr);
4166 *(p++) = 'Z';
4167 *(p++) = '0';
4168 *(p++) = ',';
4169 p += hexnumstr (p, (ULONGEST) addr);
4170 BREAKPOINT_FROM_PC (&addr, &bp_size);
4171 sprintf (p, ",%d", bp_size);
4172
4173 putpkt (buf);
4174 getpkt (buf, 0);
4175
4176 if (buf[0] != '\0')
4177 {
4178 remote_protocol_Z.support = PACKET_ENABLE;
4179 return (buf[0] == 'E');
4180 }
4181
4182 /* The stub does not support the 'Z' request. If the user has
4183 explicitly requested the Z support, or if the stub previously
4184 said it supported the packet, this is an error,
4185 otherwise, mark it disabled. */
4186
4187 else if (remote_protocol_Z.support == PACKET_ENABLE)
4188 {
4189 error ("Protocol error: Z packet not recognized by stub");
4190 }
4191 else
4192 {
4193 remote_protocol_Z.support = PACKET_DISABLE;
4194 }
4195 }
4196
4197 #ifdef REMOTE_BREAKPOINT
4198 val = target_read_memory (addr, contents_cache, sizeof big_break_insn);
4199
4200 if (val == 0)
4201 {
4202 if (TARGET_BYTE_ORDER == BIG_ENDIAN)
4203 val = target_write_memory (addr, (char *) big_break_insn,
4204 sizeof big_break_insn);
4205 else
4206 val = target_write_memory (addr, (char *) little_break_insn,
4207 sizeof little_break_insn);
4208 }
4209
4210 return val;
4211 #else
4212 return memory_insert_breakpoint (addr, contents_cache);
4213 #endif /* REMOTE_BREAKPOINT */
4214 }
4215
4216 static int
4217 remote_remove_breakpoint (addr, contents_cache)
4218 CORE_ADDR addr;
4219 char *contents_cache;
4220 {
4221 int bp_size;
4222
4223 if ((remote_protocol_Z.support == PACKET_ENABLE)
4224 || (remote_protocol_Z.support == PACKET_SUPPORT_UNKNOWN))
4225 {
4226 char *buf = alloca (PBUFSIZ);
4227 char *p = buf;
4228
4229 *(p++) = 'z';
4230 *(p++) = '0';
4231 *(p++) = ',';
4232
4233 addr = remote_address_masked (addr);
4234 p += hexnumstr (p, (ULONGEST) addr);
4235 BREAKPOINT_FROM_PC (&addr, &bp_size);
4236 sprintf (p, ",%d", bp_size);
4237
4238 putpkt (buf);
4239 getpkt (buf, 0);
4240
4241 return (buf[0] == 'E');
4242 }
4243
4244 #ifdef REMOTE_BREAKPOINT
4245 return target_write_memory (addr, contents_cache, sizeof big_break_insn);
4246 #else
4247 return memory_remove_breakpoint (addr, contents_cache);
4248 #endif /* REMOTE_BREAKPOINT */
4249 }
4250
4251 #ifdef TARGET_HAS_HARDWARE_WATCHPOINTS
4252 int
4253 remote_insert_watchpoint (addr, len, type)
4254 CORE_ADDR addr;
4255 int len;
4256 int type;
4257 {
4258 char *buf = alloca (PBUFSIZ);
4259 char *p;
4260
4261 if (remote_protocol_Z.support == PACKET_DISABLE)
4262 error ("Can't set hardware watchpoints without the 'Z' packet\n");
4263
4264 sprintf (buf, "Z%x,", type + 2 );
4265 p = strchr (buf, '\0');
4266 addr = remote_address_masked (addr);
4267 p += hexnumstr (p, (ULONGEST) addr);
4268 sprintf (p, ",%x", len);
4269
4270 putpkt (buf);
4271 getpkt (buf, 0);
4272
4273 if (buf[0] == '\0' || buf [0] == 'E')
4274 return -1;
4275
4276 return 0;
4277 }
4278
4279 int
4280 remote_remove_watchpoint (addr, len, type)
4281 CORE_ADDR addr;
4282 int len;
4283 int type;
4284 {
4285 char *buf = alloca (PBUFSIZ);
4286 char *p;
4287
4288 sprintf (buf, "z%x,", type + 2 );
4289 p = strchr (buf, '\0');
4290 addr = remote_address_masked (addr);
4291 p += hexnumstr (p, (ULONGEST) addr);
4292 sprintf (p, ",%x", len);
4293 putpkt (buf);
4294 getpkt (buf, 0);
4295
4296 if (buf[0] == '\0' || buf [0] == 'E')
4297 return -1;
4298
4299 return 0;
4300 }
4301
4302 int
4303 remote_insert_hw_breakpoint (addr, len)
4304 CORE_ADDR addr;
4305 int len;
4306 {
4307 char *buf = alloca (PBUFSIZ);
4308 char *p = buf;
4309
4310 if (remote_protocol_Z.support == PACKET_DISABLE)
4311 error ("Can't set hardware breakpoints without the 'Z' packet\n");
4312
4313 *(p++) = 'Z';
4314 *(p++) = '1';
4315 *(p++) = ',';
4316
4317 addr = remote_address_masked (addr);
4318 p += hexnumstr (p, (ULONGEST) addr);
4319 *p = '\0';
4320
4321 putpkt (buf);
4322 getpkt (buf, 0);
4323
4324 if (buf[0] == '\0' || buf [0] == 'E')
4325 return -1;
4326
4327 return 0;
4328 }
4329
4330 int
4331 remote_remove_hw_breakpoint (addr, len)
4332 CORE_ADDR addr;
4333 int len;
4334 {
4335 char *buf = alloca (PBUFSIZ);
4336 char *p = buf;
4337
4338 *(p++) = 'z';
4339 *(p++) = '1';
4340 *(p++) = ',';
4341
4342 addr = remote_address_masked (addr);
4343 p += hexnumstr (p, (ULONGEST) addr);
4344 *p = '\0';
4345
4346 putpkt(buf);
4347 getpkt (buf, 0);
4348
4349 if (buf[0] == '\0' || buf [0] == 'E')
4350 return -1;
4351
4352 return 0;
4353 }
4354 #endif
4355
4356 /* Some targets are only capable of doing downloads, and afterwards
4357 they switch to the remote serial protocol. This function provides
4358 a clean way to get from the download target to the remote target.
4359 It's basically just a wrapper so that we don't have to expose any
4360 of the internal workings of remote.c.
4361
4362 Prior to calling this routine, you should shutdown the current
4363 target code, else you will get the "A program is being debugged
4364 already..." message. Usually a call to pop_target() suffices. */
4365
4366 void
4367 push_remote_target (name, from_tty)
4368 char *name;
4369 int from_tty;
4370 {
4371 printf_filtered ("Switching to remote protocol\n");
4372 remote_open (name, from_tty);
4373 }
4374
4375 /* Other targets want to use the entire remote serial module but with
4376 certain remote_ops overridden. */
4377
4378 void
4379 open_remote_target (name, from_tty, target, extended_p)
4380 char *name;
4381 int from_tty;
4382 struct target_ops *target;
4383 int extended_p;
4384 {
4385 printf_filtered ("Selecting the %sremote protocol\n",
4386 (extended_p ? "extended-" : ""));
4387 remote_open_1 (name, from_tty, target, extended_p);
4388 }
4389
4390 /* Table used by the crc32 function to calcuate the checksum. */
4391
4392 static unsigned long crc32_table[256] =
4393 {0, 0};
4394
4395 static unsigned long
4396 crc32 (buf, len, crc)
4397 unsigned char *buf;
4398 int len;
4399 unsigned int crc;
4400 {
4401 if (!crc32_table[1])
4402 {
4403 /* Initialize the CRC table and the decoding table. */
4404 int i, j;
4405 unsigned int c;
4406
4407 for (i = 0; i < 256; i++)
4408 {
4409 for (c = i << 24, j = 8; j > 0; --j)
4410 c = c & 0x80000000 ? (c << 1) ^ 0x04c11db7 : (c << 1);
4411 crc32_table[i] = c;
4412 }
4413 }
4414
4415 while (len--)
4416 {
4417 crc = (crc << 8) ^ crc32_table[((crc >> 24) ^ *buf) & 255];
4418 buf++;
4419 }
4420 return crc;
4421 }
4422
4423 /* compare-sections command
4424
4425 With no arguments, compares each loadable section in the exec bfd
4426 with the same memory range on the target, and reports mismatches.
4427 Useful for verifying the image on the target against the exec file.
4428 Depends on the target understanding the new "qCRC:" request. */
4429
4430 /* FIXME: cagney/1999-10-26: This command should be broken down into a
4431 target method (target verify memory) and generic version of the
4432 actual command. This will allow other high-level code (especially
4433 generic_load()) to make use of this target functionality. */
4434
4435 static void
4436 compare_sections_command (args, from_tty)
4437 char *args;
4438 int from_tty;
4439 {
4440 asection *s;
4441 unsigned long host_crc, target_crc;
4442 extern bfd *exec_bfd;
4443 struct cleanup *old_chain;
4444 char *tmp;
4445 char *sectdata;
4446 char *sectname;
4447 char *buf = alloca (PBUFSIZ);
4448 bfd_size_type size;
4449 bfd_vma lma;
4450 int matched = 0;
4451 int mismatched = 0;
4452
4453 if (!exec_bfd)
4454 error ("command cannot be used without an exec file");
4455 if (!current_target.to_shortname ||
4456 strcmp (current_target.to_shortname, "remote") != 0)
4457 error ("command can only be used with remote target");
4458
4459 for (s = exec_bfd->sections; s; s = s->next)
4460 {
4461 if (!(s->flags & SEC_LOAD))
4462 continue; /* skip non-loadable section */
4463
4464 size = bfd_get_section_size_before_reloc (s);
4465 if (size == 0)
4466 continue; /* skip zero-length section */
4467
4468 sectname = (char *) bfd_get_section_name (exec_bfd, s);
4469 if (args && strcmp (args, sectname) != 0)
4470 continue; /* not the section selected by user */
4471
4472 matched = 1; /* do this section */
4473 lma = s->lma;
4474 /* FIXME: assumes lma can fit into long */
4475 sprintf (buf, "qCRC:%lx,%lx", (long) lma, (long) size);
4476 putpkt (buf);
4477
4478 /* be clever; compute the host_crc before waiting for target reply */
4479 sectdata = xmalloc (size);
4480 old_chain = make_cleanup (free, sectdata);
4481 bfd_get_section_contents (exec_bfd, s, sectdata, 0, size);
4482 host_crc = crc32 ((unsigned char *) sectdata, size, 0xffffffff);
4483
4484 getpkt (buf, 0);
4485 if (buf[0] == 'E')
4486 error ("target memory fault, section %s, range 0x%08x -- 0x%08x",
4487 sectname, lma, lma + size);
4488 if (buf[0] != 'C')
4489 error ("remote target does not support this operation");
4490
4491 for (target_crc = 0, tmp = &buf[1]; *tmp; tmp++)
4492 target_crc = target_crc * 16 + fromhex (*tmp);
4493
4494 printf_filtered ("Section %s, range 0x%s -- 0x%s: ",
4495 sectname, paddr (lma), paddr (lma + size));
4496 if (host_crc == target_crc)
4497 printf_filtered ("matched.\n");
4498 else
4499 {
4500 printf_filtered ("MIS-MATCHED!\n");
4501 mismatched++;
4502 }
4503
4504 do_cleanups (old_chain);
4505 }
4506 if (mismatched > 0)
4507 warning ("One or more sections of the remote executable does not match\n\
4508 the loaded file\n");
4509 if (args && !matched)
4510 printf_filtered ("No loaded section named '%s'.\n", args);
4511 }
4512
4513 static int
4514 remote_query (query_type, buf, outbuf, bufsiz)
4515 int query_type;
4516 char *buf;
4517 char *outbuf;
4518 int *bufsiz;
4519 {
4520 int i;
4521 char *buf2 = alloca (PBUFSIZ);
4522 char *p2 = &buf2[0];
4523
4524 if (!bufsiz)
4525 error ("null pointer to remote bufer size specified");
4526
4527 /* minimum outbuf size is PBUFSIZ - if bufsiz is not large enough let
4528 the caller know and return what the minimum size is */
4529 /* Note: a zero bufsiz can be used to query the minimum buffer size */
4530 if (*bufsiz < PBUFSIZ)
4531 {
4532 *bufsiz = PBUFSIZ;
4533 return -1;
4534 }
4535
4536 /* except for querying the minimum buffer size, target must be open */
4537 if (!remote_desc)
4538 error ("remote query is only available after target open");
4539
4540 /* we only take uppercase letters as query types, at least for now */
4541 if ((query_type < 'A') || (query_type > 'Z'))
4542 error ("invalid remote query type");
4543
4544 if (!buf)
4545 error ("null remote query specified");
4546
4547 if (!outbuf)
4548 error ("remote query requires a buffer to receive data");
4549
4550 outbuf[0] = '\0';
4551
4552 *p2++ = 'q';
4553 *p2++ = query_type;
4554
4555 /* we used one buffer char for the remote protocol q command and another
4556 for the query type. As the remote protocol encapsulation uses 4 chars
4557 plus one extra in case we are debugging (remote_debug),
4558 we have PBUFZIZ - 7 left to pack the query string */
4559 i = 0;
4560 while (buf[i] && (i < (PBUFSIZ - 8)))
4561 {
4562 /* bad caller may have sent forbidden characters */
4563 if ((!isprint (buf[i])) || (buf[i] == '$') || (buf[i] == '#'))
4564 error ("illegal characters in query string");
4565
4566 *p2++ = buf[i];
4567 i++;
4568 }
4569 *p2 = buf[i];
4570
4571 if (buf[i])
4572 error ("query larger than available buffer");
4573
4574 i = putpkt (buf2);
4575 if (i < 0)
4576 return i;
4577
4578 getpkt (outbuf, 0);
4579
4580 return 0;
4581 }
4582
4583 static void
4584 remote_rcmd (char *command,
4585 struct gdb_file *outbuf)
4586 {
4587 int i;
4588 char *buf = alloca (PBUFSIZ);
4589 char *p = buf;
4590
4591 if (!remote_desc)
4592 error ("remote rcmd is only available after target open");
4593
4594 /* Send a NULL command across as an empty command */
4595 if (command == NULL)
4596 command = "";
4597
4598 /* The query prefix */
4599 strcpy (buf, "qRcmd,");
4600 p = strchr (buf, '\0');
4601
4602 if ((strlen (buf) + strlen (command) * 2 + 8/*misc*/) > PBUFSIZ)
4603 error ("\"monitor\" command ``%s'' is too long\n", command);
4604
4605 /* Encode the actual command */
4606 for (i = 0; command[i]; i++)
4607 {
4608 *p++ = tohex ((command[i] >> 4) & 0xf);
4609 *p++ = tohex (command[i] & 0xf);
4610 }
4611 *p = '\0';
4612
4613 if (putpkt (buf) < 0)
4614 error ("Communication problem with target\n");
4615
4616 /* get/display the response */
4617 while (1)
4618 {
4619 /* XXX - see also tracepoint.c:remote_get_noisy_reply() */
4620 buf[0] = '\0';
4621 getpkt (buf, 0);
4622 if (buf[0] == '\0')
4623 error ("Target does not support this command\n");
4624 if (buf[0] == 'O' && buf[1] != 'K')
4625 {
4626 remote_console_output (buf + 1); /* 'O' message from stub */
4627 continue;
4628 }
4629 if (strcmp (buf, "OK") == 0)
4630 break;
4631 if (strlen (buf) == 3 && buf[0] == 'E'
4632 && isdigit (buf[1]) && isdigit (buf[2]))
4633 {
4634 error ("Protocol error with Rcmd");
4635 }
4636 for (p = buf; p[0] != '\0' && p[1] != '\0'; p += 2)
4637 {
4638 char c = (fromhex (p[0]) << 4) + fromhex (p[1]);
4639 fputc_unfiltered (c, outbuf);
4640 }
4641 break;
4642 }
4643 }
4644
4645 static void
4646 packet_command (args, from_tty)
4647 char *args;
4648 int from_tty;
4649 {
4650 char *buf = alloca (PBUFSIZ);
4651
4652 if (!remote_desc)
4653 error ("command can only be used with remote target");
4654
4655 if (!args)
4656 error ("remote-packet command requires packet text as argument");
4657
4658 puts_filtered ("sending: ");
4659 print_packet (args);
4660 puts_filtered ("\n");
4661 putpkt (args);
4662
4663 getpkt (buf, 0);
4664 puts_filtered ("received: ");
4665 print_packet (buf);
4666 puts_filtered ("\n");
4667 }
4668
4669 #if 0
4670 /* --------- UNIT_TEST for THREAD oriented PACKETS ------------------------- */
4671
4672 static void display_thread_info PARAMS ((struct gdb_ext_thread_info * info));
4673
4674 static void threadset_test_cmd PARAMS ((char *cmd, int tty));
4675
4676 static void threadalive_test PARAMS ((char *cmd, int tty));
4677
4678 static void threadlist_test_cmd PARAMS ((char *cmd, int tty));
4679
4680 int get_and_display_threadinfo PARAMS ((threadref * ref));
4681
4682 static void threadinfo_test_cmd PARAMS ((char *cmd, int tty));
4683
4684 static int thread_display_step PARAMS ((threadref * ref, void *context));
4685
4686 static void threadlist_update_test_cmd PARAMS ((char *cmd, int tty));
4687
4688 static void init_remote_threadtests PARAMS ((void));
4689
4690 #define SAMPLE_THREAD 0x05060708 /* Truncated 64 bit threadid */
4691
4692 static void
4693 threadset_test_cmd (cmd, tty)
4694 char *cmd;
4695 int tty;
4696 {
4697 int sample_thread = SAMPLE_THREAD;
4698
4699 printf_filtered ("Remote threadset test\n");
4700 set_thread (sample_thread, 1);
4701 }
4702
4703
4704 static void
4705 threadalive_test (cmd, tty)
4706 char *cmd;
4707 int tty;
4708 {
4709 int sample_thread = SAMPLE_THREAD;
4710
4711 if (remote_thread_alive (sample_thread))
4712 printf_filtered ("PASS: Thread alive test\n");
4713 else
4714 printf_filtered ("FAIL: Thread alive test\n");
4715 }
4716
4717 void output_threadid PARAMS ((char *title, threadref * ref));
4718
4719 void
4720 output_threadid (title, ref)
4721 char *title;
4722 threadref *ref;
4723 {
4724 char hexid[20];
4725
4726 pack_threadid (&hexid[0], ref); /* Convert threead id into hex */
4727 hexid[16] = 0;
4728 printf_filtered ("%s %s\n", title, (&hexid[0]));
4729 }
4730
4731 static void
4732 threadlist_test_cmd (cmd, tty)
4733 char *cmd;
4734 int tty;
4735 {
4736 int startflag = 1;
4737 threadref nextthread;
4738 int done, result_count;
4739 threadref threadlist[3];
4740
4741 printf_filtered ("Remote Threadlist test\n");
4742 if (!remote_get_threadlist (startflag, &nextthread, 3, &done,
4743 &result_count, &threadlist[0]))
4744 printf_filtered ("FAIL: threadlist test\n");
4745 else
4746 {
4747 threadref *scan = threadlist;
4748 threadref *limit = scan + result_count;
4749
4750 while (scan < limit)
4751 output_threadid (" thread ", scan++);
4752 }
4753 }
4754
4755 void
4756 display_thread_info (info)
4757 struct gdb_ext_thread_info *info;
4758 {
4759 output_threadid ("Threadid: ", &info->threadid);
4760 printf_filtered ("Name: %s\n ", info->shortname);
4761 printf_filtered ("State: %s\n", info->display);
4762 printf_filtered ("other: %s\n\n", info->more_display);
4763 }
4764
4765 int
4766 get_and_display_threadinfo (ref)
4767 threadref *ref;
4768 {
4769 int result;
4770 int set;
4771 struct gdb_ext_thread_info threadinfo;
4772
4773 set = TAG_THREADID | TAG_EXISTS | TAG_THREADNAME
4774 | TAG_MOREDISPLAY | TAG_DISPLAY;
4775 if (0 != (result = remote_get_threadinfo (ref, set, &threadinfo)))
4776 display_thread_info (&threadinfo);
4777 return result;
4778 }
4779
4780 static void
4781 threadinfo_test_cmd (cmd, tty)
4782 char *cmd;
4783 int tty;
4784 {
4785 int athread = SAMPLE_THREAD;
4786 threadref thread;
4787 int set;
4788
4789 int_to_threadref (&thread, athread);
4790 printf_filtered ("Remote Threadinfo test\n");
4791 if (!get_and_display_threadinfo (&thread))
4792 printf_filtered ("FAIL cannot get thread info\n");
4793 }
4794
4795 static int
4796 thread_display_step (ref, context)
4797 threadref *ref;
4798 void *context;
4799 {
4800 /* output_threadid(" threadstep ",ref); *//* simple test */
4801 return get_and_display_threadinfo (ref);
4802 }
4803
4804 static void
4805 threadlist_update_test_cmd (cmd, tty)
4806 char *cmd;
4807 int tty;
4808 {
4809 printf_filtered ("Remote Threadlist update test\n");
4810 remote_threadlist_iterator (thread_display_step, 0, CRAZY_MAX_THREADS);
4811 }
4812
4813 static void
4814 init_remote_threadtests (void)
4815 {
4816 add_com ("tlist", class_obscure, threadlist_test_cmd,
4817 "Fetch and print the remote list of thread identifiers, one pkt only");
4818 add_com ("tinfo", class_obscure, threadinfo_test_cmd,
4819 "Fetch and display info about one thread");
4820 add_com ("tset", class_obscure, threadset_test_cmd,
4821 "Test setting to a different thread");
4822 add_com ("tupd", class_obscure, threadlist_update_test_cmd,
4823 "Iterate through updating all remote thread info");
4824 add_com ("talive", class_obscure, threadalive_test,
4825 " Remote thread alive test ");
4826 }
4827
4828 #endif /* 0 */
4829
4830 static void
4831 init_remote_ops ()
4832 {
4833 remote_ops.to_shortname = "remote";
4834 remote_ops.to_longname = "Remote serial target in gdb-specific protocol";
4835 remote_ops.to_doc =
4836 "Use a remote computer via a serial line, using a gdb-specific protocol.\n\
4837 Specify the serial device it is connected to (e.g. /dev/ttya).";
4838 remote_ops.to_open = remote_open;
4839 remote_ops.to_close = remote_close;
4840 remote_ops.to_detach = remote_detach;
4841 remote_ops.to_resume = remote_resume;
4842 remote_ops.to_wait = remote_wait;
4843 remote_ops.to_fetch_registers = remote_fetch_registers;
4844 remote_ops.to_store_registers = remote_store_registers;
4845 remote_ops.to_prepare_to_store = remote_prepare_to_store;
4846 remote_ops.to_xfer_memory = remote_xfer_memory;
4847 remote_ops.to_files_info = remote_files_info;
4848 remote_ops.to_insert_breakpoint = remote_insert_breakpoint;
4849 remote_ops.to_remove_breakpoint = remote_remove_breakpoint;
4850 remote_ops.to_kill = remote_kill;
4851 remote_ops.to_load = generic_load;
4852 remote_ops.to_mourn_inferior = remote_mourn;
4853 remote_ops.to_thread_alive = remote_thread_alive;
4854 remote_ops.to_find_new_threads = remote_threads_info;
4855 remote_ops.to_stop = remote_stop;
4856 remote_ops.to_query = remote_query;
4857 remote_ops.to_rcmd = remote_rcmd;
4858 remote_ops.to_stratum = process_stratum;
4859 remote_ops.to_has_all_memory = 1;
4860 remote_ops.to_has_memory = 1;
4861 remote_ops.to_has_stack = 1;
4862 remote_ops.to_has_registers = 1;
4863 remote_ops.to_has_execution = 1;
4864 remote_ops.to_has_thread_control = tc_schedlock; /* can lock scheduler */
4865 remote_ops.to_magic = OPS_MAGIC;
4866 }
4867
4868 /* Set up the extended remote vector by making a copy of the standard
4869 remote vector and adding to it. */
4870
4871 static void
4872 init_extended_remote_ops ()
4873 {
4874 extended_remote_ops = remote_ops;
4875
4876 extended_remote_ops.to_shortname = "extended-remote";
4877 extended_remote_ops.to_longname =
4878 "Extended remote serial target in gdb-specific protocol";
4879 extended_remote_ops.to_doc =
4880 "Use a remote computer via a serial line, using a gdb-specific protocol.\n\
4881 Specify the serial device it is connected to (e.g. /dev/ttya).",
4882 extended_remote_ops.to_open = extended_remote_open;
4883 extended_remote_ops.to_create_inferior = extended_remote_create_inferior;
4884 extended_remote_ops.to_mourn_inferior = extended_remote_mourn;
4885 }
4886
4887 /*
4888 * Command: info remote-process
4889 *
4890 * This implements Cisco's version of the "info proc" command.
4891 *
4892 * This query allows the target stub to return an arbitrary string
4893 * (or strings) giving arbitrary information about the target process.
4894 * This is optional; the target stub isn't required to implement it.
4895 *
4896 * Syntax: qfProcessInfo request first string
4897 * qsProcessInfo request subsequent string
4898 * reply: 'O'<hex-encoded-string>
4899 * 'l' last reply (empty)
4900 */
4901
4902 static void
4903 remote_info_process (args, from_tty)
4904 char *args;
4905 int from_tty;
4906 {
4907 char *buf = alloca (PBUFSIZ);
4908
4909 if (remote_desc == 0)
4910 error ("Command can only be used when connected to the remote target.");
4911
4912 putpkt ("qfProcessInfo");
4913 getpkt (buf, 0);
4914 if (buf[0] == 0)
4915 return; /* Silently: target does not support this feature. */
4916
4917 if (buf[0] == 'E')
4918 error ("info proc: target error.");
4919
4920 while (buf[0] == 'O') /* Capitol-O packet */
4921 {
4922 remote_console_output (&buf[1]);
4923 putpkt ("qsProcessInfo");
4924 getpkt (buf, 0);
4925 }
4926 }
4927
4928 /*
4929 * Target Cisco
4930 */
4931
4932 static void
4933 remote_cisco_open (name, from_tty)
4934 char *name;
4935 int from_tty;
4936 {
4937 if (name == 0)
4938 error (
4939 "To open a remote debug connection, you need to specify what \n\
4940 device is attached to the remote system (e.g. host:port).");
4941
4942 /* See FIXME above */
4943 wait_forever_enabled_p = 1;
4944
4945 target_preopen (from_tty);
4946
4947 unpush_target (&remote_cisco_ops);
4948
4949 remote_dcache = dcache_init (remote_read_bytes, remote_write_bytes);
4950
4951 remote_desc = SERIAL_OPEN (name);
4952 if (!remote_desc)
4953 perror_with_name (name);
4954
4955 /*
4956 * If a baud rate was specified on the gdb command line it will
4957 * be greater than the initial value of -1. If it is, use it otherwise
4958 * default to 9600
4959 */
4960
4961 baud_rate = (baud_rate > 0) ? baud_rate : 9600;
4962 if (SERIAL_SETBAUDRATE (remote_desc, baud_rate))
4963 {
4964 SERIAL_CLOSE (remote_desc);
4965 perror_with_name (name);
4966 }
4967
4968 SERIAL_RAW (remote_desc);
4969
4970 /* If there is something sitting in the buffer we might take it as a
4971 response to a command, which would be bad. */
4972 SERIAL_FLUSH_INPUT (remote_desc);
4973
4974 if (from_tty)
4975 {
4976 puts_filtered ("Remote debugging using ");
4977 puts_filtered (name);
4978 puts_filtered ("\n");
4979 }
4980
4981 remote_cisco_mode = 1;
4982
4983 push_target (&remote_cisco_ops); /* Switch to using cisco target now */
4984
4985 init_packet_config (&remote_protocol_P);
4986 init_packet_config (&remote_protocol_Z);
4987
4988 general_thread = -2;
4989 continue_thread = -2;
4990
4991 /* Force remote_write_bytes to check whether target supports
4992 binary downloading. */
4993 init_packet_config (&remote_protocol_binary_download);
4994
4995 /* Without this, some commands which require an active target (such
4996 as kill) won't work. This variable serves (at least) double duty
4997 as both the pid of the target process (if it has such), and as a
4998 flag indicating that a target is active. These functions should
4999 be split out into seperate variables, especially since GDB will
5000 someday have a notion of debugging several processes. */
5001 inferior_pid = MAGIC_NULL_PID;
5002
5003 /* Start the remote connection; if error (0), discard this target. */
5004
5005 if (!catch_errors (remote_start_remote_dummy, (char *) 0,
5006 "Couldn't establish connection to remote target\n",
5007 RETURN_MASK_ALL))
5008 {
5009 pop_target ();
5010 return;
5011 }
5012 }
5013
5014 static void
5015 remote_cisco_close (quitting)
5016 int quitting;
5017 {
5018 remote_cisco_mode = 0;
5019 remote_close (quitting);
5020 }
5021
5022 static void
5023 remote_cisco_mourn
5024 PARAMS ((void))
5025 {
5026 remote_mourn_1 (&remote_cisco_ops);
5027 }
5028
5029 enum
5030 {
5031 READ_MORE,
5032 FATAL_ERROR,
5033 ENTER_DEBUG,
5034 DISCONNECT_TELNET
5035 }
5036 minitelnet_return;
5037
5038 /* shared between readsocket() and readtty() */
5039 static char *tty_input;
5040
5041 static int escape_count;
5042 static int echo_check;
5043 extern int quit_flag;
5044
5045 static int
5046 readsocket ()
5047 {
5048 int data;
5049
5050 /* Loop until the socket doesn't have any more data */
5051
5052 while ((data = readchar (0)) >= 0)
5053 {
5054 /* Check for the escape sequence */
5055 if (data == '|')
5056 {
5057 /* If this is the fourth escape, get out */
5058 if (++escape_count == 4)
5059 {
5060 return ENTER_DEBUG;
5061 }
5062 else
5063 { /* This is a '|', but not the fourth in a row.
5064 Continue without echoing it. If it isn't actually
5065 one of four in a row, it'll be echoed later. */
5066 continue;
5067 }
5068 }
5069 else
5070 /* Not a '|' */
5071 {
5072 /* Ensure any pending '|'s are flushed. */
5073
5074 for (; escape_count > 0; escape_count--)
5075 putchar ('|');
5076 }
5077
5078 if (data == '\r') /* If this is a return character, */
5079 continue; /* - just supress it. */
5080
5081 if (echo_check != -1) /* Check for echo of user input. */
5082 {
5083 if (tty_input[echo_check] == data)
5084 {
5085 echo_check++; /* Character matched user input: */
5086 continue; /* Continue without echoing it. */
5087 }
5088 else if ((data == '\n') && (tty_input[echo_check] == '\r'))
5089 { /* End of the line (and of echo checking). */
5090 echo_check = -1; /* No more echo supression */
5091 continue; /* Continue without echoing. */
5092 }
5093 else
5094 { /* Failed check for echo of user input.
5095 We now have some suppressed output to flush! */
5096 int j;
5097
5098 for (j = 0; j < echo_check; j++)
5099 putchar (tty_input[j]);
5100 echo_check = -1;
5101 }
5102 }
5103 putchar (data); /* Default case: output the char. */
5104 }
5105
5106 if (data == SERIAL_TIMEOUT) /* Timeout returned from readchar. */
5107 return READ_MORE; /* Try to read some more */
5108 else
5109 return FATAL_ERROR; /* Trouble, bail out */
5110 }
5111
5112 static int
5113 readtty ()
5114 {
5115 int tty_bytecount;
5116
5117 /* First, read a buffer full from the terminal */
5118 tty_bytecount = read (fileno (stdin), tty_input, sizeof (tty_input) - 1);
5119 if (tty_bytecount == -1)
5120 {
5121 perror ("readtty: read failed");
5122 return FATAL_ERROR;
5123 }
5124
5125 /* Remove a quoted newline. */
5126 if (tty_input[tty_bytecount - 1] == '\n' &&
5127 tty_input[tty_bytecount - 2] == '\\') /* line ending in backslash */
5128 {
5129 tty_input[--tty_bytecount] = 0; /* remove newline */
5130 tty_input[--tty_bytecount] = 0; /* remove backslash */
5131 }
5132
5133 /* Turn trailing newlines into returns */
5134 if (tty_input[tty_bytecount - 1] == '\n')
5135 tty_input[tty_bytecount - 1] = '\r';
5136
5137 /* If the line consists of a ~, enter debugging mode. */
5138 if ((tty_input[0] == '~') && (tty_bytecount == 2))
5139 return ENTER_DEBUG;
5140
5141 /* Make this a zero terminated string and write it out */
5142 tty_input[tty_bytecount] = 0;
5143 if (SERIAL_WRITE (remote_desc, tty_input, tty_bytecount))
5144 {
5145 perror_with_name ("readtty: write failed");
5146 return FATAL_ERROR;
5147 }
5148
5149 return READ_MORE;
5150 }
5151
5152 static int
5153 minitelnet ()
5154 {
5155 fd_set input; /* file descriptors for select */
5156 int tablesize; /* max number of FDs for select */
5157 int status;
5158 int quit_count = 0;
5159
5160 extern int escape_count; /* global shared by readsocket */
5161 extern int echo_check; /* ditto */
5162
5163 escape_count = 0;
5164 echo_check = -1;
5165
5166 tablesize = 8 * sizeof (input);
5167
5168 for (;;)
5169 {
5170 /* Check for anything from our socket - doesn't block. Note that
5171 this must be done *before* the select as there may be
5172 buffered I/O waiting to be processed. */
5173
5174 if ((status = readsocket ()) == FATAL_ERROR)
5175 {
5176 error ("Debugging terminated by communications error");
5177 }
5178 else if (status != READ_MORE)
5179 {
5180 return (status);
5181 }
5182
5183 fflush (stdout); /* Flush output before blocking */
5184
5185 /* Now block on more socket input or TTY input */
5186
5187 FD_ZERO (&input);
5188 FD_SET (fileno (stdin), &input);
5189 FD_SET (DEPRECATED_SERIAL_FD (remote_desc), &input);
5190
5191 status = select (tablesize, &input, 0, 0, 0);
5192 if ((status == -1) && (errno != EINTR))
5193 {
5194 error ("Communications error on select %d", errno);
5195 }
5196
5197 /* Handle Control-C typed */
5198
5199 if (quit_flag)
5200 {
5201 if ((++quit_count) == 2)
5202 {
5203 if (query ("Interrupt GDB? "))
5204 {
5205 printf_filtered ("Interrupted by user.\n");
5206 return_to_top_level (RETURN_QUIT);
5207 }
5208 quit_count = 0;
5209 }
5210 quit_flag = 0;
5211
5212 if (remote_break)
5213 SERIAL_SEND_BREAK (remote_desc);
5214 else
5215 SERIAL_WRITE (remote_desc, "\003", 1);
5216
5217 continue;
5218 }
5219
5220 /* Handle console input */
5221
5222 if (FD_ISSET (fileno (stdin), &input))
5223 {
5224 quit_count = 0;
5225 echo_check = 0;
5226 status = readtty ();
5227 if (status == READ_MORE)
5228 continue;
5229
5230 return status; /* telnet session ended */
5231 }
5232 }
5233 }
5234
5235 static int
5236 remote_cisco_wait (pid, status)
5237 int pid;
5238 struct target_waitstatus *status;
5239 {
5240 if (minitelnet () != ENTER_DEBUG)
5241 {
5242 error ("Debugging session terminated by protocol error");
5243 }
5244 putpkt ("?");
5245 return remote_wait (pid, status);
5246 }
5247
5248 static void
5249 init_remote_cisco_ops ()
5250 {
5251 remote_cisco_ops.to_shortname = "cisco";
5252 remote_cisco_ops.to_longname = "Remote serial target in cisco-specific protocol";
5253 remote_cisco_ops.to_doc =
5254 "Use a remote machine via TCP, using a cisco-specific protocol.\n\
5255 Specify the serial device it is connected to (e.g. host:2020).";
5256 remote_cisco_ops.to_open = remote_cisco_open;
5257 remote_cisco_ops.to_close = remote_cisco_close;
5258 remote_cisco_ops.to_detach = remote_detach;
5259 remote_cisco_ops.to_resume = remote_resume;
5260 remote_cisco_ops.to_wait = remote_cisco_wait;
5261 remote_cisco_ops.to_fetch_registers = remote_fetch_registers;
5262 remote_cisco_ops.to_store_registers = remote_store_registers;
5263 remote_cisco_ops.to_prepare_to_store = remote_prepare_to_store;
5264 remote_cisco_ops.to_xfer_memory = remote_xfer_memory;
5265 remote_cisco_ops.to_files_info = remote_files_info;
5266 remote_cisco_ops.to_insert_breakpoint = remote_insert_breakpoint;
5267 remote_cisco_ops.to_remove_breakpoint = remote_remove_breakpoint;
5268 remote_cisco_ops.to_kill = remote_kill;
5269 remote_cisco_ops.to_load = generic_load;
5270 remote_cisco_ops.to_mourn_inferior = remote_cisco_mourn;
5271 remote_cisco_ops.to_thread_alive = remote_thread_alive;
5272 remote_cisco_ops.to_find_new_threads = remote_threads_info;
5273 remote_cisco_ops.to_stratum = process_stratum;
5274 remote_cisco_ops.to_has_all_memory = 1;
5275 remote_cisco_ops.to_has_memory = 1;
5276 remote_cisco_ops.to_has_stack = 1;
5277 remote_cisco_ops.to_has_registers = 1;
5278 remote_cisco_ops.to_has_execution = 1;
5279 remote_cisco_ops.to_magic = OPS_MAGIC;
5280 }
5281
5282 static int
5283 remote_can_async_p (void)
5284 {
5285 /* We're async whenever the serial device is. */
5286 return SERIAL_CAN_ASYNC_P (remote_desc);
5287 }
5288
5289 static int
5290 remote_is_async_p (void)
5291 {
5292 /* We're async whenever the serial device is. */
5293 return SERIAL_IS_ASYNC_P (remote_desc);
5294 }
5295
5296 /* Pass the SERIAL event on and up to the client. One day this code
5297 will be able to delay notifying the client of an event until the
5298 point where an entire packet has been received. */
5299
5300 static void (*async_client_callback) (enum inferior_event_type event_type, void *context);
5301 static void *async_client_context;
5302 static serial_event_ftype remote_async_serial_handler;
5303
5304 static void
5305 remote_async_serial_handler (serial_t scb, void *context)
5306 {
5307 /* Don't propogate error information up to the client. Instead let
5308 the client find out about the error by querying the target. */
5309 async_client_callback (INF_REG_EVENT, async_client_context);
5310 }
5311
5312 static void
5313 remote_async (void (*callback) (enum inferior_event_type event_type, void *context), void *context)
5314 {
5315 if (callback != NULL)
5316 {
5317 SERIAL_ASYNC (remote_desc, remote_async_serial_handler, NULL);
5318 async_client_callback = callback;
5319 async_client_context = context;
5320 }
5321 else
5322 SERIAL_ASYNC (remote_desc, NULL, NULL);
5323 }
5324
5325 /* Target async and target extended-async.
5326
5327 This are temporary targets, until it is all tested. Eventually
5328 async support will be incorporated int the usual 'remote'
5329 target. */
5330
5331 static void
5332 init_remote_async_ops ()
5333 {
5334 remote_async_ops.to_shortname = "async";
5335 remote_async_ops.to_longname = "Remote serial target in async version of the gdb-specific protocol";
5336 remote_async_ops.to_doc =
5337 "Use a remote computer via a serial line, using a gdb-specific protocol.\n\
5338 Specify the serial device it is connected to (e.g. /dev/ttya).";
5339 remote_async_ops.to_open = remote_async_open;
5340 remote_async_ops.to_close = remote_close;
5341 remote_async_ops.to_detach = remote_async_detach;
5342 remote_async_ops.to_resume = remote_async_resume;
5343 remote_async_ops.to_wait = remote_async_wait;
5344 remote_async_ops.to_fetch_registers = remote_fetch_registers;
5345 remote_async_ops.to_store_registers = remote_store_registers;
5346 remote_async_ops.to_prepare_to_store = remote_prepare_to_store;
5347 remote_async_ops.to_xfer_memory = remote_xfer_memory;
5348 remote_async_ops.to_files_info = remote_files_info;
5349 remote_async_ops.to_insert_breakpoint = remote_insert_breakpoint;
5350 remote_async_ops.to_remove_breakpoint = remote_remove_breakpoint;
5351 remote_async_ops.to_terminal_inferior = remote_async_terminal_inferior;
5352 remote_async_ops.to_terminal_ours = remote_async_terminal_ours;
5353 remote_async_ops.to_kill = remote_async_kill;
5354 remote_async_ops.to_load = generic_load;
5355 remote_async_ops.to_mourn_inferior = remote_async_mourn;
5356 remote_async_ops.to_thread_alive = remote_thread_alive;
5357 remote_async_ops.to_find_new_threads = remote_threads_info;
5358 remote_async_ops.to_stop = remote_stop;
5359 remote_async_ops.to_query = remote_query;
5360 remote_async_ops.to_rcmd = remote_rcmd;
5361 remote_async_ops.to_stratum = process_stratum;
5362 remote_async_ops.to_has_all_memory = 1;
5363 remote_async_ops.to_has_memory = 1;
5364 remote_async_ops.to_has_stack = 1;
5365 remote_async_ops.to_has_registers = 1;
5366 remote_async_ops.to_has_execution = 1;
5367 remote_async_ops.to_has_thread_control = tc_schedlock; /* can lock scheduler */
5368 remote_async_ops.to_can_async_p = remote_can_async_p;
5369 remote_async_ops.to_is_async_p = remote_is_async_p;
5370 remote_async_ops.to_async = remote_async;
5371 remote_async_ops.to_magic = OPS_MAGIC;
5372 }
5373
5374 /* Set up the async extended remote vector by making a copy of the standard
5375 remote vector and adding to it. */
5376
5377 static void
5378 init_extended_async_remote_ops ()
5379 {
5380 extended_async_remote_ops = remote_async_ops;
5381
5382 extended_async_remote_ops.to_shortname = "extended-async";
5383 extended_async_remote_ops.to_longname =
5384 "Extended remote serial target in async gdb-specific protocol";
5385 extended_async_remote_ops.to_doc =
5386 "Use a remote computer via a serial line, using an async gdb-specific protocol.\n\
5387 Specify the serial device it is connected to (e.g. /dev/ttya).",
5388 extended_async_remote_ops.to_open = extended_remote_async_open;
5389 extended_async_remote_ops.to_create_inferior = extended_remote_async_create_inferior;
5390 extended_async_remote_ops.to_mourn_inferior = extended_remote_mourn;
5391 }
5392
5393 static void
5394 set_remote_cmd (args, from_tty)
5395 char *args;
5396 int from_tty;
5397 {
5398
5399 }
5400
5401
5402 static void
5403 build_remote_gdbarch_data ()
5404 {
5405 build_remote_packet_sizes ();
5406
5407 /* Cisco stuff */
5408 tty_input = xmalloc (PBUFSIZ);
5409 remote_address_size = TARGET_PTR_BIT;
5410 }
5411
5412 void
5413 _initialize_remote ()
5414 {
5415 static struct cmd_list_element *remote_set_cmdlist;
5416 static struct cmd_list_element *remote_show_cmdlist;
5417 struct cmd_list_element *tmpcmd;
5418
5419 /* architecture specific data */
5420 build_remote_gdbarch_data ();
5421 register_gdbarch_swap (&tty_input, sizeof (&tty_input), NULL);
5422 register_remote_packet_sizes ();
5423 register_gdbarch_swap (&remote_address_size,
5424 sizeof (&remote_address_size), NULL);
5425 register_gdbarch_swap (NULL, 0, build_remote_gdbarch_data);
5426
5427 init_remote_ops ();
5428 add_target (&remote_ops);
5429
5430 init_extended_remote_ops ();
5431 add_target (&extended_remote_ops);
5432
5433 init_remote_async_ops ();
5434 add_target (&remote_async_ops);
5435
5436 init_extended_async_remote_ops ();
5437 add_target (&extended_async_remote_ops);
5438
5439 init_remote_cisco_ops ();
5440 add_target (&remote_cisco_ops);
5441
5442 #if 0
5443 init_remote_threadtests ();
5444 #endif
5445
5446 add_prefix_cmd ("remote", class_maintenance, set_remote_cmd, "\
5447 Remote protocol specific variables\n\
5448 Configure various remote-protocol specific variables such as\n\
5449 the packets being used",
5450 &remote_set_cmdlist, "set remote ",
5451 0/*allow-unknown*/, &setlist);
5452 add_prefix_cmd ("remote", class_maintenance, set_remote_cmd, "\
5453 Remote protocol specific variables\n\
5454 Configure various remote-protocol specific variables such as\n\
5455 the packets being used",
5456 &remote_show_cmdlist, "show remote ",
5457 0/*allow-unknown*/, &showlist);
5458
5459 add_cmd ("compare-sections", class_obscure, compare_sections_command,
5460 "Compare section data on target to the exec file.\n\
5461 Argument is a single section name (default: all loaded sections).",
5462 &cmdlist);
5463
5464 add_cmd ("packet", class_maintenance, packet_command,
5465 "Send an arbitrary packet to a remote target.\n\
5466 maintenance packet TEXT\n\
5467 If GDB is talking to an inferior via the GDB serial protocol, then\n\
5468 this command sends the string TEXT to the inferior, and displays the\n\
5469 response packet. GDB supplies the initial `$' character, and the\n\
5470 terminating `#' character and checksum.",
5471 &maintenancelist);
5472
5473 add_show_from_set
5474 (add_set_cmd ("remotetimeout", no_class,
5475 var_integer, (char *) &remote_timeout,
5476 "Set timeout value for remote read.\n",
5477 &setlist),
5478 &showlist);
5479
5480 add_show_from_set
5481 (add_set_cmd ("remotebreak", no_class,
5482 var_boolean, (char *) &remote_break,
5483 "Set whether to send break if interrupted.\n",
5484 &setlist),
5485 &showlist);
5486
5487 /* Install commands for configuring memory read/write packets. */
5488
5489 add_cmd ("remotewritesize", no_class, set_memory_write_packet_size,
5490 "Set the maximum number of bytes per memory write packet (deprecated).\n",
5491 &setlist);
5492 add_cmd ("remotewritesize", no_class, set_memory_write_packet_size,
5493 "Show the maximum number of bytes per memory write packet (deprecated).\n",
5494 &showlist);
5495 add_cmd ("memory-write-packet-size", no_class,
5496 set_memory_write_packet_size,
5497 "Set the maximum number of bytes per memory-write packet.\n"
5498 "Specify the number of bytes in a packet or 0 (zero) for the\n"
5499 "default packet size. The actual limit is further reduced\n"
5500 "dependent on the target. Specify ``fixed'' to disable the\n"
5501 "further restriction and ``limit'' to enable that restriction\n",
5502 &remote_set_cmdlist);
5503 add_cmd ("memory-read-packet-size", no_class,
5504 set_memory_read_packet_size,
5505 "Set the maximum number of bytes per memory-read packet.\n"
5506 "Specify the number of bytes in a packet or 0 (zero) for the\n"
5507 "default packet size. The actual limit is further reduced\n"
5508 "dependent on the target. Specify ``fixed'' to disable the\n"
5509 "further restriction and ``limit'' to enable that restriction\n",
5510 &remote_set_cmdlist);
5511 add_cmd ("memory-write-packet-size", no_class,
5512 show_memory_write_packet_size,
5513 "Show the maximum number of bytes per memory-write packet.\n",
5514 &remote_show_cmdlist);
5515 add_cmd ("memory-read-packet-size", no_class,
5516 show_memory_read_packet_size,
5517 "Show the maximum number of bytes per memory-read packet.\n",
5518 &remote_show_cmdlist);
5519
5520 add_show_from_set
5521 (add_set_cmd ("remoteaddresssize", class_obscure,
5522 var_integer, (char *) &remote_address_size,
5523 "Set the maximum size of the address (in bits) \
5524 in a memory packet.\n",
5525 &setlist),
5526 &showlist);
5527
5528 add_packet_config_cmd (&remote_protocol_binary_download,
5529 "X", "binary-download",
5530 set_remote_protocol_binary_download_cmd,
5531 show_remote_protocol_binary_download_cmd,
5532 &remote_set_cmdlist, &remote_show_cmdlist);
5533 #if 0
5534 /* XXXX - should ``set remotebinarydownload'' be retained for
5535 compatibility. */
5536 add_show_from_set
5537 (add_set_cmd ("remotebinarydownload", no_class,
5538 var_boolean, (char *) &remote_binary_download,
5539 "Set binary downloads.\n", &setlist),
5540 &showlist);
5541 #endif
5542
5543 add_info ("remote-process", remote_info_process,
5544 "Query the remote system for process info.");
5545
5546 add_packet_config_cmd (&remote_protocol_P, "P", "set-register",
5547 set_remote_protocol_P_packet_cmd,
5548 show_remote_protocol_P_packet_cmd,
5549 &remote_set_cmdlist, &remote_show_cmdlist);
5550
5551 add_packet_config_cmd (&remote_protocol_Z, "Z", "breakpoint",
5552 set_remote_protocol_Z_packet_cmd,
5553 show_remote_protocol_Z_packet_cmd,
5554 &remote_set_cmdlist, &remote_show_cmdlist);
5555 }