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