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