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