Automatic date update in version.in
[external/binutils.git] / gdb / remote.c
1 /* Remote target communications for serial-line targets in custom GDB protocol
2
3    Copyright (C) 1988-2017 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 <ctype.h>
24 #include <fcntl.h>
25 #include "inferior.h"
26 #include "infrun.h"
27 #include "bfd.h"
28 #include "symfile.h"
29 #include "target.h"
30 /*#include "terminal.h" */
31 #include "gdbcmd.h"
32 #include "objfiles.h"
33 #include "gdb-stabs.h"
34 #include "gdbthread.h"
35 #include "remote.h"
36 #include "remote-notif.h"
37 #include "regcache.h"
38 #include "value.h"
39 #include "observer.h"
40 #include "solib.h"
41 #include "cli/cli-decode.h"
42 #include "cli/cli-setshow.h"
43 #include "target-descriptions.h"
44 #include "gdb_bfd.h"
45 #include "filestuff.h"
46 #include "rsp-low.h"
47 #include "disasm.h"
48 #include "location.h"
49
50 #include "gdb_sys_time.h"
51
52 #include "event-loop.h"
53 #include "event-top.h"
54 #include "inf-loop.h"
55
56 #include <signal.h>
57 #include "serial.h"
58
59 #include "gdbcore.h" /* for exec_bfd */
60
61 #include "remote-fileio.h"
62 #include "gdb/fileio.h"
63 #include <sys/stat.h>
64 #include "xml-support.h"
65
66 #include "memory-map.h"
67
68 #include "tracepoint.h"
69 #include "ax.h"
70 #include "ax-gdb.h"
71 #include "agent.h"
72 #include "btrace.h"
73 #include "record-btrace.h"
74 #include <algorithm>
75 #include "common/scoped_restore.h"
76 #include "environ.h"
77 #include "common/byte-vector.h"
78
79 /* Per-program-space data key.  */
80 static const struct program_space_data *remote_pspace_data;
81
82 /* The variable registered as the control variable used by the
83    remote exec-file commands.  While the remote exec-file setting is
84    per-program-space, the set/show machinery uses this as the 
85    location of the remote exec-file value.  */
86 static char *remote_exec_file_var;
87
88 /* The size to align memory write packets, when practical.  The protocol
89    does not guarantee any alignment, and gdb will generate short
90    writes and unaligned writes, but even as a best-effort attempt this
91    can improve bulk transfers.  For instance, if a write is misaligned
92    relative to the target's data bus, the stub may need to make an extra
93    round trip fetching data from the target.  This doesn't make a
94    huge difference, but it's easy to do, so we try to be helpful.
95
96    The alignment chosen is arbitrary; usually data bus width is
97    important here, not the possibly larger cache line size.  */
98 enum { REMOTE_ALIGN_WRITES = 16 };
99
100 /* Prototypes for local functions.  */
101 static int getpkt_sane (char **buf, long *sizeof_buf, int forever);
102 static int getpkt_or_notif_sane (char **buf, long *sizeof_buf,
103                                  int forever, int *is_notif);
104
105 static void remote_files_info (struct target_ops *ignore);
106
107 static void remote_prepare_to_store (struct target_ops *self,
108                                      struct regcache *regcache);
109
110 static void remote_open_1 (const char *, int, struct target_ops *,
111                            int extended_p);
112
113 static void remote_close (struct target_ops *self);
114
115 struct remote_state;
116
117 static int remote_vkill (int pid, struct remote_state *rs);
118
119 static void remote_kill_k (void);
120
121 static void remote_mourn (struct target_ops *ops);
122
123 static void extended_remote_restart (void);
124
125 static void remote_send (char **buf, long *sizeof_buf_p);
126
127 static int readchar (int timeout);
128
129 static void remote_serial_write (const char *str, int len);
130
131 static void remote_kill (struct target_ops *ops);
132
133 static int remote_can_async_p (struct target_ops *);
134
135 static int remote_is_async_p (struct target_ops *);
136
137 static void remote_async (struct target_ops *ops, int enable);
138
139 static void remote_thread_events (struct target_ops *ops, int enable);
140
141 static void interrupt_query (void);
142
143 static void set_general_thread (ptid_t ptid);
144 static void set_continue_thread (ptid_t 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 (struct target_ops *self, ptid_t);
159
160 static int stubhex (int ch);
161
162 static int hexnumstr (char *, ULONGEST);
163
164 static int hexnumnstr (char *, ULONGEST, int);
165
166 static CORE_ADDR remote_address_masked (CORE_ADDR);
167
168 static void print_packet (const char *);
169
170 static int stub_unpack_int (char *buff, int fieldlength);
171
172 static ptid_t remote_current_thread (ptid_t oldptid);
173
174 static int putpkt_binary (const char *buf, int cnt);
175
176 static void check_binary_download (CORE_ADDR addr);
177
178 struct packet_config;
179
180 static void show_packet_config_cmd (struct packet_config *config);
181
182 static void show_remote_protocol_packet_cmd (struct ui_file *file,
183                                              int from_tty,
184                                              struct cmd_list_element *c,
185                                              const char *value);
186
187 static char *write_ptid (char *buf, const char *endbuf, ptid_t ptid);
188 static ptid_t read_ptid (const char *buf, const char **obuf);
189
190 static void remote_set_permissions (struct target_ops *self);
191
192 static int remote_get_trace_status (struct target_ops *self,
193                                     struct trace_status *ts);
194
195 static int remote_upload_tracepoints (struct target_ops *self,
196                                       struct uploaded_tp **utpp);
197
198 static int remote_upload_trace_state_variables (struct target_ops *self,
199                                                 struct uploaded_tsv **utsvp);
200   
201 static void remote_query_supported (void);
202
203 static void remote_check_symbols (void);
204
205 struct stop_reply;
206 static void stop_reply_xfree (struct stop_reply *);
207 static void remote_parse_stop_reply (char *, struct stop_reply *);
208 static void push_stop_reply (struct stop_reply *);
209 static void discard_pending_stop_replies_in_queue (struct remote_state *);
210 static int peek_stop_reply (ptid_t ptid);
211
212 struct threads_listing_context;
213 static void remove_new_fork_children (struct threads_listing_context *);
214
215 static void remote_async_inferior_event_handler (gdb_client_data);
216
217 static void remote_terminal_ours (struct target_ops *self);
218
219 static int remote_read_description_p (struct target_ops *target);
220
221 static void remote_console_output (char *msg);
222
223 static int remote_supports_cond_breakpoints (struct target_ops *self);
224
225 static int remote_can_run_breakpoint_commands (struct target_ops *self);
226
227 static void remote_btrace_reset (void);
228
229 static void remote_btrace_maybe_reopen (void);
230
231 static int stop_reply_queue_length (void);
232
233 static void readahead_cache_invalidate (void);
234
235 static void remote_unpush_and_throw (void);
236
237 static struct remote_state *get_remote_state (void);
238
239 /* For "remote".  */
240
241 static struct cmd_list_element *remote_cmdlist;
242
243 /* For "set remote" and "show remote".  */
244
245 static struct cmd_list_element *remote_set_cmdlist;
246 static struct cmd_list_element *remote_show_cmdlist;
247
248 /* Stub vCont actions support.
249
250    Each field is a boolean flag indicating whether the stub reports
251    support for the corresponding action.  */
252
253 struct vCont_action_support
254 {
255   /* vCont;t */
256   int t;
257
258   /* vCont;r */
259   int r;
260
261   /* vCont;s */
262   int s;
263
264   /* vCont;S */
265   int S;
266 };
267
268 /* Controls whether GDB is willing to use range stepping.  */
269
270 static int use_range_stepping = 1;
271
272 #define OPAQUETHREADBYTES 8
273
274 /* a 64 bit opaque identifier */
275 typedef unsigned char threadref[OPAQUETHREADBYTES];
276
277 /* About this many threadisds fit in a packet.  */
278
279 #define MAXTHREADLISTRESULTS 32
280
281 /* The max number of chars in debug output.  The rest of chars are
282    omitted.  */
283
284 #define REMOTE_DEBUG_MAX_CHAR 512
285
286 /* Data for the vFile:pread readahead cache.  */
287
288 struct readahead_cache
289 {
290   /* The file descriptor for the file that is being cached.  -1 if the
291      cache is invalid.  */
292   int fd;
293
294   /* The offset into the file that the cache buffer corresponds
295      to.  */
296   ULONGEST offset;
297
298   /* The buffer holding the cache contents.  */
299   gdb_byte *buf;
300   /* The buffer's size.  We try to read as much as fits into a packet
301      at a time.  */
302   size_t bufsize;
303
304   /* Cache hit and miss counters.  */
305   ULONGEST hit_count;
306   ULONGEST miss_count;
307 };
308
309 /* Description of the remote protocol state for the currently
310    connected target.  This is per-target state, and independent of the
311    selected architecture.  */
312
313 struct remote_state
314 {
315   /* A buffer to use for incoming packets, and its current size.  The
316      buffer is grown dynamically for larger incoming packets.
317      Outgoing packets may also be constructed in this buffer.
318      BUF_SIZE is always at least REMOTE_PACKET_SIZE;
319      REMOTE_PACKET_SIZE should be used to limit the length of outgoing
320      packets.  */
321   char *buf;
322   long buf_size;
323
324   /* True if we're going through initial connection setup (finding out
325      about the remote side's threads, relocating symbols, etc.).  */
326   int starting_up;
327
328   /* If we negotiated packet size explicitly (and thus can bypass
329      heuristics for the largest packet size that will not overflow
330      a buffer in the stub), this will be set to that packet size.
331      Otherwise zero, meaning to use the guessed size.  */
332   long explicit_packet_size;
333
334   /* remote_wait is normally called when the target is running and
335      waits for a stop reply packet.  But sometimes we need to call it
336      when the target is already stopped.  We can send a "?" packet
337      and have remote_wait read the response.  Or, if we already have
338      the response, we can stash it in BUF and tell remote_wait to
339      skip calling getpkt.  This flag is set when BUF contains a
340      stop reply packet and the target is not waiting.  */
341   int cached_wait_status;
342
343   /* True, if in no ack mode.  That is, neither GDB nor the stub will
344      expect acks from each other.  The connection is assumed to be
345      reliable.  */
346   int noack_mode;
347
348   /* True if we're connected in extended remote mode.  */
349   int extended;
350
351   /* True if we resumed the target and we're waiting for the target to
352      stop.  In the mean time, we can't start another command/query.
353      The remote server wouldn't be ready to process it, so we'd
354      timeout waiting for a reply that would never come and eventually
355      we'd close the connection.  This can happen in asynchronous mode
356      because we allow GDB commands while the target is running.  */
357   int waiting_for_stop_reply;
358
359   /* The status of the stub support for the various vCont actions.  */
360   struct vCont_action_support supports_vCont;
361
362   /* Nonzero if the user has pressed Ctrl-C, but the target hasn't
363      responded to that.  */
364   int ctrlc_pending_p;
365
366   /* True if we saw a Ctrl-C while reading or writing from/to the
367      remote descriptor.  At that point it is not safe to send a remote
368      interrupt packet, so we instead remember we saw the Ctrl-C and
369      process it once we're done with sending/receiving the current
370      packet, which should be shortly.  If however that takes too long,
371      and the user presses Ctrl-C again, we offer to disconnect.  */
372   int got_ctrlc_during_io;
373
374   /* Descriptor for I/O to remote machine.  Initialize it to NULL so that
375      remote_open knows that we don't have a file open when the program
376      starts.  */
377   struct serial *remote_desc;
378
379   /* These are the threads which we last sent to the remote system.  The
380      TID member will be -1 for all or -2 for not sent yet.  */
381   ptid_t general_thread;
382   ptid_t continue_thread;
383
384   /* This is the traceframe which we last selected on the remote system.
385      It will be -1 if no traceframe is selected.  */
386   int remote_traceframe_number;
387
388   char *last_pass_packet;
389
390   /* The last QProgramSignals packet sent to the target.  We bypass
391      sending a new program signals list down to the target if the new
392      packet is exactly the same as the last we sent.  IOW, we only let
393      the target know about program signals list changes.  */
394   char *last_program_signals_packet;
395
396   enum gdb_signal last_sent_signal;
397
398   int last_sent_step;
399
400   /* The execution direction of the last resume we got.  */
401   enum exec_direction_kind last_resume_exec_dir;
402
403   char *finished_object;
404   char *finished_annex;
405   ULONGEST finished_offset;
406
407   /* Should we try the 'ThreadInfo' query packet?
408
409      This variable (NOT available to the user: auto-detect only!)
410      determines whether GDB will use the new, simpler "ThreadInfo"
411      query or the older, more complex syntax for thread queries.
412      This is an auto-detect variable (set to true at each connect,
413      and set to false when the target fails to recognize it).  */
414   int use_threadinfo_query;
415   int use_threadextra_query;
416
417   threadref echo_nextthread;
418   threadref nextthread;
419   threadref resultthreadlist[MAXTHREADLISTRESULTS];
420
421   /* The state of remote notification.  */
422   struct remote_notif_state *notif_state;
423
424   /* The branch trace configuration.  */
425   struct btrace_config btrace_config;
426
427   /* The argument to the last "vFile:setfs:" packet we sent, used
428      to avoid sending repeated unnecessary "vFile:setfs:" packets.
429      Initialized to -1 to indicate that no "vFile:setfs:" packet
430      has yet been sent.  */
431   int fs_pid;
432
433   /* A readahead cache for vFile:pread.  Often, reading a binary
434      involves a sequence of small reads.  E.g., when parsing an ELF
435      file.  A readahead cache helps mostly the case of remote
436      debugging on a connection with higher latency, due to the
437      request/reply nature of the RSP.  We only cache data for a single
438      file descriptor at a time.  */
439   struct readahead_cache readahead_cache;
440 };
441
442 /* Private data that we'll store in (struct thread_info)->private.  */
443 struct private_thread_info
444 {
445   char *extra;
446   char *name;
447   int core;
448
449   /* Thread handle, perhaps a pthread_t or thread_t value, stored as a
450      sequence of bytes.  */
451   gdb::byte_vector *thread_handle;
452
453   /* Whether the target stopped for a breakpoint/watchpoint.  */
454   enum target_stop_reason stop_reason;
455
456   /* This is set to the data address of the access causing the target
457      to stop for a watchpoint.  */
458   CORE_ADDR watch_data_address;
459
460   /* Fields used by the vCont action coalescing implemented in
461      remote_resume / remote_commit_resume.  remote_resume stores each
462      thread's last resume request in these fields, so that a later
463      remote_commit_resume knows which is the proper action for this
464      thread to include in the vCont packet.  */
465
466   /* True if the last target_resume call for this thread was a step
467      request, false if a continue request.  */
468   int last_resume_step;
469
470   /* The signal specified in the last target_resume call for this
471      thread.  */
472   enum gdb_signal last_resume_sig;
473
474   /* Whether this thread was already vCont-resumed on the remote
475      side.  */
476   int vcont_resumed;
477 };
478
479 static void
480 free_private_thread_info (struct private_thread_info *info)
481 {
482   xfree (info->extra);
483   xfree (info->name);
484   delete info->thread_handle;
485   xfree (info);
486 }
487
488 /* This data could be associated with a target, but we do not always
489    have access to the current target when we need it, so for now it is
490    static.  This will be fine for as long as only one target is in use
491    at a time.  */
492 static struct remote_state *remote_state;
493
494 static struct remote_state *
495 get_remote_state_raw (void)
496 {
497   return remote_state;
498 }
499
500 /* Allocate a new struct remote_state with xmalloc, initialize it, and
501    return it.  */
502
503 static struct remote_state *
504 new_remote_state (void)
505 {
506   struct remote_state *result = XCNEW (struct remote_state);
507
508   /* The default buffer size is unimportant; it will be expanded
509      whenever a larger buffer is needed. */
510   result->buf_size = 400;
511   result->buf = (char *) xmalloc (result->buf_size);
512   result->remote_traceframe_number = -1;
513   result->last_sent_signal = GDB_SIGNAL_0;
514   result->last_resume_exec_dir = EXEC_FORWARD;
515   result->fs_pid = -1;
516
517   return result;
518 }
519
520 /* Description of the remote protocol for a given architecture.  */
521
522 struct packet_reg
523 {
524   long offset; /* Offset into G packet.  */
525   long regnum; /* GDB's internal register number.  */
526   LONGEST pnum; /* Remote protocol register number.  */
527   int in_g_packet; /* Always part of G packet.  */
528   /* long size in bytes;  == register_size (target_gdbarch (), regnum);
529      at present.  */
530   /* char *name; == gdbarch_register_name (target_gdbarch (), regnum);
531      at present.  */
532 };
533
534 struct remote_arch_state
535 {
536   /* Description of the remote protocol registers.  */
537   long sizeof_g_packet;
538
539   /* Description of the remote protocol registers indexed by REGNUM
540      (making an array gdbarch_num_regs in size).  */
541   struct packet_reg *regs;
542
543   /* This is the size (in chars) of the first response to the ``g''
544      packet.  It is used as a heuristic when determining the maximum
545      size of memory-read and memory-write packets.  A target will
546      typically only reserve a buffer large enough to hold the ``g''
547      packet.  The size does not include packet overhead (headers and
548      trailers).  */
549   long actual_register_packet_size;
550
551   /* This is the maximum size (in chars) of a non read/write packet.
552      It is also used as a cap on the size of read/write packets.  */
553   long remote_packet_size;
554 };
555
556 /* Utility: generate error from an incoming stub packet.  */
557 static void
558 trace_error (char *buf)
559 {
560   if (*buf++ != 'E')
561     return;                     /* not an error msg */
562   switch (*buf)
563     {
564     case '1':                   /* malformed packet error */
565       if (*++buf == '0')        /*   general case: */
566         error (_("remote.c: error in outgoing packet."));
567       else
568         error (_("remote.c: error in outgoing packet at field #%ld."),
569                strtol (buf, NULL, 16));
570     default:
571       error (_("Target returns error code '%s'."), buf);
572     }
573 }
574
575 /* Utility: wait for reply from stub, while accepting "O" packets.  */
576
577 static char *
578 remote_get_noisy_reply ()
579 {
580   struct remote_state *rs = get_remote_state ();
581
582   do                            /* Loop on reply from remote stub.  */
583     {
584       char *buf;
585
586       QUIT;                     /* Allow user to bail out with ^C.  */
587       getpkt (&rs->buf, &rs->buf_size, 0);
588       buf = rs->buf;
589       if (buf[0] == 'E')
590         trace_error (buf);
591       else if (startswith (buf, "qRelocInsn:"))
592         {
593           ULONGEST ul;
594           CORE_ADDR from, to, org_to;
595           const char *p, *pp;
596           int adjusted_size = 0;
597           int relocated = 0;
598
599           p = buf + strlen ("qRelocInsn:");
600           pp = unpack_varlen_hex (p, &ul);
601           if (*pp != ';')
602             error (_("invalid qRelocInsn packet: %s"), buf);
603           from = ul;
604
605           p = pp + 1;
606           unpack_varlen_hex (p, &ul);
607           to = ul;
608
609           org_to = to;
610
611           TRY
612             {
613               gdbarch_relocate_instruction (target_gdbarch (), &to, from);
614               relocated = 1;
615             }
616           CATCH (ex, RETURN_MASK_ALL)
617             {
618               if (ex.error == MEMORY_ERROR)
619                 {
620                   /* Propagate memory errors silently back to the
621                      target.  The stub may have limited the range of
622                      addresses we can write to, for example.  */
623                 }
624               else
625                 {
626                   /* Something unexpectedly bad happened.  Be verbose
627                      so we can tell what, and propagate the error back
628                      to the stub, so it doesn't get stuck waiting for
629                      a response.  */
630                   exception_fprintf (gdb_stderr, ex,
631                                      _("warning: relocating instruction: "));
632                 }
633               putpkt ("E01");
634             }
635           END_CATCH
636
637           if (relocated)
638             {
639               adjusted_size = to - org_to;
640
641               xsnprintf (buf, rs->buf_size, "qRelocInsn:%x", adjusted_size);
642               putpkt (buf);
643             }
644         }
645       else if (buf[0] == 'O' && buf[1] != 'K')
646         remote_console_output (buf + 1);        /* 'O' message from stub */
647       else
648         return buf;             /* Here's the actual reply.  */
649     }
650   while (1);
651 }
652
653 /* Handle for retreving the remote protocol data from gdbarch.  */
654 static struct gdbarch_data *remote_gdbarch_data_handle;
655
656 static struct remote_arch_state *
657 get_remote_arch_state (struct gdbarch *gdbarch)
658 {
659   gdb_assert (gdbarch != NULL);
660   return ((struct remote_arch_state *)
661           gdbarch_data (gdbarch, remote_gdbarch_data_handle));
662 }
663
664 /* Fetch the global remote target state.  */
665
666 static struct remote_state *
667 get_remote_state (void)
668 {
669   /* Make sure that the remote architecture state has been
670      initialized, because doing so might reallocate rs->buf.  Any
671      function which calls getpkt also needs to be mindful of changes
672      to rs->buf, but this call limits the number of places which run
673      into trouble.  */
674   get_remote_arch_state (target_gdbarch ());
675
676   return get_remote_state_raw ();
677 }
678
679 /* Cleanup routine for the remote module's pspace data.  */
680
681 static void
682 remote_pspace_data_cleanup (struct program_space *pspace, void *arg)
683 {
684   char *remote_exec_file = (char *) arg;
685
686   xfree (remote_exec_file);
687 }
688
689 /* Fetch the remote exec-file from the current program space.  */
690
691 static const char *
692 get_remote_exec_file (void)
693 {
694   char *remote_exec_file;
695
696   remote_exec_file
697     = (char *) program_space_data (current_program_space,
698                                    remote_pspace_data);
699   if (remote_exec_file == NULL)
700     return "";
701
702   return remote_exec_file;
703 }
704
705 /* Set the remote exec file for PSPACE.  */
706
707 static void
708 set_pspace_remote_exec_file (struct program_space *pspace,
709                         char *remote_exec_file)
710 {
711   char *old_file = (char *) program_space_data (pspace, remote_pspace_data);
712
713   xfree (old_file);
714   set_program_space_data (pspace, remote_pspace_data,
715                           xstrdup (remote_exec_file));
716 }
717
718 /* The "set/show remote exec-file" set command hook.  */
719
720 static void
721 set_remote_exec_file (char *ignored, int from_tty,
722                       struct cmd_list_element *c)
723 {
724   gdb_assert (remote_exec_file_var != NULL);
725   set_pspace_remote_exec_file (current_program_space, remote_exec_file_var);
726 }
727
728 /* The "set/show remote exec-file" show command hook.  */
729
730 static void
731 show_remote_exec_file (struct ui_file *file, int from_tty,
732                        struct cmd_list_element *cmd, const char *value)
733 {
734   fprintf_filtered (file, "%s\n", remote_exec_file_var);
735 }
736
737 static int
738 compare_pnums (const void *lhs_, const void *rhs_)
739 {
740   const struct packet_reg * const *lhs
741     = (const struct packet_reg * const *) lhs_;
742   const struct packet_reg * const *rhs
743     = (const struct packet_reg * const *) rhs_;
744
745   if ((*lhs)->pnum < (*rhs)->pnum)
746     return -1;
747   else if ((*lhs)->pnum == (*rhs)->pnum)
748     return 0;
749   else
750     return 1;
751 }
752
753 static int
754 map_regcache_remote_table (struct gdbarch *gdbarch, struct packet_reg *regs)
755 {
756   int regnum, num_remote_regs, offset;
757   struct packet_reg **remote_regs;
758
759   for (regnum = 0; regnum < gdbarch_num_regs (gdbarch); regnum++)
760     {
761       struct packet_reg *r = &regs[regnum];
762
763       if (register_size (gdbarch, regnum) == 0)
764         /* Do not try to fetch zero-sized (placeholder) registers.  */
765         r->pnum = -1;
766       else
767         r->pnum = gdbarch_remote_register_number (gdbarch, regnum);
768
769       r->regnum = regnum;
770     }
771
772   /* Define the g/G packet format as the contents of each register
773      with a remote protocol number, in order of ascending protocol
774      number.  */
775
776   remote_regs = XALLOCAVEC (struct packet_reg *, gdbarch_num_regs (gdbarch));
777   for (num_remote_regs = 0, regnum = 0;
778        regnum < gdbarch_num_regs (gdbarch);
779        regnum++)
780     if (regs[regnum].pnum != -1)
781       remote_regs[num_remote_regs++] = &regs[regnum];
782
783   qsort (remote_regs, num_remote_regs, sizeof (struct packet_reg *),
784          compare_pnums);
785
786   for (regnum = 0, offset = 0; regnum < num_remote_regs; regnum++)
787     {
788       remote_regs[regnum]->in_g_packet = 1;
789       remote_regs[regnum]->offset = offset;
790       offset += register_size (gdbarch, remote_regs[regnum]->regnum);
791     }
792
793   return offset;
794 }
795
796 /* Given the architecture described by GDBARCH, return the remote
797    protocol register's number and the register's offset in the g/G
798    packets of GDB register REGNUM, in PNUM and POFFSET respectively.
799    If the target does not have a mapping for REGNUM, return false,
800    otherwise, return true.  */
801
802 int
803 remote_register_number_and_offset (struct gdbarch *gdbarch, int regnum,
804                                    int *pnum, int *poffset)
805 {
806   gdb_assert (regnum < gdbarch_num_regs (gdbarch));
807
808   std::vector<packet_reg> regs (gdbarch_num_regs (gdbarch));
809
810   map_regcache_remote_table (gdbarch, regs.data ());
811
812   *pnum = regs[regnum].pnum;
813   *poffset = regs[regnum].offset;
814
815   return *pnum != -1;
816 }
817
818 static void *
819 init_remote_state (struct gdbarch *gdbarch)
820 {
821   struct remote_state *rs = get_remote_state_raw ();
822   struct remote_arch_state *rsa;
823
824   rsa = GDBARCH_OBSTACK_ZALLOC (gdbarch, struct remote_arch_state);
825
826   /* Use the architecture to build a regnum<->pnum table, which will be
827      1:1 unless a feature set specifies otherwise.  */
828   rsa->regs = GDBARCH_OBSTACK_CALLOC (gdbarch,
829                                       gdbarch_num_regs (gdbarch),
830                                       struct packet_reg);
831
832   /* Record the maximum possible size of the g packet - it may turn out
833      to be smaller.  */
834   rsa->sizeof_g_packet = map_regcache_remote_table (gdbarch, rsa->regs);
835
836   /* Default maximum number of characters in a packet body.  Many
837      remote stubs have a hardwired buffer size of 400 bytes
838      (c.f. BUFMAX in m68k-stub.c and i386-stub.c).  BUFMAX-1 is used
839      as the maximum packet-size to ensure that the packet and an extra
840      NUL character can always fit in the buffer.  This stops GDB
841      trashing stubs that try to squeeze an extra NUL into what is
842      already a full buffer (As of 1999-12-04 that was most stubs).  */
843   rsa->remote_packet_size = 400 - 1;
844
845   /* This one is filled in when a ``g'' packet is received.  */
846   rsa->actual_register_packet_size = 0;
847
848   /* Should rsa->sizeof_g_packet needs more space than the
849      default, adjust the size accordingly.  Remember that each byte is
850      encoded as two characters.  32 is the overhead for the packet
851      header / footer.  NOTE: cagney/1999-10-26: I suspect that 8
852      (``$NN:G...#NN'') is a better guess, the below has been padded a
853      little.  */
854   if (rsa->sizeof_g_packet > ((rsa->remote_packet_size - 32) / 2))
855     rsa->remote_packet_size = (rsa->sizeof_g_packet * 2 + 32);
856
857   /* Make sure that the packet buffer is plenty big enough for
858      this architecture.  */
859   if (rs->buf_size < rsa->remote_packet_size)
860     {
861       rs->buf_size = 2 * rsa->remote_packet_size;
862       rs->buf = (char *) xrealloc (rs->buf, rs->buf_size);
863     }
864
865   return rsa;
866 }
867
868 /* Return the current allowed size of a remote packet.  This is
869    inferred from the current architecture, and should be used to
870    limit the length of outgoing packets.  */
871 static long
872 get_remote_packet_size (void)
873 {
874   struct remote_state *rs = get_remote_state ();
875   remote_arch_state *rsa = get_remote_arch_state (target_gdbarch ());
876
877   if (rs->explicit_packet_size)
878     return rs->explicit_packet_size;
879
880   return rsa->remote_packet_size;
881 }
882
883 static struct packet_reg *
884 packet_reg_from_regnum (struct gdbarch *gdbarch, struct remote_arch_state *rsa,
885                         long regnum)
886 {
887   if (regnum < 0 && regnum >= gdbarch_num_regs (gdbarch))
888     return NULL;
889   else
890     {
891       struct packet_reg *r = &rsa->regs[regnum];
892
893       gdb_assert (r->regnum == regnum);
894       return r;
895     }
896 }
897
898 static struct packet_reg *
899 packet_reg_from_pnum (struct gdbarch *gdbarch, struct remote_arch_state *rsa,
900                       LONGEST pnum)
901 {
902   int i;
903
904   for (i = 0; i < gdbarch_num_regs (gdbarch); i++)
905     {
906       struct packet_reg *r = &rsa->regs[i];
907
908       if (r->pnum == pnum)
909         return r;
910     }
911   return NULL;
912 }
913
914 static struct target_ops remote_ops;
915
916 static struct target_ops extended_remote_ops;
917
918 /* FIXME: cagney/1999-09-23: Even though getpkt was called with
919    ``forever'' still use the normal timeout mechanism.  This is
920    currently used by the ASYNC code to guarentee that target reads
921    during the initial connect always time-out.  Once getpkt has been
922    modified to return a timeout indication and, in turn
923    remote_wait()/wait_for_inferior() have gained a timeout parameter
924    this can go away.  */
925 static int wait_forever_enabled_p = 1;
926
927 /* Allow the user to specify what sequence to send to the remote
928    when he requests a program interruption: Although ^C is usually
929    what remote systems expect (this is the default, here), it is
930    sometimes preferable to send a break.  On other systems such
931    as the Linux kernel, a break followed by g, which is Magic SysRq g
932    is required in order to interrupt the execution.  */
933 const char interrupt_sequence_control_c[] = "Ctrl-C";
934 const char interrupt_sequence_break[] = "BREAK";
935 const char interrupt_sequence_break_g[] = "BREAK-g";
936 static const char *const interrupt_sequence_modes[] =
937   {
938     interrupt_sequence_control_c,
939     interrupt_sequence_break,
940     interrupt_sequence_break_g,
941     NULL
942   };
943 static const char *interrupt_sequence_mode = interrupt_sequence_control_c;
944
945 static void
946 show_interrupt_sequence (struct ui_file *file, int from_tty,
947                          struct cmd_list_element *c,
948                          const char *value)
949 {
950   if (interrupt_sequence_mode == interrupt_sequence_control_c)
951     fprintf_filtered (file,
952                       _("Send the ASCII ETX character (Ctrl-c) "
953                         "to the remote target to interrupt the "
954                         "execution of the program.\n"));
955   else if (interrupt_sequence_mode == interrupt_sequence_break)
956     fprintf_filtered (file,
957                       _("send a break signal to the remote target "
958                         "to interrupt the execution of the program.\n"));
959   else if (interrupt_sequence_mode == interrupt_sequence_break_g)
960     fprintf_filtered (file,
961                       _("Send a break signal and 'g' a.k.a. Magic SysRq g to "
962                         "the remote target to interrupt the execution "
963                         "of Linux kernel.\n"));
964   else
965     internal_error (__FILE__, __LINE__,
966                     _("Invalid value for interrupt_sequence_mode: %s."),
967                     interrupt_sequence_mode);
968 }
969
970 /* This boolean variable specifies whether interrupt_sequence is sent
971    to the remote target when gdb connects to it.
972    This is mostly needed when you debug the Linux kernel: The Linux kernel
973    expects BREAK g which is Magic SysRq g for connecting gdb.  */
974 static int interrupt_on_connect = 0;
975
976 /* This variable is used to implement the "set/show remotebreak" commands.
977    Since these commands are now deprecated in favor of "set/show remote
978    interrupt-sequence", it no longer has any effect on the code.  */
979 static int remote_break;
980
981 static void
982 set_remotebreak (char *args, int from_tty, struct cmd_list_element *c)
983 {
984   if (remote_break)
985     interrupt_sequence_mode = interrupt_sequence_break;
986   else
987     interrupt_sequence_mode = interrupt_sequence_control_c;
988 }
989
990 static void
991 show_remotebreak (struct ui_file *file, int from_tty,
992                   struct cmd_list_element *c,
993                   const char *value)
994 {
995 }
996
997 /* This variable sets the number of bits in an address that are to be
998    sent in a memory ("M" or "m") packet.  Normally, after stripping
999    leading zeros, the entire address would be sent.  This variable
1000    restricts the address to REMOTE_ADDRESS_SIZE bits.  HISTORY: The
1001    initial implementation of remote.c restricted the address sent in
1002    memory packets to ``host::sizeof long'' bytes - (typically 32
1003    bits).  Consequently, for 64 bit targets, the upper 32 bits of an
1004    address was never sent.  Since fixing this bug may cause a break in
1005    some remote targets this variable is principly provided to
1006    facilitate backward compatibility.  */
1007
1008 static unsigned int remote_address_size;
1009
1010 /* Temporary to track who currently owns the terminal.  See
1011    remote_terminal_* for more details.  */
1012
1013 static int remote_async_terminal_ours_p;
1014
1015 \f
1016 /* User configurable variables for the number of characters in a
1017    memory read/write packet.  MIN (rsa->remote_packet_size,
1018    rsa->sizeof_g_packet) is the default.  Some targets need smaller
1019    values (fifo overruns, et.al.) and some users need larger values
1020    (speed up transfers).  The variables ``preferred_*'' (the user
1021    request), ``current_*'' (what was actually set) and ``forced_*''
1022    (Positive - a soft limit, negative - a hard limit).  */
1023
1024 struct memory_packet_config
1025 {
1026   const char *name;
1027   long size;
1028   int fixed_p;
1029 };
1030
1031 /* The default max memory-write-packet-size.  The 16k is historical.
1032    (It came from older GDB's using alloca for buffers and the
1033    knowledge (folklore?) that some hosts don't cope very well with
1034    large alloca calls.)  */
1035 #define DEFAULT_MAX_MEMORY_PACKET_SIZE 16384
1036
1037 /* The minimum remote packet size for memory transfers.  Ensures we
1038    can write at least one byte.  */
1039 #define MIN_MEMORY_PACKET_SIZE 20
1040
1041 /* Compute the current size of a read/write packet.  Since this makes
1042    use of ``actual_register_packet_size'' the computation is dynamic.  */
1043
1044 static long
1045 get_memory_packet_size (struct memory_packet_config *config)
1046 {
1047   struct remote_state *rs = get_remote_state ();
1048   remote_arch_state *rsa = get_remote_arch_state (target_gdbarch ());
1049
1050   long what_they_get;
1051   if (config->fixed_p)
1052     {
1053       if (config->size <= 0)
1054         what_they_get = DEFAULT_MAX_MEMORY_PACKET_SIZE;
1055       else
1056         what_they_get = config->size;
1057     }
1058   else
1059     {
1060       what_they_get = get_remote_packet_size ();
1061       /* Limit the packet to the size specified by the user.  */
1062       if (config->size > 0
1063           && what_they_get > config->size)
1064         what_they_get = config->size;
1065
1066       /* Limit it to the size of the targets ``g'' response unless we have
1067          permission from the stub to use a larger packet size.  */
1068       if (rs->explicit_packet_size == 0
1069           && rsa->actual_register_packet_size > 0
1070           && what_they_get > rsa->actual_register_packet_size)
1071         what_they_get = rsa->actual_register_packet_size;
1072     }
1073   if (what_they_get < MIN_MEMORY_PACKET_SIZE)
1074     what_they_get = MIN_MEMORY_PACKET_SIZE;
1075
1076   /* Make sure there is room in the global buffer for this packet
1077      (including its trailing NUL byte).  */
1078   if (rs->buf_size < what_they_get + 1)
1079     {
1080       rs->buf_size = 2 * what_they_get;
1081       rs->buf = (char *) xrealloc (rs->buf, 2 * what_they_get);
1082     }
1083
1084   return what_they_get;
1085 }
1086
1087 /* Update the size of a read/write packet.  If they user wants
1088    something really big then do a sanity check.  */
1089
1090 static void
1091 set_memory_packet_size (const char *args, struct memory_packet_config *config)
1092 {
1093   int fixed_p = config->fixed_p;
1094   long size = config->size;
1095
1096   if (args == NULL)
1097     error (_("Argument required (integer, `fixed' or `limited')."));
1098   else if (strcmp (args, "hard") == 0
1099       || strcmp (args, "fixed") == 0)
1100     fixed_p = 1;
1101   else if (strcmp (args, "soft") == 0
1102            || strcmp (args, "limit") == 0)
1103     fixed_p = 0;
1104   else
1105     {
1106       char *end;
1107
1108       size = strtoul (args, &end, 0);
1109       if (args == end)
1110         error (_("Invalid %s (bad syntax)."), config->name);
1111
1112       /* Instead of explicitly capping the size of a packet to or
1113          disallowing it, the user is allowed to set the size to
1114          something arbitrarily large.  */
1115     }
1116
1117   /* So that the query shows the correct value.  */
1118   if (size <= 0)
1119     size = DEFAULT_MAX_MEMORY_PACKET_SIZE;
1120
1121   /* Extra checks?  */
1122   if (fixed_p && !config->fixed_p)
1123     {
1124       if (! query (_("The target may not be able to correctly handle a %s\n"
1125                    "of %ld bytes. Change the packet size? "),
1126                    config->name, size))
1127         error (_("Packet size not changed."));
1128     }
1129   /* Update the config.  */
1130   config->fixed_p = fixed_p;
1131   config->size = size;
1132 }
1133
1134 static void
1135 show_memory_packet_size (struct memory_packet_config *config)
1136 {
1137   printf_filtered (_("The %s is %ld. "), config->name, config->size);
1138   if (config->fixed_p)
1139     printf_filtered (_("Packets are fixed at %ld bytes.\n"),
1140                      get_memory_packet_size (config));
1141   else
1142     printf_filtered (_("Packets are limited to %ld bytes.\n"),
1143                      get_memory_packet_size (config));
1144 }
1145
1146 static struct memory_packet_config memory_write_packet_config =
1147 {
1148   "memory-write-packet-size",
1149 };
1150
1151 static void
1152 set_memory_write_packet_size (const char *args, int from_tty)
1153 {
1154   set_memory_packet_size (args, &memory_write_packet_config);
1155 }
1156
1157 static void
1158 show_memory_write_packet_size (const char *args, int from_tty)
1159 {
1160   show_memory_packet_size (&memory_write_packet_config);
1161 }
1162
1163 static long
1164 get_memory_write_packet_size (void)
1165 {
1166   return get_memory_packet_size (&memory_write_packet_config);
1167 }
1168
1169 static struct memory_packet_config memory_read_packet_config =
1170 {
1171   "memory-read-packet-size",
1172 };
1173
1174 static void
1175 set_memory_read_packet_size (const char *args, int from_tty)
1176 {
1177   set_memory_packet_size (args, &memory_read_packet_config);
1178 }
1179
1180 static void
1181 show_memory_read_packet_size (const char *args, int from_tty)
1182 {
1183   show_memory_packet_size (&memory_read_packet_config);
1184 }
1185
1186 static long
1187 get_memory_read_packet_size (void)
1188 {
1189   long size = get_memory_packet_size (&memory_read_packet_config);
1190
1191   /* FIXME: cagney/1999-11-07: Functions like getpkt() need to get an
1192      extra buffer size argument before the memory read size can be
1193      increased beyond this.  */
1194   if (size > get_remote_packet_size ())
1195     size = get_remote_packet_size ();
1196   return size;
1197 }
1198
1199 \f
1200 /* Generic configuration support for packets the stub optionally
1201    supports.  Allows the user to specify the use of the packet as well
1202    as allowing GDB to auto-detect support in the remote stub.  */
1203
1204 enum packet_support
1205   {
1206     PACKET_SUPPORT_UNKNOWN = 0,
1207     PACKET_ENABLE,
1208     PACKET_DISABLE
1209   };
1210
1211 struct packet_config
1212   {
1213     const char *name;
1214     const char *title;
1215
1216     /* If auto, GDB auto-detects support for this packet or feature,
1217        either through qSupported, or by trying the packet and looking
1218        at the response.  If true, GDB assumes the target supports this
1219        packet.  If false, the packet is disabled.  Configs that don't
1220        have an associated command always have this set to auto.  */
1221     enum auto_boolean detect;
1222
1223     /* Does the target support this packet?  */
1224     enum packet_support support;
1225   };
1226
1227 /* Analyze a packet's return value and update the packet config
1228    accordingly.  */
1229
1230 enum packet_result
1231 {
1232   PACKET_ERROR,
1233   PACKET_OK,
1234   PACKET_UNKNOWN
1235 };
1236
1237 static enum packet_support packet_config_support (struct packet_config *config);
1238 static enum packet_support packet_support (int packet);
1239
1240 static void
1241 show_packet_config_cmd (struct packet_config *config)
1242 {
1243   const char *support = "internal-error";
1244
1245   switch (packet_config_support (config))
1246     {
1247     case PACKET_ENABLE:
1248       support = "enabled";
1249       break;
1250     case PACKET_DISABLE:
1251       support = "disabled";
1252       break;
1253     case PACKET_SUPPORT_UNKNOWN:
1254       support = "unknown";
1255       break;
1256     }
1257   switch (config->detect)
1258     {
1259     case AUTO_BOOLEAN_AUTO:
1260       printf_filtered (_("Support for the `%s' packet "
1261                          "is auto-detected, currently %s.\n"),
1262                        config->name, support);
1263       break;
1264     case AUTO_BOOLEAN_TRUE:
1265     case AUTO_BOOLEAN_FALSE:
1266       printf_filtered (_("Support for the `%s' packet is currently %s.\n"),
1267                        config->name, support);
1268       break;
1269     }
1270 }
1271
1272 static void
1273 add_packet_config_cmd (struct packet_config *config, const char *name,
1274                        const char *title, int legacy)
1275 {
1276   char *set_doc;
1277   char *show_doc;
1278   char *cmd_name;
1279
1280   config->name = name;
1281   config->title = title;
1282   set_doc = xstrprintf ("Set use of remote protocol `%s' (%s) packet",
1283                         name, title);
1284   show_doc = xstrprintf ("Show current use of remote "
1285                          "protocol `%s' (%s) packet",
1286                          name, title);
1287   /* set/show TITLE-packet {auto,on,off} */
1288   cmd_name = xstrprintf ("%s-packet", title);
1289   add_setshow_auto_boolean_cmd (cmd_name, class_obscure,
1290                                 &config->detect, set_doc,
1291                                 show_doc, NULL, /* help_doc */
1292                                 NULL,
1293                                 show_remote_protocol_packet_cmd,
1294                                 &remote_set_cmdlist, &remote_show_cmdlist);
1295   /* The command code copies the documentation strings.  */
1296   xfree (set_doc);
1297   xfree (show_doc);
1298   /* set/show remote NAME-packet {auto,on,off} -- legacy.  */
1299   if (legacy)
1300     {
1301       char *legacy_name;
1302
1303       legacy_name = xstrprintf ("%s-packet", name);
1304       add_alias_cmd (legacy_name, cmd_name, class_obscure, 0,
1305                      &remote_set_cmdlist);
1306       add_alias_cmd (legacy_name, cmd_name, class_obscure, 0,
1307                      &remote_show_cmdlist);
1308     }
1309 }
1310
1311 static enum packet_result
1312 packet_check_result (const char *buf)
1313 {
1314   if (buf[0] != '\0')
1315     {
1316       /* The stub recognized the packet request.  Check that the
1317          operation succeeded.  */
1318       if (buf[0] == 'E'
1319           && isxdigit (buf[1]) && isxdigit (buf[2])
1320           && buf[3] == '\0')
1321         /* "Enn"  - definitly an error.  */
1322         return PACKET_ERROR;
1323
1324       /* Always treat "E." as an error.  This will be used for
1325          more verbose error messages, such as E.memtypes.  */
1326       if (buf[0] == 'E' && buf[1] == '.')
1327         return PACKET_ERROR;
1328
1329       /* The packet may or may not be OK.  Just assume it is.  */
1330       return PACKET_OK;
1331     }
1332   else
1333     /* The stub does not support the packet.  */
1334     return PACKET_UNKNOWN;
1335 }
1336
1337 static enum packet_result
1338 packet_ok (const char *buf, struct packet_config *config)
1339 {
1340   enum packet_result result;
1341
1342   if (config->detect != AUTO_BOOLEAN_TRUE
1343       && config->support == PACKET_DISABLE)
1344     internal_error (__FILE__, __LINE__,
1345                     _("packet_ok: attempt to use a disabled packet"));
1346
1347   result = packet_check_result (buf);
1348   switch (result)
1349     {
1350     case PACKET_OK:
1351     case PACKET_ERROR:
1352       /* The stub recognized the packet request.  */
1353       if (config->support == PACKET_SUPPORT_UNKNOWN)
1354         {
1355           if (remote_debug)
1356             fprintf_unfiltered (gdb_stdlog,
1357                                 "Packet %s (%s) is supported\n",
1358                                 config->name, config->title);
1359           config->support = PACKET_ENABLE;
1360         }
1361       break;
1362     case PACKET_UNKNOWN:
1363       /* The stub does not support the packet.  */
1364       if (config->detect == AUTO_BOOLEAN_AUTO
1365           && config->support == PACKET_ENABLE)
1366         {
1367           /* If the stub previously indicated that the packet was
1368              supported then there is a protocol error.  */
1369           error (_("Protocol error: %s (%s) conflicting enabled responses."),
1370                  config->name, config->title);
1371         }
1372       else if (config->detect == AUTO_BOOLEAN_TRUE)
1373         {
1374           /* The user set it wrong.  */
1375           error (_("Enabled packet %s (%s) not recognized by stub"),
1376                  config->name, config->title);
1377         }
1378
1379       if (remote_debug)
1380         fprintf_unfiltered (gdb_stdlog,
1381                             "Packet %s (%s) is NOT supported\n",
1382                             config->name, config->title);
1383       config->support = PACKET_DISABLE;
1384       break;
1385     }
1386
1387   return result;
1388 }
1389
1390 enum {
1391   PACKET_vCont = 0,
1392   PACKET_X,
1393   PACKET_qSymbol,
1394   PACKET_P,
1395   PACKET_p,
1396   PACKET_Z0,
1397   PACKET_Z1,
1398   PACKET_Z2,
1399   PACKET_Z3,
1400   PACKET_Z4,
1401   PACKET_vFile_setfs,
1402   PACKET_vFile_open,
1403   PACKET_vFile_pread,
1404   PACKET_vFile_pwrite,
1405   PACKET_vFile_close,
1406   PACKET_vFile_unlink,
1407   PACKET_vFile_readlink,
1408   PACKET_vFile_fstat,
1409   PACKET_qXfer_auxv,
1410   PACKET_qXfer_features,
1411   PACKET_qXfer_exec_file,
1412   PACKET_qXfer_libraries,
1413   PACKET_qXfer_libraries_svr4,
1414   PACKET_qXfer_memory_map,
1415   PACKET_qXfer_spu_read,
1416   PACKET_qXfer_spu_write,
1417   PACKET_qXfer_osdata,
1418   PACKET_qXfer_threads,
1419   PACKET_qXfer_statictrace_read,
1420   PACKET_qXfer_traceframe_info,
1421   PACKET_qXfer_uib,
1422   PACKET_qGetTIBAddr,
1423   PACKET_qGetTLSAddr,
1424   PACKET_qSupported,
1425   PACKET_qTStatus,
1426   PACKET_QPassSignals,
1427   PACKET_QCatchSyscalls,
1428   PACKET_QProgramSignals,
1429   PACKET_QSetWorkingDir,
1430   PACKET_QStartupWithShell,
1431   PACKET_QEnvironmentHexEncoded,
1432   PACKET_QEnvironmentReset,
1433   PACKET_QEnvironmentUnset,
1434   PACKET_qCRC,
1435   PACKET_qSearch_memory,
1436   PACKET_vAttach,
1437   PACKET_vRun,
1438   PACKET_QStartNoAckMode,
1439   PACKET_vKill,
1440   PACKET_qXfer_siginfo_read,
1441   PACKET_qXfer_siginfo_write,
1442   PACKET_qAttached,
1443
1444   /* Support for conditional tracepoints.  */
1445   PACKET_ConditionalTracepoints,
1446
1447   /* Support for target-side breakpoint conditions.  */
1448   PACKET_ConditionalBreakpoints,
1449
1450   /* Support for target-side breakpoint commands.  */
1451   PACKET_BreakpointCommands,
1452
1453   /* Support for fast tracepoints.  */
1454   PACKET_FastTracepoints,
1455
1456   /* Support for static tracepoints.  */
1457   PACKET_StaticTracepoints,
1458
1459   /* Support for installing tracepoints while a trace experiment is
1460      running.  */
1461   PACKET_InstallInTrace,
1462
1463   PACKET_bc,
1464   PACKET_bs,
1465   PACKET_TracepointSource,
1466   PACKET_QAllow,
1467   PACKET_qXfer_fdpic,
1468   PACKET_QDisableRandomization,
1469   PACKET_QAgent,
1470   PACKET_QTBuffer_size,
1471   PACKET_Qbtrace_off,
1472   PACKET_Qbtrace_bts,
1473   PACKET_Qbtrace_pt,
1474   PACKET_qXfer_btrace,
1475
1476   /* Support for the QNonStop packet.  */
1477   PACKET_QNonStop,
1478
1479   /* Support for the QThreadEvents packet.  */
1480   PACKET_QThreadEvents,
1481
1482   /* Support for multi-process extensions.  */
1483   PACKET_multiprocess_feature,
1484
1485   /* Support for enabling and disabling tracepoints while a trace
1486      experiment is running.  */
1487   PACKET_EnableDisableTracepoints_feature,
1488
1489   /* Support for collecting strings using the tracenz bytecode.  */
1490   PACKET_tracenz_feature,
1491
1492   /* Support for continuing to run a trace experiment while GDB is
1493      disconnected.  */
1494   PACKET_DisconnectedTracing_feature,
1495
1496   /* Support for qXfer:libraries-svr4:read with a non-empty annex.  */
1497   PACKET_augmented_libraries_svr4_read_feature,
1498
1499   /* Support for the qXfer:btrace-conf:read packet.  */
1500   PACKET_qXfer_btrace_conf,
1501
1502   /* Support for the Qbtrace-conf:bts:size packet.  */
1503   PACKET_Qbtrace_conf_bts_size,
1504
1505   /* Support for swbreak+ feature.  */
1506   PACKET_swbreak_feature,
1507
1508   /* Support for hwbreak+ feature.  */
1509   PACKET_hwbreak_feature,
1510
1511   /* Support for fork events.  */
1512   PACKET_fork_event_feature,
1513
1514   /* Support for vfork events.  */
1515   PACKET_vfork_event_feature,
1516
1517   /* Support for the Qbtrace-conf:pt:size packet.  */
1518   PACKET_Qbtrace_conf_pt_size,
1519
1520   /* Support for exec events.  */
1521   PACKET_exec_event_feature,
1522
1523   /* Support for query supported vCont actions.  */
1524   PACKET_vContSupported,
1525
1526   /* Support remote CTRL-C.  */
1527   PACKET_vCtrlC,
1528
1529   /* Support TARGET_WAITKIND_NO_RESUMED.  */
1530   PACKET_no_resumed,
1531
1532   PACKET_MAX
1533 };
1534
1535 static struct packet_config remote_protocol_packets[PACKET_MAX];
1536
1537 /* Returns the packet's corresponding "set remote foo-packet" command
1538    state.  See struct packet_config for more details.  */
1539
1540 static enum auto_boolean
1541 packet_set_cmd_state (int packet)
1542 {
1543   return remote_protocol_packets[packet].detect;
1544 }
1545
1546 /* Returns whether a given packet or feature is supported.  This takes
1547    into account the state of the corresponding "set remote foo-packet"
1548    command, which may be used to bypass auto-detection.  */
1549
1550 static enum packet_support
1551 packet_config_support (struct packet_config *config)
1552 {
1553   switch (config->detect)
1554     {
1555     case AUTO_BOOLEAN_TRUE:
1556       return PACKET_ENABLE;
1557     case AUTO_BOOLEAN_FALSE:
1558       return PACKET_DISABLE;
1559     case AUTO_BOOLEAN_AUTO:
1560       return config->support;
1561     default:
1562       gdb_assert_not_reached (_("bad switch"));
1563     }
1564 }
1565
1566 /* Same as packet_config_support, but takes the packet's enum value as
1567    argument.  */
1568
1569 static enum packet_support
1570 packet_support (int packet)
1571 {
1572   struct packet_config *config = &remote_protocol_packets[packet];
1573
1574   return packet_config_support (config);
1575 }
1576
1577 static void
1578 show_remote_protocol_packet_cmd (struct ui_file *file, int from_tty,
1579                                  struct cmd_list_element *c,
1580                                  const char *value)
1581 {
1582   struct packet_config *packet;
1583
1584   for (packet = remote_protocol_packets;
1585        packet < &remote_protocol_packets[PACKET_MAX];
1586        packet++)
1587     {
1588       if (&packet->detect == c->var)
1589         {
1590           show_packet_config_cmd (packet);
1591           return;
1592         }
1593     }
1594   internal_error (__FILE__, __LINE__, _("Could not find config for %s"),
1595                   c->name);
1596 }
1597
1598 /* Should we try one of the 'Z' requests?  */
1599
1600 enum Z_packet_type
1601 {
1602   Z_PACKET_SOFTWARE_BP,
1603   Z_PACKET_HARDWARE_BP,
1604   Z_PACKET_WRITE_WP,
1605   Z_PACKET_READ_WP,
1606   Z_PACKET_ACCESS_WP,
1607   NR_Z_PACKET_TYPES
1608 };
1609
1610 /* For compatibility with older distributions.  Provide a ``set remote
1611    Z-packet ...'' command that updates all the Z packet types.  */
1612
1613 static enum auto_boolean remote_Z_packet_detect;
1614
1615 static void
1616 set_remote_protocol_Z_packet_cmd (char *args, int from_tty,
1617                                   struct cmd_list_element *c)
1618 {
1619   int i;
1620
1621   for (i = 0; i < NR_Z_PACKET_TYPES; i++)
1622     remote_protocol_packets[PACKET_Z0 + i].detect = remote_Z_packet_detect;
1623 }
1624
1625 static void
1626 show_remote_protocol_Z_packet_cmd (struct ui_file *file, int from_tty,
1627                                    struct cmd_list_element *c,
1628                                    const char *value)
1629 {
1630   int i;
1631
1632   for (i = 0; i < NR_Z_PACKET_TYPES; i++)
1633     {
1634       show_packet_config_cmd (&remote_protocol_packets[PACKET_Z0 + i]);
1635     }
1636 }
1637
1638 /* Returns true if the multi-process extensions are in effect.  */
1639
1640 static int
1641 remote_multi_process_p (struct remote_state *rs)
1642 {
1643   return packet_support (PACKET_multiprocess_feature) == PACKET_ENABLE;
1644 }
1645
1646 /* Returns true if fork events are supported.  */
1647
1648 static int
1649 remote_fork_event_p (struct remote_state *rs)
1650 {
1651   return packet_support (PACKET_fork_event_feature) == PACKET_ENABLE;
1652 }
1653
1654 /* Returns true if vfork events are supported.  */
1655
1656 static int
1657 remote_vfork_event_p (struct remote_state *rs)
1658 {
1659   return packet_support (PACKET_vfork_event_feature) == PACKET_ENABLE;
1660 }
1661
1662 /* Returns true if exec events are supported.  */
1663
1664 static int
1665 remote_exec_event_p (struct remote_state *rs)
1666 {
1667   return packet_support (PACKET_exec_event_feature) == PACKET_ENABLE;
1668 }
1669
1670 /* Insert fork catchpoint target routine.  If fork events are enabled
1671    then return success, nothing more to do.  */
1672
1673 static int
1674 remote_insert_fork_catchpoint (struct target_ops *ops, int pid)
1675 {
1676   struct remote_state *rs = get_remote_state ();
1677
1678   return !remote_fork_event_p (rs);
1679 }
1680
1681 /* Remove fork catchpoint target routine.  Nothing to do, just
1682    return success.  */
1683
1684 static int
1685 remote_remove_fork_catchpoint (struct target_ops *ops, int pid)
1686 {
1687   return 0;
1688 }
1689
1690 /* Insert vfork catchpoint target routine.  If vfork events are enabled
1691    then return success, nothing more to do.  */
1692
1693 static int
1694 remote_insert_vfork_catchpoint (struct target_ops *ops, int pid)
1695 {
1696   struct remote_state *rs = get_remote_state ();
1697
1698   return !remote_vfork_event_p (rs);
1699 }
1700
1701 /* Remove vfork catchpoint target routine.  Nothing to do, just
1702    return success.  */
1703
1704 static int
1705 remote_remove_vfork_catchpoint (struct target_ops *ops, int pid)
1706 {
1707   return 0;
1708 }
1709
1710 /* Insert exec catchpoint target routine.  If exec events are
1711    enabled, just return success.  */
1712
1713 static int
1714 remote_insert_exec_catchpoint (struct target_ops *ops, int pid)
1715 {
1716   struct remote_state *rs = get_remote_state ();
1717
1718   return !remote_exec_event_p (rs);
1719 }
1720
1721 /* Remove exec catchpoint target routine.  Nothing to do, just
1722    return success.  */
1723
1724 static int
1725 remote_remove_exec_catchpoint (struct target_ops *ops, int pid)
1726 {
1727   return 0;
1728 }
1729
1730 \f
1731 /* Asynchronous signal handle registered as event loop source for
1732    when we have pending events ready to be passed to the core.  */
1733
1734 static struct async_event_handler *remote_async_inferior_event_token;
1735
1736 \f
1737
1738 static ptid_t magic_null_ptid;
1739 static ptid_t not_sent_ptid;
1740 static ptid_t any_thread_ptid;
1741
1742 /* Find out if the stub attached to PID (and hence GDB should offer to
1743    detach instead of killing it when bailing out).  */
1744
1745 static int
1746 remote_query_attached (int pid)
1747 {
1748   struct remote_state *rs = get_remote_state ();
1749   size_t size = get_remote_packet_size ();
1750
1751   if (packet_support (PACKET_qAttached) == PACKET_DISABLE)
1752     return 0;
1753
1754   if (remote_multi_process_p (rs))
1755     xsnprintf (rs->buf, size, "qAttached:%x", pid);
1756   else
1757     xsnprintf (rs->buf, size, "qAttached");
1758
1759   putpkt (rs->buf);
1760   getpkt (&rs->buf, &rs->buf_size, 0);
1761
1762   switch (packet_ok (rs->buf,
1763                      &remote_protocol_packets[PACKET_qAttached]))
1764     {
1765     case PACKET_OK:
1766       if (strcmp (rs->buf, "1") == 0)
1767         return 1;
1768       break;
1769     case PACKET_ERROR:
1770       warning (_("Remote failure reply: %s"), rs->buf);
1771       break;
1772     case PACKET_UNKNOWN:
1773       break;
1774     }
1775
1776   return 0;
1777 }
1778
1779 /* Add PID to GDB's inferior table.  If FAKE_PID_P is true, then PID
1780    has been invented by GDB, instead of reported by the target.  Since
1781    we can be connected to a remote system before before knowing about
1782    any inferior, mark the target with execution when we find the first
1783    inferior.  If ATTACHED is 1, then we had just attached to this
1784    inferior.  If it is 0, then we just created this inferior.  If it
1785    is -1, then try querying the remote stub to find out if it had
1786    attached to the inferior or not.  If TRY_OPEN_EXEC is true then
1787    attempt to open this inferior's executable as the main executable
1788    if no main executable is open already.  */
1789
1790 static struct inferior *
1791 remote_add_inferior (int fake_pid_p, int pid, int attached,
1792                      int try_open_exec)
1793 {
1794   struct inferior *inf;
1795
1796   /* Check whether this process we're learning about is to be
1797      considered attached, or if is to be considered to have been
1798      spawned by the stub.  */
1799   if (attached == -1)
1800     attached = remote_query_attached (pid);
1801
1802   if (gdbarch_has_global_solist (target_gdbarch ()))
1803     {
1804       /* If the target shares code across all inferiors, then every
1805          attach adds a new inferior.  */
1806       inf = add_inferior (pid);
1807
1808       /* ... and every inferior is bound to the same program space.
1809          However, each inferior may still have its own address
1810          space.  */
1811       inf->aspace = maybe_new_address_space ();
1812       inf->pspace = current_program_space;
1813     }
1814   else
1815     {
1816       /* In the traditional debugging scenario, there's a 1-1 match
1817          between program/address spaces.  We simply bind the inferior
1818          to the program space's address space.  */
1819       inf = current_inferior ();
1820       inferior_appeared (inf, pid);
1821     }
1822
1823   inf->attach_flag = attached;
1824   inf->fake_pid_p = fake_pid_p;
1825
1826   /* If no main executable is currently open then attempt to
1827      open the file that was executed to create this inferior.  */
1828   if (try_open_exec && get_exec_file (0) == NULL)
1829     exec_file_locate_attach (pid, 0, 1);
1830
1831   return inf;
1832 }
1833
1834 static struct private_thread_info *
1835   get_private_info_thread (struct thread_info *info);
1836
1837 /* Add thread PTID to GDB's thread list.  Tag it as executing/running
1838    according to RUNNING.  */
1839
1840 static void
1841 remote_add_thread (ptid_t ptid, int running, int executing)
1842 {
1843   struct remote_state *rs = get_remote_state ();
1844   struct thread_info *thread;
1845
1846   /* GDB historically didn't pull threads in the initial connection
1847      setup.  If the remote target doesn't even have a concept of
1848      threads (e.g., a bare-metal target), even if internally we
1849      consider that a single-threaded target, mentioning a new thread
1850      might be confusing to the user.  Be silent then, preserving the
1851      age old behavior.  */
1852   if (rs->starting_up)
1853     thread = add_thread_silent (ptid);
1854   else
1855     thread = add_thread (ptid);
1856
1857   get_private_info_thread (thread)->vcont_resumed = executing;
1858   set_executing (ptid, executing);
1859   set_running (ptid, running);
1860 }
1861
1862 /* Come here when we learn about a thread id from the remote target.
1863    It may be the first time we hear about such thread, so take the
1864    opportunity to add it to GDB's thread list.  In case this is the
1865    first time we're noticing its corresponding inferior, add it to
1866    GDB's inferior list as well.  EXECUTING indicates whether the
1867    thread is (internally) executing or stopped.  */
1868
1869 static void
1870 remote_notice_new_inferior (ptid_t currthread, int executing)
1871 {
1872   /* In non-stop mode, we assume new found threads are (externally)
1873      running until proven otherwise with a stop reply.  In all-stop,
1874      we can only get here if all threads are stopped.  */
1875   int running = target_is_non_stop_p () ? 1 : 0;
1876
1877   /* If this is a new thread, add it to GDB's thread list.
1878      If we leave it up to WFI to do this, bad things will happen.  */
1879
1880   if (in_thread_list (currthread) && is_exited (currthread))
1881     {
1882       /* We're seeing an event on a thread id we knew had exited.
1883          This has to be a new thread reusing the old id.  Add it.  */
1884       remote_add_thread (currthread, running, executing);
1885       return;
1886     }
1887
1888   if (!in_thread_list (currthread))
1889     {
1890       struct inferior *inf = NULL;
1891       int pid = ptid_get_pid (currthread);
1892
1893       if (ptid_is_pid (inferior_ptid)
1894           && pid == ptid_get_pid (inferior_ptid))
1895         {
1896           /* inferior_ptid has no thread member yet.  This can happen
1897              with the vAttach -> remote_wait,"TAAthread:" path if the
1898              stub doesn't support qC.  This is the first stop reported
1899              after an attach, so this is the main thread.  Update the
1900              ptid in the thread list.  */
1901           if (in_thread_list (pid_to_ptid (pid)))
1902             thread_change_ptid (inferior_ptid, currthread);
1903           else
1904             {
1905               remote_add_thread (currthread, running, executing);
1906               inferior_ptid = currthread;
1907             }
1908           return;
1909         }
1910
1911       if (ptid_equal (magic_null_ptid, inferior_ptid))
1912         {
1913           /* inferior_ptid is not set yet.  This can happen with the
1914              vRun -> remote_wait,"TAAthread:" path if the stub
1915              doesn't support qC.  This is the first stop reported
1916              after an attach, so this is the main thread.  Update the
1917              ptid in the thread list.  */
1918           thread_change_ptid (inferior_ptid, currthread);
1919           return;
1920         }
1921
1922       /* When connecting to a target remote, or to a target
1923          extended-remote which already was debugging an inferior, we
1924          may not know about it yet.  Add it before adding its child
1925          thread, so notifications are emitted in a sensible order.  */
1926       if (!in_inferior_list (ptid_get_pid (currthread)))
1927         {
1928           struct remote_state *rs = get_remote_state ();
1929           int fake_pid_p = !remote_multi_process_p (rs);
1930
1931           inf = remote_add_inferior (fake_pid_p,
1932                                      ptid_get_pid (currthread), -1, 1);
1933         }
1934
1935       /* This is really a new thread.  Add it.  */
1936       remote_add_thread (currthread, running, executing);
1937
1938       /* If we found a new inferior, let the common code do whatever
1939          it needs to with it (e.g., read shared libraries, insert
1940          breakpoints), unless we're just setting up an all-stop
1941          connection.  */
1942       if (inf != NULL)
1943         {
1944           struct remote_state *rs = get_remote_state ();
1945
1946           if (!rs->starting_up)
1947             notice_new_inferior (currthread, executing, 0);
1948         }
1949     }
1950 }
1951
1952 /* Return THREAD's private thread data, creating it if necessary.  */
1953
1954 static struct private_thread_info *
1955 get_private_info_thread (struct thread_info *thread)
1956 {
1957   gdb_assert (thread != NULL);
1958
1959   if (thread->priv == NULL)
1960     {
1961       struct private_thread_info *priv = XNEW (struct private_thread_info);
1962
1963       thread->private_dtor = free_private_thread_info;
1964       thread->priv = priv;
1965
1966       priv->core = -1;
1967       priv->extra = NULL;
1968       priv->name = NULL;
1969       priv->name = NULL;
1970       priv->last_resume_step = 0;
1971       priv->last_resume_sig = GDB_SIGNAL_0;
1972       priv->vcont_resumed = 0;
1973       priv->thread_handle = nullptr;
1974     }
1975
1976   return thread->priv;
1977 }
1978
1979 /* Return PTID's private thread data, creating it if necessary.  */
1980
1981 static struct private_thread_info *
1982 get_private_info_ptid (ptid_t ptid)
1983 {
1984   struct thread_info *info = find_thread_ptid (ptid);
1985
1986   return get_private_info_thread (info);
1987 }
1988
1989 /* Call this function as a result of
1990    1) A halt indication (T packet) containing a thread id
1991    2) A direct query of currthread
1992    3) Successful execution of set thread */
1993
1994 static void
1995 record_currthread (struct remote_state *rs, ptid_t currthread)
1996 {
1997   rs->general_thread = currthread;
1998 }
1999
2000 /* If 'QPassSignals' is supported, tell the remote stub what signals
2001    it can simply pass through to the inferior without reporting.  */
2002
2003 static void
2004 remote_pass_signals (struct target_ops *self,
2005                      int numsigs, unsigned char *pass_signals)
2006 {
2007   if (packet_support (PACKET_QPassSignals) != PACKET_DISABLE)
2008     {
2009       char *pass_packet, *p;
2010       int count = 0, i;
2011       struct remote_state *rs = get_remote_state ();
2012
2013       gdb_assert (numsigs < 256);
2014       for (i = 0; i < numsigs; i++)
2015         {
2016           if (pass_signals[i])
2017             count++;
2018         }
2019       pass_packet = (char *) xmalloc (count * 3 + strlen ("QPassSignals:") + 1);
2020       strcpy (pass_packet, "QPassSignals:");
2021       p = pass_packet + strlen (pass_packet);
2022       for (i = 0; i < numsigs; i++)
2023         {
2024           if (pass_signals[i])
2025             {
2026               if (i >= 16)
2027                 *p++ = tohex (i >> 4);
2028               *p++ = tohex (i & 15);
2029               if (count)
2030                 *p++ = ';';
2031               else
2032                 break;
2033               count--;
2034             }
2035         }
2036       *p = 0;
2037       if (!rs->last_pass_packet || strcmp (rs->last_pass_packet, pass_packet))
2038         {
2039           putpkt (pass_packet);
2040           getpkt (&rs->buf, &rs->buf_size, 0);
2041           packet_ok (rs->buf, &remote_protocol_packets[PACKET_QPassSignals]);
2042           if (rs->last_pass_packet)
2043             xfree (rs->last_pass_packet);
2044           rs->last_pass_packet = pass_packet;
2045         }
2046       else
2047         xfree (pass_packet);
2048     }
2049 }
2050
2051 /* If 'QCatchSyscalls' is supported, tell the remote stub
2052    to report syscalls to GDB.  */
2053
2054 static int
2055 remote_set_syscall_catchpoint (struct target_ops *self,
2056                                int pid, int needed, int any_count,
2057                                int table_size, int *table)
2058 {
2059   const char *catch_packet;
2060   enum packet_result result;
2061   int n_sysno = 0;
2062
2063   if (packet_support (PACKET_QCatchSyscalls) == PACKET_DISABLE)
2064     {
2065       /* Not supported.  */
2066       return 1;
2067     }
2068
2069   if (needed && !any_count)
2070     {
2071       int i;
2072
2073       /* Count how many syscalls are to be caught (table[sysno] != 0).  */
2074       for (i = 0; i < table_size; i++)
2075         {
2076           if (table[i] != 0)
2077             n_sysno++;
2078         }
2079     }
2080
2081   if (remote_debug)
2082     {
2083       fprintf_unfiltered (gdb_stdlog,
2084                           "remote_set_syscall_catchpoint "
2085                           "pid %d needed %d any_count %d n_sysno %d\n",
2086                           pid, needed, any_count, n_sysno);
2087     }
2088
2089   gdb::unique_xmalloc_ptr<char> built_packet;
2090   if (needed)
2091     {
2092       /* Prepare a packet with the sysno list, assuming max 8+1
2093          characters for a sysno.  If the resulting packet size is too
2094          big, fallback on the non-selective packet.  */
2095       const int maxpktsz = strlen ("QCatchSyscalls:1") + n_sysno * 9 + 1;
2096
2097       built_packet.reset ((char *) xmalloc (maxpktsz));
2098       strcpy (built_packet.get (), "QCatchSyscalls:1");
2099       if (!any_count)
2100         {
2101           int i;
2102           char *p;
2103
2104           p = built_packet.get ();
2105           p += strlen (p);
2106
2107           /* Add in catch_packet each syscall to be caught (table[i] != 0).  */
2108           for (i = 0; i < table_size; i++)
2109             {
2110               if (table[i] != 0)
2111                 p += xsnprintf (p, built_packet.get () + maxpktsz - p,
2112                                 ";%x", i);
2113             }
2114         }
2115       if (strlen (built_packet.get ()) > get_remote_packet_size ())
2116         {
2117           /* catch_packet too big.  Fallback to less efficient
2118              non selective mode, with GDB doing the filtering.  */
2119           catch_packet = "QCatchSyscalls:1";
2120         }
2121       else
2122         catch_packet = built_packet.get ();
2123     }
2124   else
2125     catch_packet = "QCatchSyscalls:0";
2126
2127   struct remote_state *rs = get_remote_state ();
2128
2129   putpkt (catch_packet);
2130   getpkt (&rs->buf, &rs->buf_size, 0);
2131   result = packet_ok (rs->buf, &remote_protocol_packets[PACKET_QCatchSyscalls]);
2132   if (result == PACKET_OK)
2133     return 0;
2134   else
2135     return -1;
2136 }
2137
2138 /* If 'QProgramSignals' is supported, tell the remote stub what
2139    signals it should pass through to the inferior when detaching.  */
2140
2141 static void
2142 remote_program_signals (struct target_ops *self,
2143                         int numsigs, unsigned char *signals)
2144 {
2145   if (packet_support (PACKET_QProgramSignals) != PACKET_DISABLE)
2146     {
2147       char *packet, *p;
2148       int count = 0, i;
2149       struct remote_state *rs = get_remote_state ();
2150
2151       gdb_assert (numsigs < 256);
2152       for (i = 0; i < numsigs; i++)
2153         {
2154           if (signals[i])
2155             count++;
2156         }
2157       packet = (char *) xmalloc (count * 3 + strlen ("QProgramSignals:") + 1);
2158       strcpy (packet, "QProgramSignals:");
2159       p = packet + strlen (packet);
2160       for (i = 0; i < numsigs; i++)
2161         {
2162           if (signal_pass_state (i))
2163             {
2164               if (i >= 16)
2165                 *p++ = tohex (i >> 4);
2166               *p++ = tohex (i & 15);
2167               if (count)
2168                 *p++ = ';';
2169               else
2170                 break;
2171               count--;
2172             }
2173         }
2174       *p = 0;
2175       if (!rs->last_program_signals_packet
2176           || strcmp (rs->last_program_signals_packet, packet) != 0)
2177         {
2178           putpkt (packet);
2179           getpkt (&rs->buf, &rs->buf_size, 0);
2180           packet_ok (rs->buf, &remote_protocol_packets[PACKET_QProgramSignals]);
2181           xfree (rs->last_program_signals_packet);
2182           rs->last_program_signals_packet = packet;
2183         }
2184       else
2185         xfree (packet);
2186     }
2187 }
2188
2189 /* If PTID is MAGIC_NULL_PTID, don't set any thread.  If PTID is
2190    MINUS_ONE_PTID, set the thread to -1, so the stub returns the
2191    thread.  If GEN is set, set the general thread, if not, then set
2192    the step/continue thread.  */
2193 static void
2194 set_thread (ptid_t ptid, int gen)
2195 {
2196   struct remote_state *rs = get_remote_state ();
2197   ptid_t state = gen ? rs->general_thread : rs->continue_thread;
2198   char *buf = rs->buf;
2199   char *endbuf = rs->buf + get_remote_packet_size ();
2200
2201   if (ptid_equal (state, ptid))
2202     return;
2203
2204   *buf++ = 'H';
2205   *buf++ = gen ? 'g' : 'c';
2206   if (ptid_equal (ptid, magic_null_ptid))
2207     xsnprintf (buf, endbuf - buf, "0");
2208   else if (ptid_equal (ptid, any_thread_ptid))
2209     xsnprintf (buf, endbuf - buf, "0");
2210   else if (ptid_equal (ptid, minus_one_ptid))
2211     xsnprintf (buf, endbuf - buf, "-1");
2212   else
2213     write_ptid (buf, endbuf, ptid);
2214   putpkt (rs->buf);
2215   getpkt (&rs->buf, &rs->buf_size, 0);
2216   if (gen)
2217     rs->general_thread = ptid;
2218   else
2219     rs->continue_thread = ptid;
2220 }
2221
2222 static void
2223 set_general_thread (ptid_t ptid)
2224 {
2225   set_thread (ptid, 1);
2226 }
2227
2228 static void
2229 set_continue_thread (ptid_t ptid)
2230 {
2231   set_thread (ptid, 0);
2232 }
2233
2234 /* Change the remote current process.  Which thread within the process
2235    ends up selected isn't important, as long as it is the same process
2236    as what INFERIOR_PTID points to.
2237
2238    This comes from that fact that there is no explicit notion of
2239    "selected process" in the protocol.  The selected process for
2240    general operations is the process the selected general thread
2241    belongs to.  */
2242
2243 static void
2244 set_general_process (void)
2245 {
2246   struct remote_state *rs = get_remote_state ();
2247
2248   /* If the remote can't handle multiple processes, don't bother.  */
2249   if (!remote_multi_process_p (rs))
2250     return;
2251
2252   /* We only need to change the remote current thread if it's pointing
2253      at some other process.  */
2254   if (ptid_get_pid (rs->general_thread) != ptid_get_pid (inferior_ptid))
2255     set_general_thread (inferior_ptid);
2256 }
2257
2258 \f
2259 /* Return nonzero if this is the main thread that we made up ourselves
2260    to model non-threaded targets as single-threaded.  */
2261
2262 static int
2263 remote_thread_always_alive (struct target_ops *ops, ptid_t ptid)
2264 {
2265   if (ptid_equal (ptid, magic_null_ptid))
2266     /* The main thread is always alive.  */
2267     return 1;
2268
2269   if (ptid_get_pid (ptid) != 0 && ptid_get_lwp (ptid) == 0)
2270     /* The main thread is always alive.  This can happen after a
2271        vAttach, if the remote side doesn't support
2272        multi-threading.  */
2273     return 1;
2274
2275   return 0;
2276 }
2277
2278 /* Return nonzero if the thread PTID is still alive on the remote
2279    system.  */
2280
2281 static int
2282 remote_thread_alive (struct target_ops *ops, ptid_t ptid)
2283 {
2284   struct remote_state *rs = get_remote_state ();
2285   char *p, *endp;
2286
2287   /* Check if this is a thread that we made up ourselves to model
2288      non-threaded targets as single-threaded.  */
2289   if (remote_thread_always_alive (ops, ptid))
2290     return 1;
2291
2292   p = rs->buf;
2293   endp = rs->buf + get_remote_packet_size ();
2294
2295   *p++ = 'T';
2296   write_ptid (p, endp, ptid);
2297
2298   putpkt (rs->buf);
2299   getpkt (&rs->buf, &rs->buf_size, 0);
2300   return (rs->buf[0] == 'O' && rs->buf[1] == 'K');
2301 }
2302
2303 /* Return a pointer to a thread name if we know it and NULL otherwise.
2304    The thread_info object owns the memory for the name.  */
2305
2306 static const char *
2307 remote_thread_name (struct target_ops *ops, struct thread_info *info)
2308 {
2309   if (info->priv != NULL)
2310     return info->priv->name;
2311
2312   return NULL;
2313 }
2314
2315 /* About these extended threadlist and threadinfo packets.  They are
2316    variable length packets but, the fields within them are often fixed
2317    length.  They are redundent enough to send over UDP as is the
2318    remote protocol in general.  There is a matching unit test module
2319    in libstub.  */
2320
2321 /* WARNING: This threadref data structure comes from the remote O.S.,
2322    libstub protocol encoding, and remote.c.  It is not particularly
2323    changable.  */
2324
2325 /* Right now, the internal structure is int. We want it to be bigger.
2326    Plan to fix this.  */
2327
2328 typedef int gdb_threadref;      /* Internal GDB thread reference.  */
2329
2330 /* gdb_ext_thread_info is an internal GDB data structure which is
2331    equivalent to the reply of the remote threadinfo packet.  */
2332
2333 struct gdb_ext_thread_info
2334   {
2335     threadref threadid;         /* External form of thread reference.  */
2336     int active;                 /* Has state interesting to GDB?
2337                                    regs, stack.  */
2338     char display[256];          /* Brief state display, name,
2339                                    blocked/suspended.  */
2340     char shortname[32];         /* To be used to name threads.  */
2341     char more_display[256];     /* Long info, statistics, queue depth,
2342                                    whatever.  */
2343   };
2344
2345 /* The volume of remote transfers can be limited by submitting
2346    a mask containing bits specifying the desired information.
2347    Use a union of these values as the 'selection' parameter to
2348    get_thread_info.  FIXME: Make these TAG names more thread specific.  */
2349
2350 #define TAG_THREADID 1
2351 #define TAG_EXISTS 2
2352 #define TAG_DISPLAY 4
2353 #define TAG_THREADNAME 8
2354 #define TAG_MOREDISPLAY 16
2355
2356 #define BUF_THREAD_ID_SIZE (OPAQUETHREADBYTES * 2)
2357
2358 static char *unpack_nibble (char *buf, int *val);
2359
2360 static char *unpack_byte (char *buf, int *value);
2361
2362 static char *pack_int (char *buf, int value);
2363
2364 static char *unpack_int (char *buf, int *value);
2365
2366 static char *unpack_string (char *src, char *dest, int length);
2367
2368 static char *pack_threadid (char *pkt, threadref *id);
2369
2370 static char *unpack_threadid (char *inbuf, threadref *id);
2371
2372 void int_to_threadref (threadref *id, int value);
2373
2374 static int threadref_to_int (threadref *ref);
2375
2376 static void copy_threadref (threadref *dest, threadref *src);
2377
2378 static int threadmatch (threadref *dest, threadref *src);
2379
2380 static char *pack_threadinfo_request (char *pkt, int mode,
2381                                       threadref *id);
2382
2383 static int remote_unpack_thread_info_response (char *pkt,
2384                                                threadref *expectedref,
2385                                                struct gdb_ext_thread_info
2386                                                *info);
2387
2388
2389 static int remote_get_threadinfo (threadref *threadid,
2390                                   int fieldset, /*TAG mask */
2391                                   struct gdb_ext_thread_info *info);
2392
2393 static char *pack_threadlist_request (char *pkt, int startflag,
2394                                       int threadcount,
2395                                       threadref *nextthread);
2396
2397 static int parse_threadlist_response (char *pkt,
2398                                       int result_limit,
2399                                       threadref *original_echo,
2400                                       threadref *resultlist,
2401                                       int *doneflag);
2402
2403 static int remote_get_threadlist (int startflag,
2404                                   threadref *nextthread,
2405                                   int result_limit,
2406                                   int *done,
2407                                   int *result_count,
2408                                   threadref *threadlist);
2409
2410 typedef int (*rmt_thread_action) (threadref *ref, void *context);
2411
2412 static int remote_threadlist_iterator (rmt_thread_action stepfunction,
2413                                        void *context, int looplimit);
2414
2415 static int remote_newthread_step (threadref *ref, void *context);
2416
2417
2418 /* Write a PTID to BUF.  ENDBUF points to one-passed-the-end of the
2419    buffer we're allowed to write to.  Returns
2420    BUF+CHARACTERS_WRITTEN.  */
2421
2422 static char *
2423 write_ptid (char *buf, const char *endbuf, ptid_t ptid)
2424 {
2425   int pid, tid;
2426   struct remote_state *rs = get_remote_state ();
2427
2428   if (remote_multi_process_p (rs))
2429     {
2430       pid = ptid_get_pid (ptid);
2431       if (pid < 0)
2432         buf += xsnprintf (buf, endbuf - buf, "p-%x.", -pid);
2433       else
2434         buf += xsnprintf (buf, endbuf - buf, "p%x.", pid);
2435     }
2436   tid = ptid_get_lwp (ptid);
2437   if (tid < 0)
2438     buf += xsnprintf (buf, endbuf - buf, "-%x", -tid);
2439   else
2440     buf += xsnprintf (buf, endbuf - buf, "%x", tid);
2441
2442   return buf;
2443 }
2444
2445 /* Extract a PTID from BUF.  If non-null, OBUF is set to one past the
2446    last parsed char.  Returns null_ptid if no thread id is found, and
2447    throws an error if the thread id has an invalid format.  */
2448
2449 static ptid_t
2450 read_ptid (const char *buf, const char **obuf)
2451 {
2452   const char *p = buf;
2453   const char *pp;
2454   ULONGEST pid = 0, tid = 0;
2455
2456   if (*p == 'p')
2457     {
2458       /* Multi-process ptid.  */
2459       pp = unpack_varlen_hex (p + 1, &pid);
2460       if (*pp != '.')
2461         error (_("invalid remote ptid: %s"), p);
2462
2463       p = pp;
2464       pp = unpack_varlen_hex (p + 1, &tid);
2465       if (obuf)
2466         *obuf = pp;
2467       return ptid_build (pid, tid, 0);
2468     }
2469
2470   /* No multi-process.  Just a tid.  */
2471   pp = unpack_varlen_hex (p, &tid);
2472
2473   /* Return null_ptid when no thread id is found.  */
2474   if (p == pp)
2475     {
2476       if (obuf)
2477         *obuf = pp;
2478       return null_ptid;
2479     }
2480
2481   /* Since the stub is not sending a process id, then default to
2482      what's in inferior_ptid, unless it's null at this point.  If so,
2483      then since there's no way to know the pid of the reported
2484      threads, use the magic number.  */
2485   if (ptid_equal (inferior_ptid, null_ptid))
2486     pid = ptid_get_pid (magic_null_ptid);
2487   else
2488     pid = ptid_get_pid (inferior_ptid);
2489
2490   if (obuf)
2491     *obuf = pp;
2492   return ptid_build (pid, tid, 0);
2493 }
2494
2495 static int
2496 stubhex (int ch)
2497 {
2498   if (ch >= 'a' && ch <= 'f')
2499     return ch - 'a' + 10;
2500   if (ch >= '0' && ch <= '9')
2501     return ch - '0';
2502   if (ch >= 'A' && ch <= 'F')
2503     return ch - 'A' + 10;
2504   return -1;
2505 }
2506
2507 static int
2508 stub_unpack_int (char *buff, int fieldlength)
2509 {
2510   int nibble;
2511   int retval = 0;
2512
2513   while (fieldlength)
2514     {
2515       nibble = stubhex (*buff++);
2516       retval |= nibble;
2517       fieldlength--;
2518       if (fieldlength)
2519         retval = retval << 4;
2520     }
2521   return retval;
2522 }
2523
2524 static char *
2525 unpack_nibble (char *buf, int *val)
2526 {
2527   *val = fromhex (*buf++);
2528   return buf;
2529 }
2530
2531 static char *
2532 unpack_byte (char *buf, int *value)
2533 {
2534   *value = stub_unpack_int (buf, 2);
2535   return buf + 2;
2536 }
2537
2538 static char *
2539 pack_int (char *buf, int value)
2540 {
2541   buf = pack_hex_byte (buf, (value >> 24) & 0xff);
2542   buf = pack_hex_byte (buf, (value >> 16) & 0xff);
2543   buf = pack_hex_byte (buf, (value >> 8) & 0x0ff);
2544   buf = pack_hex_byte (buf, (value & 0xff));
2545   return buf;
2546 }
2547
2548 static char *
2549 unpack_int (char *buf, int *value)
2550 {
2551   *value = stub_unpack_int (buf, 8);
2552   return buf + 8;
2553 }
2554
2555 #if 0                   /* Currently unused, uncomment when needed.  */
2556 static char *pack_string (char *pkt, char *string);
2557
2558 static char *
2559 pack_string (char *pkt, char *string)
2560 {
2561   char ch;
2562   int len;
2563
2564   len = strlen (string);
2565   if (len > 200)
2566     len = 200;          /* Bigger than most GDB packets, junk???  */
2567   pkt = pack_hex_byte (pkt, len);
2568   while (len-- > 0)
2569     {
2570       ch = *string++;
2571       if ((ch == '\0') || (ch == '#'))
2572         ch = '*';               /* Protect encapsulation.  */
2573       *pkt++ = ch;
2574     }
2575   return pkt;
2576 }
2577 #endif /* 0 (unused) */
2578
2579 static char *
2580 unpack_string (char *src, char *dest, int length)
2581 {
2582   while (length--)
2583     *dest++ = *src++;
2584   *dest = '\0';
2585   return src;
2586 }
2587
2588 static char *
2589 pack_threadid (char *pkt, threadref *id)
2590 {
2591   char *limit;
2592   unsigned char *altid;
2593
2594   altid = (unsigned char *) id;
2595   limit = pkt + BUF_THREAD_ID_SIZE;
2596   while (pkt < limit)
2597     pkt = pack_hex_byte (pkt, *altid++);
2598   return pkt;
2599 }
2600
2601
2602 static char *
2603 unpack_threadid (char *inbuf, threadref *id)
2604 {
2605   char *altref;
2606   char *limit = inbuf + BUF_THREAD_ID_SIZE;
2607   int x, y;
2608
2609   altref = (char *) id;
2610
2611   while (inbuf < limit)
2612     {
2613       x = stubhex (*inbuf++);
2614       y = stubhex (*inbuf++);
2615       *altref++ = (x << 4) | y;
2616     }
2617   return inbuf;
2618 }
2619
2620 /* Externally, threadrefs are 64 bits but internally, they are still
2621    ints.  This is due to a mismatch of specifications.  We would like
2622    to use 64bit thread references internally.  This is an adapter
2623    function.  */
2624
2625 void
2626 int_to_threadref (threadref *id, int value)
2627 {
2628   unsigned char *scan;
2629
2630   scan = (unsigned char *) id;
2631   {
2632     int i = 4;
2633     while (i--)
2634       *scan++ = 0;
2635   }
2636   *scan++ = (value >> 24) & 0xff;
2637   *scan++ = (value >> 16) & 0xff;
2638   *scan++ = (value >> 8) & 0xff;
2639   *scan++ = (value & 0xff);
2640 }
2641
2642 static int
2643 threadref_to_int (threadref *ref)
2644 {
2645   int i, value = 0;
2646   unsigned char *scan;
2647
2648   scan = *ref;
2649   scan += 4;
2650   i = 4;
2651   while (i-- > 0)
2652     value = (value << 8) | ((*scan++) & 0xff);
2653   return value;
2654 }
2655
2656 static void
2657 copy_threadref (threadref *dest, threadref *src)
2658 {
2659   int i;
2660   unsigned char *csrc, *cdest;
2661
2662   csrc = (unsigned char *) src;
2663   cdest = (unsigned char *) dest;
2664   i = 8;
2665   while (i--)
2666     *cdest++ = *csrc++;
2667 }
2668
2669 static int
2670 threadmatch (threadref *dest, threadref *src)
2671 {
2672   /* Things are broken right now, so just assume we got a match.  */
2673 #if 0
2674   unsigned char *srcp, *destp;
2675   int i, result;
2676   srcp = (char *) src;
2677   destp = (char *) dest;
2678
2679   result = 1;
2680   while (i-- > 0)
2681     result &= (*srcp++ == *destp++) ? 1 : 0;
2682   return result;
2683 #endif
2684   return 1;
2685 }
2686
2687 /*
2688    threadid:1,        # always request threadid
2689    context_exists:2,
2690    display:4,
2691    unique_name:8,
2692    more_display:16
2693  */
2694
2695 /* Encoding:  'Q':8,'P':8,mask:32,threadid:64 */
2696
2697 static char *
2698 pack_threadinfo_request (char *pkt, int mode, threadref *id)
2699 {
2700   *pkt++ = 'q';                         /* Info Query */
2701   *pkt++ = 'P';                         /* process or thread info */
2702   pkt = pack_int (pkt, mode);           /* mode */
2703   pkt = pack_threadid (pkt, id);        /* threadid */
2704   *pkt = '\0';                          /* terminate */
2705   return pkt;
2706 }
2707
2708 /* These values tag the fields in a thread info response packet.  */
2709 /* Tagging the fields allows us to request specific fields and to
2710    add more fields as time goes by.  */
2711
2712 #define TAG_THREADID 1          /* Echo the thread identifier.  */
2713 #define TAG_EXISTS 2            /* Is this process defined enough to
2714                                    fetch registers and its stack?  */
2715 #define TAG_DISPLAY 4           /* A short thing maybe to put on a window */
2716 #define TAG_THREADNAME 8        /* string, maps 1-to-1 with a thread is.  */
2717 #define TAG_MOREDISPLAY 16      /* Whatever the kernel wants to say about
2718                                    the process.  */
2719
2720 static int
2721 remote_unpack_thread_info_response (char *pkt, threadref *expectedref,
2722                                     struct gdb_ext_thread_info *info)
2723 {
2724   struct remote_state *rs = get_remote_state ();
2725   int mask, length;
2726   int tag;
2727   threadref ref;
2728   char *limit = pkt + rs->buf_size; /* Plausible parsing limit.  */
2729   int retval = 1;
2730
2731   /* info->threadid = 0; FIXME: implement zero_threadref.  */
2732   info->active = 0;
2733   info->display[0] = '\0';
2734   info->shortname[0] = '\0';
2735   info->more_display[0] = '\0';
2736
2737   /* Assume the characters indicating the packet type have been
2738      stripped.  */
2739   pkt = unpack_int (pkt, &mask);        /* arg mask */
2740   pkt = unpack_threadid (pkt, &ref);
2741
2742   if (mask == 0)
2743     warning (_("Incomplete response to threadinfo request."));
2744   if (!threadmatch (&ref, expectedref))
2745     {                   /* This is an answer to a different request.  */
2746       warning (_("ERROR RMT Thread info mismatch."));
2747       return 0;
2748     }
2749   copy_threadref (&info->threadid, &ref);
2750
2751   /* Loop on tagged fields , try to bail if somthing goes wrong.  */
2752
2753   /* Packets are terminated with nulls.  */
2754   while ((pkt < limit) && mask && *pkt)
2755     {
2756       pkt = unpack_int (pkt, &tag);     /* tag */
2757       pkt = unpack_byte (pkt, &length); /* length */
2758       if (!(tag & mask))                /* Tags out of synch with mask.  */
2759         {
2760           warning (_("ERROR RMT: threadinfo tag mismatch."));
2761           retval = 0;
2762           break;
2763         }
2764       if (tag == TAG_THREADID)
2765         {
2766           if (length != 16)
2767             {
2768               warning (_("ERROR RMT: length of threadid is not 16."));
2769               retval = 0;
2770               break;
2771             }
2772           pkt = unpack_threadid (pkt, &ref);
2773           mask = mask & ~TAG_THREADID;
2774           continue;
2775         }
2776       if (tag == TAG_EXISTS)
2777         {
2778           info->active = stub_unpack_int (pkt, length);
2779           pkt += length;
2780           mask = mask & ~(TAG_EXISTS);
2781           if (length > 8)
2782             {
2783               warning (_("ERROR RMT: 'exists' length too long."));
2784               retval = 0;
2785               break;
2786             }
2787           continue;
2788         }
2789       if (tag == TAG_THREADNAME)
2790         {
2791           pkt = unpack_string (pkt, &info->shortname[0], length);
2792           mask = mask & ~TAG_THREADNAME;
2793           continue;
2794         }
2795       if (tag == TAG_DISPLAY)
2796         {
2797           pkt = unpack_string (pkt, &info->display[0], length);
2798           mask = mask & ~TAG_DISPLAY;
2799           continue;
2800         }
2801       if (tag == TAG_MOREDISPLAY)
2802         {
2803           pkt = unpack_string (pkt, &info->more_display[0], length);
2804           mask = mask & ~TAG_MOREDISPLAY;
2805           continue;
2806         }
2807       warning (_("ERROR RMT: unknown thread info tag."));
2808       break;                    /* Not a tag we know about.  */
2809     }
2810   return retval;
2811 }
2812
2813 static int
2814 remote_get_threadinfo (threadref *threadid, int fieldset,       /* TAG mask */
2815                        struct gdb_ext_thread_info *info)
2816 {
2817   struct remote_state *rs = get_remote_state ();
2818   int result;
2819
2820   pack_threadinfo_request (rs->buf, fieldset, threadid);
2821   putpkt (rs->buf);
2822   getpkt (&rs->buf, &rs->buf_size, 0);
2823
2824   if (rs->buf[0] == '\0')
2825     return 0;
2826
2827   result = remote_unpack_thread_info_response (rs->buf + 2,
2828                                                threadid, info);
2829   return result;
2830 }
2831
2832 /*    Format: i'Q':8,i"L":8,initflag:8,batchsize:16,lastthreadid:32   */
2833
2834 static char *
2835 pack_threadlist_request (char *pkt, int startflag, int threadcount,
2836                          threadref *nextthread)
2837 {
2838   *pkt++ = 'q';                 /* info query packet */
2839   *pkt++ = 'L';                 /* Process LIST or threadLIST request */
2840   pkt = pack_nibble (pkt, startflag);           /* initflag 1 bytes */
2841   pkt = pack_hex_byte (pkt, threadcount);       /* threadcount 2 bytes */
2842   pkt = pack_threadid (pkt, nextthread);        /* 64 bit thread identifier */
2843   *pkt = '\0';
2844   return pkt;
2845 }
2846
2847 /* Encoding:   'q':8,'M':8,count:16,done:8,argthreadid:64,(threadid:64)* */
2848
2849 static int
2850 parse_threadlist_response (char *pkt, int result_limit,
2851                            threadref *original_echo, threadref *resultlist,
2852                            int *doneflag)
2853 {
2854   struct remote_state *rs = get_remote_state ();
2855   char *limit;
2856   int count, resultcount, done;
2857
2858   resultcount = 0;
2859   /* Assume the 'q' and 'M chars have been stripped.  */
2860   limit = pkt + (rs->buf_size - BUF_THREAD_ID_SIZE);
2861   /* done parse past here */
2862   pkt = unpack_byte (pkt, &count);      /* count field */
2863   pkt = unpack_nibble (pkt, &done);
2864   /* The first threadid is the argument threadid.  */
2865   pkt = unpack_threadid (pkt, original_echo);   /* should match query packet */
2866   while ((count-- > 0) && (pkt < limit))
2867     {
2868       pkt = unpack_threadid (pkt, resultlist++);
2869       if (resultcount++ >= result_limit)
2870         break;
2871     }
2872   if (doneflag)
2873     *doneflag = done;
2874   return resultcount;
2875 }
2876
2877 /* Fetch the next batch of threads from the remote.  Returns -1 if the
2878    qL packet is not supported, 0 on error and 1 on success.  */
2879
2880 static int
2881 remote_get_threadlist (int startflag, threadref *nextthread, int result_limit,
2882                        int *done, int *result_count, threadref *threadlist)
2883 {
2884   struct remote_state *rs = get_remote_state ();
2885   int result = 1;
2886
2887   /* Trancate result limit to be smaller than the packet size.  */
2888   if ((((result_limit + 1) * BUF_THREAD_ID_SIZE) + 10)
2889       >= get_remote_packet_size ())
2890     result_limit = (get_remote_packet_size () / BUF_THREAD_ID_SIZE) - 2;
2891
2892   pack_threadlist_request (rs->buf, startflag, result_limit, nextthread);
2893   putpkt (rs->buf);
2894   getpkt (&rs->buf, &rs->buf_size, 0);
2895   if (*rs->buf == '\0')
2896     {
2897       /* Packet not supported.  */
2898       return -1;
2899     }
2900
2901   *result_count =
2902     parse_threadlist_response (rs->buf + 2, result_limit,
2903                                &rs->echo_nextthread, threadlist, done);
2904
2905   if (!threadmatch (&rs->echo_nextthread, nextthread))
2906     {
2907       /* FIXME: This is a good reason to drop the packet.  */
2908       /* Possably, there is a duplicate response.  */
2909       /* Possabilities :
2910          retransmit immediatly - race conditions
2911          retransmit after timeout - yes
2912          exit
2913          wait for packet, then exit
2914        */
2915       warning (_("HMM: threadlist did not echo arg thread, dropping it."));
2916       return 0;                 /* I choose simply exiting.  */
2917     }
2918   if (*result_count <= 0)
2919     {
2920       if (*done != 1)
2921         {
2922           warning (_("RMT ERROR : failed to get remote thread list."));
2923           result = 0;
2924         }
2925       return result;            /* break; */
2926     }
2927   if (*result_count > result_limit)
2928     {
2929       *result_count = 0;
2930       warning (_("RMT ERROR: threadlist response longer than requested."));
2931       return 0;
2932     }
2933   return result;
2934 }
2935
2936 /* Fetch the list of remote threads, with the qL packet, and call
2937    STEPFUNCTION for each thread found.  Stops iterating and returns 1
2938    if STEPFUNCTION returns true.  Stops iterating and returns 0 if the
2939    STEPFUNCTION returns false.  If the packet is not supported,
2940    returns -1.  */
2941
2942 static int
2943 remote_threadlist_iterator (rmt_thread_action stepfunction, void *context,
2944                             int looplimit)
2945 {
2946   struct remote_state *rs = get_remote_state ();
2947   int done, i, result_count;
2948   int startflag = 1;
2949   int result = 1;
2950   int loopcount = 0;
2951
2952   done = 0;
2953   while (!done)
2954     {
2955       if (loopcount++ > looplimit)
2956         {
2957           result = 0;
2958           warning (_("Remote fetch threadlist -infinite loop-."));
2959           break;
2960         }
2961       result = remote_get_threadlist (startflag, &rs->nextthread,
2962                                       MAXTHREADLISTRESULTS,
2963                                       &done, &result_count,
2964                                       rs->resultthreadlist);
2965       if (result <= 0)
2966         break;
2967       /* Clear for later iterations.  */
2968       startflag = 0;
2969       /* Setup to resume next batch of thread references, set nextthread.  */
2970       if (result_count >= 1)
2971         copy_threadref (&rs->nextthread,
2972                         &rs->resultthreadlist[result_count - 1]);
2973       i = 0;
2974       while (result_count--)
2975         {
2976           if (!(*stepfunction) (&rs->resultthreadlist[i++], context))
2977             {
2978               result = 0;
2979               break;
2980             }
2981         }
2982     }
2983   return result;
2984 }
2985
2986 /* A thread found on the remote target.  */
2987
2988 typedef struct thread_item
2989 {
2990   /* The thread's PTID.  */
2991   ptid_t ptid;
2992
2993   /* The thread's extra info.  May be NULL.  */
2994   char *extra;
2995
2996   /* The thread's name.  May be NULL.  */
2997   char *name;
2998
2999   /* The core the thread was running on.  -1 if not known.  */
3000   int core;
3001
3002   /* The thread handle associated with the thread.  */
3003   gdb::byte_vector *thread_handle;
3004
3005 } thread_item_t;
3006 DEF_VEC_O(thread_item_t);
3007
3008 /* Context passed around to the various methods listing remote
3009    threads.  As new threads are found, they're added to the ITEMS
3010    vector.  */
3011
3012 struct threads_listing_context
3013 {
3014   /* The threads found on the remote target.  */
3015   VEC (thread_item_t) *items;
3016 };
3017
3018 /* Discard the contents of the constructed thread listing context.  */
3019
3020 static void
3021 clear_threads_listing_context (void *p)
3022 {
3023   struct threads_listing_context *context
3024     = (struct threads_listing_context *) p;
3025   int i;
3026   struct thread_item *item;
3027
3028   for (i = 0; VEC_iterate (thread_item_t, context->items, i, item); ++i)
3029     {
3030       xfree (item->extra);
3031       xfree (item->name);
3032       delete item->thread_handle;
3033     }
3034
3035   VEC_free (thread_item_t, context->items);
3036 }
3037
3038 /* Remove the thread specified as the related_pid field of WS
3039    from the CONTEXT list.  */
3040
3041 static void
3042 threads_listing_context_remove (struct target_waitstatus *ws,
3043                                 struct threads_listing_context *context)
3044 {
3045   struct thread_item *item;
3046   int i;
3047   ptid_t child_ptid = ws->value.related_pid;
3048
3049   for (i = 0; VEC_iterate (thread_item_t, context->items, i, item); ++i)
3050     {
3051       if (ptid_equal (item->ptid, child_ptid))
3052         {
3053           VEC_ordered_remove (thread_item_t, context->items, i);
3054           break;
3055         }
3056     }
3057 }
3058
3059 static int
3060 remote_newthread_step (threadref *ref, void *data)
3061 {
3062   struct threads_listing_context *context
3063     = (struct threads_listing_context *) data;
3064   struct thread_item item;
3065   int pid = ptid_get_pid (inferior_ptid);
3066
3067   item.ptid = ptid_build (pid, threadref_to_int (ref), 0);
3068   item.core = -1;
3069   item.name = NULL;
3070   item.extra = NULL;
3071   item.thread_handle = nullptr;
3072
3073   VEC_safe_push (thread_item_t, context->items, &item);
3074
3075   return 1;                     /* continue iterator */
3076 }
3077
3078 #define CRAZY_MAX_THREADS 1000
3079
3080 static ptid_t
3081 remote_current_thread (ptid_t oldpid)
3082 {
3083   struct remote_state *rs = get_remote_state ();
3084
3085   putpkt ("qC");
3086   getpkt (&rs->buf, &rs->buf_size, 0);
3087   if (rs->buf[0] == 'Q' && rs->buf[1] == 'C')
3088     {
3089       const char *obuf;
3090       ptid_t result;
3091
3092       result = read_ptid (&rs->buf[2], &obuf);
3093       if (*obuf != '\0' && remote_debug)
3094         fprintf_unfiltered (gdb_stdlog,
3095                             "warning: garbage in qC reply\n");
3096
3097       return result;
3098     }
3099   else
3100     return oldpid;
3101 }
3102
3103 /* List remote threads using the deprecated qL packet.  */
3104
3105 static int
3106 remote_get_threads_with_ql (struct target_ops *ops,
3107                             struct threads_listing_context *context)
3108 {
3109   if (remote_threadlist_iterator (remote_newthread_step, context,
3110                                   CRAZY_MAX_THREADS) >= 0)
3111     return 1;
3112
3113   return 0;
3114 }
3115
3116 #if defined(HAVE_LIBEXPAT)
3117
3118 static void
3119 start_thread (struct gdb_xml_parser *parser,
3120               const struct gdb_xml_element *element,
3121               void *user_data, VEC(gdb_xml_value_s) *attributes)
3122 {
3123   struct threads_listing_context *data
3124     = (struct threads_listing_context *) user_data;
3125
3126   struct thread_item item;
3127   char *id;
3128   struct gdb_xml_value *attr;
3129
3130   id = (char *) xml_find_attribute (attributes, "id")->value;
3131   item.ptid = read_ptid (id, NULL);
3132
3133   attr = xml_find_attribute (attributes, "core");
3134   if (attr != NULL)
3135     item.core = *(ULONGEST *) attr->value;
3136   else
3137     item.core = -1;
3138
3139   attr = xml_find_attribute (attributes, "name");
3140   item.name = attr != NULL ? xstrdup ((const char *) attr->value) : NULL;
3141
3142   attr = xml_find_attribute (attributes, "handle");
3143   if (attr != NULL)
3144     {
3145       item.thread_handle = new gdb::byte_vector
3146                              (strlen ((const char *) attr->value) / 2);
3147       hex2bin ((const char *) attr->value, item.thread_handle->data (),
3148                item.thread_handle->size ());
3149     }
3150   else
3151     item.thread_handle = nullptr;
3152
3153   item.extra = 0;
3154
3155   VEC_safe_push (thread_item_t, data->items, &item);
3156 }
3157
3158 static void
3159 end_thread (struct gdb_xml_parser *parser,
3160             const struct gdb_xml_element *element,
3161             void *user_data, const char *body_text)
3162 {
3163   struct threads_listing_context *data
3164     = (struct threads_listing_context *) user_data;
3165
3166   if (body_text && *body_text)
3167     VEC_last (thread_item_t, data->items)->extra = xstrdup (body_text);
3168 }
3169
3170 const struct gdb_xml_attribute thread_attributes[] = {
3171   { "id", GDB_XML_AF_NONE, NULL, NULL },
3172   { "core", GDB_XML_AF_OPTIONAL, gdb_xml_parse_attr_ulongest, NULL },
3173   { "name", GDB_XML_AF_OPTIONAL, NULL, NULL },
3174   { "handle", GDB_XML_AF_OPTIONAL, NULL, NULL },
3175   { NULL, GDB_XML_AF_NONE, NULL, NULL }
3176 };
3177
3178 const struct gdb_xml_element thread_children[] = {
3179   { NULL, NULL, NULL, GDB_XML_EF_NONE, NULL, NULL }
3180 };
3181
3182 const struct gdb_xml_element threads_children[] = {
3183   { "thread", thread_attributes, thread_children,
3184     GDB_XML_EF_REPEATABLE | GDB_XML_EF_OPTIONAL,
3185     start_thread, end_thread },
3186   { NULL, NULL, NULL, GDB_XML_EF_NONE, NULL, NULL }
3187 };
3188
3189 const struct gdb_xml_element threads_elements[] = {
3190   { "threads", NULL, threads_children,
3191     GDB_XML_EF_NONE, NULL, NULL },
3192   { NULL, NULL, NULL, GDB_XML_EF_NONE, NULL, NULL }
3193 };
3194
3195 #endif
3196
3197 /* List remote threads using qXfer:threads:read.  */
3198
3199 static int
3200 remote_get_threads_with_qxfer (struct target_ops *ops,
3201                                struct threads_listing_context *context)
3202 {
3203 #if defined(HAVE_LIBEXPAT)
3204   if (packet_support (PACKET_qXfer_threads) == PACKET_ENABLE)
3205     {
3206       gdb::unique_xmalloc_ptr<char> xml
3207         = target_read_stralloc (ops, TARGET_OBJECT_THREADS, NULL);
3208
3209       if (xml != NULL && *xml != '\0')
3210         {
3211           gdb_xml_parse_quick (_("threads"), "threads.dtd",
3212                                threads_elements, xml.get (), context);
3213         }
3214
3215       return 1;
3216     }
3217 #endif
3218
3219   return 0;
3220 }
3221
3222 /* List remote threads using qfThreadInfo/qsThreadInfo.  */
3223
3224 static int
3225 remote_get_threads_with_qthreadinfo (struct target_ops *ops,
3226                                      struct threads_listing_context *context)
3227 {
3228   struct remote_state *rs = get_remote_state ();
3229
3230   if (rs->use_threadinfo_query)
3231     {
3232       const char *bufp;
3233
3234       putpkt ("qfThreadInfo");
3235       getpkt (&rs->buf, &rs->buf_size, 0);
3236       bufp = rs->buf;
3237       if (bufp[0] != '\0')              /* q packet recognized */
3238         {
3239           while (*bufp++ == 'm')        /* reply contains one or more TID */
3240             {
3241               do
3242                 {
3243                   struct thread_item item;
3244
3245                   item.ptid = read_ptid (bufp, &bufp);
3246                   item.core = -1;
3247                   item.name = NULL;
3248                   item.extra = NULL;
3249                   item.thread_handle = nullptr;
3250
3251                   VEC_safe_push (thread_item_t, context->items, &item);
3252                 }
3253               while (*bufp++ == ',');   /* comma-separated list */
3254               putpkt ("qsThreadInfo");
3255               getpkt (&rs->buf, &rs->buf_size, 0);
3256               bufp = rs->buf;
3257             }
3258           return 1;
3259         }
3260       else
3261         {
3262           /* Packet not recognized.  */
3263           rs->use_threadinfo_query = 0;
3264         }
3265     }
3266
3267   return 0;
3268 }
3269
3270 /* Implement the to_update_thread_list function for the remote
3271    targets.  */
3272
3273 static void
3274 remote_update_thread_list (struct target_ops *ops)
3275 {
3276   struct threads_listing_context context;
3277   struct cleanup *old_chain;
3278   int got_list = 0;
3279
3280   context.items = NULL;
3281   old_chain = make_cleanup (clear_threads_listing_context, &context);
3282
3283   /* We have a few different mechanisms to fetch the thread list.  Try
3284      them all, starting with the most preferred one first, falling
3285      back to older methods.  */
3286   if (remote_get_threads_with_qxfer (ops, &context)
3287       || remote_get_threads_with_qthreadinfo (ops, &context)
3288       || remote_get_threads_with_ql (ops, &context))
3289     {
3290       int i;
3291       struct thread_item *item;
3292       struct thread_info *tp, *tmp;
3293
3294       got_list = 1;
3295
3296       if (VEC_empty (thread_item_t, context.items)
3297           && remote_thread_always_alive (ops, inferior_ptid))
3298         {
3299           /* Some targets don't really support threads, but still
3300              reply an (empty) thread list in response to the thread
3301              listing packets, instead of replying "packet not
3302              supported".  Exit early so we don't delete the main
3303              thread.  */
3304           do_cleanups (old_chain);
3305           return;
3306         }
3307
3308       /* CONTEXT now holds the current thread list on the remote
3309          target end.  Delete GDB-side threads no longer found on the
3310          target.  */
3311       ALL_THREADS_SAFE (tp, tmp)
3312         {
3313           for (i = 0;
3314                VEC_iterate (thread_item_t, context.items, i, item);
3315                ++i)
3316             {
3317               if (ptid_equal (item->ptid, tp->ptid))
3318                 break;
3319             }
3320
3321           if (i == VEC_length (thread_item_t, context.items))
3322             {
3323               /* Not found.  */
3324               delete_thread (tp->ptid);
3325             }
3326         }
3327
3328       /* Remove any unreported fork child threads from CONTEXT so
3329          that we don't interfere with follow fork, which is where
3330          creation of such threads is handled.  */
3331       remove_new_fork_children (&context);
3332
3333       /* And now add threads we don't know about yet to our list.  */
3334       for (i = 0;
3335            VEC_iterate (thread_item_t, context.items, i, item);
3336            ++i)
3337         {
3338           if (!ptid_equal (item->ptid, null_ptid))
3339             {
3340               struct private_thread_info *info;
3341               /* In non-stop mode, we assume new found threads are
3342                  executing until proven otherwise with a stop reply.
3343                  In all-stop, we can only get here if all threads are
3344                  stopped.  */
3345               int executing = target_is_non_stop_p () ? 1 : 0;
3346
3347               remote_notice_new_inferior (item->ptid, executing);
3348
3349               info = get_private_info_ptid (item->ptid);
3350               info->core = item->core;
3351               info->extra = item->extra;
3352               item->extra = NULL;
3353               info->name = item->name;
3354               item->name = NULL;
3355               info->thread_handle = item->thread_handle;
3356               item->thread_handle = nullptr;
3357             }
3358         }
3359     }
3360
3361   if (!got_list)
3362     {
3363       /* If no thread listing method is supported, then query whether
3364          each known thread is alive, one by one, with the T packet.
3365          If the target doesn't support threads at all, then this is a
3366          no-op.  See remote_thread_alive.  */
3367       prune_threads ();
3368     }
3369
3370   do_cleanups (old_chain);
3371 }
3372
3373 /*
3374  * Collect a descriptive string about the given thread.
3375  * The target may say anything it wants to about the thread
3376  * (typically info about its blocked / runnable state, name, etc.).
3377  * This string will appear in the info threads display.
3378  *
3379  * Optional: targets are not required to implement this function.
3380  */
3381
3382 static const char *
3383 remote_threads_extra_info (struct target_ops *self, struct thread_info *tp)
3384 {
3385   struct remote_state *rs = get_remote_state ();
3386   int result;
3387   int set;
3388   threadref id;
3389   struct gdb_ext_thread_info threadinfo;
3390   static char display_buf[100]; /* arbitrary...  */
3391   int n = 0;                    /* position in display_buf */
3392
3393   if (rs->remote_desc == 0)             /* paranoia */
3394     internal_error (__FILE__, __LINE__,
3395                     _("remote_threads_extra_info"));
3396
3397   if (ptid_equal (tp->ptid, magic_null_ptid)
3398       || (ptid_get_pid (tp->ptid) != 0 && ptid_get_lwp (tp->ptid) == 0))
3399     /* This is the main thread which was added by GDB.  The remote
3400        server doesn't know about it.  */
3401     return NULL;
3402
3403   if (packet_support (PACKET_qXfer_threads) == PACKET_ENABLE)
3404     {
3405       struct thread_info *info = find_thread_ptid (tp->ptid);
3406
3407       if (info && info->priv)
3408         return info->priv->extra;
3409       else
3410         return NULL;
3411     }
3412
3413   if (rs->use_threadextra_query)
3414     {
3415       char *b = rs->buf;
3416       char *endb = rs->buf + get_remote_packet_size ();
3417
3418       xsnprintf (b, endb - b, "qThreadExtraInfo,");
3419       b += strlen (b);
3420       write_ptid (b, endb, tp->ptid);
3421
3422       putpkt (rs->buf);
3423       getpkt (&rs->buf, &rs->buf_size, 0);
3424       if (rs->buf[0] != 0)
3425         {
3426           n = std::min (strlen (rs->buf) / 2, sizeof (display_buf));
3427           result = hex2bin (rs->buf, (gdb_byte *) display_buf, n);
3428           display_buf [result] = '\0';
3429           return display_buf;
3430         }
3431     }
3432
3433   /* If the above query fails, fall back to the old method.  */
3434   rs->use_threadextra_query = 0;
3435   set = TAG_THREADID | TAG_EXISTS | TAG_THREADNAME
3436     | TAG_MOREDISPLAY | TAG_DISPLAY;
3437   int_to_threadref (&id, ptid_get_lwp (tp->ptid));
3438   if (remote_get_threadinfo (&id, set, &threadinfo))
3439     if (threadinfo.active)
3440       {
3441         if (*threadinfo.shortname)
3442           n += xsnprintf (&display_buf[0], sizeof (display_buf) - n,
3443                           " Name: %s,", threadinfo.shortname);
3444         if (*threadinfo.display)
3445           n += xsnprintf (&display_buf[n], sizeof (display_buf) - n,
3446                           " State: %s,", threadinfo.display);
3447         if (*threadinfo.more_display)
3448           n += xsnprintf (&display_buf[n], sizeof (display_buf) - n,
3449                           " Priority: %s", threadinfo.more_display);
3450
3451         if (n > 0)
3452           {
3453             /* For purely cosmetic reasons, clear up trailing commas.  */
3454             if (',' == display_buf[n-1])
3455               display_buf[n-1] = ' ';
3456             return display_buf;
3457           }
3458       }
3459   return NULL;
3460 }
3461 \f
3462
3463 static int
3464 remote_static_tracepoint_marker_at (struct target_ops *self, CORE_ADDR addr,
3465                                     struct static_tracepoint_marker *marker)
3466 {
3467   struct remote_state *rs = get_remote_state ();
3468   char *p = rs->buf;
3469
3470   xsnprintf (p, get_remote_packet_size (), "qTSTMat:");
3471   p += strlen (p);
3472   p += hexnumstr (p, addr);
3473   putpkt (rs->buf);
3474   getpkt (&rs->buf, &rs->buf_size, 0);
3475   p = rs->buf;
3476
3477   if (*p == 'E')
3478     error (_("Remote failure reply: %s"), p);
3479
3480   if (*p++ == 'm')
3481     {
3482       parse_static_tracepoint_marker_definition (p, NULL, marker);
3483       return 1;
3484     }
3485
3486   return 0;
3487 }
3488
3489 static VEC(static_tracepoint_marker_p) *
3490 remote_static_tracepoint_markers_by_strid (struct target_ops *self,
3491                                            const char *strid)
3492 {
3493   struct remote_state *rs = get_remote_state ();
3494   VEC(static_tracepoint_marker_p) *markers = NULL;
3495   struct static_tracepoint_marker *marker = NULL;
3496   struct cleanup *old_chain;
3497   const char *p;
3498
3499   /* Ask for a first packet of static tracepoint marker
3500      definition.  */
3501   putpkt ("qTfSTM");
3502   getpkt (&rs->buf, &rs->buf_size, 0);
3503   p = rs->buf;
3504   if (*p == 'E')
3505     error (_("Remote failure reply: %s"), p);
3506
3507   old_chain = make_cleanup (free_current_marker, &marker);
3508
3509   while (*p++ == 'm')
3510     {
3511       if (marker == NULL)
3512         marker = XCNEW (struct static_tracepoint_marker);
3513
3514       do
3515         {
3516           parse_static_tracepoint_marker_definition (p, &p, marker);
3517
3518           if (strid == NULL || strcmp (strid, marker->str_id) == 0)
3519             {
3520               VEC_safe_push (static_tracepoint_marker_p,
3521                              markers, marker);
3522               marker = NULL;
3523             }
3524           else
3525             {
3526               release_static_tracepoint_marker (marker);
3527               memset (marker, 0, sizeof (*marker));
3528             }
3529         }
3530       while (*p++ == ',');      /* comma-separated list */
3531       /* Ask for another packet of static tracepoint definition.  */
3532       putpkt ("qTsSTM");
3533       getpkt (&rs->buf, &rs->buf_size, 0);
3534       p = rs->buf;
3535     }
3536
3537   do_cleanups (old_chain);
3538   return markers;
3539 }
3540
3541 \f
3542 /* Implement the to_get_ada_task_ptid function for the remote targets.  */
3543
3544 static ptid_t
3545 remote_get_ada_task_ptid (struct target_ops *self, long lwp, long thread)
3546 {
3547   return ptid_build (ptid_get_pid (inferior_ptid), lwp, 0);
3548 }
3549 \f
3550
3551 /* Restart the remote side; this is an extended protocol operation.  */
3552
3553 static void
3554 extended_remote_restart (void)
3555 {
3556   struct remote_state *rs = get_remote_state ();
3557
3558   /* Send the restart command; for reasons I don't understand the
3559      remote side really expects a number after the "R".  */
3560   xsnprintf (rs->buf, get_remote_packet_size (), "R%x", 0);
3561   putpkt (rs->buf);
3562
3563   remote_fileio_reset ();
3564 }
3565 \f
3566 /* Clean up connection to a remote debugger.  */
3567
3568 static void
3569 remote_close (struct target_ops *self)
3570 {
3571   struct remote_state *rs = get_remote_state ();
3572
3573   if (rs->remote_desc == NULL)
3574     return; /* already closed */
3575
3576   /* Make sure we leave stdin registered in the event loop.  */
3577   remote_terminal_ours (self);
3578
3579   serial_close (rs->remote_desc);
3580   rs->remote_desc = NULL;
3581
3582   /* We don't have a connection to the remote stub anymore.  Get rid
3583      of all the inferiors and their threads we were controlling.
3584      Reset inferior_ptid to null_ptid first, as otherwise has_stack_frame
3585      will be unable to find the thread corresponding to (pid, 0, 0).  */
3586   inferior_ptid = null_ptid;
3587   discard_all_inferiors ();
3588
3589   /* We are closing the remote target, so we should discard
3590      everything of this target.  */
3591   discard_pending_stop_replies_in_queue (rs);
3592
3593   if (remote_async_inferior_event_token)
3594     delete_async_event_handler (&remote_async_inferior_event_token);
3595
3596   remote_notif_state_xfree (rs->notif_state);
3597
3598   trace_reset_local_state ();
3599 }
3600
3601 /* Query the remote side for the text, data and bss offsets.  */
3602
3603 static void
3604 get_offsets (void)
3605 {
3606   struct remote_state *rs = get_remote_state ();
3607   char *buf;
3608   char *ptr;
3609   int lose, num_segments = 0, do_sections, do_segments;
3610   CORE_ADDR text_addr, data_addr, bss_addr, segments[2];
3611   struct section_offsets *offs;
3612   struct symfile_segment_data *data;
3613
3614   if (symfile_objfile == NULL)
3615     return;
3616
3617   putpkt ("qOffsets");
3618   getpkt (&rs->buf, &rs->buf_size, 0);
3619   buf = rs->buf;
3620
3621   if (buf[0] == '\000')
3622     return;                     /* Return silently.  Stub doesn't support
3623                                    this command.  */
3624   if (buf[0] == 'E')
3625     {
3626       warning (_("Remote failure reply: %s"), buf);
3627       return;
3628     }
3629
3630   /* Pick up each field in turn.  This used to be done with scanf, but
3631      scanf will make trouble if CORE_ADDR size doesn't match
3632      conversion directives correctly.  The following code will work
3633      with any size of CORE_ADDR.  */
3634   text_addr = data_addr = bss_addr = 0;
3635   ptr = buf;
3636   lose = 0;
3637
3638   if (startswith (ptr, "Text="))
3639     {
3640       ptr += 5;
3641       /* Don't use strtol, could lose on big values.  */
3642       while (*ptr && *ptr != ';')
3643         text_addr = (text_addr << 4) + fromhex (*ptr++);
3644
3645       if (startswith (ptr, ";Data="))
3646         {
3647           ptr += 6;
3648           while (*ptr && *ptr != ';')
3649             data_addr = (data_addr << 4) + fromhex (*ptr++);
3650         }
3651       else
3652         lose = 1;
3653
3654       if (!lose && startswith (ptr, ";Bss="))
3655         {
3656           ptr += 5;
3657           while (*ptr && *ptr != ';')
3658             bss_addr = (bss_addr << 4) + fromhex (*ptr++);
3659
3660           if (bss_addr != data_addr)
3661             warning (_("Target reported unsupported offsets: %s"), buf);
3662         }
3663       else
3664         lose = 1;
3665     }
3666   else if (startswith (ptr, "TextSeg="))
3667     {
3668       ptr += 8;
3669       /* Don't use strtol, could lose on big values.  */
3670       while (*ptr && *ptr != ';')
3671         text_addr = (text_addr << 4) + fromhex (*ptr++);
3672       num_segments = 1;
3673
3674       if (startswith (ptr, ";DataSeg="))
3675         {
3676           ptr += 9;
3677           while (*ptr && *ptr != ';')
3678             data_addr = (data_addr << 4) + fromhex (*ptr++);
3679           num_segments++;
3680         }
3681     }
3682   else
3683     lose = 1;
3684
3685   if (lose)
3686     error (_("Malformed response to offset query, %s"), buf);
3687   else if (*ptr != '\0')
3688     warning (_("Target reported unsupported offsets: %s"), buf);
3689
3690   offs = ((struct section_offsets *)
3691           alloca (SIZEOF_N_SECTION_OFFSETS (symfile_objfile->num_sections)));
3692   memcpy (offs, symfile_objfile->section_offsets,
3693           SIZEOF_N_SECTION_OFFSETS (symfile_objfile->num_sections));
3694
3695   data = get_symfile_segment_data (symfile_objfile->obfd);
3696   do_segments = (data != NULL);
3697   do_sections = num_segments == 0;
3698
3699   if (num_segments > 0)
3700     {
3701       segments[0] = text_addr;
3702       segments[1] = data_addr;
3703     }
3704   /* If we have two segments, we can still try to relocate everything
3705      by assuming that the .text and .data offsets apply to the whole
3706      text and data segments.  Convert the offsets given in the packet
3707      to base addresses for symfile_map_offsets_to_segments.  */
3708   else if (data && data->num_segments == 2)
3709     {
3710       segments[0] = data->segment_bases[0] + text_addr;
3711       segments[1] = data->segment_bases[1] + data_addr;
3712       num_segments = 2;
3713     }
3714   /* If the object file has only one segment, assume that it is text
3715      rather than data; main programs with no writable data are rare,
3716      but programs with no code are useless.  Of course the code might
3717      have ended up in the data segment... to detect that we would need
3718      the permissions here.  */
3719   else if (data && data->num_segments == 1)
3720     {
3721       segments[0] = data->segment_bases[0] + text_addr;
3722       num_segments = 1;
3723     }
3724   /* There's no way to relocate by segment.  */
3725   else
3726     do_segments = 0;
3727
3728   if (do_segments)
3729     {
3730       int ret = symfile_map_offsets_to_segments (symfile_objfile->obfd, data,
3731                                                  offs, num_segments, segments);
3732
3733       if (ret == 0 && !do_sections)
3734         error (_("Can not handle qOffsets TextSeg "
3735                  "response with this symbol file"));
3736
3737       if (ret > 0)
3738         do_sections = 0;
3739     }
3740
3741   if (data)
3742     free_symfile_segment_data (data);
3743
3744   if (do_sections)
3745     {
3746       offs->offsets[SECT_OFF_TEXT (symfile_objfile)] = text_addr;
3747
3748       /* This is a temporary kludge to force data and bss to use the
3749          same offsets because that's what nlmconv does now.  The real
3750          solution requires changes to the stub and remote.c that I
3751          don't have time to do right now.  */
3752
3753       offs->offsets[SECT_OFF_DATA (symfile_objfile)] = data_addr;
3754       offs->offsets[SECT_OFF_BSS (symfile_objfile)] = data_addr;
3755     }
3756
3757   objfile_relocate (symfile_objfile, offs);
3758 }
3759
3760 /* Send interrupt_sequence to remote target.  */
3761 static void
3762 send_interrupt_sequence (void)
3763 {
3764   struct remote_state *rs = get_remote_state ();
3765
3766   if (interrupt_sequence_mode == interrupt_sequence_control_c)
3767     remote_serial_write ("\x03", 1);
3768   else if (interrupt_sequence_mode == interrupt_sequence_break)
3769     serial_send_break (rs->remote_desc);
3770   else if (interrupt_sequence_mode == interrupt_sequence_break_g)
3771     {
3772       serial_send_break (rs->remote_desc);
3773       remote_serial_write ("g", 1);
3774     }
3775   else
3776     internal_error (__FILE__, __LINE__,
3777                     _("Invalid value for interrupt_sequence_mode: %s."),
3778                     interrupt_sequence_mode);
3779 }
3780
3781
3782 /* If STOP_REPLY is a T stop reply, look for the "thread" register,
3783    and extract the PTID.  Returns NULL_PTID if not found.  */
3784
3785 static ptid_t
3786 stop_reply_extract_thread (char *stop_reply)
3787 {
3788   if (stop_reply[0] == 'T' && strlen (stop_reply) > 3)
3789     {
3790       const char *p;
3791
3792       /* Txx r:val ; r:val (...)  */
3793       p = &stop_reply[3];
3794
3795       /* Look for "register" named "thread".  */
3796       while (*p != '\0')
3797         {
3798           const char *p1;
3799
3800           p1 = strchr (p, ':');
3801           if (p1 == NULL)
3802             return null_ptid;
3803
3804           if (strncmp (p, "thread", p1 - p) == 0)
3805             return read_ptid (++p1, &p);
3806
3807           p1 = strchr (p, ';');
3808           if (p1 == NULL)
3809             return null_ptid;
3810           p1++;
3811
3812           p = p1;
3813         }
3814     }
3815
3816   return null_ptid;
3817 }
3818
3819 /* Determine the remote side's current thread.  If we have a stop
3820    reply handy (in WAIT_STATUS), maybe it's a T stop reply with a
3821    "thread" register we can extract the current thread from.  If not,
3822    ask the remote which is the current thread with qC.  The former
3823    method avoids a roundtrip.  */
3824
3825 static ptid_t
3826 get_current_thread (char *wait_status)
3827 {
3828   ptid_t ptid = null_ptid;
3829
3830   /* Note we don't use remote_parse_stop_reply as that makes use of
3831      the target architecture, which we haven't yet fully determined at
3832      this point.  */
3833   if (wait_status != NULL)
3834     ptid = stop_reply_extract_thread (wait_status);
3835   if (ptid_equal (ptid, null_ptid))
3836     ptid = remote_current_thread (inferior_ptid);
3837
3838   return ptid;
3839 }
3840
3841 /* Query the remote target for which is the current thread/process,
3842    add it to our tables, and update INFERIOR_PTID.  The caller is
3843    responsible for setting the state such that the remote end is ready
3844    to return the current thread.
3845
3846    This function is called after handling the '?' or 'vRun' packets,
3847    whose response is a stop reply from which we can also try
3848    extracting the thread.  If the target doesn't support the explicit
3849    qC query, we infer the current thread from that stop reply, passed
3850    in in WAIT_STATUS, which may be NULL.  */
3851
3852 static void
3853 add_current_inferior_and_thread (char *wait_status)
3854 {
3855   struct remote_state *rs = get_remote_state ();
3856   int fake_pid_p = 0;
3857
3858   inferior_ptid = null_ptid;
3859
3860   /* Now, if we have thread information, update inferior_ptid.  */
3861   ptid_t curr_ptid = get_current_thread (wait_status);
3862
3863   if (curr_ptid != null_ptid)
3864     {
3865       if (!remote_multi_process_p (rs))
3866         fake_pid_p = 1;
3867     }
3868   else
3869     {
3870       /* Without this, some commands which require an active target
3871          (such as kill) won't work.  This variable serves (at least)
3872          double duty as both the pid of the target process (if it has
3873          such), and as a flag indicating that a target is active.  */
3874       curr_ptid = magic_null_ptid;
3875       fake_pid_p = 1;
3876     }
3877
3878   remote_add_inferior (fake_pid_p, ptid_get_pid (curr_ptid), -1, 1);
3879
3880   /* Add the main thread and switch to it.  Don't try reading
3881      registers yet, since we haven't fetched the target description
3882      yet.  */
3883   thread_info *tp = add_thread_silent (curr_ptid);
3884   switch_to_thread_no_regs (tp);
3885 }
3886
3887 /* Print info about a thread that was found already stopped on
3888    connection.  */
3889
3890 static void
3891 print_one_stopped_thread (struct thread_info *thread)
3892 {
3893   struct target_waitstatus *ws = &thread->suspend.waitstatus;
3894
3895   switch_to_thread (thread->ptid);
3896   stop_pc = get_frame_pc (get_current_frame ());
3897   set_current_sal_from_frame (get_current_frame ());
3898
3899   thread->suspend.waitstatus_pending_p = 0;
3900
3901   if (ws->kind == TARGET_WAITKIND_STOPPED)
3902     {
3903       enum gdb_signal sig = ws->value.sig;
3904
3905       if (signal_print_state (sig))
3906         observer_notify_signal_received (sig);
3907     }
3908   observer_notify_normal_stop (NULL, 1);
3909 }
3910
3911 /* Process all initial stop replies the remote side sent in response
3912    to the ? packet.  These indicate threads that were already stopped
3913    on initial connection.  We mark these threads as stopped and print
3914    their current frame before giving the user the prompt.  */
3915
3916 static void
3917 process_initial_stop_replies (int from_tty)
3918 {
3919   int pending_stop_replies = stop_reply_queue_length ();
3920   struct inferior *inf;
3921   struct thread_info *thread;
3922   struct thread_info *selected = NULL;
3923   struct thread_info *lowest_stopped = NULL;
3924   struct thread_info *first = NULL;
3925
3926   /* Consume the initial pending events.  */
3927   while (pending_stop_replies-- > 0)
3928     {
3929       ptid_t waiton_ptid = minus_one_ptid;
3930       ptid_t event_ptid;
3931       struct target_waitstatus ws;
3932       int ignore_event = 0;
3933       struct thread_info *thread;
3934
3935       memset (&ws, 0, sizeof (ws));
3936       event_ptid = target_wait (waiton_ptid, &ws, TARGET_WNOHANG);
3937       if (remote_debug)
3938         print_target_wait_results (waiton_ptid, event_ptid, &ws);
3939
3940       switch (ws.kind)
3941         {
3942         case TARGET_WAITKIND_IGNORE:
3943         case TARGET_WAITKIND_NO_RESUMED:
3944         case TARGET_WAITKIND_SIGNALLED:
3945         case TARGET_WAITKIND_EXITED:
3946           /* We shouldn't see these, but if we do, just ignore.  */
3947           if (remote_debug)
3948             fprintf_unfiltered (gdb_stdlog, "remote: event ignored\n");
3949           ignore_event = 1;
3950           break;
3951
3952         case TARGET_WAITKIND_EXECD:
3953           xfree (ws.value.execd_pathname);
3954           break;
3955         default:
3956           break;
3957         }
3958
3959       if (ignore_event)
3960         continue;
3961
3962       thread = find_thread_ptid (event_ptid);
3963
3964       if (ws.kind == TARGET_WAITKIND_STOPPED)
3965         {
3966           enum gdb_signal sig = ws.value.sig;
3967
3968           /* Stubs traditionally report SIGTRAP as initial signal,
3969              instead of signal 0.  Suppress it.  */
3970           if (sig == GDB_SIGNAL_TRAP)
3971             sig = GDB_SIGNAL_0;
3972           thread->suspend.stop_signal = sig;
3973           ws.value.sig = sig;
3974         }
3975
3976       thread->suspend.waitstatus = ws;
3977
3978       if (ws.kind != TARGET_WAITKIND_STOPPED
3979           || ws.value.sig != GDB_SIGNAL_0)
3980         thread->suspend.waitstatus_pending_p = 1;
3981
3982       set_executing (event_ptid, 0);
3983       set_running (event_ptid, 0);
3984       thread->priv->vcont_resumed = 0;
3985     }
3986
3987   /* "Notice" the new inferiors before anything related to
3988      registers/memory.  */
3989   ALL_INFERIORS (inf)
3990     {
3991       if (inf->pid == 0)
3992         continue;
3993
3994       inf->needs_setup = 1;
3995
3996       if (non_stop)
3997         {
3998           thread = any_live_thread_of_process (inf->pid);
3999           notice_new_inferior (thread->ptid,
4000                                thread->state == THREAD_RUNNING,
4001                                from_tty);
4002         }
4003     }
4004
4005   /* If all-stop on top of non-stop, pause all threads.  Note this
4006      records the threads' stop pc, so must be done after "noticing"
4007      the inferiors.  */
4008   if (!non_stop)
4009     {
4010       stop_all_threads ();
4011
4012       /* If all threads of an inferior were already stopped, we
4013          haven't setup the inferior yet.  */
4014       ALL_INFERIORS (inf)
4015         {
4016           if (inf->pid == 0)
4017             continue;
4018
4019           if (inf->needs_setup)
4020             {
4021               thread = any_live_thread_of_process (inf->pid);
4022               switch_to_thread_no_regs (thread);
4023               setup_inferior (0);
4024             }
4025         }
4026     }
4027
4028   /* Now go over all threads that are stopped, and print their current
4029      frame.  If all-stop, then if there's a signalled thread, pick
4030      that as current.  */
4031   ALL_NON_EXITED_THREADS (thread)
4032     {
4033       if (first == NULL)
4034         first = thread;
4035
4036       if (!non_stop)
4037         set_running (thread->ptid, 0);
4038       else if (thread->state != THREAD_STOPPED)
4039         continue;
4040
4041       if (selected == NULL
4042           && thread->suspend.waitstatus_pending_p)
4043         selected = thread;
4044
4045       if (lowest_stopped == NULL
4046           || thread->inf->num < lowest_stopped->inf->num
4047           || thread->per_inf_num < lowest_stopped->per_inf_num)
4048         lowest_stopped = thread;
4049
4050       if (non_stop)
4051         print_one_stopped_thread (thread);
4052     }
4053
4054   /* In all-stop, we only print the status of one thread, and leave
4055      others with their status pending.  */
4056   if (!non_stop)
4057     {
4058       thread = selected;
4059       if (thread == NULL)
4060         thread = lowest_stopped;
4061       if (thread == NULL)
4062         thread = first;
4063
4064       print_one_stopped_thread (thread);
4065     }
4066
4067   /* For "info program".  */
4068   thread = inferior_thread ();
4069   if (thread->state == THREAD_STOPPED)
4070     set_last_target_status (inferior_ptid, thread->suspend.waitstatus);
4071 }
4072
4073 /* Start the remote connection and sync state.  */
4074
4075 static void
4076 remote_start_remote (int from_tty, struct target_ops *target, int extended_p)
4077 {
4078   struct remote_state *rs = get_remote_state ();
4079   struct packet_config *noack_config;
4080   char *wait_status = NULL;
4081
4082   /* Signal other parts that we're going through the initial setup,
4083      and so things may not be stable yet.  E.g., we don't try to
4084      install tracepoints until we've relocated symbols.  Also, a
4085      Ctrl-C before we're connected and synced up can't interrupt the
4086      target.  Instead, it offers to drop the (potentially wedged)
4087      connection.  */
4088   rs->starting_up = 1;
4089
4090   QUIT;
4091
4092   if (interrupt_on_connect)
4093     send_interrupt_sequence ();
4094
4095   /* Ack any packet which the remote side has already sent.  */
4096   remote_serial_write ("+", 1);
4097
4098   /* The first packet we send to the target is the optional "supported
4099      packets" request.  If the target can answer this, it will tell us
4100      which later probes to skip.  */
4101   remote_query_supported ();
4102
4103   /* If the stub wants to get a QAllow, compose one and send it.  */
4104   if (packet_support (PACKET_QAllow) != PACKET_DISABLE)
4105     remote_set_permissions (target);
4106
4107   /* gdbserver < 7.7 (before its fix from 2013-12-11) did reply to any
4108      unknown 'v' packet with string "OK".  "OK" gets interpreted by GDB
4109      as a reply to known packet.  For packet "vFile:setfs:" it is an
4110      invalid reply and GDB would return error in
4111      remote_hostio_set_filesystem, making remote files access impossible.
4112      Disable "vFile:setfs:" in such case.  Do not disable other 'v' packets as
4113      other "vFile" packets get correctly detected even on gdbserver < 7.7.  */
4114   {
4115     const char v_mustreplyempty[] = "vMustReplyEmpty";
4116
4117     putpkt (v_mustreplyempty);
4118     getpkt (&rs->buf, &rs->buf_size, 0);
4119     if (strcmp (rs->buf, "OK") == 0)
4120       remote_protocol_packets[PACKET_vFile_setfs].support = PACKET_DISABLE;
4121     else if (strcmp (rs->buf, "") != 0)
4122       error (_("Remote replied unexpectedly to '%s': %s"), v_mustreplyempty,
4123              rs->buf);
4124   }
4125
4126   /* Next, we possibly activate noack mode.
4127
4128      If the QStartNoAckMode packet configuration is set to AUTO,
4129      enable noack mode if the stub reported a wish for it with
4130      qSupported.
4131
4132      If set to TRUE, then enable noack mode even if the stub didn't
4133      report it in qSupported.  If the stub doesn't reply OK, the
4134      session ends with an error.
4135
4136      If FALSE, then don't activate noack mode, regardless of what the
4137      stub claimed should be the default with qSupported.  */
4138
4139   noack_config = &remote_protocol_packets[PACKET_QStartNoAckMode];
4140   if (packet_config_support (noack_config) != PACKET_DISABLE)
4141     {
4142       putpkt ("QStartNoAckMode");
4143       getpkt (&rs->buf, &rs->buf_size, 0);
4144       if (packet_ok (rs->buf, noack_config) == PACKET_OK)
4145         rs->noack_mode = 1;
4146     }
4147
4148   if (extended_p)
4149     {
4150       /* Tell the remote that we are using the extended protocol.  */
4151       putpkt ("!");
4152       getpkt (&rs->buf, &rs->buf_size, 0);
4153     }
4154
4155   /* Let the target know which signals it is allowed to pass down to
4156      the program.  */
4157   update_signals_program_target ();
4158
4159   /* Next, if the target can specify a description, read it.  We do
4160      this before anything involving memory or registers.  */
4161   target_find_description ();
4162
4163   /* Next, now that we know something about the target, update the
4164      address spaces in the program spaces.  */
4165   update_address_spaces ();
4166
4167   /* On OSs where the list of libraries is global to all
4168      processes, we fetch them early.  */
4169   if (gdbarch_has_global_solist (target_gdbarch ()))
4170     solib_add (NULL, from_tty, auto_solib_add);
4171
4172   if (target_is_non_stop_p ())
4173     {
4174       if (packet_support (PACKET_QNonStop) != PACKET_ENABLE)
4175         error (_("Non-stop mode requested, but remote "
4176                  "does not support non-stop"));
4177
4178       putpkt ("QNonStop:1");
4179       getpkt (&rs->buf, &rs->buf_size, 0);
4180
4181       if (strcmp (rs->buf, "OK") != 0)
4182         error (_("Remote refused setting non-stop mode with: %s"), rs->buf);
4183
4184       /* Find about threads and processes the stub is already
4185          controlling.  We default to adding them in the running state.
4186          The '?' query below will then tell us about which threads are
4187          stopped.  */
4188       remote_update_thread_list (target);
4189     }
4190   else if (packet_support (PACKET_QNonStop) == PACKET_ENABLE)
4191     {
4192       /* Don't assume that the stub can operate in all-stop mode.
4193          Request it explicitly.  */
4194       putpkt ("QNonStop:0");
4195       getpkt (&rs->buf, &rs->buf_size, 0);
4196
4197       if (strcmp (rs->buf, "OK") != 0)
4198         error (_("Remote refused setting all-stop mode with: %s"), rs->buf);
4199     }
4200
4201   /* Upload TSVs regardless of whether the target is running or not.  The
4202      remote stub, such as GDBserver, may have some predefined or builtin
4203      TSVs, even if the target is not running.  */
4204   if (remote_get_trace_status (target, current_trace_status ()) != -1)
4205     {
4206       struct uploaded_tsv *uploaded_tsvs = NULL;
4207
4208       remote_upload_trace_state_variables (target, &uploaded_tsvs);
4209       merge_uploaded_trace_state_variables (&uploaded_tsvs);
4210     }
4211
4212   /* Check whether the target is running now.  */
4213   putpkt ("?");
4214   getpkt (&rs->buf, &rs->buf_size, 0);
4215
4216   if (!target_is_non_stop_p ())
4217     {
4218       if (rs->buf[0] == 'W' || rs->buf[0] == 'X')
4219         {
4220           if (!extended_p)
4221             error (_("The target is not running (try extended-remote?)"));
4222
4223           /* We're connected, but not running.  Drop out before we
4224              call start_remote.  */
4225           rs->starting_up = 0;
4226           return;
4227         }
4228       else
4229         {
4230           /* Save the reply for later.  */
4231           wait_status = (char *) alloca (strlen (rs->buf) + 1);
4232           strcpy (wait_status, rs->buf);
4233         }
4234
4235       /* Fetch thread list.  */
4236       target_update_thread_list ();
4237
4238       /* Let the stub know that we want it to return the thread.  */
4239       set_continue_thread (minus_one_ptid);
4240
4241       if (thread_count () == 0)
4242         {
4243           /* Target has no concept of threads at all.  GDB treats
4244              non-threaded target as single-threaded; add a main
4245              thread.  */
4246           add_current_inferior_and_thread (wait_status);
4247         }
4248       else
4249         {
4250           /* We have thread information; select the thread the target
4251              says should be current.  If we're reconnecting to a
4252              multi-threaded program, this will ideally be the thread
4253              that last reported an event before GDB disconnected.  */
4254           inferior_ptid = get_current_thread (wait_status);
4255           if (ptid_equal (inferior_ptid, null_ptid))
4256             {
4257               /* Odd... The target was able to list threads, but not
4258                  tell us which thread was current (no "thread"
4259                  register in T stop reply?).  Just pick the first
4260                  thread in the thread list then.  */
4261               
4262               if (remote_debug)
4263                 fprintf_unfiltered (gdb_stdlog,
4264                                     "warning: couldn't determine remote "
4265                                     "current thread; picking first in list.\n");
4266
4267               inferior_ptid = thread_list->ptid;
4268             }
4269         }
4270
4271       /* init_wait_for_inferior should be called before get_offsets in order
4272          to manage `inserted' flag in bp loc in a correct state.
4273          breakpoint_init_inferior, called from init_wait_for_inferior, set
4274          `inserted' flag to 0, while before breakpoint_re_set, called from
4275          start_remote, set `inserted' flag to 1.  In the initialization of
4276          inferior, breakpoint_init_inferior should be called first, and then
4277          breakpoint_re_set can be called.  If this order is broken, state of
4278          `inserted' flag is wrong, and cause some problems on breakpoint
4279          manipulation.  */
4280       init_wait_for_inferior ();
4281
4282       get_offsets ();           /* Get text, data & bss offsets.  */
4283
4284       /* If we could not find a description using qXfer, and we know
4285          how to do it some other way, try again.  This is not
4286          supported for non-stop; it could be, but it is tricky if
4287          there are no stopped threads when we connect.  */
4288       if (remote_read_description_p (target)
4289           && gdbarch_target_desc (target_gdbarch ()) == NULL)
4290         {
4291           target_clear_description ();
4292           target_find_description ();
4293         }
4294
4295       /* Use the previously fetched status.  */
4296       gdb_assert (wait_status != NULL);
4297       strcpy (rs->buf, wait_status);
4298       rs->cached_wait_status = 1;
4299
4300       start_remote (from_tty); /* Initialize gdb process mechanisms.  */
4301     }
4302   else
4303     {
4304       /* Clear WFI global state.  Do this before finding about new
4305          threads and inferiors, and setting the current inferior.
4306          Otherwise we would clear the proceed status of the current
4307          inferior when we want its stop_soon state to be preserved
4308          (see notice_new_inferior).  */
4309       init_wait_for_inferior ();
4310
4311       /* In non-stop, we will either get an "OK", meaning that there
4312          are no stopped threads at this time; or, a regular stop
4313          reply.  In the latter case, there may be more than one thread
4314          stopped --- we pull them all out using the vStopped
4315          mechanism.  */
4316       if (strcmp (rs->buf, "OK") != 0)
4317         {
4318           struct notif_client *notif = &notif_client_stop;
4319
4320           /* remote_notif_get_pending_replies acks this one, and gets
4321              the rest out.  */
4322           rs->notif_state->pending_event[notif_client_stop.id]
4323             = remote_notif_parse (notif, rs->buf);
4324           remote_notif_get_pending_events (notif);
4325         }
4326
4327       if (thread_count () == 0)
4328         {
4329           if (!extended_p)
4330             error (_("The target is not running (try extended-remote?)"));
4331
4332           /* We're connected, but not running.  Drop out before we
4333              call start_remote.  */
4334           rs->starting_up = 0;
4335           return;
4336         }
4337
4338       /* In non-stop mode, any cached wait status will be stored in
4339          the stop reply queue.  */
4340       gdb_assert (wait_status == NULL);
4341
4342       /* Report all signals during attach/startup.  */
4343       remote_pass_signals (target, 0, NULL);
4344
4345       /* If there are already stopped threads, mark them stopped and
4346          report their stops before giving the prompt to the user.  */
4347       process_initial_stop_replies (from_tty);
4348
4349       if (target_can_async_p ())
4350         target_async (1);
4351     }
4352
4353   /* If we connected to a live target, do some additional setup.  */
4354   if (target_has_execution)
4355     {
4356       if (symfile_objfile)      /* No use without a symbol-file.  */
4357         remote_check_symbols ();
4358     }
4359
4360   /* Possibly the target has been engaged in a trace run started
4361      previously; find out where things are at.  */
4362   if (remote_get_trace_status (target, current_trace_status ()) != -1)
4363     {
4364       struct uploaded_tp *uploaded_tps = NULL;
4365
4366       if (current_trace_status ()->running)
4367         printf_filtered (_("Trace is already running on the target.\n"));
4368
4369       remote_upload_tracepoints (target, &uploaded_tps);
4370
4371       merge_uploaded_tracepoints (&uploaded_tps);
4372     }
4373
4374   /* Possibly the target has been engaged in a btrace record started
4375      previously; find out where things are at.  */
4376   remote_btrace_maybe_reopen ();
4377
4378   /* The thread and inferior lists are now synchronized with the
4379      target, our symbols have been relocated, and we're merged the
4380      target's tracepoints with ours.  We're done with basic start
4381      up.  */
4382   rs->starting_up = 0;
4383
4384   /* Maybe breakpoints are global and need to be inserted now.  */
4385   if (breakpoints_should_be_inserted_now ())
4386     insert_breakpoints ();
4387 }
4388
4389 /* Open a connection to a remote debugger.
4390    NAME is the filename used for communication.  */
4391
4392 static void
4393 remote_open (const char *name, int from_tty)
4394 {
4395   remote_open_1 (name, from_tty, &remote_ops, 0);
4396 }
4397
4398 /* Open a connection to a remote debugger using the extended
4399    remote gdb protocol.  NAME is the filename used for communication.  */
4400
4401 static void
4402 extended_remote_open (const char *name, int from_tty)
4403 {
4404   remote_open_1 (name, from_tty, &extended_remote_ops, 1 /*extended_p */);
4405 }
4406
4407 /* Reset all packets back to "unknown support".  Called when opening a
4408    new connection to a remote target.  */
4409
4410 static void
4411 reset_all_packet_configs_support (void)
4412 {
4413   int i;
4414
4415   for (i = 0; i < PACKET_MAX; i++)
4416     remote_protocol_packets[i].support = PACKET_SUPPORT_UNKNOWN;
4417 }
4418
4419 /* Initialize all packet configs.  */
4420
4421 static void
4422 init_all_packet_configs (void)
4423 {
4424   int i;
4425
4426   for (i = 0; i < PACKET_MAX; i++)
4427     {
4428       remote_protocol_packets[i].detect = AUTO_BOOLEAN_AUTO;
4429       remote_protocol_packets[i].support = PACKET_SUPPORT_UNKNOWN;
4430     }
4431 }
4432
4433 /* Symbol look-up.  */
4434
4435 static void
4436 remote_check_symbols (void)
4437 {
4438   struct remote_state *rs = get_remote_state ();
4439   char *msg, *reply, *tmp;
4440   int end;
4441   long reply_size;
4442   struct cleanup *old_chain;
4443
4444   /* The remote side has no concept of inferiors that aren't running
4445      yet, it only knows about running processes.  If we're connected
4446      but our current inferior is not running, we should not invite the
4447      remote target to request symbol lookups related to its
4448      (unrelated) current process.  */
4449   if (!target_has_execution)
4450     return;
4451
4452   if (packet_support (PACKET_qSymbol) == PACKET_DISABLE)
4453     return;
4454
4455   /* Make sure the remote is pointing at the right process.  Note
4456      there's no way to select "no process".  */
4457   set_general_process ();
4458
4459   /* Allocate a message buffer.  We can't reuse the input buffer in RS,
4460      because we need both at the same time.  */
4461   msg = (char *) xmalloc (get_remote_packet_size ());
4462   old_chain = make_cleanup (xfree, msg);
4463   reply = (char *) xmalloc (get_remote_packet_size ());
4464   make_cleanup (free_current_contents, &reply);
4465   reply_size = get_remote_packet_size ();
4466
4467   /* Invite target to request symbol lookups.  */
4468
4469   putpkt ("qSymbol::");
4470   getpkt (&reply, &reply_size, 0);
4471   packet_ok (reply, &remote_protocol_packets[PACKET_qSymbol]);
4472
4473   while (startswith (reply, "qSymbol:"))
4474     {
4475       struct bound_minimal_symbol sym;
4476
4477       tmp = &reply[8];
4478       end = hex2bin (tmp, (gdb_byte *) msg, strlen (tmp) / 2);
4479       msg[end] = '\0';
4480       sym = lookup_minimal_symbol (msg, NULL, NULL);
4481       if (sym.minsym == NULL)
4482         xsnprintf (msg, get_remote_packet_size (), "qSymbol::%s", &reply[8]);
4483       else
4484         {
4485           int addr_size = gdbarch_addr_bit (target_gdbarch ()) / 8;
4486           CORE_ADDR sym_addr = BMSYMBOL_VALUE_ADDRESS (sym);
4487
4488           /* If this is a function address, return the start of code
4489              instead of any data function descriptor.  */
4490           sym_addr = gdbarch_convert_from_func_ptr_addr (target_gdbarch (),
4491                                                          sym_addr,
4492                                                          &current_target);
4493
4494           xsnprintf (msg, get_remote_packet_size (), "qSymbol:%s:%s",
4495                      phex_nz (sym_addr, addr_size), &reply[8]);
4496         }
4497   
4498       putpkt (msg);
4499       getpkt (&reply, &reply_size, 0);
4500     }
4501
4502   do_cleanups (old_chain);
4503 }
4504
4505 static struct serial *
4506 remote_serial_open (const char *name)
4507 {
4508   static int udp_warning = 0;
4509
4510   /* FIXME: Parsing NAME here is a hack.  But we want to warn here instead
4511      of in ser-tcp.c, because it is the remote protocol assuming that the
4512      serial connection is reliable and not the serial connection promising
4513      to be.  */
4514   if (!udp_warning && startswith (name, "udp:"))
4515     {
4516       warning (_("The remote protocol may be unreliable over UDP.\n"
4517                  "Some events may be lost, rendering further debugging "
4518                  "impossible."));
4519       udp_warning = 1;
4520     }
4521
4522   return serial_open (name);
4523 }
4524
4525 /* Inform the target of our permission settings.  The permission flags
4526    work without this, but if the target knows the settings, it can do
4527    a couple things.  First, it can add its own check, to catch cases
4528    that somehow manage to get by the permissions checks in target
4529    methods.  Second, if the target is wired to disallow particular
4530    settings (for instance, a system in the field that is not set up to
4531    be able to stop at a breakpoint), it can object to any unavailable
4532    permissions.  */
4533
4534 void
4535 remote_set_permissions (struct target_ops *self)
4536 {
4537   struct remote_state *rs = get_remote_state ();
4538
4539   xsnprintf (rs->buf, get_remote_packet_size (), "QAllow:"
4540              "WriteReg:%x;WriteMem:%x;"
4541              "InsertBreak:%x;InsertTrace:%x;"
4542              "InsertFastTrace:%x;Stop:%x",
4543              may_write_registers, may_write_memory,
4544              may_insert_breakpoints, may_insert_tracepoints,
4545              may_insert_fast_tracepoints, may_stop);
4546   putpkt (rs->buf);
4547   getpkt (&rs->buf, &rs->buf_size, 0);
4548
4549   /* If the target didn't like the packet, warn the user.  Do not try
4550      to undo the user's settings, that would just be maddening.  */
4551   if (strcmp (rs->buf, "OK") != 0)
4552     warning (_("Remote refused setting permissions with: %s"), rs->buf);
4553 }
4554
4555 /* This type describes each known response to the qSupported
4556    packet.  */
4557 struct protocol_feature
4558 {
4559   /* The name of this protocol feature.  */
4560   const char *name;
4561
4562   /* The default for this protocol feature.  */
4563   enum packet_support default_support;
4564
4565   /* The function to call when this feature is reported, or after
4566      qSupported processing if the feature is not supported.
4567      The first argument points to this structure.  The second
4568      argument indicates whether the packet requested support be
4569      enabled, disabled, or probed (or the default, if this function
4570      is being called at the end of processing and this feature was
4571      not reported).  The third argument may be NULL; if not NULL, it
4572      is a NUL-terminated string taken from the packet following
4573      this feature's name and an equals sign.  */
4574   void (*func) (const struct protocol_feature *, enum packet_support,
4575                 const char *);
4576
4577   /* The corresponding packet for this feature.  Only used if
4578      FUNC is remote_supported_packet.  */
4579   int packet;
4580 };
4581
4582 static void
4583 remote_supported_packet (const struct protocol_feature *feature,
4584                          enum packet_support support,
4585                          const char *argument)
4586 {
4587   if (argument)
4588     {
4589       warning (_("Remote qSupported response supplied an unexpected value for"
4590                  " \"%s\"."), feature->name);
4591       return;
4592     }
4593
4594   remote_protocol_packets[feature->packet].support = support;
4595 }
4596
4597 static void
4598 remote_packet_size (const struct protocol_feature *feature,
4599                     enum packet_support support, const char *value)
4600 {
4601   struct remote_state *rs = get_remote_state ();
4602
4603   int packet_size;
4604   char *value_end;
4605
4606   if (support != PACKET_ENABLE)
4607     return;
4608
4609   if (value == NULL || *value == '\0')
4610     {
4611       warning (_("Remote target reported \"%s\" without a size."),
4612                feature->name);
4613       return;
4614     }
4615
4616   errno = 0;
4617   packet_size = strtol (value, &value_end, 16);
4618   if (errno != 0 || *value_end != '\0' || packet_size < 0)
4619     {
4620       warning (_("Remote target reported \"%s\" with a bad size: \"%s\"."),
4621                feature->name, value);
4622       return;
4623     }
4624
4625   /* Record the new maximum packet size.  */
4626   rs->explicit_packet_size = packet_size;
4627 }
4628
4629 static const struct protocol_feature remote_protocol_features[] = {
4630   { "PacketSize", PACKET_DISABLE, remote_packet_size, -1 },
4631   { "qXfer:auxv:read", PACKET_DISABLE, remote_supported_packet,
4632     PACKET_qXfer_auxv },
4633   { "qXfer:exec-file:read", PACKET_DISABLE, remote_supported_packet,
4634     PACKET_qXfer_exec_file },
4635   { "qXfer:features:read", PACKET_DISABLE, remote_supported_packet,
4636     PACKET_qXfer_features },
4637   { "qXfer:libraries:read", PACKET_DISABLE, remote_supported_packet,
4638     PACKET_qXfer_libraries },
4639   { "qXfer:libraries-svr4:read", PACKET_DISABLE, remote_supported_packet,
4640     PACKET_qXfer_libraries_svr4 },
4641   { "augmented-libraries-svr4-read", PACKET_DISABLE,
4642     remote_supported_packet, PACKET_augmented_libraries_svr4_read_feature },
4643   { "qXfer:memory-map:read", PACKET_DISABLE, remote_supported_packet,
4644     PACKET_qXfer_memory_map },
4645   { "qXfer:spu:read", PACKET_DISABLE, remote_supported_packet,
4646     PACKET_qXfer_spu_read },
4647   { "qXfer:spu:write", PACKET_DISABLE, remote_supported_packet,
4648     PACKET_qXfer_spu_write },
4649   { "qXfer:osdata:read", PACKET_DISABLE, remote_supported_packet,
4650     PACKET_qXfer_osdata },
4651   { "qXfer:threads:read", PACKET_DISABLE, remote_supported_packet,
4652     PACKET_qXfer_threads },
4653   { "qXfer:traceframe-info:read", PACKET_DISABLE, remote_supported_packet,
4654     PACKET_qXfer_traceframe_info },
4655   { "QPassSignals", PACKET_DISABLE, remote_supported_packet,
4656     PACKET_QPassSignals },
4657   { "QCatchSyscalls", PACKET_DISABLE, remote_supported_packet,
4658     PACKET_QCatchSyscalls },
4659   { "QProgramSignals", PACKET_DISABLE, remote_supported_packet,
4660     PACKET_QProgramSignals },
4661   { "QSetWorkingDir", PACKET_DISABLE, remote_supported_packet,
4662     PACKET_QSetWorkingDir },
4663   { "QStartupWithShell", PACKET_DISABLE, remote_supported_packet,
4664     PACKET_QStartupWithShell },
4665   { "QEnvironmentHexEncoded", PACKET_DISABLE, remote_supported_packet,
4666     PACKET_QEnvironmentHexEncoded },
4667   { "QEnvironmentReset", PACKET_DISABLE, remote_supported_packet,
4668     PACKET_QEnvironmentReset },
4669   { "QEnvironmentUnset", PACKET_DISABLE, remote_supported_packet,
4670     PACKET_QEnvironmentUnset },
4671   { "QStartNoAckMode", PACKET_DISABLE, remote_supported_packet,
4672     PACKET_QStartNoAckMode },
4673   { "multiprocess", PACKET_DISABLE, remote_supported_packet,
4674     PACKET_multiprocess_feature },
4675   { "QNonStop", PACKET_DISABLE, remote_supported_packet, PACKET_QNonStop },
4676   { "qXfer:siginfo:read", PACKET_DISABLE, remote_supported_packet,
4677     PACKET_qXfer_siginfo_read },
4678   { "qXfer:siginfo:write", PACKET_DISABLE, remote_supported_packet,
4679     PACKET_qXfer_siginfo_write },
4680   { "ConditionalTracepoints", PACKET_DISABLE, remote_supported_packet,
4681     PACKET_ConditionalTracepoints },
4682   { "ConditionalBreakpoints", PACKET_DISABLE, remote_supported_packet,
4683     PACKET_ConditionalBreakpoints },
4684   { "BreakpointCommands", PACKET_DISABLE, remote_supported_packet,
4685     PACKET_BreakpointCommands },
4686   { "FastTracepoints", PACKET_DISABLE, remote_supported_packet,
4687     PACKET_FastTracepoints },
4688   { "StaticTracepoints", PACKET_DISABLE, remote_supported_packet,
4689     PACKET_StaticTracepoints },
4690   {"InstallInTrace", PACKET_DISABLE, remote_supported_packet,
4691    PACKET_InstallInTrace},
4692   { "DisconnectedTracing", PACKET_DISABLE, remote_supported_packet,
4693     PACKET_DisconnectedTracing_feature },
4694   { "ReverseContinue", PACKET_DISABLE, remote_supported_packet,
4695     PACKET_bc },
4696   { "ReverseStep", PACKET_DISABLE, remote_supported_packet,
4697     PACKET_bs },
4698   { "TracepointSource", PACKET_DISABLE, remote_supported_packet,
4699     PACKET_TracepointSource },
4700   { "QAllow", PACKET_DISABLE, remote_supported_packet,
4701     PACKET_QAllow },
4702   { "EnableDisableTracepoints", PACKET_DISABLE, remote_supported_packet,
4703     PACKET_EnableDisableTracepoints_feature },
4704   { "qXfer:fdpic:read", PACKET_DISABLE, remote_supported_packet,
4705     PACKET_qXfer_fdpic },
4706   { "qXfer:uib:read", PACKET_DISABLE, remote_supported_packet,
4707     PACKET_qXfer_uib },
4708   { "QDisableRandomization", PACKET_DISABLE, remote_supported_packet,
4709     PACKET_QDisableRandomization },
4710   { "QAgent", PACKET_DISABLE, remote_supported_packet, PACKET_QAgent},
4711   { "QTBuffer:size", PACKET_DISABLE,
4712     remote_supported_packet, PACKET_QTBuffer_size},
4713   { "tracenz", PACKET_DISABLE, remote_supported_packet, PACKET_tracenz_feature },
4714   { "Qbtrace:off", PACKET_DISABLE, remote_supported_packet, PACKET_Qbtrace_off },
4715   { "Qbtrace:bts", PACKET_DISABLE, remote_supported_packet, PACKET_Qbtrace_bts },
4716   { "Qbtrace:pt", PACKET_DISABLE, remote_supported_packet, PACKET_Qbtrace_pt },
4717   { "qXfer:btrace:read", PACKET_DISABLE, remote_supported_packet,
4718     PACKET_qXfer_btrace },
4719   { "qXfer:btrace-conf:read", PACKET_DISABLE, remote_supported_packet,
4720     PACKET_qXfer_btrace_conf },
4721   { "Qbtrace-conf:bts:size", PACKET_DISABLE, remote_supported_packet,
4722     PACKET_Qbtrace_conf_bts_size },
4723   { "swbreak", PACKET_DISABLE, remote_supported_packet, PACKET_swbreak_feature },
4724   { "hwbreak", PACKET_DISABLE, remote_supported_packet, PACKET_hwbreak_feature },
4725   { "fork-events", PACKET_DISABLE, remote_supported_packet,
4726     PACKET_fork_event_feature },
4727   { "vfork-events", PACKET_DISABLE, remote_supported_packet,
4728     PACKET_vfork_event_feature },
4729   { "exec-events", PACKET_DISABLE, remote_supported_packet,
4730     PACKET_exec_event_feature },
4731   { "Qbtrace-conf:pt:size", PACKET_DISABLE, remote_supported_packet,
4732     PACKET_Qbtrace_conf_pt_size },
4733   { "vContSupported", PACKET_DISABLE, remote_supported_packet, PACKET_vContSupported },
4734   { "QThreadEvents", PACKET_DISABLE, remote_supported_packet, PACKET_QThreadEvents },
4735   { "no-resumed", PACKET_DISABLE, remote_supported_packet, PACKET_no_resumed },
4736 };
4737
4738 static char *remote_support_xml;
4739
4740 /* Register string appended to "xmlRegisters=" in qSupported query.  */
4741
4742 void
4743 register_remote_support_xml (const char *xml)
4744 {
4745 #if defined(HAVE_LIBEXPAT)
4746   if (remote_support_xml == NULL)
4747     remote_support_xml = concat ("xmlRegisters=", xml, (char *) NULL);
4748   else
4749     {
4750       char *copy = xstrdup (remote_support_xml + 13);
4751       char *p = strtok (copy, ",");
4752
4753       do
4754         {
4755           if (strcmp (p, xml) == 0)
4756             {
4757               /* already there */
4758               xfree (copy);
4759               return;
4760             }
4761         }
4762       while ((p = strtok (NULL, ",")) != NULL);
4763       xfree (copy);
4764
4765       remote_support_xml = reconcat (remote_support_xml,
4766                                      remote_support_xml, ",", xml,
4767                                      (char *) NULL);
4768     }
4769 #endif
4770 }
4771
4772 static char *
4773 remote_query_supported_append (char *msg, const char *append)
4774 {
4775   if (msg)
4776     return reconcat (msg, msg, ";", append, (char *) NULL);
4777   else
4778     return xstrdup (append);
4779 }
4780
4781 static void
4782 remote_query_supported (void)
4783 {
4784   struct remote_state *rs = get_remote_state ();
4785   char *next;
4786   int i;
4787   unsigned char seen [ARRAY_SIZE (remote_protocol_features)];
4788
4789   /* The packet support flags are handled differently for this packet
4790      than for most others.  We treat an error, a disabled packet, and
4791      an empty response identically: any features which must be reported
4792      to be used will be automatically disabled.  An empty buffer
4793      accomplishes this, since that is also the representation for a list
4794      containing no features.  */
4795
4796   rs->buf[0] = 0;
4797   if (packet_support (PACKET_qSupported) != PACKET_DISABLE)
4798     {
4799       char *q = NULL;
4800       struct cleanup *old_chain = make_cleanup (free_current_contents, &q);
4801
4802       if (packet_set_cmd_state (PACKET_multiprocess_feature) != AUTO_BOOLEAN_FALSE)
4803         q = remote_query_supported_append (q, "multiprocess+");
4804
4805       if (packet_set_cmd_state (PACKET_swbreak_feature) != AUTO_BOOLEAN_FALSE)
4806         q = remote_query_supported_append (q, "swbreak+");
4807       if (packet_set_cmd_state (PACKET_hwbreak_feature) != AUTO_BOOLEAN_FALSE)
4808         q = remote_query_supported_append (q, "hwbreak+");
4809
4810       q = remote_query_supported_append (q, "qRelocInsn+");
4811
4812       if (packet_set_cmd_state (PACKET_fork_event_feature)
4813           != AUTO_BOOLEAN_FALSE)
4814         q = remote_query_supported_append (q, "fork-events+");
4815       if (packet_set_cmd_state (PACKET_vfork_event_feature)
4816           != AUTO_BOOLEAN_FALSE)
4817         q = remote_query_supported_append (q, "vfork-events+");
4818       if (packet_set_cmd_state (PACKET_exec_event_feature)
4819           != AUTO_BOOLEAN_FALSE)
4820         q = remote_query_supported_append (q, "exec-events+");
4821
4822       if (packet_set_cmd_state (PACKET_vContSupported) != AUTO_BOOLEAN_FALSE)
4823         q = remote_query_supported_append (q, "vContSupported+");
4824
4825       if (packet_set_cmd_state (PACKET_QThreadEvents) != AUTO_BOOLEAN_FALSE)
4826         q = remote_query_supported_append (q, "QThreadEvents+");
4827
4828       if (packet_set_cmd_state (PACKET_no_resumed) != AUTO_BOOLEAN_FALSE)
4829         q = remote_query_supported_append (q, "no-resumed+");
4830
4831       /* Keep this one last to work around a gdbserver <= 7.10 bug in
4832          the qSupported:xmlRegisters=i386 handling.  */
4833       if (remote_support_xml != NULL)
4834         q = remote_query_supported_append (q, remote_support_xml);
4835
4836       q = reconcat (q, "qSupported:", q, (char *) NULL);
4837       putpkt (q);
4838
4839       do_cleanups (old_chain);
4840
4841       getpkt (&rs->buf, &rs->buf_size, 0);
4842
4843       /* If an error occured, warn, but do not return - just reset the
4844          buffer to empty and go on to disable features.  */
4845       if (packet_ok (rs->buf, &remote_protocol_packets[PACKET_qSupported])
4846           == PACKET_ERROR)
4847         {
4848           warning (_("Remote failure reply: %s"), rs->buf);
4849           rs->buf[0] = 0;
4850         }
4851     }
4852
4853   memset (seen, 0, sizeof (seen));
4854
4855   next = rs->buf;
4856   while (*next)
4857     {
4858       enum packet_support is_supported;
4859       char *p, *end, *name_end, *value;
4860
4861       /* First separate out this item from the rest of the packet.  If
4862          there's another item after this, we overwrite the separator
4863          (terminated strings are much easier to work with).  */
4864       p = next;
4865       end = strchr (p, ';');
4866       if (end == NULL)
4867         {
4868           end = p + strlen (p);
4869           next = end;
4870         }
4871       else
4872         {
4873           *end = '\0';
4874           next = end + 1;
4875
4876           if (end == p)
4877             {
4878               warning (_("empty item in \"qSupported\" response"));
4879               continue;
4880             }
4881         }
4882
4883       name_end = strchr (p, '=');
4884       if (name_end)
4885         {
4886           /* This is a name=value entry.  */
4887           is_supported = PACKET_ENABLE;
4888           value = name_end + 1;
4889           *name_end = '\0';
4890         }
4891       else
4892         {
4893           value = NULL;
4894           switch (end[-1])
4895             {
4896             case '+':
4897               is_supported = PACKET_ENABLE;
4898               break;
4899
4900             case '-':
4901               is_supported = PACKET_DISABLE;
4902               break;
4903
4904             case '?':
4905               is_supported = PACKET_SUPPORT_UNKNOWN;
4906               break;
4907
4908             default:
4909               warning (_("unrecognized item \"%s\" "
4910                          "in \"qSupported\" response"), p);
4911               continue;
4912             }
4913           end[-1] = '\0';
4914         }
4915
4916       for (i = 0; i < ARRAY_SIZE (remote_protocol_features); i++)
4917         if (strcmp (remote_protocol_features[i].name, p) == 0)
4918           {
4919             const struct protocol_feature *feature;
4920
4921             seen[i] = 1;
4922             feature = &remote_protocol_features[i];
4923             feature->func (feature, is_supported, value);
4924             break;
4925           }
4926     }
4927
4928   /* If we increased the packet size, make sure to increase the global
4929      buffer size also.  We delay this until after parsing the entire
4930      qSupported packet, because this is the same buffer we were
4931      parsing.  */
4932   if (rs->buf_size < rs->explicit_packet_size)
4933     {
4934       rs->buf_size = rs->explicit_packet_size;
4935       rs->buf = (char *) xrealloc (rs->buf, rs->buf_size);
4936     }
4937
4938   /* Handle the defaults for unmentioned features.  */
4939   for (i = 0; i < ARRAY_SIZE (remote_protocol_features); i++)
4940     if (!seen[i])
4941       {
4942         const struct protocol_feature *feature;
4943
4944         feature = &remote_protocol_features[i];
4945         feature->func (feature, feature->default_support, NULL);
4946       }
4947 }
4948
4949 /* Serial QUIT handler for the remote serial descriptor.
4950
4951    Defers handling a Ctrl-C until we're done with the current
4952    command/response packet sequence, unless:
4953
4954    - We're setting up the connection.  Don't send a remote interrupt
4955      request, as we're not fully synced yet.  Quit immediately
4956      instead.
4957
4958    - The target has been resumed in the foreground
4959      (target_terminal::is_ours is false) with a synchronous resume
4960      packet, and we're blocked waiting for the stop reply, thus a
4961      Ctrl-C should be immediately sent to the target.
4962
4963    - We get a second Ctrl-C while still within the same serial read or
4964      write.  In that case the serial is seemingly wedged --- offer to
4965      quit/disconnect.
4966
4967    - We see a second Ctrl-C without target response, after having
4968      previously interrupted the target.  In that case the target/stub
4969      is probably wedged --- offer to quit/disconnect.
4970 */
4971
4972 static void
4973 remote_serial_quit_handler (void)
4974 {
4975   struct remote_state *rs = get_remote_state ();
4976
4977   if (check_quit_flag ())
4978     {
4979       /* If we're starting up, we're not fully synced yet.  Quit
4980          immediately.  */
4981       if (rs->starting_up)
4982         quit ();
4983       else if (rs->got_ctrlc_during_io)
4984         {
4985           if (query (_("The target is not responding to GDB commands.\n"
4986                        "Stop debugging it? ")))
4987             remote_unpush_and_throw ();
4988         }
4989       /* If ^C has already been sent once, offer to disconnect.  */
4990       else if (!target_terminal::is_ours () && rs->ctrlc_pending_p)
4991         interrupt_query ();
4992       /* All-stop protocol, and blocked waiting for stop reply.  Send
4993          an interrupt request.  */
4994       else if (!target_terminal::is_ours () && rs->waiting_for_stop_reply)
4995         target_interrupt (inferior_ptid);
4996       else
4997         rs->got_ctrlc_during_io = 1;
4998     }
4999 }
5000
5001 /* Remove any of the remote.c targets from target stack.  Upper targets depend
5002    on it so remove them first.  */
5003
5004 static void
5005 remote_unpush_target (void)
5006 {
5007   pop_all_targets_at_and_above (process_stratum);
5008 }
5009
5010 static void
5011 remote_unpush_and_throw (void)
5012 {
5013   remote_unpush_target ();
5014   throw_error (TARGET_CLOSE_ERROR, _("Disconnected from target."));
5015 }
5016
5017 static void
5018 remote_open_1 (const char *name, int from_tty,
5019                struct target_ops *target, int extended_p)
5020 {
5021   struct remote_state *rs = get_remote_state ();
5022
5023   if (name == 0)
5024     error (_("To open a remote debug connection, you need to specify what\n"
5025            "serial device is attached to the remote system\n"
5026            "(e.g. /dev/ttyS0, /dev/ttya, COM1, etc.)."));
5027
5028   /* See FIXME above.  */
5029   if (!target_async_permitted)
5030     wait_forever_enabled_p = 1;
5031
5032   /* If we're connected to a running target, target_preopen will kill it.
5033      Ask this question first, before target_preopen has a chance to kill
5034      anything.  */
5035   if (rs->remote_desc != NULL && !have_inferiors ())
5036     {
5037       if (from_tty
5038           && !query (_("Already connected to a remote target.  Disconnect? ")))
5039         error (_("Still connected."));
5040     }
5041
5042   /* Here the possibly existing remote target gets unpushed.  */
5043   target_preopen (from_tty);
5044
5045   /* Make sure we send the passed signals list the next time we resume.  */
5046   xfree (rs->last_pass_packet);
5047   rs->last_pass_packet = NULL;
5048
5049   /* Make sure we send the program signals list the next time we
5050      resume.  */
5051   xfree (rs->last_program_signals_packet);
5052   rs->last_program_signals_packet = NULL;
5053
5054   remote_fileio_reset ();
5055   reopen_exec_file ();
5056   reread_symbols ();
5057
5058   rs->remote_desc = remote_serial_open (name);
5059   if (!rs->remote_desc)
5060     perror_with_name (name);
5061
5062   if (baud_rate != -1)
5063     {
5064       if (serial_setbaudrate (rs->remote_desc, baud_rate))
5065         {
5066           /* The requested speed could not be set.  Error out to
5067              top level after closing remote_desc.  Take care to
5068              set remote_desc to NULL to avoid closing remote_desc
5069              more than once.  */
5070           serial_close (rs->remote_desc);
5071           rs->remote_desc = NULL;
5072           perror_with_name (name);
5073         }
5074     }
5075
5076   serial_setparity (rs->remote_desc, serial_parity);
5077   serial_raw (rs->remote_desc);
5078
5079   /* If there is something sitting in the buffer we might take it as a
5080      response to a command, which would be bad.  */
5081   serial_flush_input (rs->remote_desc);
5082
5083   if (from_tty)
5084     {
5085       puts_filtered ("Remote debugging using ");
5086       puts_filtered (name);
5087       puts_filtered ("\n");
5088     }
5089   push_target (target);         /* Switch to using remote target now.  */
5090
5091   /* Register extra event sources in the event loop.  */
5092   remote_async_inferior_event_token
5093     = create_async_event_handler (remote_async_inferior_event_handler,
5094                                   NULL);
5095   rs->notif_state = remote_notif_state_allocate ();
5096
5097   /* Reset the target state; these things will be queried either by
5098      remote_query_supported or as they are needed.  */
5099   reset_all_packet_configs_support ();
5100   rs->cached_wait_status = 0;
5101   rs->explicit_packet_size = 0;
5102   rs->noack_mode = 0;
5103   rs->extended = extended_p;
5104   rs->waiting_for_stop_reply = 0;
5105   rs->ctrlc_pending_p = 0;
5106   rs->got_ctrlc_during_io = 0;
5107
5108   rs->general_thread = not_sent_ptid;
5109   rs->continue_thread = not_sent_ptid;
5110   rs->remote_traceframe_number = -1;
5111
5112   rs->last_resume_exec_dir = EXEC_FORWARD;
5113
5114   /* Probe for ability to use "ThreadInfo" query, as required.  */
5115   rs->use_threadinfo_query = 1;
5116   rs->use_threadextra_query = 1;
5117
5118   readahead_cache_invalidate ();
5119
5120   /* Start out by owning the terminal.  */
5121   remote_async_terminal_ours_p = 1;
5122
5123   if (target_async_permitted)
5124     {
5125       /* FIXME: cagney/1999-09-23: During the initial connection it is
5126          assumed that the target is already ready and able to respond to
5127          requests.  Unfortunately remote_start_remote() eventually calls
5128          wait_for_inferior() with no timeout.  wait_forever_enabled_p gets
5129          around this.  Eventually a mechanism that allows
5130          wait_for_inferior() to expect/get timeouts will be
5131          implemented.  */
5132       wait_forever_enabled_p = 0;
5133     }
5134
5135   /* First delete any symbols previously loaded from shared libraries.  */
5136   no_shared_libraries (NULL, 0);
5137
5138   /* Start afresh.  */
5139   init_thread_list ();
5140
5141   /* Start the remote connection.  If error() or QUIT, discard this
5142      target (we'd otherwise be in an inconsistent state) and then
5143      propogate the error on up the exception chain.  This ensures that
5144      the caller doesn't stumble along blindly assuming that the
5145      function succeeded.  The CLI doesn't have this problem but other
5146      UI's, such as MI do.
5147
5148      FIXME: cagney/2002-05-19: Instead of re-throwing the exception,
5149      this function should return an error indication letting the
5150      caller restore the previous state.  Unfortunately the command
5151      ``target remote'' is directly wired to this function making that
5152      impossible.  On a positive note, the CLI side of this problem has
5153      been fixed - the function set_cmd_context() makes it possible for
5154      all the ``target ....'' commands to share a common callback
5155      function.  See cli-dump.c.  */
5156   {
5157
5158     TRY
5159       {
5160         remote_start_remote (from_tty, target, extended_p);
5161       }
5162     CATCH (ex, RETURN_MASK_ALL)
5163       {
5164         /* Pop the partially set up target - unless something else did
5165            already before throwing the exception.  */
5166         if (rs->remote_desc != NULL)
5167           remote_unpush_target ();
5168         if (target_async_permitted)
5169           wait_forever_enabled_p = 1;
5170         throw_exception (ex);
5171       }
5172     END_CATCH
5173   }
5174
5175   remote_btrace_reset ();
5176
5177   if (target_async_permitted)
5178     wait_forever_enabled_p = 1;
5179 }
5180
5181 /* Detach the specified process.  */
5182
5183 static void
5184 remote_detach_pid (int pid)
5185 {
5186   struct remote_state *rs = get_remote_state ();
5187
5188   if (remote_multi_process_p (rs))
5189     xsnprintf (rs->buf, get_remote_packet_size (), "D;%x", pid);
5190   else
5191     strcpy (rs->buf, "D");
5192
5193   putpkt (rs->buf);
5194   getpkt (&rs->buf, &rs->buf_size, 0);
5195
5196   if (rs->buf[0] == 'O' && rs->buf[1] == 'K')
5197     ;
5198   else if (rs->buf[0] == '\0')
5199     error (_("Remote doesn't know how to detach"));
5200   else
5201     error (_("Can't detach process."));
5202 }
5203
5204 /* This detaches a program to which we previously attached, using
5205    inferior_ptid to identify the process.  After this is done, GDB
5206    can be used to debug some other program.  We better not have left
5207    any breakpoints in the target program or it'll die when it hits
5208    one.  */
5209
5210 static void
5211 remote_detach_1 (const char *args, int from_tty)
5212 {
5213   int pid = ptid_get_pid (inferior_ptid);
5214   struct remote_state *rs = get_remote_state ();
5215   struct thread_info *tp = find_thread_ptid (inferior_ptid);
5216   int is_fork_parent;
5217
5218   if (args)
5219     error (_("Argument given to \"detach\" when remotely debugging."));
5220
5221   if (!target_has_execution)
5222     error (_("No process to detach from."));
5223
5224   target_announce_detach (from_tty);
5225
5226   /* Tell the remote target to detach.  */
5227   remote_detach_pid (pid);
5228
5229   /* Exit only if this is the only active inferior.  */
5230   if (from_tty && !rs->extended && number_of_live_inferiors () == 1)
5231     puts_filtered (_("Ending remote debugging.\n"));
5232
5233   /* Check to see if we are detaching a fork parent.  Note that if we
5234      are detaching a fork child, tp == NULL.  */
5235   is_fork_parent = (tp != NULL
5236                     && tp->pending_follow.kind == TARGET_WAITKIND_FORKED);
5237
5238   /* If doing detach-on-fork, we don't mourn, because that will delete
5239      breakpoints that should be available for the followed inferior.  */
5240   if (!is_fork_parent)
5241     target_mourn_inferior (inferior_ptid);
5242   else
5243     {
5244       inferior_ptid = null_ptid;
5245       detach_inferior (pid);
5246     }
5247 }
5248
5249 static void
5250 remote_detach (struct target_ops *ops, const char *args, int from_tty)
5251 {
5252   remote_detach_1 (args, from_tty);
5253 }
5254
5255 static void
5256 extended_remote_detach (struct target_ops *ops, const char *args, int from_tty)
5257 {
5258   remote_detach_1 (args, from_tty);
5259 }
5260
5261 /* Target follow-fork function for remote targets.  On entry, and
5262    at return, the current inferior is the fork parent.
5263
5264    Note that although this is currently only used for extended-remote,
5265    it is named remote_follow_fork in anticipation of using it for the
5266    remote target as well.  */
5267
5268 static int
5269 remote_follow_fork (struct target_ops *ops, int follow_child,
5270                     int detach_fork)
5271 {
5272   struct remote_state *rs = get_remote_state ();
5273   enum target_waitkind kind = inferior_thread ()->pending_follow.kind;
5274
5275   if ((kind == TARGET_WAITKIND_FORKED && remote_fork_event_p (rs))
5276       || (kind == TARGET_WAITKIND_VFORKED && remote_vfork_event_p (rs)))
5277     {
5278       /* When following the parent and detaching the child, we detach
5279          the child here.  For the case of following the child and
5280          detaching the parent, the detach is done in the target-
5281          independent follow fork code in infrun.c.  We can't use
5282          target_detach when detaching an unfollowed child because
5283          the client side doesn't know anything about the child.  */
5284       if (detach_fork && !follow_child)
5285         {
5286           /* Detach the fork child.  */
5287           ptid_t child_ptid;
5288           pid_t child_pid;
5289
5290           child_ptid = inferior_thread ()->pending_follow.value.related_pid;
5291           child_pid = ptid_get_pid (child_ptid);
5292
5293           remote_detach_pid (child_pid);
5294           detach_inferior (child_pid);
5295         }
5296     }
5297   return 0;
5298 }
5299
5300 /* Target follow-exec function for remote targets.  Save EXECD_PATHNAME
5301    in the program space of the new inferior.  On entry and at return the
5302    current inferior is the exec'ing inferior.  INF is the new exec'd
5303    inferior, which may be the same as the exec'ing inferior unless
5304    follow-exec-mode is "new".  */
5305
5306 static void
5307 remote_follow_exec (struct target_ops *ops,
5308                     struct inferior *inf, char *execd_pathname)
5309 {
5310   /* We know that this is a target file name, so if it has the "target:"
5311      prefix we strip it off before saving it in the program space.  */
5312   if (is_target_filename (execd_pathname))
5313     execd_pathname += strlen (TARGET_SYSROOT_PREFIX);
5314
5315   set_pspace_remote_exec_file (inf->pspace, execd_pathname);
5316 }
5317
5318 /* Same as remote_detach, but don't send the "D" packet; just disconnect.  */
5319
5320 static void
5321 remote_disconnect (struct target_ops *target, const char *args, int from_tty)
5322 {
5323   if (args)
5324     error (_("Argument given to \"disconnect\" when remotely debugging."));
5325
5326   /* Make sure we unpush even the extended remote targets.  Calling
5327      target_mourn_inferior won't unpush, and remote_mourn won't
5328      unpush if there is more than one inferior left.  */
5329   unpush_target (target);
5330   generic_mourn_inferior ();
5331
5332   if (from_tty)
5333     puts_filtered ("Ending remote debugging.\n");
5334 }
5335
5336 /* Attach to the process specified by ARGS.  If FROM_TTY is non-zero,
5337    be chatty about it.  */
5338
5339 static void
5340 extended_remote_attach (struct target_ops *target, const char *args,
5341                         int from_tty)
5342 {
5343   struct remote_state *rs = get_remote_state ();
5344   int pid;
5345   char *wait_status = NULL;
5346
5347   pid = parse_pid_to_attach (args);
5348
5349   /* Remote PID can be freely equal to getpid, do not check it here the same
5350      way as in other targets.  */
5351
5352   if (packet_support (PACKET_vAttach) == PACKET_DISABLE)
5353     error (_("This target does not support attaching to a process"));
5354
5355   if (from_tty)
5356     {
5357       char *exec_file = get_exec_file (0);
5358
5359       if (exec_file)
5360         printf_unfiltered (_("Attaching to program: %s, %s\n"), exec_file,
5361                            target_pid_to_str (pid_to_ptid (pid)));
5362       else
5363         printf_unfiltered (_("Attaching to %s\n"),
5364                            target_pid_to_str (pid_to_ptid (pid)));
5365
5366       gdb_flush (gdb_stdout);
5367     }
5368
5369   xsnprintf (rs->buf, get_remote_packet_size (), "vAttach;%x", pid);
5370   putpkt (rs->buf);
5371   getpkt (&rs->buf, &rs->buf_size, 0);
5372
5373   switch (packet_ok (rs->buf,
5374                      &remote_protocol_packets[PACKET_vAttach]))
5375     {
5376     case PACKET_OK:
5377       if (!target_is_non_stop_p ())
5378         {
5379           /* Save the reply for later.  */
5380           wait_status = (char *) alloca (strlen (rs->buf) + 1);
5381           strcpy (wait_status, rs->buf);
5382         }
5383       else if (strcmp (rs->buf, "OK") != 0)
5384         error (_("Attaching to %s failed with: %s"),
5385                target_pid_to_str (pid_to_ptid (pid)),
5386                rs->buf);
5387       break;
5388     case PACKET_UNKNOWN:
5389       error (_("This target does not support attaching to a process"));
5390     default:
5391       error (_("Attaching to %s failed"),
5392              target_pid_to_str (pid_to_ptid (pid)));
5393     }
5394
5395   set_current_inferior (remote_add_inferior (0, pid, 1, 0));
5396
5397   inferior_ptid = pid_to_ptid (pid);
5398
5399   if (target_is_non_stop_p ())
5400     {
5401       struct thread_info *thread;
5402
5403       /* Get list of threads.  */
5404       remote_update_thread_list (target);
5405
5406       thread = first_thread_of_process (pid);
5407       if (thread)
5408         inferior_ptid = thread->ptid;
5409       else
5410         inferior_ptid = pid_to_ptid (pid);
5411
5412       /* Invalidate our notion of the remote current thread.  */
5413       record_currthread (rs, minus_one_ptid);
5414     }
5415   else
5416     {
5417       /* Now, if we have thread information, update inferior_ptid.  */
5418       inferior_ptid = remote_current_thread (inferior_ptid);
5419
5420       /* Add the main thread to the thread list.  */
5421       add_thread_silent (inferior_ptid);
5422     }
5423
5424   /* Next, if the target can specify a description, read it.  We do
5425      this before anything involving memory or registers.  */
5426   target_find_description ();
5427
5428   if (!target_is_non_stop_p ())
5429     {
5430       /* Use the previously fetched status.  */
5431       gdb_assert (wait_status != NULL);
5432
5433       if (target_can_async_p ())
5434         {
5435           struct notif_event *reply
5436             =  remote_notif_parse (&notif_client_stop, wait_status);
5437
5438           push_stop_reply ((struct stop_reply *) reply);
5439
5440           target_async (1);
5441         }
5442       else
5443         {
5444           gdb_assert (wait_status != NULL);
5445           strcpy (rs->buf, wait_status);
5446           rs->cached_wait_status = 1;
5447         }
5448     }
5449   else
5450     gdb_assert (wait_status == NULL);
5451 }
5452
5453 /* Implementation of the to_post_attach method.  */
5454
5455 static void
5456 extended_remote_post_attach (struct target_ops *ops, int pid)
5457 {
5458   /* Get text, data & bss offsets.  */
5459   get_offsets ();
5460
5461   /* In certain cases GDB might not have had the chance to start
5462      symbol lookup up until now.  This could happen if the debugged
5463      binary is not using shared libraries, the vsyscall page is not
5464      present (on Linux) and the binary itself hadn't changed since the
5465      debugging process was started.  */
5466   if (symfile_objfile != NULL)
5467     remote_check_symbols();
5468 }
5469
5470 \f
5471 /* Check for the availability of vCont.  This function should also check
5472    the response.  */
5473
5474 static void
5475 remote_vcont_probe (struct remote_state *rs)
5476 {
5477   char *buf;
5478
5479   strcpy (rs->buf, "vCont?");
5480   putpkt (rs->buf);
5481   getpkt (&rs->buf, &rs->buf_size, 0);
5482   buf = rs->buf;
5483
5484   /* Make sure that the features we assume are supported.  */
5485   if (startswith (buf, "vCont"))
5486     {
5487       char *p = &buf[5];
5488       int support_c, support_C;
5489
5490       rs->supports_vCont.s = 0;
5491       rs->supports_vCont.S = 0;
5492       support_c = 0;
5493       support_C = 0;
5494       rs->supports_vCont.t = 0;
5495       rs->supports_vCont.r = 0;
5496       while (p && *p == ';')
5497         {
5498           p++;
5499           if (*p == 's' && (*(p + 1) == ';' || *(p + 1) == 0))
5500             rs->supports_vCont.s = 1;
5501           else if (*p == 'S' && (*(p + 1) == ';' || *(p + 1) == 0))
5502             rs->supports_vCont.S = 1;
5503           else if (*p == 'c' && (*(p + 1) == ';' || *(p + 1) == 0))
5504             support_c = 1;
5505           else if (*p == 'C' && (*(p + 1) == ';' || *(p + 1) == 0))
5506             support_C = 1;
5507           else if (*p == 't' && (*(p + 1) == ';' || *(p + 1) == 0))
5508             rs->supports_vCont.t = 1;
5509           else if (*p == 'r' && (*(p + 1) == ';' || *(p + 1) == 0))
5510             rs->supports_vCont.r = 1;
5511
5512           p = strchr (p, ';');
5513         }
5514
5515       /* If c, and C are not all supported, we can't use vCont.  Clearing
5516          BUF will make packet_ok disable the packet.  */
5517       if (!support_c || !support_C)
5518         buf[0] = 0;
5519     }
5520
5521   packet_ok (buf, &remote_protocol_packets[PACKET_vCont]);
5522 }
5523
5524 /* Helper function for building "vCont" resumptions.  Write a
5525    resumption to P.  ENDP points to one-passed-the-end of the buffer
5526    we're allowed to write to.  Returns BUF+CHARACTERS_WRITTEN.  The
5527    thread to be resumed is PTID; STEP and SIGGNAL indicate whether the
5528    resumed thread should be single-stepped and/or signalled.  If PTID
5529    equals minus_one_ptid, then all threads are resumed; if PTID
5530    represents a process, then all threads of the process are resumed;
5531    the thread to be stepped and/or signalled is given in the global
5532    INFERIOR_PTID.  */
5533
5534 static char *
5535 append_resumption (char *p, char *endp,
5536                    ptid_t ptid, int step, enum gdb_signal siggnal)
5537 {
5538   struct remote_state *rs = get_remote_state ();
5539
5540   if (step && siggnal != GDB_SIGNAL_0)
5541     p += xsnprintf (p, endp - p, ";S%02x", siggnal);
5542   else if (step
5543            /* GDB is willing to range step.  */
5544            && use_range_stepping
5545            /* Target supports range stepping.  */
5546            && rs->supports_vCont.r
5547            /* We don't currently support range stepping multiple
5548               threads with a wildcard (though the protocol allows it,
5549               so stubs shouldn't make an active effort to forbid
5550               it).  */
5551            && !(remote_multi_process_p (rs) && ptid_is_pid (ptid)))
5552     {
5553       struct thread_info *tp;
5554
5555       if (ptid_equal (ptid, minus_one_ptid))
5556         {
5557           /* If we don't know about the target thread's tid, then
5558              we're resuming magic_null_ptid (see caller).  */
5559           tp = find_thread_ptid (magic_null_ptid);
5560         }
5561       else
5562         tp = find_thread_ptid (ptid);
5563       gdb_assert (tp != NULL);
5564
5565       if (tp->control.may_range_step)
5566         {
5567           int addr_size = gdbarch_addr_bit (target_gdbarch ()) / 8;
5568
5569           p += xsnprintf (p, endp - p, ";r%s,%s",
5570                           phex_nz (tp->control.step_range_start,
5571                                    addr_size),
5572                           phex_nz (tp->control.step_range_end,
5573                                    addr_size));
5574         }
5575       else
5576         p += xsnprintf (p, endp - p, ";s");
5577     }
5578   else if (step)
5579     p += xsnprintf (p, endp - p, ";s");
5580   else if (siggnal != GDB_SIGNAL_0)
5581     p += xsnprintf (p, endp - p, ";C%02x", siggnal);
5582   else
5583     p += xsnprintf (p, endp - p, ";c");
5584
5585   if (remote_multi_process_p (rs) && ptid_is_pid (ptid))
5586     {
5587       ptid_t nptid;
5588
5589       /* All (-1) threads of process.  */
5590       nptid = ptid_build (ptid_get_pid (ptid), -1, 0);
5591
5592       p += xsnprintf (p, endp - p, ":");
5593       p = write_ptid (p, endp, nptid);
5594     }
5595   else if (!ptid_equal (ptid, minus_one_ptid))
5596     {
5597       p += xsnprintf (p, endp - p, ":");
5598       p = write_ptid (p, endp, ptid);
5599     }
5600
5601   return p;
5602 }
5603
5604 /* Clear the thread's private info on resume.  */
5605
5606 static void
5607 resume_clear_thread_private_info (struct thread_info *thread)
5608 {
5609   if (thread->priv != NULL)
5610     {
5611       thread->priv->stop_reason = TARGET_STOPPED_BY_NO_REASON;
5612       thread->priv->watch_data_address = 0;
5613     }
5614 }
5615
5616 /* Append a vCont continue-with-signal action for threads that have a
5617    non-zero stop signal.  */
5618
5619 static char *
5620 append_pending_thread_resumptions (char *p, char *endp, ptid_t ptid)
5621 {
5622   struct thread_info *thread;
5623
5624   ALL_NON_EXITED_THREADS (thread)
5625     if (ptid_match (thread->ptid, ptid)
5626         && !ptid_equal (inferior_ptid, thread->ptid)
5627         && thread->suspend.stop_signal != GDB_SIGNAL_0)
5628       {
5629         p = append_resumption (p, endp, thread->ptid,
5630                                0, thread->suspend.stop_signal);
5631         thread->suspend.stop_signal = GDB_SIGNAL_0;
5632         resume_clear_thread_private_info (thread);
5633       }
5634
5635   return p;
5636 }
5637
5638 /* Set the target running, using the packets that use Hc
5639    (c/s/C/S).  */
5640
5641 static void
5642 remote_resume_with_hc (struct target_ops *ops,
5643                        ptid_t ptid, int step, enum gdb_signal siggnal)
5644 {
5645   struct remote_state *rs = get_remote_state ();
5646   struct thread_info *thread;
5647   char *buf;
5648
5649   rs->last_sent_signal = siggnal;
5650   rs->last_sent_step = step;
5651
5652   /* The c/s/C/S resume packets use Hc, so set the continue
5653      thread.  */
5654   if (ptid_equal (ptid, minus_one_ptid))
5655     set_continue_thread (any_thread_ptid);
5656   else
5657     set_continue_thread (ptid);
5658
5659   ALL_NON_EXITED_THREADS (thread)
5660     resume_clear_thread_private_info (thread);
5661
5662   buf = rs->buf;
5663   if (execution_direction == EXEC_REVERSE)
5664     {
5665       /* We don't pass signals to the target in reverse exec mode.  */
5666       if (info_verbose && siggnal != GDB_SIGNAL_0)
5667         warning (_(" - Can't pass signal %d to target in reverse: ignored."),
5668                  siggnal);
5669
5670       if (step && packet_support (PACKET_bs) == PACKET_DISABLE)
5671         error (_("Remote reverse-step not supported."));
5672       if (!step && packet_support (PACKET_bc) == PACKET_DISABLE)
5673         error (_("Remote reverse-continue not supported."));
5674
5675       strcpy (buf, step ? "bs" : "bc");
5676     }
5677   else if (siggnal != GDB_SIGNAL_0)
5678     {
5679       buf[0] = step ? 'S' : 'C';
5680       buf[1] = tohex (((int) siggnal >> 4) & 0xf);
5681       buf[2] = tohex (((int) siggnal) & 0xf);
5682       buf[3] = '\0';
5683     }
5684   else
5685     strcpy (buf, step ? "s" : "c");
5686
5687   putpkt (buf);
5688 }
5689
5690 /* Resume the remote inferior by using a "vCont" packet.  The thread
5691    to be resumed is PTID; STEP and SIGGNAL indicate whether the
5692    resumed thread should be single-stepped and/or signalled.  If PTID
5693    equals minus_one_ptid, then all threads are resumed; the thread to
5694    be stepped and/or signalled is given in the global INFERIOR_PTID.
5695    This function returns non-zero iff it resumes the inferior.
5696
5697    This function issues a strict subset of all possible vCont commands
5698    at the moment.  */
5699
5700 static int
5701 remote_resume_with_vcont (ptid_t ptid, int step, enum gdb_signal siggnal)
5702 {
5703   struct remote_state *rs = get_remote_state ();
5704   char *p;
5705   char *endp;
5706
5707   /* No reverse execution actions defined for vCont.  */
5708   if (execution_direction == EXEC_REVERSE)
5709     return 0;
5710
5711   if (packet_support (PACKET_vCont) == PACKET_SUPPORT_UNKNOWN)
5712     remote_vcont_probe (rs);
5713
5714   if (packet_support (PACKET_vCont) == PACKET_DISABLE)
5715     return 0;
5716
5717   p = rs->buf;
5718   endp = rs->buf + get_remote_packet_size ();
5719
5720   /* If we could generate a wider range of packets, we'd have to worry
5721      about overflowing BUF.  Should there be a generic
5722      "multi-part-packet" packet?  */
5723
5724   p += xsnprintf (p, endp - p, "vCont");
5725
5726   if (ptid_equal (ptid, magic_null_ptid))
5727     {
5728       /* MAGIC_NULL_PTID means that we don't have any active threads,
5729          so we don't have any TID numbers the inferior will
5730          understand.  Make sure to only send forms that do not specify
5731          a TID.  */
5732       append_resumption (p, endp, minus_one_ptid, step, siggnal);
5733     }
5734   else if (ptid_equal (ptid, minus_one_ptid) || ptid_is_pid (ptid))
5735     {
5736       /* Resume all threads (of all processes, or of a single
5737          process), with preference for INFERIOR_PTID.  This assumes
5738          inferior_ptid belongs to the set of all threads we are about
5739          to resume.  */
5740       if (step || siggnal != GDB_SIGNAL_0)
5741         {
5742           /* Step inferior_ptid, with or without signal.  */
5743           p = append_resumption (p, endp, inferior_ptid, step, siggnal);
5744         }
5745
5746       /* Also pass down any pending signaled resumption for other
5747          threads not the current.  */
5748       p = append_pending_thread_resumptions (p, endp, ptid);
5749
5750       /* And continue others without a signal.  */
5751       append_resumption (p, endp, ptid, /*step=*/ 0, GDB_SIGNAL_0);
5752     }
5753   else
5754     {
5755       /* Scheduler locking; resume only PTID.  */
5756       append_resumption (p, endp, ptid, step, siggnal);
5757     }
5758
5759   gdb_assert (strlen (rs->buf) < get_remote_packet_size ());
5760   putpkt (rs->buf);
5761
5762   if (target_is_non_stop_p ())
5763     {
5764       /* In non-stop, the stub replies to vCont with "OK".  The stop
5765          reply will be reported asynchronously by means of a `%Stop'
5766          notification.  */
5767       getpkt (&rs->buf, &rs->buf_size, 0);
5768       if (strcmp (rs->buf, "OK") != 0)
5769         error (_("Unexpected vCont reply in non-stop mode: %s"), rs->buf);
5770     }
5771
5772   return 1;
5773 }
5774
5775 /* Tell the remote machine to resume.  */
5776
5777 static void
5778 remote_resume (struct target_ops *ops,
5779                ptid_t ptid, int step, enum gdb_signal siggnal)
5780 {
5781   struct remote_state *rs = get_remote_state ();
5782
5783   /* When connected in non-stop mode, the core resumes threads
5784      individually.  Resuming remote threads directly in target_resume
5785      would thus result in sending one packet per thread.  Instead, to
5786      minimize roundtrip latency, here we just store the resume
5787      request; the actual remote resumption will be done in
5788      target_commit_resume / remote_commit_resume, where we'll be able
5789      to do vCont action coalescing.  */
5790   if (target_is_non_stop_p () && execution_direction != EXEC_REVERSE)
5791     {
5792       struct private_thread_info *remote_thr;
5793
5794       if (ptid_equal (minus_one_ptid, ptid) || ptid_is_pid (ptid))
5795         remote_thr = get_private_info_ptid (inferior_ptid);
5796       else
5797         remote_thr = get_private_info_ptid (ptid);
5798       remote_thr->last_resume_step = step;
5799       remote_thr->last_resume_sig = siggnal;
5800       return;
5801     }
5802
5803   /* In all-stop, we can't mark REMOTE_ASYNC_GET_PENDING_EVENTS_TOKEN
5804      (explained in remote-notif.c:handle_notification) so
5805      remote_notif_process is not called.  We need find a place where
5806      it is safe to start a 'vNotif' sequence.  It is good to do it
5807      before resuming inferior, because inferior was stopped and no RSP
5808      traffic at that moment.  */
5809   if (!target_is_non_stop_p ())
5810     remote_notif_process (rs->notif_state, &notif_client_stop);
5811
5812   rs->last_resume_exec_dir = execution_direction;
5813
5814   /* Prefer vCont, and fallback to s/c/S/C, which use Hc.  */
5815   if (!remote_resume_with_vcont (ptid, step, siggnal))
5816     remote_resume_with_hc (ops, ptid, step, siggnal);
5817
5818   /* We are about to start executing the inferior, let's register it
5819      with the event loop.  NOTE: this is the one place where all the
5820      execution commands end up.  We could alternatively do this in each
5821      of the execution commands in infcmd.c.  */
5822   /* FIXME: ezannoni 1999-09-28: We may need to move this out of here
5823      into infcmd.c in order to allow inferior function calls to work
5824      NOT asynchronously.  */
5825   if (target_can_async_p ())
5826     target_async (1);
5827
5828   /* We've just told the target to resume.  The remote server will
5829      wait for the inferior to stop, and then send a stop reply.  In
5830      the mean time, we can't start another command/query ourselves
5831      because the stub wouldn't be ready to process it.  This applies
5832      only to the base all-stop protocol, however.  In non-stop (which
5833      only supports vCont), the stub replies with an "OK", and is
5834      immediate able to process further serial input.  */
5835   if (!target_is_non_stop_p ())
5836     rs->waiting_for_stop_reply = 1;
5837 }
5838
5839 static void check_pending_events_prevent_wildcard_vcont
5840   (int *may_global_wildcard_vcont);
5841 static int is_pending_fork_parent_thread (struct thread_info *thread);
5842
5843 /* Private per-inferior info for target remote processes.  */
5844
5845 struct private_inferior
5846 {
5847   /* Whether we can send a wildcard vCont for this process.  */
5848   int may_wildcard_vcont;
5849 };
5850
5851 /* Structure used to track the construction of a vCont packet in the
5852    outgoing packet buffer.  This is used to send multiple vCont
5853    packets if we have more actions than would fit a single packet.  */
5854
5855 struct vcont_builder
5856 {
5857   /* Pointer to the first action.  P points here if no action has been
5858      appended yet.  */
5859   char *first_action;
5860
5861   /* Where the next action will be appended.  */
5862   char *p;
5863
5864   /* The end of the buffer.  Must never write past this.  */
5865   char *endp;
5866 };
5867
5868 /* Prepare the outgoing buffer for a new vCont packet.  */
5869
5870 static void
5871 vcont_builder_restart (struct vcont_builder *builder)
5872 {
5873   struct remote_state *rs = get_remote_state ();
5874
5875   builder->p = rs->buf;
5876   builder->endp = rs->buf + get_remote_packet_size ();
5877   builder->p += xsnprintf (builder->p, builder->endp - builder->p, "vCont");
5878   builder->first_action = builder->p;
5879 }
5880
5881 /* If the vCont packet being built has any action, send it to the
5882    remote end.  */
5883
5884 static void
5885 vcont_builder_flush (struct vcont_builder *builder)
5886 {
5887   struct remote_state *rs;
5888
5889   if (builder->p == builder->first_action)
5890     return;
5891
5892   rs = get_remote_state ();
5893   putpkt (rs->buf);
5894   getpkt (&rs->buf, &rs->buf_size, 0);
5895   if (strcmp (rs->buf, "OK") != 0)
5896     error (_("Unexpected vCont reply in non-stop mode: %s"), rs->buf);
5897 }
5898
5899 /* The largest action is range-stepping, with its two addresses.  This
5900    is more than sufficient.  If a new, bigger action is created, it'll
5901    quickly trigger a failed assertion in append_resumption (and we'll
5902    just bump this).  */
5903 #define MAX_ACTION_SIZE 200
5904
5905 /* Append a new vCont action in the outgoing packet being built.  If
5906    the action doesn't fit the packet along with previous actions, push
5907    what we've got so far to the remote end and start over a new vCont
5908    packet (with the new action).  */
5909
5910 static void
5911 vcont_builder_push_action (struct vcont_builder *builder,
5912                            ptid_t ptid, int step, enum gdb_signal siggnal)
5913 {
5914   char buf[MAX_ACTION_SIZE + 1];
5915   char *endp;
5916   size_t rsize;
5917
5918   endp = append_resumption (buf, buf + sizeof (buf),
5919                             ptid, step, siggnal);
5920
5921   /* Check whether this new action would fit in the vCont packet along
5922      with previous actions.  If not, send what we've got so far and
5923      start a new vCont packet.  */
5924   rsize = endp - buf;
5925   if (rsize > builder->endp - builder->p)
5926     {
5927       vcont_builder_flush (builder);
5928       vcont_builder_restart (builder);
5929
5930       /* Should now fit.  */
5931       gdb_assert (rsize <= builder->endp - builder->p);
5932     }
5933
5934   memcpy (builder->p, buf, rsize);
5935   builder->p += rsize;
5936   *builder->p = '\0';
5937 }
5938
5939 /* to_commit_resume implementation.  */
5940
5941 static void
5942 remote_commit_resume (struct target_ops *ops)
5943 {
5944   struct remote_state *rs = get_remote_state ();
5945   struct inferior *inf;
5946   struct thread_info *tp;
5947   int any_process_wildcard;
5948   int may_global_wildcard_vcont;
5949   struct vcont_builder vcont_builder;
5950
5951   /* If connected in all-stop mode, we'd send the remote resume
5952      request directly from remote_resume.  Likewise if
5953      reverse-debugging, as there are no defined vCont actions for
5954      reverse execution.  */
5955   if (!target_is_non_stop_p () || execution_direction == EXEC_REVERSE)
5956     return;
5957
5958   /* Try to send wildcard actions ("vCont;c" or "vCont;c:pPID.-1")
5959      instead of resuming all threads of each process individually.
5960      However, if any thread of a process must remain halted, we can't
5961      send wildcard resumes and must send one action per thread.
5962
5963      Care must be taken to not resume threads/processes the server
5964      side already told us are stopped, but the core doesn't know about
5965      yet, because the events are still in the vStopped notification
5966      queue.  For example:
5967
5968        #1 => vCont s:p1.1;c
5969        #2 <= OK
5970        #3 <= %Stopped T05 p1.1
5971        #4 => vStopped
5972        #5 <= T05 p1.2
5973        #6 => vStopped
5974        #7 <= OK
5975        #8 (infrun handles the stop for p1.1 and continues stepping)
5976        #9 => vCont s:p1.1;c
5977
5978      The last vCont above would resume thread p1.2 by mistake, because
5979      the server has no idea that the event for p1.2 had not been
5980      handled yet.
5981
5982      The server side must similarly ignore resume actions for the
5983      thread that has a pending %Stopped notification (and any other
5984      threads with events pending), until GDB acks the notification
5985      with vStopped.  Otherwise, e.g., the following case is
5986      mishandled:
5987
5988        #1 => g  (or any other packet)
5989        #2 <= [registers]
5990        #3 <= %Stopped T05 p1.2
5991        #4 => vCont s:p1.1;c
5992        #5 <= OK
5993
5994      Above, the server must not resume thread p1.2.  GDB can't know
5995      that p1.2 stopped until it acks the %Stopped notification, and
5996      since from GDB's perspective all threads should be running, it
5997      sends a "c" action.
5998
5999      Finally, special care must also be given to handling fork/vfork
6000      events.  A (v)fork event actually tells us that two processes
6001      stopped -- the parent and the child.  Until we follow the fork,
6002      we must not resume the child.  Therefore, if we have a pending
6003      fork follow, we must not send a global wildcard resume action
6004      (vCont;c).  We can still send process-wide wildcards though.  */
6005
6006   /* Start by assuming a global wildcard (vCont;c) is possible.  */
6007   may_global_wildcard_vcont = 1;
6008
6009   /* And assume every process is individually wildcard-able too.  */
6010   ALL_NON_EXITED_INFERIORS (inf)
6011     {
6012       if (inf->priv == NULL)
6013         inf->priv = XNEW (struct private_inferior);
6014       inf->priv->may_wildcard_vcont = 1;
6015     }
6016
6017   /* Check for any pending events (not reported or processed yet) and
6018      disable process and global wildcard resumes appropriately.  */
6019   check_pending_events_prevent_wildcard_vcont (&may_global_wildcard_vcont);
6020
6021   ALL_NON_EXITED_THREADS (tp)
6022     {
6023       /* If a thread of a process is not meant to be resumed, then we
6024          can't wildcard that process.  */
6025       if (!tp->executing)
6026         {
6027           tp->inf->priv->may_wildcard_vcont = 0;
6028
6029           /* And if we can't wildcard a process, we can't wildcard
6030              everything either.  */
6031           may_global_wildcard_vcont = 0;
6032           continue;
6033         }
6034
6035       /* If a thread is the parent of an unfollowed fork, then we
6036          can't do a global wildcard, as that would resume the fork
6037          child.  */
6038       if (is_pending_fork_parent_thread (tp))
6039         may_global_wildcard_vcont = 0;
6040     }
6041
6042   /* Now let's build the vCont packet(s).  Actions must be appended
6043      from narrower to wider scopes (thread -> process -> global).  If
6044      we end up with too many actions for a single packet vcont_builder
6045      flushes the current vCont packet to the remote side and starts a
6046      new one.  */
6047   vcont_builder_restart (&vcont_builder);
6048
6049   /* Threads first.  */
6050   ALL_NON_EXITED_THREADS (tp)
6051     {
6052       struct private_thread_info *remote_thr = tp->priv;
6053
6054       if (!tp->executing || remote_thr->vcont_resumed)
6055         continue;
6056
6057       gdb_assert (!thread_is_in_step_over_chain (tp));
6058
6059       if (!remote_thr->last_resume_step
6060           && remote_thr->last_resume_sig == GDB_SIGNAL_0
6061           && tp->inf->priv->may_wildcard_vcont)
6062         {
6063           /* We'll send a wildcard resume instead.  */
6064           remote_thr->vcont_resumed = 1;
6065           continue;
6066         }
6067
6068       vcont_builder_push_action (&vcont_builder, tp->ptid,
6069                                  remote_thr->last_resume_step,
6070                                  remote_thr->last_resume_sig);
6071       remote_thr->vcont_resumed = 1;
6072     }
6073
6074   /* Now check whether we can send any process-wide wildcard.  This is
6075      to avoid sending a global wildcard in the case nothing is
6076      supposed to be resumed.  */
6077   any_process_wildcard = 0;
6078
6079   ALL_NON_EXITED_INFERIORS (inf)
6080     {
6081       if (inf->priv->may_wildcard_vcont)
6082         {
6083           any_process_wildcard = 1;
6084           break;
6085         }
6086     }
6087
6088   if (any_process_wildcard)
6089     {
6090       /* If all processes are wildcard-able, then send a single "c"
6091          action, otherwise, send an "all (-1) threads of process"
6092          continue action for each running process, if any.  */
6093       if (may_global_wildcard_vcont)
6094         {
6095           vcont_builder_push_action (&vcont_builder, minus_one_ptid,
6096                                      0, GDB_SIGNAL_0);
6097         }
6098       else
6099         {
6100           ALL_NON_EXITED_INFERIORS (inf)
6101             {
6102               if (inf->priv->may_wildcard_vcont)
6103                 {
6104                   vcont_builder_push_action (&vcont_builder,
6105                                              pid_to_ptid (inf->pid),
6106                                              0, GDB_SIGNAL_0);
6107                 }
6108             }
6109         }
6110     }
6111
6112   vcont_builder_flush (&vcont_builder);
6113 }
6114
6115 \f
6116
6117 /* Non-stop version of target_stop.  Uses `vCont;t' to stop a remote
6118    thread, all threads of a remote process, or all threads of all
6119    processes.  */
6120
6121 static void
6122 remote_stop_ns (ptid_t ptid)
6123 {
6124   struct remote_state *rs = get_remote_state ();
6125   char *p = rs->buf;
6126   char *endp = rs->buf + get_remote_packet_size ();
6127
6128   if (packet_support (PACKET_vCont) == PACKET_SUPPORT_UNKNOWN)
6129     remote_vcont_probe (rs);
6130
6131   if (!rs->supports_vCont.t)
6132     error (_("Remote server does not support stopping threads"));
6133
6134   if (ptid_equal (ptid, minus_one_ptid)
6135       || (!remote_multi_process_p (rs) && ptid_is_pid (ptid)))
6136     p += xsnprintf (p, endp - p, "vCont;t");
6137   else
6138     {
6139       ptid_t nptid;
6140
6141       p += xsnprintf (p, endp - p, "vCont;t:");
6142
6143       if (ptid_is_pid (ptid))
6144           /* All (-1) threads of process.  */
6145         nptid = ptid_build (ptid_get_pid (ptid), -1, 0);
6146       else
6147         {
6148           /* Small optimization: if we already have a stop reply for
6149              this thread, no use in telling the stub we want this
6150              stopped.  */
6151           if (peek_stop_reply (ptid))
6152             return;
6153
6154           nptid = ptid;
6155         }
6156
6157       write_ptid (p, endp, nptid);
6158     }
6159
6160   /* In non-stop, we get an immediate OK reply.  The stop reply will
6161      come in asynchronously by notification.  */
6162   putpkt (rs->buf);
6163   getpkt (&rs->buf, &rs->buf_size, 0);
6164   if (strcmp (rs->buf, "OK") != 0)
6165     error (_("Stopping %s failed: %s"), target_pid_to_str (ptid), rs->buf);
6166 }
6167
6168 /* All-stop version of target_interrupt.  Sends a break or a ^C to
6169    interrupt the remote target.  It is undefined which thread of which
6170    process reports the interrupt.  */
6171
6172 static void
6173 remote_interrupt_as (void)
6174 {
6175   struct remote_state *rs = get_remote_state ();
6176
6177   rs->ctrlc_pending_p = 1;
6178
6179   /* If the inferior is stopped already, but the core didn't know
6180      about it yet, just ignore the request.  The cached wait status
6181      will be collected in remote_wait.  */
6182   if (rs->cached_wait_status)
6183     return;
6184
6185   /* Send interrupt_sequence to remote target.  */
6186   send_interrupt_sequence ();
6187 }
6188
6189 /* Non-stop version of target_interrupt.  Uses `vCtrlC' to interrupt
6190    the remote target.  It is undefined which thread of which process
6191    reports the interrupt.  Throws an error if the packet is not
6192    supported by the server.  */
6193
6194 static void
6195 remote_interrupt_ns (void)
6196 {
6197   struct remote_state *rs = get_remote_state ();
6198   char *p = rs->buf;
6199   char *endp = rs->buf + get_remote_packet_size ();
6200
6201   xsnprintf (p, endp - p, "vCtrlC");
6202
6203   /* In non-stop, we get an immediate OK reply.  The stop reply will
6204      come in asynchronously by notification.  */
6205   putpkt (rs->buf);
6206   getpkt (&rs->buf, &rs->buf_size, 0);
6207
6208   switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_vCtrlC]))
6209     {
6210     case PACKET_OK:
6211       break;
6212     case PACKET_UNKNOWN:
6213       error (_("No support for interrupting the remote target."));
6214     case PACKET_ERROR:
6215       error (_("Interrupting target failed: %s"), rs->buf);
6216     }
6217 }
6218
6219 /* Implement the to_stop function for the remote targets.  */
6220
6221 static void
6222 remote_stop (struct target_ops *self, ptid_t ptid)
6223 {
6224   if (remote_debug)
6225     fprintf_unfiltered (gdb_stdlog, "remote_stop called\n");
6226
6227   if (target_is_non_stop_p ())
6228     remote_stop_ns (ptid);
6229   else
6230     {
6231       /* We don't currently have a way to transparently pause the
6232          remote target in all-stop mode.  Interrupt it instead.  */
6233       remote_interrupt_as ();
6234     }
6235 }
6236
6237 /* Implement the to_interrupt function for the remote targets.  */
6238
6239 static void
6240 remote_interrupt (struct target_ops *self, ptid_t ptid)
6241 {
6242   struct remote_state *rs = get_remote_state ();
6243
6244   if (remote_debug)
6245     fprintf_unfiltered (gdb_stdlog, "remote_interrupt called\n");
6246
6247   if (target_is_non_stop_p ())
6248     remote_interrupt_ns ();
6249   else
6250     remote_interrupt_as ();
6251 }
6252
6253 /* Implement the to_pass_ctrlc function for the remote targets.  */
6254
6255 static void
6256 remote_pass_ctrlc (struct target_ops *self)
6257 {
6258   struct remote_state *rs = get_remote_state ();
6259
6260   if (remote_debug)
6261     fprintf_unfiltered (gdb_stdlog, "remote_pass_ctrlc called\n");
6262
6263   /* If we're starting up, we're not fully synced yet.  Quit
6264      immediately.  */
6265   if (rs->starting_up)
6266     quit ();
6267   /* If ^C has already been sent once, offer to disconnect.  */
6268   else if (rs->ctrlc_pending_p)
6269     interrupt_query ();
6270   else
6271     target_interrupt (inferior_ptid);
6272 }
6273
6274 /* Ask the user what to do when an interrupt is received.  */
6275
6276 static void
6277 interrupt_query (void)
6278 {
6279   struct remote_state *rs = get_remote_state ();
6280
6281   if (rs->waiting_for_stop_reply && rs->ctrlc_pending_p)
6282     {
6283       if (query (_("The target is not responding to interrupt requests.\n"
6284                    "Stop debugging it? ")))
6285         {
6286           remote_unpush_target ();
6287           throw_error (TARGET_CLOSE_ERROR, _("Disconnected from target."));
6288         }
6289     }
6290   else
6291     {
6292       if (query (_("Interrupted while waiting for the program.\n"
6293                    "Give up waiting? ")))
6294         quit ();
6295     }
6296 }
6297
6298 /* Enable/disable target terminal ownership.  Most targets can use
6299    terminal groups to control terminal ownership.  Remote targets are
6300    different in that explicit transfer of ownership to/from GDB/target
6301    is required.  */
6302
6303 static void
6304 remote_terminal_inferior (struct target_ops *self)
6305 {
6306   /* FIXME: cagney/1999-09-27: Make calls to target_terminal::*()
6307      idempotent.  The event-loop GDB talking to an asynchronous target
6308      with a synchronous command calls this function from both
6309      event-top.c and infrun.c/infcmd.c.  Once GDB stops trying to
6310      transfer the terminal to the target when it shouldn't this guard
6311      can go away.  */
6312   if (!remote_async_terminal_ours_p)
6313     return;
6314   remote_async_terminal_ours_p = 0;
6315   /* NOTE: At this point we could also register our selves as the
6316      recipient of all input.  Any characters typed could then be
6317      passed on down to the target.  */
6318 }
6319
6320 static void
6321 remote_terminal_ours (struct target_ops *self)
6322 {
6323   /* See FIXME in remote_terminal_inferior.  */
6324   if (remote_async_terminal_ours_p)
6325     return;
6326   remote_async_terminal_ours_p = 1;
6327 }
6328
6329 static void
6330 remote_console_output (char *msg)
6331 {
6332   char *p;
6333
6334   for (p = msg; p[0] && p[1]; p += 2)
6335     {
6336       char tb[2];
6337       char c = fromhex (p[0]) * 16 + fromhex (p[1]);
6338
6339       tb[0] = c;
6340       tb[1] = 0;
6341       fputs_unfiltered (tb, gdb_stdtarg);
6342     }
6343   gdb_flush (gdb_stdtarg);
6344 }
6345
6346 DEF_VEC_O(cached_reg_t);
6347
6348 typedef struct stop_reply
6349 {
6350   struct notif_event base;
6351
6352   /* The identifier of the thread about this event  */
6353   ptid_t ptid;
6354
6355   /* The remote state this event is associated with.  When the remote
6356      connection, represented by a remote_state object, is closed,
6357      all the associated stop_reply events should be released.  */
6358   struct remote_state *rs;
6359
6360   struct target_waitstatus ws;
6361
6362   /* The architecture associated with the expedited registers.  */
6363   gdbarch *arch;
6364
6365   /* Expedited registers.  This makes remote debugging a bit more
6366      efficient for those targets that provide critical registers as
6367      part of their normal status mechanism (as another roundtrip to
6368      fetch them is avoided).  */
6369   VEC(cached_reg_t) *regcache;
6370
6371   enum target_stop_reason stop_reason;
6372
6373   CORE_ADDR watch_data_address;
6374
6375   int core;
6376 } *stop_reply_p;
6377
6378 DECLARE_QUEUE_P (stop_reply_p);
6379 DEFINE_QUEUE_P (stop_reply_p);
6380 /* The list of already fetched and acknowledged stop events.  This
6381    queue is used for notification Stop, and other notifications
6382    don't need queue for their events, because the notification events
6383    of Stop can't be consumed immediately, so that events should be
6384    queued first, and be consumed by remote_wait_{ns,as} one per
6385    time.  Other notifications can consume their events immediately,
6386    so queue is not needed for them.  */
6387 static QUEUE (stop_reply_p) *stop_reply_queue;
6388
6389 static void
6390 stop_reply_xfree (struct stop_reply *r)
6391 {
6392   notif_event_xfree ((struct notif_event *) r);
6393 }
6394
6395 /* Return the length of the stop reply queue.  */
6396
6397 static int
6398 stop_reply_queue_length (void)
6399 {
6400   return QUEUE_length (stop_reply_p, stop_reply_queue);
6401 }
6402
6403 static void
6404 remote_notif_stop_parse (struct notif_client *self, char *buf,
6405                          struct notif_event *event)
6406 {
6407   remote_parse_stop_reply (buf, (struct stop_reply *) event);
6408 }
6409
6410 static void
6411 remote_notif_stop_ack (struct notif_client *self, char *buf,
6412                        struct notif_event *event)
6413 {
6414   struct stop_reply *stop_reply = (struct stop_reply *) event;
6415
6416   /* acknowledge */
6417   putpkt (self->ack_command);
6418
6419   if (stop_reply->ws.kind == TARGET_WAITKIND_IGNORE)
6420       /* We got an unknown stop reply.  */
6421       error (_("Unknown stop reply"));
6422
6423   push_stop_reply (stop_reply);
6424 }
6425
6426 static int
6427 remote_notif_stop_can_get_pending_events (struct notif_client *self)
6428 {
6429   /* We can't get pending events in remote_notif_process for
6430      notification stop, and we have to do this in remote_wait_ns
6431      instead.  If we fetch all queued events from stub, remote stub
6432      may exit and we have no chance to process them back in
6433      remote_wait_ns.  */
6434   mark_async_event_handler (remote_async_inferior_event_token);
6435   return 0;
6436 }
6437
6438 static void
6439 stop_reply_dtr (struct notif_event *event)
6440 {
6441   struct stop_reply *r = (struct stop_reply *) event;
6442   cached_reg_t *reg;
6443   int ix;
6444
6445   for (ix = 0;
6446        VEC_iterate (cached_reg_t, r->regcache, ix, reg);
6447        ix++)
6448     xfree (reg->data);
6449
6450   VEC_free (cached_reg_t, r->regcache);
6451 }
6452
6453 static struct notif_event *
6454 remote_notif_stop_alloc_reply (void)
6455 {
6456   /* We cast to a pointer to the "base class".  */
6457   struct notif_event *r = (struct notif_event *) XNEW (struct stop_reply);
6458
6459   r->dtr = stop_reply_dtr;
6460
6461   return r;
6462 }
6463
6464 /* A client of notification Stop.  */
6465
6466 struct notif_client notif_client_stop =
6467 {
6468   "Stop",
6469   "vStopped",
6470   remote_notif_stop_parse,
6471   remote_notif_stop_ack,
6472   remote_notif_stop_can_get_pending_events,
6473   remote_notif_stop_alloc_reply,
6474   REMOTE_NOTIF_STOP,
6475 };
6476
6477 /* A parameter to pass data in and out.  */
6478
6479 struct queue_iter_param
6480 {
6481   void *input;
6482   struct stop_reply *output;
6483 };
6484
6485 /* Determine if THREAD_PTID is a pending fork parent thread.  ARG contains
6486    the pid of the process that owns the threads we want to check, or
6487    -1 if we want to check all threads.  */
6488
6489 static int
6490 is_pending_fork_parent (struct target_waitstatus *ws, int event_pid,
6491                         ptid_t thread_ptid)
6492 {
6493   if (ws->kind == TARGET_WAITKIND_FORKED
6494       || ws->kind == TARGET_WAITKIND_VFORKED)
6495     {
6496       if (event_pid == -1 || event_pid == ptid_get_pid (thread_ptid))
6497         return 1;
6498     }
6499
6500   return 0;
6501 }
6502
6503 /* Return the thread's pending status used to determine whether the
6504    thread is a fork parent stopped at a fork event.  */
6505
6506 static struct target_waitstatus *
6507 thread_pending_fork_status (struct thread_info *thread)
6508 {
6509   if (thread->suspend.waitstatus_pending_p)
6510     return &thread->suspend.waitstatus;
6511   else
6512     return &thread->pending_follow;
6513 }
6514
6515 /* Determine if THREAD is a pending fork parent thread.  */
6516
6517 static int
6518 is_pending_fork_parent_thread (struct thread_info *thread)
6519 {
6520   struct target_waitstatus *ws = thread_pending_fork_status (thread);
6521   int pid = -1;
6522
6523   return is_pending_fork_parent (ws, pid, thread->ptid);
6524 }
6525
6526 /* Check whether EVENT is a fork event, and if it is, remove the
6527    fork child from the context list passed in DATA.  */
6528
6529 static int
6530 remove_child_of_pending_fork (QUEUE (stop_reply_p) *q,
6531                               QUEUE_ITER (stop_reply_p) *iter,
6532                               stop_reply_p event,
6533                               void *data)
6534 {
6535   struct queue_iter_param *param = (struct queue_iter_param *) data;
6536   struct threads_listing_context *context
6537     = (struct threads_listing_context *) param->input;
6538
6539   if (event->ws.kind == TARGET_WAITKIND_FORKED
6540       || event->ws.kind == TARGET_WAITKIND_VFORKED
6541       || event->ws.kind == TARGET_WAITKIND_THREAD_EXITED)
6542     threads_listing_context_remove (&event->ws, context);
6543
6544   return 1;
6545 }
6546
6547 /* If CONTEXT contains any fork child threads that have not been
6548    reported yet, remove them from the CONTEXT list.  If such a
6549    thread exists it is because we are stopped at a fork catchpoint
6550    and have not yet called follow_fork, which will set up the
6551    host-side data structures for the new process.  */
6552
6553 static void
6554 remove_new_fork_children (struct threads_listing_context *context)
6555 {
6556   struct thread_info * thread;
6557   int pid = -1;
6558   struct notif_client *notif = &notif_client_stop;
6559   struct queue_iter_param param;
6560
6561   /* For any threads stopped at a fork event, remove the corresponding
6562      fork child threads from the CONTEXT list.  */
6563   ALL_NON_EXITED_THREADS (thread)
6564     {
6565       struct target_waitstatus *ws = thread_pending_fork_status (thread);
6566
6567       if (is_pending_fork_parent (ws, pid, thread->ptid))
6568         {
6569           threads_listing_context_remove (ws, context);
6570         }
6571     }
6572
6573   /* Check for any pending fork events (not reported or processed yet)
6574      in process PID and remove those fork child threads from the
6575      CONTEXT list as well.  */
6576   remote_notif_get_pending_events (notif);
6577   param.input = context;
6578   param.output = NULL;
6579   QUEUE_iterate (stop_reply_p, stop_reply_queue,
6580                  remove_child_of_pending_fork, &param);
6581 }
6582
6583 /* Check whether EVENT would prevent a global or process wildcard
6584    vCont action.  */
6585
6586 static int
6587 check_pending_event_prevents_wildcard_vcont_callback
6588   (QUEUE (stop_reply_p) *q,
6589    QUEUE_ITER (stop_reply_p) *iter,
6590    stop_reply_p event,
6591    void *data)
6592 {
6593   struct inferior *inf;
6594   int *may_global_wildcard_vcont = (int *) data;
6595
6596   if (event->ws.kind == TARGET_WAITKIND_NO_RESUMED
6597       || event->ws.kind == TARGET_WAITKIND_NO_HISTORY)
6598     return 1;
6599
6600   if (event->ws.kind == TARGET_WAITKIND_FORKED
6601       || event->ws.kind == TARGET_WAITKIND_VFORKED)
6602     *may_global_wildcard_vcont = 0;
6603
6604   inf = find_inferior_ptid (event->ptid);
6605
6606   /* This may be the first time we heard about this process.
6607      Regardless, we must not do a global wildcard resume, otherwise
6608      we'd resume this process too.  */
6609   *may_global_wildcard_vcont = 0;
6610   if (inf != NULL)
6611     inf->priv->may_wildcard_vcont = 0;
6612
6613   return 1;
6614 }
6615
6616 /* Check whether any event pending in the vStopped queue would prevent
6617    a global or process wildcard vCont action.  Clear
6618    *may_global_wildcard if we can't do a global wildcard (vCont;c),
6619    and clear the event inferior's may_wildcard_vcont flag if we can't
6620    do a process-wide wildcard resume (vCont;c:pPID.-1).  */
6621
6622 static void
6623 check_pending_events_prevent_wildcard_vcont (int *may_global_wildcard)
6624 {
6625   struct notif_client *notif = &notif_client_stop;
6626
6627   remote_notif_get_pending_events (notif);
6628   QUEUE_iterate (stop_reply_p, stop_reply_queue,
6629                  check_pending_event_prevents_wildcard_vcont_callback,
6630                  may_global_wildcard);
6631 }
6632
6633 /* Remove stop replies in the queue if its pid is equal to the given
6634    inferior's pid.  */
6635
6636 static int
6637 remove_stop_reply_for_inferior (QUEUE (stop_reply_p) *q,
6638                                 QUEUE_ITER (stop_reply_p) *iter,
6639                                 stop_reply_p event,
6640                                 void *data)
6641 {
6642   struct queue_iter_param *param = (struct queue_iter_param *) data;
6643   struct inferior *inf = (struct inferior *) param->input;
6644
6645   if (ptid_get_pid (event->ptid) == inf->pid)
6646     {
6647       stop_reply_xfree (event);
6648       QUEUE_remove_elem (stop_reply_p, q, iter);
6649     }
6650
6651   return 1;
6652 }
6653
6654 /* Discard all pending stop replies of inferior INF.  */
6655
6656 static void
6657 discard_pending_stop_replies (struct inferior *inf)
6658 {
6659   struct queue_iter_param param;
6660   struct stop_reply *reply;
6661   struct remote_state *rs = get_remote_state ();
6662   struct remote_notif_state *rns = rs->notif_state;
6663
6664   /* This function can be notified when an inferior exists.  When the
6665      target is not remote, the notification state is NULL.  */
6666   if (rs->remote_desc == NULL)
6667     return;
6668
6669   reply = (struct stop_reply *) rns->pending_event[notif_client_stop.id];
6670
6671   /* Discard the in-flight notification.  */
6672   if (reply != NULL && ptid_get_pid (reply->ptid) == inf->pid)
6673     {
6674       stop_reply_xfree (reply);
6675       rns->pending_event[notif_client_stop.id] = NULL;
6676     }
6677
6678   param.input = inf;
6679   param.output = NULL;
6680   /* Discard the stop replies we have already pulled with
6681      vStopped.  */
6682   QUEUE_iterate (stop_reply_p, stop_reply_queue,
6683                  remove_stop_reply_for_inferior, &param);
6684 }
6685
6686 /* If its remote state is equal to the given remote state,
6687    remove EVENT from the stop reply queue.  */
6688
6689 static int
6690 remove_stop_reply_of_remote_state (QUEUE (stop_reply_p) *q,
6691                                    QUEUE_ITER (stop_reply_p) *iter,
6692                                    stop_reply_p event,
6693                                    void *data)
6694 {
6695   struct queue_iter_param *param = (struct queue_iter_param *) data;
6696   struct remote_state *rs = (struct remote_state *) param->input;
6697
6698   if (event->rs == rs)
6699     {
6700       stop_reply_xfree (event);
6701       QUEUE_remove_elem (stop_reply_p, q, iter);
6702     }
6703
6704   return 1;
6705 }
6706
6707 /* Discard the stop replies for RS in stop_reply_queue.  */
6708
6709 static void
6710 discard_pending_stop_replies_in_queue (struct remote_state *rs)
6711 {
6712   struct queue_iter_param param;
6713
6714   param.input = rs;
6715   param.output = NULL;
6716   /* Discard the stop replies we have already pulled with
6717      vStopped.  */
6718   QUEUE_iterate (stop_reply_p, stop_reply_queue,
6719                  remove_stop_reply_of_remote_state, &param);
6720 }
6721
6722 /* A parameter to pass data in and out.  */
6723
6724 static int
6725 remote_notif_remove_once_on_match (QUEUE (stop_reply_p) *q,
6726                                    QUEUE_ITER (stop_reply_p) *iter,
6727                                    stop_reply_p event,
6728                                    void *data)
6729 {
6730   struct queue_iter_param *param = (struct queue_iter_param *) data;
6731   ptid_t *ptid = (ptid_t *) param->input;
6732
6733   if (ptid_match (event->ptid, *ptid))
6734     {
6735       param->output = event;
6736       QUEUE_remove_elem (stop_reply_p, q, iter);
6737       return 0;
6738     }
6739
6740   return 1;
6741 }
6742
6743 /* Remove the first reply in 'stop_reply_queue' which matches
6744    PTID.  */
6745
6746 static struct stop_reply *
6747 remote_notif_remove_queued_reply (ptid_t ptid)
6748 {
6749   struct queue_iter_param param;
6750
6751   param.input = &ptid;
6752   param.output = NULL;
6753
6754   QUEUE_iterate (stop_reply_p, stop_reply_queue,
6755                  remote_notif_remove_once_on_match, &param);
6756   if (notif_debug)
6757     fprintf_unfiltered (gdb_stdlog,
6758                         "notif: discard queued event: 'Stop' in %s\n",
6759                         target_pid_to_str (ptid));
6760
6761   return param.output;
6762 }
6763
6764 /* Look for a queued stop reply belonging to PTID.  If one is found,
6765    remove it from the queue, and return it.  Returns NULL if none is
6766    found.  If there are still queued events left to process, tell the
6767    event loop to get back to target_wait soon.  */
6768
6769 static struct stop_reply *
6770 queued_stop_reply (ptid_t ptid)
6771 {
6772   struct stop_reply *r = remote_notif_remove_queued_reply (ptid);
6773
6774   if (!QUEUE_is_empty (stop_reply_p, stop_reply_queue))
6775     /* There's still at least an event left.  */
6776     mark_async_event_handler (remote_async_inferior_event_token);
6777
6778   return r;
6779 }
6780
6781 /* Push a fully parsed stop reply in the stop reply queue.  Since we
6782    know that we now have at least one queued event left to pass to the
6783    core side, tell the event loop to get back to target_wait soon.  */
6784
6785 static void
6786 push_stop_reply (struct stop_reply *new_event)
6787 {
6788   QUEUE_enque (stop_reply_p, stop_reply_queue, new_event);
6789
6790   if (notif_debug)
6791     fprintf_unfiltered (gdb_stdlog,
6792                         "notif: push 'Stop' %s to queue %d\n",
6793                         target_pid_to_str (new_event->ptid),
6794                         QUEUE_length (stop_reply_p,
6795                                       stop_reply_queue));
6796
6797   mark_async_event_handler (remote_async_inferior_event_token);
6798 }
6799
6800 static int
6801 stop_reply_match_ptid_and_ws (QUEUE (stop_reply_p) *q,
6802                               QUEUE_ITER (stop_reply_p) *iter,
6803                               struct stop_reply *event,
6804                               void *data)
6805 {
6806   ptid_t *ptid = (ptid_t *) data;
6807
6808   return !(ptid_equal (*ptid, event->ptid)
6809            && event->ws.kind == TARGET_WAITKIND_STOPPED);
6810 }
6811
6812 /* Returns true if we have a stop reply for PTID.  */
6813
6814 static int
6815 peek_stop_reply (ptid_t ptid)
6816 {
6817   return !QUEUE_iterate (stop_reply_p, stop_reply_queue,
6818                          stop_reply_match_ptid_and_ws, &ptid);
6819 }
6820
6821 /* Helper for remote_parse_stop_reply.  Return nonzero if the substring
6822    starting with P and ending with PEND matches PREFIX.  */
6823
6824 static int
6825 strprefix (const char *p, const char *pend, const char *prefix)
6826 {
6827   for ( ; p < pend; p++, prefix++)
6828     if (*p != *prefix)
6829       return 0;
6830   return *prefix == '\0';
6831 }
6832
6833 /* Parse the stop reply in BUF.  Either the function succeeds, and the
6834    result is stored in EVENT, or throws an error.  */
6835
6836 static void
6837 remote_parse_stop_reply (char *buf, struct stop_reply *event)
6838 {
6839   remote_arch_state *rsa = NULL;
6840   ULONGEST addr;
6841   const char *p;
6842   int skipregs = 0;
6843
6844   event->ptid = null_ptid;
6845   event->rs = get_remote_state ();
6846   event->ws.kind = TARGET_WAITKIND_IGNORE;
6847   event->ws.value.integer = 0;
6848   event->stop_reason = TARGET_STOPPED_BY_NO_REASON;
6849   event->regcache = NULL;
6850   event->core = -1;
6851
6852   switch (buf[0])
6853     {
6854     case 'T':           /* Status with PC, SP, FP, ...  */
6855       /* Expedited reply, containing Signal, {regno, reg} repeat.  */
6856       /*  format is:  'Tssn...:r...;n...:r...;n...:r...;#cc', where
6857             ss = signal number
6858             n... = register number
6859             r... = register contents
6860       */
6861
6862       p = &buf[3];      /* after Txx */
6863       while (*p)
6864         {
6865           const char *p1;
6866           int fieldsize;
6867
6868           p1 = strchr (p, ':');
6869           if (p1 == NULL)
6870             error (_("Malformed packet(a) (missing colon): %s\n\
6871 Packet: '%s'\n"),
6872                    p, buf);
6873           if (p == p1)
6874             error (_("Malformed packet(a) (missing register number): %s\n\
6875 Packet: '%s'\n"),
6876                    p, buf);
6877
6878           /* Some "registers" are actually extended stop information.
6879              Note if you're adding a new entry here: GDB 7.9 and
6880              earlier assume that all register "numbers" that start
6881              with an hex digit are real register numbers.  Make sure
6882              the server only sends such a packet if it knows the
6883              client understands it.  */
6884
6885           if (strprefix (p, p1, "thread"))
6886             event->ptid = read_ptid (++p1, &p);
6887           else if (strprefix (p, p1, "syscall_entry"))
6888             {
6889               ULONGEST sysno;
6890
6891               event->ws.kind = TARGET_WAITKIND_SYSCALL_ENTRY;
6892               p = unpack_varlen_hex (++p1, &sysno);
6893               event->ws.value.syscall_number = (int) sysno;
6894             }
6895           else if (strprefix (p, p1, "syscall_return"))
6896             {
6897               ULONGEST sysno;
6898
6899               event->ws.kind = TARGET_WAITKIND_SYSCALL_RETURN;
6900               p = unpack_varlen_hex (++p1, &sysno);
6901               event->ws.value.syscall_number = (int) sysno;
6902             }
6903           else if (strprefix (p, p1, "watch")
6904                    || strprefix (p, p1, "rwatch")
6905                    || strprefix (p, p1, "awatch"))
6906             {
6907               event->stop_reason = TARGET_STOPPED_BY_WATCHPOINT;
6908               p = unpack_varlen_hex (++p1, &addr);
6909               event->watch_data_address = (CORE_ADDR) addr;
6910             }
6911           else if (strprefix (p, p1, "swbreak"))
6912             {
6913               event->stop_reason = TARGET_STOPPED_BY_SW_BREAKPOINT;
6914
6915               /* Make sure the stub doesn't forget to indicate support
6916                  with qSupported.  */
6917               if (packet_support (PACKET_swbreak_feature) != PACKET_ENABLE)
6918                 error (_("Unexpected swbreak stop reason"));
6919
6920               /* The value part is documented as "must be empty",
6921                  though we ignore it, in case we ever decide to make
6922                  use of it in a backward compatible way.  */
6923               p = strchrnul (p1 + 1, ';');
6924             }
6925           else if (strprefix (p, p1, "hwbreak"))
6926             {
6927               event->stop_reason = TARGET_STOPPED_BY_HW_BREAKPOINT;
6928
6929               /* Make sure the stub doesn't forget to indicate support
6930                  with qSupported.  */
6931               if (packet_support (PACKET_hwbreak_feature) != PACKET_ENABLE)
6932                 error (_("Unexpected hwbreak stop reason"));
6933
6934               /* See above.  */
6935               p = strchrnul (p1 + 1, ';');
6936             }
6937           else if (strprefix (p, p1, "library"))
6938             {
6939               event->ws.kind = TARGET_WAITKIND_LOADED;
6940               p = strchrnul (p1 + 1, ';');
6941             }
6942           else if (strprefix (p, p1, "replaylog"))
6943             {
6944               event->ws.kind = TARGET_WAITKIND_NO_HISTORY;
6945               /* p1 will indicate "begin" or "end", but it makes
6946                  no difference for now, so ignore it.  */
6947               p = strchrnul (p1 + 1, ';');
6948             }
6949           else if (strprefix (p, p1, "core"))
6950             {
6951               ULONGEST c;
6952
6953               p = unpack_varlen_hex (++p1, &c);
6954               event->core = c;
6955             }
6956           else if (strprefix (p, p1, "fork"))
6957             {
6958               event->ws.value.related_pid = read_ptid (++p1, &p);
6959               event->ws.kind = TARGET_WAITKIND_FORKED;
6960             }
6961           else if (strprefix (p, p1, "vfork"))
6962             {
6963               event->ws.value.related_pid = read_ptid (++p1, &p);
6964               event->ws.kind = TARGET_WAITKIND_VFORKED;
6965             }
6966           else if (strprefix (p, p1, "vforkdone"))
6967             {
6968               event->ws.kind = TARGET_WAITKIND_VFORK_DONE;
6969               p = strchrnul (p1 + 1, ';');
6970             }
6971           else if (strprefix (p, p1, "exec"))
6972             {
6973               ULONGEST ignored;
6974               char pathname[PATH_MAX];
6975               int pathlen;
6976
6977               /* Determine the length of the execd pathname.  */
6978               p = unpack_varlen_hex (++p1, &ignored);
6979               pathlen = (p - p1) / 2;
6980
6981               /* Save the pathname for event reporting and for
6982                  the next run command.  */
6983               hex2bin (p1, (gdb_byte *) pathname, pathlen);
6984               pathname[pathlen] = '\0';
6985
6986               /* This is freed during event handling.  */
6987               event->ws.value.execd_pathname = xstrdup (pathname);
6988               event->ws.kind = TARGET_WAITKIND_EXECD;
6989
6990               /* Skip the registers included in this packet, since
6991                  they may be for an architecture different from the
6992                  one used by the original program.  */
6993               skipregs = 1;
6994             }
6995           else if (strprefix (p, p1, "create"))
6996             {
6997               event->ws.kind = TARGET_WAITKIND_THREAD_CREATED;
6998               p = strchrnul (p1 + 1, ';');
6999             }
7000           else
7001             {
7002               ULONGEST pnum;
7003               const char *p_temp;
7004
7005               if (skipregs)
7006                 {
7007                   p = strchrnul (p1 + 1, ';');
7008                   p++;
7009                   continue;
7010                 }
7011
7012               /* Maybe a real ``P'' register number.  */
7013               p_temp = unpack_varlen_hex (p, &pnum);
7014               /* If the first invalid character is the colon, we got a
7015                  register number.  Otherwise, it's an unknown stop
7016                  reason.  */
7017               if (p_temp == p1)
7018                 {
7019                   /* If we haven't parsed the event's thread yet, find
7020                      it now, in order to find the architecture of the
7021                      reported expedited registers.  */
7022                   if (event->ptid == null_ptid)
7023                     {
7024                       const char *thr = strstr (p1 + 1, ";thread:");
7025                       if (thr != NULL)
7026                         event->ptid = read_ptid (thr + strlen (";thread:"),
7027                                                  NULL);
7028                       else
7029                         event->ptid = magic_null_ptid;
7030                     }
7031
7032                   if (rsa == NULL)
7033                     {
7034                       inferior *inf = (event->ptid == null_ptid
7035                                        ? NULL
7036                                        : find_inferior_ptid (event->ptid));
7037                       /* If this is the first time we learn anything
7038                          about this process, skip the registers
7039                          included in this packet, since we don't yet
7040                          know which architecture to use to parse them.
7041                          We'll determine the architecture later when
7042                          we process the stop reply and retrieve the
7043                          target description, via
7044                          remote_notice_new_inferior ->
7045                          post_create_inferior.  */
7046                       if (inf == NULL)
7047                         {
7048                           p = strchrnul (p1 + 1, ';');
7049                           p++;
7050                           continue;
7051                         }
7052
7053                       event->arch = inf->gdbarch;
7054                       rsa = get_remote_arch_state (event->arch);
7055                     }
7056
7057                   packet_reg *reg
7058                     = packet_reg_from_pnum (event->arch, rsa, pnum);
7059                   cached_reg_t cached_reg;
7060
7061                   if (reg == NULL)
7062                     error (_("Remote sent bad register number %s: %s\n\
7063 Packet: '%s'\n"),
7064                            hex_string (pnum), p, buf);
7065
7066                   cached_reg.num = reg->regnum;
7067                   cached_reg.data = (gdb_byte *)
7068                     xmalloc (register_size (event->arch, reg->regnum));
7069
7070                   p = p1 + 1;
7071                   fieldsize = hex2bin (p, cached_reg.data,
7072                                        register_size (event->arch, reg->regnum));
7073                   p += 2 * fieldsize;
7074                   if (fieldsize < register_size (event->arch, reg->regnum))
7075                     warning (_("Remote reply is too short: %s"), buf);
7076
7077                   VEC_safe_push (cached_reg_t, event->regcache, &cached_reg);
7078                 }
7079               else
7080                 {
7081                   /* Not a number.  Silently skip unknown optional
7082                      info.  */
7083                   p = strchrnul (p1 + 1, ';');
7084                 }
7085             }
7086
7087           if (*p != ';')
7088             error (_("Remote register badly formatted: %s\nhere: %s"),
7089                    buf, p);
7090           ++p;
7091         }
7092
7093       if (event->ws.kind != TARGET_WAITKIND_IGNORE)
7094         break;
7095
7096       /* fall through */
7097     case 'S':           /* Old style status, just signal only.  */
7098       {
7099         int sig;
7100
7101         event->ws.kind = TARGET_WAITKIND_STOPPED;
7102         sig = (fromhex (buf[1]) << 4) + fromhex (buf[2]);
7103         if (GDB_SIGNAL_FIRST <= sig && sig < GDB_SIGNAL_LAST)
7104           event->ws.value.sig = (enum gdb_signal) sig;
7105         else
7106           event->ws.value.sig = GDB_SIGNAL_UNKNOWN;
7107       }
7108       break;
7109     case 'w':           /* Thread exited.  */
7110       {
7111         const char *p;
7112         ULONGEST value;
7113
7114         event->ws.kind = TARGET_WAITKIND_THREAD_EXITED;
7115         p = unpack_varlen_hex (&buf[1], &value);
7116         event->ws.value.integer = value;
7117         if (*p != ';')
7118           error (_("stop reply packet badly formatted: %s"), buf);
7119         event->ptid = read_ptid (++p, NULL);
7120         break;
7121       }
7122     case 'W':           /* Target exited.  */
7123     case 'X':
7124       {
7125         const char *p;
7126         int pid;
7127         ULONGEST value;
7128
7129         /* GDB used to accept only 2 hex chars here.  Stubs should
7130            only send more if they detect GDB supports multi-process
7131            support.  */
7132         p = unpack_varlen_hex (&buf[1], &value);
7133
7134         if (buf[0] == 'W')
7135           {
7136             /* The remote process exited.  */
7137             event->ws.kind = TARGET_WAITKIND_EXITED;
7138             event->ws.value.integer = value;
7139           }
7140         else
7141           {
7142             /* The remote process exited with a signal.  */
7143             event->ws.kind = TARGET_WAITKIND_SIGNALLED;
7144             if (GDB_SIGNAL_FIRST <= value && value < GDB_SIGNAL_LAST)
7145               event->ws.value.sig = (enum gdb_signal) value;
7146             else
7147               event->ws.value.sig = GDB_SIGNAL_UNKNOWN;
7148           }
7149
7150         /* If no process is specified, assume inferior_ptid.  */
7151         pid = ptid_get_pid (inferior_ptid);
7152         if (*p == '\0')
7153           ;
7154         else if (*p == ';')
7155           {
7156             p++;
7157
7158             if (*p == '\0')
7159               ;
7160             else if (startswith (p, "process:"))
7161               {
7162                 ULONGEST upid;
7163
7164                 p += sizeof ("process:") - 1;
7165                 unpack_varlen_hex (p, &upid);
7166                 pid = upid;
7167               }
7168             else
7169               error (_("unknown stop reply packet: %s"), buf);
7170           }
7171         else
7172           error (_("unknown stop reply packet: %s"), buf);
7173         event->ptid = pid_to_ptid (pid);
7174       }
7175       break;
7176     case 'N':
7177       event->ws.kind = TARGET_WAITKIND_NO_RESUMED;
7178       event->ptid = minus_one_ptid;
7179       break;
7180     }
7181
7182   if (target_is_non_stop_p () && ptid_equal (event->ptid, null_ptid))
7183     error (_("No process or thread specified in stop reply: %s"), buf);
7184 }
7185
7186 /* When the stub wants to tell GDB about a new notification reply, it
7187    sends a notification (%Stop, for example).  Those can come it at
7188    any time, hence, we have to make sure that any pending
7189    putpkt/getpkt sequence we're making is finished, before querying
7190    the stub for more events with the corresponding ack command
7191    (vStopped, for example).  E.g., if we started a vStopped sequence
7192    immediately upon receiving the notification, something like this
7193    could happen:
7194
7195     1.1) --> Hg 1
7196     1.2) <-- OK
7197     1.3) --> g
7198     1.4) <-- %Stop
7199     1.5) --> vStopped
7200     1.6) <-- (registers reply to step #1.3)
7201
7202    Obviously, the reply in step #1.6 would be unexpected to a vStopped
7203    query.
7204
7205    To solve this, whenever we parse a %Stop notification successfully,
7206    we mark the REMOTE_ASYNC_GET_PENDING_EVENTS_TOKEN, and carry on
7207    doing whatever we were doing:
7208
7209     2.1) --> Hg 1
7210     2.2) <-- OK
7211     2.3) --> g
7212     2.4) <-- %Stop
7213       <GDB marks the REMOTE_ASYNC_GET_PENDING_EVENTS_TOKEN>
7214     2.5) <-- (registers reply to step #2.3)
7215
7216    Eventualy after step #2.5, we return to the event loop, which
7217    notices there's an event on the
7218    REMOTE_ASYNC_GET_PENDING_EVENTS_TOKEN event and calls the
7219    associated callback --- the function below.  At this point, we're
7220    always safe to start a vStopped sequence. :
7221
7222     2.6) --> vStopped
7223     2.7) <-- T05 thread:2
7224     2.8) --> vStopped
7225     2.9) --> OK
7226 */
7227
7228 void
7229 remote_notif_get_pending_events (struct notif_client *nc)
7230 {
7231   struct remote_state *rs = get_remote_state ();
7232
7233   if (rs->notif_state->pending_event[nc->id] != NULL)
7234     {
7235       if (notif_debug)
7236         fprintf_unfiltered (gdb_stdlog,
7237                             "notif: process: '%s' ack pending event\n",
7238                             nc->name);
7239
7240       /* acknowledge */
7241       nc->ack (nc, rs->buf, rs->notif_state->pending_event[nc->id]);
7242       rs->notif_state->pending_event[nc->id] = NULL;
7243
7244       while (1)
7245         {
7246           getpkt (&rs->buf, &rs->buf_size, 0);
7247           if (strcmp (rs->buf, "OK") == 0)
7248             break;
7249           else
7250             remote_notif_ack (nc, rs->buf);
7251         }
7252     }
7253   else
7254     {
7255       if (notif_debug)
7256         fprintf_unfiltered (gdb_stdlog,
7257                             "notif: process: '%s' no pending reply\n",
7258                             nc->name);
7259     }
7260 }
7261
7262 /* Called when it is decided that STOP_REPLY holds the info of the
7263    event that is to be returned to the core.  This function always
7264    destroys STOP_REPLY.  */
7265
7266 static ptid_t
7267 process_stop_reply (struct stop_reply *stop_reply,
7268                     struct target_waitstatus *status)
7269 {
7270   ptid_t ptid;
7271
7272   *status = stop_reply->ws;
7273   ptid = stop_reply->ptid;
7274
7275   /* If no thread/process was reported by the stub, assume the current
7276      inferior.  */
7277   if (ptid_equal (ptid, null_ptid))
7278     ptid = inferior_ptid;
7279
7280   if (status->kind != TARGET_WAITKIND_EXITED
7281       && status->kind != TARGET_WAITKIND_SIGNALLED
7282       && status->kind != TARGET_WAITKIND_NO_RESUMED)
7283     {
7284       struct private_thread_info *remote_thr;
7285
7286       /* Expedited registers.  */
7287       if (stop_reply->regcache)
7288         {
7289           struct regcache *regcache
7290             = get_thread_arch_regcache (ptid, stop_reply->arch);
7291           cached_reg_t *reg;
7292           int ix;
7293
7294           for (ix = 0;
7295                VEC_iterate (cached_reg_t, stop_reply->regcache, ix, reg);
7296                ix++)
7297           {
7298             regcache_raw_supply (regcache, reg->num, reg->data);
7299             xfree (reg->data);
7300           }
7301
7302           VEC_free (cached_reg_t, stop_reply->regcache);
7303         }
7304
7305       remote_notice_new_inferior (ptid, 0);
7306       remote_thr = get_private_info_ptid (ptid);
7307       remote_thr->core = stop_reply->core;
7308       remote_thr->stop_reason = stop_reply->stop_reason;
7309       remote_thr->watch_data_address = stop_reply->watch_data_address;
7310       remote_thr->vcont_resumed = 0;
7311     }
7312
7313   stop_reply_xfree (stop_reply);
7314   return ptid;
7315 }
7316
7317 /* The non-stop mode version of target_wait.  */
7318
7319 static ptid_t
7320 remote_wait_ns (ptid_t ptid, struct target_waitstatus *status, int options)
7321 {
7322   struct remote_state *rs = get_remote_state ();
7323   struct stop_reply *stop_reply;
7324   int ret;
7325   int is_notif = 0;
7326
7327   /* If in non-stop mode, get out of getpkt even if a
7328      notification is received.  */
7329
7330   ret = getpkt_or_notif_sane (&rs->buf, &rs->buf_size,
7331                               0 /* forever */, &is_notif);
7332   while (1)
7333     {
7334       if (ret != -1 && !is_notif)
7335         switch (rs->buf[0])
7336           {
7337           case 'E':             /* Error of some sort.  */
7338             /* We're out of sync with the target now.  Did it continue
7339                or not?  We can't tell which thread it was in non-stop,
7340                so just ignore this.  */
7341             warning (_("Remote failure reply: %s"), rs->buf);
7342             break;
7343           case 'O':             /* Console output.  */
7344             remote_console_output (rs->buf + 1);
7345             break;
7346           default:
7347             warning (_("Invalid remote reply: %s"), rs->buf);
7348             break;
7349           }
7350
7351       /* Acknowledge a pending stop reply that may have arrived in the
7352          mean time.  */
7353       if (rs->notif_state->pending_event[notif_client_stop.id] != NULL)
7354         remote_notif_get_pending_events (&notif_client_stop);
7355
7356       /* If indeed we noticed a stop reply, we're done.  */
7357       stop_reply = queued_stop_reply (ptid);
7358       if (stop_reply != NULL)
7359         return process_stop_reply (stop_reply, status);
7360
7361       /* Still no event.  If we're just polling for an event, then
7362          return to the event loop.  */
7363       if (options & TARGET_WNOHANG)
7364         {
7365           status->kind = TARGET_WAITKIND_IGNORE;
7366           return minus_one_ptid;
7367         }
7368
7369       /* Otherwise do a blocking wait.  */
7370       ret = getpkt_or_notif_sane (&rs->buf, &rs->buf_size,
7371                                   1 /* forever */, &is_notif);
7372     }
7373 }
7374
7375 /* Wait until the remote machine stops, then return, storing status in
7376    STATUS just as `wait' would.  */
7377
7378 static ptid_t
7379 remote_wait_as (ptid_t ptid, struct target_waitstatus *status, int options)
7380 {
7381   struct remote_state *rs = get_remote_state ();
7382   ptid_t event_ptid = null_ptid;
7383   char *buf;
7384   struct stop_reply *stop_reply;
7385
7386  again:
7387
7388   status->kind = TARGET_WAITKIND_IGNORE;
7389   status->value.integer = 0;
7390
7391   stop_reply = queued_stop_reply (ptid);
7392   if (stop_reply != NULL)
7393     return process_stop_reply (stop_reply, status);
7394
7395   if (rs->cached_wait_status)
7396     /* Use the cached wait status, but only once.  */
7397     rs->cached_wait_status = 0;
7398   else
7399     {
7400       int ret;
7401       int is_notif;
7402       int forever = ((options & TARGET_WNOHANG) == 0
7403                      && wait_forever_enabled_p);
7404
7405       if (!rs->waiting_for_stop_reply)
7406         {
7407           status->kind = TARGET_WAITKIND_NO_RESUMED;
7408           return minus_one_ptid;
7409         }
7410
7411       /* FIXME: cagney/1999-09-27: If we're in async mode we should
7412          _never_ wait for ever -> test on target_is_async_p().
7413          However, before we do that we need to ensure that the caller
7414          knows how to take the target into/out of async mode.  */
7415       ret = getpkt_or_notif_sane (&rs->buf, &rs->buf_size,
7416                                   forever, &is_notif);
7417
7418       /* GDB gets a notification.  Return to core as this event is
7419          not interesting.  */
7420       if (ret != -1 && is_notif)
7421         return minus_one_ptid;
7422
7423       if (ret == -1 && (options & TARGET_WNOHANG) != 0)
7424         return minus_one_ptid;
7425     }
7426
7427   buf = rs->buf;
7428
7429   /* Assume that the target has acknowledged Ctrl-C unless we receive
7430      an 'F' or 'O' packet.  */
7431   if (buf[0] != 'F' && buf[0] != 'O')
7432     rs->ctrlc_pending_p = 0;
7433
7434   switch (buf[0])
7435     {
7436     case 'E':           /* Error of some sort.  */
7437       /* We're out of sync with the target now.  Did it continue or
7438          not?  Not is more likely, so report a stop.  */
7439       rs->waiting_for_stop_reply = 0;
7440
7441       warning (_("Remote failure reply: %s"), buf);
7442       status->kind = TARGET_WAITKIND_STOPPED;
7443       status->value.sig = GDB_SIGNAL_0;
7444       break;
7445     case 'F':           /* File-I/O request.  */
7446       /* GDB may access the inferior memory while handling the File-I/O
7447          request, but we don't want GDB accessing memory while waiting
7448          for a stop reply.  See the comments in putpkt_binary.  Set
7449          waiting_for_stop_reply to 0 temporarily.  */
7450       rs->waiting_for_stop_reply = 0;
7451       remote_fileio_request (buf, rs->ctrlc_pending_p);
7452       rs->ctrlc_pending_p = 0;
7453       /* GDB handled the File-I/O request, and the target is running
7454          again.  Keep waiting for events.  */
7455       rs->waiting_for_stop_reply = 1;
7456       break;
7457     case 'N': case 'T': case 'S': case 'X': case 'W':
7458       {
7459         struct stop_reply *stop_reply;
7460
7461         /* There is a stop reply to handle.  */
7462         rs->waiting_for_stop_reply = 0;
7463
7464         stop_reply
7465           = (struct stop_reply *) remote_notif_parse (&notif_client_stop,
7466                                                       rs->buf);
7467
7468         event_ptid = process_stop_reply (stop_reply, status);
7469         break;
7470       }
7471     case 'O':           /* Console output.  */
7472       remote_console_output (buf + 1);
7473       break;
7474     case '\0':
7475       if (rs->last_sent_signal != GDB_SIGNAL_0)
7476         {
7477           /* Zero length reply means that we tried 'S' or 'C' and the
7478              remote system doesn't support it.  */
7479           target_terminal::ours_for_output ();
7480           printf_filtered
7481             ("Can't send signals to this remote system.  %s not sent.\n",
7482              gdb_signal_to_name (rs->last_sent_signal));
7483           rs->last_sent_signal = GDB_SIGNAL_0;
7484           target_terminal::inferior ();
7485
7486           strcpy (buf, rs->last_sent_step ? "s" : "c");
7487           putpkt (buf);
7488           break;
7489         }
7490       /* else fallthrough */
7491     default:
7492       warning (_("Invalid remote reply: %s"), buf);
7493       break;
7494     }
7495
7496   if (status->kind == TARGET_WAITKIND_NO_RESUMED)
7497     return minus_one_ptid;
7498   else if (status->kind == TARGET_WAITKIND_IGNORE)
7499     {
7500       /* Nothing interesting happened.  If we're doing a non-blocking
7501          poll, we're done.  Otherwise, go back to waiting.  */
7502       if (options & TARGET_WNOHANG)
7503         return minus_one_ptid;
7504       else
7505         goto again;
7506     }
7507   else if (status->kind != TARGET_WAITKIND_EXITED
7508            && status->kind != TARGET_WAITKIND_SIGNALLED)
7509     {
7510       if (!ptid_equal (event_ptid, null_ptid))
7511         record_currthread (rs, event_ptid);
7512       else
7513         event_ptid = inferior_ptid;
7514     }
7515   else
7516     /* A process exit.  Invalidate our notion of current thread.  */
7517     record_currthread (rs, minus_one_ptid);
7518
7519   return event_ptid;
7520 }
7521
7522 /* Wait until the remote machine stops, then return, storing status in
7523    STATUS just as `wait' would.  */
7524
7525 static ptid_t
7526 remote_wait (struct target_ops *ops,
7527              ptid_t ptid, struct target_waitstatus *status, int options)
7528 {
7529   ptid_t event_ptid;
7530
7531   if (target_is_non_stop_p ())
7532     event_ptid = remote_wait_ns (ptid, status, options);
7533   else
7534     event_ptid = remote_wait_as (ptid, status, options);
7535
7536   if (target_is_async_p ())
7537     {
7538       /* If there are are events left in the queue tell the event loop
7539          to return here.  */
7540       if (!QUEUE_is_empty (stop_reply_p, stop_reply_queue))
7541         mark_async_event_handler (remote_async_inferior_event_token);
7542     }
7543
7544   return event_ptid;
7545 }
7546
7547 /* Fetch a single register using a 'p' packet.  */
7548
7549 static int
7550 fetch_register_using_p (struct regcache *regcache, struct packet_reg *reg)
7551 {
7552   struct gdbarch *gdbarch = get_regcache_arch (regcache);
7553   struct remote_state *rs = get_remote_state ();
7554   char *buf, *p;
7555   gdb_byte *regp = (gdb_byte *) alloca (register_size (gdbarch, reg->regnum));
7556   int i;
7557
7558   if (packet_support (PACKET_p) == PACKET_DISABLE)
7559     return 0;
7560
7561   if (reg->pnum == -1)
7562     return 0;
7563
7564   p = rs->buf;
7565   *p++ = 'p';
7566   p += hexnumstr (p, reg->pnum);
7567   *p++ = '\0';
7568   putpkt (rs->buf);
7569   getpkt (&rs->buf, &rs->buf_size, 0);
7570
7571   buf = rs->buf;
7572
7573   switch (packet_ok (buf, &remote_protocol_packets[PACKET_p]))
7574     {
7575     case PACKET_OK:
7576       break;
7577     case PACKET_UNKNOWN:
7578       return 0;
7579     case PACKET_ERROR:
7580       error (_("Could not fetch register \"%s\"; remote failure reply '%s'"),
7581              gdbarch_register_name (get_regcache_arch (regcache), 
7582                                     reg->regnum), 
7583              buf);
7584     }
7585
7586   /* If this register is unfetchable, tell the regcache.  */
7587   if (buf[0] == 'x')
7588     {
7589       regcache_raw_supply (regcache, reg->regnum, NULL);
7590       return 1;
7591     }
7592
7593   /* Otherwise, parse and supply the value.  */
7594   p = buf;
7595   i = 0;
7596   while (p[0] != 0)
7597     {
7598       if (p[1] == 0)
7599         error (_("fetch_register_using_p: early buf termination"));
7600
7601       regp[i++] = fromhex (p[0]) * 16 + fromhex (p[1]);
7602       p += 2;
7603     }
7604   regcache_raw_supply (regcache, reg->regnum, regp);
7605   return 1;
7606 }
7607
7608 /* Fetch the registers included in the target's 'g' packet.  */
7609
7610 static int
7611 send_g_packet (void)
7612 {
7613   struct remote_state *rs = get_remote_state ();
7614   int buf_len;
7615
7616   xsnprintf (rs->buf, get_remote_packet_size (), "g");
7617   remote_send (&rs->buf, &rs->buf_size);
7618
7619   /* We can get out of synch in various cases.  If the first character
7620      in the buffer is not a hex character, assume that has happened
7621      and try to fetch another packet to read.  */
7622   while ((rs->buf[0] < '0' || rs->buf[0] > '9')
7623          && (rs->buf[0] < 'A' || rs->buf[0] > 'F')
7624          && (rs->buf[0] < 'a' || rs->buf[0] > 'f')
7625          && rs->buf[0] != 'x')  /* New: unavailable register value.  */
7626     {
7627       if (remote_debug)
7628         fprintf_unfiltered (gdb_stdlog,
7629                             "Bad register packet; fetching a new packet\n");
7630       getpkt (&rs->buf, &rs->buf_size, 0);
7631     }
7632
7633   buf_len = strlen (rs->buf);
7634
7635   /* Sanity check the received packet.  */
7636   if (buf_len % 2 != 0)
7637     error (_("Remote 'g' packet reply is of odd length: %s"), rs->buf);
7638
7639   return buf_len / 2;
7640 }
7641
7642 static void
7643 process_g_packet (struct regcache *regcache)
7644 {
7645   struct gdbarch *gdbarch = get_regcache_arch (regcache);
7646   struct remote_state *rs = get_remote_state ();
7647   remote_arch_state *rsa = get_remote_arch_state (gdbarch);
7648   int i, buf_len;
7649   char *p;
7650   char *regs;
7651
7652   buf_len = strlen (rs->buf);
7653
7654   /* Further sanity checks, with knowledge of the architecture.  */
7655   if (buf_len > 2 * rsa->sizeof_g_packet)
7656     error (_("Remote 'g' packet reply is too long (expected %ld bytes, got %d "
7657              "bytes): %s"), rsa->sizeof_g_packet, buf_len / 2, rs->buf);
7658
7659   /* Save the size of the packet sent to us by the target.  It is used
7660      as a heuristic when determining the max size of packets that the
7661      target can safely receive.  */
7662   if (rsa->actual_register_packet_size == 0)
7663     rsa->actual_register_packet_size = buf_len;
7664
7665   /* If this is smaller than we guessed the 'g' packet would be,
7666      update our records.  A 'g' reply that doesn't include a register's
7667      value implies either that the register is not available, or that
7668      the 'p' packet must be used.  */
7669   if (buf_len < 2 * rsa->sizeof_g_packet)
7670     {
7671       long sizeof_g_packet = buf_len / 2;
7672
7673       for (i = 0; i < gdbarch_num_regs (gdbarch); i++)
7674         {
7675           long offset = rsa->regs[i].offset;
7676           long reg_size = register_size (gdbarch, i);
7677
7678           if (rsa->regs[i].pnum == -1)
7679             continue;
7680
7681           if (offset >= sizeof_g_packet)
7682             rsa->regs[i].in_g_packet = 0;
7683           else if (offset + reg_size > sizeof_g_packet)
7684             error (_("Truncated register %d in remote 'g' packet"), i);
7685           else
7686             rsa->regs[i].in_g_packet = 1;
7687         }
7688
7689       /* Looks valid enough, we can assume this is the correct length
7690          for a 'g' packet.  It's important not to adjust
7691          rsa->sizeof_g_packet if we have truncated registers otherwise
7692          this "if" won't be run the next time the method is called
7693          with a packet of the same size and one of the internal errors
7694          below will trigger instead.  */
7695       rsa->sizeof_g_packet = sizeof_g_packet;
7696     }
7697
7698   regs = (char *) alloca (rsa->sizeof_g_packet);
7699
7700   /* Unimplemented registers read as all bits zero.  */
7701   memset (regs, 0, rsa->sizeof_g_packet);
7702
7703   /* Reply describes registers byte by byte, each byte encoded as two
7704      hex characters.  Suck them all up, then supply them to the
7705      register cacheing/storage mechanism.  */
7706
7707   p = rs->buf;
7708   for (i = 0; i < rsa->sizeof_g_packet; i++)
7709     {
7710       if (p[0] == 0 || p[1] == 0)
7711         /* This shouldn't happen - we adjusted sizeof_g_packet above.  */
7712         internal_error (__FILE__, __LINE__,
7713                         _("unexpected end of 'g' packet reply"));
7714
7715       if (p[0] == 'x' && p[1] == 'x')
7716         regs[i] = 0;            /* 'x' */
7717       else
7718         regs[i] = fromhex (p[0]) * 16 + fromhex (p[1]);
7719       p += 2;
7720     }
7721
7722   for (i = 0; i < gdbarch_num_regs (gdbarch); i++)
7723     {
7724       struct packet_reg *r = &rsa->regs[i];
7725       long reg_size = register_size (gdbarch, i);
7726
7727       if (r->in_g_packet)
7728         {
7729           if ((r->offset + reg_size) * 2 > strlen (rs->buf))
7730             /* This shouldn't happen - we adjusted in_g_packet above.  */
7731             internal_error (__FILE__, __LINE__,
7732                             _("unexpected end of 'g' packet reply"));
7733           else if (rs->buf[r->offset * 2] == 'x')
7734             {
7735               gdb_assert (r->offset * 2 < strlen (rs->buf));
7736               /* The register isn't available, mark it as such (at
7737                  the same time setting the value to zero).  */
7738               regcache_raw_supply (regcache, r->regnum, NULL);
7739             }
7740           else
7741             regcache_raw_supply (regcache, r->regnum,
7742                                  regs + r->offset);
7743         }
7744     }
7745 }
7746
7747 static void
7748 fetch_registers_using_g (struct regcache *regcache)
7749 {
7750   send_g_packet ();
7751   process_g_packet (regcache);
7752 }
7753
7754 /* Make the remote selected traceframe match GDB's selected
7755    traceframe.  */
7756
7757 static void
7758 set_remote_traceframe (void)
7759 {
7760   int newnum;
7761   struct remote_state *rs = get_remote_state ();
7762
7763   if (rs->remote_traceframe_number == get_traceframe_number ())
7764     return;
7765
7766   /* Avoid recursion, remote_trace_find calls us again.  */
7767   rs->remote_traceframe_number = get_traceframe_number ();
7768
7769   newnum = target_trace_find (tfind_number,
7770                               get_traceframe_number (), 0, 0, NULL);
7771
7772   /* Should not happen.  If it does, all bets are off.  */
7773   if (newnum != get_traceframe_number ())
7774     warning (_("could not set remote traceframe"));
7775 }
7776
7777 static void
7778 remote_fetch_registers (struct target_ops *ops,
7779                         struct regcache *regcache, int regnum)
7780 {
7781   struct gdbarch *gdbarch = get_regcache_arch (regcache);
7782   remote_arch_state *rsa = get_remote_arch_state (gdbarch);
7783   int i;
7784
7785   set_remote_traceframe ();
7786   set_general_thread (regcache_get_ptid (regcache));
7787
7788   if (regnum >= 0)
7789     {
7790       packet_reg *reg = packet_reg_from_regnum (gdbarch, rsa, regnum);
7791
7792       gdb_assert (reg != NULL);
7793
7794       /* If this register might be in the 'g' packet, try that first -
7795          we are likely to read more than one register.  If this is the
7796          first 'g' packet, we might be overly optimistic about its
7797          contents, so fall back to 'p'.  */
7798       if (reg->in_g_packet)
7799         {
7800           fetch_registers_using_g (regcache);
7801           if (reg->in_g_packet)
7802             return;
7803         }
7804
7805       if (fetch_register_using_p (regcache, reg))
7806         return;
7807
7808       /* This register is not available.  */
7809       regcache_raw_supply (regcache, reg->regnum, NULL);
7810
7811       return;
7812     }
7813
7814   fetch_registers_using_g (regcache);
7815
7816   for (i = 0; i < gdbarch_num_regs (gdbarch); i++)
7817     if (!rsa->regs[i].in_g_packet)
7818       if (!fetch_register_using_p (regcache, &rsa->regs[i]))
7819         {
7820           /* This register is not available.  */
7821           regcache_raw_supply (regcache, i, NULL);
7822         }
7823 }
7824
7825 /* Prepare to store registers.  Since we may send them all (using a
7826    'G' request), we have to read out the ones we don't want to change
7827    first.  */
7828
7829 static void
7830 remote_prepare_to_store (struct target_ops *self, struct regcache *regcache)
7831 {
7832   remote_arch_state *rsa = get_remote_arch_state (regcache->arch ());
7833   int i;
7834
7835   /* Make sure the entire registers array is valid.  */
7836   switch (packet_support (PACKET_P))
7837     {
7838     case PACKET_DISABLE:
7839     case PACKET_SUPPORT_UNKNOWN:
7840       /* Make sure all the necessary registers are cached.  */
7841       for (i = 0; i < gdbarch_num_regs (get_regcache_arch (regcache)); i++)
7842         if (rsa->regs[i].in_g_packet)
7843           regcache_raw_update (regcache, rsa->regs[i].regnum);
7844       break;
7845     case PACKET_ENABLE:
7846       break;
7847     }
7848 }
7849
7850 /* Helper: Attempt to store REGNUM using the P packet.  Return fail IFF
7851    packet was not recognized.  */
7852
7853 static int
7854 store_register_using_P (const struct regcache *regcache, 
7855                         struct packet_reg *reg)
7856 {
7857   struct gdbarch *gdbarch = get_regcache_arch (regcache);
7858   struct remote_state *rs = get_remote_state ();
7859   /* Try storing a single register.  */
7860   char *buf = rs->buf;
7861   gdb_byte *regp = (gdb_byte *) alloca (register_size (gdbarch, reg->regnum));
7862   char *p;
7863
7864   if (packet_support (PACKET_P) == PACKET_DISABLE)
7865     return 0;
7866
7867   if (reg->pnum == -1)
7868     return 0;
7869
7870   xsnprintf (buf, get_remote_packet_size (), "P%s=", phex_nz (reg->pnum, 0));
7871   p = buf + strlen (buf);
7872   regcache_raw_collect (regcache, reg->regnum, regp);
7873   bin2hex (regp, p, register_size (gdbarch, reg->regnum));
7874   putpkt (rs->buf);
7875   getpkt (&rs->buf, &rs->buf_size, 0);
7876
7877   switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_P]))
7878     {
7879     case PACKET_OK:
7880       return 1;
7881     case PACKET_ERROR:
7882       error (_("Could not write register \"%s\"; remote failure reply '%s'"),
7883              gdbarch_register_name (gdbarch, reg->regnum), rs->buf);
7884     case PACKET_UNKNOWN:
7885       return 0;
7886     default:
7887       internal_error (__FILE__, __LINE__, _("Bad result from packet_ok"));
7888     }
7889 }
7890
7891 /* Store register REGNUM, or all registers if REGNUM == -1, from the
7892    contents of the register cache buffer.  FIXME: ignores errors.  */
7893
7894 static void
7895 store_registers_using_G (const struct regcache *regcache)
7896 {
7897   struct remote_state *rs = get_remote_state ();
7898   remote_arch_state *rsa = get_remote_arch_state (regcache->arch ());
7899   gdb_byte *regs;
7900   char *p;
7901
7902   /* Extract all the registers in the regcache copying them into a
7903      local buffer.  */
7904   {
7905     int i;
7906
7907     regs = (gdb_byte *) alloca (rsa->sizeof_g_packet);
7908     memset (regs, 0, rsa->sizeof_g_packet);
7909     for (i = 0; i < gdbarch_num_regs (get_regcache_arch (regcache)); i++)
7910       {
7911         struct packet_reg *r = &rsa->regs[i];
7912
7913         if (r->in_g_packet)
7914           regcache_raw_collect (regcache, r->regnum, regs + r->offset);
7915       }
7916   }
7917
7918   /* Command describes registers byte by byte,
7919      each byte encoded as two hex characters.  */
7920   p = rs->buf;
7921   *p++ = 'G';
7922   bin2hex (regs, p, rsa->sizeof_g_packet);
7923   putpkt (rs->buf);
7924   getpkt (&rs->buf, &rs->buf_size, 0);
7925   if (packet_check_result (rs->buf) == PACKET_ERROR)
7926     error (_("Could not write registers; remote failure reply '%s'"), 
7927            rs->buf);
7928 }
7929
7930 /* Store register REGNUM, or all registers if REGNUM == -1, from the contents
7931    of the register cache buffer.  FIXME: ignores errors.  */
7932
7933 static void
7934 remote_store_registers (struct target_ops *ops,
7935                         struct regcache *regcache, int regnum)
7936 {
7937   struct gdbarch *gdbarch = regcache->arch ();
7938   remote_arch_state *rsa = get_remote_arch_state (gdbarch);
7939   int i;
7940
7941   set_remote_traceframe ();
7942   set_general_thread (regcache_get_ptid (regcache));
7943
7944   if (regnum >= 0)
7945     {
7946       packet_reg *reg = packet_reg_from_regnum (gdbarch, rsa, regnum);
7947
7948       gdb_assert (reg != NULL);
7949
7950       /* Always prefer to store registers using the 'P' packet if
7951          possible; we often change only a small number of registers.
7952          Sometimes we change a larger number; we'd need help from a
7953          higher layer to know to use 'G'.  */
7954       if (store_register_using_P (regcache, reg))
7955         return;
7956
7957       /* For now, don't complain if we have no way to write the
7958          register.  GDB loses track of unavailable registers too
7959          easily.  Some day, this may be an error.  We don't have
7960          any way to read the register, either...  */
7961       if (!reg->in_g_packet)
7962         return;
7963
7964       store_registers_using_G (regcache);
7965       return;
7966     }
7967
7968   store_registers_using_G (regcache);
7969
7970   for (i = 0; i < gdbarch_num_regs (gdbarch); i++)
7971     if (!rsa->regs[i].in_g_packet)
7972       if (!store_register_using_P (regcache, &rsa->regs[i]))
7973         /* See above for why we do not issue an error here.  */
7974         continue;
7975 }
7976 \f
7977
7978 /* Return the number of hex digits in num.  */
7979
7980 static int
7981 hexnumlen (ULONGEST num)
7982 {
7983   int i;
7984
7985   for (i = 0; num != 0; i++)
7986     num >>= 4;
7987
7988   return std::max (i, 1);
7989 }
7990
7991 /* Set BUF to the minimum number of hex digits representing NUM.  */
7992
7993 static int
7994 hexnumstr (char *buf, ULONGEST num)
7995 {
7996   int len = hexnumlen (num);
7997
7998   return hexnumnstr (buf, num, len);
7999 }
8000
8001
8002 /* Set BUF to the hex digits representing NUM, padded to WIDTH characters.  */
8003
8004 static int
8005 hexnumnstr (char *buf, ULONGEST num, int width)
8006 {
8007   int i;
8008
8009   buf[width] = '\0';
8010
8011   for (i = width - 1; i >= 0; i--)
8012     {
8013       buf[i] = "0123456789abcdef"[(num & 0xf)];
8014       num >>= 4;
8015     }
8016
8017   return width;
8018 }
8019
8020 /* Mask all but the least significant REMOTE_ADDRESS_SIZE bits.  */
8021
8022 static CORE_ADDR
8023 remote_address_masked (CORE_ADDR addr)
8024 {
8025   unsigned int address_size = remote_address_size;
8026
8027   /* If "remoteaddresssize" was not set, default to target address size.  */
8028   if (!address_size)
8029     address_size = gdbarch_addr_bit (target_gdbarch ());
8030
8031   if (address_size > 0
8032       && address_size < (sizeof (ULONGEST) * 8))
8033     {
8034       /* Only create a mask when that mask can safely be constructed
8035          in a ULONGEST variable.  */
8036       ULONGEST mask = 1;
8037
8038       mask = (mask << address_size) - 1;
8039       addr &= mask;
8040     }
8041   return addr;
8042 }
8043
8044 /* Determine whether the remote target supports binary downloading.
8045    This is accomplished by sending a no-op memory write of zero length
8046    to the target at the specified address. It does not suffice to send
8047    the whole packet, since many stubs strip the eighth bit and
8048    subsequently compute a wrong checksum, which causes real havoc with
8049    remote_write_bytes.
8050
8051    NOTE: This can still lose if the serial line is not eight-bit
8052    clean.  In cases like this, the user should clear "remote
8053    X-packet".  */
8054
8055 static void
8056 check_binary_download (CORE_ADDR addr)
8057 {
8058   struct remote_state *rs = get_remote_state ();
8059
8060   switch (packet_support (PACKET_X))
8061     {
8062     case PACKET_DISABLE:
8063       break;
8064     case PACKET_ENABLE:
8065       break;
8066     case PACKET_SUPPORT_UNKNOWN:
8067       {
8068         char *p;
8069
8070         p = rs->buf;
8071         *p++ = 'X';
8072         p += hexnumstr (p, (ULONGEST) addr);
8073         *p++ = ',';
8074         p += hexnumstr (p, (ULONGEST) 0);
8075         *p++ = ':';
8076         *p = '\0';
8077
8078         putpkt_binary (rs->buf, (int) (p - rs->buf));
8079         getpkt (&rs->buf, &rs->buf_size, 0);
8080
8081         if (rs->buf[0] == '\0')
8082           {
8083             if (remote_debug)
8084               fprintf_unfiltered (gdb_stdlog,
8085                                   "binary downloading NOT "
8086                                   "supported by target\n");
8087             remote_protocol_packets[PACKET_X].support = PACKET_DISABLE;
8088           }
8089         else
8090           {
8091             if (remote_debug)
8092               fprintf_unfiltered (gdb_stdlog,
8093                                   "binary downloading supported by target\n");
8094             remote_protocol_packets[PACKET_X].support = PACKET_ENABLE;
8095           }
8096         break;
8097       }
8098     }
8099 }
8100
8101 /* Helper function to resize the payload in order to try to get a good
8102    alignment.  We try to write an amount of data such that the next write will
8103    start on an address aligned on REMOTE_ALIGN_WRITES.  */
8104
8105 static int
8106 align_for_efficient_write (int todo, CORE_ADDR memaddr)
8107 {
8108   return ((memaddr + todo) & ~(REMOTE_ALIGN_WRITES - 1)) - memaddr;
8109 }
8110
8111 /* Write memory data directly to the remote machine.
8112    This does not inform the data cache; the data cache uses this.
8113    HEADER is the starting part of the packet.
8114    MEMADDR is the address in the remote memory space.
8115    MYADDR is the address of the buffer in our space.
8116    LEN_UNITS is the number of addressable units to write.
8117    UNIT_SIZE is the length in bytes of an addressable unit.
8118    PACKET_FORMAT should be either 'X' or 'M', and indicates if we
8119    should send data as binary ('X'), or hex-encoded ('M').
8120
8121    The function creates packet of the form
8122        <HEADER><ADDRESS>,<LENGTH>:<DATA>
8123
8124    where encoding of <DATA> is terminated by PACKET_FORMAT.
8125
8126    If USE_LENGTH is 0, then the <LENGTH> field and the preceding comma
8127    are omitted.
8128
8129    Return the transferred status, error or OK (an
8130    'enum target_xfer_status' value).  Save the number of addressable units
8131    transferred in *XFERED_LEN_UNITS.  Only transfer a single packet.
8132
8133    On a platform with an addressable memory size of 2 bytes (UNIT_SIZE == 2), an
8134    exchange between gdb and the stub could look like (?? in place of the
8135    checksum):
8136
8137    -> $m1000,4#??
8138    <- aaaabbbbccccdddd
8139
8140    -> $M1000,3:eeeeffffeeee#??
8141    <- OK
8142
8143    -> $m1000,4#??
8144    <- eeeeffffeeeedddd  */
8145
8146 static enum target_xfer_status
8147 remote_write_bytes_aux (const char *header, CORE_ADDR memaddr,
8148                         const gdb_byte *myaddr, ULONGEST len_units,
8149                         int unit_size, ULONGEST *xfered_len_units,
8150                         char packet_format, int use_length)
8151 {
8152   struct remote_state *rs = get_remote_state ();
8153   char *p;
8154   char *plen = NULL;
8155   int plenlen = 0;
8156   int todo_units;
8157   int units_written;
8158   int payload_capacity_bytes;
8159   int payload_length_bytes;
8160
8161   if (packet_format != 'X' && packet_format != 'M')
8162     internal_error (__FILE__, __LINE__,
8163                     _("remote_write_bytes_aux: bad packet format"));
8164
8165   if (len_units == 0)
8166     return TARGET_XFER_EOF;
8167
8168   payload_capacity_bytes = get_memory_write_packet_size ();
8169
8170   /* The packet buffer will be large enough for the payload;
8171      get_memory_packet_size ensures this.  */
8172   rs->buf[0] = '\0';
8173
8174   /* Compute the size of the actual payload by subtracting out the
8175      packet header and footer overhead: "$M<memaddr>,<len>:...#nn".  */
8176
8177   payload_capacity_bytes -= strlen ("$,:#NN");
8178   if (!use_length)
8179     /* The comma won't be used.  */
8180     payload_capacity_bytes += 1;
8181   payload_capacity_bytes -= strlen (header);
8182   payload_capacity_bytes -= hexnumlen (memaddr);
8183
8184   /* Construct the packet excluding the data: "<header><memaddr>,<len>:".  */
8185
8186   strcat (rs->buf, header);
8187   p = rs->buf + strlen (header);
8188
8189   /* Compute a best guess of the number of bytes actually transfered.  */
8190   if (packet_format == 'X')
8191     {
8192       /* Best guess at number of bytes that will fit.  */
8193       todo_units = std::min (len_units,
8194                              (ULONGEST) payload_capacity_bytes / unit_size);
8195       if (use_length)
8196         payload_capacity_bytes -= hexnumlen (todo_units);
8197       todo_units = std::min (todo_units, payload_capacity_bytes / unit_size);
8198     }
8199   else
8200     {
8201       /* Number of bytes that will fit.  */
8202       todo_units
8203         = std::min (len_units,
8204                     (ULONGEST) (payload_capacity_bytes / unit_size) / 2);
8205       if (use_length)
8206         payload_capacity_bytes -= hexnumlen (todo_units);
8207       todo_units = std::min (todo_units,
8208                              (payload_capacity_bytes / unit_size) / 2);
8209     }
8210
8211   if (todo_units <= 0)
8212     internal_error (__FILE__, __LINE__,
8213                     _("minimum packet size too small to write data"));
8214
8215   /* If we already need another packet, then try to align the end
8216      of this packet to a useful boundary.  */
8217   if (todo_units > 2 * REMOTE_ALIGN_WRITES && todo_units < len_units)
8218     todo_units = align_for_efficient_write (todo_units, memaddr);
8219
8220   /* Append "<memaddr>".  */
8221   memaddr = remote_address_masked (memaddr);
8222   p += hexnumstr (p, (ULONGEST) memaddr);
8223
8224   if (use_length)
8225     {
8226       /* Append ",".  */
8227       *p++ = ',';
8228
8229       /* Append the length and retain its location and size.  It may need to be
8230          adjusted once the packet body has been created.  */
8231       plen = p;
8232       plenlen = hexnumstr (p, (ULONGEST) todo_units);
8233       p += plenlen;
8234     }
8235
8236   /* Append ":".  */
8237   *p++ = ':';
8238   *p = '\0';
8239
8240   /* Append the packet body.  */
8241   if (packet_format == 'X')
8242     {
8243       /* Binary mode.  Send target system values byte by byte, in
8244          increasing byte addresses.  Only escape certain critical
8245          characters.  */
8246       payload_length_bytes =
8247           remote_escape_output (myaddr, todo_units, unit_size, (gdb_byte *) p,
8248                                 &units_written, payload_capacity_bytes);
8249
8250       /* If not all TODO units fit, then we'll need another packet.  Make
8251          a second try to keep the end of the packet aligned.  Don't do
8252          this if the packet is tiny.  */
8253       if (units_written < todo_units && units_written > 2 * REMOTE_ALIGN_WRITES)
8254         {
8255           int new_todo_units;
8256
8257           new_todo_units = align_for_efficient_write (units_written, memaddr);
8258
8259           if (new_todo_units != units_written)
8260             payload_length_bytes =
8261                 remote_escape_output (myaddr, new_todo_units, unit_size,
8262                                       (gdb_byte *) p, &units_written,
8263                                       payload_capacity_bytes);
8264         }
8265
8266       p += payload_length_bytes;
8267       if (use_length && units_written < todo_units)
8268         {
8269           /* Escape chars have filled up the buffer prematurely,
8270              and we have actually sent fewer units than planned.
8271              Fix-up the length field of the packet.  Use the same
8272              number of characters as before.  */
8273           plen += hexnumnstr (plen, (ULONGEST) units_written,
8274                               plenlen);
8275           *plen = ':';  /* overwrite \0 from hexnumnstr() */
8276         }
8277     }
8278   else
8279     {
8280       /* Normal mode: Send target system values byte by byte, in
8281          increasing byte addresses.  Each byte is encoded as a two hex
8282          value.  */
8283       p += 2 * bin2hex (myaddr, p, todo_units * unit_size);
8284       units_written = todo_units;
8285     }
8286
8287   putpkt_binary (rs->buf, (int) (p - rs->buf));
8288   getpkt (&rs->buf, &rs->buf_size, 0);
8289
8290   if (rs->buf[0] == 'E')
8291     return TARGET_XFER_E_IO;
8292
8293   /* Return UNITS_WRITTEN, not TODO_UNITS, in case escape chars caused us to
8294      send fewer units than we'd planned.  */
8295   *xfered_len_units = (ULONGEST) units_written;
8296   return TARGET_XFER_OK;
8297 }
8298
8299 /* Write memory data directly to the remote machine.
8300    This does not inform the data cache; the data cache uses this.
8301    MEMADDR is the address in the remote memory space.
8302    MYADDR is the address of the buffer in our space.
8303    LEN is the number of bytes.
8304
8305    Return the transferred status, error or OK (an
8306    'enum target_xfer_status' value).  Save the number of bytes
8307    transferred in *XFERED_LEN.  Only transfer a single packet.  */
8308
8309 static enum target_xfer_status
8310 remote_write_bytes (CORE_ADDR memaddr, const gdb_byte *myaddr, ULONGEST len,
8311                     int unit_size, ULONGEST *xfered_len)
8312 {
8313   const char *packet_format = NULL;
8314
8315   /* Check whether the target supports binary download.  */
8316   check_binary_download (memaddr);
8317
8318   switch (packet_support (PACKET_X))
8319     {
8320     case PACKET_ENABLE:
8321       packet_format = "X";
8322       break;
8323     case PACKET_DISABLE:
8324       packet_format = "M";
8325       break;
8326     case PACKET_SUPPORT_UNKNOWN:
8327       internal_error (__FILE__, __LINE__,
8328                       _("remote_write_bytes: bad internal state"));
8329     default:
8330       internal_error (__FILE__, __LINE__, _("bad switch"));
8331     }
8332
8333   return remote_write_bytes_aux (packet_format,
8334                                  memaddr, myaddr, len, unit_size, xfered_len,
8335                                  packet_format[0], 1);
8336 }
8337
8338 /* Read memory data directly from the remote machine.
8339    This does not use the data cache; the data cache uses this.
8340    MEMADDR is the address in the remote memory space.
8341    MYADDR is the address of the buffer in our space.
8342    LEN_UNITS is the number of addressable memory units to read..
8343    UNIT_SIZE is the length in bytes of an addressable unit.
8344
8345    Return the transferred status, error or OK (an
8346    'enum target_xfer_status' value).  Save the number of bytes
8347    transferred in *XFERED_LEN_UNITS.
8348
8349    See the comment of remote_write_bytes_aux for an example of
8350    memory read/write exchange between gdb and the stub.  */
8351
8352 static enum target_xfer_status
8353 remote_read_bytes_1 (CORE_ADDR memaddr, gdb_byte *myaddr, ULONGEST len_units,
8354                      int unit_size, ULONGEST *xfered_len_units)
8355 {
8356   struct remote_state *rs = get_remote_state ();
8357   int buf_size_bytes;           /* Max size of packet output buffer.  */
8358   char *p;
8359   int todo_units;
8360   int decoded_bytes;
8361
8362   buf_size_bytes = get_memory_read_packet_size ();
8363   /* The packet buffer will be large enough for the payload;
8364      get_memory_packet_size ensures this.  */
8365
8366   /* Number of units that will fit.  */
8367   todo_units = std::min (len_units,
8368                          (ULONGEST) (buf_size_bytes / unit_size) / 2);
8369
8370   /* Construct "m"<memaddr>","<len>".  */
8371   memaddr = remote_address_masked (memaddr);
8372   p = rs->buf;
8373   *p++ = 'm';
8374   p += hexnumstr (p, (ULONGEST) memaddr);
8375   *p++ = ',';
8376   p += hexnumstr (p, (ULONGEST) todo_units);
8377   *p = '\0';
8378   putpkt (rs->buf);
8379   getpkt (&rs->buf, &rs->buf_size, 0);
8380   if (rs->buf[0] == 'E'
8381       && isxdigit (rs->buf[1]) && isxdigit (rs->buf[2])
8382       && rs->buf[3] == '\0')
8383     return TARGET_XFER_E_IO;
8384   /* Reply describes memory byte by byte, each byte encoded as two hex
8385      characters.  */
8386   p = rs->buf;
8387   decoded_bytes = hex2bin (p, myaddr, todo_units * unit_size);
8388   /* Return what we have.  Let higher layers handle partial reads.  */
8389   *xfered_len_units = (ULONGEST) (decoded_bytes / unit_size);
8390   return TARGET_XFER_OK;
8391 }
8392
8393 /* Using the set of read-only target sections of remote, read live
8394    read-only memory.
8395
8396    For interface/parameters/return description see target.h,
8397    to_xfer_partial.  */
8398
8399 static enum target_xfer_status
8400 remote_xfer_live_readonly_partial (struct target_ops *ops, gdb_byte *readbuf,
8401                                    ULONGEST memaddr, ULONGEST len,
8402                                    int unit_size, ULONGEST *xfered_len)
8403 {
8404   struct target_section *secp;
8405   struct target_section_table *table;
8406
8407   secp = target_section_by_addr (ops, memaddr);
8408   if (secp != NULL
8409       && (bfd_get_section_flags (secp->the_bfd_section->owner,
8410                                  secp->the_bfd_section)
8411           & SEC_READONLY))
8412     {
8413       struct target_section *p;
8414       ULONGEST memend = memaddr + len;
8415
8416       table = target_get_section_table (ops);
8417
8418       for (p = table->sections; p < table->sections_end; p++)
8419         {
8420           if (memaddr >= p->addr)
8421             {
8422               if (memend <= p->endaddr)
8423                 {
8424                   /* Entire transfer is within this section.  */
8425                   return remote_read_bytes_1 (memaddr, readbuf, len, unit_size,
8426                                               xfered_len);
8427                 }
8428               else if (memaddr >= p->endaddr)
8429                 {
8430                   /* This section ends before the transfer starts.  */
8431                   continue;
8432                 }
8433               else
8434                 {
8435                   /* This section overlaps the transfer.  Just do half.  */
8436                   len = p->endaddr - memaddr;
8437                   return remote_read_bytes_1 (memaddr, readbuf, len, unit_size,
8438                                               xfered_len);
8439                 }
8440             }
8441         }
8442     }
8443
8444   return TARGET_XFER_EOF;
8445 }
8446
8447 /* Similar to remote_read_bytes_1, but it reads from the remote stub
8448    first if the requested memory is unavailable in traceframe.
8449    Otherwise, fall back to remote_read_bytes_1.  */
8450
8451 static enum target_xfer_status
8452 remote_read_bytes (struct target_ops *ops, CORE_ADDR memaddr,
8453                    gdb_byte *myaddr, ULONGEST len, int unit_size,
8454                    ULONGEST *xfered_len)
8455 {
8456   if (len == 0)
8457     return TARGET_XFER_EOF;
8458
8459   if (get_traceframe_number () != -1)
8460     {
8461       std::vector<mem_range> available;
8462
8463       /* If we fail to get the set of available memory, then the
8464          target does not support querying traceframe info, and so we
8465          attempt reading from the traceframe anyway (assuming the
8466          target implements the old QTro packet then).  */
8467       if (traceframe_available_memory (&available, memaddr, len))
8468         {
8469           if (available.empty () || available[0].start != memaddr)
8470             {
8471               enum target_xfer_status res;
8472
8473               /* Don't read into the traceframe's available
8474                  memory.  */
8475               if (!available.empty ())
8476                 {
8477                   LONGEST oldlen = len;
8478
8479                   len = available[0].start - memaddr;
8480                   gdb_assert (len <= oldlen);
8481                 }
8482
8483               /* This goes through the topmost target again.  */
8484               res = remote_xfer_live_readonly_partial (ops, myaddr, memaddr,
8485                                                        len, unit_size, xfered_len);
8486               if (res == TARGET_XFER_OK)
8487                 return TARGET_XFER_OK;
8488               else
8489                 {
8490                   /* No use trying further, we know some memory starting
8491                      at MEMADDR isn't available.  */
8492                   *xfered_len = len;
8493                   return TARGET_XFER_UNAVAILABLE;
8494                 }
8495             }
8496
8497           /* Don't try to read more than how much is available, in
8498              case the target implements the deprecated QTro packet to
8499              cater for older GDBs (the target's knowledge of read-only
8500              sections may be outdated by now).  */
8501           len = available[0].length;
8502         }
8503     }
8504
8505   return remote_read_bytes_1 (memaddr, myaddr, len, unit_size, xfered_len);
8506 }
8507
8508 \f
8509
8510 /* Sends a packet with content determined by the printf format string
8511    FORMAT and the remaining arguments, then gets the reply.  Returns
8512    whether the packet was a success, a failure, or unknown.  */
8513
8514 static enum packet_result remote_send_printf (const char *format, ...)
8515   ATTRIBUTE_PRINTF (1, 2);
8516
8517 static enum packet_result
8518 remote_send_printf (const char *format, ...)
8519 {
8520   struct remote_state *rs = get_remote_state ();
8521   int max_size = get_remote_packet_size ();
8522   va_list ap;
8523
8524   va_start (ap, format);
8525
8526   rs->buf[0] = '\0';
8527   if (vsnprintf (rs->buf, max_size, format, ap) >= max_size)
8528     internal_error (__FILE__, __LINE__, _("Too long remote packet."));
8529
8530   if (putpkt (rs->buf) < 0)
8531     error (_("Communication problem with target."));
8532
8533   rs->buf[0] = '\0';
8534   getpkt (&rs->buf, &rs->buf_size, 0);
8535
8536   return packet_check_result (rs->buf);
8537 }
8538
8539 /* Flash writing can take quite some time.  We'll set
8540    effectively infinite timeout for flash operations.
8541    In future, we'll need to decide on a better approach.  */
8542 static const int remote_flash_timeout = 1000;
8543
8544 static void
8545 remote_flash_erase (struct target_ops *ops,
8546                     ULONGEST address, LONGEST length)
8547 {
8548   int addr_size = gdbarch_addr_bit (target_gdbarch ()) / 8;
8549   enum packet_result ret;
8550   scoped_restore restore_timeout
8551     = make_scoped_restore (&remote_timeout, remote_flash_timeout);
8552
8553   ret = remote_send_printf ("vFlashErase:%s,%s",
8554                             phex (address, addr_size),
8555                             phex (length, 4));
8556   switch (ret)
8557     {
8558     case PACKET_UNKNOWN:
8559       error (_("Remote target does not support flash erase"));
8560     case PACKET_ERROR:
8561       error (_("Error erasing flash with vFlashErase packet"));
8562     default:
8563       break;
8564     }
8565 }
8566
8567 static enum target_xfer_status
8568 remote_flash_write (struct target_ops *ops, ULONGEST address,
8569                     ULONGEST length, ULONGEST *xfered_len,
8570                     const gdb_byte *data)
8571 {
8572   scoped_restore restore_timeout
8573     = make_scoped_restore (&remote_timeout, remote_flash_timeout);
8574   return remote_write_bytes_aux ("vFlashWrite:", address, data, length, 1,
8575                                  xfered_len,'X', 0);
8576 }
8577
8578 static void
8579 remote_flash_done (struct target_ops *ops)
8580 {
8581   int ret;
8582
8583   scoped_restore restore_timeout
8584     = make_scoped_restore (&remote_timeout, remote_flash_timeout);
8585
8586   ret = remote_send_printf ("vFlashDone");
8587
8588   switch (ret)
8589     {
8590     case PACKET_UNKNOWN:
8591       error (_("Remote target does not support vFlashDone"));
8592     case PACKET_ERROR:
8593       error (_("Error finishing flash operation"));
8594     default:
8595       break;
8596     }
8597 }
8598
8599 static void
8600 remote_files_info (struct target_ops *ignore)
8601 {
8602   puts_filtered ("Debugging a target over a serial line.\n");
8603 }
8604 \f
8605 /* Stuff for dealing with the packets which are part of this protocol.
8606    See comment at top of file for details.  */
8607
8608 /* Close/unpush the remote target, and throw a TARGET_CLOSE_ERROR
8609    error to higher layers.  Called when a serial error is detected.
8610    The exception message is STRING, followed by a colon and a blank,
8611    the system error message for errno at function entry and final dot
8612    for output compatibility with throw_perror_with_name.  */
8613
8614 static void
8615 unpush_and_perror (const char *string)
8616 {
8617   int saved_errno = errno;
8618
8619   remote_unpush_target ();
8620   throw_error (TARGET_CLOSE_ERROR, "%s: %s.", string,
8621                safe_strerror (saved_errno));
8622 }
8623
8624 /* Read a single character from the remote end.  The current quit
8625    handler is overridden to avoid quitting in the middle of packet
8626    sequence, as that would break communication with the remote server.
8627    See remote_serial_quit_handler for more detail.  */
8628
8629 static int
8630 readchar (int timeout)
8631 {
8632   int ch;
8633   struct remote_state *rs = get_remote_state ();
8634
8635   {
8636     scoped_restore restore_quit
8637       = make_scoped_restore (&quit_handler, remote_serial_quit_handler);
8638
8639     rs->got_ctrlc_during_io = 0;
8640
8641     ch = serial_readchar (rs->remote_desc, timeout);
8642
8643     if (rs->got_ctrlc_during_io)
8644       set_quit_flag ();
8645   }
8646
8647   if (ch >= 0)
8648     return ch;
8649
8650   switch ((enum serial_rc) ch)
8651     {
8652     case SERIAL_EOF:
8653       remote_unpush_target ();
8654       throw_error (TARGET_CLOSE_ERROR, _("Remote connection closed"));
8655       /* no return */
8656     case SERIAL_ERROR:
8657       unpush_and_perror (_("Remote communication error.  "
8658                            "Target disconnected."));
8659       /* no return */
8660     case SERIAL_TIMEOUT:
8661       break;
8662     }
8663   return ch;
8664 }
8665
8666 /* Wrapper for serial_write that closes the target and throws if
8667    writing fails.  The current quit handler is overridden to avoid
8668    quitting in the middle of packet sequence, as that would break
8669    communication with the remote server.  See
8670    remote_serial_quit_handler for more detail.  */
8671
8672 static void
8673 remote_serial_write (const char *str, int len)
8674 {
8675   struct remote_state *rs = get_remote_state ();
8676
8677   scoped_restore restore_quit
8678     = make_scoped_restore (&quit_handler, remote_serial_quit_handler);
8679
8680   rs->got_ctrlc_during_io = 0;
8681
8682   if (serial_write (rs->remote_desc, str, len))
8683     {
8684       unpush_and_perror (_("Remote communication error.  "
8685                            "Target disconnected."));
8686     }
8687
8688   if (rs->got_ctrlc_during_io)
8689     set_quit_flag ();
8690 }
8691
8692 /* Send the command in *BUF to the remote machine, and read the reply
8693    into *BUF.  Report an error if we get an error reply.  Resize
8694    *BUF using xrealloc if necessary to hold the result, and update
8695    *SIZEOF_BUF.  */
8696
8697 static void
8698 remote_send (char **buf,
8699              long *sizeof_buf)
8700 {
8701   putpkt (*buf);
8702   getpkt (buf, sizeof_buf, 0);
8703
8704   if ((*buf)[0] == 'E')
8705     error (_("Remote failure reply: %s"), *buf);
8706 }
8707
8708 /* Return a string representing an escaped version of BUF, of len N.
8709    E.g. \n is converted to \\n, \t to \\t, etc.  */
8710
8711 static std::string
8712 escape_buffer (const char *buf, int n)
8713 {
8714   string_file stb;
8715
8716   stb.putstrn (buf, n, '\\');
8717   return std::move (stb.string ());
8718 }
8719
8720 /* Display a null-terminated packet on stdout, for debugging, using C
8721    string notation.  */
8722
8723 static void
8724 print_packet (const char *buf)
8725 {
8726   puts_filtered ("\"");
8727   fputstr_filtered (buf, '"', gdb_stdout);
8728   puts_filtered ("\"");
8729 }
8730
8731 int
8732 putpkt (const char *buf)
8733 {
8734   return putpkt_binary (buf, strlen (buf));
8735 }
8736
8737 /* Send a packet to the remote machine, with error checking.  The data
8738    of the packet is in BUF.  The string in BUF can be at most
8739    get_remote_packet_size () - 5 to account for the $, # and checksum,
8740    and for a possible /0 if we are debugging (remote_debug) and want
8741    to print the sent packet as a string.  */
8742
8743 static int
8744 putpkt_binary (const char *buf, int cnt)
8745 {
8746   struct remote_state *rs = get_remote_state ();
8747   int i;
8748   unsigned char csum = 0;
8749   gdb::def_vector<char> data (cnt + 6);
8750   char *buf2 = data.data ();
8751
8752   int ch;
8753   int tcount = 0;
8754   char *p;
8755
8756   /* Catch cases like trying to read memory or listing threads while
8757      we're waiting for a stop reply.  The remote server wouldn't be
8758      ready to handle this request, so we'd hang and timeout.  We don't
8759      have to worry about this in synchronous mode, because in that
8760      case it's not possible to issue a command while the target is
8761      running.  This is not a problem in non-stop mode, because in that
8762      case, the stub is always ready to process serial input.  */
8763   if (!target_is_non_stop_p ()
8764       && target_is_async_p ()
8765       && rs->waiting_for_stop_reply)
8766     {
8767       error (_("Cannot execute this command while the target is running.\n"
8768                "Use the \"interrupt\" command to stop the target\n"
8769                "and then try again."));
8770     }
8771
8772   /* We're sending out a new packet.  Make sure we don't look at a
8773      stale cached response.  */
8774   rs->cached_wait_status = 0;
8775
8776   /* Copy the packet into buffer BUF2, encapsulating it
8777      and giving it a checksum.  */
8778
8779   p = buf2;
8780   *p++ = '$';
8781
8782   for (i = 0; i < cnt; i++)
8783     {
8784       csum += buf[i];
8785       *p++ = buf[i];
8786     }
8787   *p++ = '#';
8788   *p++ = tohex ((csum >> 4) & 0xf);
8789   *p++ = tohex (csum & 0xf);
8790
8791   /* Send it over and over until we get a positive ack.  */
8792
8793   while (1)
8794     {
8795       int started_error_output = 0;
8796
8797       if (remote_debug)
8798         {
8799           *p = '\0';
8800
8801           int len = (int) (p - buf2);
8802
8803           std::string str
8804             = escape_buffer (buf2, std::min (len, REMOTE_DEBUG_MAX_CHAR));
8805
8806           fprintf_unfiltered (gdb_stdlog, "Sending packet: %s", str.c_str ());
8807
8808           if (str.length () > REMOTE_DEBUG_MAX_CHAR)
8809             {
8810               fprintf_unfiltered (gdb_stdlog, "[%zu bytes omitted]",
8811                                   str.length () - REMOTE_DEBUG_MAX_CHAR);
8812             }
8813
8814           fprintf_unfiltered (gdb_stdlog, "...");
8815
8816           gdb_flush (gdb_stdlog);
8817         }
8818       remote_serial_write (buf2, p - buf2);
8819
8820       /* If this is a no acks version of the remote protocol, send the
8821          packet and move on.  */
8822       if (rs->noack_mode)
8823         break;
8824
8825       /* Read until either a timeout occurs (-2) or '+' is read.
8826          Handle any notification that arrives in the mean time.  */
8827       while (1)
8828         {
8829           ch = readchar (remote_timeout);
8830
8831           if (remote_debug)
8832             {
8833               switch (ch)
8834                 {
8835                 case '+':
8836                 case '-':
8837                 case SERIAL_TIMEOUT:
8838                 case '$':
8839                 case '%':
8840                   if (started_error_output)
8841                     {
8842                       putchar_unfiltered ('\n');
8843                       started_error_output = 0;
8844                     }
8845                 }
8846             }
8847
8848           switch (ch)
8849             {
8850             case '+':
8851               if (remote_debug)
8852                 fprintf_unfiltered (gdb_stdlog, "Ack\n");
8853               return 1;
8854             case '-':
8855               if (remote_debug)
8856                 fprintf_unfiltered (gdb_stdlog, "Nak\n");
8857               /* FALLTHROUGH */
8858             case SERIAL_TIMEOUT:
8859               tcount++;
8860               if (tcount > 3)
8861                 return 0;
8862               break;            /* Retransmit buffer.  */
8863             case '$':
8864               {
8865                 if (remote_debug)
8866                   fprintf_unfiltered (gdb_stdlog,
8867                                       "Packet instead of Ack, ignoring it\n");
8868                 /* It's probably an old response sent because an ACK
8869                    was lost.  Gobble up the packet and ack it so it
8870                    doesn't get retransmitted when we resend this
8871                    packet.  */
8872                 skip_frame ();
8873                 remote_serial_write ("+", 1);
8874                 continue;       /* Now, go look for +.  */
8875               }
8876
8877             case '%':
8878               {
8879                 int val;
8880
8881                 /* If we got a notification, handle it, and go back to looking
8882                    for an ack.  */
8883                 /* We've found the start of a notification.  Now
8884                    collect the data.  */
8885                 val = read_frame (&rs->buf, &rs->buf_size);
8886                 if (val >= 0)
8887                   {
8888                     if (remote_debug)
8889                       {
8890                         std::string str = escape_buffer (rs->buf, val);
8891
8892                         fprintf_unfiltered (gdb_stdlog,
8893                                             "  Notification received: %s\n",
8894                                             str.c_str ());
8895                       }
8896                     handle_notification (rs->notif_state, rs->buf);
8897                     /* We're in sync now, rewait for the ack.  */
8898                     tcount = 0;
8899                   }
8900                 else
8901                   {
8902                     if (remote_debug)
8903                       {
8904                         if (!started_error_output)
8905                           {
8906                             started_error_output = 1;
8907                             fprintf_unfiltered (gdb_stdlog, "putpkt: Junk: ");
8908                           }
8909                         fputc_unfiltered (ch & 0177, gdb_stdlog);
8910                         fprintf_unfiltered (gdb_stdlog, "%s", rs->buf);
8911                       }
8912                   }
8913                 continue;
8914               }
8915               /* fall-through */
8916             default:
8917               if (remote_debug)
8918                 {
8919                   if (!started_error_output)
8920                     {
8921                       started_error_output = 1;
8922                       fprintf_unfiltered (gdb_stdlog, "putpkt: Junk: ");
8923                     }
8924                   fputc_unfiltered (ch & 0177, gdb_stdlog);
8925                 }
8926               continue;
8927             }
8928           break;                /* Here to retransmit.  */
8929         }
8930
8931 #if 0
8932       /* This is wrong.  If doing a long backtrace, the user should be
8933          able to get out next time we call QUIT, without anything as
8934          violent as interrupt_query.  If we want to provide a way out of
8935          here without getting to the next QUIT, it should be based on
8936          hitting ^C twice as in remote_wait.  */
8937       if (quit_flag)
8938         {
8939           quit_flag = 0;
8940           interrupt_query ();
8941         }
8942 #endif
8943     }
8944
8945   return 0;
8946 }
8947
8948 /* Come here after finding the start of a frame when we expected an
8949    ack.  Do our best to discard the rest of this packet.  */
8950
8951 static void
8952 skip_frame (void)
8953 {
8954   int c;
8955
8956   while (1)
8957     {
8958       c = readchar (remote_timeout);
8959       switch (c)
8960         {
8961         case SERIAL_TIMEOUT:
8962           /* Nothing we can do.  */
8963           return;
8964         case '#':
8965           /* Discard the two bytes of checksum and stop.  */
8966           c = readchar (remote_timeout);
8967           if (c >= 0)
8968             c = readchar (remote_timeout);
8969
8970           return;
8971         case '*':               /* Run length encoding.  */
8972           /* Discard the repeat count.  */
8973           c = readchar (remote_timeout);
8974           if (c < 0)
8975             return;
8976           break;
8977         default:
8978           /* A regular character.  */
8979           break;
8980         }
8981     }
8982 }
8983
8984 /* Come here after finding the start of the frame.  Collect the rest
8985    into *BUF, verifying the checksum, length, and handling run-length
8986    compression.  NUL terminate the buffer.  If there is not enough room,
8987    expand *BUF using xrealloc.
8988
8989    Returns -1 on error, number of characters in buffer (ignoring the
8990    trailing NULL) on success. (could be extended to return one of the
8991    SERIAL status indications).  */
8992
8993 static long
8994 read_frame (char **buf_p,
8995             long *sizeof_buf)
8996 {
8997   unsigned char csum;
8998   long bc;
8999   int c;
9000   char *buf = *buf_p;
9001   struct remote_state *rs = get_remote_state ();
9002
9003   csum = 0;
9004   bc = 0;
9005
9006   while (1)
9007     {
9008       c = readchar (remote_timeout);
9009       switch (c)
9010         {
9011         case SERIAL_TIMEOUT:
9012           if (remote_debug)
9013             fputs_filtered ("Timeout in mid-packet, retrying\n", gdb_stdlog);
9014           return -1;
9015         case '$':
9016           if (remote_debug)
9017             fputs_filtered ("Saw new packet start in middle of old one\n",
9018                             gdb_stdlog);
9019           return -1;            /* Start a new packet, count retries.  */
9020         case '#':
9021           {
9022             unsigned char pktcsum;
9023             int check_0 = 0;
9024             int check_1 = 0;
9025
9026             buf[bc] = '\0';
9027
9028             check_0 = readchar (remote_timeout);
9029             if (check_0 >= 0)
9030               check_1 = readchar (remote_timeout);
9031
9032             if (check_0 == SERIAL_TIMEOUT || check_1 == SERIAL_TIMEOUT)
9033               {
9034                 if (remote_debug)
9035                   fputs_filtered ("Timeout in checksum, retrying\n",
9036                                   gdb_stdlog);
9037                 return -1;
9038               }
9039             else if (check_0 < 0 || check_1 < 0)
9040               {
9041                 if (remote_debug)
9042                   fputs_filtered ("Communication error in checksum\n",
9043                                   gdb_stdlog);
9044                 return -1;
9045               }
9046
9047             /* Don't recompute the checksum; with no ack packets we
9048                don't have any way to indicate a packet retransmission
9049                is necessary.  */
9050             if (rs->noack_mode)
9051               return bc;
9052
9053             pktcsum = (fromhex (check_0) << 4) | fromhex (check_1);
9054             if (csum == pktcsum)
9055               return bc;
9056
9057             if (remote_debug)
9058               {
9059                 std::string str = escape_buffer (buf, bc);
9060
9061                 fprintf_unfiltered (gdb_stdlog,
9062                                     "Bad checksum, sentsum=0x%x, "
9063                                     "csum=0x%x, buf=%s\n",
9064                                     pktcsum, csum, str.c_str ());
9065               }
9066             /* Number of characters in buffer ignoring trailing
9067                NULL.  */
9068             return -1;
9069           }
9070         case '*':               /* Run length encoding.  */
9071           {
9072             int repeat;
9073
9074             csum += c;
9075             c = readchar (remote_timeout);
9076             csum += c;
9077             repeat = c - ' ' + 3;       /* Compute repeat count.  */
9078
9079             /* The character before ``*'' is repeated.  */
9080
9081             if (repeat > 0 && repeat <= 255 && bc > 0)
9082               {
9083                 if (bc + repeat - 1 >= *sizeof_buf - 1)
9084                   {
9085                     /* Make some more room in the buffer.  */
9086                     *sizeof_buf += repeat;
9087                     *buf_p = (char *) xrealloc (*buf_p, *sizeof_buf);
9088                     buf = *buf_p;
9089                   }
9090
9091                 memset (&buf[bc], buf[bc - 1], repeat);
9092                 bc += repeat;
9093                 continue;
9094               }
9095
9096             buf[bc] = '\0';
9097             printf_filtered (_("Invalid run length encoding: %s\n"), buf);
9098             return -1;
9099           }
9100         default:
9101           if (bc >= *sizeof_buf - 1)
9102             {
9103               /* Make some more room in the buffer.  */
9104               *sizeof_buf *= 2;
9105               *buf_p = (char *) xrealloc (*buf_p, *sizeof_buf);
9106               buf = *buf_p;
9107             }
9108
9109           buf[bc++] = c;
9110           csum += c;
9111           continue;
9112         }
9113     }
9114 }
9115
9116 /* Read a packet from the remote machine, with error checking, and
9117    store it in *BUF.  Resize *BUF using xrealloc if necessary to hold
9118    the result, and update *SIZEOF_BUF.  If FOREVER, wait forever
9119    rather than timing out; this is used (in synchronous mode) to wait
9120    for a target that is is executing user code to stop.  */
9121 /* FIXME: ezannoni 2000-02-01 this wrapper is necessary so that we
9122    don't have to change all the calls to getpkt to deal with the
9123    return value, because at the moment I don't know what the right
9124    thing to do it for those.  */
9125 void
9126 getpkt (char **buf,
9127         long *sizeof_buf,
9128         int forever)
9129 {
9130   getpkt_sane (buf, sizeof_buf, forever);
9131 }
9132
9133
9134 /* Read a packet from the remote machine, with error checking, and
9135    store it in *BUF.  Resize *BUF using xrealloc if necessary to hold
9136    the result, and update *SIZEOF_BUF.  If FOREVER, wait forever
9137    rather than timing out; this is used (in synchronous mode) to wait
9138    for a target that is is executing user code to stop.  If FOREVER ==
9139    0, this function is allowed to time out gracefully and return an
9140    indication of this to the caller.  Otherwise return the number of
9141    bytes read.  If EXPECTING_NOTIF, consider receiving a notification
9142    enough reason to return to the caller.  *IS_NOTIF is an output
9143    boolean that indicates whether *BUF holds a notification or not
9144    (a regular packet).  */
9145
9146 static int
9147 getpkt_or_notif_sane_1 (char **buf, long *sizeof_buf, int forever,
9148                         int expecting_notif, int *is_notif)
9149 {
9150   struct remote_state *rs = get_remote_state ();
9151   int c;
9152   int tries;
9153   int timeout;
9154   int val = -1;
9155
9156   /* We're reading a new response.  Make sure we don't look at a
9157      previously cached response.  */
9158   rs->cached_wait_status = 0;
9159
9160   strcpy (*buf, "timeout");
9161
9162   if (forever)
9163     timeout = watchdog > 0 ? watchdog : -1;
9164   else if (expecting_notif)
9165     timeout = 0; /* There should already be a char in the buffer.  If
9166                     not, bail out.  */
9167   else
9168     timeout = remote_timeout;
9169
9170 #define MAX_TRIES 3
9171
9172   /* Process any number of notifications, and then return when
9173      we get a packet.  */
9174   for (;;)
9175     {
9176       /* If we get a timeout or bad checksum, retry up to MAX_TRIES
9177          times.  */
9178       for (tries = 1; tries <= MAX_TRIES; tries++)
9179         {
9180           /* This can loop forever if the remote side sends us
9181              characters continuously, but if it pauses, we'll get
9182              SERIAL_TIMEOUT from readchar because of timeout.  Then
9183              we'll count that as a retry.
9184
9185              Note that even when forever is set, we will only wait
9186              forever prior to the start of a packet.  After that, we
9187              expect characters to arrive at a brisk pace.  They should
9188              show up within remote_timeout intervals.  */
9189           do
9190             c = readchar (timeout);
9191           while (c != SERIAL_TIMEOUT && c != '$' && c != '%');
9192
9193           if (c == SERIAL_TIMEOUT)
9194             {
9195               if (expecting_notif)
9196                 return -1; /* Don't complain, it's normal to not get
9197                               anything in this case.  */
9198
9199               if (forever)      /* Watchdog went off?  Kill the target.  */
9200                 {
9201                   remote_unpush_target ();
9202                   throw_error (TARGET_CLOSE_ERROR,
9203                                _("Watchdog timeout has expired.  "
9204                                  "Target detached."));
9205                 }
9206               if (remote_debug)
9207                 fputs_filtered ("Timed out.\n", gdb_stdlog);
9208             }
9209           else
9210             {
9211               /* We've found the start of a packet or notification.
9212                  Now collect the data.  */
9213               val = read_frame (buf, sizeof_buf);
9214               if (val >= 0)
9215                 break;
9216             }
9217
9218           remote_serial_write ("-", 1);
9219         }
9220
9221       if (tries > MAX_TRIES)
9222         {
9223           /* We have tried hard enough, and just can't receive the
9224              packet/notification.  Give up.  */
9225           printf_unfiltered (_("Ignoring packet error, continuing...\n"));
9226
9227           /* Skip the ack char if we're in no-ack mode.  */
9228           if (!rs->noack_mode)
9229             remote_serial_write ("+", 1);
9230           return -1;
9231         }
9232
9233       /* If we got an ordinary packet, return that to our caller.  */
9234       if (c == '$')
9235         {
9236           if (remote_debug)
9237             {
9238               std::string str
9239                 = escape_buffer (*buf,
9240                                  std::min (val, REMOTE_DEBUG_MAX_CHAR));
9241
9242               fprintf_unfiltered (gdb_stdlog, "Packet received: %s",
9243                                   str.c_str ());
9244
9245               if (str.length () >  REMOTE_DEBUG_MAX_CHAR)
9246                 {
9247                   fprintf_unfiltered (gdb_stdlog, "[%zu bytes omitted]",
9248                                       str.length () - REMOTE_DEBUG_MAX_CHAR);
9249                 }
9250
9251               fprintf_unfiltered (gdb_stdlog, "\n");
9252             }
9253
9254           /* Skip the ack char if we're in no-ack mode.  */
9255           if (!rs->noack_mode)
9256             remote_serial_write ("+", 1);
9257           if (is_notif != NULL)
9258             *is_notif = 0;
9259           return val;
9260         }
9261
9262        /* If we got a notification, handle it, and go back to looking
9263          for a packet.  */
9264       else
9265         {
9266           gdb_assert (c == '%');
9267
9268           if (remote_debug)
9269             {
9270               std::string str = escape_buffer (*buf, val);
9271
9272               fprintf_unfiltered (gdb_stdlog,
9273                                   "  Notification received: %s\n",
9274                                   str.c_str ());
9275             }
9276           if (is_notif != NULL)
9277             *is_notif = 1;
9278
9279           handle_notification (rs->notif_state, *buf);
9280
9281           /* Notifications require no acknowledgement.  */
9282
9283           if (expecting_notif)
9284             return val;
9285         }
9286     }
9287 }
9288
9289 static int
9290 getpkt_sane (char **buf, long *sizeof_buf, int forever)
9291 {
9292   return getpkt_or_notif_sane_1 (buf, sizeof_buf, forever, 0, NULL);
9293 }
9294
9295 static int
9296 getpkt_or_notif_sane (char **buf, long *sizeof_buf, int forever,
9297                       int *is_notif)
9298 {
9299   return getpkt_or_notif_sane_1 (buf, sizeof_buf, forever, 1,
9300                                  is_notif);
9301 }
9302
9303 /* Check whether EVENT is a fork event for the process specified
9304    by the pid passed in DATA, and if it is, kill the fork child.  */
9305
9306 static int
9307 kill_child_of_pending_fork (QUEUE (stop_reply_p) *q,
9308                             QUEUE_ITER (stop_reply_p) *iter,
9309                             stop_reply_p event,
9310                             void *data)
9311 {
9312   struct queue_iter_param *param = (struct queue_iter_param *) data;
9313   int parent_pid = *(int *) param->input;
9314
9315   if (is_pending_fork_parent (&event->ws, parent_pid, event->ptid))
9316     {
9317       struct remote_state *rs = get_remote_state ();
9318       int child_pid = ptid_get_pid (event->ws.value.related_pid);
9319       int res;
9320
9321       res = remote_vkill (child_pid, rs);
9322       if (res != 0)
9323         error (_("Can't kill fork child process %d"), child_pid);
9324     }
9325
9326   return 1;
9327 }
9328
9329 /* Kill any new fork children of process PID that haven't been
9330    processed by follow_fork.  */
9331
9332 static void
9333 kill_new_fork_children (int pid, struct remote_state *rs)
9334 {
9335   struct thread_info *thread;
9336   struct notif_client *notif = &notif_client_stop;
9337   struct queue_iter_param param;
9338
9339   /* Kill the fork child threads of any threads in process PID
9340      that are stopped at a fork event.  */
9341   ALL_NON_EXITED_THREADS (thread)
9342     {
9343       struct target_waitstatus *ws = &thread->pending_follow;
9344
9345       if (is_pending_fork_parent (ws, pid, thread->ptid))
9346         {
9347           struct remote_state *rs = get_remote_state ();
9348           int child_pid = ptid_get_pid (ws->value.related_pid);
9349           int res;
9350
9351           res = remote_vkill (child_pid, rs);
9352           if (res != 0)
9353             error (_("Can't kill fork child process %d"), child_pid);
9354         }
9355     }
9356
9357   /* Check for any pending fork events (not reported or processed yet)
9358      in process PID and kill those fork child threads as well.  */
9359   remote_notif_get_pending_events (notif);
9360   param.input = &pid;
9361   param.output = NULL;
9362   QUEUE_iterate (stop_reply_p, stop_reply_queue,
9363                  kill_child_of_pending_fork, &param);
9364 }
9365
9366 \f
9367 /* Target hook to kill the current inferior.  */
9368
9369 static void
9370 remote_kill (struct target_ops *ops)
9371 {
9372   int res = -1;
9373   int pid = ptid_get_pid (inferior_ptid);
9374   struct remote_state *rs = get_remote_state ();
9375
9376   if (packet_support (PACKET_vKill) != PACKET_DISABLE)
9377     {
9378       /* If we're stopped while forking and we haven't followed yet,
9379          kill the child task.  We need to do this before killing the
9380          parent task because if this is a vfork then the parent will
9381          be sleeping.  */
9382       kill_new_fork_children (pid, rs);
9383
9384       res = remote_vkill (pid, rs);
9385       if (res == 0)
9386         {
9387           target_mourn_inferior (inferior_ptid);
9388           return;
9389         }
9390     }
9391
9392   /* If we are in 'target remote' mode and we are killing the only
9393      inferior, then we will tell gdbserver to exit and unpush the
9394      target.  */
9395   if (res == -1 && !remote_multi_process_p (rs)
9396       && number_of_live_inferiors () == 1)
9397     {
9398       remote_kill_k ();
9399
9400       /* We've killed the remote end, we get to mourn it.  If we are
9401          not in extended mode, mourning the inferior also unpushes
9402          remote_ops from the target stack, which closes the remote
9403          connection.  */
9404       target_mourn_inferior (inferior_ptid);
9405
9406       return;
9407     }
9408
9409   error (_("Can't kill process"));
9410 }
9411
9412 /* Send a kill request to the target using the 'vKill' packet.  */
9413
9414 static int
9415 remote_vkill (int pid, struct remote_state *rs)
9416 {
9417   if (packet_support (PACKET_vKill) == PACKET_DISABLE)
9418     return -1;
9419
9420   /* Tell the remote target to detach.  */
9421   xsnprintf (rs->buf, get_remote_packet_size (), "vKill;%x", pid);
9422   putpkt (rs->buf);
9423   getpkt (&rs->buf, &rs->buf_size, 0);
9424
9425   switch (packet_ok (rs->buf,
9426                      &remote_protocol_packets[PACKET_vKill]))
9427     {
9428     case PACKET_OK:
9429       return 0;
9430     case PACKET_ERROR:
9431       return 1;
9432     case PACKET_UNKNOWN:
9433       return -1;
9434     default:
9435       internal_error (__FILE__, __LINE__, _("Bad result from packet_ok"));
9436     }
9437 }
9438
9439 /* Send a kill request to the target using the 'k' packet.  */
9440
9441 static void
9442 remote_kill_k (void)
9443 {
9444   /* Catch errors so the user can quit from gdb even when we
9445      aren't on speaking terms with the remote system.  */
9446   TRY
9447     {
9448       putpkt ("k");
9449     }
9450   CATCH (ex, RETURN_MASK_ERROR)
9451     {
9452       if (ex.error == TARGET_CLOSE_ERROR)
9453         {
9454           /* If we got an (EOF) error that caused the target
9455              to go away, then we're done, that's what we wanted.
9456              "k" is susceptible to cause a premature EOF, given
9457              that the remote server isn't actually required to
9458              reply to "k", and it can happen that it doesn't
9459              even get to reply ACK to the "k".  */
9460           return;
9461         }
9462
9463       /* Otherwise, something went wrong.  We didn't actually kill
9464          the target.  Just propagate the exception, and let the
9465          user or higher layers decide what to do.  */
9466       throw_exception (ex);
9467     }
9468   END_CATCH
9469 }
9470
9471 static void
9472 remote_mourn (struct target_ops *target)
9473 {
9474   struct remote_state *rs = get_remote_state ();
9475
9476   /* In 'target remote' mode with one inferior, we close the connection.  */
9477   if (!rs->extended && number_of_live_inferiors () <= 1)
9478     {
9479       unpush_target (target);
9480
9481       /* remote_close takes care of doing most of the clean up.  */
9482       generic_mourn_inferior ();
9483       return;
9484     }
9485
9486   /* In case we got here due to an error, but we're going to stay
9487      connected.  */
9488   rs->waiting_for_stop_reply = 0;
9489
9490   /* If the current general thread belonged to the process we just
9491      detached from or has exited, the remote side current general
9492      thread becomes undefined.  Considering a case like this:
9493
9494      - We just got here due to a detach.
9495      - The process that we're detaching from happens to immediately
9496        report a global breakpoint being hit in non-stop mode, in the
9497        same thread we had selected before.
9498      - GDB attaches to this process again.
9499      - This event happens to be the next event we handle.
9500
9501      GDB would consider that the current general thread didn't need to
9502      be set on the stub side (with Hg), since for all it knew,
9503      GENERAL_THREAD hadn't changed.
9504
9505      Notice that although in all-stop mode, the remote server always
9506      sets the current thread to the thread reporting the stop event,
9507      that doesn't happen in non-stop mode; in non-stop, the stub *must
9508      not* change the current thread when reporting a breakpoint hit,
9509      due to the decoupling of event reporting and event handling.
9510
9511      To keep things simple, we always invalidate our notion of the
9512      current thread.  */
9513   record_currthread (rs, minus_one_ptid);
9514
9515   /* Call common code to mark the inferior as not running.  */
9516   generic_mourn_inferior ();
9517
9518   if (!have_inferiors ())
9519     {
9520       if (!remote_multi_process_p (rs))
9521         {
9522           /* Check whether the target is running now - some remote stubs
9523              automatically restart after kill.  */
9524           putpkt ("?");
9525           getpkt (&rs->buf, &rs->buf_size, 0);
9526
9527           if (rs->buf[0] == 'S' || rs->buf[0] == 'T')
9528             {
9529               /* Assume that the target has been restarted.  Set
9530                  inferior_ptid so that bits of core GDB realizes
9531                  there's something here, e.g., so that the user can
9532                  say "kill" again.  */
9533               inferior_ptid = magic_null_ptid;
9534             }
9535         }
9536     }
9537 }
9538
9539 static int
9540 extended_remote_supports_disable_randomization (struct target_ops *self)
9541 {
9542   return packet_support (PACKET_QDisableRandomization) == PACKET_ENABLE;
9543 }
9544
9545 static void
9546 extended_remote_disable_randomization (int val)
9547 {
9548   struct remote_state *rs = get_remote_state ();
9549   char *reply;
9550
9551   xsnprintf (rs->buf, get_remote_packet_size (), "QDisableRandomization:%x",
9552              val);
9553   putpkt (rs->buf);
9554   reply = remote_get_noisy_reply ();
9555   if (*reply == '\0')
9556     error (_("Target does not support QDisableRandomization."));
9557   if (strcmp (reply, "OK") != 0)
9558     error (_("Bogus QDisableRandomization reply from target: %s"), reply);
9559 }
9560
9561 static int
9562 extended_remote_run (const std::string &args)
9563 {
9564   struct remote_state *rs = get_remote_state ();
9565   int len;
9566   const char *remote_exec_file = get_remote_exec_file ();
9567
9568   /* If the user has disabled vRun support, or we have detected that
9569      support is not available, do not try it.  */
9570   if (packet_support (PACKET_vRun) == PACKET_DISABLE)
9571     return -1;
9572
9573   strcpy (rs->buf, "vRun;");
9574   len = strlen (rs->buf);
9575
9576   if (strlen (remote_exec_file) * 2 + len >= get_remote_packet_size ())
9577     error (_("Remote file name too long for run packet"));
9578   len += 2 * bin2hex ((gdb_byte *) remote_exec_file, rs->buf + len,
9579                       strlen (remote_exec_file));
9580
9581   if (!args.empty ())
9582     {
9583       int i;
9584
9585       gdb_argv argv (args.c_str ());
9586       for (i = 0; argv[i] != NULL; i++)
9587         {
9588           if (strlen (argv[i]) * 2 + 1 + len >= get_remote_packet_size ())
9589             error (_("Argument list too long for run packet"));
9590           rs->buf[len++] = ';';
9591           len += 2 * bin2hex ((gdb_byte *) argv[i], rs->buf + len,
9592                               strlen (argv[i]));
9593         }
9594     }
9595
9596   rs->buf[len++] = '\0';
9597
9598   putpkt (rs->buf);
9599   getpkt (&rs->buf, &rs->buf_size, 0);
9600
9601   switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_vRun]))
9602     {
9603     case PACKET_OK:
9604       /* We have a wait response.  All is well.  */
9605       return 0;
9606     case PACKET_UNKNOWN:
9607       return -1;
9608     case PACKET_ERROR:
9609       if (remote_exec_file[0] == '\0')
9610         error (_("Running the default executable on the remote target failed; "
9611                  "try \"set remote exec-file\"?"));
9612       else
9613         error (_("Running \"%s\" on the remote target failed"),
9614                remote_exec_file);
9615     default:
9616       gdb_assert_not_reached (_("bad switch"));
9617     }
9618 }
9619
9620 /* Helper function to send set/unset environment packets.  ACTION is
9621    either "set" or "unset".  PACKET is either "QEnvironmentHexEncoded"
9622    or "QEnvironmentUnsetVariable".  VALUE is the variable to be
9623    sent.  */
9624
9625 static void
9626 send_environment_packet (struct remote_state *rs,
9627                          const char *action,
9628                          const char *packet,
9629                          const char *value)
9630 {
9631   /* Convert the environment variable to an hex string, which
9632      is the best format to be transmitted over the wire.  */
9633   std::string encoded_value = bin2hex ((const gdb_byte *) value,
9634                                          strlen (value));
9635
9636   xsnprintf (rs->buf, get_remote_packet_size (),
9637              "%s:%s", packet, encoded_value.c_str ());
9638
9639   putpkt (rs->buf);
9640   getpkt (&rs->buf, &rs->buf_size, 0);
9641   if (strcmp (rs->buf, "OK") != 0)
9642     warning (_("Unable to %s environment variable '%s' on remote."),
9643              action, value);
9644 }
9645
9646 /* Helper function to handle the QEnvironment* packets.  */
9647
9648 static void
9649 extended_remote_environment_support (struct remote_state *rs)
9650 {
9651   if (packet_support (PACKET_QEnvironmentReset) != PACKET_DISABLE)
9652     {
9653       putpkt ("QEnvironmentReset");
9654       getpkt (&rs->buf, &rs->buf_size, 0);
9655       if (strcmp (rs->buf, "OK") != 0)
9656         warning (_("Unable to reset environment on remote."));
9657     }
9658
9659   gdb_environ *e = &current_inferior ()->environment;
9660
9661   if (packet_support (PACKET_QEnvironmentHexEncoded) != PACKET_DISABLE)
9662     for (const std::string &el : e->user_set_env ())
9663       send_environment_packet (rs, "set", "QEnvironmentHexEncoded",
9664                                el.c_str ());
9665
9666   if (packet_support (PACKET_QEnvironmentUnset) != PACKET_DISABLE)
9667     for (const std::string &el : e->user_unset_env ())
9668       send_environment_packet (rs, "unset", "QEnvironmentUnset", el.c_str ());
9669 }
9670
9671 /* Helper function to set the current working directory for the
9672    inferior in the remote target.  */
9673
9674 static void
9675 extended_remote_set_inferior_cwd (struct remote_state *rs)
9676 {
9677   if (packet_support (PACKET_QSetWorkingDir) != PACKET_DISABLE)
9678     {
9679       const char *inferior_cwd = get_inferior_cwd ();
9680
9681       if (inferior_cwd != NULL)
9682         {
9683           std::string hexpath = bin2hex ((const gdb_byte *) inferior_cwd,
9684                                          strlen (inferior_cwd));
9685
9686           xsnprintf (rs->buf, get_remote_packet_size (),
9687                      "QSetWorkingDir:%s", hexpath.c_str ());
9688         }
9689       else
9690         {
9691           /* An empty inferior_cwd means that the user wants us to
9692              reset the remote server's inferior's cwd.  */
9693           xsnprintf (rs->buf, get_remote_packet_size (),
9694                      "QSetWorkingDir:");
9695         }
9696
9697       putpkt (rs->buf);
9698       getpkt (&rs->buf, &rs->buf_size, 0);
9699       if (packet_ok (rs->buf,
9700                      &remote_protocol_packets[PACKET_QSetWorkingDir])
9701           != PACKET_OK)
9702         error (_("\
9703 Remote replied unexpectedly while setting the inferior's working\n\
9704 directory: %s"),
9705                rs->buf);
9706
9707     }
9708 }
9709
9710 /* In the extended protocol we want to be able to do things like
9711    "run" and have them basically work as expected.  So we need
9712    a special create_inferior function.  We support changing the
9713    executable file and the command line arguments, but not the
9714    environment.  */
9715
9716 static void
9717 extended_remote_create_inferior (struct target_ops *ops,
9718                                  const char *exec_file,
9719                                  const std::string &args,
9720                                  char **env, int from_tty)
9721 {
9722   int run_worked;
9723   char *stop_reply;
9724   struct remote_state *rs = get_remote_state ();
9725   const char *remote_exec_file = get_remote_exec_file ();
9726
9727   /* If running asynchronously, register the target file descriptor
9728      with the event loop.  */
9729   if (target_can_async_p ())
9730     target_async (1);
9731
9732   /* Disable address space randomization if requested (and supported).  */
9733   if (extended_remote_supports_disable_randomization (ops))
9734     extended_remote_disable_randomization (disable_randomization);
9735
9736   /* If startup-with-shell is on, we inform gdbserver to start the
9737      remote inferior using a shell.  */
9738   if (packet_support (PACKET_QStartupWithShell) != PACKET_DISABLE)
9739     {
9740       xsnprintf (rs->buf, get_remote_packet_size (),
9741                  "QStartupWithShell:%d", startup_with_shell ? 1 : 0);
9742       putpkt (rs->buf);
9743       getpkt (&rs->buf, &rs->buf_size, 0);
9744       if (strcmp (rs->buf, "OK") != 0)
9745         error (_("\
9746 Remote replied unexpectedly while setting startup-with-shell: %s"),
9747                rs->buf);
9748     }
9749
9750   extended_remote_environment_support (rs);
9751
9752   extended_remote_set_inferior_cwd (rs);
9753
9754   /* Now restart the remote server.  */
9755   run_worked = extended_remote_run (args) != -1;
9756   if (!run_worked)
9757     {
9758       /* vRun was not supported.  Fail if we need it to do what the
9759          user requested.  */
9760       if (remote_exec_file[0])
9761         error (_("Remote target does not support \"set remote exec-file\""));
9762       if (!args.empty ())
9763         error (_("Remote target does not support \"set args\" or run <ARGS>"));
9764
9765       /* Fall back to "R".  */
9766       extended_remote_restart ();
9767     }
9768
9769   if (!have_inferiors ())
9770     {
9771       /* Clean up from the last time we ran, before we mark the target
9772          running again.  This will mark breakpoints uninserted, and
9773          get_offsets may insert breakpoints.  */
9774       init_thread_list ();
9775       init_wait_for_inferior ();
9776     }
9777
9778   /* vRun's success return is a stop reply.  */
9779   stop_reply = run_worked ? rs->buf : NULL;
9780   add_current_inferior_and_thread (stop_reply);
9781
9782   /* Get updated offsets, if the stub uses qOffsets.  */
9783   get_offsets ();
9784 }
9785 \f
9786
9787 /* Given a location's target info BP_TGT and the packet buffer BUF,  output
9788    the list of conditions (in agent expression bytecode format), if any, the
9789    target needs to evaluate.  The output is placed into the packet buffer
9790    started from BUF and ended at BUF_END.  */
9791
9792 static int
9793 remote_add_target_side_condition (struct gdbarch *gdbarch,
9794                                   struct bp_target_info *bp_tgt, char *buf,
9795                                   char *buf_end)
9796 {
9797   if (bp_tgt->conditions.empty ())
9798     return 0;
9799
9800   buf += strlen (buf);
9801   xsnprintf (buf, buf_end - buf, "%s", ";");
9802   buf++;
9803
9804   /* Send conditions to the target.  */
9805   for (agent_expr *aexpr : bp_tgt->conditions)
9806     {
9807       xsnprintf (buf, buf_end - buf, "X%x,", aexpr->len);
9808       buf += strlen (buf);
9809       for (int i = 0; i < aexpr->len; ++i)
9810         buf = pack_hex_byte (buf, aexpr->buf[i]);
9811       *buf = '\0';
9812     }
9813   return 0;
9814 }
9815
9816 static void
9817 remote_add_target_side_commands (struct gdbarch *gdbarch,
9818                                  struct bp_target_info *bp_tgt, char *buf)
9819 {
9820   if (bp_tgt->tcommands.empty ())
9821     return;
9822
9823   buf += strlen (buf);
9824
9825   sprintf (buf, ";cmds:%x,", bp_tgt->persist);
9826   buf += strlen (buf);
9827
9828   /* Concatenate all the agent expressions that are commands into the
9829      cmds parameter.  */
9830   for (agent_expr *aexpr : bp_tgt->tcommands)
9831     {
9832       sprintf (buf, "X%x,", aexpr->len);
9833       buf += strlen (buf);
9834       for (int i = 0; i < aexpr->len; ++i)
9835         buf = pack_hex_byte (buf, aexpr->buf[i]);
9836       *buf = '\0';
9837     }
9838 }
9839
9840 /* Insert a breakpoint.  On targets that have software breakpoint
9841    support, we ask the remote target to do the work; on targets
9842    which don't, we insert a traditional memory breakpoint.  */
9843
9844 static int
9845 remote_insert_breakpoint (struct target_ops *ops,
9846                           struct gdbarch *gdbarch,
9847                           struct bp_target_info *bp_tgt)
9848 {
9849   /* Try the "Z" s/w breakpoint packet if it is not already disabled.
9850      If it succeeds, then set the support to PACKET_ENABLE.  If it
9851      fails, and the user has explicitly requested the Z support then
9852      report an error, otherwise, mark it disabled and go on.  */
9853
9854   if (packet_support (PACKET_Z0) != PACKET_DISABLE)
9855     {
9856       CORE_ADDR addr = bp_tgt->reqstd_address;
9857       struct remote_state *rs;
9858       char *p, *endbuf;
9859       int bpsize;
9860
9861       /* Make sure the remote is pointing at the right process, if
9862          necessary.  */
9863       if (!gdbarch_has_global_breakpoints (target_gdbarch ()))
9864         set_general_process ();
9865
9866       rs = get_remote_state ();
9867       p = rs->buf;
9868       endbuf = rs->buf + get_remote_packet_size ();
9869
9870       *(p++) = 'Z';
9871       *(p++) = '0';
9872       *(p++) = ',';
9873       addr = (ULONGEST) remote_address_masked (addr);
9874       p += hexnumstr (p, addr);
9875       xsnprintf (p, endbuf - p, ",%d", bp_tgt->kind);
9876
9877       if (remote_supports_cond_breakpoints (ops))
9878         remote_add_target_side_condition (gdbarch, bp_tgt, p, endbuf);
9879
9880       if (remote_can_run_breakpoint_commands (ops))
9881         remote_add_target_side_commands (gdbarch, bp_tgt, p);
9882
9883       putpkt (rs->buf);
9884       getpkt (&rs->buf, &rs->buf_size, 0);
9885
9886       switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_Z0]))
9887         {
9888         case PACKET_ERROR:
9889           return -1;
9890         case PACKET_OK:
9891           return 0;
9892         case PACKET_UNKNOWN:
9893           break;
9894         }
9895     }
9896
9897   /* If this breakpoint has target-side commands but this stub doesn't
9898      support Z0 packets, throw error.  */
9899   if (!bp_tgt->tcommands.empty ())
9900     throw_error (NOT_SUPPORTED_ERROR, _("\
9901 Target doesn't support breakpoints that have target side commands."));
9902
9903   return memory_insert_breakpoint (ops, gdbarch, bp_tgt);
9904 }
9905
9906 static int
9907 remote_remove_breakpoint (struct target_ops *ops,
9908                           struct gdbarch *gdbarch,
9909                           struct bp_target_info *bp_tgt,
9910                           enum remove_bp_reason reason)
9911 {
9912   CORE_ADDR addr = bp_tgt->placed_address;
9913   struct remote_state *rs = get_remote_state ();
9914
9915   if (packet_support (PACKET_Z0) != PACKET_DISABLE)
9916     {
9917       char *p = rs->buf;
9918       char *endbuf = rs->buf + get_remote_packet_size ();
9919
9920       /* Make sure the remote is pointing at the right process, if
9921          necessary.  */
9922       if (!gdbarch_has_global_breakpoints (target_gdbarch ()))
9923         set_general_process ();
9924
9925       *(p++) = 'z';
9926       *(p++) = '0';
9927       *(p++) = ',';
9928
9929       addr = (ULONGEST) remote_address_masked (bp_tgt->placed_address);
9930       p += hexnumstr (p, addr);
9931       xsnprintf (p, endbuf - p, ",%d", bp_tgt->kind);
9932
9933       putpkt (rs->buf);
9934       getpkt (&rs->buf, &rs->buf_size, 0);
9935
9936       return (rs->buf[0] == 'E');
9937     }
9938
9939   return memory_remove_breakpoint (ops, gdbarch, bp_tgt, reason);
9940 }
9941
9942 static enum Z_packet_type
9943 watchpoint_to_Z_packet (int type)
9944 {
9945   switch (type)
9946     {
9947     case hw_write:
9948       return Z_PACKET_WRITE_WP;
9949       break;
9950     case hw_read:
9951       return Z_PACKET_READ_WP;
9952       break;
9953     case hw_access:
9954       return Z_PACKET_ACCESS_WP;
9955       break;
9956     default:
9957       internal_error (__FILE__, __LINE__,
9958                       _("hw_bp_to_z: bad watchpoint type %d"), type);
9959     }
9960 }
9961
9962 static int
9963 remote_insert_watchpoint (struct target_ops *self, CORE_ADDR addr, int len,
9964                           enum target_hw_bp_type type, struct expression *cond)
9965 {
9966   struct remote_state *rs = get_remote_state ();
9967   char *endbuf = rs->buf + get_remote_packet_size ();
9968   char *p;
9969   enum Z_packet_type packet = watchpoint_to_Z_packet (type);
9970
9971   if (packet_support (PACKET_Z0 + packet) == PACKET_DISABLE)
9972     return 1;
9973
9974   /* Make sure the remote is pointing at the right process, if
9975      necessary.  */
9976   if (!gdbarch_has_global_breakpoints (target_gdbarch ()))
9977     set_general_process ();
9978
9979   xsnprintf (rs->buf, endbuf - rs->buf, "Z%x,", packet);
9980   p = strchr (rs->buf, '\0');
9981   addr = remote_address_masked (addr);
9982   p += hexnumstr (p, (ULONGEST) addr);
9983   xsnprintf (p, endbuf - p, ",%x", len);
9984
9985   putpkt (rs->buf);
9986   getpkt (&rs->buf, &rs->buf_size, 0);
9987
9988   switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_Z0 + packet]))
9989     {
9990     case PACKET_ERROR:
9991       return -1;
9992     case PACKET_UNKNOWN:
9993       return 1;
9994     case PACKET_OK:
9995       return 0;
9996     }
9997   internal_error (__FILE__, __LINE__,
9998                   _("remote_insert_watchpoint: reached end of function"));
9999 }
10000
10001 static int
10002 remote_watchpoint_addr_within_range (struct target_ops *target, CORE_ADDR addr,
10003                                      CORE_ADDR start, int length)
10004 {
10005   CORE_ADDR diff = remote_address_masked (addr - start);
10006
10007   return diff < length;
10008 }
10009
10010
10011 static int
10012 remote_remove_watchpoint (struct target_ops *self, CORE_ADDR addr, int len,
10013                           enum target_hw_bp_type type, struct expression *cond)
10014 {
10015   struct remote_state *rs = get_remote_state ();
10016   char *endbuf = rs->buf + get_remote_packet_size ();
10017   char *p;
10018   enum Z_packet_type packet = watchpoint_to_Z_packet (type);
10019
10020   if (packet_support (PACKET_Z0 + packet) == PACKET_DISABLE)
10021     return -1;
10022
10023   /* Make sure the remote is pointing at the right process, if
10024      necessary.  */
10025   if (!gdbarch_has_global_breakpoints (target_gdbarch ()))
10026     set_general_process ();
10027
10028   xsnprintf (rs->buf, endbuf - rs->buf, "z%x,", packet);
10029   p = strchr (rs->buf, '\0');
10030   addr = remote_address_masked (addr);
10031   p += hexnumstr (p, (ULONGEST) addr);
10032   xsnprintf (p, endbuf - p, ",%x", len);
10033   putpkt (rs->buf);
10034   getpkt (&rs->buf, &rs->buf_size, 0);
10035
10036   switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_Z0 + packet]))
10037     {
10038     case PACKET_ERROR:
10039     case PACKET_UNKNOWN:
10040       return -1;
10041     case PACKET_OK:
10042       return 0;
10043     }
10044   internal_error (__FILE__, __LINE__,
10045                   _("remote_remove_watchpoint: reached end of function"));
10046 }
10047
10048
10049 int remote_hw_watchpoint_limit = -1;
10050 int remote_hw_watchpoint_length_limit = -1;
10051 int remote_hw_breakpoint_limit = -1;
10052
10053 static int
10054 remote_region_ok_for_hw_watchpoint (struct target_ops *self,
10055                                     CORE_ADDR addr, int len)
10056 {
10057   if (remote_hw_watchpoint_length_limit == 0)
10058     return 0;
10059   else if (remote_hw_watchpoint_length_limit < 0)
10060     return 1;
10061   else if (len <= remote_hw_watchpoint_length_limit)
10062     return 1;
10063   else
10064     return 0;
10065 }
10066
10067 static int
10068 remote_check_watch_resources (struct target_ops *self,
10069                               enum bptype type, int cnt, int ot)
10070 {
10071   if (type == bp_hardware_breakpoint)
10072     {
10073       if (remote_hw_breakpoint_limit == 0)
10074         return 0;
10075       else if (remote_hw_breakpoint_limit < 0)
10076         return 1;
10077       else if (cnt <= remote_hw_breakpoint_limit)
10078         return 1;
10079     }
10080   else
10081     {
10082       if (remote_hw_watchpoint_limit == 0)
10083         return 0;
10084       else if (remote_hw_watchpoint_limit < 0)
10085         return 1;
10086       else if (ot)
10087         return -1;
10088       else if (cnt <= remote_hw_watchpoint_limit)
10089         return 1;
10090     }
10091   return -1;
10092 }
10093
10094 /* The to_stopped_by_sw_breakpoint method of target remote.  */
10095
10096 static int
10097 remote_stopped_by_sw_breakpoint (struct target_ops *ops)
10098 {
10099   struct thread_info *thread = inferior_thread ();
10100
10101   return (thread->priv != NULL
10102           && thread->priv->stop_reason == TARGET_STOPPED_BY_SW_BREAKPOINT);
10103 }
10104
10105 /* The to_supports_stopped_by_sw_breakpoint method of target
10106    remote.  */
10107
10108 static int
10109 remote_supports_stopped_by_sw_breakpoint (struct target_ops *ops)
10110 {
10111   return (packet_support (PACKET_swbreak_feature) == PACKET_ENABLE);
10112 }
10113
10114 /* The to_stopped_by_hw_breakpoint method of target remote.  */
10115
10116 static int
10117 remote_stopped_by_hw_breakpoint (struct target_ops *ops)
10118 {
10119   struct thread_info *thread = inferior_thread ();
10120
10121   return (thread->priv != NULL
10122           && thread->priv->stop_reason == TARGET_STOPPED_BY_HW_BREAKPOINT);
10123 }
10124
10125 /* The to_supports_stopped_by_hw_breakpoint method of target
10126    remote.  */
10127
10128 static int
10129 remote_supports_stopped_by_hw_breakpoint (struct target_ops *ops)
10130 {
10131   return (packet_support (PACKET_hwbreak_feature) == PACKET_ENABLE);
10132 }
10133
10134 static int
10135 remote_stopped_by_watchpoint (struct target_ops *ops)
10136 {
10137   struct thread_info *thread = inferior_thread ();
10138
10139   return (thread->priv != NULL
10140           && thread->priv->stop_reason == TARGET_STOPPED_BY_WATCHPOINT);
10141 }
10142
10143 static int
10144 remote_stopped_data_address (struct target_ops *target, CORE_ADDR *addr_p)
10145 {
10146   struct thread_info *thread = inferior_thread ();
10147
10148   if (thread->priv != NULL
10149       && thread->priv->stop_reason == TARGET_STOPPED_BY_WATCHPOINT)
10150     {
10151       *addr_p = thread->priv->watch_data_address;
10152       return 1;
10153     }
10154
10155   return 0;
10156 }
10157
10158
10159 static int
10160 remote_insert_hw_breakpoint (struct target_ops *self, struct gdbarch *gdbarch,
10161                              struct bp_target_info *bp_tgt)
10162 {
10163   CORE_ADDR addr = bp_tgt->reqstd_address;
10164   struct remote_state *rs;
10165   char *p, *endbuf;
10166   char *message;
10167
10168   if (packet_support (PACKET_Z1) == PACKET_DISABLE)
10169     return -1;
10170
10171   /* Make sure the remote is pointing at the right process, if
10172      necessary.  */
10173   if (!gdbarch_has_global_breakpoints (target_gdbarch ()))
10174     set_general_process ();
10175
10176   rs = get_remote_state ();
10177   p = rs->buf;
10178   endbuf = rs->buf + get_remote_packet_size ();
10179
10180   *(p++) = 'Z';
10181   *(p++) = '1';
10182   *(p++) = ',';
10183
10184   addr = remote_address_masked (addr);
10185   p += hexnumstr (p, (ULONGEST) addr);
10186   xsnprintf (p, endbuf - p, ",%x", bp_tgt->kind);
10187
10188   if (remote_supports_cond_breakpoints (self))
10189     remote_add_target_side_condition (gdbarch, bp_tgt, p, endbuf);
10190
10191   if (remote_can_run_breakpoint_commands (self))
10192     remote_add_target_side_commands (gdbarch, bp_tgt, p);
10193
10194   putpkt (rs->buf);
10195   getpkt (&rs->buf, &rs->buf_size, 0);
10196
10197   switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_Z1]))
10198     {
10199     case PACKET_ERROR:
10200       if (rs->buf[1] == '.')
10201         {
10202           message = strchr (rs->buf + 2, '.');
10203           if (message)
10204             error (_("Remote failure reply: %s"), message + 1);
10205         }
10206       return -1;
10207     case PACKET_UNKNOWN:
10208       return -1;
10209     case PACKET_OK:
10210       return 0;
10211     }
10212   internal_error (__FILE__, __LINE__,
10213                   _("remote_insert_hw_breakpoint: reached end of function"));
10214 }
10215
10216
10217 static int
10218 remote_remove_hw_breakpoint (struct target_ops *self, struct gdbarch *gdbarch,
10219                              struct bp_target_info *bp_tgt)
10220 {
10221   CORE_ADDR addr;
10222   struct remote_state *rs = get_remote_state ();
10223   char *p = rs->buf;
10224   char *endbuf = rs->buf + get_remote_packet_size ();
10225
10226   if (packet_support (PACKET_Z1) == PACKET_DISABLE)
10227     return -1;
10228
10229   /* Make sure the remote is pointing at the right process, if
10230      necessary.  */
10231   if (!gdbarch_has_global_breakpoints (target_gdbarch ()))
10232     set_general_process ();
10233
10234   *(p++) = 'z';
10235   *(p++) = '1';
10236   *(p++) = ',';
10237
10238   addr = remote_address_masked (bp_tgt->placed_address);
10239   p += hexnumstr (p, (ULONGEST) addr);
10240   xsnprintf (p, endbuf  - p, ",%x", bp_tgt->kind);
10241
10242   putpkt (rs->buf);
10243   getpkt (&rs->buf, &rs->buf_size, 0);
10244
10245   switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_Z1]))
10246     {
10247     case PACKET_ERROR:
10248     case PACKET_UNKNOWN:
10249       return -1;
10250     case PACKET_OK:
10251       return 0;
10252     }
10253   internal_error (__FILE__, __LINE__,
10254                   _("remote_remove_hw_breakpoint: reached end of function"));
10255 }
10256
10257 /* Verify memory using the "qCRC:" request.  */
10258
10259 static int
10260 remote_verify_memory (struct target_ops *ops,
10261                       const gdb_byte *data, CORE_ADDR lma, ULONGEST size)
10262 {
10263   struct remote_state *rs = get_remote_state ();
10264   unsigned long host_crc, target_crc;
10265   char *tmp;
10266
10267   /* It doesn't make sense to use qCRC if the remote target is
10268      connected but not running.  */
10269   if (target_has_execution && packet_support (PACKET_qCRC) != PACKET_DISABLE)
10270     {
10271       enum packet_result result;
10272
10273       /* Make sure the remote is pointing at the right process.  */
10274       set_general_process ();
10275
10276       /* FIXME: assumes lma can fit into long.  */
10277       xsnprintf (rs->buf, get_remote_packet_size (), "qCRC:%lx,%lx",
10278                  (long) lma, (long) size);
10279       putpkt (rs->buf);
10280
10281       /* Be clever; compute the host_crc before waiting for target
10282          reply.  */
10283       host_crc = xcrc32 (data, size, 0xffffffff);
10284
10285       getpkt (&rs->buf, &rs->buf_size, 0);
10286
10287       result = packet_ok (rs->buf,
10288                           &remote_protocol_packets[PACKET_qCRC]);
10289       if (result == PACKET_ERROR)
10290         return -1;
10291       else if (result == PACKET_OK)
10292         {
10293           for (target_crc = 0, tmp = &rs->buf[1]; *tmp; tmp++)
10294             target_crc = target_crc * 16 + fromhex (*tmp);
10295
10296           return (host_crc == target_crc);
10297         }
10298     }
10299
10300   return simple_verify_memory (ops, data, lma, size);
10301 }
10302
10303 /* compare-sections command
10304
10305    With no arguments, compares each loadable section in the exec bfd
10306    with the same memory range on the target, and reports mismatches.
10307    Useful for verifying the image on the target against the exec file.  */
10308
10309 static void
10310 compare_sections_command (const char *args, int from_tty)
10311 {
10312   asection *s;
10313   gdb_byte *sectdata;
10314   const char *sectname;
10315   bfd_size_type size;
10316   bfd_vma lma;
10317   int matched = 0;
10318   int mismatched = 0;
10319   int res;
10320   int read_only = 0;
10321
10322   if (!exec_bfd)
10323     error (_("command cannot be used without an exec file"));
10324
10325   /* Make sure the remote is pointing at the right process.  */
10326   set_general_process ();
10327
10328   if (args != NULL && strcmp (args, "-r") == 0)
10329     {
10330       read_only = 1;
10331       args = NULL;
10332     }
10333
10334   for (s = exec_bfd->sections; s; s = s->next)
10335     {
10336       if (!(s->flags & SEC_LOAD))
10337         continue;               /* Skip non-loadable section.  */
10338
10339       if (read_only && (s->flags & SEC_READONLY) == 0)
10340         continue;               /* Skip writeable sections */
10341
10342       size = bfd_get_section_size (s);
10343       if (size == 0)
10344         continue;               /* Skip zero-length section.  */
10345
10346       sectname = bfd_get_section_name (exec_bfd, s);
10347       if (args && strcmp (args, sectname) != 0)
10348         continue;               /* Not the section selected by user.  */
10349
10350       matched = 1;              /* Do this section.  */
10351       lma = s->lma;
10352
10353       gdb::byte_vector sectdata (size);
10354       bfd_get_section_contents (exec_bfd, s, sectdata.data (), 0, size);
10355
10356       res = target_verify_memory (sectdata.data (), lma, size);
10357
10358       if (res == -1)
10359         error (_("target memory fault, section %s, range %s -- %s"), sectname,
10360                paddress (target_gdbarch (), lma),
10361                paddress (target_gdbarch (), lma + size));
10362
10363       printf_filtered ("Section %s, range %s -- %s: ", sectname,
10364                        paddress (target_gdbarch (), lma),
10365                        paddress (target_gdbarch (), lma + size));
10366       if (res)
10367         printf_filtered ("matched.\n");
10368       else
10369         {
10370           printf_filtered ("MIS-MATCHED!\n");
10371           mismatched++;
10372         }
10373     }
10374   if (mismatched > 0)
10375     warning (_("One or more sections of the target image does not match\n\
10376 the loaded file\n"));
10377   if (args && !matched)
10378     printf_filtered (_("No loaded section named '%s'.\n"), args);
10379 }
10380
10381 /* Write LEN bytes from WRITEBUF into OBJECT_NAME/ANNEX at OFFSET
10382    into remote target.  The number of bytes written to the remote
10383    target is returned, or -1 for error.  */
10384
10385 static enum target_xfer_status
10386 remote_write_qxfer (struct target_ops *ops, const char *object_name,
10387                     const char *annex, const gdb_byte *writebuf, 
10388                     ULONGEST offset, LONGEST len, ULONGEST *xfered_len,
10389                     struct packet_config *packet)
10390 {
10391   int i, buf_len;
10392   ULONGEST n;
10393   struct remote_state *rs = get_remote_state ();
10394   int max_size = get_memory_write_packet_size (); 
10395
10396   if (packet->support == PACKET_DISABLE)
10397     return TARGET_XFER_E_IO;
10398
10399   /* Insert header.  */
10400   i = snprintf (rs->buf, max_size, 
10401                 "qXfer:%s:write:%s:%s:",
10402                 object_name, annex ? annex : "",
10403                 phex_nz (offset, sizeof offset));
10404   max_size -= (i + 1);
10405
10406   /* Escape as much data as fits into rs->buf.  */
10407   buf_len = remote_escape_output 
10408     (writebuf, len, 1, (gdb_byte *) rs->buf + i, &max_size, max_size);
10409
10410   if (putpkt_binary (rs->buf, i + buf_len) < 0
10411       || getpkt_sane (&rs->buf, &rs->buf_size, 0) < 0
10412       || packet_ok (rs->buf, packet) != PACKET_OK)
10413     return TARGET_XFER_E_IO;
10414
10415   unpack_varlen_hex (rs->buf, &n);
10416
10417   *xfered_len = n;
10418   return TARGET_XFER_OK;
10419 }
10420
10421 /* Read OBJECT_NAME/ANNEX from the remote target using a qXfer packet.
10422    Data at OFFSET, of up to LEN bytes, is read into READBUF; the
10423    number of bytes read is returned, or 0 for EOF, or -1 for error.
10424    The number of bytes read may be less than LEN without indicating an
10425    EOF.  PACKET is checked and updated to indicate whether the remote
10426    target supports this object.  */
10427
10428 static enum target_xfer_status
10429 remote_read_qxfer (struct target_ops *ops, const char *object_name,
10430                    const char *annex,
10431                    gdb_byte *readbuf, ULONGEST offset, LONGEST len,
10432                    ULONGEST *xfered_len,
10433                    struct packet_config *packet)
10434 {
10435   struct remote_state *rs = get_remote_state ();
10436   LONGEST i, n, packet_len;
10437
10438   if (packet->support == PACKET_DISABLE)
10439     return TARGET_XFER_E_IO;
10440
10441   /* Check whether we've cached an end-of-object packet that matches
10442      this request.  */
10443   if (rs->finished_object)
10444     {
10445       if (strcmp (object_name, rs->finished_object) == 0
10446           && strcmp (annex ? annex : "", rs->finished_annex) == 0
10447           && offset == rs->finished_offset)
10448         return TARGET_XFER_EOF;
10449
10450
10451       /* Otherwise, we're now reading something different.  Discard
10452          the cache.  */
10453       xfree (rs->finished_object);
10454       xfree (rs->finished_annex);
10455       rs->finished_object = NULL;
10456       rs->finished_annex = NULL;
10457     }
10458
10459   /* Request only enough to fit in a single packet.  The actual data
10460      may not, since we don't know how much of it will need to be escaped;
10461      the target is free to respond with slightly less data.  We subtract
10462      five to account for the response type and the protocol frame.  */
10463   n = std::min<LONGEST> (get_remote_packet_size () - 5, len);
10464   snprintf (rs->buf, get_remote_packet_size () - 4, "qXfer:%s:read:%s:%s,%s",
10465             object_name, annex ? annex : "",
10466             phex_nz (offset, sizeof offset),
10467             phex_nz (n, sizeof n));
10468   i = putpkt (rs->buf);
10469   if (i < 0)
10470     return TARGET_XFER_E_IO;
10471
10472   rs->buf[0] = '\0';
10473   packet_len = getpkt_sane (&rs->buf, &rs->buf_size, 0);
10474   if (packet_len < 0 || packet_ok (rs->buf, packet) != PACKET_OK)
10475     return TARGET_XFER_E_IO;
10476
10477   if (rs->buf[0] != 'l' && rs->buf[0] != 'm')
10478     error (_("Unknown remote qXfer reply: %s"), rs->buf);
10479
10480   /* 'm' means there is (or at least might be) more data after this
10481      batch.  That does not make sense unless there's at least one byte
10482      of data in this reply.  */
10483   if (rs->buf[0] == 'm' && packet_len == 1)
10484     error (_("Remote qXfer reply contained no data."));
10485
10486   /* Got some data.  */
10487   i = remote_unescape_input ((gdb_byte *) rs->buf + 1,
10488                              packet_len - 1, readbuf, n);
10489
10490   /* 'l' is an EOF marker, possibly including a final block of data,
10491      or possibly empty.  If we have the final block of a non-empty
10492      object, record this fact to bypass a subsequent partial read.  */
10493   if (rs->buf[0] == 'l' && offset + i > 0)
10494     {
10495       rs->finished_object = xstrdup (object_name);
10496       rs->finished_annex = xstrdup (annex ? annex : "");
10497       rs->finished_offset = offset + i;
10498     }
10499
10500   if (i == 0)
10501     return TARGET_XFER_EOF;
10502   else
10503     {
10504       *xfered_len = i;
10505       return TARGET_XFER_OK;
10506     }
10507 }
10508
10509 static enum target_xfer_status
10510 remote_xfer_partial (struct target_ops *ops, enum target_object object,
10511                      const char *annex, gdb_byte *readbuf,
10512                      const gdb_byte *writebuf, ULONGEST offset, ULONGEST len,
10513                      ULONGEST *xfered_len)
10514 {
10515   struct remote_state *rs;
10516   int i;
10517   char *p2;
10518   char query_type;
10519   int unit_size = gdbarch_addressable_memory_unit_size (target_gdbarch ());
10520
10521   set_remote_traceframe ();
10522   set_general_thread (inferior_ptid);
10523
10524   rs = get_remote_state ();
10525
10526   /* Handle memory using the standard memory routines.  */
10527   if (object == TARGET_OBJECT_MEMORY)
10528     {
10529       /* If the remote target is connected but not running, we should
10530          pass this request down to a lower stratum (e.g. the executable
10531          file).  */
10532       if (!target_has_execution)
10533         return TARGET_XFER_EOF;
10534
10535       if (writebuf != NULL)
10536         return remote_write_bytes (offset, writebuf, len, unit_size,
10537                                    xfered_len);
10538       else
10539         return remote_read_bytes (ops, offset, readbuf, len, unit_size,
10540                                   xfered_len);
10541     }
10542
10543   /* Handle SPU memory using qxfer packets.  */
10544   if (object == TARGET_OBJECT_SPU)
10545     {
10546       if (readbuf)
10547         return remote_read_qxfer (ops, "spu", annex, readbuf, offset, len,
10548                                   xfered_len, &remote_protocol_packets
10549                                   [PACKET_qXfer_spu_read]);
10550       else
10551         return remote_write_qxfer (ops, "spu", annex, writebuf, offset, len,
10552                                    xfered_len, &remote_protocol_packets
10553                                    [PACKET_qXfer_spu_write]);
10554     }
10555
10556   /* Handle extra signal info using qxfer packets.  */
10557   if (object == TARGET_OBJECT_SIGNAL_INFO)
10558     {
10559       if (readbuf)
10560         return remote_read_qxfer (ops, "siginfo", annex, readbuf, offset, len,
10561                                   xfered_len, &remote_protocol_packets
10562                                   [PACKET_qXfer_siginfo_read]);
10563       else
10564         return remote_write_qxfer (ops, "siginfo", annex,
10565                                    writebuf, offset, len, xfered_len,
10566                                    &remote_protocol_packets
10567                                    [PACKET_qXfer_siginfo_write]);
10568     }
10569
10570   if (object == TARGET_OBJECT_STATIC_TRACE_DATA)
10571     {
10572       if (readbuf)
10573         return remote_read_qxfer (ops, "statictrace", annex,
10574                                   readbuf, offset, len, xfered_len,
10575                                   &remote_protocol_packets
10576                                   [PACKET_qXfer_statictrace_read]);
10577       else
10578         return TARGET_XFER_E_IO;
10579     }
10580
10581   /* Only handle flash writes.  */
10582   if (writebuf != NULL)
10583     {
10584       switch (object)
10585         {
10586         case TARGET_OBJECT_FLASH:
10587           return remote_flash_write (ops, offset, len, xfered_len,
10588                                      writebuf);
10589
10590         default:
10591           return TARGET_XFER_E_IO;
10592         }
10593     }
10594
10595   /* Map pre-existing objects onto letters.  DO NOT do this for new
10596      objects!!!  Instead specify new query packets.  */
10597   switch (object)
10598     {
10599     case TARGET_OBJECT_AVR:
10600       query_type = 'R';
10601       break;
10602
10603     case TARGET_OBJECT_AUXV:
10604       gdb_assert (annex == NULL);
10605       return remote_read_qxfer (ops, "auxv", annex, readbuf, offset, len,
10606                                 xfered_len,
10607                                 &remote_protocol_packets[PACKET_qXfer_auxv]);
10608
10609     case TARGET_OBJECT_AVAILABLE_FEATURES:
10610       return remote_read_qxfer
10611         (ops, "features", annex, readbuf, offset, len, xfered_len,
10612          &remote_protocol_packets[PACKET_qXfer_features]);
10613
10614     case TARGET_OBJECT_LIBRARIES:
10615       return remote_read_qxfer
10616         (ops, "libraries", annex, readbuf, offset, len, xfered_len,
10617          &remote_protocol_packets[PACKET_qXfer_libraries]);
10618
10619     case TARGET_OBJECT_LIBRARIES_SVR4:
10620       return remote_read_qxfer
10621         (ops, "libraries-svr4", annex, readbuf, offset, len, xfered_len,
10622          &remote_protocol_packets[PACKET_qXfer_libraries_svr4]);
10623
10624     case TARGET_OBJECT_MEMORY_MAP:
10625       gdb_assert (annex == NULL);
10626       return remote_read_qxfer (ops, "memory-map", annex, readbuf, offset, len,
10627                                  xfered_len,
10628                                 &remote_protocol_packets[PACKET_qXfer_memory_map]);
10629
10630     case TARGET_OBJECT_OSDATA:
10631       /* Should only get here if we're connected.  */
10632       gdb_assert (rs->remote_desc);
10633       return remote_read_qxfer
10634         (ops, "osdata", annex, readbuf, offset, len, xfered_len,
10635         &remote_protocol_packets[PACKET_qXfer_osdata]);
10636
10637     case TARGET_OBJECT_THREADS:
10638       gdb_assert (annex == NULL);
10639       return remote_read_qxfer (ops, "threads", annex, readbuf, offset, len,
10640                                 xfered_len,
10641                                 &remote_protocol_packets[PACKET_qXfer_threads]);
10642
10643     case TARGET_OBJECT_TRACEFRAME_INFO:
10644       gdb_assert (annex == NULL);
10645       return remote_read_qxfer
10646         (ops, "traceframe-info", annex, readbuf, offset, len, xfered_len,
10647          &remote_protocol_packets[PACKET_qXfer_traceframe_info]);
10648
10649     case TARGET_OBJECT_FDPIC:
10650       return remote_read_qxfer (ops, "fdpic", annex, readbuf, offset, len,
10651                                 xfered_len,
10652                                 &remote_protocol_packets[PACKET_qXfer_fdpic]);
10653
10654     case TARGET_OBJECT_OPENVMS_UIB:
10655       return remote_read_qxfer (ops, "uib", annex, readbuf, offset, len,
10656                                 xfered_len,
10657                                 &remote_protocol_packets[PACKET_qXfer_uib]);
10658
10659     case TARGET_OBJECT_BTRACE:
10660       return remote_read_qxfer (ops, "btrace", annex, readbuf, offset, len,
10661                                 xfered_len,
10662         &remote_protocol_packets[PACKET_qXfer_btrace]);
10663
10664     case TARGET_OBJECT_BTRACE_CONF:
10665       return remote_read_qxfer (ops, "btrace-conf", annex, readbuf, offset,
10666                                 len, xfered_len,
10667         &remote_protocol_packets[PACKET_qXfer_btrace_conf]);
10668
10669     case TARGET_OBJECT_EXEC_FILE:
10670       return remote_read_qxfer (ops, "exec-file", annex, readbuf, offset,
10671                                 len, xfered_len,
10672         &remote_protocol_packets[PACKET_qXfer_exec_file]);
10673
10674     default:
10675       return TARGET_XFER_E_IO;
10676     }
10677
10678   /* Minimum outbuf size is get_remote_packet_size ().  If LEN is not
10679      large enough let the caller deal with it.  */
10680   if (len < get_remote_packet_size ())
10681     return TARGET_XFER_E_IO;
10682   len = get_remote_packet_size ();
10683
10684   /* Except for querying the minimum buffer size, target must be open.  */
10685   if (!rs->remote_desc)
10686     error (_("remote query is only available after target open"));
10687
10688   gdb_assert (annex != NULL);
10689   gdb_assert (readbuf != NULL);
10690
10691   p2 = rs->buf;
10692   *p2++ = 'q';
10693   *p2++ = query_type;
10694
10695   /* We used one buffer char for the remote protocol q command and
10696      another for the query type.  As the remote protocol encapsulation
10697      uses 4 chars plus one extra in case we are debugging
10698      (remote_debug), we have PBUFZIZ - 7 left to pack the query
10699      string.  */
10700   i = 0;
10701   while (annex[i] && (i < (get_remote_packet_size () - 8)))
10702     {
10703       /* Bad caller may have sent forbidden characters.  */
10704       gdb_assert (isprint (annex[i]) && annex[i] != '$' && annex[i] != '#');
10705       *p2++ = annex[i];
10706       i++;
10707     }
10708   *p2 = '\0';
10709   gdb_assert (annex[i] == '\0');
10710
10711   i = putpkt (rs->buf);
10712   if (i < 0)
10713     return TARGET_XFER_E_IO;
10714
10715   getpkt (&rs->buf, &rs->buf_size, 0);
10716   strcpy ((char *) readbuf, rs->buf);
10717
10718   *xfered_len = strlen ((char *) readbuf);
10719   return TARGET_XFER_OK;
10720 }
10721
10722 /* Implementation of to_get_memory_xfer_limit.  */
10723
10724 static ULONGEST
10725 remote_get_memory_xfer_limit (struct target_ops *ops)
10726 {
10727   return get_memory_write_packet_size ();
10728 }
10729
10730 static int
10731 remote_search_memory (struct target_ops* ops,
10732                       CORE_ADDR start_addr, ULONGEST search_space_len,
10733                       const gdb_byte *pattern, ULONGEST pattern_len,
10734                       CORE_ADDR *found_addrp)
10735 {
10736   int addr_size = gdbarch_addr_bit (target_gdbarch ()) / 8;
10737   struct remote_state *rs = get_remote_state ();
10738   int max_size = get_memory_write_packet_size ();
10739   struct packet_config *packet =
10740     &remote_protocol_packets[PACKET_qSearch_memory];
10741   /* Number of packet bytes used to encode the pattern;
10742      this could be more than PATTERN_LEN due to escape characters.  */
10743   int escaped_pattern_len;
10744   /* Amount of pattern that was encodable in the packet.  */
10745   int used_pattern_len;
10746   int i;
10747   int found;
10748   ULONGEST found_addr;
10749
10750   /* Don't go to the target if we don't have to.
10751      This is done before checking packet->support to avoid the possibility that
10752      a success for this edge case means the facility works in general.  */
10753   if (pattern_len > search_space_len)
10754     return 0;
10755   if (pattern_len == 0)
10756     {
10757       *found_addrp = start_addr;
10758       return 1;
10759     }
10760
10761   /* If we already know the packet isn't supported, fall back to the simple
10762      way of searching memory.  */
10763
10764   if (packet_config_support (packet) == PACKET_DISABLE)
10765     {
10766       /* Target doesn't provided special support, fall back and use the
10767          standard support (copy memory and do the search here).  */
10768       return simple_search_memory (ops, start_addr, search_space_len,
10769                                    pattern, pattern_len, found_addrp);
10770     }
10771
10772   /* Make sure the remote is pointing at the right process.  */
10773   set_general_process ();
10774
10775   /* Insert header.  */
10776   i = snprintf (rs->buf, max_size, 
10777                 "qSearch:memory:%s;%s;",
10778                 phex_nz (start_addr, addr_size),
10779                 phex_nz (search_space_len, sizeof (search_space_len)));
10780   max_size -= (i + 1);
10781
10782   /* Escape as much data as fits into rs->buf.  */
10783   escaped_pattern_len =
10784     remote_escape_output (pattern, pattern_len, 1, (gdb_byte *) rs->buf + i,
10785                           &used_pattern_len, max_size);
10786
10787   /* Bail if the pattern is too large.  */
10788   if (used_pattern_len != pattern_len)
10789     error (_("Pattern is too large to transmit to remote target."));
10790
10791   if (putpkt_binary (rs->buf, i + escaped_pattern_len) < 0
10792       || getpkt_sane (&rs->buf, &rs->buf_size, 0) < 0
10793       || packet_ok (rs->buf, packet) != PACKET_OK)
10794     {
10795       /* The request may not have worked because the command is not
10796          supported.  If so, fall back to the simple way.  */
10797       if (packet->support == PACKET_DISABLE)
10798         {
10799           return simple_search_memory (ops, start_addr, search_space_len,
10800                                        pattern, pattern_len, found_addrp);
10801         }
10802       return -1;
10803     }
10804
10805   if (rs->buf[0] == '0')
10806     found = 0;
10807   else if (rs->buf[0] == '1')
10808     {
10809       found = 1;
10810       if (rs->buf[1] != ',')
10811         error (_("Unknown qSearch:memory reply: %s"), rs->buf);
10812       unpack_varlen_hex (rs->buf + 2, &found_addr);
10813       *found_addrp = found_addr;
10814     }
10815   else
10816     error (_("Unknown qSearch:memory reply: %s"), rs->buf);
10817
10818   return found;
10819 }
10820
10821 static void
10822 remote_rcmd (struct target_ops *self, const char *command,
10823              struct ui_file *outbuf)
10824 {
10825   struct remote_state *rs = get_remote_state ();
10826   char *p = rs->buf;
10827
10828   if (!rs->remote_desc)
10829     error (_("remote rcmd is only available after target open"));
10830
10831   /* Send a NULL command across as an empty command.  */
10832   if (command == NULL)
10833     command = "";
10834
10835   /* The query prefix.  */
10836   strcpy (rs->buf, "qRcmd,");
10837   p = strchr (rs->buf, '\0');
10838
10839   if ((strlen (rs->buf) + strlen (command) * 2 + 8/*misc*/)
10840       > get_remote_packet_size ())
10841     error (_("\"monitor\" command ``%s'' is too long."), command);
10842
10843   /* Encode the actual command.  */
10844   bin2hex ((const gdb_byte *) command, p, strlen (command));
10845
10846   if (putpkt (rs->buf) < 0)
10847     error (_("Communication problem with target."));
10848
10849   /* get/display the response */
10850   while (1)
10851     {
10852       char *buf;
10853
10854       /* XXX - see also remote_get_noisy_reply().  */
10855       QUIT;                     /* Allow user to bail out with ^C.  */
10856       rs->buf[0] = '\0';
10857       if (getpkt_sane (&rs->buf, &rs->buf_size, 0) == -1)
10858         { 
10859           /* Timeout.  Continue to (try to) read responses.
10860              This is better than stopping with an error, assuming the stub
10861              is still executing the (long) monitor command.
10862              If needed, the user can interrupt gdb using C-c, obtaining
10863              an effect similar to stop on timeout.  */
10864           continue;
10865         }
10866       buf = rs->buf;
10867       if (buf[0] == '\0')
10868         error (_("Target does not support this command."));
10869       if (buf[0] == 'O' && buf[1] != 'K')
10870         {
10871           remote_console_output (buf + 1); /* 'O' message from stub.  */
10872           continue;
10873         }
10874       if (strcmp (buf, "OK") == 0)
10875         break;
10876       if (strlen (buf) == 3 && buf[0] == 'E'
10877           && isdigit (buf[1]) && isdigit (buf[2]))
10878         {
10879           error (_("Protocol error with Rcmd"));
10880         }
10881       for (p = buf; p[0] != '\0' && p[1] != '\0'; p += 2)
10882         {
10883           char c = (fromhex (p[0]) << 4) + fromhex (p[1]);
10884
10885           fputc_unfiltered (c, outbuf);
10886         }
10887       break;
10888     }
10889 }
10890
10891 static std::vector<mem_region>
10892 remote_memory_map (struct target_ops *ops)
10893 {
10894   std::vector<mem_region> result;
10895   gdb::unique_xmalloc_ptr<char> text
10896     = target_read_stralloc (&current_target, TARGET_OBJECT_MEMORY_MAP, NULL);
10897
10898   if (text)
10899     result = parse_memory_map (text.get ());
10900
10901   return result;
10902 }
10903
10904 static void
10905 packet_command (const char *args, int from_tty)
10906 {
10907   struct remote_state *rs = get_remote_state ();
10908
10909   if (!rs->remote_desc)
10910     error (_("command can only be used with remote target"));
10911
10912   if (!args)
10913     error (_("remote-packet command requires packet text as argument"));
10914
10915   puts_filtered ("sending: ");
10916   print_packet (args);
10917   puts_filtered ("\n");
10918   putpkt (args);
10919
10920   getpkt (&rs->buf, &rs->buf_size, 0);
10921   puts_filtered ("received: ");
10922   print_packet (rs->buf);
10923   puts_filtered ("\n");
10924 }
10925
10926 #if 0
10927 /* --------- UNIT_TEST for THREAD oriented PACKETS ------------------- */
10928
10929 static void display_thread_info (struct gdb_ext_thread_info *info);
10930
10931 static void threadset_test_cmd (char *cmd, int tty);
10932
10933 static void threadalive_test (char *cmd, int tty);
10934
10935 static void threadlist_test_cmd (char *cmd, int tty);
10936
10937 int get_and_display_threadinfo (threadref *ref);
10938
10939 static void threadinfo_test_cmd (char *cmd, int tty);
10940
10941 static int thread_display_step (threadref *ref, void *context);
10942
10943 static void threadlist_update_test_cmd (char *cmd, int tty);
10944
10945 static void init_remote_threadtests (void);
10946
10947 #define SAMPLE_THREAD  0x05060708       /* Truncated 64 bit threadid.  */
10948
10949 static void
10950 threadset_test_cmd (char *cmd, int tty)
10951 {
10952   int sample_thread = SAMPLE_THREAD;
10953
10954   printf_filtered (_("Remote threadset test\n"));
10955   set_general_thread (sample_thread);
10956 }
10957
10958
10959 static void
10960 threadalive_test (char *cmd, int tty)
10961 {
10962   int sample_thread = SAMPLE_THREAD;
10963   int pid = ptid_get_pid (inferior_ptid);
10964   ptid_t ptid = ptid_build (pid, sample_thread, 0);
10965
10966   if (remote_thread_alive (ptid))
10967     printf_filtered ("PASS: Thread alive test\n");
10968   else
10969     printf_filtered ("FAIL: Thread alive test\n");
10970 }
10971
10972 void output_threadid (char *title, threadref *ref);
10973
10974 void
10975 output_threadid (char *title, threadref *ref)
10976 {
10977   char hexid[20];
10978
10979   pack_threadid (&hexid[0], ref);       /* Convert threead id into hex.  */
10980   hexid[16] = 0;
10981   printf_filtered ("%s  %s\n", title, (&hexid[0]));
10982 }
10983
10984 static void
10985 threadlist_test_cmd (char *cmd, int tty)
10986 {
10987   int startflag = 1;
10988   threadref nextthread;
10989   int done, result_count;
10990   threadref threadlist[3];
10991
10992   printf_filtered ("Remote Threadlist test\n");
10993   if (!remote_get_threadlist (startflag, &nextthread, 3, &done,
10994                               &result_count, &threadlist[0]))
10995     printf_filtered ("FAIL: threadlist test\n");
10996   else
10997     {
10998       threadref *scan = threadlist;
10999       threadref *limit = scan + result_count;
11000
11001       while (scan < limit)
11002         output_threadid (" thread ", scan++);
11003     }
11004 }
11005
11006 void
11007 display_thread_info (struct gdb_ext_thread_info *info)
11008 {
11009   output_threadid ("Threadid: ", &info->threadid);
11010   printf_filtered ("Name: %s\n ", info->shortname);
11011   printf_filtered ("State: %s\n", info->display);
11012   printf_filtered ("other: %s\n\n", info->more_display);
11013 }
11014
11015 int
11016 get_and_display_threadinfo (threadref *ref)
11017 {
11018   int result;
11019   int set;
11020   struct gdb_ext_thread_info threadinfo;
11021
11022   set = TAG_THREADID | TAG_EXISTS | TAG_THREADNAME
11023     | TAG_MOREDISPLAY | TAG_DISPLAY;
11024   if (0 != (result = remote_get_threadinfo (ref, set, &threadinfo)))
11025     display_thread_info (&threadinfo);
11026   return result;
11027 }
11028
11029 static void
11030 threadinfo_test_cmd (char *cmd, int tty)
11031 {
11032   int athread = SAMPLE_THREAD;
11033   threadref thread;
11034   int set;
11035
11036   int_to_threadref (&thread, athread);
11037   printf_filtered ("Remote Threadinfo test\n");
11038   if (!get_and_display_threadinfo (&thread))
11039     printf_filtered ("FAIL cannot get thread info\n");
11040 }
11041
11042 static int
11043 thread_display_step (threadref *ref, void *context)
11044 {
11045   /* output_threadid(" threadstep ",ref); *//* simple test */
11046   return get_and_display_threadinfo (ref);
11047 }
11048
11049 static void
11050 threadlist_update_test_cmd (char *cmd, int tty)
11051 {
11052   printf_filtered ("Remote Threadlist update test\n");
11053   remote_threadlist_iterator (thread_display_step, 0, CRAZY_MAX_THREADS);
11054 }
11055
11056 static void
11057 init_remote_threadtests (void)
11058 {
11059   add_com ("tlist", class_obscure, threadlist_test_cmd,
11060            _("Fetch and print the remote list of "
11061              "thread identifiers, one pkt only"));
11062   add_com ("tinfo", class_obscure, threadinfo_test_cmd,
11063            _("Fetch and display info about one thread"));
11064   add_com ("tset", class_obscure, threadset_test_cmd,
11065            _("Test setting to a different thread"));
11066   add_com ("tupd", class_obscure, threadlist_update_test_cmd,
11067            _("Iterate through updating all remote thread info"));
11068   add_com ("talive", class_obscure, threadalive_test,
11069            _(" Remote thread alive test "));
11070 }
11071
11072 #endif /* 0 */
11073
11074 /* Convert a thread ID to a string.  Returns the string in a static
11075    buffer.  */
11076
11077 static const char *
11078 remote_pid_to_str (struct target_ops *ops, ptid_t ptid)
11079 {
11080   static char buf[64];
11081   struct remote_state *rs = get_remote_state ();
11082
11083   if (ptid_equal (ptid, null_ptid))
11084     return normal_pid_to_str (ptid);
11085   else if (ptid_is_pid (ptid))
11086     {
11087       /* Printing an inferior target id.  */
11088
11089       /* When multi-process extensions are off, there's no way in the
11090          remote protocol to know the remote process id, if there's any
11091          at all.  There's one exception --- when we're connected with
11092          target extended-remote, and we manually attached to a process
11093          with "attach PID".  We don't record anywhere a flag that
11094          allows us to distinguish that case from the case of
11095          connecting with extended-remote and the stub already being
11096          attached to a process, and reporting yes to qAttached, hence
11097          no smart special casing here.  */
11098       if (!remote_multi_process_p (rs))
11099         {
11100           xsnprintf (buf, sizeof buf, "Remote target");
11101           return buf;
11102         }
11103
11104       return normal_pid_to_str (ptid);
11105     }
11106   else
11107     {
11108       if (ptid_equal (magic_null_ptid, ptid))
11109         xsnprintf (buf, sizeof buf, "Thread <main>");
11110       else if (remote_multi_process_p (rs))
11111         if (ptid_get_lwp (ptid) == 0)
11112           return normal_pid_to_str (ptid);
11113         else
11114           xsnprintf (buf, sizeof buf, "Thread %d.%ld",
11115                      ptid_get_pid (ptid), ptid_get_lwp (ptid));
11116       else
11117         xsnprintf (buf, sizeof buf, "Thread %ld",
11118                    ptid_get_lwp (ptid));
11119       return buf;
11120     }
11121 }
11122
11123 /* Get the address of the thread local variable in OBJFILE which is
11124    stored at OFFSET within the thread local storage for thread PTID.  */
11125
11126 static CORE_ADDR
11127 remote_get_thread_local_address (struct target_ops *ops,
11128                                  ptid_t ptid, CORE_ADDR lm, CORE_ADDR offset)
11129 {
11130   if (packet_support (PACKET_qGetTLSAddr) != PACKET_DISABLE)
11131     {
11132       struct remote_state *rs = get_remote_state ();
11133       char *p = rs->buf;
11134       char *endp = rs->buf + get_remote_packet_size ();
11135       enum packet_result result;
11136
11137       strcpy (p, "qGetTLSAddr:");
11138       p += strlen (p);
11139       p = write_ptid (p, endp, ptid);
11140       *p++ = ',';
11141       p += hexnumstr (p, offset);
11142       *p++ = ',';
11143       p += hexnumstr (p, lm);
11144       *p++ = '\0';
11145
11146       putpkt (rs->buf);
11147       getpkt (&rs->buf, &rs->buf_size, 0);
11148       result = packet_ok (rs->buf,
11149                           &remote_protocol_packets[PACKET_qGetTLSAddr]);
11150       if (result == PACKET_OK)
11151         {
11152           ULONGEST result;
11153
11154           unpack_varlen_hex (rs->buf, &result);
11155           return result;
11156         }
11157       else if (result == PACKET_UNKNOWN)
11158         throw_error (TLS_GENERIC_ERROR,
11159                      _("Remote target doesn't support qGetTLSAddr packet"));
11160       else
11161         throw_error (TLS_GENERIC_ERROR,
11162                      _("Remote target failed to process qGetTLSAddr request"));
11163     }
11164   else
11165     throw_error (TLS_GENERIC_ERROR,
11166                  _("TLS not supported or disabled on this target"));
11167   /* Not reached.  */
11168   return 0;
11169 }
11170
11171 /* Provide thread local base, i.e. Thread Information Block address.
11172    Returns 1 if ptid is found and thread_local_base is non zero.  */
11173
11174 static int
11175 remote_get_tib_address (struct target_ops *self, ptid_t ptid, CORE_ADDR *addr)
11176 {
11177   if (packet_support (PACKET_qGetTIBAddr) != PACKET_DISABLE)
11178     {
11179       struct remote_state *rs = get_remote_state ();
11180       char *p = rs->buf;
11181       char *endp = rs->buf + get_remote_packet_size ();
11182       enum packet_result result;
11183
11184       strcpy (p, "qGetTIBAddr:");
11185       p += strlen (p);
11186       p = write_ptid (p, endp, ptid);
11187       *p++ = '\0';
11188
11189       putpkt (rs->buf);
11190       getpkt (&rs->buf, &rs->buf_size, 0);
11191       result = packet_ok (rs->buf,
11192                           &remote_protocol_packets[PACKET_qGetTIBAddr]);
11193       if (result == PACKET_OK)
11194         {
11195           ULONGEST result;
11196
11197           unpack_varlen_hex (rs->buf, &result);
11198           if (addr)
11199             *addr = (CORE_ADDR) result;
11200           return 1;
11201         }
11202       else if (result == PACKET_UNKNOWN)
11203         error (_("Remote target doesn't support qGetTIBAddr packet"));
11204       else
11205         error (_("Remote target failed to process qGetTIBAddr request"));
11206     }
11207   else
11208     error (_("qGetTIBAddr not supported or disabled on this target"));
11209   /* Not reached.  */
11210   return 0;
11211 }
11212
11213 /* Support for inferring a target description based on the current
11214    architecture and the size of a 'g' packet.  While the 'g' packet
11215    can have any size (since optional registers can be left off the
11216    end), some sizes are easily recognizable given knowledge of the
11217    approximate architecture.  */
11218
11219 struct remote_g_packet_guess
11220 {
11221   int bytes;
11222   const struct target_desc *tdesc;
11223 };
11224 typedef struct remote_g_packet_guess remote_g_packet_guess_s;
11225 DEF_VEC_O(remote_g_packet_guess_s);
11226
11227 struct remote_g_packet_data
11228 {
11229   VEC(remote_g_packet_guess_s) *guesses;
11230 };
11231
11232 static struct gdbarch_data *remote_g_packet_data_handle;
11233
11234 static void *
11235 remote_g_packet_data_init (struct obstack *obstack)
11236 {
11237   return OBSTACK_ZALLOC (obstack, struct remote_g_packet_data);
11238 }
11239
11240 void
11241 register_remote_g_packet_guess (struct gdbarch *gdbarch, int bytes,
11242                                 const struct target_desc *tdesc)
11243 {
11244   struct remote_g_packet_data *data
11245     = ((struct remote_g_packet_data *)
11246        gdbarch_data (gdbarch, remote_g_packet_data_handle));
11247   struct remote_g_packet_guess new_guess, *guess;
11248   int ix;
11249
11250   gdb_assert (tdesc != NULL);
11251
11252   for (ix = 0;
11253        VEC_iterate (remote_g_packet_guess_s, data->guesses, ix, guess);
11254        ix++)
11255     if (guess->bytes == bytes)
11256       internal_error (__FILE__, __LINE__,
11257                       _("Duplicate g packet description added for size %d"),
11258                       bytes);
11259
11260   new_guess.bytes = bytes;
11261   new_guess.tdesc = tdesc;
11262   VEC_safe_push (remote_g_packet_guess_s, data->guesses, &new_guess);
11263 }
11264
11265 /* Return 1 if remote_read_description would do anything on this target
11266    and architecture, 0 otherwise.  */
11267
11268 static int
11269 remote_read_description_p (struct target_ops *target)
11270 {
11271   struct remote_g_packet_data *data
11272     = ((struct remote_g_packet_data *)
11273        gdbarch_data (target_gdbarch (), remote_g_packet_data_handle));
11274
11275   if (!VEC_empty (remote_g_packet_guess_s, data->guesses))
11276     return 1;
11277
11278   return 0;
11279 }
11280
11281 static const struct target_desc *
11282 remote_read_description (struct target_ops *target)
11283 {
11284   struct remote_g_packet_data *data
11285     = ((struct remote_g_packet_data *)
11286        gdbarch_data (target_gdbarch (), remote_g_packet_data_handle));
11287
11288   /* Do not try this during initial connection, when we do not know
11289      whether there is a running but stopped thread.  */
11290   if (!target_has_execution || ptid_equal (inferior_ptid, null_ptid))
11291     return target->beneath->to_read_description (target->beneath);
11292
11293   if (!VEC_empty (remote_g_packet_guess_s, data->guesses))
11294     {
11295       struct remote_g_packet_guess *guess;
11296       int ix;
11297       int bytes = send_g_packet ();
11298
11299       for (ix = 0;
11300            VEC_iterate (remote_g_packet_guess_s, data->guesses, ix, guess);
11301            ix++)
11302         if (guess->bytes == bytes)
11303           return guess->tdesc;
11304
11305       /* We discard the g packet.  A minor optimization would be to
11306          hold on to it, and fill the register cache once we have selected
11307          an architecture, but it's too tricky to do safely.  */
11308     }
11309
11310   return target->beneath->to_read_description (target->beneath);
11311 }
11312
11313 /* Remote file transfer support.  This is host-initiated I/O, not
11314    target-initiated; for target-initiated, see remote-fileio.c.  */
11315
11316 /* If *LEFT is at least the length of STRING, copy STRING to
11317    *BUFFER, update *BUFFER to point to the new end of the buffer, and
11318    decrease *LEFT.  Otherwise raise an error.  */
11319
11320 static void
11321 remote_buffer_add_string (char **buffer, int *left, const char *string)
11322 {
11323   int len = strlen (string);
11324
11325   if (len > *left)
11326     error (_("Packet too long for target."));
11327
11328   memcpy (*buffer, string, len);
11329   *buffer += len;
11330   *left -= len;
11331
11332   /* NUL-terminate the buffer as a convenience, if there is
11333      room.  */
11334   if (*left)
11335     **buffer = '\0';
11336 }
11337
11338 /* If *LEFT is large enough, hex encode LEN bytes from BYTES into
11339    *BUFFER, update *BUFFER to point to the new end of the buffer, and
11340    decrease *LEFT.  Otherwise raise an error.  */
11341
11342 static void
11343 remote_buffer_add_bytes (char **buffer, int *left, const gdb_byte *bytes,
11344                          int len)
11345 {
11346   if (2 * len > *left)
11347     error (_("Packet too long for target."));
11348
11349   bin2hex (bytes, *buffer, len);
11350   *buffer += 2 * len;
11351   *left -= 2 * len;
11352
11353   /* NUL-terminate the buffer as a convenience, if there is
11354      room.  */
11355   if (*left)
11356     **buffer = '\0';
11357 }
11358
11359 /* If *LEFT is large enough, convert VALUE to hex and add it to
11360    *BUFFER, update *BUFFER to point to the new end of the buffer, and
11361    decrease *LEFT.  Otherwise raise an error.  */
11362
11363 static void
11364 remote_buffer_add_int (char **buffer, int *left, ULONGEST value)
11365 {
11366   int len = hexnumlen (value);
11367
11368   if (len > *left)
11369     error (_("Packet too long for target."));
11370
11371   hexnumstr (*buffer, value);
11372   *buffer += len;
11373   *left -= len;
11374
11375   /* NUL-terminate the buffer as a convenience, if there is
11376      room.  */
11377   if (*left)
11378     **buffer = '\0';
11379 }
11380
11381 /* Parse an I/O result packet from BUFFER.  Set RETCODE to the return
11382    value, *REMOTE_ERRNO to the remote error number or zero if none
11383    was included, and *ATTACHMENT to point to the start of the annex
11384    if any.  The length of the packet isn't needed here; there may
11385    be NUL bytes in BUFFER, but they will be after *ATTACHMENT.
11386
11387    Return 0 if the packet could be parsed, -1 if it could not.  If
11388    -1 is returned, the other variables may not be initialized.  */
11389
11390 static int
11391 remote_hostio_parse_result (char *buffer, int *retcode,
11392                             int *remote_errno, char **attachment)
11393 {
11394   char *p, *p2;
11395
11396   *remote_errno = 0;
11397   *attachment = NULL;
11398
11399   if (buffer[0] != 'F')
11400     return -1;
11401
11402   errno = 0;
11403   *retcode = strtol (&buffer[1], &p, 16);
11404   if (errno != 0 || p == &buffer[1])
11405     return -1;
11406
11407   /* Check for ",errno".  */
11408   if (*p == ',')
11409     {
11410       errno = 0;
11411       *remote_errno = strtol (p + 1, &p2, 16);
11412       if (errno != 0 || p + 1 == p2)
11413         return -1;
11414       p = p2;
11415     }
11416
11417   /* Check for ";attachment".  If there is no attachment, the
11418      packet should end here.  */
11419   if (*p == ';')
11420     {
11421       *attachment = p + 1;
11422       return 0;
11423     }
11424   else if (*p == '\0')
11425     return 0;
11426   else
11427     return -1;
11428 }
11429
11430 /* Send a prepared I/O packet to the target and read its response.
11431    The prepared packet is in the global RS->BUF before this function
11432    is called, and the answer is there when we return.
11433
11434    COMMAND_BYTES is the length of the request to send, which may include
11435    binary data.  WHICH_PACKET is the packet configuration to check
11436    before attempting a packet.  If an error occurs, *REMOTE_ERRNO
11437    is set to the error number and -1 is returned.  Otherwise the value
11438    returned by the function is returned.
11439
11440    ATTACHMENT and ATTACHMENT_LEN should be non-NULL if and only if an
11441    attachment is expected; an error will be reported if there's a
11442    mismatch.  If one is found, *ATTACHMENT will be set to point into
11443    the packet buffer and *ATTACHMENT_LEN will be set to the
11444    attachment's length.  */
11445
11446 static int
11447 remote_hostio_send_command (int command_bytes, int which_packet,
11448                             int *remote_errno, char **attachment,
11449                             int *attachment_len)
11450 {
11451   struct remote_state *rs = get_remote_state ();
11452   int ret, bytes_read;
11453   char *attachment_tmp;
11454
11455   if (!rs->remote_desc
11456       || packet_support (which_packet) == PACKET_DISABLE)
11457     {
11458       *remote_errno = FILEIO_ENOSYS;
11459       return -1;
11460     }
11461
11462   putpkt_binary (rs->buf, command_bytes);
11463   bytes_read = getpkt_sane (&rs->buf, &rs->buf_size, 0);
11464
11465   /* If it timed out, something is wrong.  Don't try to parse the
11466      buffer.  */
11467   if (bytes_read < 0)
11468     {
11469       *remote_errno = FILEIO_EINVAL;
11470       return -1;
11471     }
11472
11473   switch (packet_ok (rs->buf, &remote_protocol_packets[which_packet]))
11474     {
11475     case PACKET_ERROR:
11476       *remote_errno = FILEIO_EINVAL;
11477       return -1;
11478     case PACKET_UNKNOWN:
11479       *remote_errno = FILEIO_ENOSYS;
11480       return -1;
11481     case PACKET_OK:
11482       break;
11483     }
11484
11485   if (remote_hostio_parse_result (rs->buf, &ret, remote_errno,
11486                                   &attachment_tmp))
11487     {
11488       *remote_errno = FILEIO_EINVAL;
11489       return -1;
11490     }
11491
11492   /* Make sure we saw an attachment if and only if we expected one.  */
11493   if ((attachment_tmp == NULL && attachment != NULL)
11494       || (attachment_tmp != NULL && attachment == NULL))
11495     {
11496       *remote_errno = FILEIO_EINVAL;
11497       return -1;
11498     }
11499
11500   /* If an attachment was found, it must point into the packet buffer;
11501      work out how many bytes there were.  */
11502   if (attachment_tmp != NULL)
11503     {
11504       *attachment = attachment_tmp;
11505       *attachment_len = bytes_read - (*attachment - rs->buf);
11506     }
11507
11508   return ret;
11509 }
11510
11511 /* Invalidate the readahead cache.  */
11512
11513 static void
11514 readahead_cache_invalidate (void)
11515 {
11516   struct remote_state *rs = get_remote_state ();
11517
11518   rs->readahead_cache.fd = -1;
11519 }
11520
11521 /* Invalidate the readahead cache if it is holding data for FD.  */
11522
11523 static void
11524 readahead_cache_invalidate_fd (int fd)
11525 {
11526   struct remote_state *rs = get_remote_state ();
11527
11528   if (rs->readahead_cache.fd == fd)
11529     rs->readahead_cache.fd = -1;
11530 }
11531
11532 /* Set the filesystem remote_hostio functions that take FILENAME
11533    arguments will use.  Return 0 on success, or -1 if an error
11534    occurs (and set *REMOTE_ERRNO).  */
11535
11536 static int
11537 remote_hostio_set_filesystem (struct inferior *inf, int *remote_errno)
11538 {
11539   struct remote_state *rs = get_remote_state ();
11540   int required_pid = (inf == NULL || inf->fake_pid_p) ? 0 : inf->pid;
11541   char *p = rs->buf;
11542   int left = get_remote_packet_size () - 1;
11543   char arg[9];
11544   int ret;
11545
11546   if (packet_support (PACKET_vFile_setfs) == PACKET_DISABLE)
11547     return 0;
11548
11549   if (rs->fs_pid != -1 && required_pid == rs->fs_pid)
11550     return 0;
11551
11552   remote_buffer_add_string (&p, &left, "vFile:setfs:");
11553
11554   xsnprintf (arg, sizeof (arg), "%x", required_pid);
11555   remote_buffer_add_string (&p, &left, arg);
11556
11557   ret = remote_hostio_send_command (p - rs->buf, PACKET_vFile_setfs,
11558                                     remote_errno, NULL, NULL);
11559
11560   if (packet_support (PACKET_vFile_setfs) == PACKET_DISABLE)
11561     return 0;
11562
11563   if (ret == 0)
11564     rs->fs_pid = required_pid;
11565
11566   return ret;
11567 }
11568
11569 /* Implementation of to_fileio_open.  */
11570
11571 static int
11572 remote_hostio_open (struct target_ops *self,
11573                     struct inferior *inf, const char *filename,
11574                     int flags, int mode, int warn_if_slow,
11575                     int *remote_errno)
11576 {
11577   struct remote_state *rs = get_remote_state ();
11578   char *p = rs->buf;
11579   int left = get_remote_packet_size () - 1;
11580
11581   if (warn_if_slow)
11582     {
11583       static int warning_issued = 0;
11584
11585       printf_unfiltered (_("Reading %s from remote target...\n"),
11586                          filename);
11587
11588       if (!warning_issued)
11589         {
11590           warning (_("File transfers from remote targets can be slow."
11591                      " Use \"set sysroot\" to access files locally"
11592                      " instead."));
11593           warning_issued = 1;
11594         }
11595     }
11596
11597   if (remote_hostio_set_filesystem (inf, remote_errno) != 0)
11598     return -1;
11599
11600   remote_buffer_add_string (&p, &left, "vFile:open:");
11601
11602   remote_buffer_add_bytes (&p, &left, (const gdb_byte *) filename,
11603                            strlen (filename));
11604   remote_buffer_add_string (&p, &left, ",");
11605
11606   remote_buffer_add_int (&p, &left, flags);
11607   remote_buffer_add_string (&p, &left, ",");
11608
11609   remote_buffer_add_int (&p, &left, mode);
11610
11611   return remote_hostio_send_command (p - rs->buf, PACKET_vFile_open,
11612                                      remote_errno, NULL, NULL);
11613 }
11614
11615 /* Implementation of to_fileio_pwrite.  */
11616
11617 static int
11618 remote_hostio_pwrite (struct target_ops *self,
11619                       int fd, const gdb_byte *write_buf, int len,
11620                       ULONGEST offset, int *remote_errno)
11621 {
11622   struct remote_state *rs = get_remote_state ();
11623   char *p = rs->buf;
11624   int left = get_remote_packet_size ();
11625   int out_len;
11626
11627   readahead_cache_invalidate_fd (fd);
11628
11629   remote_buffer_add_string (&p, &left, "vFile:pwrite:");
11630
11631   remote_buffer_add_int (&p, &left, fd);
11632   remote_buffer_add_string (&p, &left, ",");
11633
11634   remote_buffer_add_int (&p, &left, offset);
11635   remote_buffer_add_string (&p, &left, ",");
11636
11637   p += remote_escape_output (write_buf, len, 1, (gdb_byte *) p, &out_len,
11638                              get_remote_packet_size () - (p - rs->buf));
11639
11640   return remote_hostio_send_command (p - rs->buf, PACKET_vFile_pwrite,
11641                                      remote_errno, NULL, NULL);
11642 }
11643
11644 /* Helper for the implementation of to_fileio_pread.  Read the file
11645    from the remote side with vFile:pread.  */
11646
11647 static int
11648 remote_hostio_pread_vFile (struct target_ops *self,
11649                            int fd, gdb_byte *read_buf, int len,
11650                            ULONGEST offset, int *remote_errno)
11651 {
11652   struct remote_state *rs = get_remote_state ();
11653   char *p = rs->buf;
11654   char *attachment;
11655   int left = get_remote_packet_size ();
11656   int ret, attachment_len;
11657   int read_len;
11658
11659   remote_buffer_add_string (&p, &left, "vFile:pread:");
11660
11661   remote_buffer_add_int (&p, &left, fd);
11662   remote_buffer_add_string (&p, &left, ",");
11663
11664   remote_buffer_add_int (&p, &left, len);
11665   remote_buffer_add_string (&p, &left, ",");
11666
11667   remote_buffer_add_int (&p, &left, offset);
11668
11669   ret = remote_hostio_send_command (p - rs->buf, PACKET_vFile_pread,
11670                                     remote_errno, &attachment,
11671                                     &attachment_len);
11672
11673   if (ret < 0)
11674     return ret;
11675
11676   read_len = remote_unescape_input ((gdb_byte *) attachment, attachment_len,
11677                                     read_buf, len);
11678   if (read_len != ret)
11679     error (_("Read returned %d, but %d bytes."), ret, (int) read_len);
11680
11681   return ret;
11682 }
11683
11684 /* Serve pread from the readahead cache.  Returns number of bytes
11685    read, or 0 if the request can't be served from the cache.  */
11686
11687 static int
11688 remote_hostio_pread_from_cache (struct remote_state *rs,
11689                                 int fd, gdb_byte *read_buf, size_t len,
11690                                 ULONGEST offset)
11691 {
11692   struct readahead_cache *cache = &rs->readahead_cache;
11693
11694   if (cache->fd == fd
11695       && cache->offset <= offset
11696       && offset < cache->offset + cache->bufsize)
11697     {
11698       ULONGEST max = cache->offset + cache->bufsize;
11699
11700       if (offset + len > max)
11701         len = max - offset;
11702
11703       memcpy (read_buf, cache->buf + offset - cache->offset, len);
11704       return len;
11705     }
11706
11707   return 0;
11708 }
11709
11710 /* Implementation of to_fileio_pread.  */
11711
11712 static int
11713 remote_hostio_pread (struct target_ops *self,
11714                      int fd, gdb_byte *read_buf, int len,
11715                      ULONGEST offset, int *remote_errno)
11716 {
11717   int ret;
11718   struct remote_state *rs = get_remote_state ();
11719   struct readahead_cache *cache = &rs->readahead_cache;
11720
11721   ret = remote_hostio_pread_from_cache (rs, fd, read_buf, len, offset);
11722   if (ret > 0)
11723     {
11724       cache->hit_count++;
11725
11726       if (remote_debug)
11727         fprintf_unfiltered (gdb_stdlog, "readahead cache hit %s\n",
11728                             pulongest (cache->hit_count));
11729       return ret;
11730     }
11731
11732   cache->miss_count++;
11733   if (remote_debug)
11734     fprintf_unfiltered (gdb_stdlog, "readahead cache miss %s\n",
11735                         pulongest (cache->miss_count));
11736
11737   cache->fd = fd;
11738   cache->offset = offset;
11739   cache->bufsize = get_remote_packet_size ();
11740   cache->buf = (gdb_byte *) xrealloc (cache->buf, cache->bufsize);
11741
11742   ret = remote_hostio_pread_vFile (self, cache->fd, cache->buf, cache->bufsize,
11743                                    cache->offset, remote_errno);
11744   if (ret <= 0)
11745     {
11746       readahead_cache_invalidate_fd (fd);
11747       return ret;
11748     }
11749
11750   cache->bufsize = ret;
11751   return remote_hostio_pread_from_cache (rs, fd, read_buf, len, offset);
11752 }
11753
11754 /* Implementation of to_fileio_close.  */
11755
11756 static int
11757 remote_hostio_close (struct target_ops *self, int fd, int *remote_errno)
11758 {
11759   struct remote_state *rs = get_remote_state ();
11760   char *p = rs->buf;
11761   int left = get_remote_packet_size () - 1;
11762
11763   readahead_cache_invalidate_fd (fd);
11764
11765   remote_buffer_add_string (&p, &left, "vFile:close:");
11766
11767   remote_buffer_add_int (&p, &left, fd);
11768
11769   return remote_hostio_send_command (p - rs->buf, PACKET_vFile_close,
11770                                      remote_errno, NULL, NULL);
11771 }
11772
11773 /* Implementation of to_fileio_unlink.  */
11774
11775 static int
11776 remote_hostio_unlink (struct target_ops *self,
11777                       struct inferior *inf, const char *filename,
11778                       int *remote_errno)
11779 {
11780   struct remote_state *rs = get_remote_state ();
11781   char *p = rs->buf;
11782   int left = get_remote_packet_size () - 1;
11783
11784   if (remote_hostio_set_filesystem (inf, remote_errno) != 0)
11785     return -1;
11786
11787   remote_buffer_add_string (&p, &left, "vFile:unlink:");
11788
11789   remote_buffer_add_bytes (&p, &left, (const gdb_byte *) filename,
11790                            strlen (filename));
11791
11792   return remote_hostio_send_command (p - rs->buf, PACKET_vFile_unlink,
11793                                      remote_errno, NULL, NULL);
11794 }
11795
11796 /* Implementation of to_fileio_readlink.  */
11797
11798 static char *
11799 remote_hostio_readlink (struct target_ops *self,
11800                         struct inferior *inf, const char *filename,
11801                         int *remote_errno)
11802 {
11803   struct remote_state *rs = get_remote_state ();
11804   char *p = rs->buf;
11805   char *attachment;
11806   int left = get_remote_packet_size ();
11807   int len, attachment_len;
11808   int read_len;
11809   char *ret;
11810
11811   if (remote_hostio_set_filesystem (inf, remote_errno) != 0)
11812     return NULL;
11813
11814   remote_buffer_add_string (&p, &left, "vFile:readlink:");
11815
11816   remote_buffer_add_bytes (&p, &left, (const gdb_byte *) filename,
11817                            strlen (filename));
11818
11819   len = remote_hostio_send_command (p - rs->buf, PACKET_vFile_readlink,
11820                                     remote_errno, &attachment,
11821                                     &attachment_len);
11822
11823   if (len < 0)
11824     return NULL;
11825
11826   ret = (char *) xmalloc (len + 1);
11827
11828   read_len = remote_unescape_input ((gdb_byte *) attachment, attachment_len,
11829                                     (gdb_byte *) ret, len);
11830   if (read_len != len)
11831     error (_("Readlink returned %d, but %d bytes."), len, read_len);
11832
11833   ret[len] = '\0';
11834   return ret;
11835 }
11836
11837 /* Implementation of to_fileio_fstat.  */
11838
11839 static int
11840 remote_hostio_fstat (struct target_ops *self,
11841                      int fd, struct stat *st,
11842                      int *remote_errno)
11843 {
11844   struct remote_state *rs = get_remote_state ();
11845   char *p = rs->buf;
11846   int left = get_remote_packet_size ();
11847   int attachment_len, ret;
11848   char *attachment;
11849   struct fio_stat fst;
11850   int read_len;
11851
11852   remote_buffer_add_string (&p, &left, "vFile:fstat:");
11853
11854   remote_buffer_add_int (&p, &left, fd);
11855
11856   ret = remote_hostio_send_command (p - rs->buf, PACKET_vFile_fstat,
11857                                     remote_errno, &attachment,
11858                                     &attachment_len);
11859   if (ret < 0)
11860     {
11861       if (*remote_errno != FILEIO_ENOSYS)
11862         return ret;
11863
11864       /* Strictly we should return -1, ENOSYS here, but when
11865          "set sysroot remote:" was implemented in August 2008
11866          BFD's need for a stat function was sidestepped with
11867          this hack.  This was not remedied until March 2015
11868          so we retain the previous behavior to avoid breaking
11869          compatibility.
11870
11871          Note that the memset is a March 2015 addition; older
11872          GDBs set st_size *and nothing else* so the structure
11873          would have garbage in all other fields.  This might
11874          break something but retaining the previous behavior
11875          here would be just too wrong.  */
11876
11877       memset (st, 0, sizeof (struct stat));
11878       st->st_size = INT_MAX;
11879       return 0;
11880     }
11881
11882   read_len = remote_unescape_input ((gdb_byte *) attachment, attachment_len,
11883                                     (gdb_byte *) &fst, sizeof (fst));
11884
11885   if (read_len != ret)
11886     error (_("vFile:fstat returned %d, but %d bytes."), ret, read_len);
11887
11888   if (read_len != sizeof (fst))
11889     error (_("vFile:fstat returned %d bytes, but expecting %d."),
11890            read_len, (int) sizeof (fst));
11891
11892   remote_fileio_to_host_stat (&fst, st);
11893
11894   return 0;
11895 }
11896
11897 /* Implementation of to_filesystem_is_local.  */
11898
11899 static int
11900 remote_filesystem_is_local (struct target_ops *self)
11901 {
11902   /* Valgrind GDB presents itself as a remote target but works
11903      on the local filesystem: it does not implement remote get
11904      and users are not expected to set a sysroot.  To handle
11905      this case we treat the remote filesystem as local if the
11906      sysroot is exactly TARGET_SYSROOT_PREFIX and if the stub
11907      does not support vFile:open.  */
11908   if (strcmp (gdb_sysroot, TARGET_SYSROOT_PREFIX) == 0)
11909     {
11910       enum packet_support ps = packet_support (PACKET_vFile_open);
11911
11912       if (ps == PACKET_SUPPORT_UNKNOWN)
11913         {
11914           int fd, remote_errno;
11915
11916           /* Try opening a file to probe support.  The supplied
11917              filename is irrelevant, we only care about whether
11918              the stub recognizes the packet or not.  */
11919           fd = remote_hostio_open (self, NULL, "just probing",
11920                                    FILEIO_O_RDONLY, 0700, 0,
11921                                    &remote_errno);
11922
11923           if (fd >= 0)
11924             remote_hostio_close (self, fd, &remote_errno);
11925
11926           ps = packet_support (PACKET_vFile_open);
11927         }
11928
11929       if (ps == PACKET_DISABLE)
11930         {
11931           static int warning_issued = 0;
11932
11933           if (!warning_issued)
11934             {
11935               warning (_("remote target does not support file"
11936                          " transfer, attempting to access files"
11937                          " from local filesystem."));
11938               warning_issued = 1;
11939             }
11940
11941           return 1;
11942         }
11943     }
11944
11945   return 0;
11946 }
11947
11948 static int
11949 remote_fileio_errno_to_host (int errnum)
11950 {
11951   switch (errnum)
11952     {
11953       case FILEIO_EPERM:
11954         return EPERM;
11955       case FILEIO_ENOENT:
11956         return ENOENT;
11957       case FILEIO_EINTR:
11958         return EINTR;
11959       case FILEIO_EIO:
11960         return EIO;
11961       case FILEIO_EBADF:
11962         return EBADF;
11963       case FILEIO_EACCES:
11964         return EACCES;
11965       case FILEIO_EFAULT:
11966         return EFAULT;
11967       case FILEIO_EBUSY:
11968         return EBUSY;
11969       case FILEIO_EEXIST:
11970         return EEXIST;
11971       case FILEIO_ENODEV:
11972         return ENODEV;
11973       case FILEIO_ENOTDIR:
11974         return ENOTDIR;
11975       case FILEIO_EISDIR:
11976         return EISDIR;
11977       case FILEIO_EINVAL:
11978         return EINVAL;
11979       case FILEIO_ENFILE:
11980         return ENFILE;
11981       case FILEIO_EMFILE:
11982         return EMFILE;
11983       case FILEIO_EFBIG:
11984         return EFBIG;
11985       case FILEIO_ENOSPC:
11986         return ENOSPC;
11987       case FILEIO_ESPIPE:
11988         return ESPIPE;
11989       case FILEIO_EROFS:
11990         return EROFS;
11991       case FILEIO_ENOSYS:
11992         return ENOSYS;
11993       case FILEIO_ENAMETOOLONG:
11994         return ENAMETOOLONG;
11995     }
11996   return -1;
11997 }
11998
11999 static char *
12000 remote_hostio_error (int errnum)
12001 {
12002   int host_error = remote_fileio_errno_to_host (errnum);
12003
12004   if (host_error == -1)
12005     error (_("Unknown remote I/O error %d"), errnum);
12006   else
12007     error (_("Remote I/O error: %s"), safe_strerror (host_error));
12008 }
12009
12010 static void
12011 remote_hostio_close_cleanup (void *opaque)
12012 {
12013   int fd = *(int *) opaque;
12014   int remote_errno;
12015
12016   remote_hostio_close (find_target_at (process_stratum), fd, &remote_errno);
12017 }
12018
12019 void
12020 remote_file_put (const char *local_file, const char *remote_file, int from_tty)
12021 {
12022   struct cleanup *back_to, *close_cleanup;
12023   int retcode, fd, remote_errno, bytes, io_size;
12024   gdb_byte *buffer;
12025   int bytes_in_buffer;
12026   int saw_eof;
12027   ULONGEST offset;
12028   struct remote_state *rs = get_remote_state ();
12029
12030   if (!rs->remote_desc)
12031     error (_("command can only be used with remote target"));
12032
12033   gdb_file_up file = gdb_fopen_cloexec (local_file, "rb");
12034   if (file == NULL)
12035     perror_with_name (local_file);
12036
12037   fd = remote_hostio_open (find_target_at (process_stratum), NULL,
12038                            remote_file, (FILEIO_O_WRONLY | FILEIO_O_CREAT
12039                                          | FILEIO_O_TRUNC),
12040                            0700, 0, &remote_errno);
12041   if (fd == -1)
12042     remote_hostio_error (remote_errno);
12043
12044   /* Send up to this many bytes at once.  They won't all fit in the
12045      remote packet limit, so we'll transfer slightly fewer.  */
12046   io_size = get_remote_packet_size ();
12047   buffer = (gdb_byte *) xmalloc (io_size);
12048   back_to = make_cleanup (xfree, buffer);
12049
12050   close_cleanup = make_cleanup (remote_hostio_close_cleanup, &fd);
12051
12052   bytes_in_buffer = 0;
12053   saw_eof = 0;
12054   offset = 0;
12055   while (bytes_in_buffer || !saw_eof)
12056     {
12057       if (!saw_eof)
12058         {
12059           bytes = fread (buffer + bytes_in_buffer, 1,
12060                          io_size - bytes_in_buffer,
12061                          file.get ());
12062           if (bytes == 0)
12063             {
12064               if (ferror (file.get ()))
12065                 error (_("Error reading %s."), local_file);
12066               else
12067                 {
12068                   /* EOF.  Unless there is something still in the
12069                      buffer from the last iteration, we are done.  */
12070                   saw_eof = 1;
12071                   if (bytes_in_buffer == 0)
12072                     break;
12073                 }
12074             }
12075         }
12076       else
12077         bytes = 0;
12078
12079       bytes += bytes_in_buffer;
12080       bytes_in_buffer = 0;
12081
12082       retcode = remote_hostio_pwrite (find_target_at (process_stratum),
12083                                       fd, buffer, bytes,
12084                                       offset, &remote_errno);
12085
12086       if (retcode < 0)
12087         remote_hostio_error (remote_errno);
12088       else if (retcode == 0)
12089         error (_("Remote write of %d bytes returned 0!"), bytes);
12090       else if (retcode < bytes)
12091         {
12092           /* Short write.  Save the rest of the read data for the next
12093              write.  */
12094           bytes_in_buffer = bytes - retcode;
12095           memmove (buffer, buffer + retcode, bytes_in_buffer);
12096         }
12097
12098       offset += retcode;
12099     }
12100
12101   discard_cleanups (close_cleanup);
12102   if (remote_hostio_close (find_target_at (process_stratum), fd, &remote_errno))
12103     remote_hostio_error (remote_errno);
12104
12105   if (from_tty)
12106     printf_filtered (_("Successfully sent file \"%s\".\n"), local_file);
12107   do_cleanups (back_to);
12108 }
12109
12110 void
12111 remote_file_get (const char *remote_file, const char *local_file, int from_tty)
12112 {
12113   struct cleanup *back_to, *close_cleanup;
12114   int fd, remote_errno, bytes, io_size;
12115   gdb_byte *buffer;
12116   ULONGEST offset;
12117   struct remote_state *rs = get_remote_state ();
12118
12119   if (!rs->remote_desc)
12120     error (_("command can only be used with remote target"));
12121
12122   fd = remote_hostio_open (find_target_at (process_stratum), NULL,
12123                            remote_file, FILEIO_O_RDONLY, 0, 0,
12124                            &remote_errno);
12125   if (fd == -1)
12126     remote_hostio_error (remote_errno);
12127
12128   gdb_file_up file = gdb_fopen_cloexec (local_file, "wb");
12129   if (file == NULL)
12130     perror_with_name (local_file);
12131
12132   /* Send up to this many bytes at once.  They won't all fit in the
12133      remote packet limit, so we'll transfer slightly fewer.  */
12134   io_size = get_remote_packet_size ();
12135   buffer = (gdb_byte *) xmalloc (io_size);
12136   back_to = make_cleanup (xfree, buffer);
12137
12138   close_cleanup = make_cleanup (remote_hostio_close_cleanup, &fd);
12139
12140   offset = 0;
12141   while (1)
12142     {
12143       bytes = remote_hostio_pread (find_target_at (process_stratum),
12144                                    fd, buffer, io_size, offset, &remote_errno);
12145       if (bytes == 0)
12146         /* Success, but no bytes, means end-of-file.  */
12147         break;
12148       if (bytes == -1)
12149         remote_hostio_error (remote_errno);
12150
12151       offset += bytes;
12152
12153       bytes = fwrite (buffer, 1, bytes, file.get ());
12154       if (bytes == 0)
12155         perror_with_name (local_file);
12156     }
12157
12158   discard_cleanups (close_cleanup);
12159   if (remote_hostio_close (find_target_at (process_stratum), fd, &remote_errno))
12160     remote_hostio_error (remote_errno);
12161
12162   if (from_tty)
12163     printf_filtered (_("Successfully fetched file \"%s\".\n"), remote_file);
12164   do_cleanups (back_to);
12165 }
12166
12167 void
12168 remote_file_delete (const char *remote_file, int from_tty)
12169 {
12170   int retcode, remote_errno;
12171   struct remote_state *rs = get_remote_state ();
12172
12173   if (!rs->remote_desc)
12174     error (_("command can only be used with remote target"));
12175
12176   retcode = remote_hostio_unlink (find_target_at (process_stratum),
12177                                   NULL, remote_file, &remote_errno);
12178   if (retcode == -1)
12179     remote_hostio_error (remote_errno);
12180
12181   if (from_tty)
12182     printf_filtered (_("Successfully deleted file \"%s\".\n"), remote_file);
12183 }
12184
12185 static void
12186 remote_put_command (const char *args, int from_tty)
12187 {
12188   if (args == NULL)
12189     error_no_arg (_("file to put"));
12190
12191   gdb_argv argv (args);
12192   if (argv[0] == NULL || argv[1] == NULL || argv[2] != NULL)
12193     error (_("Invalid parameters to remote put"));
12194
12195   remote_file_put (argv[0], argv[1], from_tty);
12196 }
12197
12198 static void
12199 remote_get_command (const char *args, int from_tty)
12200 {
12201   if (args == NULL)
12202     error_no_arg (_("file to get"));
12203
12204   gdb_argv argv (args);
12205   if (argv[0] == NULL || argv[1] == NULL || argv[2] != NULL)
12206     error (_("Invalid parameters to remote get"));
12207
12208   remote_file_get (argv[0], argv[1], from_tty);
12209 }
12210
12211 static void
12212 remote_delete_command (const char *args, int from_tty)
12213 {
12214   if (args == NULL)
12215     error_no_arg (_("file to delete"));
12216
12217   gdb_argv argv (args);
12218   if (argv[0] == NULL || argv[1] != NULL)
12219     error (_("Invalid parameters to remote delete"));
12220
12221   remote_file_delete (argv[0], from_tty);
12222 }
12223
12224 static void
12225 remote_command (const char *args, int from_tty)
12226 {
12227   help_list (remote_cmdlist, "remote ", all_commands, gdb_stdout);
12228 }
12229
12230 static int
12231 remote_can_execute_reverse (struct target_ops *self)
12232 {
12233   if (packet_support (PACKET_bs) == PACKET_ENABLE
12234       || packet_support (PACKET_bc) == PACKET_ENABLE)
12235     return 1;
12236   else
12237     return 0;
12238 }
12239
12240 static int
12241 remote_supports_non_stop (struct target_ops *self)
12242 {
12243   return 1;
12244 }
12245
12246 static int
12247 remote_supports_disable_randomization (struct target_ops *self)
12248 {
12249   /* Only supported in extended mode.  */
12250   return 0;
12251 }
12252
12253 static int
12254 remote_supports_multi_process (struct target_ops *self)
12255 {
12256   struct remote_state *rs = get_remote_state ();
12257
12258   return remote_multi_process_p (rs);
12259 }
12260
12261 static int
12262 remote_supports_cond_tracepoints (void)
12263 {
12264   return packet_support (PACKET_ConditionalTracepoints) == PACKET_ENABLE;
12265 }
12266
12267 static int
12268 remote_supports_cond_breakpoints (struct target_ops *self)
12269 {
12270   return packet_support (PACKET_ConditionalBreakpoints) == PACKET_ENABLE;
12271 }
12272
12273 static int
12274 remote_supports_fast_tracepoints (void)
12275 {
12276   return packet_support (PACKET_FastTracepoints) == PACKET_ENABLE;
12277 }
12278
12279 static int
12280 remote_supports_static_tracepoints (void)
12281 {
12282   return packet_support (PACKET_StaticTracepoints) == PACKET_ENABLE;
12283 }
12284
12285 static int
12286 remote_supports_install_in_trace (void)
12287 {
12288   return packet_support (PACKET_InstallInTrace) == PACKET_ENABLE;
12289 }
12290
12291 static int
12292 remote_supports_enable_disable_tracepoint (struct target_ops *self)
12293 {
12294   return (packet_support (PACKET_EnableDisableTracepoints_feature)
12295           == PACKET_ENABLE);
12296 }
12297
12298 static int
12299 remote_supports_string_tracing (struct target_ops *self)
12300 {
12301   return packet_support (PACKET_tracenz_feature) == PACKET_ENABLE;
12302 }
12303
12304 static int
12305 remote_can_run_breakpoint_commands (struct target_ops *self)
12306 {
12307   return packet_support (PACKET_BreakpointCommands) == PACKET_ENABLE;
12308 }
12309
12310 static void
12311 remote_trace_init (struct target_ops *self)
12312 {
12313   struct remote_state *rs = get_remote_state ();
12314
12315   putpkt ("QTinit");
12316   remote_get_noisy_reply ();
12317   if (strcmp (rs->buf, "OK") != 0)
12318     error (_("Target does not support this command."));
12319 }
12320
12321 static void free_actions_list (char **actions_list);
12322 static void free_actions_list_cleanup_wrapper (void *);
12323 static void
12324 free_actions_list_cleanup_wrapper (void *al)
12325 {
12326   free_actions_list ((char **) al);
12327 }
12328
12329 static void
12330 free_actions_list (char **actions_list)
12331 {
12332   int ndx;
12333
12334   if (actions_list == 0)
12335     return;
12336
12337   for (ndx = 0; actions_list[ndx]; ndx++)
12338     xfree (actions_list[ndx]);
12339
12340   xfree (actions_list);
12341 }
12342
12343 /* Recursive routine to walk through command list including loops, and
12344    download packets for each command.  */
12345
12346 static void
12347 remote_download_command_source (int num, ULONGEST addr,
12348                                 struct command_line *cmds)
12349 {
12350   struct remote_state *rs = get_remote_state ();
12351   struct command_line *cmd;
12352
12353   for (cmd = cmds; cmd; cmd = cmd->next)
12354     {
12355       QUIT;     /* Allow user to bail out with ^C.  */
12356       strcpy (rs->buf, "QTDPsrc:");
12357       encode_source_string (num, addr, "cmd", cmd->line,
12358                             rs->buf + strlen (rs->buf),
12359                             rs->buf_size - strlen (rs->buf));
12360       putpkt (rs->buf);
12361       remote_get_noisy_reply ();
12362       if (strcmp (rs->buf, "OK"))
12363         warning (_("Target does not support source download."));
12364
12365       if (cmd->control_type == while_control
12366           || cmd->control_type == while_stepping_control)
12367         {
12368           remote_download_command_source (num, addr, *cmd->body_list);
12369
12370           QUIT; /* Allow user to bail out with ^C.  */
12371           strcpy (rs->buf, "QTDPsrc:");
12372           encode_source_string (num, addr, "cmd", "end",
12373                                 rs->buf + strlen (rs->buf),
12374                                 rs->buf_size - strlen (rs->buf));
12375           putpkt (rs->buf);
12376           remote_get_noisy_reply ();
12377           if (strcmp (rs->buf, "OK"))
12378             warning (_("Target does not support source download."));
12379         }
12380     }
12381 }
12382
12383 static void
12384 remote_download_tracepoint (struct target_ops *self, struct bp_location *loc)
12385 {
12386 #define BUF_SIZE 2048
12387
12388   CORE_ADDR tpaddr;
12389   char addrbuf[40];
12390   char buf[BUF_SIZE];
12391   char **tdp_actions;
12392   char **stepping_actions;
12393   int ndx;
12394   struct cleanup *old_chain = NULL;
12395   char *pkt;
12396   struct breakpoint *b = loc->owner;
12397   struct tracepoint *t = (struct tracepoint *) b;
12398   struct remote_state *rs = get_remote_state ();
12399
12400   encode_actions_rsp (loc, &tdp_actions, &stepping_actions);
12401   old_chain = make_cleanup (free_actions_list_cleanup_wrapper,
12402                             tdp_actions);
12403   (void) make_cleanup (free_actions_list_cleanup_wrapper,
12404                        stepping_actions);
12405
12406   tpaddr = loc->address;
12407   sprintf_vma (addrbuf, tpaddr);
12408   xsnprintf (buf, BUF_SIZE, "QTDP:%x:%s:%c:%lx:%x", b->number,
12409              addrbuf, /* address */
12410              (b->enable_state == bp_enabled ? 'E' : 'D'),
12411              t->step_count, t->pass_count);
12412   /* Fast tracepoints are mostly handled by the target, but we can
12413      tell the target how big of an instruction block should be moved
12414      around.  */
12415   if (b->type == bp_fast_tracepoint)
12416     {
12417       /* Only test for support at download time; we may not know
12418          target capabilities at definition time.  */
12419       if (remote_supports_fast_tracepoints ())
12420         {
12421           if (gdbarch_fast_tracepoint_valid_at (loc->gdbarch, tpaddr,
12422                                                 NULL))
12423             xsnprintf (buf + strlen (buf), BUF_SIZE - strlen (buf), ":F%x",
12424                        gdb_insn_length (loc->gdbarch, tpaddr));
12425           else
12426             /* If it passed validation at definition but fails now,
12427                something is very wrong.  */
12428             internal_error (__FILE__, __LINE__,
12429                             _("Fast tracepoint not "
12430                               "valid during download"));
12431         }
12432       else
12433         /* Fast tracepoints are functionally identical to regular
12434            tracepoints, so don't take lack of support as a reason to
12435            give up on the trace run.  */
12436         warning (_("Target does not support fast tracepoints, "
12437                    "downloading %d as regular tracepoint"), b->number);
12438     }
12439   else if (b->type == bp_static_tracepoint)
12440     {
12441       /* Only test for support at download time; we may not know
12442          target capabilities at definition time.  */
12443       if (remote_supports_static_tracepoints ())
12444         {
12445           struct static_tracepoint_marker marker;
12446
12447           if (target_static_tracepoint_marker_at (tpaddr, &marker))
12448             strcat (buf, ":S");
12449           else
12450             error (_("Static tracepoint not valid during download"));
12451         }
12452       else
12453         /* Fast tracepoints are functionally identical to regular
12454            tracepoints, so don't take lack of support as a reason
12455            to give up on the trace run.  */
12456         error (_("Target does not support static tracepoints"));
12457     }
12458   /* If the tracepoint has a conditional, make it into an agent
12459      expression and append to the definition.  */
12460   if (loc->cond)
12461     {
12462       /* Only test support at download time, we may not know target
12463          capabilities at definition time.  */
12464       if (remote_supports_cond_tracepoints ())
12465         {
12466           agent_expr_up aexpr = gen_eval_for_expr (tpaddr, loc->cond.get ());
12467           xsnprintf (buf + strlen (buf), BUF_SIZE - strlen (buf), ":X%x,",
12468                      aexpr->len);
12469           pkt = buf + strlen (buf);
12470           for (ndx = 0; ndx < aexpr->len; ++ndx)
12471             pkt = pack_hex_byte (pkt, aexpr->buf[ndx]);
12472           *pkt = '\0';
12473         }
12474       else
12475         warning (_("Target does not support conditional tracepoints, "
12476                    "ignoring tp %d cond"), b->number);
12477     }
12478
12479   if (b->commands || *default_collect)
12480     strcat (buf, "-");
12481   putpkt (buf);
12482   remote_get_noisy_reply ();
12483   if (strcmp (rs->buf, "OK"))
12484     error (_("Target does not support tracepoints."));
12485
12486   /* do_single_steps (t); */
12487   if (tdp_actions)
12488     {
12489       for (ndx = 0; tdp_actions[ndx]; ndx++)
12490         {
12491           QUIT; /* Allow user to bail out with ^C.  */
12492           xsnprintf (buf, BUF_SIZE, "QTDP:-%x:%s:%s%c",
12493                      b->number, addrbuf, /* address */
12494                      tdp_actions[ndx],
12495                      ((tdp_actions[ndx + 1] || stepping_actions)
12496                       ? '-' : 0));
12497           putpkt (buf);
12498           remote_get_noisy_reply ();
12499           if (strcmp (rs->buf, "OK"))
12500             error (_("Error on target while setting tracepoints."));
12501         }
12502     }
12503   if (stepping_actions)
12504     {
12505       for (ndx = 0; stepping_actions[ndx]; ndx++)
12506         {
12507           QUIT; /* Allow user to bail out with ^C.  */
12508           xsnprintf (buf, BUF_SIZE, "QTDP:-%x:%s:%s%s%s",
12509                      b->number, addrbuf, /* address */
12510                      ((ndx == 0) ? "S" : ""),
12511                      stepping_actions[ndx],
12512                      (stepping_actions[ndx + 1] ? "-" : ""));
12513           putpkt (buf);
12514           remote_get_noisy_reply ();
12515           if (strcmp (rs->buf, "OK"))
12516             error (_("Error on target while setting tracepoints."));
12517         }
12518     }
12519
12520   if (packet_support (PACKET_TracepointSource) == PACKET_ENABLE)
12521     {
12522       if (b->location != NULL)
12523         {
12524           strcpy (buf, "QTDPsrc:");
12525           encode_source_string (b->number, loc->address, "at",
12526                                 event_location_to_string (b->location.get ()),
12527                                 buf + strlen (buf), 2048 - strlen (buf));
12528           putpkt (buf);
12529           remote_get_noisy_reply ();
12530           if (strcmp (rs->buf, "OK"))
12531             warning (_("Target does not support source download."));
12532         }
12533       if (b->cond_string)
12534         {
12535           strcpy (buf, "QTDPsrc:");
12536           encode_source_string (b->number, loc->address,
12537                                 "cond", b->cond_string, buf + strlen (buf),
12538                                 2048 - strlen (buf));
12539           putpkt (buf);
12540           remote_get_noisy_reply ();
12541           if (strcmp (rs->buf, "OK"))
12542             warning (_("Target does not support source download."));
12543         }
12544       remote_download_command_source (b->number, loc->address,
12545                                       breakpoint_commands (b));
12546     }
12547
12548   do_cleanups (old_chain);
12549 }
12550
12551 static int
12552 remote_can_download_tracepoint (struct target_ops *self)
12553 {
12554   struct remote_state *rs = get_remote_state ();
12555   struct trace_status *ts;
12556   int status;
12557
12558   /* Don't try to install tracepoints until we've relocated our
12559      symbols, and fetched and merged the target's tracepoint list with
12560      ours.  */
12561   if (rs->starting_up)
12562     return 0;
12563
12564   ts = current_trace_status ();
12565   status = remote_get_trace_status (self, ts);
12566
12567   if (status == -1 || !ts->running_known || !ts->running)
12568     return 0;
12569
12570   /* If we are in a tracing experiment, but remote stub doesn't support
12571      installing tracepoint in trace, we have to return.  */
12572   if (!remote_supports_install_in_trace ())
12573     return 0;
12574
12575   return 1;
12576 }
12577
12578
12579 static void
12580 remote_download_trace_state_variable (struct target_ops *self,
12581                                       struct trace_state_variable *tsv)
12582 {
12583   struct remote_state *rs = get_remote_state ();
12584   char *p;
12585
12586   xsnprintf (rs->buf, get_remote_packet_size (), "QTDV:%x:%s:%x:",
12587              tsv->number, phex ((ULONGEST) tsv->initial_value, 8),
12588              tsv->builtin);
12589   p = rs->buf + strlen (rs->buf);
12590   if ((p - rs->buf) + strlen (tsv->name) * 2 >= get_remote_packet_size ())
12591     error (_("Trace state variable name too long for tsv definition packet"));
12592   p += 2 * bin2hex ((gdb_byte *) (tsv->name), p, strlen (tsv->name));
12593   *p++ = '\0';
12594   putpkt (rs->buf);
12595   remote_get_noisy_reply ();
12596   if (*rs->buf == '\0')
12597     error (_("Target does not support this command."));
12598   if (strcmp (rs->buf, "OK") != 0)
12599     error (_("Error on target while downloading trace state variable."));
12600 }
12601
12602 static void
12603 remote_enable_tracepoint (struct target_ops *self,
12604                           struct bp_location *location)
12605 {
12606   struct remote_state *rs = get_remote_state ();
12607   char addr_buf[40];
12608
12609   sprintf_vma (addr_buf, location->address);
12610   xsnprintf (rs->buf, get_remote_packet_size (), "QTEnable:%x:%s",
12611              location->owner->number, addr_buf);
12612   putpkt (rs->buf);
12613   remote_get_noisy_reply ();
12614   if (*rs->buf == '\0')
12615     error (_("Target does not support enabling tracepoints while a trace run is ongoing."));
12616   if (strcmp (rs->buf, "OK") != 0)
12617     error (_("Error on target while enabling tracepoint."));
12618 }
12619
12620 static void
12621 remote_disable_tracepoint (struct target_ops *self,
12622                            struct bp_location *location)
12623 {
12624   struct remote_state *rs = get_remote_state ();
12625   char addr_buf[40];
12626
12627   sprintf_vma (addr_buf, location->address);
12628   xsnprintf (rs->buf, get_remote_packet_size (), "QTDisable:%x:%s",
12629              location->owner->number, addr_buf);
12630   putpkt (rs->buf);
12631   remote_get_noisy_reply ();
12632   if (*rs->buf == '\0')
12633     error (_("Target does not support disabling tracepoints while a trace run is ongoing."));
12634   if (strcmp (rs->buf, "OK") != 0)
12635     error (_("Error on target while disabling tracepoint."));
12636 }
12637
12638 static void
12639 remote_trace_set_readonly_regions (struct target_ops *self)
12640 {
12641   asection *s;
12642   bfd *abfd = NULL;
12643   bfd_size_type size;
12644   bfd_vma vma;
12645   int anysecs = 0;
12646   int offset = 0;
12647
12648   if (!exec_bfd)
12649     return;                     /* No information to give.  */
12650
12651   struct remote_state *rs = get_remote_state ();
12652
12653   strcpy (rs->buf, "QTro");
12654   offset = strlen (rs->buf);
12655   for (s = exec_bfd->sections; s; s = s->next)
12656     {
12657       char tmp1[40], tmp2[40];
12658       int sec_length;
12659
12660       if ((s->flags & SEC_LOAD) == 0 ||
12661       /*  (s->flags & SEC_CODE) == 0 || */
12662           (s->flags & SEC_READONLY) == 0)
12663         continue;
12664
12665       anysecs = 1;
12666       vma = bfd_get_section_vma (abfd, s);
12667       size = bfd_get_section_size (s);
12668       sprintf_vma (tmp1, vma);
12669       sprintf_vma (tmp2, vma + size);
12670       sec_length = 1 + strlen (tmp1) + 1 + strlen (tmp2);
12671       if (offset + sec_length + 1 > rs->buf_size)
12672         {
12673           if (packet_support (PACKET_qXfer_traceframe_info) != PACKET_ENABLE)
12674             warning (_("\
12675 Too many sections for read-only sections definition packet."));
12676           break;
12677         }
12678       xsnprintf (rs->buf + offset, rs->buf_size - offset, ":%s,%s",
12679                  tmp1, tmp2);
12680       offset += sec_length;
12681     }
12682   if (anysecs)
12683     {
12684       putpkt (rs->buf);
12685       getpkt (&rs->buf, &rs->buf_size, 0);
12686     }
12687 }
12688
12689 static void
12690 remote_trace_start (struct target_ops *self)
12691 {
12692   struct remote_state *rs = get_remote_state ();
12693
12694   putpkt ("QTStart");
12695   remote_get_noisy_reply ();
12696   if (*rs->buf == '\0')
12697     error (_("Target does not support this command."));
12698   if (strcmp (rs->buf, "OK") != 0)
12699     error (_("Bogus reply from target: %s"), rs->buf);
12700 }
12701
12702 static int
12703 remote_get_trace_status (struct target_ops *self, struct trace_status *ts)
12704 {
12705   /* Initialize it just to avoid a GCC false warning.  */
12706   char *p = NULL;
12707   /* FIXME we need to get register block size some other way.  */
12708   extern int trace_regblock_size;
12709   enum packet_result result;
12710   struct remote_state *rs = get_remote_state ();
12711
12712   if (packet_support (PACKET_qTStatus) == PACKET_DISABLE)
12713     return -1;
12714
12715   trace_regblock_size
12716     = get_remote_arch_state (target_gdbarch ())->sizeof_g_packet;
12717
12718   putpkt ("qTStatus");
12719
12720   TRY
12721     {
12722       p = remote_get_noisy_reply ();
12723     }
12724   CATCH (ex, RETURN_MASK_ERROR)
12725     {
12726       if (ex.error != TARGET_CLOSE_ERROR)
12727         {
12728           exception_fprintf (gdb_stderr, ex, "qTStatus: ");
12729           return -1;
12730         }
12731       throw_exception (ex);
12732     }
12733   END_CATCH
12734
12735   result = packet_ok (p, &remote_protocol_packets[PACKET_qTStatus]);
12736
12737   /* If the remote target doesn't do tracing, flag it.  */
12738   if (result == PACKET_UNKNOWN)
12739     return -1;
12740
12741   /* We're working with a live target.  */
12742   ts->filename = NULL;
12743
12744   if (*p++ != 'T')
12745     error (_("Bogus trace status reply from target: %s"), rs->buf);
12746
12747   /* Function 'parse_trace_status' sets default value of each field of
12748      'ts' at first, so we don't have to do it here.  */
12749   parse_trace_status (p, ts);
12750
12751   return ts->running;
12752 }
12753
12754 static void
12755 remote_get_tracepoint_status (struct target_ops *self, struct breakpoint *bp,
12756                               struct uploaded_tp *utp)
12757 {
12758   struct remote_state *rs = get_remote_state ();
12759   char *reply;
12760   struct bp_location *loc;
12761   struct tracepoint *tp = (struct tracepoint *) bp;
12762   size_t size = get_remote_packet_size ();
12763
12764   if (tp)
12765     {
12766       tp->hit_count = 0;
12767       tp->traceframe_usage = 0;
12768       for (loc = tp->loc; loc; loc = loc->next)
12769         {
12770           /* If the tracepoint was never downloaded, don't go asking for
12771              any status.  */
12772           if (tp->number_on_target == 0)
12773             continue;
12774           xsnprintf (rs->buf, size, "qTP:%x:%s", tp->number_on_target,
12775                      phex_nz (loc->address, 0));
12776           putpkt (rs->buf);
12777           reply = remote_get_noisy_reply ();
12778           if (reply && *reply)
12779             {
12780               if (*reply == 'V')
12781                 parse_tracepoint_status (reply + 1, bp, utp);
12782             }
12783         }
12784     }
12785   else if (utp)
12786     {
12787       utp->hit_count = 0;
12788       utp->traceframe_usage = 0;
12789       xsnprintf (rs->buf, size, "qTP:%x:%s", utp->number,
12790                  phex_nz (utp->addr, 0));
12791       putpkt (rs->buf);
12792       reply = remote_get_noisy_reply ();
12793       if (reply && *reply)
12794         {
12795           if (*reply == 'V')
12796             parse_tracepoint_status (reply + 1, bp, utp);
12797         }
12798     }
12799 }
12800
12801 static void
12802 remote_trace_stop (struct target_ops *self)
12803 {
12804   struct remote_state *rs = get_remote_state ();
12805
12806   putpkt ("QTStop");
12807   remote_get_noisy_reply ();
12808   if (*rs->buf == '\0')
12809     error (_("Target does not support this command."));
12810   if (strcmp (rs->buf, "OK") != 0)
12811     error (_("Bogus reply from target: %s"), rs->buf);
12812 }
12813
12814 static int
12815 remote_trace_find (struct target_ops *self,
12816                    enum trace_find_type type, int num,
12817                    CORE_ADDR addr1, CORE_ADDR addr2,
12818                    int *tpp)
12819 {
12820   struct remote_state *rs = get_remote_state ();
12821   char *endbuf = rs->buf + get_remote_packet_size ();
12822   char *p, *reply;
12823   int target_frameno = -1, target_tracept = -1;
12824
12825   /* Lookups other than by absolute frame number depend on the current
12826      trace selected, so make sure it is correct on the remote end
12827      first.  */
12828   if (type != tfind_number)
12829     set_remote_traceframe ();
12830
12831   p = rs->buf;
12832   strcpy (p, "QTFrame:");
12833   p = strchr (p, '\0');
12834   switch (type)
12835     {
12836     case tfind_number:
12837       xsnprintf (p, endbuf - p, "%x", num);
12838       break;
12839     case tfind_pc:
12840       xsnprintf (p, endbuf - p, "pc:%s", phex_nz (addr1, 0));
12841       break;
12842     case tfind_tp:
12843       xsnprintf (p, endbuf - p, "tdp:%x", num);
12844       break;
12845     case tfind_range:
12846       xsnprintf (p, endbuf - p, "range:%s:%s", phex_nz (addr1, 0),
12847                  phex_nz (addr2, 0));
12848       break;
12849     case tfind_outside:
12850       xsnprintf (p, endbuf - p, "outside:%s:%s", phex_nz (addr1, 0),
12851                  phex_nz (addr2, 0));
12852       break;
12853     default:
12854       error (_("Unknown trace find type %d"), type);
12855     }
12856
12857   putpkt (rs->buf);
12858   reply = remote_get_noisy_reply ();
12859   if (*reply == '\0')
12860     error (_("Target does not support this command."));
12861
12862   while (reply && *reply)
12863     switch (*reply)
12864       {
12865       case 'F':
12866         p = ++reply;
12867         target_frameno = (int) strtol (p, &reply, 16);
12868         if (reply == p)
12869           error (_("Unable to parse trace frame number"));
12870         /* Don't update our remote traceframe number cache on failure
12871            to select a remote traceframe.  */
12872         if (target_frameno == -1)
12873           return -1;
12874         break;
12875       case 'T':
12876         p = ++reply;
12877         target_tracept = (int) strtol (p, &reply, 16);
12878         if (reply == p)
12879           error (_("Unable to parse tracepoint number"));
12880         break;
12881       case 'O':         /* "OK"? */
12882         if (reply[1] == 'K' && reply[2] == '\0')
12883           reply += 2;
12884         else
12885           error (_("Bogus reply from target: %s"), reply);
12886         break;
12887       default:
12888         error (_("Bogus reply from target: %s"), reply);
12889       }
12890   if (tpp)
12891     *tpp = target_tracept;
12892
12893   rs->remote_traceframe_number = target_frameno;
12894   return target_frameno;
12895 }
12896
12897 static int
12898 remote_get_trace_state_variable_value (struct target_ops *self,
12899                                        int tsvnum, LONGEST *val)
12900 {
12901   struct remote_state *rs = get_remote_state ();
12902   char *reply;
12903   ULONGEST uval;
12904
12905   set_remote_traceframe ();
12906
12907   xsnprintf (rs->buf, get_remote_packet_size (), "qTV:%x", tsvnum);
12908   putpkt (rs->buf);
12909   reply = remote_get_noisy_reply ();
12910   if (reply && *reply)
12911     {
12912       if (*reply == 'V')
12913         {
12914           unpack_varlen_hex (reply + 1, &uval);
12915           *val = (LONGEST) uval;
12916           return 1;
12917         }
12918     }
12919   return 0;
12920 }
12921
12922 static int
12923 remote_save_trace_data (struct target_ops *self, const char *filename)
12924 {
12925   struct remote_state *rs = get_remote_state ();
12926   char *p, *reply;
12927
12928   p = rs->buf;
12929   strcpy (p, "QTSave:");
12930   p += strlen (p);
12931   if ((p - rs->buf) + strlen (filename) * 2 >= get_remote_packet_size ())
12932     error (_("Remote file name too long for trace save packet"));
12933   p += 2 * bin2hex ((gdb_byte *) filename, p, strlen (filename));
12934   *p++ = '\0';
12935   putpkt (rs->buf);
12936   reply = remote_get_noisy_reply ();
12937   if (*reply == '\0')
12938     error (_("Target does not support this command."));
12939   if (strcmp (reply, "OK") != 0)
12940     error (_("Bogus reply from target: %s"), reply);
12941   return 0;
12942 }
12943
12944 /* This is basically a memory transfer, but needs to be its own packet
12945    because we don't know how the target actually organizes its trace
12946    memory, plus we want to be able to ask for as much as possible, but
12947    not be unhappy if we don't get as much as we ask for.  */
12948
12949 static LONGEST
12950 remote_get_raw_trace_data (struct target_ops *self,
12951                            gdb_byte *buf, ULONGEST offset, LONGEST len)
12952 {
12953   struct remote_state *rs = get_remote_state ();
12954   char *reply;
12955   char *p;
12956   int rslt;
12957
12958   p = rs->buf;
12959   strcpy (p, "qTBuffer:");
12960   p += strlen (p);
12961   p += hexnumstr (p, offset);
12962   *p++ = ',';
12963   p += hexnumstr (p, len);
12964   *p++ = '\0';
12965
12966   putpkt (rs->buf);
12967   reply = remote_get_noisy_reply ();
12968   if (reply && *reply)
12969     {
12970       /* 'l' by itself means we're at the end of the buffer and
12971          there is nothing more to get.  */
12972       if (*reply == 'l')
12973         return 0;
12974
12975       /* Convert the reply into binary.  Limit the number of bytes to
12976          convert according to our passed-in buffer size, rather than
12977          what was returned in the packet; if the target is
12978          unexpectedly generous and gives us a bigger reply than we
12979          asked for, we don't want to crash.  */
12980       rslt = hex2bin (reply, buf, len);
12981       return rslt;
12982     }
12983
12984   /* Something went wrong, flag as an error.  */
12985   return -1;
12986 }
12987
12988 static void
12989 remote_set_disconnected_tracing (struct target_ops *self, int val)
12990 {
12991   struct remote_state *rs = get_remote_state ();
12992
12993   if (packet_support (PACKET_DisconnectedTracing_feature) == PACKET_ENABLE)
12994     {
12995       char *reply;
12996
12997       xsnprintf (rs->buf, get_remote_packet_size (), "QTDisconnected:%x", val);
12998       putpkt (rs->buf);
12999       reply = remote_get_noisy_reply ();
13000       if (*reply == '\0')
13001         error (_("Target does not support this command."));
13002       if (strcmp (reply, "OK") != 0)
13003         error (_("Bogus reply from target: %s"), reply);
13004     }
13005   else if (val)
13006     warning (_("Target does not support disconnected tracing."));
13007 }
13008
13009 static int
13010 remote_core_of_thread (struct target_ops *ops, ptid_t ptid)
13011 {
13012   struct thread_info *info = find_thread_ptid (ptid);
13013
13014   if (info && info->priv)
13015     return info->priv->core;
13016   return -1;
13017 }
13018
13019 static void
13020 remote_set_circular_trace_buffer (struct target_ops *self, int val)
13021 {
13022   struct remote_state *rs = get_remote_state ();
13023   char *reply;
13024
13025   xsnprintf (rs->buf, get_remote_packet_size (), "QTBuffer:circular:%x", val);
13026   putpkt (rs->buf);
13027   reply = remote_get_noisy_reply ();
13028   if (*reply == '\0')
13029     error (_("Target does not support this command."));
13030   if (strcmp (reply, "OK") != 0)
13031     error (_("Bogus reply from target: %s"), reply);
13032 }
13033
13034 static traceframe_info_up
13035 remote_traceframe_info (struct target_ops *self)
13036 {
13037   gdb::unique_xmalloc_ptr<char> text
13038     = target_read_stralloc (&current_target, TARGET_OBJECT_TRACEFRAME_INFO,
13039                             NULL);
13040   if (text != NULL)
13041     return parse_traceframe_info (text.get ());
13042
13043   return NULL;
13044 }
13045
13046 /* Handle the qTMinFTPILen packet.  Returns the minimum length of
13047    instruction on which a fast tracepoint may be placed.  Returns -1
13048    if the packet is not supported, and 0 if the minimum instruction
13049    length is unknown.  */
13050
13051 static int
13052 remote_get_min_fast_tracepoint_insn_len (struct target_ops *self)
13053 {
13054   struct remote_state *rs = get_remote_state ();
13055   char *reply;
13056
13057   /* If we're not debugging a process yet, the IPA can't be
13058      loaded.  */
13059   if (!target_has_execution)
13060     return 0;
13061
13062   /* Make sure the remote is pointing at the right process.  */
13063   set_general_process ();
13064
13065   xsnprintf (rs->buf, get_remote_packet_size (), "qTMinFTPILen");
13066   putpkt (rs->buf);
13067   reply = remote_get_noisy_reply ();
13068   if (*reply == '\0')
13069     return -1;
13070   else
13071     {
13072       ULONGEST min_insn_len;
13073
13074       unpack_varlen_hex (reply, &min_insn_len);
13075
13076       return (int) min_insn_len;
13077     }
13078 }
13079
13080 static void
13081 remote_set_trace_buffer_size (struct target_ops *self, LONGEST val)
13082 {
13083   if (packet_support (PACKET_QTBuffer_size) != PACKET_DISABLE)
13084     {
13085       struct remote_state *rs = get_remote_state ();
13086       char *buf = rs->buf;
13087       char *endbuf = rs->buf + get_remote_packet_size ();
13088       enum packet_result result;
13089
13090       gdb_assert (val >= 0 || val == -1);
13091       buf += xsnprintf (buf, endbuf - buf, "QTBuffer:size:");
13092       /* Send -1 as literal "-1" to avoid host size dependency.  */
13093       if (val < 0)
13094         {
13095           *buf++ = '-';
13096           buf += hexnumstr (buf, (ULONGEST) -val);
13097         }
13098       else
13099         buf += hexnumstr (buf, (ULONGEST) val);
13100
13101       putpkt (rs->buf);
13102       remote_get_noisy_reply ();
13103       result = packet_ok (rs->buf,
13104                   &remote_protocol_packets[PACKET_QTBuffer_size]);
13105
13106       if (result != PACKET_OK)
13107         warning (_("Bogus reply from target: %s"), rs->buf);
13108     }
13109 }
13110
13111 static int
13112 remote_set_trace_notes (struct target_ops *self,
13113                         const char *user, const char *notes,
13114                         const char *stop_notes)
13115 {
13116   struct remote_state *rs = get_remote_state ();
13117   char *reply;
13118   char *buf = rs->buf;
13119   char *endbuf = rs->buf + get_remote_packet_size ();
13120   int nbytes;
13121
13122   buf += xsnprintf (buf, endbuf - buf, "QTNotes:");
13123   if (user)
13124     {
13125       buf += xsnprintf (buf, endbuf - buf, "user:");
13126       nbytes = bin2hex ((gdb_byte *) user, buf, strlen (user));
13127       buf += 2 * nbytes;
13128       *buf++ = ';';
13129     }
13130   if (notes)
13131     {
13132       buf += xsnprintf (buf, endbuf - buf, "notes:");
13133       nbytes = bin2hex ((gdb_byte *) notes, buf, strlen (notes));
13134       buf += 2 * nbytes;
13135       *buf++ = ';';
13136     }
13137   if (stop_notes)
13138     {
13139       buf += xsnprintf (buf, endbuf - buf, "tstop:");
13140       nbytes = bin2hex ((gdb_byte *) stop_notes, buf, strlen (stop_notes));
13141       buf += 2 * nbytes;
13142       *buf++ = ';';
13143     }
13144   /* Ensure the buffer is terminated.  */
13145   *buf = '\0';
13146
13147   putpkt (rs->buf);
13148   reply = remote_get_noisy_reply ();
13149   if (*reply == '\0')
13150     return 0;
13151
13152   if (strcmp (reply, "OK") != 0)
13153     error (_("Bogus reply from target: %s"), reply);
13154
13155   return 1;
13156 }
13157
13158 static int
13159 remote_use_agent (struct target_ops *self, int use)
13160 {
13161   if (packet_support (PACKET_QAgent) != PACKET_DISABLE)
13162     {
13163       struct remote_state *rs = get_remote_state ();
13164
13165       /* If the stub supports QAgent.  */
13166       xsnprintf (rs->buf, get_remote_packet_size (), "QAgent:%d", use);
13167       putpkt (rs->buf);
13168       getpkt (&rs->buf, &rs->buf_size, 0);
13169
13170       if (strcmp (rs->buf, "OK") == 0)
13171         {
13172           use_agent = use;
13173           return 1;
13174         }
13175     }
13176
13177   return 0;
13178 }
13179
13180 static int
13181 remote_can_use_agent (struct target_ops *self)
13182 {
13183   return (packet_support (PACKET_QAgent) != PACKET_DISABLE);
13184 }
13185
13186 struct btrace_target_info
13187 {
13188   /* The ptid of the traced thread.  */
13189   ptid_t ptid;
13190
13191   /* The obtained branch trace configuration.  */
13192   struct btrace_config conf;
13193 };
13194
13195 /* Reset our idea of our target's btrace configuration.  */
13196
13197 static void
13198 remote_btrace_reset (void)
13199 {
13200   struct remote_state *rs = get_remote_state ();
13201
13202   memset (&rs->btrace_config, 0, sizeof (rs->btrace_config));
13203 }
13204
13205 /* Check whether the target supports branch tracing.  */
13206
13207 static int
13208 remote_supports_btrace (struct target_ops *self, enum btrace_format format)
13209 {
13210   if (packet_support (PACKET_Qbtrace_off) != PACKET_ENABLE)
13211     return 0;
13212   if (packet_support (PACKET_qXfer_btrace) != PACKET_ENABLE)
13213     return 0;
13214
13215   switch (format)
13216     {
13217       case BTRACE_FORMAT_NONE:
13218         return 0;
13219
13220       case BTRACE_FORMAT_BTS:
13221         return (packet_support (PACKET_Qbtrace_bts) == PACKET_ENABLE);
13222
13223       case BTRACE_FORMAT_PT:
13224         /* The trace is decoded on the host.  Even if our target supports it,
13225            we still need to have libipt to decode the trace.  */
13226 #if defined (HAVE_LIBIPT)
13227         return (packet_support (PACKET_Qbtrace_pt) == PACKET_ENABLE);
13228 #else /* !defined (HAVE_LIBIPT)  */
13229         return 0;
13230 #endif /* !defined (HAVE_LIBIPT)  */
13231     }
13232
13233   internal_error (__FILE__, __LINE__, _("Unknown branch trace format"));
13234 }
13235
13236 /* Synchronize the configuration with the target.  */
13237
13238 static void
13239 btrace_sync_conf (const struct btrace_config *conf)
13240 {
13241   struct packet_config *packet;
13242   struct remote_state *rs;
13243   char *buf, *pos, *endbuf;
13244
13245   rs = get_remote_state ();
13246   buf = rs->buf;
13247   endbuf = buf + get_remote_packet_size ();
13248
13249   packet = &remote_protocol_packets[PACKET_Qbtrace_conf_bts_size];
13250   if (packet_config_support (packet) == PACKET_ENABLE
13251       && conf->bts.size != rs->btrace_config.bts.size)
13252     {
13253       pos = buf;
13254       pos += xsnprintf (pos, endbuf - pos, "%s=0x%x", packet->name,
13255                         conf->bts.size);
13256
13257       putpkt (buf);
13258       getpkt (&buf, &rs->buf_size, 0);
13259
13260       if (packet_ok (buf, packet) == PACKET_ERROR)
13261         {
13262           if (buf[0] == 'E' && buf[1] == '.')
13263             error (_("Failed to configure the BTS buffer size: %s"), buf + 2);
13264           else
13265             error (_("Failed to configure the BTS buffer size."));
13266         }
13267
13268       rs->btrace_config.bts.size = conf->bts.size;
13269     }
13270
13271   packet = &remote_protocol_packets[PACKET_Qbtrace_conf_pt_size];
13272   if (packet_config_support (packet) == PACKET_ENABLE
13273       && conf->pt.size != rs->btrace_config.pt.size)
13274     {
13275       pos = buf;
13276       pos += xsnprintf (pos, endbuf - pos, "%s=0x%x", packet->name,
13277                         conf->pt.size);
13278
13279       putpkt (buf);
13280       getpkt (&buf, &rs->buf_size, 0);
13281
13282       if (packet_ok (buf, packet) == PACKET_ERROR)
13283         {
13284           if (buf[0] == 'E' && buf[1] == '.')
13285             error (_("Failed to configure the trace buffer size: %s"), buf + 2);
13286           else
13287             error (_("Failed to configure the trace buffer size."));
13288         }
13289
13290       rs->btrace_config.pt.size = conf->pt.size;
13291     }
13292 }
13293
13294 /* Read the current thread's btrace configuration from the target and
13295    store it into CONF.  */
13296
13297 static void
13298 btrace_read_config (struct btrace_config *conf)
13299 {
13300   gdb::unique_xmalloc_ptr<char> xml
13301     = target_read_stralloc (&current_target, TARGET_OBJECT_BTRACE_CONF, "");
13302   if (xml != NULL)
13303     parse_xml_btrace_conf (conf, xml.get ());
13304 }
13305
13306 /* Maybe reopen target btrace.  */
13307
13308 static void
13309 remote_btrace_maybe_reopen (void)
13310 {
13311   struct remote_state *rs = get_remote_state ();
13312   struct thread_info *tp;
13313   int btrace_target_pushed = 0;
13314   int warned = 0;
13315
13316   scoped_restore_current_thread restore_thread;
13317
13318   ALL_NON_EXITED_THREADS (tp)
13319     {
13320       set_general_thread (tp->ptid);
13321
13322       memset (&rs->btrace_config, 0x00, sizeof (struct btrace_config));
13323       btrace_read_config (&rs->btrace_config);
13324
13325       if (rs->btrace_config.format == BTRACE_FORMAT_NONE)
13326         continue;
13327
13328 #if !defined (HAVE_LIBIPT)
13329       if (rs->btrace_config.format == BTRACE_FORMAT_PT)
13330         {
13331           if (!warned)
13332             {
13333               warned = 1;
13334               warning (_("GDB does not support Intel Processor Trace. "
13335                          "\"record\" will not work in this session."));
13336             }
13337
13338           continue;
13339         }
13340 #endif /* !defined (HAVE_LIBIPT) */
13341
13342       /* Push target, once, but before anything else happens.  This way our
13343          changes to the threads will be cleaned up by unpushing the target
13344          in case btrace_read_config () throws.  */
13345       if (!btrace_target_pushed)
13346         {
13347           btrace_target_pushed = 1;
13348           record_btrace_push_target ();
13349           printf_filtered (_("Target is recording using %s.\n"),
13350                            btrace_format_string (rs->btrace_config.format));
13351         }
13352
13353       tp->btrace.target = XCNEW (struct btrace_target_info);
13354       tp->btrace.target->ptid = tp->ptid;
13355       tp->btrace.target->conf = rs->btrace_config;
13356     }
13357 }
13358
13359 /* Enable branch tracing.  */
13360
13361 static struct btrace_target_info *
13362 remote_enable_btrace (struct target_ops *self, ptid_t ptid,
13363                       const struct btrace_config *conf)
13364 {
13365   struct btrace_target_info *tinfo = NULL;
13366   struct packet_config *packet = NULL;
13367   struct remote_state *rs = get_remote_state ();
13368   char *buf = rs->buf;
13369   char *endbuf = rs->buf + get_remote_packet_size ();
13370
13371   switch (conf->format)
13372     {
13373       case BTRACE_FORMAT_BTS:
13374         packet = &remote_protocol_packets[PACKET_Qbtrace_bts];
13375         break;
13376
13377       case BTRACE_FORMAT_PT:
13378         packet = &remote_protocol_packets[PACKET_Qbtrace_pt];
13379         break;
13380     }
13381
13382   if (packet == NULL || packet_config_support (packet) != PACKET_ENABLE)
13383     error (_("Target does not support branch tracing."));
13384
13385   btrace_sync_conf (conf);
13386
13387   set_general_thread (ptid);
13388
13389   buf += xsnprintf (buf, endbuf - buf, "%s", packet->name);
13390   putpkt (rs->buf);
13391   getpkt (&rs->buf, &rs->buf_size, 0);
13392
13393   if (packet_ok (rs->buf, packet) == PACKET_ERROR)
13394     {
13395       if (rs->buf[0] == 'E' && rs->buf[1] == '.')
13396         error (_("Could not enable branch tracing for %s: %s"),
13397                target_pid_to_str (ptid), rs->buf + 2);
13398       else
13399         error (_("Could not enable branch tracing for %s."),
13400                target_pid_to_str (ptid));
13401     }
13402
13403   tinfo = XCNEW (struct btrace_target_info);
13404   tinfo->ptid = ptid;
13405
13406   /* If we fail to read the configuration, we lose some information, but the
13407      tracing itself is not impacted.  */
13408   TRY
13409     {
13410       btrace_read_config (&tinfo->conf);
13411     }
13412   CATCH (err, RETURN_MASK_ERROR)
13413     {
13414       if (err.message != NULL)
13415         warning ("%s", err.message);
13416     }
13417   END_CATCH
13418
13419   return tinfo;
13420 }
13421
13422 /* Disable branch tracing.  */
13423
13424 static void
13425 remote_disable_btrace (struct target_ops *self,
13426                        struct btrace_target_info *tinfo)
13427 {
13428   struct packet_config *packet = &remote_protocol_packets[PACKET_Qbtrace_off];
13429   struct remote_state *rs = get_remote_state ();
13430   char *buf = rs->buf;
13431   char *endbuf = rs->buf + get_remote_packet_size ();
13432
13433   if (packet_config_support (packet) != PACKET_ENABLE)
13434     error (_("Target does not support branch tracing."));
13435
13436   set_general_thread (tinfo->ptid);
13437
13438   buf += xsnprintf (buf, endbuf - buf, "%s", packet->name);
13439   putpkt (rs->buf);
13440   getpkt (&rs->buf, &rs->buf_size, 0);
13441
13442   if (packet_ok (rs->buf, packet) == PACKET_ERROR)
13443     {
13444       if (rs->buf[0] == 'E' && rs->buf[1] == '.')
13445         error (_("Could not disable branch tracing for %s: %s"),
13446                target_pid_to_str (tinfo->ptid), rs->buf + 2);
13447       else
13448         error (_("Could not disable branch tracing for %s."),
13449                target_pid_to_str (tinfo->ptid));
13450     }
13451
13452   xfree (tinfo);
13453 }
13454
13455 /* Teardown branch tracing.  */
13456
13457 static void
13458 remote_teardown_btrace (struct target_ops *self,
13459                         struct btrace_target_info *tinfo)
13460 {
13461   /* We must not talk to the target during teardown.  */
13462   xfree (tinfo);
13463 }
13464
13465 /* Read the branch trace.  */
13466
13467 static enum btrace_error
13468 remote_read_btrace (struct target_ops *self,
13469                     struct btrace_data *btrace,
13470                     struct btrace_target_info *tinfo,
13471                     enum btrace_read_type type)
13472 {
13473   struct packet_config *packet = &remote_protocol_packets[PACKET_qXfer_btrace];
13474   const char *annex;
13475
13476   if (packet_config_support (packet) != PACKET_ENABLE)
13477     error (_("Target does not support branch tracing."));
13478
13479 #if !defined(HAVE_LIBEXPAT)
13480   error (_("Cannot process branch tracing result. XML parsing not supported."));
13481 #endif
13482
13483   switch (type)
13484     {
13485     case BTRACE_READ_ALL:
13486       annex = "all";
13487       break;
13488     case BTRACE_READ_NEW:
13489       annex = "new";
13490       break;
13491     case BTRACE_READ_DELTA:
13492       annex = "delta";
13493       break;
13494     default:
13495       internal_error (__FILE__, __LINE__,
13496                       _("Bad branch tracing read type: %u."),
13497                       (unsigned int) type);
13498     }
13499
13500   gdb::unique_xmalloc_ptr<char> xml
13501     = target_read_stralloc (&current_target, TARGET_OBJECT_BTRACE, annex);
13502   if (xml == NULL)
13503     return BTRACE_ERR_UNKNOWN;
13504
13505   parse_xml_btrace (btrace, xml.get ());
13506
13507   return BTRACE_ERR_NONE;
13508 }
13509
13510 static const struct btrace_config *
13511 remote_btrace_conf (struct target_ops *self,
13512                     const struct btrace_target_info *tinfo)
13513 {
13514   return &tinfo->conf;
13515 }
13516
13517 static int
13518 remote_augmented_libraries_svr4_read (struct target_ops *self)
13519 {
13520   return (packet_support (PACKET_augmented_libraries_svr4_read_feature)
13521           == PACKET_ENABLE);
13522 }
13523
13524 /* Implementation of to_load.  */
13525
13526 static void
13527 remote_load (struct target_ops *self, const char *name, int from_tty)
13528 {
13529   generic_load (name, from_tty);
13530 }
13531
13532 /* Accepts an integer PID; returns a string representing a file that
13533    can be opened on the remote side to get the symbols for the child
13534    process.  Returns NULL if the operation is not supported.  */
13535
13536 static char *
13537 remote_pid_to_exec_file (struct target_ops *self, int pid)
13538 {
13539   static gdb::unique_xmalloc_ptr<char> filename;
13540   struct inferior *inf;
13541   char *annex = NULL;
13542
13543   if (packet_support (PACKET_qXfer_exec_file) != PACKET_ENABLE)
13544     return NULL;
13545
13546   inf = find_inferior_pid (pid);
13547   if (inf == NULL)
13548     internal_error (__FILE__, __LINE__,
13549                     _("not currently attached to process %d"), pid);
13550
13551   if (!inf->fake_pid_p)
13552     {
13553       const int annex_size = 9;
13554
13555       annex = (char *) alloca (annex_size);
13556       xsnprintf (annex, annex_size, "%x", pid);
13557     }
13558
13559   filename = target_read_stralloc (&current_target,
13560                                    TARGET_OBJECT_EXEC_FILE, annex);
13561
13562   return filename.get ();
13563 }
13564
13565 /* Implement the to_can_do_single_step target_ops method.  */
13566
13567 static int
13568 remote_can_do_single_step (struct target_ops *ops)
13569 {
13570   /* We can only tell whether target supports single step or not by
13571      supported s and S vCont actions if the stub supports vContSupported
13572      feature.  If the stub doesn't support vContSupported feature,
13573      we have conservatively to think target doesn't supports single
13574      step.  */
13575   if (packet_support (PACKET_vContSupported) == PACKET_ENABLE)
13576     {
13577       struct remote_state *rs = get_remote_state ();
13578
13579       if (packet_support (PACKET_vCont) == PACKET_SUPPORT_UNKNOWN)
13580         remote_vcont_probe (rs);
13581
13582       return rs->supports_vCont.s && rs->supports_vCont.S;
13583     }
13584   else
13585     return 0;
13586 }
13587
13588 /* Implementation of the to_execution_direction method for the remote
13589    target.  */
13590
13591 static enum exec_direction_kind
13592 remote_execution_direction (struct target_ops *self)
13593 {
13594   struct remote_state *rs = get_remote_state ();
13595
13596   return rs->last_resume_exec_dir;
13597 }
13598
13599 /* Return pointer to the thread_info struct which corresponds to
13600    THREAD_HANDLE (having length HANDLE_LEN).  */
13601
13602 static struct thread_info *
13603 remote_thread_handle_to_thread_info (struct target_ops *ops,
13604                                      const gdb_byte *thread_handle,
13605                                      int handle_len,
13606                                      struct inferior *inf)
13607 {
13608   struct thread_info *tp;
13609
13610   ALL_NON_EXITED_THREADS (tp)
13611     {
13612       struct private_thread_info *priv = get_private_info_thread (tp);
13613
13614       if (tp->inf == inf && priv != NULL)
13615         {
13616           if (handle_len != priv->thread_handle->size ())
13617             error (_("Thread handle size mismatch: %d vs %zu (from remote)"),
13618                    handle_len, priv->thread_handle->size ());
13619           if (memcmp (thread_handle, priv->thread_handle->data (),
13620                       handle_len) == 0)
13621             return tp;
13622         }
13623     }
13624
13625   return NULL;
13626 }
13627
13628 static void
13629 init_remote_ops (void)
13630 {
13631   remote_ops.to_shortname = "remote";
13632   remote_ops.to_longname = "Remote serial target in gdb-specific protocol";
13633   remote_ops.to_doc =
13634     "Use a remote computer via a serial line, using a gdb-specific protocol.\n\
13635 Specify the serial device it is connected to\n\
13636 (e.g. /dev/ttyS0, /dev/ttya, COM1, etc.).";
13637   remote_ops.to_open = remote_open;
13638   remote_ops.to_close = remote_close;
13639   remote_ops.to_detach = remote_detach;
13640   remote_ops.to_disconnect = remote_disconnect;
13641   remote_ops.to_resume = remote_resume;
13642   remote_ops.to_commit_resume = remote_commit_resume;
13643   remote_ops.to_wait = remote_wait;
13644   remote_ops.to_fetch_registers = remote_fetch_registers;
13645   remote_ops.to_store_registers = remote_store_registers;
13646   remote_ops.to_prepare_to_store = remote_prepare_to_store;
13647   remote_ops.to_files_info = remote_files_info;
13648   remote_ops.to_insert_breakpoint = remote_insert_breakpoint;
13649   remote_ops.to_remove_breakpoint = remote_remove_breakpoint;
13650   remote_ops.to_stopped_by_sw_breakpoint = remote_stopped_by_sw_breakpoint;
13651   remote_ops.to_supports_stopped_by_sw_breakpoint = remote_supports_stopped_by_sw_breakpoint;
13652   remote_ops.to_stopped_by_hw_breakpoint = remote_stopped_by_hw_breakpoint;
13653   remote_ops.to_supports_stopped_by_hw_breakpoint = remote_supports_stopped_by_hw_breakpoint;
13654   remote_ops.to_stopped_by_watchpoint = remote_stopped_by_watchpoint;
13655   remote_ops.to_stopped_data_address = remote_stopped_data_address;
13656   remote_ops.to_watchpoint_addr_within_range =
13657     remote_watchpoint_addr_within_range;
13658   remote_ops.to_can_use_hw_breakpoint = remote_check_watch_resources;
13659   remote_ops.to_insert_hw_breakpoint = remote_insert_hw_breakpoint;
13660   remote_ops.to_remove_hw_breakpoint = remote_remove_hw_breakpoint;
13661   remote_ops.to_region_ok_for_hw_watchpoint
13662      = remote_region_ok_for_hw_watchpoint;
13663   remote_ops.to_insert_watchpoint = remote_insert_watchpoint;
13664   remote_ops.to_remove_watchpoint = remote_remove_watchpoint;
13665   remote_ops.to_kill = remote_kill;
13666   remote_ops.to_load = remote_load;
13667   remote_ops.to_mourn_inferior = remote_mourn;
13668   remote_ops.to_pass_signals = remote_pass_signals;
13669   remote_ops.to_set_syscall_catchpoint = remote_set_syscall_catchpoint;
13670   remote_ops.to_program_signals = remote_program_signals;
13671   remote_ops.to_thread_alive = remote_thread_alive;
13672   remote_ops.to_thread_name = remote_thread_name;
13673   remote_ops.to_update_thread_list = remote_update_thread_list;
13674   remote_ops.to_pid_to_str = remote_pid_to_str;
13675   remote_ops.to_extra_thread_info = remote_threads_extra_info;
13676   remote_ops.to_get_ada_task_ptid = remote_get_ada_task_ptid;
13677   remote_ops.to_stop = remote_stop;
13678   remote_ops.to_interrupt = remote_interrupt;
13679   remote_ops.to_pass_ctrlc = remote_pass_ctrlc;
13680   remote_ops.to_xfer_partial = remote_xfer_partial;
13681   remote_ops.to_get_memory_xfer_limit = remote_get_memory_xfer_limit;
13682   remote_ops.to_rcmd = remote_rcmd;
13683   remote_ops.to_pid_to_exec_file = remote_pid_to_exec_file;
13684   remote_ops.to_log_command = serial_log_command;
13685   remote_ops.to_get_thread_local_address = remote_get_thread_local_address;
13686   remote_ops.to_stratum = process_stratum;
13687   remote_ops.to_has_all_memory = default_child_has_all_memory;
13688   remote_ops.to_has_memory = default_child_has_memory;
13689   remote_ops.to_has_stack = default_child_has_stack;
13690   remote_ops.to_has_registers = default_child_has_registers;
13691   remote_ops.to_has_execution = default_child_has_execution;
13692   remote_ops.to_has_thread_control = tc_schedlock;    /* can lock scheduler */
13693   remote_ops.to_can_execute_reverse = remote_can_execute_reverse;
13694   remote_ops.to_magic = OPS_MAGIC;
13695   remote_ops.to_memory_map = remote_memory_map;
13696   remote_ops.to_flash_erase = remote_flash_erase;
13697   remote_ops.to_flash_done = remote_flash_done;
13698   remote_ops.to_read_description = remote_read_description;
13699   remote_ops.to_search_memory = remote_search_memory;
13700   remote_ops.to_can_async_p = remote_can_async_p;
13701   remote_ops.to_is_async_p = remote_is_async_p;
13702   remote_ops.to_async = remote_async;
13703   remote_ops.to_thread_events = remote_thread_events;
13704   remote_ops.to_can_do_single_step = remote_can_do_single_step;
13705   remote_ops.to_terminal_inferior = remote_terminal_inferior;
13706   remote_ops.to_terminal_ours = remote_terminal_ours;
13707   remote_ops.to_supports_non_stop = remote_supports_non_stop;
13708   remote_ops.to_supports_multi_process = remote_supports_multi_process;
13709   remote_ops.to_supports_disable_randomization
13710     = remote_supports_disable_randomization;
13711   remote_ops.to_filesystem_is_local = remote_filesystem_is_local;
13712   remote_ops.to_fileio_open = remote_hostio_open;
13713   remote_ops.to_fileio_pwrite = remote_hostio_pwrite;
13714   remote_ops.to_fileio_pread = remote_hostio_pread;
13715   remote_ops.to_fileio_fstat = remote_hostio_fstat;
13716   remote_ops.to_fileio_close = remote_hostio_close;
13717   remote_ops.to_fileio_unlink = remote_hostio_unlink;
13718   remote_ops.to_fileio_readlink = remote_hostio_readlink;
13719   remote_ops.to_supports_enable_disable_tracepoint = remote_supports_enable_disable_tracepoint;
13720   remote_ops.to_supports_string_tracing = remote_supports_string_tracing;
13721   remote_ops.to_supports_evaluation_of_breakpoint_conditions = remote_supports_cond_breakpoints;
13722   remote_ops.to_can_run_breakpoint_commands = remote_can_run_breakpoint_commands;
13723   remote_ops.to_trace_init = remote_trace_init;
13724   remote_ops.to_download_tracepoint = remote_download_tracepoint;
13725   remote_ops.to_can_download_tracepoint = remote_can_download_tracepoint;
13726   remote_ops.to_download_trace_state_variable
13727     = remote_download_trace_state_variable;
13728   remote_ops.to_enable_tracepoint = remote_enable_tracepoint;
13729   remote_ops.to_disable_tracepoint = remote_disable_tracepoint;
13730   remote_ops.to_trace_set_readonly_regions = remote_trace_set_readonly_regions;
13731   remote_ops.to_trace_start = remote_trace_start;
13732   remote_ops.to_get_trace_status = remote_get_trace_status;
13733   remote_ops.to_get_tracepoint_status = remote_get_tracepoint_status;
13734   remote_ops.to_trace_stop = remote_trace_stop;
13735   remote_ops.to_trace_find = remote_trace_find;
13736   remote_ops.to_get_trace_state_variable_value
13737     = remote_get_trace_state_variable_value;
13738   remote_ops.to_save_trace_data = remote_save_trace_data;
13739   remote_ops.to_upload_tracepoints = remote_upload_tracepoints;
13740   remote_ops.to_upload_trace_state_variables
13741     = remote_upload_trace_state_variables;
13742   remote_ops.to_get_raw_trace_data = remote_get_raw_trace_data;
13743   remote_ops.to_get_min_fast_tracepoint_insn_len = remote_get_min_fast_tracepoint_insn_len;
13744   remote_ops.to_set_disconnected_tracing = remote_set_disconnected_tracing;
13745   remote_ops.to_set_circular_trace_buffer = remote_set_circular_trace_buffer;
13746   remote_ops.to_set_trace_buffer_size = remote_set_trace_buffer_size;
13747   remote_ops.to_set_trace_notes = remote_set_trace_notes;
13748   remote_ops.to_core_of_thread = remote_core_of_thread;
13749   remote_ops.to_verify_memory = remote_verify_memory;
13750   remote_ops.to_get_tib_address = remote_get_tib_address;
13751   remote_ops.to_set_permissions = remote_set_permissions;
13752   remote_ops.to_static_tracepoint_marker_at
13753     = remote_static_tracepoint_marker_at;
13754   remote_ops.to_static_tracepoint_markers_by_strid
13755     = remote_static_tracepoint_markers_by_strid;
13756   remote_ops.to_traceframe_info = remote_traceframe_info;
13757   remote_ops.to_use_agent = remote_use_agent;
13758   remote_ops.to_can_use_agent = remote_can_use_agent;
13759   remote_ops.to_supports_btrace = remote_supports_btrace;
13760   remote_ops.to_enable_btrace = remote_enable_btrace;
13761   remote_ops.to_disable_btrace = remote_disable_btrace;
13762   remote_ops.to_teardown_btrace = remote_teardown_btrace;
13763   remote_ops.to_read_btrace = remote_read_btrace;
13764   remote_ops.to_btrace_conf = remote_btrace_conf;
13765   remote_ops.to_augmented_libraries_svr4_read =
13766     remote_augmented_libraries_svr4_read;
13767   remote_ops.to_follow_fork = remote_follow_fork;
13768   remote_ops.to_follow_exec = remote_follow_exec;
13769   remote_ops.to_insert_fork_catchpoint = remote_insert_fork_catchpoint;
13770   remote_ops.to_remove_fork_catchpoint = remote_remove_fork_catchpoint;
13771   remote_ops.to_insert_vfork_catchpoint = remote_insert_vfork_catchpoint;
13772   remote_ops.to_remove_vfork_catchpoint = remote_remove_vfork_catchpoint;
13773   remote_ops.to_insert_exec_catchpoint = remote_insert_exec_catchpoint;
13774   remote_ops.to_remove_exec_catchpoint = remote_remove_exec_catchpoint;
13775   remote_ops.to_execution_direction = remote_execution_direction;
13776   remote_ops.to_thread_handle_to_thread_info =
13777     remote_thread_handle_to_thread_info;
13778 }
13779
13780 /* Set up the extended remote vector by making a copy of the standard
13781    remote vector and adding to it.  */
13782
13783 static void
13784 init_extended_remote_ops (void)
13785 {
13786   extended_remote_ops = remote_ops;
13787
13788   extended_remote_ops.to_shortname = "extended-remote";
13789   extended_remote_ops.to_longname =
13790     "Extended remote serial target in gdb-specific protocol";
13791   extended_remote_ops.to_doc =
13792     "Use a remote computer via a serial line, using a gdb-specific protocol.\n\
13793 Specify the serial device it is connected to (e.g. /dev/ttya).";
13794   extended_remote_ops.to_open = extended_remote_open;
13795   extended_remote_ops.to_create_inferior = extended_remote_create_inferior;
13796   extended_remote_ops.to_detach = extended_remote_detach;
13797   extended_remote_ops.to_attach = extended_remote_attach;
13798   extended_remote_ops.to_post_attach = extended_remote_post_attach;
13799   extended_remote_ops.to_supports_disable_randomization
13800     = extended_remote_supports_disable_randomization;
13801 }
13802
13803 static int
13804 remote_can_async_p (struct target_ops *ops)
13805 {
13806   struct remote_state *rs = get_remote_state ();
13807
13808   /* We don't go async if the user has explicitly prevented it with the
13809      "maint set target-async" command.  */
13810   if (!target_async_permitted)
13811     return 0;
13812
13813   /* We're async whenever the serial device is.  */
13814   return serial_can_async_p (rs->remote_desc);
13815 }
13816
13817 static int
13818 remote_is_async_p (struct target_ops *ops)
13819 {
13820   struct remote_state *rs = get_remote_state ();
13821
13822   if (!target_async_permitted)
13823     /* We only enable async when the user specifically asks for it.  */
13824     return 0;
13825
13826   /* We're async whenever the serial device is.  */
13827   return serial_is_async_p (rs->remote_desc);
13828 }
13829
13830 /* Pass the SERIAL event on and up to the client.  One day this code
13831    will be able to delay notifying the client of an event until the
13832    point where an entire packet has been received.  */
13833
13834 static serial_event_ftype remote_async_serial_handler;
13835
13836 static void
13837 remote_async_serial_handler (struct serial *scb, void *context)
13838 {
13839   /* Don't propogate error information up to the client.  Instead let
13840      the client find out about the error by querying the target.  */
13841   inferior_event_handler (INF_REG_EVENT, NULL);
13842 }
13843
13844 static void
13845 remote_async_inferior_event_handler (gdb_client_data data)
13846 {
13847   inferior_event_handler (INF_REG_EVENT, NULL);
13848 }
13849
13850 static void
13851 remote_async (struct target_ops *ops, int enable)
13852 {
13853   struct remote_state *rs = get_remote_state ();
13854
13855   if (enable)
13856     {
13857       serial_async (rs->remote_desc, remote_async_serial_handler, rs);
13858
13859       /* If there are pending events in the stop reply queue tell the
13860          event loop to process them.  */
13861       if (!QUEUE_is_empty (stop_reply_p, stop_reply_queue))
13862         mark_async_event_handler (remote_async_inferior_event_token);
13863       /* For simplicity, below we clear the pending events token
13864          without remembering whether it is marked, so here we always
13865          mark it.  If there's actually no pending notification to
13866          process, this ends up being a no-op (other than a spurious
13867          event-loop wakeup).  */
13868       if (target_is_non_stop_p ())
13869         mark_async_event_handler (rs->notif_state->get_pending_events_token);
13870     }
13871   else
13872     {
13873       serial_async (rs->remote_desc, NULL, NULL);
13874       /* If the core is disabling async, it doesn't want to be
13875          disturbed with target events.  Clear all async event sources
13876          too.  */
13877       clear_async_event_handler (remote_async_inferior_event_token);
13878       if (target_is_non_stop_p ())
13879         clear_async_event_handler (rs->notif_state->get_pending_events_token);
13880     }
13881 }
13882
13883 /* Implementation of the to_thread_events method.  */
13884
13885 static void
13886 remote_thread_events (struct target_ops *ops, int enable)
13887 {
13888   struct remote_state *rs = get_remote_state ();
13889   size_t size = get_remote_packet_size ();
13890
13891   if (packet_support (PACKET_QThreadEvents) == PACKET_DISABLE)
13892     return;
13893
13894   xsnprintf (rs->buf, size, "QThreadEvents:%x", enable ? 1 : 0);
13895   putpkt (rs->buf);
13896   getpkt (&rs->buf, &rs->buf_size, 0);
13897
13898   switch (packet_ok (rs->buf,
13899                      &remote_protocol_packets[PACKET_QThreadEvents]))
13900     {
13901     case PACKET_OK:
13902       if (strcmp (rs->buf, "OK") != 0)
13903         error (_("Remote refused setting thread events: %s"), rs->buf);
13904       break;
13905     case PACKET_ERROR:
13906       warning (_("Remote failure reply: %s"), rs->buf);
13907       break;
13908     case PACKET_UNKNOWN:
13909       break;
13910     }
13911 }
13912
13913 static void
13914 set_remote_cmd (const char *args, int from_tty)
13915 {
13916   help_list (remote_set_cmdlist, "set remote ", all_commands, gdb_stdout);
13917 }
13918
13919 static void
13920 show_remote_cmd (const char *args, int from_tty)
13921 {
13922   /* We can't just use cmd_show_list here, because we want to skip
13923      the redundant "show remote Z-packet" and the legacy aliases.  */
13924   struct cmd_list_element *list = remote_show_cmdlist;
13925   struct ui_out *uiout = current_uiout;
13926
13927   ui_out_emit_tuple tuple_emitter (uiout, "showlist");
13928   for (; list != NULL; list = list->next)
13929     if (strcmp (list->name, "Z-packet") == 0)
13930       continue;
13931     else if (list->type == not_set_cmd)
13932       /* Alias commands are exactly like the original, except they
13933          don't have the normal type.  */
13934       continue;
13935     else
13936       {
13937         ui_out_emit_tuple option_emitter (uiout, "option");
13938
13939         uiout->field_string ("name", list->name);
13940         uiout->text (":  ");
13941         if (list->type == show_cmd)
13942           do_show_command (NULL, from_tty, list);
13943         else
13944           cmd_func (list, NULL, from_tty);
13945       }
13946 }
13947
13948
13949 /* Function to be called whenever a new objfile (shlib) is detected.  */
13950 static void
13951 remote_new_objfile (struct objfile *objfile)
13952 {
13953   struct remote_state *rs = get_remote_state ();
13954
13955   if (rs->remote_desc != 0)             /* Have a remote connection.  */
13956     remote_check_symbols ();
13957 }
13958
13959 /* Pull all the tracepoints defined on the target and create local
13960    data structures representing them.  We don't want to create real
13961    tracepoints yet, we don't want to mess up the user's existing
13962    collection.  */
13963   
13964 static int
13965 remote_upload_tracepoints (struct target_ops *self, struct uploaded_tp **utpp)
13966 {
13967   struct remote_state *rs = get_remote_state ();
13968   char *p;
13969
13970   /* Ask for a first packet of tracepoint definition.  */
13971   putpkt ("qTfP");
13972   getpkt (&rs->buf, &rs->buf_size, 0);
13973   p = rs->buf;
13974   while (*p && *p != 'l')
13975     {
13976       parse_tracepoint_definition (p, utpp);
13977       /* Ask for another packet of tracepoint definition.  */
13978       putpkt ("qTsP");
13979       getpkt (&rs->buf, &rs->buf_size, 0);
13980       p = rs->buf;
13981     }
13982   return 0;
13983 }
13984
13985 static int
13986 remote_upload_trace_state_variables (struct target_ops *self,
13987                                      struct uploaded_tsv **utsvp)
13988 {
13989   struct remote_state *rs = get_remote_state ();
13990   char *p;
13991
13992   /* Ask for a first packet of variable definition.  */
13993   putpkt ("qTfV");
13994   getpkt (&rs->buf, &rs->buf_size, 0);
13995   p = rs->buf;
13996   while (*p && *p != 'l')
13997     {
13998       parse_tsv_definition (p, utsvp);
13999       /* Ask for another packet of variable definition.  */
14000       putpkt ("qTsV");
14001       getpkt (&rs->buf, &rs->buf_size, 0);
14002       p = rs->buf;
14003     }
14004   return 0;
14005 }
14006
14007 /* The "set/show range-stepping" show hook.  */
14008
14009 static void
14010 show_range_stepping (struct ui_file *file, int from_tty,
14011                      struct cmd_list_element *c,
14012                      const char *value)
14013 {
14014   fprintf_filtered (file,
14015                     _("Debugger's willingness to use range stepping "
14016                       "is %s.\n"), value);
14017 }
14018
14019 /* The "set/show range-stepping" set hook.  */
14020
14021 static void
14022 set_range_stepping (char *ignore_args, int from_tty,
14023                     struct cmd_list_element *c)
14024 {
14025   struct remote_state *rs = get_remote_state ();
14026
14027   /* Whene enabling, check whether range stepping is actually
14028      supported by the target, and warn if not.  */
14029   if (use_range_stepping)
14030     {
14031       if (rs->remote_desc != NULL)
14032         {
14033           if (packet_support (PACKET_vCont) == PACKET_SUPPORT_UNKNOWN)
14034             remote_vcont_probe (rs);
14035
14036           if (packet_support (PACKET_vCont) == PACKET_ENABLE
14037               && rs->supports_vCont.r)
14038             return;
14039         }
14040
14041       warning (_("Range stepping is not supported by the current target"));
14042     }
14043 }
14044
14045 void
14046 _initialize_remote (void)
14047 {
14048   struct cmd_list_element *cmd;
14049   const char *cmd_name;
14050
14051   /* architecture specific data */
14052   remote_gdbarch_data_handle =
14053     gdbarch_data_register_post_init (init_remote_state);
14054   remote_g_packet_data_handle =
14055     gdbarch_data_register_pre_init (remote_g_packet_data_init);
14056
14057   remote_pspace_data
14058     = register_program_space_data_with_cleanup (NULL,
14059                                                 remote_pspace_data_cleanup);
14060
14061   /* Initialize the per-target state.  At the moment there is only one
14062      of these, not one per target.  Only one target is active at a
14063      time.  */
14064   remote_state = new_remote_state ();
14065
14066   init_remote_ops ();
14067   add_target (&remote_ops);
14068
14069   init_extended_remote_ops ();
14070   add_target (&extended_remote_ops);
14071
14072   /* Hook into new objfile notification.  */
14073   observer_attach_new_objfile (remote_new_objfile);
14074   /* We're no longer interested in notification events of an inferior
14075      when it exits.  */
14076   observer_attach_inferior_exit (discard_pending_stop_replies);
14077
14078 #if 0
14079   init_remote_threadtests ();
14080 #endif
14081
14082   stop_reply_queue = QUEUE_alloc (stop_reply_p, stop_reply_xfree);
14083   /* set/show remote ...  */
14084
14085   add_prefix_cmd ("remote", class_maintenance, set_remote_cmd, _("\
14086 Remote protocol specific variables\n\
14087 Configure various remote-protocol specific variables such as\n\
14088 the packets being used"),
14089                   &remote_set_cmdlist, "set remote ",
14090                   0 /* allow-unknown */, &setlist);
14091   add_prefix_cmd ("remote", class_maintenance, show_remote_cmd, _("\
14092 Remote protocol specific variables\n\
14093 Configure various remote-protocol specific variables such as\n\
14094 the packets being used"),
14095                   &remote_show_cmdlist, "show remote ",
14096                   0 /* allow-unknown */, &showlist);
14097
14098   add_cmd ("compare-sections", class_obscure, compare_sections_command, _("\
14099 Compare section data on target to the exec file.\n\
14100 Argument is a single section name (default: all loaded sections).\n\
14101 To compare only read-only loaded sections, specify the -r option."),
14102            &cmdlist);
14103
14104   add_cmd ("packet", class_maintenance, packet_command, _("\
14105 Send an arbitrary packet to a remote target.\n\
14106    maintenance packet TEXT\n\
14107 If GDB is talking to an inferior via the GDB serial protocol, then\n\
14108 this command sends the string TEXT to the inferior, and displays the\n\
14109 response packet.  GDB supplies the initial `$' character, and the\n\
14110 terminating `#' character and checksum."),
14111            &maintenancelist);
14112
14113   add_setshow_boolean_cmd ("remotebreak", no_class, &remote_break, _("\
14114 Set whether to send break if interrupted."), _("\
14115 Show whether to send break if interrupted."), _("\
14116 If set, a break, instead of a cntrl-c, is sent to the remote target."),
14117                            set_remotebreak, show_remotebreak,
14118                            &setlist, &showlist);
14119   cmd_name = "remotebreak";
14120   cmd = lookup_cmd (&cmd_name, setlist, "", -1, 1);
14121   deprecate_cmd (cmd, "set remote interrupt-sequence");
14122   cmd_name = "remotebreak"; /* needed because lookup_cmd updates the pointer */
14123   cmd = lookup_cmd (&cmd_name, showlist, "", -1, 1);
14124   deprecate_cmd (cmd, "show remote interrupt-sequence");
14125
14126   add_setshow_enum_cmd ("interrupt-sequence", class_support,
14127                         interrupt_sequence_modes, &interrupt_sequence_mode,
14128                         _("\
14129 Set interrupt sequence to remote target."), _("\
14130 Show interrupt sequence to remote target."), _("\
14131 Valid value is \"Ctrl-C\", \"BREAK\" or \"BREAK-g\". The default is \"Ctrl-C\"."),
14132                         NULL, show_interrupt_sequence,
14133                         &remote_set_cmdlist,
14134                         &remote_show_cmdlist);
14135
14136   add_setshow_boolean_cmd ("interrupt-on-connect", class_support,
14137                            &interrupt_on_connect, _("\
14138 Set whether interrupt-sequence is sent to remote target when gdb connects to."), _("            \
14139 Show whether interrupt-sequence is sent to remote target when gdb connects to."), _("           \
14140 If set, interrupt sequence is sent to remote target."),
14141                            NULL, NULL,
14142                            &remote_set_cmdlist, &remote_show_cmdlist);
14143
14144   /* Install commands for configuring memory read/write packets.  */
14145
14146   add_cmd ("remotewritesize", no_class, set_memory_write_packet_size, _("\
14147 Set the maximum number of bytes per memory write packet (deprecated)."),
14148            &setlist);
14149   add_cmd ("remotewritesize", no_class, show_memory_write_packet_size, _("\
14150 Show the maximum number of bytes per memory write packet (deprecated)."),
14151            &showlist);
14152   add_cmd ("memory-write-packet-size", no_class,
14153            set_memory_write_packet_size, _("\
14154 Set the maximum number of bytes per memory-write packet.\n\
14155 Specify the number of bytes in a packet or 0 (zero) for the\n\
14156 default packet size.  The actual limit is further reduced\n\
14157 dependent on the target.  Specify ``fixed'' to disable the\n\
14158 further restriction and ``limit'' to enable that restriction."),
14159            &remote_set_cmdlist);
14160   add_cmd ("memory-read-packet-size", no_class,
14161            set_memory_read_packet_size, _("\
14162 Set the maximum number of bytes per memory-read packet.\n\
14163 Specify the number of bytes in a packet or 0 (zero) for the\n\
14164 default packet size.  The actual limit is further reduced\n\
14165 dependent on the target.  Specify ``fixed'' to disable the\n\
14166 further restriction and ``limit'' to enable that restriction."),
14167            &remote_set_cmdlist);
14168   add_cmd ("memory-write-packet-size", no_class,
14169            show_memory_write_packet_size,
14170            _("Show the maximum number of bytes per memory-write packet."),
14171            &remote_show_cmdlist);
14172   add_cmd ("memory-read-packet-size", no_class,
14173            show_memory_read_packet_size,
14174            _("Show the maximum number of bytes per memory-read packet."),
14175            &remote_show_cmdlist);
14176
14177   add_setshow_zinteger_cmd ("hardware-watchpoint-limit", no_class,
14178                             &remote_hw_watchpoint_limit, _("\
14179 Set the maximum number of target hardware watchpoints."), _("\
14180 Show the maximum number of target hardware watchpoints."), _("\
14181 Specify a negative limit for unlimited."),
14182                             NULL, NULL, /* FIXME: i18n: The maximum
14183                                            number of target hardware
14184                                            watchpoints is %s.  */
14185                             &remote_set_cmdlist, &remote_show_cmdlist);
14186   add_setshow_zinteger_cmd ("hardware-watchpoint-length-limit", no_class,
14187                             &remote_hw_watchpoint_length_limit, _("\
14188 Set the maximum length (in bytes) of a target hardware watchpoint."), _("\
14189 Show the maximum length (in bytes) of a target hardware watchpoint."), _("\
14190 Specify a negative limit for unlimited."),
14191                             NULL, NULL, /* FIXME: i18n: The maximum
14192                                            length (in bytes) of a target
14193                                            hardware watchpoint is %s.  */
14194                             &remote_set_cmdlist, &remote_show_cmdlist);
14195   add_setshow_zinteger_cmd ("hardware-breakpoint-limit", no_class,
14196                             &remote_hw_breakpoint_limit, _("\
14197 Set the maximum number of target hardware breakpoints."), _("\
14198 Show the maximum number of target hardware breakpoints."), _("\
14199 Specify a negative limit for unlimited."),
14200                             NULL, NULL, /* FIXME: i18n: The maximum
14201                                            number of target hardware
14202                                            breakpoints is %s.  */
14203                             &remote_set_cmdlist, &remote_show_cmdlist);
14204
14205   add_setshow_zuinteger_cmd ("remoteaddresssize", class_obscure,
14206                              &remote_address_size, _("\
14207 Set the maximum size of the address (in bits) in a memory packet."), _("\
14208 Show the maximum size of the address (in bits) in a memory packet."), NULL,
14209                              NULL,
14210                              NULL, /* FIXME: i18n: */
14211                              &setlist, &showlist);
14212
14213   init_all_packet_configs ();
14214
14215   add_packet_config_cmd (&remote_protocol_packets[PACKET_X],
14216                          "X", "binary-download", 1);
14217
14218   add_packet_config_cmd (&remote_protocol_packets[PACKET_vCont],
14219                          "vCont", "verbose-resume", 0);
14220
14221   add_packet_config_cmd (&remote_protocol_packets[PACKET_QPassSignals],
14222                          "QPassSignals", "pass-signals", 0);
14223
14224   add_packet_config_cmd (&remote_protocol_packets[PACKET_QCatchSyscalls],
14225                          "QCatchSyscalls", "catch-syscalls", 0);
14226
14227   add_packet_config_cmd (&remote_protocol_packets[PACKET_QProgramSignals],
14228                          "QProgramSignals", "program-signals", 0);
14229
14230   add_packet_config_cmd (&remote_protocol_packets[PACKET_QSetWorkingDir],
14231                          "QSetWorkingDir", "set-working-dir", 0);
14232
14233   add_packet_config_cmd (&remote_protocol_packets[PACKET_QStartupWithShell],
14234                          "QStartupWithShell", "startup-with-shell", 0);
14235
14236   add_packet_config_cmd (&remote_protocol_packets
14237                          [PACKET_QEnvironmentHexEncoded],
14238                          "QEnvironmentHexEncoded", "environment-hex-encoded",
14239                          0);
14240
14241   add_packet_config_cmd (&remote_protocol_packets[PACKET_QEnvironmentReset],
14242                          "QEnvironmentReset", "environment-reset",
14243                          0);
14244
14245   add_packet_config_cmd (&remote_protocol_packets[PACKET_QEnvironmentUnset],
14246                          "QEnvironmentUnset", "environment-unset",
14247                          0);
14248
14249   add_packet_config_cmd (&remote_protocol_packets[PACKET_qSymbol],
14250                          "qSymbol", "symbol-lookup", 0);
14251
14252   add_packet_config_cmd (&remote_protocol_packets[PACKET_P],
14253                          "P", "set-register", 1);
14254
14255   add_packet_config_cmd (&remote_protocol_packets[PACKET_p],
14256                          "p", "fetch-register", 1);
14257
14258   add_packet_config_cmd (&remote_protocol_packets[PACKET_Z0],
14259                          "Z0", "software-breakpoint", 0);
14260
14261   add_packet_config_cmd (&remote_protocol_packets[PACKET_Z1],
14262                          "Z1", "hardware-breakpoint", 0);
14263
14264   add_packet_config_cmd (&remote_protocol_packets[PACKET_Z2],
14265                          "Z2", "write-watchpoint", 0);
14266
14267   add_packet_config_cmd (&remote_protocol_packets[PACKET_Z3],
14268                          "Z3", "read-watchpoint", 0);
14269
14270   add_packet_config_cmd (&remote_protocol_packets[PACKET_Z4],
14271                          "Z4", "access-watchpoint", 0);
14272
14273   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_auxv],
14274                          "qXfer:auxv:read", "read-aux-vector", 0);
14275
14276   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_exec_file],
14277                          "qXfer:exec-file:read", "pid-to-exec-file", 0);
14278
14279   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_features],
14280                          "qXfer:features:read", "target-features", 0);
14281
14282   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_libraries],
14283                          "qXfer:libraries:read", "library-info", 0);
14284
14285   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_libraries_svr4],
14286                          "qXfer:libraries-svr4:read", "library-info-svr4", 0);
14287
14288   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_memory_map],
14289                          "qXfer:memory-map:read", "memory-map", 0);
14290
14291   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_spu_read],
14292                          "qXfer:spu:read", "read-spu-object", 0);
14293
14294   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_spu_write],
14295                          "qXfer:spu:write", "write-spu-object", 0);
14296
14297   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_osdata],
14298                         "qXfer:osdata:read", "osdata", 0);
14299
14300   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_threads],
14301                          "qXfer:threads:read", "threads", 0);
14302
14303   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_siginfo_read],
14304                          "qXfer:siginfo:read", "read-siginfo-object", 0);
14305
14306   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_siginfo_write],
14307                          "qXfer:siginfo:write", "write-siginfo-object", 0);
14308
14309   add_packet_config_cmd
14310     (&remote_protocol_packets[PACKET_qXfer_traceframe_info],
14311      "qXfer:traceframe-info:read", "traceframe-info", 0);
14312
14313   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_uib],
14314                          "qXfer:uib:read", "unwind-info-block", 0);
14315
14316   add_packet_config_cmd (&remote_protocol_packets[PACKET_qGetTLSAddr],
14317                          "qGetTLSAddr", "get-thread-local-storage-address",
14318                          0);
14319
14320   add_packet_config_cmd (&remote_protocol_packets[PACKET_qGetTIBAddr],
14321                          "qGetTIBAddr", "get-thread-information-block-address",
14322                          0);
14323
14324   add_packet_config_cmd (&remote_protocol_packets[PACKET_bc],
14325                          "bc", "reverse-continue", 0);
14326
14327   add_packet_config_cmd (&remote_protocol_packets[PACKET_bs],
14328                          "bs", "reverse-step", 0);
14329
14330   add_packet_config_cmd (&remote_protocol_packets[PACKET_qSupported],
14331                          "qSupported", "supported-packets", 0);
14332
14333   add_packet_config_cmd (&remote_protocol_packets[PACKET_qSearch_memory],
14334                          "qSearch:memory", "search-memory", 0);
14335
14336   add_packet_config_cmd (&remote_protocol_packets[PACKET_qTStatus],
14337                          "qTStatus", "trace-status", 0);
14338
14339   add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_setfs],
14340                          "vFile:setfs", "hostio-setfs", 0);
14341
14342   add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_open],
14343                          "vFile:open", "hostio-open", 0);
14344
14345   add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_pread],
14346                          "vFile:pread", "hostio-pread", 0);
14347
14348   add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_pwrite],
14349                          "vFile:pwrite", "hostio-pwrite", 0);
14350
14351   add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_close],
14352                          "vFile:close", "hostio-close", 0);
14353
14354   add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_unlink],
14355                          "vFile:unlink", "hostio-unlink", 0);
14356
14357   add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_readlink],
14358                          "vFile:readlink", "hostio-readlink", 0);
14359
14360   add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_fstat],
14361                          "vFile:fstat", "hostio-fstat", 0);
14362
14363   add_packet_config_cmd (&remote_protocol_packets[PACKET_vAttach],
14364                          "vAttach", "attach", 0);
14365
14366   add_packet_config_cmd (&remote_protocol_packets[PACKET_vRun],
14367                          "vRun", "run", 0);
14368
14369   add_packet_config_cmd (&remote_protocol_packets[PACKET_QStartNoAckMode],
14370                          "QStartNoAckMode", "noack", 0);
14371
14372   add_packet_config_cmd (&remote_protocol_packets[PACKET_vKill],
14373                          "vKill", "kill", 0);
14374
14375   add_packet_config_cmd (&remote_protocol_packets[PACKET_qAttached],
14376                          "qAttached", "query-attached", 0);
14377
14378   add_packet_config_cmd (&remote_protocol_packets[PACKET_ConditionalTracepoints],
14379                          "ConditionalTracepoints",
14380                          "conditional-tracepoints", 0);
14381
14382   add_packet_config_cmd (&remote_protocol_packets[PACKET_ConditionalBreakpoints],
14383                          "ConditionalBreakpoints",
14384                          "conditional-breakpoints", 0);
14385
14386   add_packet_config_cmd (&remote_protocol_packets[PACKET_BreakpointCommands],
14387                          "BreakpointCommands",
14388                          "breakpoint-commands", 0);
14389
14390   add_packet_config_cmd (&remote_protocol_packets[PACKET_FastTracepoints],
14391                          "FastTracepoints", "fast-tracepoints", 0);
14392
14393   add_packet_config_cmd (&remote_protocol_packets[PACKET_TracepointSource],
14394                          "TracepointSource", "TracepointSource", 0);
14395
14396   add_packet_config_cmd (&remote_protocol_packets[PACKET_QAllow],
14397                          "QAllow", "allow", 0);
14398
14399   add_packet_config_cmd (&remote_protocol_packets[PACKET_StaticTracepoints],
14400                          "StaticTracepoints", "static-tracepoints", 0);
14401
14402   add_packet_config_cmd (&remote_protocol_packets[PACKET_InstallInTrace],
14403                          "InstallInTrace", "install-in-trace", 0);
14404
14405   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_statictrace_read],
14406                          "qXfer:statictrace:read", "read-sdata-object", 0);
14407
14408   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_fdpic],
14409                          "qXfer:fdpic:read", "read-fdpic-loadmap", 0);
14410
14411   add_packet_config_cmd (&remote_protocol_packets[PACKET_QDisableRandomization],
14412                          "QDisableRandomization", "disable-randomization", 0);
14413
14414   add_packet_config_cmd (&remote_protocol_packets[PACKET_QAgent],
14415                          "QAgent", "agent", 0);
14416
14417   add_packet_config_cmd (&remote_protocol_packets[PACKET_QTBuffer_size],
14418                          "QTBuffer:size", "trace-buffer-size", 0);
14419
14420   add_packet_config_cmd (&remote_protocol_packets[PACKET_Qbtrace_off],
14421        "Qbtrace:off", "disable-btrace", 0);
14422
14423   add_packet_config_cmd (&remote_protocol_packets[PACKET_Qbtrace_bts],
14424        "Qbtrace:bts", "enable-btrace-bts", 0);
14425
14426   add_packet_config_cmd (&remote_protocol_packets[PACKET_Qbtrace_pt],
14427        "Qbtrace:pt", "enable-btrace-pt", 0);
14428
14429   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_btrace],
14430        "qXfer:btrace", "read-btrace", 0);
14431
14432   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_btrace_conf],
14433        "qXfer:btrace-conf", "read-btrace-conf", 0);
14434
14435   add_packet_config_cmd (&remote_protocol_packets[PACKET_Qbtrace_conf_bts_size],
14436        "Qbtrace-conf:bts:size", "btrace-conf-bts-size", 0);
14437
14438   add_packet_config_cmd (&remote_protocol_packets[PACKET_multiprocess_feature],
14439        "multiprocess-feature", "multiprocess-feature", 0);
14440
14441   add_packet_config_cmd (&remote_protocol_packets[PACKET_swbreak_feature],
14442                          "swbreak-feature", "swbreak-feature", 0);
14443
14444   add_packet_config_cmd (&remote_protocol_packets[PACKET_hwbreak_feature],
14445                          "hwbreak-feature", "hwbreak-feature", 0);
14446
14447   add_packet_config_cmd (&remote_protocol_packets[PACKET_fork_event_feature],
14448                          "fork-event-feature", "fork-event-feature", 0);
14449
14450   add_packet_config_cmd (&remote_protocol_packets[PACKET_vfork_event_feature],
14451                          "vfork-event-feature", "vfork-event-feature", 0);
14452
14453   add_packet_config_cmd (&remote_protocol_packets[PACKET_Qbtrace_conf_pt_size],
14454        "Qbtrace-conf:pt:size", "btrace-conf-pt-size", 0);
14455
14456   add_packet_config_cmd (&remote_protocol_packets[PACKET_vContSupported],
14457                          "vContSupported", "verbose-resume-supported", 0);
14458
14459   add_packet_config_cmd (&remote_protocol_packets[PACKET_exec_event_feature],
14460                          "exec-event-feature", "exec-event-feature", 0);
14461
14462   add_packet_config_cmd (&remote_protocol_packets[PACKET_vCtrlC],
14463                          "vCtrlC", "ctrl-c", 0);
14464
14465   add_packet_config_cmd (&remote_protocol_packets[PACKET_QThreadEvents],
14466                          "QThreadEvents", "thread-events", 0);
14467
14468   add_packet_config_cmd (&remote_protocol_packets[PACKET_no_resumed],
14469                          "N stop reply", "no-resumed-stop-reply", 0);
14470
14471   /* Assert that we've registered "set remote foo-packet" commands
14472      for all packet configs.  */
14473   {
14474     int i;
14475
14476     for (i = 0; i < PACKET_MAX; i++)
14477       {
14478         /* Ideally all configs would have a command associated.  Some
14479            still don't though.  */
14480         int excepted;
14481
14482         switch (i)
14483           {
14484           case PACKET_QNonStop:
14485           case PACKET_EnableDisableTracepoints_feature:
14486           case PACKET_tracenz_feature:
14487           case PACKET_DisconnectedTracing_feature:
14488           case PACKET_augmented_libraries_svr4_read_feature:
14489           case PACKET_qCRC:
14490             /* Additions to this list need to be well justified:
14491                pre-existing packets are OK; new packets are not.  */
14492             excepted = 1;
14493             break;
14494           default:
14495             excepted = 0;
14496             break;
14497           }
14498
14499         /* This catches both forgetting to add a config command, and
14500            forgetting to remove a packet from the exception list.  */
14501         gdb_assert (excepted == (remote_protocol_packets[i].name == NULL));
14502       }
14503   }
14504
14505   /* Keep the old ``set remote Z-packet ...'' working.  Each individual
14506      Z sub-packet has its own set and show commands, but users may
14507      have sets to this variable in their .gdbinit files (or in their
14508      documentation).  */
14509   add_setshow_auto_boolean_cmd ("Z-packet", class_obscure,
14510                                 &remote_Z_packet_detect, _("\
14511 Set use of remote protocol `Z' packets"), _("\
14512 Show use of remote protocol `Z' packets "), _("\
14513 When set, GDB will attempt to use the remote breakpoint and watchpoint\n\
14514 packets."),
14515                                 set_remote_protocol_Z_packet_cmd,
14516                                 show_remote_protocol_Z_packet_cmd,
14517                                 /* FIXME: i18n: Use of remote protocol
14518                                    `Z' packets is %s.  */
14519                                 &remote_set_cmdlist, &remote_show_cmdlist);
14520
14521   add_prefix_cmd ("remote", class_files, remote_command, _("\
14522 Manipulate files on the remote system\n\
14523 Transfer files to and from the remote target system."),
14524                   &remote_cmdlist, "remote ",
14525                   0 /* allow-unknown */, &cmdlist);
14526
14527   add_cmd ("put", class_files, remote_put_command,
14528            _("Copy a local file to the remote system."),
14529            &remote_cmdlist);
14530
14531   add_cmd ("get", class_files, remote_get_command,
14532            _("Copy a remote file to the local system."),
14533            &remote_cmdlist);
14534
14535   add_cmd ("delete", class_files, remote_delete_command,
14536            _("Delete a remote file."),
14537            &remote_cmdlist);
14538
14539   add_setshow_string_noescape_cmd ("exec-file", class_files,
14540                                    &remote_exec_file_var, _("\
14541 Set the remote pathname for \"run\""), _("\
14542 Show the remote pathname for \"run\""), NULL,
14543                                    set_remote_exec_file,
14544                                    show_remote_exec_file,
14545                                    &remote_set_cmdlist,
14546                                    &remote_show_cmdlist);
14547
14548   add_setshow_boolean_cmd ("range-stepping", class_run,
14549                            &use_range_stepping, _("\
14550 Enable or disable range stepping."), _("\
14551 Show whether target-assisted range stepping is enabled."), _("\
14552 If on, and the target supports it, when stepping a source line, GDB\n\
14553 tells the target to step the corresponding range of addresses itself instead\n\
14554 of issuing multiple single-steps.  This speeds up source level\n\
14555 stepping.  If off, GDB always issues single-steps, even if range\n\
14556 stepping is supported by the target.  The default is on."),
14557                            set_range_stepping,
14558                            show_range_stepping,
14559                            &setlist,
14560                            &showlist);
14561
14562   /* Eventually initialize fileio.  See fileio.c */
14563   initialize_remote_fileio (remote_set_cmdlist, remote_show_cmdlist);
14564
14565   /* Take advantage of the fact that the TID field is not used, to tag
14566      special ptids with it set to != 0.  */
14567   magic_null_ptid = ptid_build (42000, -1, 1);
14568   not_sent_ptid = ptid_build (42000, -2, 1);
14569   any_thread_ptid = ptid_build (42000, 0, 1);
14570 }