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