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