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