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