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