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