target_set_syscall_catchpoint, use gdb::array_view and bool
[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)->priv.  */
443 struct remote_thread_info : public private_thread_info
444 {
445   std::string extra;
446   std::string name;
447   int core = -1;
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 = TARGET_STOPPED_BY_NO_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 = 0;
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 = 0;
469
470   /* The signal specified in the last target_resume call for this
471      thread.  */
472   gdb_signal last_resume_sig = GDB_SIGNAL_0;
473
474   /* Whether this thread was already vCont-resumed on the remote
475      side.  */
476   int vcont_resumed = 0;
477 };
478
479 /* This data could be associated with a target, but we do not always
480    have access to the current target when we need it, so for now it is
481    static.  This will be fine for as long as only one target is in use
482    at a time.  */
483 static struct remote_state *remote_state;
484
485 static struct remote_state *
486 get_remote_state_raw (void)
487 {
488   return remote_state;
489 }
490
491 /* Allocate a new struct remote_state with xmalloc, initialize it, and
492    return it.  */
493
494 static struct remote_state *
495 new_remote_state (void)
496 {
497   struct remote_state *result = XCNEW (struct remote_state);
498
499   /* The default buffer size is unimportant; it will be expanded
500      whenever a larger buffer is needed. */
501   result->buf_size = 400;
502   result->buf = (char *) xmalloc (result->buf_size);
503   result->remote_traceframe_number = -1;
504   result->last_sent_signal = GDB_SIGNAL_0;
505   result->last_resume_exec_dir = EXEC_FORWARD;
506   result->fs_pid = -1;
507
508   return result;
509 }
510
511 /* Description of the remote protocol for a given architecture.  */
512
513 struct packet_reg
514 {
515   long offset; /* Offset into G packet.  */
516   long regnum; /* GDB's internal register number.  */
517   LONGEST pnum; /* Remote protocol register number.  */
518   int in_g_packet; /* Always part of G packet.  */
519   /* long size in bytes;  == register_size (target_gdbarch (), regnum);
520      at present.  */
521   /* char *name; == gdbarch_register_name (target_gdbarch (), regnum);
522      at present.  */
523 };
524
525 struct remote_arch_state
526 {
527   /* Description of the remote protocol registers.  */
528   long sizeof_g_packet;
529
530   /* Description of the remote protocol registers indexed by REGNUM
531      (making an array gdbarch_num_regs in size).  */
532   struct packet_reg *regs;
533
534   /* This is the size (in chars) of the first response to the ``g''
535      packet.  It is used as a heuristic when determining the maximum
536      size of memory-read and memory-write packets.  A target will
537      typically only reserve a buffer large enough to hold the ``g''
538      packet.  The size does not include packet overhead (headers and
539      trailers).  */
540   long actual_register_packet_size;
541
542   /* This is the maximum size (in chars) of a non read/write packet.
543      It is also used as a cap on the size of read/write packets.  */
544   long remote_packet_size;
545 };
546
547 /* Utility: generate error from an incoming stub packet.  */
548 static void
549 trace_error (char *buf)
550 {
551   if (*buf++ != 'E')
552     return;                     /* not an error msg */
553   switch (*buf)
554     {
555     case '1':                   /* malformed packet error */
556       if (*++buf == '0')        /*   general case: */
557         error (_("remote.c: error in outgoing packet."));
558       else
559         error (_("remote.c: error in outgoing packet at field #%ld."),
560                strtol (buf, NULL, 16));
561     default:
562       error (_("Target returns error code '%s'."), buf);
563     }
564 }
565
566 /* Utility: wait for reply from stub, while accepting "O" packets.  */
567
568 static char *
569 remote_get_noisy_reply ()
570 {
571   struct remote_state *rs = get_remote_state ();
572
573   do                            /* Loop on reply from remote stub.  */
574     {
575       char *buf;
576
577       QUIT;                     /* Allow user to bail out with ^C.  */
578       getpkt (&rs->buf, &rs->buf_size, 0);
579       buf = rs->buf;
580       if (buf[0] == 'E')
581         trace_error (buf);
582       else if (startswith (buf, "qRelocInsn:"))
583         {
584           ULONGEST ul;
585           CORE_ADDR from, to, org_to;
586           const char *p, *pp;
587           int adjusted_size = 0;
588           int relocated = 0;
589
590           p = buf + strlen ("qRelocInsn:");
591           pp = unpack_varlen_hex (p, &ul);
592           if (*pp != ';')
593             error (_("invalid qRelocInsn packet: %s"), buf);
594           from = ul;
595
596           p = pp + 1;
597           unpack_varlen_hex (p, &ul);
598           to = ul;
599
600           org_to = to;
601
602           TRY
603             {
604               gdbarch_relocate_instruction (target_gdbarch (), &to, from);
605               relocated = 1;
606             }
607           CATCH (ex, RETURN_MASK_ALL)
608             {
609               if (ex.error == MEMORY_ERROR)
610                 {
611                   /* Propagate memory errors silently back to the
612                      target.  The stub may have limited the range of
613                      addresses we can write to, for example.  */
614                 }
615               else
616                 {
617                   /* Something unexpectedly bad happened.  Be verbose
618                      so we can tell what, and propagate the error back
619                      to the stub, so it doesn't get stuck waiting for
620                      a response.  */
621                   exception_fprintf (gdb_stderr, ex,
622                                      _("warning: relocating instruction: "));
623                 }
624               putpkt ("E01");
625             }
626           END_CATCH
627
628           if (relocated)
629             {
630               adjusted_size = to - org_to;
631
632               xsnprintf (buf, rs->buf_size, "qRelocInsn:%x", adjusted_size);
633               putpkt (buf);
634             }
635         }
636       else if (buf[0] == 'O' && buf[1] != 'K')
637         remote_console_output (buf + 1);        /* 'O' message from stub */
638       else
639         return buf;             /* Here's the actual reply.  */
640     }
641   while (1);
642 }
643
644 /* Handle for retreving the remote protocol data from gdbarch.  */
645 static struct gdbarch_data *remote_gdbarch_data_handle;
646
647 static struct remote_arch_state *
648 get_remote_arch_state (struct gdbarch *gdbarch)
649 {
650   gdb_assert (gdbarch != NULL);
651   return ((struct remote_arch_state *)
652           gdbarch_data (gdbarch, remote_gdbarch_data_handle));
653 }
654
655 /* Fetch the global remote target state.  */
656
657 static struct remote_state *
658 get_remote_state (void)
659 {
660   /* Make sure that the remote architecture state has been
661      initialized, because doing so might reallocate rs->buf.  Any
662      function which calls getpkt also needs to be mindful of changes
663      to rs->buf, but this call limits the number of places which run
664      into trouble.  */
665   get_remote_arch_state (target_gdbarch ());
666
667   return get_remote_state_raw ();
668 }
669
670 /* Cleanup routine for the remote module's pspace data.  */
671
672 static void
673 remote_pspace_data_cleanup (struct program_space *pspace, void *arg)
674 {
675   char *remote_exec_file = (char *) arg;
676
677   xfree (remote_exec_file);
678 }
679
680 /* Fetch the remote exec-file from the current program space.  */
681
682 static const char *
683 get_remote_exec_file (void)
684 {
685   char *remote_exec_file;
686
687   remote_exec_file
688     = (char *) program_space_data (current_program_space,
689                                    remote_pspace_data);
690   if (remote_exec_file == NULL)
691     return "";
692
693   return remote_exec_file;
694 }
695
696 /* Set the remote exec file for PSPACE.  */
697
698 static void
699 set_pspace_remote_exec_file (struct program_space *pspace,
700                         char *remote_exec_file)
701 {
702   char *old_file = (char *) program_space_data (pspace, remote_pspace_data);
703
704   xfree (old_file);
705   set_program_space_data (pspace, remote_pspace_data,
706                           xstrdup (remote_exec_file));
707 }
708
709 /* The "set/show remote exec-file" set command hook.  */
710
711 static void
712 set_remote_exec_file (const char *ignored, int from_tty,
713                       struct cmd_list_element *c)
714 {
715   gdb_assert (remote_exec_file_var != NULL);
716   set_pspace_remote_exec_file (current_program_space, remote_exec_file_var);
717 }
718
719 /* The "set/show remote exec-file" show command hook.  */
720
721 static void
722 show_remote_exec_file (struct ui_file *file, int from_tty,
723                        struct cmd_list_element *cmd, const char *value)
724 {
725   fprintf_filtered (file, "%s\n", remote_exec_file_var);
726 }
727
728 static int
729 compare_pnums (const void *lhs_, const void *rhs_)
730 {
731   const struct packet_reg * const *lhs
732     = (const struct packet_reg * const *) lhs_;
733   const struct packet_reg * const *rhs
734     = (const struct packet_reg * const *) rhs_;
735
736   if ((*lhs)->pnum < (*rhs)->pnum)
737     return -1;
738   else if ((*lhs)->pnum == (*rhs)->pnum)
739     return 0;
740   else
741     return 1;
742 }
743
744 static int
745 map_regcache_remote_table (struct gdbarch *gdbarch, struct packet_reg *regs)
746 {
747   int regnum, num_remote_regs, offset;
748   struct packet_reg **remote_regs;
749
750   for (regnum = 0; regnum < gdbarch_num_regs (gdbarch); regnum++)
751     {
752       struct packet_reg *r = &regs[regnum];
753
754       if (register_size (gdbarch, regnum) == 0)
755         /* Do not try to fetch zero-sized (placeholder) registers.  */
756         r->pnum = -1;
757       else
758         r->pnum = gdbarch_remote_register_number (gdbarch, regnum);
759
760       r->regnum = regnum;
761     }
762
763   /* Define the g/G packet format as the contents of each register
764      with a remote protocol number, in order of ascending protocol
765      number.  */
766
767   remote_regs = XALLOCAVEC (struct packet_reg *, gdbarch_num_regs (gdbarch));
768   for (num_remote_regs = 0, regnum = 0;
769        regnum < gdbarch_num_regs (gdbarch);
770        regnum++)
771     if (regs[regnum].pnum != -1)
772       remote_regs[num_remote_regs++] = &regs[regnum];
773
774   qsort (remote_regs, num_remote_regs, sizeof (struct packet_reg *),
775          compare_pnums);
776
777   for (regnum = 0, offset = 0; regnum < num_remote_regs; regnum++)
778     {
779       remote_regs[regnum]->in_g_packet = 1;
780       remote_regs[regnum]->offset = offset;
781       offset += register_size (gdbarch, remote_regs[regnum]->regnum);
782     }
783
784   return offset;
785 }
786
787 /* Given the architecture described by GDBARCH, return the remote
788    protocol register's number and the register's offset in the g/G
789    packets of GDB register REGNUM, in PNUM and POFFSET respectively.
790    If the target does not have a mapping for REGNUM, return false,
791    otherwise, return true.  */
792
793 int
794 remote_register_number_and_offset (struct gdbarch *gdbarch, int regnum,
795                                    int *pnum, int *poffset)
796 {
797   gdb_assert (regnum < gdbarch_num_regs (gdbarch));
798
799   std::vector<packet_reg> regs (gdbarch_num_regs (gdbarch));
800
801   map_regcache_remote_table (gdbarch, regs.data ());
802
803   *pnum = regs[regnum].pnum;
804   *poffset = regs[regnum].offset;
805
806   return *pnum != -1;
807 }
808
809 static void *
810 init_remote_state (struct gdbarch *gdbarch)
811 {
812   struct remote_state *rs = get_remote_state_raw ();
813   struct remote_arch_state *rsa;
814
815   rsa = GDBARCH_OBSTACK_ZALLOC (gdbarch, struct remote_arch_state);
816
817   /* Use the architecture to build a regnum<->pnum table, which will be
818      1:1 unless a feature set specifies otherwise.  */
819   rsa->regs = GDBARCH_OBSTACK_CALLOC (gdbarch,
820                                       gdbarch_num_regs (gdbarch),
821                                       struct packet_reg);
822
823   /* Record the maximum possible size of the g packet - it may turn out
824      to be smaller.  */
825   rsa->sizeof_g_packet = map_regcache_remote_table (gdbarch, rsa->regs);
826
827   /* Default maximum number of characters in a packet body.  Many
828      remote stubs have a hardwired buffer size of 400 bytes
829      (c.f. BUFMAX in m68k-stub.c and i386-stub.c).  BUFMAX-1 is used
830      as the maximum packet-size to ensure that the packet and an extra
831      NUL character can always fit in the buffer.  This stops GDB
832      trashing stubs that try to squeeze an extra NUL into what is
833      already a full buffer (As of 1999-12-04 that was most stubs).  */
834   rsa->remote_packet_size = 400 - 1;
835
836   /* This one is filled in when a ``g'' packet is received.  */
837   rsa->actual_register_packet_size = 0;
838
839   /* Should rsa->sizeof_g_packet needs more space than the
840      default, adjust the size accordingly.  Remember that each byte is
841      encoded as two characters.  32 is the overhead for the packet
842      header / footer.  NOTE: cagney/1999-10-26: I suspect that 8
843      (``$NN:G...#NN'') is a better guess, the below has been padded a
844      little.  */
845   if (rsa->sizeof_g_packet > ((rsa->remote_packet_size - 32) / 2))
846     rsa->remote_packet_size = (rsa->sizeof_g_packet * 2 + 32);
847
848   /* Make sure that the packet buffer is plenty big enough for
849      this architecture.  */
850   if (rs->buf_size < rsa->remote_packet_size)
851     {
852       rs->buf_size = 2 * rsa->remote_packet_size;
853       rs->buf = (char *) xrealloc (rs->buf, rs->buf_size);
854     }
855
856   return rsa;
857 }
858
859 /* Return the current allowed size of a remote packet.  This is
860    inferred from the current architecture, and should be used to
861    limit the length of outgoing packets.  */
862 static long
863 get_remote_packet_size (void)
864 {
865   struct remote_state *rs = get_remote_state ();
866   remote_arch_state *rsa = get_remote_arch_state (target_gdbarch ());
867
868   if (rs->explicit_packet_size)
869     return rs->explicit_packet_size;
870
871   return rsa->remote_packet_size;
872 }
873
874 static struct packet_reg *
875 packet_reg_from_regnum (struct gdbarch *gdbarch, struct remote_arch_state *rsa,
876                         long regnum)
877 {
878   if (regnum < 0 && regnum >= gdbarch_num_regs (gdbarch))
879     return NULL;
880   else
881     {
882       struct packet_reg *r = &rsa->regs[regnum];
883
884       gdb_assert (r->regnum == regnum);
885       return r;
886     }
887 }
888
889 static struct packet_reg *
890 packet_reg_from_pnum (struct gdbarch *gdbarch, struct remote_arch_state *rsa,
891                       LONGEST pnum)
892 {
893   int i;
894
895   for (i = 0; i < gdbarch_num_regs (gdbarch); i++)
896     {
897       struct packet_reg *r = &rsa->regs[i];
898
899       if (r->pnum == pnum)
900         return r;
901     }
902   return NULL;
903 }
904
905 static struct target_ops remote_ops;
906
907 static struct target_ops extended_remote_ops;
908
909 /* FIXME: cagney/1999-09-23: Even though getpkt was called with
910    ``forever'' still use the normal timeout mechanism.  This is
911    currently used by the ASYNC code to guarentee that target reads
912    during the initial connect always time-out.  Once getpkt has been
913    modified to return a timeout indication and, in turn
914    remote_wait()/wait_for_inferior() have gained a timeout parameter
915    this can go away.  */
916 static int wait_forever_enabled_p = 1;
917
918 /* Allow the user to specify what sequence to send to the remote
919    when he requests a program interruption: Although ^C is usually
920    what remote systems expect (this is the default, here), it is
921    sometimes preferable to send a break.  On other systems such
922    as the Linux kernel, a break followed by g, which is Magic SysRq g
923    is required in order to interrupt the execution.  */
924 const char interrupt_sequence_control_c[] = "Ctrl-C";
925 const char interrupt_sequence_break[] = "BREAK";
926 const char interrupt_sequence_break_g[] = "BREAK-g";
927 static const char *const interrupt_sequence_modes[] =
928   {
929     interrupt_sequence_control_c,
930     interrupt_sequence_break,
931     interrupt_sequence_break_g,
932     NULL
933   };
934 static const char *interrupt_sequence_mode = interrupt_sequence_control_c;
935
936 static void
937 show_interrupt_sequence (struct ui_file *file, int from_tty,
938                          struct cmd_list_element *c,
939                          const char *value)
940 {
941   if (interrupt_sequence_mode == interrupt_sequence_control_c)
942     fprintf_filtered (file,
943                       _("Send the ASCII ETX character (Ctrl-c) "
944                         "to the remote target to interrupt the "
945                         "execution of the program.\n"));
946   else if (interrupt_sequence_mode == interrupt_sequence_break)
947     fprintf_filtered (file,
948                       _("send a break signal to the remote target "
949                         "to interrupt the execution of the program.\n"));
950   else if (interrupt_sequence_mode == interrupt_sequence_break_g)
951     fprintf_filtered (file,
952                       _("Send a break signal and 'g' a.k.a. Magic SysRq g to "
953                         "the remote target to interrupt the execution "
954                         "of Linux kernel.\n"));
955   else
956     internal_error (__FILE__, __LINE__,
957                     _("Invalid value for interrupt_sequence_mode: %s."),
958                     interrupt_sequence_mode);
959 }
960
961 /* This boolean variable specifies whether interrupt_sequence is sent
962    to the remote target when gdb connects to it.
963    This is mostly needed when you debug the Linux kernel: The Linux kernel
964    expects BREAK g which is Magic SysRq g for connecting gdb.  */
965 static int interrupt_on_connect = 0;
966
967 /* This variable is used to implement the "set/show remotebreak" commands.
968    Since these commands are now deprecated in favor of "set/show remote
969    interrupt-sequence", it no longer has any effect on the code.  */
970 static int remote_break;
971
972 static void
973 set_remotebreak (const char *args, int from_tty, struct cmd_list_element *c)
974 {
975   if (remote_break)
976     interrupt_sequence_mode = interrupt_sequence_break;
977   else
978     interrupt_sequence_mode = interrupt_sequence_control_c;
979 }
980
981 static void
982 show_remotebreak (struct ui_file *file, int from_tty,
983                   struct cmd_list_element *c,
984                   const char *value)
985 {
986 }
987
988 /* This variable sets the number of bits in an address that are to be
989    sent in a memory ("M" or "m") packet.  Normally, after stripping
990    leading zeros, the entire address would be sent.  This variable
991    restricts the address to REMOTE_ADDRESS_SIZE bits.  HISTORY: The
992    initial implementation of remote.c restricted the address sent in
993    memory packets to ``host::sizeof long'' bytes - (typically 32
994    bits).  Consequently, for 64 bit targets, the upper 32 bits of an
995    address was never sent.  Since fixing this bug may cause a break in
996    some remote targets this variable is principly provided to
997    facilitate backward compatibility.  */
998
999 static unsigned int remote_address_size;
1000
1001 \f
1002 /* User configurable variables for the number of characters in a
1003    memory read/write packet.  MIN (rsa->remote_packet_size,
1004    rsa->sizeof_g_packet) is the default.  Some targets need smaller
1005    values (fifo overruns, et.al.) and some users need larger values
1006    (speed up transfers).  The variables ``preferred_*'' (the user
1007    request), ``current_*'' (what was actually set) and ``forced_*''
1008    (Positive - a soft limit, negative - a hard limit).  */
1009
1010 struct memory_packet_config
1011 {
1012   const char *name;
1013   long size;
1014   int fixed_p;
1015 };
1016
1017 /* The default max memory-write-packet-size.  The 16k is historical.
1018    (It came from older GDB's using alloca for buffers and the
1019    knowledge (folklore?) that some hosts don't cope very well with
1020    large alloca calls.)  */
1021 #define DEFAULT_MAX_MEMORY_PACKET_SIZE 16384
1022
1023 /* The minimum remote packet size for memory transfers.  Ensures we
1024    can write at least one byte.  */
1025 #define MIN_MEMORY_PACKET_SIZE 20
1026
1027 /* Compute the current size of a read/write packet.  Since this makes
1028    use of ``actual_register_packet_size'' the computation is dynamic.  */
1029
1030 static long
1031 get_memory_packet_size (struct memory_packet_config *config)
1032 {
1033   struct remote_state *rs = get_remote_state ();
1034   remote_arch_state *rsa = get_remote_arch_state (target_gdbarch ());
1035
1036   long what_they_get;
1037   if (config->fixed_p)
1038     {
1039       if (config->size <= 0)
1040         what_they_get = DEFAULT_MAX_MEMORY_PACKET_SIZE;
1041       else
1042         what_they_get = config->size;
1043     }
1044   else
1045     {
1046       what_they_get = get_remote_packet_size ();
1047       /* Limit the packet to the size specified by the user.  */
1048       if (config->size > 0
1049           && what_they_get > config->size)
1050         what_they_get = config->size;
1051
1052       /* Limit it to the size of the targets ``g'' response unless we have
1053          permission from the stub to use a larger packet size.  */
1054       if (rs->explicit_packet_size == 0
1055           && rsa->actual_register_packet_size > 0
1056           && what_they_get > rsa->actual_register_packet_size)
1057         what_they_get = rsa->actual_register_packet_size;
1058     }
1059   if (what_they_get < MIN_MEMORY_PACKET_SIZE)
1060     what_they_get = MIN_MEMORY_PACKET_SIZE;
1061
1062   /* Make sure there is room in the global buffer for this packet
1063      (including its trailing NUL byte).  */
1064   if (rs->buf_size < what_they_get + 1)
1065     {
1066       rs->buf_size = 2 * what_they_get;
1067       rs->buf = (char *) xrealloc (rs->buf, 2 * what_they_get);
1068     }
1069
1070   return what_they_get;
1071 }
1072
1073 /* Update the size of a read/write packet.  If they user wants
1074    something really big then do a sanity check.  */
1075
1076 static void
1077 set_memory_packet_size (const char *args, struct memory_packet_config *config)
1078 {
1079   int fixed_p = config->fixed_p;
1080   long size = config->size;
1081
1082   if (args == NULL)
1083     error (_("Argument required (integer, `fixed' or `limited')."));
1084   else if (strcmp (args, "hard") == 0
1085       || strcmp (args, "fixed") == 0)
1086     fixed_p = 1;
1087   else if (strcmp (args, "soft") == 0
1088            || strcmp (args, "limit") == 0)
1089     fixed_p = 0;
1090   else
1091     {
1092       char *end;
1093
1094       size = strtoul (args, &end, 0);
1095       if (args == end)
1096         error (_("Invalid %s (bad syntax)."), config->name);
1097
1098       /* Instead of explicitly capping the size of a packet to or
1099          disallowing it, the user is allowed to set the size to
1100          something arbitrarily large.  */
1101     }
1102
1103   /* So that the query shows the correct value.  */
1104   if (size <= 0)
1105     size = DEFAULT_MAX_MEMORY_PACKET_SIZE;
1106
1107   /* Extra checks?  */
1108   if (fixed_p && !config->fixed_p)
1109     {
1110       if (! query (_("The target may not be able to correctly handle a %s\n"
1111                    "of %ld bytes. Change the packet size? "),
1112                    config->name, size))
1113         error (_("Packet size not changed."));
1114     }
1115   /* Update the config.  */
1116   config->fixed_p = fixed_p;
1117   config->size = size;
1118 }
1119
1120 static void
1121 show_memory_packet_size (struct memory_packet_config *config)
1122 {
1123   printf_filtered (_("The %s is %ld. "), config->name, config->size);
1124   if (config->fixed_p)
1125     printf_filtered (_("Packets are fixed at %ld bytes.\n"),
1126                      get_memory_packet_size (config));
1127   else
1128     printf_filtered (_("Packets are limited to %ld bytes.\n"),
1129                      get_memory_packet_size (config));
1130 }
1131
1132 static struct memory_packet_config memory_write_packet_config =
1133 {
1134   "memory-write-packet-size",
1135 };
1136
1137 static void
1138 set_memory_write_packet_size (const char *args, int from_tty)
1139 {
1140   set_memory_packet_size (args, &memory_write_packet_config);
1141 }
1142
1143 static void
1144 show_memory_write_packet_size (const char *args, int from_tty)
1145 {
1146   show_memory_packet_size (&memory_write_packet_config);
1147 }
1148
1149 static long
1150 get_memory_write_packet_size (void)
1151 {
1152   return get_memory_packet_size (&memory_write_packet_config);
1153 }
1154
1155 static struct memory_packet_config memory_read_packet_config =
1156 {
1157   "memory-read-packet-size",
1158 };
1159
1160 static void
1161 set_memory_read_packet_size (const char *args, int from_tty)
1162 {
1163   set_memory_packet_size (args, &memory_read_packet_config);
1164 }
1165
1166 static void
1167 show_memory_read_packet_size (const char *args, int from_tty)
1168 {
1169   show_memory_packet_size (&memory_read_packet_config);
1170 }
1171
1172 static long
1173 get_memory_read_packet_size (void)
1174 {
1175   long size = get_memory_packet_size (&memory_read_packet_config);
1176
1177   /* FIXME: cagney/1999-11-07: Functions like getpkt() need to get an
1178      extra buffer size argument before the memory read size can be
1179      increased beyond this.  */
1180   if (size > get_remote_packet_size ())
1181     size = get_remote_packet_size ();
1182   return size;
1183 }
1184
1185 \f
1186 /* Generic configuration support for packets the stub optionally
1187    supports.  Allows the user to specify the use of the packet as well
1188    as allowing GDB to auto-detect support in the remote stub.  */
1189
1190 enum packet_support
1191   {
1192     PACKET_SUPPORT_UNKNOWN = 0,
1193     PACKET_ENABLE,
1194     PACKET_DISABLE
1195   };
1196
1197 struct packet_config
1198   {
1199     const char *name;
1200     const char *title;
1201
1202     /* If auto, GDB auto-detects support for this packet or feature,
1203        either through qSupported, or by trying the packet and looking
1204        at the response.  If true, GDB assumes the target supports this
1205        packet.  If false, the packet is disabled.  Configs that don't
1206        have an associated command always have this set to auto.  */
1207     enum auto_boolean detect;
1208
1209     /* Does the target support this packet?  */
1210     enum packet_support support;
1211   };
1212
1213 /* Analyze a packet's return value and update the packet config
1214    accordingly.  */
1215
1216 enum packet_result
1217 {
1218   PACKET_ERROR,
1219   PACKET_OK,
1220   PACKET_UNKNOWN
1221 };
1222
1223 static enum packet_support packet_config_support (struct packet_config *config);
1224 static enum packet_support packet_support (int packet);
1225
1226 static void
1227 show_packet_config_cmd (struct packet_config *config)
1228 {
1229   const char *support = "internal-error";
1230
1231   switch (packet_config_support (config))
1232     {
1233     case PACKET_ENABLE:
1234       support = "enabled";
1235       break;
1236     case PACKET_DISABLE:
1237       support = "disabled";
1238       break;
1239     case PACKET_SUPPORT_UNKNOWN:
1240       support = "unknown";
1241       break;
1242     }
1243   switch (config->detect)
1244     {
1245     case AUTO_BOOLEAN_AUTO:
1246       printf_filtered (_("Support for the `%s' packet "
1247                          "is auto-detected, currently %s.\n"),
1248                        config->name, support);
1249       break;
1250     case AUTO_BOOLEAN_TRUE:
1251     case AUTO_BOOLEAN_FALSE:
1252       printf_filtered (_("Support for the `%s' packet is currently %s.\n"),
1253                        config->name, support);
1254       break;
1255     }
1256 }
1257
1258 static void
1259 add_packet_config_cmd (struct packet_config *config, const char *name,
1260                        const char *title, int legacy)
1261 {
1262   char *set_doc;
1263   char *show_doc;
1264   char *cmd_name;
1265
1266   config->name = name;
1267   config->title = title;
1268   set_doc = xstrprintf ("Set use of remote protocol `%s' (%s) packet",
1269                         name, title);
1270   show_doc = xstrprintf ("Show current use of remote "
1271                          "protocol `%s' (%s) packet",
1272                          name, title);
1273   /* set/show TITLE-packet {auto,on,off} */
1274   cmd_name = xstrprintf ("%s-packet", title);
1275   add_setshow_auto_boolean_cmd (cmd_name, class_obscure,
1276                                 &config->detect, set_doc,
1277                                 show_doc, NULL, /* help_doc */
1278                                 NULL,
1279                                 show_remote_protocol_packet_cmd,
1280                                 &remote_set_cmdlist, &remote_show_cmdlist);
1281   /* The command code copies the documentation strings.  */
1282   xfree (set_doc);
1283   xfree (show_doc);
1284   /* set/show remote NAME-packet {auto,on,off} -- legacy.  */
1285   if (legacy)
1286     {
1287       char *legacy_name;
1288
1289       legacy_name = xstrprintf ("%s-packet", name);
1290       add_alias_cmd (legacy_name, cmd_name, class_obscure, 0,
1291                      &remote_set_cmdlist);
1292       add_alias_cmd (legacy_name, cmd_name, class_obscure, 0,
1293                      &remote_show_cmdlist);
1294     }
1295 }
1296
1297 static enum packet_result
1298 packet_check_result (const char *buf)
1299 {
1300   if (buf[0] != '\0')
1301     {
1302       /* The stub recognized the packet request.  Check that the
1303          operation succeeded.  */
1304       if (buf[0] == 'E'
1305           && isxdigit (buf[1]) && isxdigit (buf[2])
1306           && buf[3] == '\0')
1307         /* "Enn"  - definitly an error.  */
1308         return PACKET_ERROR;
1309
1310       /* Always treat "E." as an error.  This will be used for
1311          more verbose error messages, such as E.memtypes.  */
1312       if (buf[0] == 'E' && buf[1] == '.')
1313         return PACKET_ERROR;
1314
1315       /* The packet may or may not be OK.  Just assume it is.  */
1316       return PACKET_OK;
1317     }
1318   else
1319     /* The stub does not support the packet.  */
1320     return PACKET_UNKNOWN;
1321 }
1322
1323 static enum packet_result
1324 packet_ok (const char *buf, struct packet_config *config)
1325 {
1326   enum packet_result result;
1327
1328   if (config->detect != AUTO_BOOLEAN_TRUE
1329       && config->support == PACKET_DISABLE)
1330     internal_error (__FILE__, __LINE__,
1331                     _("packet_ok: attempt to use a disabled packet"));
1332
1333   result = packet_check_result (buf);
1334   switch (result)
1335     {
1336     case PACKET_OK:
1337     case PACKET_ERROR:
1338       /* The stub recognized the packet request.  */
1339       if (config->support == PACKET_SUPPORT_UNKNOWN)
1340         {
1341           if (remote_debug)
1342             fprintf_unfiltered (gdb_stdlog,
1343                                 "Packet %s (%s) is supported\n",
1344                                 config->name, config->title);
1345           config->support = PACKET_ENABLE;
1346         }
1347       break;
1348     case PACKET_UNKNOWN:
1349       /* The stub does not support the packet.  */
1350       if (config->detect == AUTO_BOOLEAN_AUTO
1351           && config->support == PACKET_ENABLE)
1352         {
1353           /* If the stub previously indicated that the packet was
1354              supported then there is a protocol error.  */
1355           error (_("Protocol error: %s (%s) conflicting enabled responses."),
1356                  config->name, config->title);
1357         }
1358       else if (config->detect == AUTO_BOOLEAN_TRUE)
1359         {
1360           /* The user set it wrong.  */
1361           error (_("Enabled packet %s (%s) not recognized by stub"),
1362                  config->name, config->title);
1363         }
1364
1365       if (remote_debug)
1366         fprintf_unfiltered (gdb_stdlog,
1367                             "Packet %s (%s) is NOT supported\n",
1368                             config->name, config->title);
1369       config->support = PACKET_DISABLE;
1370       break;
1371     }
1372
1373   return result;
1374 }
1375
1376 enum {
1377   PACKET_vCont = 0,
1378   PACKET_X,
1379   PACKET_qSymbol,
1380   PACKET_P,
1381   PACKET_p,
1382   PACKET_Z0,
1383   PACKET_Z1,
1384   PACKET_Z2,
1385   PACKET_Z3,
1386   PACKET_Z4,
1387   PACKET_vFile_setfs,
1388   PACKET_vFile_open,
1389   PACKET_vFile_pread,
1390   PACKET_vFile_pwrite,
1391   PACKET_vFile_close,
1392   PACKET_vFile_unlink,
1393   PACKET_vFile_readlink,
1394   PACKET_vFile_fstat,
1395   PACKET_qXfer_auxv,
1396   PACKET_qXfer_features,
1397   PACKET_qXfer_exec_file,
1398   PACKET_qXfer_libraries,
1399   PACKET_qXfer_libraries_svr4,
1400   PACKET_qXfer_memory_map,
1401   PACKET_qXfer_spu_read,
1402   PACKET_qXfer_spu_write,
1403   PACKET_qXfer_osdata,
1404   PACKET_qXfer_threads,
1405   PACKET_qXfer_statictrace_read,
1406   PACKET_qXfer_traceframe_info,
1407   PACKET_qXfer_uib,
1408   PACKET_qGetTIBAddr,
1409   PACKET_qGetTLSAddr,
1410   PACKET_qSupported,
1411   PACKET_qTStatus,
1412   PACKET_QPassSignals,
1413   PACKET_QCatchSyscalls,
1414   PACKET_QProgramSignals,
1415   PACKET_QSetWorkingDir,
1416   PACKET_QStartupWithShell,
1417   PACKET_QEnvironmentHexEncoded,
1418   PACKET_QEnvironmentReset,
1419   PACKET_QEnvironmentUnset,
1420   PACKET_qCRC,
1421   PACKET_qSearch_memory,
1422   PACKET_vAttach,
1423   PACKET_vRun,
1424   PACKET_QStartNoAckMode,
1425   PACKET_vKill,
1426   PACKET_qXfer_siginfo_read,
1427   PACKET_qXfer_siginfo_write,
1428   PACKET_qAttached,
1429
1430   /* Support for conditional tracepoints.  */
1431   PACKET_ConditionalTracepoints,
1432
1433   /* Support for target-side breakpoint conditions.  */
1434   PACKET_ConditionalBreakpoints,
1435
1436   /* Support for target-side breakpoint commands.  */
1437   PACKET_BreakpointCommands,
1438
1439   /* Support for fast tracepoints.  */
1440   PACKET_FastTracepoints,
1441
1442   /* Support for static tracepoints.  */
1443   PACKET_StaticTracepoints,
1444
1445   /* Support for installing tracepoints while a trace experiment is
1446      running.  */
1447   PACKET_InstallInTrace,
1448
1449   PACKET_bc,
1450   PACKET_bs,
1451   PACKET_TracepointSource,
1452   PACKET_QAllow,
1453   PACKET_qXfer_fdpic,
1454   PACKET_QDisableRandomization,
1455   PACKET_QAgent,
1456   PACKET_QTBuffer_size,
1457   PACKET_Qbtrace_off,
1458   PACKET_Qbtrace_bts,
1459   PACKET_Qbtrace_pt,
1460   PACKET_qXfer_btrace,
1461
1462   /* Support for the QNonStop packet.  */
1463   PACKET_QNonStop,
1464
1465   /* Support for the QThreadEvents packet.  */
1466   PACKET_QThreadEvents,
1467
1468   /* Support for multi-process extensions.  */
1469   PACKET_multiprocess_feature,
1470
1471   /* Support for enabling and disabling tracepoints while a trace
1472      experiment is running.  */
1473   PACKET_EnableDisableTracepoints_feature,
1474
1475   /* Support for collecting strings using the tracenz bytecode.  */
1476   PACKET_tracenz_feature,
1477
1478   /* Support for continuing to run a trace experiment while GDB is
1479      disconnected.  */
1480   PACKET_DisconnectedTracing_feature,
1481
1482   /* Support for qXfer:libraries-svr4:read with a non-empty annex.  */
1483   PACKET_augmented_libraries_svr4_read_feature,
1484
1485   /* Support for the qXfer:btrace-conf:read packet.  */
1486   PACKET_qXfer_btrace_conf,
1487
1488   /* Support for the Qbtrace-conf:bts:size packet.  */
1489   PACKET_Qbtrace_conf_bts_size,
1490
1491   /* Support for swbreak+ feature.  */
1492   PACKET_swbreak_feature,
1493
1494   /* Support for hwbreak+ feature.  */
1495   PACKET_hwbreak_feature,
1496
1497   /* Support for fork events.  */
1498   PACKET_fork_event_feature,
1499
1500   /* Support for vfork events.  */
1501   PACKET_vfork_event_feature,
1502
1503   /* Support for the Qbtrace-conf:pt:size packet.  */
1504   PACKET_Qbtrace_conf_pt_size,
1505
1506   /* Support for exec events.  */
1507   PACKET_exec_event_feature,
1508
1509   /* Support for query supported vCont actions.  */
1510   PACKET_vContSupported,
1511
1512   /* Support remote CTRL-C.  */
1513   PACKET_vCtrlC,
1514
1515   /* Support TARGET_WAITKIND_NO_RESUMED.  */
1516   PACKET_no_resumed,
1517
1518   PACKET_MAX
1519 };
1520
1521 static struct packet_config remote_protocol_packets[PACKET_MAX];
1522
1523 /* Returns the packet's corresponding "set remote foo-packet" command
1524    state.  See struct packet_config for more details.  */
1525
1526 static enum auto_boolean
1527 packet_set_cmd_state (int packet)
1528 {
1529   return remote_protocol_packets[packet].detect;
1530 }
1531
1532 /* Returns whether a given packet or feature is supported.  This takes
1533    into account the state of the corresponding "set remote foo-packet"
1534    command, which may be used to bypass auto-detection.  */
1535
1536 static enum packet_support
1537 packet_config_support (struct packet_config *config)
1538 {
1539   switch (config->detect)
1540     {
1541     case AUTO_BOOLEAN_TRUE:
1542       return PACKET_ENABLE;
1543     case AUTO_BOOLEAN_FALSE:
1544       return PACKET_DISABLE;
1545     case AUTO_BOOLEAN_AUTO:
1546       return config->support;
1547     default:
1548       gdb_assert_not_reached (_("bad switch"));
1549     }
1550 }
1551
1552 /* Same as packet_config_support, but takes the packet's enum value as
1553    argument.  */
1554
1555 static enum packet_support
1556 packet_support (int packet)
1557 {
1558   struct packet_config *config = &remote_protocol_packets[packet];
1559
1560   return packet_config_support (config);
1561 }
1562
1563 static void
1564 show_remote_protocol_packet_cmd (struct ui_file *file, int from_tty,
1565                                  struct cmd_list_element *c,
1566                                  const char *value)
1567 {
1568   struct packet_config *packet;
1569
1570   for (packet = remote_protocol_packets;
1571        packet < &remote_protocol_packets[PACKET_MAX];
1572        packet++)
1573     {
1574       if (&packet->detect == c->var)
1575         {
1576           show_packet_config_cmd (packet);
1577           return;
1578         }
1579     }
1580   internal_error (__FILE__, __LINE__, _("Could not find config for %s"),
1581                   c->name);
1582 }
1583
1584 /* Should we try one of the 'Z' requests?  */
1585
1586 enum Z_packet_type
1587 {
1588   Z_PACKET_SOFTWARE_BP,
1589   Z_PACKET_HARDWARE_BP,
1590   Z_PACKET_WRITE_WP,
1591   Z_PACKET_READ_WP,
1592   Z_PACKET_ACCESS_WP,
1593   NR_Z_PACKET_TYPES
1594 };
1595
1596 /* For compatibility with older distributions.  Provide a ``set remote
1597    Z-packet ...'' command that updates all the Z packet types.  */
1598
1599 static enum auto_boolean remote_Z_packet_detect;
1600
1601 static void
1602 set_remote_protocol_Z_packet_cmd (const char *args, int from_tty,
1603                                   struct cmd_list_element *c)
1604 {
1605   int i;
1606
1607   for (i = 0; i < NR_Z_PACKET_TYPES; i++)
1608     remote_protocol_packets[PACKET_Z0 + i].detect = remote_Z_packet_detect;
1609 }
1610
1611 static void
1612 show_remote_protocol_Z_packet_cmd (struct ui_file *file, int from_tty,
1613                                    struct cmd_list_element *c,
1614                                    const char *value)
1615 {
1616   int i;
1617
1618   for (i = 0; i < NR_Z_PACKET_TYPES; i++)
1619     {
1620       show_packet_config_cmd (&remote_protocol_packets[PACKET_Z0 + i]);
1621     }
1622 }
1623
1624 /* Returns true if the multi-process extensions are in effect.  */
1625
1626 static int
1627 remote_multi_process_p (struct remote_state *rs)
1628 {
1629   return packet_support (PACKET_multiprocess_feature) == PACKET_ENABLE;
1630 }
1631
1632 /* Returns true if fork events are supported.  */
1633
1634 static int
1635 remote_fork_event_p (struct remote_state *rs)
1636 {
1637   return packet_support (PACKET_fork_event_feature) == PACKET_ENABLE;
1638 }
1639
1640 /* Returns true if vfork events are supported.  */
1641
1642 static int
1643 remote_vfork_event_p (struct remote_state *rs)
1644 {
1645   return packet_support (PACKET_vfork_event_feature) == PACKET_ENABLE;
1646 }
1647
1648 /* Returns true if exec events are supported.  */
1649
1650 static int
1651 remote_exec_event_p (struct remote_state *rs)
1652 {
1653   return packet_support (PACKET_exec_event_feature) == PACKET_ENABLE;
1654 }
1655
1656 /* Insert fork catchpoint target routine.  If fork events are enabled
1657    then return success, nothing more to do.  */
1658
1659 static int
1660 remote_insert_fork_catchpoint (struct target_ops *ops, int pid)
1661 {
1662   struct remote_state *rs = get_remote_state ();
1663
1664   return !remote_fork_event_p (rs);
1665 }
1666
1667 /* Remove fork catchpoint target routine.  Nothing to do, just
1668    return success.  */
1669
1670 static int
1671 remote_remove_fork_catchpoint (struct target_ops *ops, int pid)
1672 {
1673   return 0;
1674 }
1675
1676 /* Insert vfork catchpoint target routine.  If vfork events are enabled
1677    then return success, nothing more to do.  */
1678
1679 static int
1680 remote_insert_vfork_catchpoint (struct target_ops *ops, int pid)
1681 {
1682   struct remote_state *rs = get_remote_state ();
1683
1684   return !remote_vfork_event_p (rs);
1685 }
1686
1687 /* Remove vfork catchpoint target routine.  Nothing to do, just
1688    return success.  */
1689
1690 static int
1691 remote_remove_vfork_catchpoint (struct target_ops *ops, int pid)
1692 {
1693   return 0;
1694 }
1695
1696 /* Insert exec catchpoint target routine.  If exec events are
1697    enabled, just return success.  */
1698
1699 static int
1700 remote_insert_exec_catchpoint (struct target_ops *ops, int pid)
1701 {
1702   struct remote_state *rs = get_remote_state ();
1703
1704   return !remote_exec_event_p (rs);
1705 }
1706
1707 /* Remove exec catchpoint target routine.  Nothing to do, just
1708    return success.  */
1709
1710 static int
1711 remote_remove_exec_catchpoint (struct target_ops *ops, int pid)
1712 {
1713   return 0;
1714 }
1715
1716 \f
1717 /* Asynchronous signal handle registered as event loop source for
1718    when we have pending events ready to be passed to the core.  */
1719
1720 static struct async_event_handler *remote_async_inferior_event_token;
1721
1722 \f
1723
1724 static ptid_t magic_null_ptid;
1725 static ptid_t not_sent_ptid;
1726 static ptid_t any_thread_ptid;
1727
1728 /* Find out if the stub attached to PID (and hence GDB should offer to
1729    detach instead of killing it when bailing out).  */
1730
1731 static int
1732 remote_query_attached (int pid)
1733 {
1734   struct remote_state *rs = get_remote_state ();
1735   size_t size = get_remote_packet_size ();
1736
1737   if (packet_support (PACKET_qAttached) == PACKET_DISABLE)
1738     return 0;
1739
1740   if (remote_multi_process_p (rs))
1741     xsnprintf (rs->buf, size, "qAttached:%x", pid);
1742   else
1743     xsnprintf (rs->buf, size, "qAttached");
1744
1745   putpkt (rs->buf);
1746   getpkt (&rs->buf, &rs->buf_size, 0);
1747
1748   switch (packet_ok (rs->buf,
1749                      &remote_protocol_packets[PACKET_qAttached]))
1750     {
1751     case PACKET_OK:
1752       if (strcmp (rs->buf, "1") == 0)
1753         return 1;
1754       break;
1755     case PACKET_ERROR:
1756       warning (_("Remote failure reply: %s"), rs->buf);
1757       break;
1758     case PACKET_UNKNOWN:
1759       break;
1760     }
1761
1762   return 0;
1763 }
1764
1765 /* Add PID to GDB's inferior table.  If FAKE_PID_P is true, then PID
1766    has been invented by GDB, instead of reported by the target.  Since
1767    we can be connected to a remote system before before knowing about
1768    any inferior, mark the target with execution when we find the first
1769    inferior.  If ATTACHED is 1, then we had just attached to this
1770    inferior.  If it is 0, then we just created this inferior.  If it
1771    is -1, then try querying the remote stub to find out if it had
1772    attached to the inferior or not.  If TRY_OPEN_EXEC is true then
1773    attempt to open this inferior's executable as the main executable
1774    if no main executable is open already.  */
1775
1776 static struct inferior *
1777 remote_add_inferior (int fake_pid_p, int pid, int attached,
1778                      int try_open_exec)
1779 {
1780   struct inferior *inf;
1781
1782   /* Check whether this process we're learning about is to be
1783      considered attached, or if is to be considered to have been
1784      spawned by the stub.  */
1785   if (attached == -1)
1786     attached = remote_query_attached (pid);
1787
1788   if (gdbarch_has_global_solist (target_gdbarch ()))
1789     {
1790       /* If the target shares code across all inferiors, then every
1791          attach adds a new inferior.  */
1792       inf = add_inferior (pid);
1793
1794       /* ... and every inferior is bound to the same program space.
1795          However, each inferior may still have its own address
1796          space.  */
1797       inf->aspace = maybe_new_address_space ();
1798       inf->pspace = current_program_space;
1799     }
1800   else
1801     {
1802       /* In the traditional debugging scenario, there's a 1-1 match
1803          between program/address spaces.  We simply bind the inferior
1804          to the program space's address space.  */
1805       inf = current_inferior ();
1806       inferior_appeared (inf, pid);
1807     }
1808
1809   inf->attach_flag = attached;
1810   inf->fake_pid_p = fake_pid_p;
1811
1812   /* If no main executable is currently open then attempt to
1813      open the file that was executed to create this inferior.  */
1814   if (try_open_exec && get_exec_file (0) == NULL)
1815     exec_file_locate_attach (pid, 0, 1);
1816
1817   return inf;
1818 }
1819
1820 static remote_thread_info *get_remote_thread_info (thread_info *thread);
1821
1822 /* Add thread PTID to GDB's thread list.  Tag it as executing/running
1823    according to RUNNING.  */
1824
1825 static void
1826 remote_add_thread (ptid_t ptid, int running, int executing)
1827 {
1828   struct remote_state *rs = get_remote_state ();
1829   struct thread_info *thread;
1830
1831   /* GDB historically didn't pull threads in the initial connection
1832      setup.  If the remote target doesn't even have a concept of
1833      threads (e.g., a bare-metal target), even if internally we
1834      consider that a single-threaded target, mentioning a new thread
1835      might be confusing to the user.  Be silent then, preserving the
1836      age old behavior.  */
1837   if (rs->starting_up)
1838     thread = add_thread_silent (ptid);
1839   else
1840     thread = add_thread (ptid);
1841
1842   get_remote_thread_info (thread)->vcont_resumed = executing;
1843   set_executing (ptid, executing);
1844   set_running (ptid, running);
1845 }
1846
1847 /* Come here when we learn about a thread id from the remote target.
1848    It may be the first time we hear about such thread, so take the
1849    opportunity to add it to GDB's thread list.  In case this is the
1850    first time we're noticing its corresponding inferior, add it to
1851    GDB's inferior list as well.  EXECUTING indicates whether the
1852    thread is (internally) executing or stopped.  */
1853
1854 static void
1855 remote_notice_new_inferior (ptid_t currthread, int executing)
1856 {
1857   /* In non-stop mode, we assume new found threads are (externally)
1858      running until proven otherwise with a stop reply.  In all-stop,
1859      we can only get here if all threads are stopped.  */
1860   int running = target_is_non_stop_p () ? 1 : 0;
1861
1862   /* If this is a new thread, add it to GDB's thread list.
1863      If we leave it up to WFI to do this, bad things will happen.  */
1864
1865   if (in_thread_list (currthread) && is_exited (currthread))
1866     {
1867       /* We're seeing an event on a thread id we knew had exited.
1868          This has to be a new thread reusing the old id.  Add it.  */
1869       remote_add_thread (currthread, running, executing);
1870       return;
1871     }
1872
1873   if (!in_thread_list (currthread))
1874     {
1875       struct inferior *inf = NULL;
1876       int pid = ptid_get_pid (currthread);
1877
1878       if (ptid_is_pid (inferior_ptid)
1879           && pid == ptid_get_pid (inferior_ptid))
1880         {
1881           /* inferior_ptid has no thread member yet.  This can happen
1882              with the vAttach -> remote_wait,"TAAthread:" path if the
1883              stub doesn't support qC.  This is the first stop reported
1884              after an attach, so this is the main thread.  Update the
1885              ptid in the thread list.  */
1886           if (in_thread_list (pid_to_ptid (pid)))
1887             thread_change_ptid (inferior_ptid, currthread);
1888           else
1889             {
1890               remote_add_thread (currthread, running, executing);
1891               inferior_ptid = currthread;
1892             }
1893           return;
1894         }
1895
1896       if (ptid_equal (magic_null_ptid, inferior_ptid))
1897         {
1898           /* inferior_ptid is not set yet.  This can happen with the
1899              vRun -> remote_wait,"TAAthread:" path if the stub
1900              doesn't support qC.  This is the first stop reported
1901              after an attach, so this is the main thread.  Update the
1902              ptid in the thread list.  */
1903           thread_change_ptid (inferior_ptid, currthread);
1904           return;
1905         }
1906
1907       /* When connecting to a target remote, or to a target
1908          extended-remote which already was debugging an inferior, we
1909          may not know about it yet.  Add it before adding its child
1910          thread, so notifications are emitted in a sensible order.  */
1911       if (!in_inferior_list (ptid_get_pid (currthread)))
1912         {
1913           struct remote_state *rs = get_remote_state ();
1914           int fake_pid_p = !remote_multi_process_p (rs);
1915
1916           inf = remote_add_inferior (fake_pid_p,
1917                                      ptid_get_pid (currthread), -1, 1);
1918         }
1919
1920       /* This is really a new thread.  Add it.  */
1921       remote_add_thread (currthread, running, executing);
1922
1923       /* If we found a new inferior, let the common code do whatever
1924          it needs to with it (e.g., read shared libraries, insert
1925          breakpoints), unless we're just setting up an all-stop
1926          connection.  */
1927       if (inf != NULL)
1928         {
1929           struct remote_state *rs = get_remote_state ();
1930
1931           if (!rs->starting_up)
1932             notice_new_inferior (currthread, executing, 0);
1933         }
1934     }
1935 }
1936
1937 /* Return THREAD's private thread data, creating it if necessary.  */
1938
1939 static remote_thread_info *
1940 get_remote_thread_info (thread_info *thread)
1941 {
1942   gdb_assert (thread != NULL);
1943
1944   if (thread->priv == NULL)
1945     thread->priv.reset (new remote_thread_info);
1946
1947   return static_cast<remote_thread_info *> (thread->priv.get ());
1948 }
1949
1950 /* Return PTID's private thread data, creating it if necessary.  */
1951
1952 static remote_thread_info *
1953 get_remote_thread_info (ptid_t ptid)
1954 {
1955   struct thread_info *info = find_thread_ptid (ptid);
1956
1957   return get_remote_thread_info (info);
1958 }
1959
1960 /* Call this function as a result of
1961    1) A halt indication (T packet) containing a thread id
1962    2) A direct query of currthread
1963    3) Successful execution of set thread */
1964
1965 static void
1966 record_currthread (struct remote_state *rs, ptid_t currthread)
1967 {
1968   rs->general_thread = currthread;
1969 }
1970
1971 /* If 'QPassSignals' is supported, tell the remote stub what signals
1972    it can simply pass through to the inferior without reporting.  */
1973
1974 static void
1975 remote_pass_signals (struct target_ops *self,
1976                      int numsigs, unsigned char *pass_signals)
1977 {
1978   if (packet_support (PACKET_QPassSignals) != PACKET_DISABLE)
1979     {
1980       char *pass_packet, *p;
1981       int count = 0, i;
1982       struct remote_state *rs = get_remote_state ();
1983
1984       gdb_assert (numsigs < 256);
1985       for (i = 0; i < numsigs; i++)
1986         {
1987           if (pass_signals[i])
1988             count++;
1989         }
1990       pass_packet = (char *) xmalloc (count * 3 + strlen ("QPassSignals:") + 1);
1991       strcpy (pass_packet, "QPassSignals:");
1992       p = pass_packet + strlen (pass_packet);
1993       for (i = 0; i < numsigs; i++)
1994         {
1995           if (pass_signals[i])
1996             {
1997               if (i >= 16)
1998                 *p++ = tohex (i >> 4);
1999               *p++ = tohex (i & 15);
2000               if (count)
2001                 *p++ = ';';
2002               else
2003                 break;
2004               count--;
2005             }
2006         }
2007       *p = 0;
2008       if (!rs->last_pass_packet || strcmp (rs->last_pass_packet, pass_packet))
2009         {
2010           putpkt (pass_packet);
2011           getpkt (&rs->buf, &rs->buf_size, 0);
2012           packet_ok (rs->buf, &remote_protocol_packets[PACKET_QPassSignals]);
2013           if (rs->last_pass_packet)
2014             xfree (rs->last_pass_packet);
2015           rs->last_pass_packet = pass_packet;
2016         }
2017       else
2018         xfree (pass_packet);
2019     }
2020 }
2021
2022 /* If 'QCatchSyscalls' is supported, tell the remote stub
2023    to report syscalls to GDB.  */
2024
2025 static int
2026 remote_set_syscall_catchpoint (struct target_ops *self,
2027                                int pid, bool needed, int any_count,
2028                                gdb::array_view<const int> syscall_counts)
2029 {
2030   const char *catch_packet;
2031   enum packet_result result;
2032   int n_sysno = 0;
2033
2034   if (packet_support (PACKET_QCatchSyscalls) == PACKET_DISABLE)
2035     {
2036       /* Not supported.  */
2037       return 1;
2038     }
2039
2040   if (needed && any_count == 0)
2041     {
2042       /* Count how many syscalls are to be caught.  */
2043       for (size_t i = 0; i < syscall_counts.size (); i++)
2044         {
2045           if (syscall_counts[i] != 0)
2046             n_sysno++;
2047         }
2048     }
2049
2050   if (remote_debug)
2051     {
2052       fprintf_unfiltered (gdb_stdlog,
2053                           "remote_set_syscall_catchpoint "
2054                           "pid %d needed %d any_count %d n_sysno %d\n",
2055                           pid, needed, any_count, n_sysno);
2056     }
2057
2058   std::string built_packet;
2059   if (needed)
2060     {
2061       /* Prepare a packet with the sysno list, assuming max 8+1
2062          characters for a sysno.  If the resulting packet size is too
2063          big, fallback on the non-selective packet.  */
2064       const int maxpktsz = strlen ("QCatchSyscalls:1") + n_sysno * 9 + 1;
2065       built_packet.reserve (maxpktsz);
2066       built_packet = "QCatchSyscalls:1";
2067       if (any_count == 0)
2068         {
2069           /* Add in each syscall to be caught.  */
2070           for (size_t i = 0; i < syscall_counts.size (); i++)
2071             {
2072               if (syscall_counts[i] != 0)
2073                 string_appendf (built_packet, ";%zx", i);
2074             }
2075         }
2076       if (built_packet.size () > get_remote_packet_size ())
2077         {
2078           /* catch_packet too big.  Fallback to less efficient
2079              non selective mode, with GDB doing the filtering.  */
2080           catch_packet = "QCatchSyscalls:1";
2081         }
2082       else
2083         catch_packet = built_packet.c_str ();
2084     }
2085   else
2086     catch_packet = "QCatchSyscalls:0";
2087
2088   struct remote_state *rs = get_remote_state ();
2089
2090   putpkt (catch_packet);
2091   getpkt (&rs->buf, &rs->buf_size, 0);
2092   result = packet_ok (rs->buf, &remote_protocol_packets[PACKET_QCatchSyscalls]);
2093   if (result == PACKET_OK)
2094     return 0;
2095   else
2096     return -1;
2097 }
2098
2099 /* If 'QProgramSignals' is supported, tell the remote stub what
2100    signals it should pass through to the inferior when detaching.  */
2101
2102 static void
2103 remote_program_signals (struct target_ops *self,
2104                         int numsigs, unsigned char *signals)
2105 {
2106   if (packet_support (PACKET_QProgramSignals) != PACKET_DISABLE)
2107     {
2108       char *packet, *p;
2109       int count = 0, i;
2110       struct remote_state *rs = get_remote_state ();
2111
2112       gdb_assert (numsigs < 256);
2113       for (i = 0; i < numsigs; i++)
2114         {
2115           if (signals[i])
2116             count++;
2117         }
2118       packet = (char *) xmalloc (count * 3 + strlen ("QProgramSignals:") + 1);
2119       strcpy (packet, "QProgramSignals:");
2120       p = packet + strlen (packet);
2121       for (i = 0; i < numsigs; i++)
2122         {
2123           if (signal_pass_state (i))
2124             {
2125               if (i >= 16)
2126                 *p++ = tohex (i >> 4);
2127               *p++ = tohex (i & 15);
2128               if (count)
2129                 *p++ = ';';
2130               else
2131                 break;
2132               count--;
2133             }
2134         }
2135       *p = 0;
2136       if (!rs->last_program_signals_packet
2137           || strcmp (rs->last_program_signals_packet, packet) != 0)
2138         {
2139           putpkt (packet);
2140           getpkt (&rs->buf, &rs->buf_size, 0);
2141           packet_ok (rs->buf, &remote_protocol_packets[PACKET_QProgramSignals]);
2142           xfree (rs->last_program_signals_packet);
2143           rs->last_program_signals_packet = packet;
2144         }
2145       else
2146         xfree (packet);
2147     }
2148 }
2149
2150 /* If PTID is MAGIC_NULL_PTID, don't set any thread.  If PTID is
2151    MINUS_ONE_PTID, set the thread to -1, so the stub returns the
2152    thread.  If GEN is set, set the general thread, if not, then set
2153    the step/continue thread.  */
2154 static void
2155 set_thread (ptid_t ptid, int gen)
2156 {
2157   struct remote_state *rs = get_remote_state ();
2158   ptid_t state = gen ? rs->general_thread : rs->continue_thread;
2159   char *buf = rs->buf;
2160   char *endbuf = rs->buf + get_remote_packet_size ();
2161
2162   if (ptid_equal (state, ptid))
2163     return;
2164
2165   *buf++ = 'H';
2166   *buf++ = gen ? 'g' : 'c';
2167   if (ptid_equal (ptid, magic_null_ptid))
2168     xsnprintf (buf, endbuf - buf, "0");
2169   else if (ptid_equal (ptid, any_thread_ptid))
2170     xsnprintf (buf, endbuf - buf, "0");
2171   else if (ptid_equal (ptid, minus_one_ptid))
2172     xsnprintf (buf, endbuf - buf, "-1");
2173   else
2174     write_ptid (buf, endbuf, ptid);
2175   putpkt (rs->buf);
2176   getpkt (&rs->buf, &rs->buf_size, 0);
2177   if (gen)
2178     rs->general_thread = ptid;
2179   else
2180     rs->continue_thread = ptid;
2181 }
2182
2183 static void
2184 set_general_thread (ptid_t ptid)
2185 {
2186   set_thread (ptid, 1);
2187 }
2188
2189 static void
2190 set_continue_thread (ptid_t ptid)
2191 {
2192   set_thread (ptid, 0);
2193 }
2194
2195 /* Change the remote current process.  Which thread within the process
2196    ends up selected isn't important, as long as it is the same process
2197    as what INFERIOR_PTID points to.
2198
2199    This comes from that fact that there is no explicit notion of
2200    "selected process" in the protocol.  The selected process for
2201    general operations is the process the selected general thread
2202    belongs to.  */
2203
2204 static void
2205 set_general_process (void)
2206 {
2207   struct remote_state *rs = get_remote_state ();
2208
2209   /* If the remote can't handle multiple processes, don't bother.  */
2210   if (!remote_multi_process_p (rs))
2211     return;
2212
2213   /* We only need to change the remote current thread if it's pointing
2214      at some other process.  */
2215   if (ptid_get_pid (rs->general_thread) != ptid_get_pid (inferior_ptid))
2216     set_general_thread (inferior_ptid);
2217 }
2218
2219 \f
2220 /* Return nonzero if this is the main thread that we made up ourselves
2221    to model non-threaded targets as single-threaded.  */
2222
2223 static int
2224 remote_thread_always_alive (struct target_ops *ops, ptid_t ptid)
2225 {
2226   if (ptid_equal (ptid, magic_null_ptid))
2227     /* The main thread is always alive.  */
2228     return 1;
2229
2230   if (ptid_get_pid (ptid) != 0 && ptid_get_lwp (ptid) == 0)
2231     /* The main thread is always alive.  This can happen after a
2232        vAttach, if the remote side doesn't support
2233        multi-threading.  */
2234     return 1;
2235
2236   return 0;
2237 }
2238
2239 /* Return nonzero if the thread PTID is still alive on the remote
2240    system.  */
2241
2242 static int
2243 remote_thread_alive (struct target_ops *ops, ptid_t ptid)
2244 {
2245   struct remote_state *rs = get_remote_state ();
2246   char *p, *endp;
2247
2248   /* Check if this is a thread that we made up ourselves to model
2249      non-threaded targets as single-threaded.  */
2250   if (remote_thread_always_alive (ops, ptid))
2251     return 1;
2252
2253   p = rs->buf;
2254   endp = rs->buf + get_remote_packet_size ();
2255
2256   *p++ = 'T';
2257   write_ptid (p, endp, ptid);
2258
2259   putpkt (rs->buf);
2260   getpkt (&rs->buf, &rs->buf_size, 0);
2261   return (rs->buf[0] == 'O' && rs->buf[1] == 'K');
2262 }
2263
2264 /* Return a pointer to a thread name if we know it and NULL otherwise.
2265    The thread_info object owns the memory for the name.  */
2266
2267 static const char *
2268 remote_thread_name (struct target_ops *ops, struct thread_info *info)
2269 {
2270   if (info->priv != NULL)
2271     return get_remote_thread_info (info)->name.c_str ();
2272
2273   return NULL;
2274 }
2275
2276 /* About these extended threadlist and threadinfo packets.  They are
2277    variable length packets but, the fields within them are often fixed
2278    length.  They are redundent enough to send over UDP as is the
2279    remote protocol in general.  There is a matching unit test module
2280    in libstub.  */
2281
2282 /* WARNING: This threadref data structure comes from the remote O.S.,
2283    libstub protocol encoding, and remote.c.  It is not particularly
2284    changable.  */
2285
2286 /* Right now, the internal structure is int. We want it to be bigger.
2287    Plan to fix this.  */
2288
2289 typedef int gdb_threadref;      /* Internal GDB thread reference.  */
2290
2291 /* gdb_ext_thread_info is an internal GDB data structure which is
2292    equivalent to the reply of the remote threadinfo packet.  */
2293
2294 struct gdb_ext_thread_info
2295   {
2296     threadref threadid;         /* External form of thread reference.  */
2297     int active;                 /* Has state interesting to GDB?
2298                                    regs, stack.  */
2299     char display[256];          /* Brief state display, name,
2300                                    blocked/suspended.  */
2301     char shortname[32];         /* To be used to name threads.  */
2302     char more_display[256];     /* Long info, statistics, queue depth,
2303                                    whatever.  */
2304   };
2305
2306 /* The volume of remote transfers can be limited by submitting
2307    a mask containing bits specifying the desired information.
2308    Use a union of these values as the 'selection' parameter to
2309    get_thread_info.  FIXME: Make these TAG names more thread specific.  */
2310
2311 #define TAG_THREADID 1
2312 #define TAG_EXISTS 2
2313 #define TAG_DISPLAY 4
2314 #define TAG_THREADNAME 8
2315 #define TAG_MOREDISPLAY 16
2316
2317 #define BUF_THREAD_ID_SIZE (OPAQUETHREADBYTES * 2)
2318
2319 static char *unpack_nibble (char *buf, int *val);
2320
2321 static char *unpack_byte (char *buf, int *value);
2322
2323 static char *pack_int (char *buf, int value);
2324
2325 static char *unpack_int (char *buf, int *value);
2326
2327 static char *unpack_string (char *src, char *dest, int length);
2328
2329 static char *pack_threadid (char *pkt, threadref *id);
2330
2331 static char *unpack_threadid (char *inbuf, threadref *id);
2332
2333 void int_to_threadref (threadref *id, int value);
2334
2335 static int threadref_to_int (threadref *ref);
2336
2337 static void copy_threadref (threadref *dest, threadref *src);
2338
2339 static int threadmatch (threadref *dest, threadref *src);
2340
2341 static char *pack_threadinfo_request (char *pkt, int mode,
2342                                       threadref *id);
2343
2344 static int remote_unpack_thread_info_response (char *pkt,
2345                                                threadref *expectedref,
2346                                                struct gdb_ext_thread_info
2347                                                *info);
2348
2349
2350 static int remote_get_threadinfo (threadref *threadid,
2351                                   int fieldset, /*TAG mask */
2352                                   struct gdb_ext_thread_info *info);
2353
2354 static char *pack_threadlist_request (char *pkt, int startflag,
2355                                       int threadcount,
2356                                       threadref *nextthread);
2357
2358 static int parse_threadlist_response (char *pkt,
2359                                       int result_limit,
2360                                       threadref *original_echo,
2361                                       threadref *resultlist,
2362                                       int *doneflag);
2363
2364 static int remote_get_threadlist (int startflag,
2365                                   threadref *nextthread,
2366                                   int result_limit,
2367                                   int *done,
2368                                   int *result_count,
2369                                   threadref *threadlist);
2370
2371 typedef int (*rmt_thread_action) (threadref *ref, void *context);
2372
2373 static int remote_threadlist_iterator (rmt_thread_action stepfunction,
2374                                        void *context, int looplimit);
2375
2376 static int remote_newthread_step (threadref *ref, void *context);
2377
2378
2379 /* Write a PTID to BUF.  ENDBUF points to one-passed-the-end of the
2380    buffer we're allowed to write to.  Returns
2381    BUF+CHARACTERS_WRITTEN.  */
2382
2383 static char *
2384 write_ptid (char *buf, const char *endbuf, ptid_t ptid)
2385 {
2386   int pid, tid;
2387   struct remote_state *rs = get_remote_state ();
2388
2389   if (remote_multi_process_p (rs))
2390     {
2391       pid = ptid_get_pid (ptid);
2392       if (pid < 0)
2393         buf += xsnprintf (buf, endbuf - buf, "p-%x.", -pid);
2394       else
2395         buf += xsnprintf (buf, endbuf - buf, "p%x.", pid);
2396     }
2397   tid = ptid_get_lwp (ptid);
2398   if (tid < 0)
2399     buf += xsnprintf (buf, endbuf - buf, "-%x", -tid);
2400   else
2401     buf += xsnprintf (buf, endbuf - buf, "%x", tid);
2402
2403   return buf;
2404 }
2405
2406 /* Extract a PTID from BUF.  If non-null, OBUF is set to one past the
2407    last parsed char.  Returns null_ptid if no thread id is found, and
2408    throws an error if the thread id has an invalid format.  */
2409
2410 static ptid_t
2411 read_ptid (const char *buf, const char **obuf)
2412 {
2413   const char *p = buf;
2414   const char *pp;
2415   ULONGEST pid = 0, tid = 0;
2416
2417   if (*p == 'p')
2418     {
2419       /* Multi-process ptid.  */
2420       pp = unpack_varlen_hex (p + 1, &pid);
2421       if (*pp != '.')
2422         error (_("invalid remote ptid: %s"), p);
2423
2424       p = pp;
2425       pp = unpack_varlen_hex (p + 1, &tid);
2426       if (obuf)
2427         *obuf = pp;
2428       return ptid_build (pid, tid, 0);
2429     }
2430
2431   /* No multi-process.  Just a tid.  */
2432   pp = unpack_varlen_hex (p, &tid);
2433
2434   /* Return null_ptid when no thread id is found.  */
2435   if (p == pp)
2436     {
2437       if (obuf)
2438         *obuf = pp;
2439       return null_ptid;
2440     }
2441
2442   /* Since the stub is not sending a process id, then default to
2443      what's in inferior_ptid, unless it's null at this point.  If so,
2444      then since there's no way to know the pid of the reported
2445      threads, use the magic number.  */
2446   if (ptid_equal (inferior_ptid, null_ptid))
2447     pid = ptid_get_pid (magic_null_ptid);
2448   else
2449     pid = ptid_get_pid (inferior_ptid);
2450
2451   if (obuf)
2452     *obuf = pp;
2453   return ptid_build (pid, tid, 0);
2454 }
2455
2456 static int
2457 stubhex (int ch)
2458 {
2459   if (ch >= 'a' && ch <= 'f')
2460     return ch - 'a' + 10;
2461   if (ch >= '0' && ch <= '9')
2462     return ch - '0';
2463   if (ch >= 'A' && ch <= 'F')
2464     return ch - 'A' + 10;
2465   return -1;
2466 }
2467
2468 static int
2469 stub_unpack_int (char *buff, int fieldlength)
2470 {
2471   int nibble;
2472   int retval = 0;
2473
2474   while (fieldlength)
2475     {
2476       nibble = stubhex (*buff++);
2477       retval |= nibble;
2478       fieldlength--;
2479       if (fieldlength)
2480         retval = retval << 4;
2481     }
2482   return retval;
2483 }
2484
2485 static char *
2486 unpack_nibble (char *buf, int *val)
2487 {
2488   *val = fromhex (*buf++);
2489   return buf;
2490 }
2491
2492 static char *
2493 unpack_byte (char *buf, int *value)
2494 {
2495   *value = stub_unpack_int (buf, 2);
2496   return buf + 2;
2497 }
2498
2499 static char *
2500 pack_int (char *buf, int value)
2501 {
2502   buf = pack_hex_byte (buf, (value >> 24) & 0xff);
2503   buf = pack_hex_byte (buf, (value >> 16) & 0xff);
2504   buf = pack_hex_byte (buf, (value >> 8) & 0x0ff);
2505   buf = pack_hex_byte (buf, (value & 0xff));
2506   return buf;
2507 }
2508
2509 static char *
2510 unpack_int (char *buf, int *value)
2511 {
2512   *value = stub_unpack_int (buf, 8);
2513   return buf + 8;
2514 }
2515
2516 #if 0                   /* Currently unused, uncomment when needed.  */
2517 static char *pack_string (char *pkt, char *string);
2518
2519 static char *
2520 pack_string (char *pkt, char *string)
2521 {
2522   char ch;
2523   int len;
2524
2525   len = strlen (string);
2526   if (len > 200)
2527     len = 200;          /* Bigger than most GDB packets, junk???  */
2528   pkt = pack_hex_byte (pkt, len);
2529   while (len-- > 0)
2530     {
2531       ch = *string++;
2532       if ((ch == '\0') || (ch == '#'))
2533         ch = '*';               /* Protect encapsulation.  */
2534       *pkt++ = ch;
2535     }
2536   return pkt;
2537 }
2538 #endif /* 0 (unused) */
2539
2540 static char *
2541 unpack_string (char *src, char *dest, int length)
2542 {
2543   while (length--)
2544     *dest++ = *src++;
2545   *dest = '\0';
2546   return src;
2547 }
2548
2549 static char *
2550 pack_threadid (char *pkt, threadref *id)
2551 {
2552   char *limit;
2553   unsigned char *altid;
2554
2555   altid = (unsigned char *) id;
2556   limit = pkt + BUF_THREAD_ID_SIZE;
2557   while (pkt < limit)
2558     pkt = pack_hex_byte (pkt, *altid++);
2559   return pkt;
2560 }
2561
2562
2563 static char *
2564 unpack_threadid (char *inbuf, threadref *id)
2565 {
2566   char *altref;
2567   char *limit = inbuf + BUF_THREAD_ID_SIZE;
2568   int x, y;
2569
2570   altref = (char *) id;
2571
2572   while (inbuf < limit)
2573     {
2574       x = stubhex (*inbuf++);
2575       y = stubhex (*inbuf++);
2576       *altref++ = (x << 4) | y;
2577     }
2578   return inbuf;
2579 }
2580
2581 /* Externally, threadrefs are 64 bits but internally, they are still
2582    ints.  This is due to a mismatch of specifications.  We would like
2583    to use 64bit thread references internally.  This is an adapter
2584    function.  */
2585
2586 void
2587 int_to_threadref (threadref *id, int value)
2588 {
2589   unsigned char *scan;
2590
2591   scan = (unsigned char *) id;
2592   {
2593     int i = 4;
2594     while (i--)
2595       *scan++ = 0;
2596   }
2597   *scan++ = (value >> 24) & 0xff;
2598   *scan++ = (value >> 16) & 0xff;
2599   *scan++ = (value >> 8) & 0xff;
2600   *scan++ = (value & 0xff);
2601 }
2602
2603 static int
2604 threadref_to_int (threadref *ref)
2605 {
2606   int i, value = 0;
2607   unsigned char *scan;
2608
2609   scan = *ref;
2610   scan += 4;
2611   i = 4;
2612   while (i-- > 0)
2613     value = (value << 8) | ((*scan++) & 0xff);
2614   return value;
2615 }
2616
2617 static void
2618 copy_threadref (threadref *dest, threadref *src)
2619 {
2620   int i;
2621   unsigned char *csrc, *cdest;
2622
2623   csrc = (unsigned char *) src;
2624   cdest = (unsigned char *) dest;
2625   i = 8;
2626   while (i--)
2627     *cdest++ = *csrc++;
2628 }
2629
2630 static int
2631 threadmatch (threadref *dest, threadref *src)
2632 {
2633   /* Things are broken right now, so just assume we got a match.  */
2634 #if 0
2635   unsigned char *srcp, *destp;
2636   int i, result;
2637   srcp = (char *) src;
2638   destp = (char *) dest;
2639
2640   result = 1;
2641   while (i-- > 0)
2642     result &= (*srcp++ == *destp++) ? 1 : 0;
2643   return result;
2644 #endif
2645   return 1;
2646 }
2647
2648 /*
2649    threadid:1,        # always request threadid
2650    context_exists:2,
2651    display:4,
2652    unique_name:8,
2653    more_display:16
2654  */
2655
2656 /* Encoding:  'Q':8,'P':8,mask:32,threadid:64 */
2657
2658 static char *
2659 pack_threadinfo_request (char *pkt, int mode, threadref *id)
2660 {
2661   *pkt++ = 'q';                         /* Info Query */
2662   *pkt++ = 'P';                         /* process or thread info */
2663   pkt = pack_int (pkt, mode);           /* mode */
2664   pkt = pack_threadid (pkt, id);        /* threadid */
2665   *pkt = '\0';                          /* terminate */
2666   return pkt;
2667 }
2668
2669 /* These values tag the fields in a thread info response packet.  */
2670 /* Tagging the fields allows us to request specific fields and to
2671    add more fields as time goes by.  */
2672
2673 #define TAG_THREADID 1          /* Echo the thread identifier.  */
2674 #define TAG_EXISTS 2            /* Is this process defined enough to
2675                                    fetch registers and its stack?  */
2676 #define TAG_DISPLAY 4           /* A short thing maybe to put on a window */
2677 #define TAG_THREADNAME 8        /* string, maps 1-to-1 with a thread is.  */
2678 #define TAG_MOREDISPLAY 16      /* Whatever the kernel wants to say about
2679                                    the process.  */
2680
2681 static int
2682 remote_unpack_thread_info_response (char *pkt, threadref *expectedref,
2683                                     struct gdb_ext_thread_info *info)
2684 {
2685   struct remote_state *rs = get_remote_state ();
2686   int mask, length;
2687   int tag;
2688   threadref ref;
2689   char *limit = pkt + rs->buf_size; /* Plausible parsing limit.  */
2690   int retval = 1;
2691
2692   /* info->threadid = 0; FIXME: implement zero_threadref.  */
2693   info->active = 0;
2694   info->display[0] = '\0';
2695   info->shortname[0] = '\0';
2696   info->more_display[0] = '\0';
2697
2698   /* Assume the characters indicating the packet type have been
2699      stripped.  */
2700   pkt = unpack_int (pkt, &mask);        /* arg mask */
2701   pkt = unpack_threadid (pkt, &ref);
2702
2703   if (mask == 0)
2704     warning (_("Incomplete response to threadinfo request."));
2705   if (!threadmatch (&ref, expectedref))
2706     {                   /* This is an answer to a different request.  */
2707       warning (_("ERROR RMT Thread info mismatch."));
2708       return 0;
2709     }
2710   copy_threadref (&info->threadid, &ref);
2711
2712   /* Loop on tagged fields , try to bail if somthing goes wrong.  */
2713
2714   /* Packets are terminated with nulls.  */
2715   while ((pkt < limit) && mask && *pkt)
2716     {
2717       pkt = unpack_int (pkt, &tag);     /* tag */
2718       pkt = unpack_byte (pkt, &length); /* length */
2719       if (!(tag & mask))                /* Tags out of synch with mask.  */
2720         {
2721           warning (_("ERROR RMT: threadinfo tag mismatch."));
2722           retval = 0;
2723           break;
2724         }
2725       if (tag == TAG_THREADID)
2726         {
2727           if (length != 16)
2728             {
2729               warning (_("ERROR RMT: length of threadid is not 16."));
2730               retval = 0;
2731               break;
2732             }
2733           pkt = unpack_threadid (pkt, &ref);
2734           mask = mask & ~TAG_THREADID;
2735           continue;
2736         }
2737       if (tag == TAG_EXISTS)
2738         {
2739           info->active = stub_unpack_int (pkt, length);
2740           pkt += length;
2741           mask = mask & ~(TAG_EXISTS);
2742           if (length > 8)
2743             {
2744               warning (_("ERROR RMT: 'exists' length too long."));
2745               retval = 0;
2746               break;
2747             }
2748           continue;
2749         }
2750       if (tag == TAG_THREADNAME)
2751         {
2752           pkt = unpack_string (pkt, &info->shortname[0], length);
2753           mask = mask & ~TAG_THREADNAME;
2754           continue;
2755         }
2756       if (tag == TAG_DISPLAY)
2757         {
2758           pkt = unpack_string (pkt, &info->display[0], length);
2759           mask = mask & ~TAG_DISPLAY;
2760           continue;
2761         }
2762       if (tag == TAG_MOREDISPLAY)
2763         {
2764           pkt = unpack_string (pkt, &info->more_display[0], length);
2765           mask = mask & ~TAG_MOREDISPLAY;
2766           continue;
2767         }
2768       warning (_("ERROR RMT: unknown thread info tag."));
2769       break;                    /* Not a tag we know about.  */
2770     }
2771   return retval;
2772 }
2773
2774 static int
2775 remote_get_threadinfo (threadref *threadid, int fieldset,       /* TAG mask */
2776                        struct gdb_ext_thread_info *info)
2777 {
2778   struct remote_state *rs = get_remote_state ();
2779   int result;
2780
2781   pack_threadinfo_request (rs->buf, fieldset, threadid);
2782   putpkt (rs->buf);
2783   getpkt (&rs->buf, &rs->buf_size, 0);
2784
2785   if (rs->buf[0] == '\0')
2786     return 0;
2787
2788   result = remote_unpack_thread_info_response (rs->buf + 2,
2789                                                threadid, info);
2790   return result;
2791 }
2792
2793 /*    Format: i'Q':8,i"L":8,initflag:8,batchsize:16,lastthreadid:32   */
2794
2795 static char *
2796 pack_threadlist_request (char *pkt, int startflag, int threadcount,
2797                          threadref *nextthread)
2798 {
2799   *pkt++ = 'q';                 /* info query packet */
2800   *pkt++ = 'L';                 /* Process LIST or threadLIST request */
2801   pkt = pack_nibble (pkt, startflag);           /* initflag 1 bytes */
2802   pkt = pack_hex_byte (pkt, threadcount);       /* threadcount 2 bytes */
2803   pkt = pack_threadid (pkt, nextthread);        /* 64 bit thread identifier */
2804   *pkt = '\0';
2805   return pkt;
2806 }
2807
2808 /* Encoding:   'q':8,'M':8,count:16,done:8,argthreadid:64,(threadid:64)* */
2809
2810 static int
2811 parse_threadlist_response (char *pkt, int result_limit,
2812                            threadref *original_echo, threadref *resultlist,
2813                            int *doneflag)
2814 {
2815   struct remote_state *rs = get_remote_state ();
2816   char *limit;
2817   int count, resultcount, done;
2818
2819   resultcount = 0;
2820   /* Assume the 'q' and 'M chars have been stripped.  */
2821   limit = pkt + (rs->buf_size - BUF_THREAD_ID_SIZE);
2822   /* done parse past here */
2823   pkt = unpack_byte (pkt, &count);      /* count field */
2824   pkt = unpack_nibble (pkt, &done);
2825   /* The first threadid is the argument threadid.  */
2826   pkt = unpack_threadid (pkt, original_echo);   /* should match query packet */
2827   while ((count-- > 0) && (pkt < limit))
2828     {
2829       pkt = unpack_threadid (pkt, resultlist++);
2830       if (resultcount++ >= result_limit)
2831         break;
2832     }
2833   if (doneflag)
2834     *doneflag = done;
2835   return resultcount;
2836 }
2837
2838 /* Fetch the next batch of threads from the remote.  Returns -1 if the
2839    qL packet is not supported, 0 on error and 1 on success.  */
2840
2841 static int
2842 remote_get_threadlist (int startflag, threadref *nextthread, int result_limit,
2843                        int *done, int *result_count, threadref *threadlist)
2844 {
2845   struct remote_state *rs = get_remote_state ();
2846   int result = 1;
2847
2848   /* Trancate result limit to be smaller than the packet size.  */
2849   if ((((result_limit + 1) * BUF_THREAD_ID_SIZE) + 10)
2850       >= get_remote_packet_size ())
2851     result_limit = (get_remote_packet_size () / BUF_THREAD_ID_SIZE) - 2;
2852
2853   pack_threadlist_request (rs->buf, startflag, result_limit, nextthread);
2854   putpkt (rs->buf);
2855   getpkt (&rs->buf, &rs->buf_size, 0);
2856   if (*rs->buf == '\0')
2857     {
2858       /* Packet not supported.  */
2859       return -1;
2860     }
2861
2862   *result_count =
2863     parse_threadlist_response (rs->buf + 2, result_limit,
2864                                &rs->echo_nextthread, threadlist, done);
2865
2866   if (!threadmatch (&rs->echo_nextthread, nextthread))
2867     {
2868       /* FIXME: This is a good reason to drop the packet.  */
2869       /* Possably, there is a duplicate response.  */
2870       /* Possabilities :
2871          retransmit immediatly - race conditions
2872          retransmit after timeout - yes
2873          exit
2874          wait for packet, then exit
2875        */
2876       warning (_("HMM: threadlist did not echo arg thread, dropping it."));
2877       return 0;                 /* I choose simply exiting.  */
2878     }
2879   if (*result_count <= 0)
2880     {
2881       if (*done != 1)
2882         {
2883           warning (_("RMT ERROR : failed to get remote thread list."));
2884           result = 0;
2885         }
2886       return result;            /* break; */
2887     }
2888   if (*result_count > result_limit)
2889     {
2890       *result_count = 0;
2891       warning (_("RMT ERROR: threadlist response longer than requested."));
2892       return 0;
2893     }
2894   return result;
2895 }
2896
2897 /* Fetch the list of remote threads, with the qL packet, and call
2898    STEPFUNCTION for each thread found.  Stops iterating and returns 1
2899    if STEPFUNCTION returns true.  Stops iterating and returns 0 if the
2900    STEPFUNCTION returns false.  If the packet is not supported,
2901    returns -1.  */
2902
2903 static int
2904 remote_threadlist_iterator (rmt_thread_action stepfunction, void *context,
2905                             int looplimit)
2906 {
2907   struct remote_state *rs = get_remote_state ();
2908   int done, i, result_count;
2909   int startflag = 1;
2910   int result = 1;
2911   int loopcount = 0;
2912
2913   done = 0;
2914   while (!done)
2915     {
2916       if (loopcount++ > looplimit)
2917         {
2918           result = 0;
2919           warning (_("Remote fetch threadlist -infinite loop-."));
2920           break;
2921         }
2922       result = remote_get_threadlist (startflag, &rs->nextthread,
2923                                       MAXTHREADLISTRESULTS,
2924                                       &done, &result_count,
2925                                       rs->resultthreadlist);
2926       if (result <= 0)
2927         break;
2928       /* Clear for later iterations.  */
2929       startflag = 0;
2930       /* Setup to resume next batch of thread references, set nextthread.  */
2931       if (result_count >= 1)
2932         copy_threadref (&rs->nextthread,
2933                         &rs->resultthreadlist[result_count - 1]);
2934       i = 0;
2935       while (result_count--)
2936         {
2937           if (!(*stepfunction) (&rs->resultthreadlist[i++], context))
2938             {
2939               result = 0;
2940               break;
2941             }
2942         }
2943     }
2944   return result;
2945 }
2946
2947 /* A thread found on the remote target.  */
2948
2949 struct thread_item
2950 {
2951   explicit thread_item (ptid_t ptid_)
2952   : ptid (ptid_)
2953   {}
2954
2955   thread_item (thread_item &&other) = default;
2956   thread_item &operator= (thread_item &&other) = default;
2957
2958   DISABLE_COPY_AND_ASSIGN (thread_item);
2959
2960   /* The thread's PTID.  */
2961   ptid_t ptid;
2962
2963   /* The thread's extra info.  */
2964   std::string extra;
2965
2966   /* The thread's name.  */
2967   std::string name;
2968
2969   /* The core the thread was running on.  -1 if not known.  */
2970   int core = -1;
2971
2972   /* The thread handle associated with the thread.  */
2973   gdb::byte_vector thread_handle;
2974 };
2975
2976 /* Context passed around to the various methods listing remote
2977    threads.  As new threads are found, they're added to the ITEMS
2978    vector.  */
2979
2980 struct threads_listing_context
2981 {
2982   /* Return true if this object contains an entry for a thread with ptid
2983      PTID.  */
2984
2985   bool contains_thread (ptid_t ptid) const
2986   {
2987     auto match_ptid = [&] (const thread_item &item)
2988       {
2989         return item.ptid == ptid;
2990       };
2991
2992     auto it = std::find_if (this->items.begin (),
2993                             this->items.end (),
2994                             match_ptid);
2995
2996     return it != this->items.end ();
2997   }
2998
2999   /* Remove the thread with ptid PTID.  */
3000
3001   void remove_thread (ptid_t ptid)
3002   {
3003     auto match_ptid = [&] (const thread_item &item)
3004       {
3005         return item.ptid == ptid;
3006       };
3007
3008     auto it = std::remove_if (this->items.begin (),
3009                               this->items.end (),
3010                               match_ptid);
3011
3012     if (it != this->items.end ())
3013       this->items.erase (it);
3014   }
3015
3016   /* The threads found on the remote target.  */
3017   std::vector<thread_item> items;
3018 };
3019
3020 static int
3021 remote_newthread_step (threadref *ref, void *data)
3022 {
3023   struct threads_listing_context *context
3024     = (struct threads_listing_context *) data;
3025   int pid = inferior_ptid.pid ();
3026   int lwp = threadref_to_int (ref);
3027   ptid_t ptid (pid, lwp);
3028
3029   context->items.emplace_back (ptid);
3030
3031   return 1;                     /* continue iterator */
3032 }
3033
3034 #define CRAZY_MAX_THREADS 1000
3035
3036 static ptid_t
3037 remote_current_thread (ptid_t oldpid)
3038 {
3039   struct remote_state *rs = get_remote_state ();
3040
3041   putpkt ("qC");
3042   getpkt (&rs->buf, &rs->buf_size, 0);
3043   if (rs->buf[0] == 'Q' && rs->buf[1] == 'C')
3044     {
3045       const char *obuf;
3046       ptid_t result;
3047
3048       result = read_ptid (&rs->buf[2], &obuf);
3049       if (*obuf != '\0' && remote_debug)
3050         fprintf_unfiltered (gdb_stdlog,
3051                             "warning: garbage in qC reply\n");
3052
3053       return result;
3054     }
3055   else
3056     return oldpid;
3057 }
3058
3059 /* List remote threads using the deprecated qL packet.  */
3060
3061 static int
3062 remote_get_threads_with_ql (struct target_ops *ops,
3063                             struct threads_listing_context *context)
3064 {
3065   if (remote_threadlist_iterator (remote_newthread_step, context,
3066                                   CRAZY_MAX_THREADS) >= 0)
3067     return 1;
3068
3069   return 0;
3070 }
3071
3072 #if defined(HAVE_LIBEXPAT)
3073
3074 static void
3075 start_thread (struct gdb_xml_parser *parser,
3076               const struct gdb_xml_element *element,
3077               void *user_data, VEC(gdb_xml_value_s) *attributes)
3078 {
3079   struct threads_listing_context *data
3080     = (struct threads_listing_context *) user_data;
3081   struct gdb_xml_value *attr;
3082
3083   char *id = (char *) xml_find_attribute (attributes, "id")->value;
3084   ptid_t ptid = read_ptid (id, NULL);
3085
3086   data->items.emplace_back (ptid);
3087   thread_item &item = data->items.back ();
3088
3089   attr = xml_find_attribute (attributes, "core");
3090   if (attr != NULL)
3091     item.core = *(ULONGEST *) attr->value;
3092
3093   attr = xml_find_attribute (attributes, "name");
3094   if (attr != NULL)
3095     item.name = (const char *) attr->value;
3096
3097   attr = xml_find_attribute (attributes, "handle");
3098   if (attr != NULL)
3099     item.thread_handle = hex2bin ((const char *) attr->value);
3100 }
3101
3102 static void
3103 end_thread (struct gdb_xml_parser *parser,
3104             const struct gdb_xml_element *element,
3105             void *user_data, const char *body_text)
3106 {
3107   struct threads_listing_context *data
3108     = (struct threads_listing_context *) user_data;
3109
3110   if (body_text != NULL && *body_text != '\0')
3111     data->items.back ().extra = body_text;
3112 }
3113
3114 const struct gdb_xml_attribute thread_attributes[] = {
3115   { "id", GDB_XML_AF_NONE, NULL, NULL },
3116   { "core", GDB_XML_AF_OPTIONAL, gdb_xml_parse_attr_ulongest, NULL },
3117   { "name", GDB_XML_AF_OPTIONAL, NULL, NULL },
3118   { "handle", GDB_XML_AF_OPTIONAL, NULL, NULL },
3119   { NULL, GDB_XML_AF_NONE, NULL, NULL }
3120 };
3121
3122 const struct gdb_xml_element thread_children[] = {
3123   { NULL, NULL, NULL, GDB_XML_EF_NONE, NULL, NULL }
3124 };
3125
3126 const struct gdb_xml_element threads_children[] = {
3127   { "thread", thread_attributes, thread_children,
3128     GDB_XML_EF_REPEATABLE | GDB_XML_EF_OPTIONAL,
3129     start_thread, end_thread },
3130   { NULL, NULL, NULL, GDB_XML_EF_NONE, NULL, NULL }
3131 };
3132
3133 const struct gdb_xml_element threads_elements[] = {
3134   { "threads", NULL, threads_children,
3135     GDB_XML_EF_NONE, NULL, NULL },
3136   { NULL, NULL, NULL, GDB_XML_EF_NONE, NULL, NULL }
3137 };
3138
3139 #endif
3140
3141 /* List remote threads using qXfer:threads:read.  */
3142
3143 static int
3144 remote_get_threads_with_qxfer (struct target_ops *ops,
3145                                struct threads_listing_context *context)
3146 {
3147 #if defined(HAVE_LIBEXPAT)
3148   if (packet_support (PACKET_qXfer_threads) == PACKET_ENABLE)
3149     {
3150       gdb::unique_xmalloc_ptr<char> xml
3151         = target_read_stralloc (ops, TARGET_OBJECT_THREADS, NULL);
3152
3153       if (xml != NULL && *xml != '\0')
3154         {
3155           gdb_xml_parse_quick (_("threads"), "threads.dtd",
3156                                threads_elements, xml.get (), context);
3157         }
3158
3159       return 1;
3160     }
3161 #endif
3162
3163   return 0;
3164 }
3165
3166 /* List remote threads using qfThreadInfo/qsThreadInfo.  */
3167
3168 static int
3169 remote_get_threads_with_qthreadinfo (struct target_ops *ops,
3170                                      struct threads_listing_context *context)
3171 {
3172   struct remote_state *rs = get_remote_state ();
3173
3174   if (rs->use_threadinfo_query)
3175     {
3176       const char *bufp;
3177
3178       putpkt ("qfThreadInfo");
3179       getpkt (&rs->buf, &rs->buf_size, 0);
3180       bufp = rs->buf;
3181       if (bufp[0] != '\0')              /* q packet recognized */
3182         {
3183           while (*bufp++ == 'm')        /* reply contains one or more TID */
3184             {
3185               do
3186                 {
3187                   ptid_t ptid = read_ptid (bufp, &bufp);
3188                   context->items.emplace_back (ptid);
3189                 }
3190               while (*bufp++ == ',');   /* comma-separated list */
3191               putpkt ("qsThreadInfo");
3192               getpkt (&rs->buf, &rs->buf_size, 0);
3193               bufp = rs->buf;
3194             }
3195           return 1;
3196         }
3197       else
3198         {
3199           /* Packet not recognized.  */
3200           rs->use_threadinfo_query = 0;
3201         }
3202     }
3203
3204   return 0;
3205 }
3206
3207 /* Implement the to_update_thread_list function for the remote
3208    targets.  */
3209
3210 static void
3211 remote_update_thread_list (struct target_ops *ops)
3212 {
3213   struct threads_listing_context context;
3214   int got_list = 0;
3215
3216   /* We have a few different mechanisms to fetch the thread list.  Try
3217      them all, starting with the most preferred one first, falling
3218      back to older methods.  */
3219   if (remote_get_threads_with_qxfer (ops, &context)
3220       || remote_get_threads_with_qthreadinfo (ops, &context)
3221       || remote_get_threads_with_ql (ops, &context))
3222     {
3223       struct thread_info *tp, *tmp;
3224
3225       got_list = 1;
3226
3227       if (context.items.empty ()
3228           && remote_thread_always_alive (ops, inferior_ptid))
3229         {
3230           /* Some targets don't really support threads, but still
3231              reply an (empty) thread list in response to the thread
3232              listing packets, instead of replying "packet not
3233              supported".  Exit early so we don't delete the main
3234              thread.  */
3235           return;
3236         }
3237
3238       /* CONTEXT now holds the current thread list on the remote
3239          target end.  Delete GDB-side threads no longer found on the
3240          target.  */
3241       ALL_THREADS_SAFE (tp, tmp)
3242         {
3243           if (!context.contains_thread (tp->ptid))
3244             {
3245               /* Not found.  */
3246               delete_thread (tp->ptid);
3247             }
3248         }
3249
3250       /* Remove any unreported fork child threads from CONTEXT so
3251          that we don't interfere with follow fork, which is where
3252          creation of such threads is handled.  */
3253       remove_new_fork_children (&context);
3254
3255       /* And now add threads we don't know about yet to our list.  */
3256       for (thread_item &item : context.items)
3257         {
3258           if (item.ptid != null_ptid)
3259             {
3260               /* In non-stop mode, we assume new found threads are
3261                  executing until proven otherwise with a stop reply.
3262                  In all-stop, we can only get here if all threads are
3263                  stopped.  */
3264               int executing = target_is_non_stop_p () ? 1 : 0;
3265
3266               remote_notice_new_inferior (item.ptid, executing);
3267
3268               remote_thread_info *info = get_remote_thread_info (item.ptid);
3269               info->core = item.core;
3270               info->extra = std::move (item.extra);
3271               info->name = std::move (item.name);
3272               info->thread_handle = std::move (item.thread_handle);
3273             }
3274         }
3275     }
3276
3277   if (!got_list)
3278     {
3279       /* If no thread listing method is supported, then query whether
3280          each known thread is alive, one by one, with the T packet.
3281          If the target doesn't support threads at all, then this is a
3282          no-op.  See remote_thread_alive.  */
3283       prune_threads ();
3284     }
3285 }
3286
3287 /*
3288  * Collect a descriptive string about the given thread.
3289  * The target may say anything it wants to about the thread
3290  * (typically info about its blocked / runnable state, name, etc.).
3291  * This string will appear in the info threads display.
3292  *
3293  * Optional: targets are not required to implement this function.
3294  */
3295
3296 static const char *
3297 remote_threads_extra_info (struct target_ops *self, struct thread_info *tp)
3298 {
3299   struct remote_state *rs = get_remote_state ();
3300   int result;
3301   int set;
3302   threadref id;
3303   struct gdb_ext_thread_info threadinfo;
3304   static char display_buf[100]; /* arbitrary...  */
3305   int n = 0;                    /* position in display_buf */
3306
3307   if (rs->remote_desc == 0)             /* paranoia */
3308     internal_error (__FILE__, __LINE__,
3309                     _("remote_threads_extra_info"));
3310
3311   if (ptid_equal (tp->ptid, magic_null_ptid)
3312       || (ptid_get_pid (tp->ptid) != 0 && ptid_get_lwp (tp->ptid) == 0))
3313     /* This is the main thread which was added by GDB.  The remote
3314        server doesn't know about it.  */
3315     return NULL;
3316
3317   if (packet_support (PACKET_qXfer_threads) == PACKET_ENABLE)
3318     {
3319       struct thread_info *info = find_thread_ptid (tp->ptid);
3320
3321       if (info != NULL && info->priv != NULL)
3322         return get_remote_thread_info (info)->extra.c_str ();
3323       else
3324         return NULL;
3325     }
3326
3327   if (rs->use_threadextra_query)
3328     {
3329       char *b = rs->buf;
3330       char *endb = rs->buf + get_remote_packet_size ();
3331
3332       xsnprintf (b, endb - b, "qThreadExtraInfo,");
3333       b += strlen (b);
3334       write_ptid (b, endb, tp->ptid);
3335
3336       putpkt (rs->buf);
3337       getpkt (&rs->buf, &rs->buf_size, 0);
3338       if (rs->buf[0] != 0)
3339         {
3340           n = std::min (strlen (rs->buf) / 2, sizeof (display_buf));
3341           result = hex2bin (rs->buf, (gdb_byte *) display_buf, n);
3342           display_buf [result] = '\0';
3343           return display_buf;
3344         }
3345     }
3346
3347   /* If the above query fails, fall back to the old method.  */
3348   rs->use_threadextra_query = 0;
3349   set = TAG_THREADID | TAG_EXISTS | TAG_THREADNAME
3350     | TAG_MOREDISPLAY | TAG_DISPLAY;
3351   int_to_threadref (&id, ptid_get_lwp (tp->ptid));
3352   if (remote_get_threadinfo (&id, set, &threadinfo))
3353     if (threadinfo.active)
3354       {
3355         if (*threadinfo.shortname)
3356           n += xsnprintf (&display_buf[0], sizeof (display_buf) - n,
3357                           " Name: %s,", threadinfo.shortname);
3358         if (*threadinfo.display)
3359           n += xsnprintf (&display_buf[n], sizeof (display_buf) - n,
3360                           " State: %s,", threadinfo.display);
3361         if (*threadinfo.more_display)
3362           n += xsnprintf (&display_buf[n], sizeof (display_buf) - n,
3363                           " Priority: %s", threadinfo.more_display);
3364
3365         if (n > 0)
3366           {
3367             /* For purely cosmetic reasons, clear up trailing commas.  */
3368             if (',' == display_buf[n-1])
3369               display_buf[n-1] = ' ';
3370             return display_buf;
3371           }
3372       }
3373   return NULL;
3374 }
3375 \f
3376
3377 static int
3378 remote_static_tracepoint_marker_at (struct target_ops *self, CORE_ADDR addr,
3379                                     struct static_tracepoint_marker *marker)
3380 {
3381   struct remote_state *rs = get_remote_state ();
3382   char *p = rs->buf;
3383
3384   xsnprintf (p, get_remote_packet_size (), "qTSTMat:");
3385   p += strlen (p);
3386   p += hexnumstr (p, addr);
3387   putpkt (rs->buf);
3388   getpkt (&rs->buf, &rs->buf_size, 0);
3389   p = rs->buf;
3390
3391   if (*p == 'E')
3392     error (_("Remote failure reply: %s"), p);
3393
3394   if (*p++ == 'm')
3395     {
3396       parse_static_tracepoint_marker_definition (p, NULL, marker);
3397       return 1;
3398     }
3399
3400   return 0;
3401 }
3402
3403 static VEC(static_tracepoint_marker_p) *
3404 remote_static_tracepoint_markers_by_strid (struct target_ops *self,
3405                                            const char *strid)
3406 {
3407   struct remote_state *rs = get_remote_state ();
3408   VEC(static_tracepoint_marker_p) *markers = NULL;
3409   struct static_tracepoint_marker *marker = NULL;
3410   struct cleanup *old_chain;
3411   const char *p;
3412
3413   /* Ask for a first packet of static tracepoint marker
3414      definition.  */
3415   putpkt ("qTfSTM");
3416   getpkt (&rs->buf, &rs->buf_size, 0);
3417   p = rs->buf;
3418   if (*p == 'E')
3419     error (_("Remote failure reply: %s"), p);
3420
3421   old_chain = make_cleanup (free_current_marker, &marker);
3422
3423   while (*p++ == 'm')
3424     {
3425       if (marker == NULL)
3426         marker = XCNEW (struct static_tracepoint_marker);
3427
3428       do
3429         {
3430           parse_static_tracepoint_marker_definition (p, &p, marker);
3431
3432           if (strid == NULL || strcmp (strid, marker->str_id) == 0)
3433             {
3434               VEC_safe_push (static_tracepoint_marker_p,
3435                              markers, marker);
3436               marker = NULL;
3437             }
3438           else
3439             {
3440               release_static_tracepoint_marker (marker);
3441               memset (marker, 0, sizeof (*marker));
3442             }
3443         }
3444       while (*p++ == ',');      /* comma-separated list */
3445       /* Ask for another packet of static tracepoint definition.  */
3446       putpkt ("qTsSTM");
3447       getpkt (&rs->buf, &rs->buf_size, 0);
3448       p = rs->buf;
3449     }
3450
3451   do_cleanups (old_chain);
3452   return markers;
3453 }
3454
3455 \f
3456 /* Implement the to_get_ada_task_ptid function for the remote targets.  */
3457
3458 static ptid_t
3459 remote_get_ada_task_ptid (struct target_ops *self, long lwp, long thread)
3460 {
3461   return ptid_build (ptid_get_pid (inferior_ptid), lwp, 0);
3462 }
3463 \f
3464
3465 /* Restart the remote side; this is an extended protocol operation.  */
3466
3467 static void
3468 extended_remote_restart (void)
3469 {
3470   struct remote_state *rs = get_remote_state ();
3471
3472   /* Send the restart command; for reasons I don't understand the
3473      remote side really expects a number after the "R".  */
3474   xsnprintf (rs->buf, get_remote_packet_size (), "R%x", 0);
3475   putpkt (rs->buf);
3476
3477   remote_fileio_reset ();
3478 }
3479 \f
3480 /* Clean up connection to a remote debugger.  */
3481
3482 static void
3483 remote_close (struct target_ops *self)
3484 {
3485   struct remote_state *rs = get_remote_state ();
3486
3487   if (rs->remote_desc == NULL)
3488     return; /* already closed */
3489
3490   /* Make sure we leave stdin registered in the event loop.  */
3491   remote_terminal_ours (self);
3492
3493   serial_close (rs->remote_desc);
3494   rs->remote_desc = NULL;
3495
3496   /* We don't have a connection to the remote stub anymore.  Get rid
3497      of all the inferiors and their threads we were controlling.
3498      Reset inferior_ptid to null_ptid first, as otherwise has_stack_frame
3499      will be unable to find the thread corresponding to (pid, 0, 0).  */
3500   inferior_ptid = null_ptid;
3501   discard_all_inferiors ();
3502
3503   /* We are closing the remote target, so we should discard
3504      everything of this target.  */
3505   discard_pending_stop_replies_in_queue (rs);
3506
3507   if (remote_async_inferior_event_token)
3508     delete_async_event_handler (&remote_async_inferior_event_token);
3509
3510   remote_notif_state_xfree (rs->notif_state);
3511
3512   trace_reset_local_state ();
3513 }
3514
3515 /* Query the remote side for the text, data and bss offsets.  */
3516
3517 static void
3518 get_offsets (void)
3519 {
3520   struct remote_state *rs = get_remote_state ();
3521   char *buf;
3522   char *ptr;
3523   int lose, num_segments = 0, do_sections, do_segments;
3524   CORE_ADDR text_addr, data_addr, bss_addr, segments[2];
3525   struct section_offsets *offs;
3526   struct symfile_segment_data *data;
3527
3528   if (symfile_objfile == NULL)
3529     return;
3530
3531   putpkt ("qOffsets");
3532   getpkt (&rs->buf, &rs->buf_size, 0);
3533   buf = rs->buf;
3534
3535   if (buf[0] == '\000')
3536     return;                     /* Return silently.  Stub doesn't support
3537                                    this command.  */
3538   if (buf[0] == 'E')
3539     {
3540       warning (_("Remote failure reply: %s"), buf);
3541       return;
3542     }
3543
3544   /* Pick up each field in turn.  This used to be done with scanf, but
3545      scanf will make trouble if CORE_ADDR size doesn't match
3546      conversion directives correctly.  The following code will work
3547      with any size of CORE_ADDR.  */
3548   text_addr = data_addr = bss_addr = 0;
3549   ptr = buf;
3550   lose = 0;
3551
3552   if (startswith (ptr, "Text="))
3553     {
3554       ptr += 5;
3555       /* Don't use strtol, could lose on big values.  */
3556       while (*ptr && *ptr != ';')
3557         text_addr = (text_addr << 4) + fromhex (*ptr++);
3558
3559       if (startswith (ptr, ";Data="))
3560         {
3561           ptr += 6;
3562           while (*ptr && *ptr != ';')
3563             data_addr = (data_addr << 4) + fromhex (*ptr++);
3564         }
3565       else
3566         lose = 1;
3567
3568       if (!lose && startswith (ptr, ";Bss="))
3569         {
3570           ptr += 5;
3571           while (*ptr && *ptr != ';')
3572             bss_addr = (bss_addr << 4) + fromhex (*ptr++);
3573
3574           if (bss_addr != data_addr)
3575             warning (_("Target reported unsupported offsets: %s"), buf);
3576         }
3577       else
3578         lose = 1;
3579     }
3580   else if (startswith (ptr, "TextSeg="))
3581     {
3582       ptr += 8;
3583       /* Don't use strtol, could lose on big values.  */
3584       while (*ptr && *ptr != ';')
3585         text_addr = (text_addr << 4) + fromhex (*ptr++);
3586       num_segments = 1;
3587
3588       if (startswith (ptr, ";DataSeg="))
3589         {
3590           ptr += 9;
3591           while (*ptr && *ptr != ';')
3592             data_addr = (data_addr << 4) + fromhex (*ptr++);
3593           num_segments++;
3594         }
3595     }
3596   else
3597     lose = 1;
3598
3599   if (lose)
3600     error (_("Malformed response to offset query, %s"), buf);
3601   else if (*ptr != '\0')
3602     warning (_("Target reported unsupported offsets: %s"), buf);
3603
3604   offs = ((struct section_offsets *)
3605           alloca (SIZEOF_N_SECTION_OFFSETS (symfile_objfile->num_sections)));
3606   memcpy (offs, symfile_objfile->section_offsets,
3607           SIZEOF_N_SECTION_OFFSETS (symfile_objfile->num_sections));
3608
3609   data = get_symfile_segment_data (symfile_objfile->obfd);
3610   do_segments = (data != NULL);
3611   do_sections = num_segments == 0;
3612
3613   if (num_segments > 0)
3614     {
3615       segments[0] = text_addr;
3616       segments[1] = data_addr;
3617     }
3618   /* If we have two segments, we can still try to relocate everything
3619      by assuming that the .text and .data offsets apply to the whole
3620      text and data segments.  Convert the offsets given in the packet
3621      to base addresses for symfile_map_offsets_to_segments.  */
3622   else if (data && data->num_segments == 2)
3623     {
3624       segments[0] = data->segment_bases[0] + text_addr;
3625       segments[1] = data->segment_bases[1] + data_addr;
3626       num_segments = 2;
3627     }
3628   /* If the object file has only one segment, assume that it is text
3629      rather than data; main programs with no writable data are rare,
3630      but programs with no code are useless.  Of course the code might
3631      have ended up in the data segment... to detect that we would need
3632      the permissions here.  */
3633   else if (data && data->num_segments == 1)
3634     {
3635       segments[0] = data->segment_bases[0] + text_addr;
3636       num_segments = 1;
3637     }
3638   /* There's no way to relocate by segment.  */
3639   else
3640     do_segments = 0;
3641
3642   if (do_segments)
3643     {
3644       int ret = symfile_map_offsets_to_segments (symfile_objfile->obfd, data,
3645                                                  offs, num_segments, segments);
3646
3647       if (ret == 0 && !do_sections)
3648         error (_("Can not handle qOffsets TextSeg "
3649                  "response with this symbol file"));
3650
3651       if (ret > 0)
3652         do_sections = 0;
3653     }
3654
3655   if (data)
3656     free_symfile_segment_data (data);
3657
3658   if (do_sections)
3659     {
3660       offs->offsets[SECT_OFF_TEXT (symfile_objfile)] = text_addr;
3661
3662       /* This is a temporary kludge to force data and bss to use the
3663          same offsets because that's what nlmconv does now.  The real
3664          solution requires changes to the stub and remote.c that I
3665          don't have time to do right now.  */
3666
3667       offs->offsets[SECT_OFF_DATA (symfile_objfile)] = data_addr;
3668       offs->offsets[SECT_OFF_BSS (symfile_objfile)] = data_addr;
3669     }
3670
3671   objfile_relocate (symfile_objfile, offs);
3672 }
3673
3674 /* Send interrupt_sequence to remote target.  */
3675 static void
3676 send_interrupt_sequence (void)
3677 {
3678   struct remote_state *rs = get_remote_state ();
3679
3680   if (interrupt_sequence_mode == interrupt_sequence_control_c)
3681     remote_serial_write ("\x03", 1);
3682   else if (interrupt_sequence_mode == interrupt_sequence_break)
3683     serial_send_break (rs->remote_desc);
3684   else if (interrupt_sequence_mode == interrupt_sequence_break_g)
3685     {
3686       serial_send_break (rs->remote_desc);
3687       remote_serial_write ("g", 1);
3688     }
3689   else
3690     internal_error (__FILE__, __LINE__,
3691                     _("Invalid value for interrupt_sequence_mode: %s."),
3692                     interrupt_sequence_mode);
3693 }
3694
3695
3696 /* If STOP_REPLY is a T stop reply, look for the "thread" register,
3697    and extract the PTID.  Returns NULL_PTID if not found.  */
3698
3699 static ptid_t
3700 stop_reply_extract_thread (char *stop_reply)
3701 {
3702   if (stop_reply[0] == 'T' && strlen (stop_reply) > 3)
3703     {
3704       const char *p;
3705
3706       /* Txx r:val ; r:val (...)  */
3707       p = &stop_reply[3];
3708
3709       /* Look for "register" named "thread".  */
3710       while (*p != '\0')
3711         {
3712           const char *p1;
3713
3714           p1 = strchr (p, ':');
3715           if (p1 == NULL)
3716             return null_ptid;
3717
3718           if (strncmp (p, "thread", p1 - p) == 0)
3719             return read_ptid (++p1, &p);
3720
3721           p1 = strchr (p, ';');
3722           if (p1 == NULL)
3723             return null_ptid;
3724           p1++;
3725
3726           p = p1;
3727         }
3728     }
3729
3730   return null_ptid;
3731 }
3732
3733 /* Determine the remote side's current thread.  If we have a stop
3734    reply handy (in WAIT_STATUS), maybe it's a T stop reply with a
3735    "thread" register we can extract the current thread from.  If not,
3736    ask the remote which is the current thread with qC.  The former
3737    method avoids a roundtrip.  */
3738
3739 static ptid_t
3740 get_current_thread (char *wait_status)
3741 {
3742   ptid_t ptid = null_ptid;
3743
3744   /* Note we don't use remote_parse_stop_reply as that makes use of
3745      the target architecture, which we haven't yet fully determined at
3746      this point.  */
3747   if (wait_status != NULL)
3748     ptid = stop_reply_extract_thread (wait_status);
3749   if (ptid_equal (ptid, null_ptid))
3750     ptid = remote_current_thread (inferior_ptid);
3751
3752   return ptid;
3753 }
3754
3755 /* Query the remote target for which is the current thread/process,
3756    add it to our tables, and update INFERIOR_PTID.  The caller is
3757    responsible for setting the state such that the remote end is ready
3758    to return the current thread.
3759
3760    This function is called after handling the '?' or 'vRun' packets,
3761    whose response is a stop reply from which we can also try
3762    extracting the thread.  If the target doesn't support the explicit
3763    qC query, we infer the current thread from that stop reply, passed
3764    in in WAIT_STATUS, which may be NULL.  */
3765
3766 static void
3767 add_current_inferior_and_thread (char *wait_status)
3768 {
3769   struct remote_state *rs = get_remote_state ();
3770   int fake_pid_p = 0;
3771
3772   inferior_ptid = null_ptid;
3773
3774   /* Now, if we have thread information, update inferior_ptid.  */
3775   ptid_t curr_ptid = get_current_thread (wait_status);
3776
3777   if (curr_ptid != null_ptid)
3778     {
3779       if (!remote_multi_process_p (rs))
3780         fake_pid_p = 1;
3781     }
3782   else
3783     {
3784       /* Without this, some commands which require an active target
3785          (such as kill) won't work.  This variable serves (at least)
3786          double duty as both the pid of the target process (if it has
3787          such), and as a flag indicating that a target is active.  */
3788       curr_ptid = magic_null_ptid;
3789       fake_pid_p = 1;
3790     }
3791
3792   remote_add_inferior (fake_pid_p, ptid_get_pid (curr_ptid), -1, 1);
3793
3794   /* Add the main thread and switch to it.  Don't try reading
3795      registers yet, since we haven't fetched the target description
3796      yet.  */
3797   thread_info *tp = add_thread_silent (curr_ptid);
3798   switch_to_thread_no_regs (tp);
3799 }
3800
3801 /* Print info about a thread that was found already stopped on
3802    connection.  */
3803
3804 static void
3805 print_one_stopped_thread (struct thread_info *thread)
3806 {
3807   struct target_waitstatus *ws = &thread->suspend.waitstatus;
3808
3809   switch_to_thread (thread->ptid);
3810   stop_pc = get_frame_pc (get_current_frame ());
3811   set_current_sal_from_frame (get_current_frame ());
3812
3813   thread->suspend.waitstatus_pending_p = 0;
3814
3815   if (ws->kind == TARGET_WAITKIND_STOPPED)
3816     {
3817       enum gdb_signal sig = ws->value.sig;
3818
3819       if (signal_print_state (sig))
3820         observer_notify_signal_received (sig);
3821     }
3822   observer_notify_normal_stop (NULL, 1);
3823 }
3824
3825 /* Process all initial stop replies the remote side sent in response
3826    to the ? packet.  These indicate threads that were already stopped
3827    on initial connection.  We mark these threads as stopped and print
3828    their current frame before giving the user the prompt.  */
3829
3830 static void
3831 process_initial_stop_replies (int from_tty)
3832 {
3833   int pending_stop_replies = stop_reply_queue_length ();
3834   struct inferior *inf;
3835   struct thread_info *thread;
3836   struct thread_info *selected = NULL;
3837   struct thread_info *lowest_stopped = NULL;
3838   struct thread_info *first = NULL;
3839
3840   /* Consume the initial pending events.  */
3841   while (pending_stop_replies-- > 0)
3842     {
3843       ptid_t waiton_ptid = minus_one_ptid;
3844       ptid_t event_ptid;
3845       struct target_waitstatus ws;
3846       int ignore_event = 0;
3847       struct thread_info *thread;
3848
3849       memset (&ws, 0, sizeof (ws));
3850       event_ptid = target_wait (waiton_ptid, &ws, TARGET_WNOHANG);
3851       if (remote_debug)
3852         print_target_wait_results (waiton_ptid, event_ptid, &ws);
3853
3854       switch (ws.kind)
3855         {
3856         case TARGET_WAITKIND_IGNORE:
3857         case TARGET_WAITKIND_NO_RESUMED:
3858         case TARGET_WAITKIND_SIGNALLED:
3859         case TARGET_WAITKIND_EXITED:
3860           /* We shouldn't see these, but if we do, just ignore.  */
3861           if (remote_debug)
3862             fprintf_unfiltered (gdb_stdlog, "remote: event ignored\n");
3863           ignore_event = 1;
3864           break;
3865
3866         case TARGET_WAITKIND_EXECD:
3867           xfree (ws.value.execd_pathname);
3868           break;
3869         default:
3870           break;
3871         }
3872
3873       if (ignore_event)
3874         continue;
3875
3876       thread = find_thread_ptid (event_ptid);
3877
3878       if (ws.kind == TARGET_WAITKIND_STOPPED)
3879         {
3880           enum gdb_signal sig = ws.value.sig;
3881
3882           /* Stubs traditionally report SIGTRAP as initial signal,
3883              instead of signal 0.  Suppress it.  */
3884           if (sig == GDB_SIGNAL_TRAP)
3885             sig = GDB_SIGNAL_0;
3886           thread->suspend.stop_signal = sig;
3887           ws.value.sig = sig;
3888         }
3889
3890       thread->suspend.waitstatus = ws;
3891
3892       if (ws.kind != TARGET_WAITKIND_STOPPED
3893           || ws.value.sig != GDB_SIGNAL_0)
3894         thread->suspend.waitstatus_pending_p = 1;
3895
3896       set_executing (event_ptid, 0);
3897       set_running (event_ptid, 0);
3898       get_remote_thread_info (thread)->vcont_resumed = 0;
3899     }
3900
3901   /* "Notice" the new inferiors before anything related to
3902      registers/memory.  */
3903   ALL_INFERIORS (inf)
3904     {
3905       if (inf->pid == 0)
3906         continue;
3907
3908       inf->needs_setup = 1;
3909
3910       if (non_stop)
3911         {
3912           thread = any_live_thread_of_process (inf->pid);
3913           notice_new_inferior (thread->ptid,
3914                                thread->state == THREAD_RUNNING,
3915                                from_tty);
3916         }
3917     }
3918
3919   /* If all-stop on top of non-stop, pause all threads.  Note this
3920      records the threads' stop pc, so must be done after "noticing"
3921      the inferiors.  */
3922   if (!non_stop)
3923     {
3924       stop_all_threads ();
3925
3926       /* If all threads of an inferior were already stopped, we
3927          haven't setup the inferior yet.  */
3928       ALL_INFERIORS (inf)
3929         {
3930           if (inf->pid == 0)
3931             continue;
3932
3933           if (inf->needs_setup)
3934             {
3935               thread = any_live_thread_of_process (inf->pid);
3936               switch_to_thread_no_regs (thread);
3937               setup_inferior (0);
3938             }
3939         }
3940     }
3941
3942   /* Now go over all threads that are stopped, and print their current
3943      frame.  If all-stop, then if there's a signalled thread, pick
3944      that as current.  */
3945   ALL_NON_EXITED_THREADS (thread)
3946     {
3947       if (first == NULL)
3948         first = thread;
3949
3950       if (!non_stop)
3951         set_running (thread->ptid, 0);
3952       else if (thread->state != THREAD_STOPPED)
3953         continue;
3954
3955       if (selected == NULL
3956           && thread->suspend.waitstatus_pending_p)
3957         selected = thread;
3958
3959       if (lowest_stopped == NULL
3960           || thread->inf->num < lowest_stopped->inf->num
3961           || thread->per_inf_num < lowest_stopped->per_inf_num)
3962         lowest_stopped = thread;
3963
3964       if (non_stop)
3965         print_one_stopped_thread (thread);
3966     }
3967
3968   /* In all-stop, we only print the status of one thread, and leave
3969      others with their status pending.  */
3970   if (!non_stop)
3971     {
3972       thread = selected;
3973       if (thread == NULL)
3974         thread = lowest_stopped;
3975       if (thread == NULL)
3976         thread = first;
3977
3978       print_one_stopped_thread (thread);
3979     }
3980
3981   /* For "info program".  */
3982   thread = inferior_thread ();
3983   if (thread->state == THREAD_STOPPED)
3984     set_last_target_status (inferior_ptid, thread->suspend.waitstatus);
3985 }
3986
3987 /* Start the remote connection and sync state.  */
3988
3989 static void
3990 remote_start_remote (int from_tty, struct target_ops *target, int extended_p)
3991 {
3992   struct remote_state *rs = get_remote_state ();
3993   struct packet_config *noack_config;
3994   char *wait_status = NULL;
3995
3996   /* Signal other parts that we're going through the initial setup,
3997      and so things may not be stable yet.  E.g., we don't try to
3998      install tracepoints until we've relocated symbols.  Also, a
3999      Ctrl-C before we're connected and synced up can't interrupt the
4000      target.  Instead, it offers to drop the (potentially wedged)
4001      connection.  */
4002   rs->starting_up = 1;
4003
4004   QUIT;
4005
4006   if (interrupt_on_connect)
4007     send_interrupt_sequence ();
4008
4009   /* Ack any packet which the remote side has already sent.  */
4010   remote_serial_write ("+", 1);
4011
4012   /* The first packet we send to the target is the optional "supported
4013      packets" request.  If the target can answer this, it will tell us
4014      which later probes to skip.  */
4015   remote_query_supported ();
4016
4017   /* If the stub wants to get a QAllow, compose one and send it.  */
4018   if (packet_support (PACKET_QAllow) != PACKET_DISABLE)
4019     remote_set_permissions (target);
4020
4021   /* gdbserver < 7.7 (before its fix from 2013-12-11) did reply to any
4022      unknown 'v' packet with string "OK".  "OK" gets interpreted by GDB
4023      as a reply to known packet.  For packet "vFile:setfs:" it is an
4024      invalid reply and GDB would return error in
4025      remote_hostio_set_filesystem, making remote files access impossible.
4026      Disable "vFile:setfs:" in such case.  Do not disable other 'v' packets as
4027      other "vFile" packets get correctly detected even on gdbserver < 7.7.  */
4028   {
4029     const char v_mustreplyempty[] = "vMustReplyEmpty";
4030
4031     putpkt (v_mustreplyempty);
4032     getpkt (&rs->buf, &rs->buf_size, 0);
4033     if (strcmp (rs->buf, "OK") == 0)
4034       remote_protocol_packets[PACKET_vFile_setfs].support = PACKET_DISABLE;
4035     else if (strcmp (rs->buf, "") != 0)
4036       error (_("Remote replied unexpectedly to '%s': %s"), v_mustreplyempty,
4037              rs->buf);
4038   }
4039
4040   /* Next, we possibly activate noack mode.
4041
4042      If the QStartNoAckMode packet configuration is set to AUTO,
4043      enable noack mode if the stub reported a wish for it with
4044      qSupported.
4045
4046      If set to TRUE, then enable noack mode even if the stub didn't
4047      report it in qSupported.  If the stub doesn't reply OK, the
4048      session ends with an error.
4049
4050      If FALSE, then don't activate noack mode, regardless of what the
4051      stub claimed should be the default with qSupported.  */
4052
4053   noack_config = &remote_protocol_packets[PACKET_QStartNoAckMode];
4054   if (packet_config_support (noack_config) != PACKET_DISABLE)
4055     {
4056       putpkt ("QStartNoAckMode");
4057       getpkt (&rs->buf, &rs->buf_size, 0);
4058       if (packet_ok (rs->buf, noack_config) == PACKET_OK)
4059         rs->noack_mode = 1;
4060     }
4061
4062   if (extended_p)
4063     {
4064       /* Tell the remote that we are using the extended protocol.  */
4065       putpkt ("!");
4066       getpkt (&rs->buf, &rs->buf_size, 0);
4067     }
4068
4069   /* Let the target know which signals it is allowed to pass down to
4070      the program.  */
4071   update_signals_program_target ();
4072
4073   /* Next, if the target can specify a description, read it.  We do
4074      this before anything involving memory or registers.  */
4075   target_find_description ();
4076
4077   /* Next, now that we know something about the target, update the
4078      address spaces in the program spaces.  */
4079   update_address_spaces ();
4080
4081   /* On OSs where the list of libraries is global to all
4082      processes, we fetch them early.  */
4083   if (gdbarch_has_global_solist (target_gdbarch ()))
4084     solib_add (NULL, from_tty, auto_solib_add);
4085
4086   if (target_is_non_stop_p ())
4087     {
4088       if (packet_support (PACKET_QNonStop) != PACKET_ENABLE)
4089         error (_("Non-stop mode requested, but remote "
4090                  "does not support non-stop"));
4091
4092       putpkt ("QNonStop:1");
4093       getpkt (&rs->buf, &rs->buf_size, 0);
4094
4095       if (strcmp (rs->buf, "OK") != 0)
4096         error (_("Remote refused setting non-stop mode with: %s"), rs->buf);
4097
4098       /* Find about threads and processes the stub is already
4099          controlling.  We default to adding them in the running state.
4100          The '?' query below will then tell us about which threads are
4101          stopped.  */
4102       remote_update_thread_list (target);
4103     }
4104   else if (packet_support (PACKET_QNonStop) == PACKET_ENABLE)
4105     {
4106       /* Don't assume that the stub can operate in all-stop mode.
4107          Request it explicitly.  */
4108       putpkt ("QNonStop:0");
4109       getpkt (&rs->buf, &rs->buf_size, 0);
4110
4111       if (strcmp (rs->buf, "OK") != 0)
4112         error (_("Remote refused setting all-stop mode with: %s"), rs->buf);
4113     }
4114
4115   /* Upload TSVs regardless of whether the target is running or not.  The
4116      remote stub, such as GDBserver, may have some predefined or builtin
4117      TSVs, even if the target is not running.  */
4118   if (remote_get_trace_status (target, current_trace_status ()) != -1)
4119     {
4120       struct uploaded_tsv *uploaded_tsvs = NULL;
4121
4122       remote_upload_trace_state_variables (target, &uploaded_tsvs);
4123       merge_uploaded_trace_state_variables (&uploaded_tsvs);
4124     }
4125
4126   /* Check whether the target is running now.  */
4127   putpkt ("?");
4128   getpkt (&rs->buf, &rs->buf_size, 0);
4129
4130   if (!target_is_non_stop_p ())
4131     {
4132       if (rs->buf[0] == 'W' || rs->buf[0] == 'X')
4133         {
4134           if (!extended_p)
4135             error (_("The target is not running (try extended-remote?)"));
4136
4137           /* We're connected, but not running.  Drop out before we
4138              call start_remote.  */
4139           rs->starting_up = 0;
4140           return;
4141         }
4142       else
4143         {
4144           /* Save the reply for later.  */
4145           wait_status = (char *) alloca (strlen (rs->buf) + 1);
4146           strcpy (wait_status, rs->buf);
4147         }
4148
4149       /* Fetch thread list.  */
4150       target_update_thread_list ();
4151
4152       /* Let the stub know that we want it to return the thread.  */
4153       set_continue_thread (minus_one_ptid);
4154
4155       if (thread_count () == 0)
4156         {
4157           /* Target has no concept of threads at all.  GDB treats
4158              non-threaded target as single-threaded; add a main
4159              thread.  */
4160           add_current_inferior_and_thread (wait_status);
4161         }
4162       else
4163         {
4164           /* We have thread information; select the thread the target
4165              says should be current.  If we're reconnecting to a
4166              multi-threaded program, this will ideally be the thread
4167              that last reported an event before GDB disconnected.  */
4168           inferior_ptid = get_current_thread (wait_status);
4169           if (ptid_equal (inferior_ptid, null_ptid))
4170             {
4171               /* Odd... The target was able to list threads, but not
4172                  tell us which thread was current (no "thread"
4173                  register in T stop reply?).  Just pick the first
4174                  thread in the thread list then.  */
4175               
4176               if (remote_debug)
4177                 fprintf_unfiltered (gdb_stdlog,
4178                                     "warning: couldn't determine remote "
4179                                     "current thread; picking first in list.\n");
4180
4181               inferior_ptid = thread_list->ptid;
4182             }
4183         }
4184
4185       /* init_wait_for_inferior should be called before get_offsets in order
4186          to manage `inserted' flag in bp loc in a correct state.
4187          breakpoint_init_inferior, called from init_wait_for_inferior, set
4188          `inserted' flag to 0, while before breakpoint_re_set, called from
4189          start_remote, set `inserted' flag to 1.  In the initialization of
4190          inferior, breakpoint_init_inferior should be called first, and then
4191          breakpoint_re_set can be called.  If this order is broken, state of
4192          `inserted' flag is wrong, and cause some problems on breakpoint
4193          manipulation.  */
4194       init_wait_for_inferior ();
4195
4196       get_offsets ();           /* Get text, data & bss offsets.  */
4197
4198       /* If we could not find a description using qXfer, and we know
4199          how to do it some other way, try again.  This is not
4200          supported for non-stop; it could be, but it is tricky if
4201          there are no stopped threads when we connect.  */
4202       if (remote_read_description_p (target)
4203           && gdbarch_target_desc (target_gdbarch ()) == NULL)
4204         {
4205           target_clear_description ();
4206           target_find_description ();
4207         }
4208
4209       /* Use the previously fetched status.  */
4210       gdb_assert (wait_status != NULL);
4211       strcpy (rs->buf, wait_status);
4212       rs->cached_wait_status = 1;
4213
4214       start_remote (from_tty); /* Initialize gdb process mechanisms.  */
4215     }
4216   else
4217     {
4218       /* Clear WFI global state.  Do this before finding about new
4219          threads and inferiors, and setting the current inferior.
4220          Otherwise we would clear the proceed status of the current
4221          inferior when we want its stop_soon state to be preserved
4222          (see notice_new_inferior).  */
4223       init_wait_for_inferior ();
4224
4225       /* In non-stop, we will either get an "OK", meaning that there
4226          are no stopped threads at this time; or, a regular stop
4227          reply.  In the latter case, there may be more than one thread
4228          stopped --- we pull them all out using the vStopped
4229          mechanism.  */
4230       if (strcmp (rs->buf, "OK") != 0)
4231         {
4232           struct notif_client *notif = &notif_client_stop;
4233
4234           /* remote_notif_get_pending_replies acks this one, and gets
4235              the rest out.  */
4236           rs->notif_state->pending_event[notif_client_stop.id]
4237             = remote_notif_parse (notif, rs->buf);
4238           remote_notif_get_pending_events (notif);
4239         }
4240
4241       if (thread_count () == 0)
4242         {
4243           if (!extended_p)
4244             error (_("The target is not running (try extended-remote?)"));
4245
4246           /* We're connected, but not running.  Drop out before we
4247              call start_remote.  */
4248           rs->starting_up = 0;
4249           return;
4250         }
4251
4252       /* In non-stop mode, any cached wait status will be stored in
4253          the stop reply queue.  */
4254       gdb_assert (wait_status == NULL);
4255
4256       /* Report all signals during attach/startup.  */
4257       remote_pass_signals (target, 0, NULL);
4258
4259       /* If there are already stopped threads, mark them stopped and
4260          report their stops before giving the prompt to the user.  */
4261       process_initial_stop_replies (from_tty);
4262
4263       if (target_can_async_p ())
4264         target_async (1);
4265     }
4266
4267   /* If we connected to a live target, do some additional setup.  */
4268   if (target_has_execution)
4269     {
4270       if (symfile_objfile)      /* No use without a symbol-file.  */
4271         remote_check_symbols ();
4272     }
4273
4274   /* Possibly the target has been engaged in a trace run started
4275      previously; find out where things are at.  */
4276   if (remote_get_trace_status (target, current_trace_status ()) != -1)
4277     {
4278       struct uploaded_tp *uploaded_tps = NULL;
4279
4280       if (current_trace_status ()->running)
4281         printf_filtered (_("Trace is already running on the target.\n"));
4282
4283       remote_upload_tracepoints (target, &uploaded_tps);
4284
4285       merge_uploaded_tracepoints (&uploaded_tps);
4286     }
4287
4288   /* Possibly the target has been engaged in a btrace record started
4289      previously; find out where things are at.  */
4290   remote_btrace_maybe_reopen ();
4291
4292   /* The thread and inferior lists are now synchronized with the
4293      target, our symbols have been relocated, and we're merged the
4294      target's tracepoints with ours.  We're done with basic start
4295      up.  */
4296   rs->starting_up = 0;
4297
4298   /* Maybe breakpoints are global and need to be inserted now.  */
4299   if (breakpoints_should_be_inserted_now ())
4300     insert_breakpoints ();
4301 }
4302
4303 /* Open a connection to a remote debugger.
4304    NAME is the filename used for communication.  */
4305
4306 static void
4307 remote_open (const char *name, int from_tty)
4308 {
4309   remote_open_1 (name, from_tty, &remote_ops, 0);
4310 }
4311
4312 /* Open a connection to a remote debugger using the extended
4313    remote gdb protocol.  NAME is the filename used for communication.  */
4314
4315 static void
4316 extended_remote_open (const char *name, int from_tty)
4317 {
4318   remote_open_1 (name, from_tty, &extended_remote_ops, 1 /*extended_p */);
4319 }
4320
4321 /* Reset all packets back to "unknown support".  Called when opening a
4322    new connection to a remote target.  */
4323
4324 static void
4325 reset_all_packet_configs_support (void)
4326 {
4327   int i;
4328
4329   for (i = 0; i < PACKET_MAX; i++)
4330     remote_protocol_packets[i].support = PACKET_SUPPORT_UNKNOWN;
4331 }
4332
4333 /* Initialize all packet configs.  */
4334
4335 static void
4336 init_all_packet_configs (void)
4337 {
4338   int i;
4339
4340   for (i = 0; i < PACKET_MAX; i++)
4341     {
4342       remote_protocol_packets[i].detect = AUTO_BOOLEAN_AUTO;
4343       remote_protocol_packets[i].support = PACKET_SUPPORT_UNKNOWN;
4344     }
4345 }
4346
4347 /* Symbol look-up.  */
4348
4349 static void
4350 remote_check_symbols (void)
4351 {
4352   char *msg, *reply, *tmp;
4353   int end;
4354   long reply_size;
4355   struct cleanup *old_chain;
4356
4357   /* The remote side has no concept of inferiors that aren't running
4358      yet, it only knows about running processes.  If we're connected
4359      but our current inferior is not running, we should not invite the
4360      remote target to request symbol lookups related to its
4361      (unrelated) current process.  */
4362   if (!target_has_execution)
4363     return;
4364
4365   if (packet_support (PACKET_qSymbol) == PACKET_DISABLE)
4366     return;
4367
4368   /* Make sure the remote is pointing at the right process.  Note
4369      there's no way to select "no process".  */
4370   set_general_process ();
4371
4372   /* Allocate a message buffer.  We can't reuse the input buffer in RS,
4373      because we need both at the same time.  */
4374   msg = (char *) xmalloc (get_remote_packet_size ());
4375   old_chain = make_cleanup (xfree, msg);
4376   reply = (char *) xmalloc (get_remote_packet_size ());
4377   make_cleanup (free_current_contents, &reply);
4378   reply_size = get_remote_packet_size ();
4379
4380   /* Invite target to request symbol lookups.  */
4381
4382   putpkt ("qSymbol::");
4383   getpkt (&reply, &reply_size, 0);
4384   packet_ok (reply, &remote_protocol_packets[PACKET_qSymbol]);
4385
4386   while (startswith (reply, "qSymbol:"))
4387     {
4388       struct bound_minimal_symbol sym;
4389
4390       tmp = &reply[8];
4391       end = hex2bin (tmp, (gdb_byte *) msg, strlen (tmp) / 2);
4392       msg[end] = '\0';
4393       sym = lookup_minimal_symbol (msg, NULL, NULL);
4394       if (sym.minsym == NULL)
4395         xsnprintf (msg, get_remote_packet_size (), "qSymbol::%s", &reply[8]);
4396       else
4397         {
4398           int addr_size = gdbarch_addr_bit (target_gdbarch ()) / 8;
4399           CORE_ADDR sym_addr = BMSYMBOL_VALUE_ADDRESS (sym);
4400
4401           /* If this is a function address, return the start of code
4402              instead of any data function descriptor.  */
4403           sym_addr = gdbarch_convert_from_func_ptr_addr (target_gdbarch (),
4404                                                          sym_addr,
4405                                                          &current_target);
4406
4407           xsnprintf (msg, get_remote_packet_size (), "qSymbol:%s:%s",
4408                      phex_nz (sym_addr, addr_size), &reply[8]);
4409         }
4410   
4411       putpkt (msg);
4412       getpkt (&reply, &reply_size, 0);
4413     }
4414
4415   do_cleanups (old_chain);
4416 }
4417
4418 static struct serial *
4419 remote_serial_open (const char *name)
4420 {
4421   static int udp_warning = 0;
4422
4423   /* FIXME: Parsing NAME here is a hack.  But we want to warn here instead
4424      of in ser-tcp.c, because it is the remote protocol assuming that the
4425      serial connection is reliable and not the serial connection promising
4426      to be.  */
4427   if (!udp_warning && startswith (name, "udp:"))
4428     {
4429       warning (_("The remote protocol may be unreliable over UDP.\n"
4430                  "Some events may be lost, rendering further debugging "
4431                  "impossible."));
4432       udp_warning = 1;
4433     }
4434
4435   return serial_open (name);
4436 }
4437
4438 /* Inform the target of our permission settings.  The permission flags
4439    work without this, but if the target knows the settings, it can do
4440    a couple things.  First, it can add its own check, to catch cases
4441    that somehow manage to get by the permissions checks in target
4442    methods.  Second, if the target is wired to disallow particular
4443    settings (for instance, a system in the field that is not set up to
4444    be able to stop at a breakpoint), it can object to any unavailable
4445    permissions.  */
4446
4447 void
4448 remote_set_permissions (struct target_ops *self)
4449 {
4450   struct remote_state *rs = get_remote_state ();
4451
4452   xsnprintf (rs->buf, get_remote_packet_size (), "QAllow:"
4453              "WriteReg:%x;WriteMem:%x;"
4454              "InsertBreak:%x;InsertTrace:%x;"
4455              "InsertFastTrace:%x;Stop:%x",
4456              may_write_registers, may_write_memory,
4457              may_insert_breakpoints, may_insert_tracepoints,
4458              may_insert_fast_tracepoints, may_stop);
4459   putpkt (rs->buf);
4460   getpkt (&rs->buf, &rs->buf_size, 0);
4461
4462   /* If the target didn't like the packet, warn the user.  Do not try
4463      to undo the user's settings, that would just be maddening.  */
4464   if (strcmp (rs->buf, "OK") != 0)
4465     warning (_("Remote refused setting permissions with: %s"), rs->buf);
4466 }
4467
4468 /* This type describes each known response to the qSupported
4469    packet.  */
4470 struct protocol_feature
4471 {
4472   /* The name of this protocol feature.  */
4473   const char *name;
4474
4475   /* The default for this protocol feature.  */
4476   enum packet_support default_support;
4477
4478   /* The function to call when this feature is reported, or after
4479      qSupported processing if the feature is not supported.
4480      The first argument points to this structure.  The second
4481      argument indicates whether the packet requested support be
4482      enabled, disabled, or probed (or the default, if this function
4483      is being called at the end of processing and this feature was
4484      not reported).  The third argument may be NULL; if not NULL, it
4485      is a NUL-terminated string taken from the packet following
4486      this feature's name and an equals sign.  */
4487   void (*func) (const struct protocol_feature *, enum packet_support,
4488                 const char *);
4489
4490   /* The corresponding packet for this feature.  Only used if
4491      FUNC is remote_supported_packet.  */
4492   int packet;
4493 };
4494
4495 static void
4496 remote_supported_packet (const struct protocol_feature *feature,
4497                          enum packet_support support,
4498                          const char *argument)
4499 {
4500   if (argument)
4501     {
4502       warning (_("Remote qSupported response supplied an unexpected value for"
4503                  " \"%s\"."), feature->name);
4504       return;
4505     }
4506
4507   remote_protocol_packets[feature->packet].support = support;
4508 }
4509
4510 static void
4511 remote_packet_size (const struct protocol_feature *feature,
4512                     enum packet_support support, const char *value)
4513 {
4514   struct remote_state *rs = get_remote_state ();
4515
4516   int packet_size;
4517   char *value_end;
4518
4519   if (support != PACKET_ENABLE)
4520     return;
4521
4522   if (value == NULL || *value == '\0')
4523     {
4524       warning (_("Remote target reported \"%s\" without a size."),
4525                feature->name);
4526       return;
4527     }
4528
4529   errno = 0;
4530   packet_size = strtol (value, &value_end, 16);
4531   if (errno != 0 || *value_end != '\0' || packet_size < 0)
4532     {
4533       warning (_("Remote target reported \"%s\" with a bad size: \"%s\"."),
4534                feature->name, value);
4535       return;
4536     }
4537
4538   /* Record the new maximum packet size.  */
4539   rs->explicit_packet_size = packet_size;
4540 }
4541
4542 static const struct protocol_feature remote_protocol_features[] = {
4543   { "PacketSize", PACKET_DISABLE, remote_packet_size, -1 },
4544   { "qXfer:auxv:read", PACKET_DISABLE, remote_supported_packet,
4545     PACKET_qXfer_auxv },
4546   { "qXfer:exec-file:read", PACKET_DISABLE, remote_supported_packet,
4547     PACKET_qXfer_exec_file },
4548   { "qXfer:features:read", PACKET_DISABLE, remote_supported_packet,
4549     PACKET_qXfer_features },
4550   { "qXfer:libraries:read", PACKET_DISABLE, remote_supported_packet,
4551     PACKET_qXfer_libraries },
4552   { "qXfer:libraries-svr4:read", PACKET_DISABLE, remote_supported_packet,
4553     PACKET_qXfer_libraries_svr4 },
4554   { "augmented-libraries-svr4-read", PACKET_DISABLE,
4555     remote_supported_packet, PACKET_augmented_libraries_svr4_read_feature },
4556   { "qXfer:memory-map:read", PACKET_DISABLE, remote_supported_packet,
4557     PACKET_qXfer_memory_map },
4558   { "qXfer:spu:read", PACKET_DISABLE, remote_supported_packet,
4559     PACKET_qXfer_spu_read },
4560   { "qXfer:spu:write", PACKET_DISABLE, remote_supported_packet,
4561     PACKET_qXfer_spu_write },
4562   { "qXfer:osdata:read", PACKET_DISABLE, remote_supported_packet,
4563     PACKET_qXfer_osdata },
4564   { "qXfer:threads:read", PACKET_DISABLE, remote_supported_packet,
4565     PACKET_qXfer_threads },
4566   { "qXfer:traceframe-info:read", PACKET_DISABLE, remote_supported_packet,
4567     PACKET_qXfer_traceframe_info },
4568   { "QPassSignals", PACKET_DISABLE, remote_supported_packet,
4569     PACKET_QPassSignals },
4570   { "QCatchSyscalls", PACKET_DISABLE, remote_supported_packet,
4571     PACKET_QCatchSyscalls },
4572   { "QProgramSignals", PACKET_DISABLE, remote_supported_packet,
4573     PACKET_QProgramSignals },
4574   { "QSetWorkingDir", PACKET_DISABLE, remote_supported_packet,
4575     PACKET_QSetWorkingDir },
4576   { "QStartupWithShell", PACKET_DISABLE, remote_supported_packet,
4577     PACKET_QStartupWithShell },
4578   { "QEnvironmentHexEncoded", PACKET_DISABLE, remote_supported_packet,
4579     PACKET_QEnvironmentHexEncoded },
4580   { "QEnvironmentReset", PACKET_DISABLE, remote_supported_packet,
4581     PACKET_QEnvironmentReset },
4582   { "QEnvironmentUnset", PACKET_DISABLE, remote_supported_packet,
4583     PACKET_QEnvironmentUnset },
4584   { "QStartNoAckMode", PACKET_DISABLE, remote_supported_packet,
4585     PACKET_QStartNoAckMode },
4586   { "multiprocess", PACKET_DISABLE, remote_supported_packet,
4587     PACKET_multiprocess_feature },
4588   { "QNonStop", PACKET_DISABLE, remote_supported_packet, PACKET_QNonStop },
4589   { "qXfer:siginfo:read", PACKET_DISABLE, remote_supported_packet,
4590     PACKET_qXfer_siginfo_read },
4591   { "qXfer:siginfo:write", PACKET_DISABLE, remote_supported_packet,
4592     PACKET_qXfer_siginfo_write },
4593   { "ConditionalTracepoints", PACKET_DISABLE, remote_supported_packet,
4594     PACKET_ConditionalTracepoints },
4595   { "ConditionalBreakpoints", PACKET_DISABLE, remote_supported_packet,
4596     PACKET_ConditionalBreakpoints },
4597   { "BreakpointCommands", PACKET_DISABLE, remote_supported_packet,
4598     PACKET_BreakpointCommands },
4599   { "FastTracepoints", PACKET_DISABLE, remote_supported_packet,
4600     PACKET_FastTracepoints },
4601   { "StaticTracepoints", PACKET_DISABLE, remote_supported_packet,
4602     PACKET_StaticTracepoints },
4603   {"InstallInTrace", PACKET_DISABLE, remote_supported_packet,
4604    PACKET_InstallInTrace},
4605   { "DisconnectedTracing", PACKET_DISABLE, remote_supported_packet,
4606     PACKET_DisconnectedTracing_feature },
4607   { "ReverseContinue", PACKET_DISABLE, remote_supported_packet,
4608     PACKET_bc },
4609   { "ReverseStep", PACKET_DISABLE, remote_supported_packet,
4610     PACKET_bs },
4611   { "TracepointSource", PACKET_DISABLE, remote_supported_packet,
4612     PACKET_TracepointSource },
4613   { "QAllow", PACKET_DISABLE, remote_supported_packet,
4614     PACKET_QAllow },
4615   { "EnableDisableTracepoints", PACKET_DISABLE, remote_supported_packet,
4616     PACKET_EnableDisableTracepoints_feature },
4617   { "qXfer:fdpic:read", PACKET_DISABLE, remote_supported_packet,
4618     PACKET_qXfer_fdpic },
4619   { "qXfer:uib:read", PACKET_DISABLE, remote_supported_packet,
4620     PACKET_qXfer_uib },
4621   { "QDisableRandomization", PACKET_DISABLE, remote_supported_packet,
4622     PACKET_QDisableRandomization },
4623   { "QAgent", PACKET_DISABLE, remote_supported_packet, PACKET_QAgent},
4624   { "QTBuffer:size", PACKET_DISABLE,
4625     remote_supported_packet, PACKET_QTBuffer_size},
4626   { "tracenz", PACKET_DISABLE, remote_supported_packet, PACKET_tracenz_feature },
4627   { "Qbtrace:off", PACKET_DISABLE, remote_supported_packet, PACKET_Qbtrace_off },
4628   { "Qbtrace:bts", PACKET_DISABLE, remote_supported_packet, PACKET_Qbtrace_bts },
4629   { "Qbtrace:pt", PACKET_DISABLE, remote_supported_packet, PACKET_Qbtrace_pt },
4630   { "qXfer:btrace:read", PACKET_DISABLE, remote_supported_packet,
4631     PACKET_qXfer_btrace },
4632   { "qXfer:btrace-conf:read", PACKET_DISABLE, remote_supported_packet,
4633     PACKET_qXfer_btrace_conf },
4634   { "Qbtrace-conf:bts:size", PACKET_DISABLE, remote_supported_packet,
4635     PACKET_Qbtrace_conf_bts_size },
4636   { "swbreak", PACKET_DISABLE, remote_supported_packet, PACKET_swbreak_feature },
4637   { "hwbreak", PACKET_DISABLE, remote_supported_packet, PACKET_hwbreak_feature },
4638   { "fork-events", PACKET_DISABLE, remote_supported_packet,
4639     PACKET_fork_event_feature },
4640   { "vfork-events", PACKET_DISABLE, remote_supported_packet,
4641     PACKET_vfork_event_feature },
4642   { "exec-events", PACKET_DISABLE, remote_supported_packet,
4643     PACKET_exec_event_feature },
4644   { "Qbtrace-conf:pt:size", PACKET_DISABLE, remote_supported_packet,
4645     PACKET_Qbtrace_conf_pt_size },
4646   { "vContSupported", PACKET_DISABLE, remote_supported_packet, PACKET_vContSupported },
4647   { "QThreadEvents", PACKET_DISABLE, remote_supported_packet, PACKET_QThreadEvents },
4648   { "no-resumed", PACKET_DISABLE, remote_supported_packet, PACKET_no_resumed },
4649 };
4650
4651 static char *remote_support_xml;
4652
4653 /* Register string appended to "xmlRegisters=" in qSupported query.  */
4654
4655 void
4656 register_remote_support_xml (const char *xml)
4657 {
4658 #if defined(HAVE_LIBEXPAT)
4659   if (remote_support_xml == NULL)
4660     remote_support_xml = concat ("xmlRegisters=", xml, (char *) NULL);
4661   else
4662     {
4663       char *copy = xstrdup (remote_support_xml + 13);
4664       char *p = strtok (copy, ",");
4665
4666       do
4667         {
4668           if (strcmp (p, xml) == 0)
4669             {
4670               /* already there */
4671               xfree (copy);
4672               return;
4673             }
4674         }
4675       while ((p = strtok (NULL, ",")) != NULL);
4676       xfree (copy);
4677
4678       remote_support_xml = reconcat (remote_support_xml,
4679                                      remote_support_xml, ",", xml,
4680                                      (char *) NULL);
4681     }
4682 #endif
4683 }
4684
4685 static char *
4686 remote_query_supported_append (char *msg, const char *append)
4687 {
4688   if (msg)
4689     return reconcat (msg, msg, ";", append, (char *) NULL);
4690   else
4691     return xstrdup (append);
4692 }
4693
4694 static void
4695 remote_query_supported (void)
4696 {
4697   struct remote_state *rs = get_remote_state ();
4698   char *next;
4699   int i;
4700   unsigned char seen [ARRAY_SIZE (remote_protocol_features)];
4701
4702   /* The packet support flags are handled differently for this packet
4703      than for most others.  We treat an error, a disabled packet, and
4704      an empty response identically: any features which must be reported
4705      to be used will be automatically disabled.  An empty buffer
4706      accomplishes this, since that is also the representation for a list
4707      containing no features.  */
4708
4709   rs->buf[0] = 0;
4710   if (packet_support (PACKET_qSupported) != PACKET_DISABLE)
4711     {
4712       char *q = NULL;
4713       struct cleanup *old_chain = make_cleanup (free_current_contents, &q);
4714
4715       if (packet_set_cmd_state (PACKET_multiprocess_feature) != AUTO_BOOLEAN_FALSE)
4716         q = remote_query_supported_append (q, "multiprocess+");
4717
4718       if (packet_set_cmd_state (PACKET_swbreak_feature) != AUTO_BOOLEAN_FALSE)
4719         q = remote_query_supported_append (q, "swbreak+");
4720       if (packet_set_cmd_state (PACKET_hwbreak_feature) != AUTO_BOOLEAN_FALSE)
4721         q = remote_query_supported_append (q, "hwbreak+");
4722
4723       q = remote_query_supported_append (q, "qRelocInsn+");
4724
4725       if (packet_set_cmd_state (PACKET_fork_event_feature)
4726           != AUTO_BOOLEAN_FALSE)
4727         q = remote_query_supported_append (q, "fork-events+");
4728       if (packet_set_cmd_state (PACKET_vfork_event_feature)
4729           != AUTO_BOOLEAN_FALSE)
4730         q = remote_query_supported_append (q, "vfork-events+");
4731       if (packet_set_cmd_state (PACKET_exec_event_feature)
4732           != AUTO_BOOLEAN_FALSE)
4733         q = remote_query_supported_append (q, "exec-events+");
4734
4735       if (packet_set_cmd_state (PACKET_vContSupported) != AUTO_BOOLEAN_FALSE)
4736         q = remote_query_supported_append (q, "vContSupported+");
4737
4738       if (packet_set_cmd_state (PACKET_QThreadEvents) != AUTO_BOOLEAN_FALSE)
4739         q = remote_query_supported_append (q, "QThreadEvents+");
4740
4741       if (packet_set_cmd_state (PACKET_no_resumed) != AUTO_BOOLEAN_FALSE)
4742         q = remote_query_supported_append (q, "no-resumed+");
4743
4744       /* Keep this one last to work around a gdbserver <= 7.10 bug in
4745          the qSupported:xmlRegisters=i386 handling.  */
4746       if (remote_support_xml != NULL
4747           && packet_support (PACKET_qXfer_features) != PACKET_DISABLE)
4748         q = remote_query_supported_append (q, remote_support_xml);
4749
4750       q = reconcat (q, "qSupported:", q, (char *) NULL);
4751       putpkt (q);
4752
4753       do_cleanups (old_chain);
4754
4755       getpkt (&rs->buf, &rs->buf_size, 0);
4756
4757       /* If an error occured, warn, but do not return - just reset the
4758          buffer to empty and go on to disable features.  */
4759       if (packet_ok (rs->buf, &remote_protocol_packets[PACKET_qSupported])
4760           == PACKET_ERROR)
4761         {
4762           warning (_("Remote failure reply: %s"), rs->buf);
4763           rs->buf[0] = 0;
4764         }
4765     }
4766
4767   memset (seen, 0, sizeof (seen));
4768
4769   next = rs->buf;
4770   while (*next)
4771     {
4772       enum packet_support is_supported;
4773       char *p, *end, *name_end, *value;
4774
4775       /* First separate out this item from the rest of the packet.  If
4776          there's another item after this, we overwrite the separator
4777          (terminated strings are much easier to work with).  */
4778       p = next;
4779       end = strchr (p, ';');
4780       if (end == NULL)
4781         {
4782           end = p + strlen (p);
4783           next = end;
4784         }
4785       else
4786         {
4787           *end = '\0';
4788           next = end + 1;
4789
4790           if (end == p)
4791             {
4792               warning (_("empty item in \"qSupported\" response"));
4793               continue;
4794             }
4795         }
4796
4797       name_end = strchr (p, '=');
4798       if (name_end)
4799         {
4800           /* This is a name=value entry.  */
4801           is_supported = PACKET_ENABLE;
4802           value = name_end + 1;
4803           *name_end = '\0';
4804         }
4805       else
4806         {
4807           value = NULL;
4808           switch (end[-1])
4809             {
4810             case '+':
4811               is_supported = PACKET_ENABLE;
4812               break;
4813
4814             case '-':
4815               is_supported = PACKET_DISABLE;
4816               break;
4817
4818             case '?':
4819               is_supported = PACKET_SUPPORT_UNKNOWN;
4820               break;
4821
4822             default:
4823               warning (_("unrecognized item \"%s\" "
4824                          "in \"qSupported\" response"), p);
4825               continue;
4826             }
4827           end[-1] = '\0';
4828         }
4829
4830       for (i = 0; i < ARRAY_SIZE (remote_protocol_features); i++)
4831         if (strcmp (remote_protocol_features[i].name, p) == 0)
4832           {
4833             const struct protocol_feature *feature;
4834
4835             seen[i] = 1;
4836             feature = &remote_protocol_features[i];
4837             feature->func (feature, is_supported, value);
4838             break;
4839           }
4840     }
4841
4842   /* If we increased the packet size, make sure to increase the global
4843      buffer size also.  We delay this until after parsing the entire
4844      qSupported packet, because this is the same buffer we were
4845      parsing.  */
4846   if (rs->buf_size < rs->explicit_packet_size)
4847     {
4848       rs->buf_size = rs->explicit_packet_size;
4849       rs->buf = (char *) xrealloc (rs->buf, rs->buf_size);
4850     }
4851
4852   /* Handle the defaults for unmentioned features.  */
4853   for (i = 0; i < ARRAY_SIZE (remote_protocol_features); i++)
4854     if (!seen[i])
4855       {
4856         const struct protocol_feature *feature;
4857
4858         feature = &remote_protocol_features[i];
4859         feature->func (feature, feature->default_support, NULL);
4860       }
4861 }
4862
4863 /* Serial QUIT handler for the remote serial descriptor.
4864
4865    Defers handling a Ctrl-C until we're done with the current
4866    command/response packet sequence, unless:
4867
4868    - We're setting up the connection.  Don't send a remote interrupt
4869      request, as we're not fully synced yet.  Quit immediately
4870      instead.
4871
4872    - The target has been resumed in the foreground
4873      (target_terminal::is_ours is false) with a synchronous resume
4874      packet, and we're blocked waiting for the stop reply, thus a
4875      Ctrl-C should be immediately sent to the target.
4876
4877    - We get a second Ctrl-C while still within the same serial read or
4878      write.  In that case the serial is seemingly wedged --- offer to
4879      quit/disconnect.
4880
4881    - We see a second Ctrl-C without target response, after having
4882      previously interrupted the target.  In that case the target/stub
4883      is probably wedged --- offer to quit/disconnect.
4884 */
4885
4886 static void
4887 remote_serial_quit_handler (void)
4888 {
4889   struct remote_state *rs = get_remote_state ();
4890
4891   if (check_quit_flag ())
4892     {
4893       /* If we're starting up, we're not fully synced yet.  Quit
4894          immediately.  */
4895       if (rs->starting_up)
4896         quit ();
4897       else if (rs->got_ctrlc_during_io)
4898         {
4899           if (query (_("The target is not responding to GDB commands.\n"
4900                        "Stop debugging it? ")))
4901             remote_unpush_and_throw ();
4902         }
4903       /* If ^C has already been sent once, offer to disconnect.  */
4904       else if (!target_terminal::is_ours () && rs->ctrlc_pending_p)
4905         interrupt_query ();
4906       /* All-stop protocol, and blocked waiting for stop reply.  Send
4907          an interrupt request.  */
4908       else if (!target_terminal::is_ours () && rs->waiting_for_stop_reply)
4909         target_interrupt (inferior_ptid);
4910       else
4911         rs->got_ctrlc_during_io = 1;
4912     }
4913 }
4914
4915 /* Remove any of the remote.c targets from target stack.  Upper targets depend
4916    on it so remove them first.  */
4917
4918 static void
4919 remote_unpush_target (void)
4920 {
4921   pop_all_targets_at_and_above (process_stratum);
4922 }
4923
4924 static void
4925 remote_unpush_and_throw (void)
4926 {
4927   remote_unpush_target ();
4928   throw_error (TARGET_CLOSE_ERROR, _("Disconnected from target."));
4929 }
4930
4931 static void
4932 remote_open_1 (const char *name, int from_tty,
4933                struct target_ops *target, int extended_p)
4934 {
4935   struct remote_state *rs = get_remote_state ();
4936
4937   if (name == 0)
4938     error (_("To open a remote debug connection, you need to specify what\n"
4939            "serial device is attached to the remote system\n"
4940            "(e.g. /dev/ttyS0, /dev/ttya, COM1, etc.)."));
4941
4942   /* See FIXME above.  */
4943   if (!target_async_permitted)
4944     wait_forever_enabled_p = 1;
4945
4946   /* If we're connected to a running target, target_preopen will kill it.
4947      Ask this question first, before target_preopen has a chance to kill
4948      anything.  */
4949   if (rs->remote_desc != NULL && !have_inferiors ())
4950     {
4951       if (from_tty
4952           && !query (_("Already connected to a remote target.  Disconnect? ")))
4953         error (_("Still connected."));
4954     }
4955
4956   /* Here the possibly existing remote target gets unpushed.  */
4957   target_preopen (from_tty);
4958
4959   /* Make sure we send the passed signals list the next time we resume.  */
4960   xfree (rs->last_pass_packet);
4961   rs->last_pass_packet = NULL;
4962
4963   /* Make sure we send the program signals list the next time we
4964      resume.  */
4965   xfree (rs->last_program_signals_packet);
4966   rs->last_program_signals_packet = NULL;
4967
4968   remote_fileio_reset ();
4969   reopen_exec_file ();
4970   reread_symbols ();
4971
4972   rs->remote_desc = remote_serial_open (name);
4973   if (!rs->remote_desc)
4974     perror_with_name (name);
4975
4976   if (baud_rate != -1)
4977     {
4978       if (serial_setbaudrate (rs->remote_desc, baud_rate))
4979         {
4980           /* The requested speed could not be set.  Error out to
4981              top level after closing remote_desc.  Take care to
4982              set remote_desc to NULL to avoid closing remote_desc
4983              more than once.  */
4984           serial_close (rs->remote_desc);
4985           rs->remote_desc = NULL;
4986           perror_with_name (name);
4987         }
4988     }
4989
4990   serial_setparity (rs->remote_desc, serial_parity);
4991   serial_raw (rs->remote_desc);
4992
4993   /* If there is something sitting in the buffer we might take it as a
4994      response to a command, which would be bad.  */
4995   serial_flush_input (rs->remote_desc);
4996
4997   if (from_tty)
4998     {
4999       puts_filtered ("Remote debugging using ");
5000       puts_filtered (name);
5001       puts_filtered ("\n");
5002     }
5003   push_target (target);         /* Switch to using remote target now.  */
5004
5005   /* Register extra event sources in the event loop.  */
5006   remote_async_inferior_event_token
5007     = create_async_event_handler (remote_async_inferior_event_handler,
5008                                   NULL);
5009   rs->notif_state = remote_notif_state_allocate ();
5010
5011   /* Reset the target state; these things will be queried either by
5012      remote_query_supported or as they are needed.  */
5013   reset_all_packet_configs_support ();
5014   rs->cached_wait_status = 0;
5015   rs->explicit_packet_size = 0;
5016   rs->noack_mode = 0;
5017   rs->extended = extended_p;
5018   rs->waiting_for_stop_reply = 0;
5019   rs->ctrlc_pending_p = 0;
5020   rs->got_ctrlc_during_io = 0;
5021
5022   rs->general_thread = not_sent_ptid;
5023   rs->continue_thread = not_sent_ptid;
5024   rs->remote_traceframe_number = -1;
5025
5026   rs->last_resume_exec_dir = EXEC_FORWARD;
5027
5028   /* Probe for ability to use "ThreadInfo" query, as required.  */
5029   rs->use_threadinfo_query = 1;
5030   rs->use_threadextra_query = 1;
5031
5032   readahead_cache_invalidate ();
5033
5034   if (target_async_permitted)
5035     {
5036       /* FIXME: cagney/1999-09-23: During the initial connection it is
5037          assumed that the target is already ready and able to respond to
5038          requests.  Unfortunately remote_start_remote() eventually calls
5039          wait_for_inferior() with no timeout.  wait_forever_enabled_p gets
5040          around this.  Eventually a mechanism that allows
5041          wait_for_inferior() to expect/get timeouts will be
5042          implemented.  */
5043       wait_forever_enabled_p = 0;
5044     }
5045
5046   /* First delete any symbols previously loaded from shared libraries.  */
5047   no_shared_libraries (NULL, 0);
5048
5049   /* Start afresh.  */
5050   init_thread_list ();
5051
5052   /* Start the remote connection.  If error() or QUIT, discard this
5053      target (we'd otherwise be in an inconsistent state) and then
5054      propogate the error on up the exception chain.  This ensures that
5055      the caller doesn't stumble along blindly assuming that the
5056      function succeeded.  The CLI doesn't have this problem but other
5057      UI's, such as MI do.
5058
5059      FIXME: cagney/2002-05-19: Instead of re-throwing the exception,
5060      this function should return an error indication letting the
5061      caller restore the previous state.  Unfortunately the command
5062      ``target remote'' is directly wired to this function making that
5063      impossible.  On a positive note, the CLI side of this problem has
5064      been fixed - the function set_cmd_context() makes it possible for
5065      all the ``target ....'' commands to share a common callback
5066      function.  See cli-dump.c.  */
5067   {
5068
5069     TRY
5070       {
5071         remote_start_remote (from_tty, target, extended_p);
5072       }
5073     CATCH (ex, RETURN_MASK_ALL)
5074       {
5075         /* Pop the partially set up target - unless something else did
5076            already before throwing the exception.  */
5077         if (rs->remote_desc != NULL)
5078           remote_unpush_target ();
5079         if (target_async_permitted)
5080           wait_forever_enabled_p = 1;
5081         throw_exception (ex);
5082       }
5083     END_CATCH
5084   }
5085
5086   remote_btrace_reset ();
5087
5088   if (target_async_permitted)
5089     wait_forever_enabled_p = 1;
5090 }
5091
5092 /* Detach the specified process.  */
5093
5094 static void
5095 remote_detach_pid (int pid)
5096 {
5097   struct remote_state *rs = get_remote_state ();
5098
5099   if (remote_multi_process_p (rs))
5100     xsnprintf (rs->buf, get_remote_packet_size (), "D;%x", pid);
5101   else
5102     strcpy (rs->buf, "D");
5103
5104   putpkt (rs->buf);
5105   getpkt (&rs->buf, &rs->buf_size, 0);
5106
5107   if (rs->buf[0] == 'O' && rs->buf[1] == 'K')
5108     ;
5109   else if (rs->buf[0] == '\0')
5110     error (_("Remote doesn't know how to detach"));
5111   else
5112     error (_("Can't detach process."));
5113 }
5114
5115 /* This detaches a program to which we previously attached, using
5116    inferior_ptid to identify the process.  After this is done, GDB
5117    can be used to debug some other program.  We better not have left
5118    any breakpoints in the target program or it'll die when it hits
5119    one.  */
5120
5121 static void
5122 remote_detach_1 (const char *args, int from_tty)
5123 {
5124   int pid = ptid_get_pid (inferior_ptid);
5125   struct remote_state *rs = get_remote_state ();
5126   struct thread_info *tp = find_thread_ptid (inferior_ptid);
5127   int is_fork_parent;
5128
5129   if (args)
5130     error (_("Argument given to \"detach\" when remotely debugging."));
5131
5132   if (!target_has_execution)
5133     error (_("No process to detach from."));
5134
5135   target_announce_detach (from_tty);
5136
5137   /* Tell the remote target to detach.  */
5138   remote_detach_pid (pid);
5139
5140   /* Exit only if this is the only active inferior.  */
5141   if (from_tty && !rs->extended && number_of_live_inferiors () == 1)
5142     puts_filtered (_("Ending remote debugging.\n"));
5143
5144   /* Check to see if we are detaching a fork parent.  Note that if we
5145      are detaching a fork child, tp == NULL.  */
5146   is_fork_parent = (tp != NULL
5147                     && tp->pending_follow.kind == TARGET_WAITKIND_FORKED);
5148
5149   /* If doing detach-on-fork, we don't mourn, because that will delete
5150      breakpoints that should be available for the followed inferior.  */
5151   if (!is_fork_parent)
5152     target_mourn_inferior (inferior_ptid);
5153   else
5154     {
5155       inferior_ptid = null_ptid;
5156       detach_inferior (pid);
5157     }
5158 }
5159
5160 static void
5161 remote_detach (struct target_ops *ops, const char *args, int from_tty)
5162 {
5163   remote_detach_1 (args, from_tty);
5164 }
5165
5166 static void
5167 extended_remote_detach (struct target_ops *ops, const char *args, int from_tty)
5168 {
5169   remote_detach_1 (args, from_tty);
5170 }
5171
5172 /* Target follow-fork function for remote targets.  On entry, and
5173    at return, the current inferior is the fork parent.
5174
5175    Note that although this is currently only used for extended-remote,
5176    it is named remote_follow_fork in anticipation of using it for the
5177    remote target as well.  */
5178
5179 static int
5180 remote_follow_fork (struct target_ops *ops, int follow_child,
5181                     int detach_fork)
5182 {
5183   struct remote_state *rs = get_remote_state ();
5184   enum target_waitkind kind = inferior_thread ()->pending_follow.kind;
5185
5186   if ((kind == TARGET_WAITKIND_FORKED && remote_fork_event_p (rs))
5187       || (kind == TARGET_WAITKIND_VFORKED && remote_vfork_event_p (rs)))
5188     {
5189       /* When following the parent and detaching the child, we detach
5190          the child here.  For the case of following the child and
5191          detaching the parent, the detach is done in the target-
5192          independent follow fork code in infrun.c.  We can't use
5193          target_detach when detaching an unfollowed child because
5194          the client side doesn't know anything about the child.  */
5195       if (detach_fork && !follow_child)
5196         {
5197           /* Detach the fork child.  */
5198           ptid_t child_ptid;
5199           pid_t child_pid;
5200
5201           child_ptid = inferior_thread ()->pending_follow.value.related_pid;
5202           child_pid = ptid_get_pid (child_ptid);
5203
5204           remote_detach_pid (child_pid);
5205           detach_inferior (child_pid);
5206         }
5207     }
5208   return 0;
5209 }
5210
5211 /* Target follow-exec function for remote targets.  Save EXECD_PATHNAME
5212    in the program space of the new inferior.  On entry and at return the
5213    current inferior is the exec'ing inferior.  INF is the new exec'd
5214    inferior, which may be the same as the exec'ing inferior unless
5215    follow-exec-mode is "new".  */
5216
5217 static void
5218 remote_follow_exec (struct target_ops *ops,
5219                     struct inferior *inf, char *execd_pathname)
5220 {
5221   /* We know that this is a target file name, so if it has the "target:"
5222      prefix we strip it off before saving it in the program space.  */
5223   if (is_target_filename (execd_pathname))
5224     execd_pathname += strlen (TARGET_SYSROOT_PREFIX);
5225
5226   set_pspace_remote_exec_file (inf->pspace, execd_pathname);
5227 }
5228
5229 /* Same as remote_detach, but don't send the "D" packet; just disconnect.  */
5230
5231 static void
5232 remote_disconnect (struct target_ops *target, const char *args, int from_tty)
5233 {
5234   if (args)
5235     error (_("Argument given to \"disconnect\" when remotely debugging."));
5236
5237   /* Make sure we unpush even the extended remote targets.  Calling
5238      target_mourn_inferior won't unpush, and remote_mourn won't
5239      unpush if there is more than one inferior left.  */
5240   unpush_target (target);
5241   generic_mourn_inferior ();
5242
5243   if (from_tty)
5244     puts_filtered ("Ending remote debugging.\n");
5245 }
5246
5247 /* Attach to the process specified by ARGS.  If FROM_TTY is non-zero,
5248    be chatty about it.  */
5249
5250 static void
5251 extended_remote_attach (struct target_ops *target, const char *args,
5252                         int from_tty)
5253 {
5254   struct remote_state *rs = get_remote_state ();
5255   int pid;
5256   char *wait_status = NULL;
5257
5258   pid = parse_pid_to_attach (args);
5259
5260   /* Remote PID can be freely equal to getpid, do not check it here the same
5261      way as in other targets.  */
5262
5263   if (packet_support (PACKET_vAttach) == PACKET_DISABLE)
5264     error (_("This target does not support attaching to a process"));
5265
5266   if (from_tty)
5267     {
5268       char *exec_file = get_exec_file (0);
5269
5270       if (exec_file)
5271         printf_unfiltered (_("Attaching to program: %s, %s\n"), exec_file,
5272                            target_pid_to_str (pid_to_ptid (pid)));
5273       else
5274         printf_unfiltered (_("Attaching to %s\n"),
5275                            target_pid_to_str (pid_to_ptid (pid)));
5276
5277       gdb_flush (gdb_stdout);
5278     }
5279
5280   xsnprintf (rs->buf, get_remote_packet_size (), "vAttach;%x", pid);
5281   putpkt (rs->buf);
5282   getpkt (&rs->buf, &rs->buf_size, 0);
5283
5284   switch (packet_ok (rs->buf,
5285                      &remote_protocol_packets[PACKET_vAttach]))
5286     {
5287     case PACKET_OK:
5288       if (!target_is_non_stop_p ())
5289         {
5290           /* Save the reply for later.  */
5291           wait_status = (char *) alloca (strlen (rs->buf) + 1);
5292           strcpy (wait_status, rs->buf);
5293         }
5294       else if (strcmp (rs->buf, "OK") != 0)
5295         error (_("Attaching to %s failed with: %s"),
5296                target_pid_to_str (pid_to_ptid (pid)),
5297                rs->buf);
5298       break;
5299     case PACKET_UNKNOWN:
5300       error (_("This target does not support attaching to a process"));
5301     default:
5302       error (_("Attaching to %s failed"),
5303              target_pid_to_str (pid_to_ptid (pid)));
5304     }
5305
5306   set_current_inferior (remote_add_inferior (0, pid, 1, 0));
5307
5308   inferior_ptid = pid_to_ptid (pid);
5309
5310   if (target_is_non_stop_p ())
5311     {
5312       struct thread_info *thread;
5313
5314       /* Get list of threads.  */
5315       remote_update_thread_list (target);
5316
5317       thread = first_thread_of_process (pid);
5318       if (thread)
5319         inferior_ptid = thread->ptid;
5320       else
5321         inferior_ptid = pid_to_ptid (pid);
5322
5323       /* Invalidate our notion of the remote current thread.  */
5324       record_currthread (rs, minus_one_ptid);
5325     }
5326   else
5327     {
5328       /* Now, if we have thread information, update inferior_ptid.  */
5329       inferior_ptid = remote_current_thread (inferior_ptid);
5330
5331       /* Add the main thread to the thread list.  */
5332       add_thread_silent (inferior_ptid);
5333     }
5334
5335   /* Next, if the target can specify a description, read it.  We do
5336      this before anything involving memory or registers.  */
5337   target_find_description ();
5338
5339   if (!target_is_non_stop_p ())
5340     {
5341       /* Use the previously fetched status.  */
5342       gdb_assert (wait_status != NULL);
5343
5344       if (target_can_async_p ())
5345         {
5346           struct notif_event *reply
5347             =  remote_notif_parse (&notif_client_stop, wait_status);
5348
5349           push_stop_reply ((struct stop_reply *) reply);
5350
5351           target_async (1);
5352         }
5353       else
5354         {
5355           gdb_assert (wait_status != NULL);
5356           strcpy (rs->buf, wait_status);
5357           rs->cached_wait_status = 1;
5358         }
5359     }
5360   else
5361     gdb_assert (wait_status == NULL);
5362 }
5363
5364 /* Implementation of the to_post_attach method.  */
5365
5366 static void
5367 extended_remote_post_attach (struct target_ops *ops, int pid)
5368 {
5369   /* Get text, data & bss offsets.  */
5370   get_offsets ();
5371
5372   /* In certain cases GDB might not have had the chance to start
5373      symbol lookup up until now.  This could happen if the debugged
5374      binary is not using shared libraries, the vsyscall page is not
5375      present (on Linux) and the binary itself hadn't changed since the
5376      debugging process was started.  */
5377   if (symfile_objfile != NULL)
5378     remote_check_symbols();
5379 }
5380
5381 \f
5382 /* Check for the availability of vCont.  This function should also check
5383    the response.  */
5384
5385 static void
5386 remote_vcont_probe (struct remote_state *rs)
5387 {
5388   char *buf;
5389
5390   strcpy (rs->buf, "vCont?");
5391   putpkt (rs->buf);
5392   getpkt (&rs->buf, &rs->buf_size, 0);
5393   buf = rs->buf;
5394
5395   /* Make sure that the features we assume are supported.  */
5396   if (startswith (buf, "vCont"))
5397     {
5398       char *p = &buf[5];
5399       int support_c, support_C;
5400
5401       rs->supports_vCont.s = 0;
5402       rs->supports_vCont.S = 0;
5403       support_c = 0;
5404       support_C = 0;
5405       rs->supports_vCont.t = 0;
5406       rs->supports_vCont.r = 0;
5407       while (p && *p == ';')
5408         {
5409           p++;
5410           if (*p == 's' && (*(p + 1) == ';' || *(p + 1) == 0))
5411             rs->supports_vCont.s = 1;
5412           else if (*p == 'S' && (*(p + 1) == ';' || *(p + 1) == 0))
5413             rs->supports_vCont.S = 1;
5414           else if (*p == 'c' && (*(p + 1) == ';' || *(p + 1) == 0))
5415             support_c = 1;
5416           else if (*p == 'C' && (*(p + 1) == ';' || *(p + 1) == 0))
5417             support_C = 1;
5418           else if (*p == 't' && (*(p + 1) == ';' || *(p + 1) == 0))
5419             rs->supports_vCont.t = 1;
5420           else if (*p == 'r' && (*(p + 1) == ';' || *(p + 1) == 0))
5421             rs->supports_vCont.r = 1;
5422
5423           p = strchr (p, ';');
5424         }
5425
5426       /* If c, and C are not all supported, we can't use vCont.  Clearing
5427          BUF will make packet_ok disable the packet.  */
5428       if (!support_c || !support_C)
5429         buf[0] = 0;
5430     }
5431
5432   packet_ok (buf, &remote_protocol_packets[PACKET_vCont]);
5433 }
5434
5435 /* Helper function for building "vCont" resumptions.  Write a
5436    resumption to P.  ENDP points to one-passed-the-end of the buffer
5437    we're allowed to write to.  Returns BUF+CHARACTERS_WRITTEN.  The
5438    thread to be resumed is PTID; STEP and SIGGNAL indicate whether the
5439    resumed thread should be single-stepped and/or signalled.  If PTID
5440    equals minus_one_ptid, then all threads are resumed; if PTID
5441    represents a process, then all threads of the process are resumed;
5442    the thread to be stepped and/or signalled is given in the global
5443    INFERIOR_PTID.  */
5444
5445 static char *
5446 append_resumption (char *p, char *endp,
5447                    ptid_t ptid, int step, enum gdb_signal siggnal)
5448 {
5449   struct remote_state *rs = get_remote_state ();
5450
5451   if (step && siggnal != GDB_SIGNAL_0)
5452     p += xsnprintf (p, endp - p, ";S%02x", siggnal);
5453   else if (step
5454            /* GDB is willing to range step.  */
5455            && use_range_stepping
5456            /* Target supports range stepping.  */
5457            && rs->supports_vCont.r
5458            /* We don't currently support range stepping multiple
5459               threads with a wildcard (though the protocol allows it,
5460               so stubs shouldn't make an active effort to forbid
5461               it).  */
5462            && !(remote_multi_process_p (rs) && ptid_is_pid (ptid)))
5463     {
5464       struct thread_info *tp;
5465
5466       if (ptid_equal (ptid, minus_one_ptid))
5467         {
5468           /* If we don't know about the target thread's tid, then
5469              we're resuming magic_null_ptid (see caller).  */
5470           tp = find_thread_ptid (magic_null_ptid);
5471         }
5472       else
5473         tp = find_thread_ptid (ptid);
5474       gdb_assert (tp != NULL);
5475
5476       if (tp->control.may_range_step)
5477         {
5478           int addr_size = gdbarch_addr_bit (target_gdbarch ()) / 8;
5479
5480           p += xsnprintf (p, endp - p, ";r%s,%s",
5481                           phex_nz (tp->control.step_range_start,
5482                                    addr_size),
5483                           phex_nz (tp->control.step_range_end,
5484                                    addr_size));
5485         }
5486       else
5487         p += xsnprintf (p, endp - p, ";s");
5488     }
5489   else if (step)
5490     p += xsnprintf (p, endp - p, ";s");
5491   else if (siggnal != GDB_SIGNAL_0)
5492     p += xsnprintf (p, endp - p, ";C%02x", siggnal);
5493   else
5494     p += xsnprintf (p, endp - p, ";c");
5495
5496   if (remote_multi_process_p (rs) && ptid_is_pid (ptid))
5497     {
5498       ptid_t nptid;
5499
5500       /* All (-1) threads of process.  */
5501       nptid = ptid_build (ptid_get_pid (ptid), -1, 0);
5502
5503       p += xsnprintf (p, endp - p, ":");
5504       p = write_ptid (p, endp, nptid);
5505     }
5506   else if (!ptid_equal (ptid, minus_one_ptid))
5507     {
5508       p += xsnprintf (p, endp - p, ":");
5509       p = write_ptid (p, endp, ptid);
5510     }
5511
5512   return p;
5513 }
5514
5515 /* Clear the thread's private info on resume.  */
5516
5517 static void
5518 resume_clear_thread_private_info (struct thread_info *thread)
5519 {
5520   if (thread->priv != NULL)
5521     {
5522       remote_thread_info *priv = get_remote_thread_info (thread);
5523
5524       priv->stop_reason = TARGET_STOPPED_BY_NO_REASON;
5525       priv->watch_data_address = 0;
5526     }
5527 }
5528
5529 /* Append a vCont continue-with-signal action for threads that have a
5530    non-zero stop signal.  */
5531
5532 static char *
5533 append_pending_thread_resumptions (char *p, char *endp, ptid_t ptid)
5534 {
5535   struct thread_info *thread;
5536
5537   ALL_NON_EXITED_THREADS (thread)
5538     if (ptid_match (thread->ptid, ptid)
5539         && !ptid_equal (inferior_ptid, thread->ptid)
5540         && thread->suspend.stop_signal != GDB_SIGNAL_0)
5541       {
5542         p = append_resumption (p, endp, thread->ptid,
5543                                0, thread->suspend.stop_signal);
5544         thread->suspend.stop_signal = GDB_SIGNAL_0;
5545         resume_clear_thread_private_info (thread);
5546       }
5547
5548   return p;
5549 }
5550
5551 /* Set the target running, using the packets that use Hc
5552    (c/s/C/S).  */
5553
5554 static void
5555 remote_resume_with_hc (struct target_ops *ops,
5556                        ptid_t ptid, int step, enum gdb_signal siggnal)
5557 {
5558   struct remote_state *rs = get_remote_state ();
5559   struct thread_info *thread;
5560   char *buf;
5561
5562   rs->last_sent_signal = siggnal;
5563   rs->last_sent_step = step;
5564
5565   /* The c/s/C/S resume packets use Hc, so set the continue
5566      thread.  */
5567   if (ptid_equal (ptid, minus_one_ptid))
5568     set_continue_thread (any_thread_ptid);
5569   else
5570     set_continue_thread (ptid);
5571
5572   ALL_NON_EXITED_THREADS (thread)
5573     resume_clear_thread_private_info (thread);
5574
5575   buf = rs->buf;
5576   if (execution_direction == EXEC_REVERSE)
5577     {
5578       /* We don't pass signals to the target in reverse exec mode.  */
5579       if (info_verbose && siggnal != GDB_SIGNAL_0)
5580         warning (_(" - Can't pass signal %d to target in reverse: ignored."),
5581                  siggnal);
5582
5583       if (step && packet_support (PACKET_bs) == PACKET_DISABLE)
5584         error (_("Remote reverse-step not supported."));
5585       if (!step && packet_support (PACKET_bc) == PACKET_DISABLE)
5586         error (_("Remote reverse-continue not supported."));
5587
5588       strcpy (buf, step ? "bs" : "bc");
5589     }
5590   else if (siggnal != GDB_SIGNAL_0)
5591     {
5592       buf[0] = step ? 'S' : 'C';
5593       buf[1] = tohex (((int) siggnal >> 4) & 0xf);
5594       buf[2] = tohex (((int) siggnal) & 0xf);
5595       buf[3] = '\0';
5596     }
5597   else
5598     strcpy (buf, step ? "s" : "c");
5599
5600   putpkt (buf);
5601 }
5602
5603 /* Resume the remote inferior by using a "vCont" packet.  The thread
5604    to be resumed is PTID; STEP and SIGGNAL indicate whether the
5605    resumed thread should be single-stepped and/or signalled.  If PTID
5606    equals minus_one_ptid, then all threads are resumed; the thread to
5607    be stepped and/or signalled is given in the global INFERIOR_PTID.
5608    This function returns non-zero iff it resumes the inferior.
5609
5610    This function issues a strict subset of all possible vCont commands
5611    at the moment.  */
5612
5613 static int
5614 remote_resume_with_vcont (ptid_t ptid, int step, enum gdb_signal siggnal)
5615 {
5616   struct remote_state *rs = get_remote_state ();
5617   char *p;
5618   char *endp;
5619
5620   /* No reverse execution actions defined for vCont.  */
5621   if (execution_direction == EXEC_REVERSE)
5622     return 0;
5623
5624   if (packet_support (PACKET_vCont) == PACKET_SUPPORT_UNKNOWN)
5625     remote_vcont_probe (rs);
5626
5627   if (packet_support (PACKET_vCont) == PACKET_DISABLE)
5628     return 0;
5629
5630   p = rs->buf;
5631   endp = rs->buf + get_remote_packet_size ();
5632
5633   /* If we could generate a wider range of packets, we'd have to worry
5634      about overflowing BUF.  Should there be a generic
5635      "multi-part-packet" packet?  */
5636
5637   p += xsnprintf (p, endp - p, "vCont");
5638
5639   if (ptid_equal (ptid, magic_null_ptid))
5640     {
5641       /* MAGIC_NULL_PTID means that we don't have any active threads,
5642          so we don't have any TID numbers the inferior will
5643          understand.  Make sure to only send forms that do not specify
5644          a TID.  */
5645       append_resumption (p, endp, minus_one_ptid, step, siggnal);
5646     }
5647   else if (ptid_equal (ptid, minus_one_ptid) || ptid_is_pid (ptid))
5648     {
5649       /* Resume all threads (of all processes, or of a single
5650          process), with preference for INFERIOR_PTID.  This assumes
5651          inferior_ptid belongs to the set of all threads we are about
5652          to resume.  */
5653       if (step || siggnal != GDB_SIGNAL_0)
5654         {
5655           /* Step inferior_ptid, with or without signal.  */
5656           p = append_resumption (p, endp, inferior_ptid, step, siggnal);
5657         }
5658
5659       /* Also pass down any pending signaled resumption for other
5660          threads not the current.  */
5661       p = append_pending_thread_resumptions (p, endp, ptid);
5662
5663       /* And continue others without a signal.  */
5664       append_resumption (p, endp, ptid, /*step=*/ 0, GDB_SIGNAL_0);
5665     }
5666   else
5667     {
5668       /* Scheduler locking; resume only PTID.  */
5669       append_resumption (p, endp, ptid, step, siggnal);
5670     }
5671
5672   gdb_assert (strlen (rs->buf) < get_remote_packet_size ());
5673   putpkt (rs->buf);
5674
5675   if (target_is_non_stop_p ())
5676     {
5677       /* In non-stop, the stub replies to vCont with "OK".  The stop
5678          reply will be reported asynchronously by means of a `%Stop'
5679          notification.  */
5680       getpkt (&rs->buf, &rs->buf_size, 0);
5681       if (strcmp (rs->buf, "OK") != 0)
5682         error (_("Unexpected vCont reply in non-stop mode: %s"), rs->buf);
5683     }
5684
5685   return 1;
5686 }
5687
5688 /* Tell the remote machine to resume.  */
5689
5690 static void
5691 remote_resume (struct target_ops *ops,
5692                ptid_t ptid, int step, enum gdb_signal siggnal)
5693 {
5694   struct remote_state *rs = get_remote_state ();
5695
5696   /* When connected in non-stop mode, the core resumes threads
5697      individually.  Resuming remote threads directly in target_resume
5698      would thus result in sending one packet per thread.  Instead, to
5699      minimize roundtrip latency, here we just store the resume
5700      request; the actual remote resumption will be done in
5701      target_commit_resume / remote_commit_resume, where we'll be able
5702      to do vCont action coalescing.  */
5703   if (target_is_non_stop_p () && execution_direction != EXEC_REVERSE)
5704     {
5705       remote_thread_info *remote_thr;
5706
5707       if (ptid_equal (minus_one_ptid, ptid) || ptid_is_pid (ptid))
5708         remote_thr = get_remote_thread_info (inferior_ptid);
5709       else
5710         remote_thr = get_remote_thread_info (ptid);
5711
5712       remote_thr->last_resume_step = step;
5713       remote_thr->last_resume_sig = siggnal;
5714       return;
5715     }
5716
5717   /* In all-stop, we can't mark REMOTE_ASYNC_GET_PENDING_EVENTS_TOKEN
5718      (explained in remote-notif.c:handle_notification) so
5719      remote_notif_process is not called.  We need find a place where
5720      it is safe to start a 'vNotif' sequence.  It is good to do it
5721      before resuming inferior, because inferior was stopped and no RSP
5722      traffic at that moment.  */
5723   if (!target_is_non_stop_p ())
5724     remote_notif_process (rs->notif_state, &notif_client_stop);
5725
5726   rs->last_resume_exec_dir = execution_direction;
5727
5728   /* Prefer vCont, and fallback to s/c/S/C, which use Hc.  */
5729   if (!remote_resume_with_vcont (ptid, step, siggnal))
5730     remote_resume_with_hc (ops, ptid, step, siggnal);
5731
5732   /* We are about to start executing the inferior, let's register it
5733      with the event loop.  NOTE: this is the one place where all the
5734      execution commands end up.  We could alternatively do this in each
5735      of the execution commands in infcmd.c.  */
5736   /* FIXME: ezannoni 1999-09-28: We may need to move this out of here
5737      into infcmd.c in order to allow inferior function calls to work
5738      NOT asynchronously.  */
5739   if (target_can_async_p ())
5740     target_async (1);
5741
5742   /* We've just told the target to resume.  The remote server will
5743      wait for the inferior to stop, and then send a stop reply.  In
5744      the mean time, we can't start another command/query ourselves
5745      because the stub wouldn't be ready to process it.  This applies
5746      only to the base all-stop protocol, however.  In non-stop (which
5747      only supports vCont), the stub replies with an "OK", and is
5748      immediate able to process further serial input.  */
5749   if (!target_is_non_stop_p ())
5750     rs->waiting_for_stop_reply = 1;
5751 }
5752
5753 static void check_pending_events_prevent_wildcard_vcont
5754   (int *may_global_wildcard_vcont);
5755 static int is_pending_fork_parent_thread (struct thread_info *thread);
5756
5757 /* Private per-inferior info for target remote processes.  */
5758
5759 struct remote_inferior : public private_inferior
5760 {
5761   /* Whether we can send a wildcard vCont for this process.  */
5762   bool may_wildcard_vcont = true;
5763 };
5764
5765 /* Get the remote private inferior data associated to INF.  */
5766
5767 static remote_inferior *
5768 get_remote_inferior (inferior *inf)
5769 {
5770   if (inf->priv == NULL)
5771     inf->priv.reset (new remote_inferior);
5772
5773   return static_cast<remote_inferior *> (inf->priv.get ());
5774 }
5775
5776 /* Structure used to track the construction of a vCont packet in the
5777    outgoing packet buffer.  This is used to send multiple vCont
5778    packets if we have more actions than would fit a single packet.  */
5779
5780 struct vcont_builder
5781 {
5782   /* Pointer to the first action.  P points here if no action has been
5783      appended yet.  */
5784   char *first_action;
5785
5786   /* Where the next action will be appended.  */
5787   char *p;
5788
5789   /* The end of the buffer.  Must never write past this.  */
5790   char *endp;
5791 };
5792
5793 /* Prepare the outgoing buffer for a new vCont packet.  */
5794
5795 static void
5796 vcont_builder_restart (struct vcont_builder *builder)
5797 {
5798   struct remote_state *rs = get_remote_state ();
5799
5800   builder->p = rs->buf;
5801   builder->endp = rs->buf + get_remote_packet_size ();
5802   builder->p += xsnprintf (builder->p, builder->endp - builder->p, "vCont");
5803   builder->first_action = builder->p;
5804 }
5805
5806 /* If the vCont packet being built has any action, send it to the
5807    remote end.  */
5808
5809 static void
5810 vcont_builder_flush (struct vcont_builder *builder)
5811 {
5812   struct remote_state *rs;
5813
5814   if (builder->p == builder->first_action)
5815     return;
5816
5817   rs = get_remote_state ();
5818   putpkt (rs->buf);
5819   getpkt (&rs->buf, &rs->buf_size, 0);
5820   if (strcmp (rs->buf, "OK") != 0)
5821     error (_("Unexpected vCont reply in non-stop mode: %s"), rs->buf);
5822 }
5823
5824 /* The largest action is range-stepping, with its two addresses.  This
5825    is more than sufficient.  If a new, bigger action is created, it'll
5826    quickly trigger a failed assertion in append_resumption (and we'll
5827    just bump this).  */
5828 #define MAX_ACTION_SIZE 200
5829
5830 /* Append a new vCont action in the outgoing packet being built.  If
5831    the action doesn't fit the packet along with previous actions, push
5832    what we've got so far to the remote end and start over a new vCont
5833    packet (with the new action).  */
5834
5835 static void
5836 vcont_builder_push_action (struct vcont_builder *builder,
5837                            ptid_t ptid, int step, enum gdb_signal siggnal)
5838 {
5839   char buf[MAX_ACTION_SIZE + 1];
5840   char *endp;
5841   size_t rsize;
5842
5843   endp = append_resumption (buf, buf + sizeof (buf),
5844                             ptid, step, siggnal);
5845
5846   /* Check whether this new action would fit in the vCont packet along
5847      with previous actions.  If not, send what we've got so far and
5848      start a new vCont packet.  */
5849   rsize = endp - buf;
5850   if (rsize > builder->endp - builder->p)
5851     {
5852       vcont_builder_flush (builder);
5853       vcont_builder_restart (builder);
5854
5855       /* Should now fit.  */
5856       gdb_assert (rsize <= builder->endp - builder->p);
5857     }
5858
5859   memcpy (builder->p, buf, rsize);
5860   builder->p += rsize;
5861   *builder->p = '\0';
5862 }
5863
5864 /* to_commit_resume implementation.  */
5865
5866 static void
5867 remote_commit_resume (struct target_ops *ops)
5868 {
5869   struct inferior *inf;
5870   struct thread_info *tp;
5871   int any_process_wildcard;
5872   int may_global_wildcard_vcont;
5873   struct vcont_builder vcont_builder;
5874
5875   /* If connected in all-stop mode, we'd send the remote resume
5876      request directly from remote_resume.  Likewise if
5877      reverse-debugging, as there are no defined vCont actions for
5878      reverse execution.  */
5879   if (!target_is_non_stop_p () || execution_direction == EXEC_REVERSE)
5880     return;
5881
5882   /* Try to send wildcard actions ("vCont;c" or "vCont;c:pPID.-1")
5883      instead of resuming all threads of each process individually.
5884      However, if any thread of a process must remain halted, we can't
5885      send wildcard resumes and must send one action per thread.
5886
5887      Care must be taken to not resume threads/processes the server
5888      side already told us are stopped, but the core doesn't know about
5889      yet, because the events are still in the vStopped notification
5890      queue.  For example:
5891
5892        #1 => vCont s:p1.1;c
5893        #2 <= OK
5894        #3 <= %Stopped T05 p1.1
5895        #4 => vStopped
5896        #5 <= T05 p1.2
5897        #6 => vStopped
5898        #7 <= OK
5899        #8 (infrun handles the stop for p1.1 and continues stepping)
5900        #9 => vCont s:p1.1;c
5901
5902      The last vCont above would resume thread p1.2 by mistake, because
5903      the server has no idea that the event for p1.2 had not been
5904      handled yet.
5905
5906      The server side must similarly ignore resume actions for the
5907      thread that has a pending %Stopped notification (and any other
5908      threads with events pending), until GDB acks the notification
5909      with vStopped.  Otherwise, e.g., the following case is
5910      mishandled:
5911
5912        #1 => g  (or any other packet)
5913        #2 <= [registers]
5914        #3 <= %Stopped T05 p1.2
5915        #4 => vCont s:p1.1;c
5916        #5 <= OK
5917
5918      Above, the server must not resume thread p1.2.  GDB can't know
5919      that p1.2 stopped until it acks the %Stopped notification, and
5920      since from GDB's perspective all threads should be running, it
5921      sends a "c" action.
5922
5923      Finally, special care must also be given to handling fork/vfork
5924      events.  A (v)fork event actually tells us that two processes
5925      stopped -- the parent and the child.  Until we follow the fork,
5926      we must not resume the child.  Therefore, if we have a pending
5927      fork follow, we must not send a global wildcard resume action
5928      (vCont;c).  We can still send process-wide wildcards though.  */
5929
5930   /* Start by assuming a global wildcard (vCont;c) is possible.  */
5931   may_global_wildcard_vcont = 1;
5932
5933   /* And assume every process is individually wildcard-able too.  */
5934   ALL_NON_EXITED_INFERIORS (inf)
5935     {
5936       remote_inferior *priv = get_remote_inferior (inf);
5937
5938       priv->may_wildcard_vcont = true;
5939     }
5940
5941   /* Check for any pending events (not reported or processed yet) and
5942      disable process and global wildcard resumes appropriately.  */
5943   check_pending_events_prevent_wildcard_vcont (&may_global_wildcard_vcont);
5944
5945   ALL_NON_EXITED_THREADS (tp)
5946     {
5947       /* If a thread of a process is not meant to be resumed, then we
5948          can't wildcard that process.  */
5949       if (!tp->executing)
5950         {
5951           get_remote_inferior (tp->inf)->may_wildcard_vcont = false;
5952
5953           /* And if we can't wildcard a process, we can't wildcard
5954              everything either.  */
5955           may_global_wildcard_vcont = 0;
5956           continue;
5957         }
5958
5959       /* If a thread is the parent of an unfollowed fork, then we
5960          can't do a global wildcard, as that would resume the fork
5961          child.  */
5962       if (is_pending_fork_parent_thread (tp))
5963         may_global_wildcard_vcont = 0;
5964     }
5965
5966   /* Now let's build the vCont packet(s).  Actions must be appended
5967      from narrower to wider scopes (thread -> process -> global).  If
5968      we end up with too many actions for a single packet vcont_builder
5969      flushes the current vCont packet to the remote side and starts a
5970      new one.  */
5971   vcont_builder_restart (&vcont_builder);
5972
5973   /* Threads first.  */
5974   ALL_NON_EXITED_THREADS (tp)
5975     {
5976       remote_thread_info *remote_thr = get_remote_thread_info (tp);
5977
5978       if (!tp->executing || remote_thr->vcont_resumed)
5979         continue;
5980
5981       gdb_assert (!thread_is_in_step_over_chain (tp));
5982
5983       if (!remote_thr->last_resume_step
5984           && remote_thr->last_resume_sig == GDB_SIGNAL_0
5985           && get_remote_inferior (tp->inf)->may_wildcard_vcont)
5986         {
5987           /* We'll send a wildcard resume instead.  */
5988           remote_thr->vcont_resumed = 1;
5989           continue;
5990         }
5991
5992       vcont_builder_push_action (&vcont_builder, tp->ptid,
5993                                  remote_thr->last_resume_step,
5994                                  remote_thr->last_resume_sig);
5995       remote_thr->vcont_resumed = 1;
5996     }
5997
5998   /* Now check whether we can send any process-wide wildcard.  This is
5999      to avoid sending a global wildcard in the case nothing is
6000      supposed to be resumed.  */
6001   any_process_wildcard = 0;
6002
6003   ALL_NON_EXITED_INFERIORS (inf)
6004     {
6005       if (get_remote_inferior (inf)->may_wildcard_vcont)
6006         {
6007           any_process_wildcard = 1;
6008           break;
6009         }
6010     }
6011
6012   if (any_process_wildcard)
6013     {
6014       /* If all processes are wildcard-able, then send a single "c"
6015          action, otherwise, send an "all (-1) threads of process"
6016          continue action for each running process, if any.  */
6017       if (may_global_wildcard_vcont)
6018         {
6019           vcont_builder_push_action (&vcont_builder, minus_one_ptid,
6020                                      0, GDB_SIGNAL_0);
6021         }
6022       else
6023         {
6024           ALL_NON_EXITED_INFERIORS (inf)
6025             {
6026               if (get_remote_inferior (inf)->may_wildcard_vcont)
6027                 {
6028                   vcont_builder_push_action (&vcont_builder,
6029                                              pid_to_ptid (inf->pid),
6030                                              0, GDB_SIGNAL_0);
6031                 }
6032             }
6033         }
6034     }
6035
6036   vcont_builder_flush (&vcont_builder);
6037 }
6038
6039 \f
6040
6041 /* Non-stop version of target_stop.  Uses `vCont;t' to stop a remote
6042    thread, all threads of a remote process, or all threads of all
6043    processes.  */
6044
6045 static void
6046 remote_stop_ns (ptid_t ptid)
6047 {
6048   struct remote_state *rs = get_remote_state ();
6049   char *p = rs->buf;
6050   char *endp = rs->buf + get_remote_packet_size ();
6051
6052   if (packet_support (PACKET_vCont) == PACKET_SUPPORT_UNKNOWN)
6053     remote_vcont_probe (rs);
6054
6055   if (!rs->supports_vCont.t)
6056     error (_("Remote server does not support stopping threads"));
6057
6058   if (ptid_equal (ptid, minus_one_ptid)
6059       || (!remote_multi_process_p (rs) && ptid_is_pid (ptid)))
6060     p += xsnprintf (p, endp - p, "vCont;t");
6061   else
6062     {
6063       ptid_t nptid;
6064
6065       p += xsnprintf (p, endp - p, "vCont;t:");
6066
6067       if (ptid_is_pid (ptid))
6068           /* All (-1) threads of process.  */
6069         nptid = ptid_build (ptid_get_pid (ptid), -1, 0);
6070       else
6071         {
6072           /* Small optimization: if we already have a stop reply for
6073              this thread, no use in telling the stub we want this
6074              stopped.  */
6075           if (peek_stop_reply (ptid))
6076             return;
6077
6078           nptid = ptid;
6079         }
6080
6081       write_ptid (p, endp, nptid);
6082     }
6083
6084   /* In non-stop, we get an immediate OK reply.  The stop reply will
6085      come in asynchronously by notification.  */
6086   putpkt (rs->buf);
6087   getpkt (&rs->buf, &rs->buf_size, 0);
6088   if (strcmp (rs->buf, "OK") != 0)
6089     error (_("Stopping %s failed: %s"), target_pid_to_str (ptid), rs->buf);
6090 }
6091
6092 /* All-stop version of target_interrupt.  Sends a break or a ^C to
6093    interrupt the remote target.  It is undefined which thread of which
6094    process reports the interrupt.  */
6095
6096 static void
6097 remote_interrupt_as (void)
6098 {
6099   struct remote_state *rs = get_remote_state ();
6100
6101   rs->ctrlc_pending_p = 1;
6102
6103   /* If the inferior is stopped already, but the core didn't know
6104      about it yet, just ignore the request.  The cached wait status
6105      will be collected in remote_wait.  */
6106   if (rs->cached_wait_status)
6107     return;
6108
6109   /* Send interrupt_sequence to remote target.  */
6110   send_interrupt_sequence ();
6111 }
6112
6113 /* Non-stop version of target_interrupt.  Uses `vCtrlC' to interrupt
6114    the remote target.  It is undefined which thread of which process
6115    reports the interrupt.  Throws an error if the packet is not
6116    supported by the server.  */
6117
6118 static void
6119 remote_interrupt_ns (void)
6120 {
6121   struct remote_state *rs = get_remote_state ();
6122   char *p = rs->buf;
6123   char *endp = rs->buf + get_remote_packet_size ();
6124
6125   xsnprintf (p, endp - p, "vCtrlC");
6126
6127   /* In non-stop, we get an immediate OK reply.  The stop reply will
6128      come in asynchronously by notification.  */
6129   putpkt (rs->buf);
6130   getpkt (&rs->buf, &rs->buf_size, 0);
6131
6132   switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_vCtrlC]))
6133     {
6134     case PACKET_OK:
6135       break;
6136     case PACKET_UNKNOWN:
6137       error (_("No support for interrupting the remote target."));
6138     case PACKET_ERROR:
6139       error (_("Interrupting target failed: %s"), rs->buf);
6140     }
6141 }
6142
6143 /* Implement the to_stop function for the remote targets.  */
6144
6145 static void
6146 remote_stop (struct target_ops *self, ptid_t ptid)
6147 {
6148   if (remote_debug)
6149     fprintf_unfiltered (gdb_stdlog, "remote_stop called\n");
6150
6151   if (target_is_non_stop_p ())
6152     remote_stop_ns (ptid);
6153   else
6154     {
6155       /* We don't currently have a way to transparently pause the
6156          remote target in all-stop mode.  Interrupt it instead.  */
6157       remote_interrupt_as ();
6158     }
6159 }
6160
6161 /* Implement the to_interrupt function for the remote targets.  */
6162
6163 static void
6164 remote_interrupt (struct target_ops *self, ptid_t ptid)
6165 {
6166   if (remote_debug)
6167     fprintf_unfiltered (gdb_stdlog, "remote_interrupt called\n");
6168
6169   if (target_is_non_stop_p ())
6170     remote_interrupt_ns ();
6171   else
6172     remote_interrupt_as ();
6173 }
6174
6175 /* Implement the to_pass_ctrlc function for the remote targets.  */
6176
6177 static void
6178 remote_pass_ctrlc (struct target_ops *self)
6179 {
6180   struct remote_state *rs = get_remote_state ();
6181
6182   if (remote_debug)
6183     fprintf_unfiltered (gdb_stdlog, "remote_pass_ctrlc called\n");
6184
6185   /* If we're starting up, we're not fully synced yet.  Quit
6186      immediately.  */
6187   if (rs->starting_up)
6188     quit ();
6189   /* If ^C has already been sent once, offer to disconnect.  */
6190   else if (rs->ctrlc_pending_p)
6191     interrupt_query ();
6192   else
6193     target_interrupt (inferior_ptid);
6194 }
6195
6196 /* Ask the user what to do when an interrupt is received.  */
6197
6198 static void
6199 interrupt_query (void)
6200 {
6201   struct remote_state *rs = get_remote_state ();
6202
6203   if (rs->waiting_for_stop_reply && rs->ctrlc_pending_p)
6204     {
6205       if (query (_("The target is not responding to interrupt requests.\n"
6206                    "Stop debugging it? ")))
6207         {
6208           remote_unpush_target ();
6209           throw_error (TARGET_CLOSE_ERROR, _("Disconnected from target."));
6210         }
6211     }
6212   else
6213     {
6214       if (query (_("Interrupted while waiting for the program.\n"
6215                    "Give up waiting? ")))
6216         quit ();
6217     }
6218 }
6219
6220 /* Enable/disable target terminal ownership.  Most targets can use
6221    terminal groups to control terminal ownership.  Remote targets are
6222    different in that explicit transfer of ownership to/from GDB/target
6223    is required.  */
6224
6225 static void
6226 remote_terminal_inferior (struct target_ops *self)
6227 {
6228   /* NOTE: At this point we could also register our selves as the
6229      recipient of all input.  Any characters typed could then be
6230      passed on down to the target.  */
6231 }
6232
6233 static void
6234 remote_terminal_ours (struct target_ops *self)
6235 {
6236 }
6237
6238 static void
6239 remote_console_output (char *msg)
6240 {
6241   char *p;
6242
6243   for (p = msg; p[0] && p[1]; p += 2)
6244     {
6245       char tb[2];
6246       char c = fromhex (p[0]) * 16 + fromhex (p[1]);
6247
6248       tb[0] = c;
6249       tb[1] = 0;
6250       fputs_unfiltered (tb, gdb_stdtarg);
6251     }
6252   gdb_flush (gdb_stdtarg);
6253 }
6254
6255 DEF_VEC_O(cached_reg_t);
6256
6257 typedef struct stop_reply
6258 {
6259   struct notif_event base;
6260
6261   /* The identifier of the thread about this event  */
6262   ptid_t ptid;
6263
6264   /* The remote state this event is associated with.  When the remote
6265      connection, represented by a remote_state object, is closed,
6266      all the associated stop_reply events should be released.  */
6267   struct remote_state *rs;
6268
6269   struct target_waitstatus ws;
6270
6271   /* The architecture associated with the expedited registers.  */
6272   gdbarch *arch;
6273
6274   /* Expedited registers.  This makes remote debugging a bit more
6275      efficient for those targets that provide critical registers as
6276      part of their normal status mechanism (as another roundtrip to
6277      fetch them is avoided).  */
6278   VEC(cached_reg_t) *regcache;
6279
6280   enum target_stop_reason stop_reason;
6281
6282   CORE_ADDR watch_data_address;
6283
6284   int core;
6285 } *stop_reply_p;
6286
6287 DECLARE_QUEUE_P (stop_reply_p);
6288 DEFINE_QUEUE_P (stop_reply_p);
6289 /* The list of already fetched and acknowledged stop events.  This
6290    queue is used for notification Stop, and other notifications
6291    don't need queue for their events, because the notification events
6292    of Stop can't be consumed immediately, so that events should be
6293    queued first, and be consumed by remote_wait_{ns,as} one per
6294    time.  Other notifications can consume their events immediately,
6295    so queue is not needed for them.  */
6296 static QUEUE (stop_reply_p) *stop_reply_queue;
6297
6298 static void
6299 stop_reply_xfree (struct stop_reply *r)
6300 {
6301   notif_event_xfree ((struct notif_event *) r);
6302 }
6303
6304 /* Return the length of the stop reply queue.  */
6305
6306 static int
6307 stop_reply_queue_length (void)
6308 {
6309   return QUEUE_length (stop_reply_p, stop_reply_queue);
6310 }
6311
6312 static void
6313 remote_notif_stop_parse (struct notif_client *self, char *buf,
6314                          struct notif_event *event)
6315 {
6316   remote_parse_stop_reply (buf, (struct stop_reply *) event);
6317 }
6318
6319 static void
6320 remote_notif_stop_ack (struct notif_client *self, char *buf,
6321                        struct notif_event *event)
6322 {
6323   struct stop_reply *stop_reply = (struct stop_reply *) event;
6324
6325   /* acknowledge */
6326   putpkt (self->ack_command);
6327
6328   if (stop_reply->ws.kind == TARGET_WAITKIND_IGNORE)
6329       /* We got an unknown stop reply.  */
6330       error (_("Unknown stop reply"));
6331
6332   push_stop_reply (stop_reply);
6333 }
6334
6335 static int
6336 remote_notif_stop_can_get_pending_events (struct notif_client *self)
6337 {
6338   /* We can't get pending events in remote_notif_process for
6339      notification stop, and we have to do this in remote_wait_ns
6340      instead.  If we fetch all queued events from stub, remote stub
6341      may exit and we have no chance to process them back in
6342      remote_wait_ns.  */
6343   mark_async_event_handler (remote_async_inferior_event_token);
6344   return 0;
6345 }
6346
6347 static void
6348 stop_reply_dtr (struct notif_event *event)
6349 {
6350   struct stop_reply *r = (struct stop_reply *) event;
6351   cached_reg_t *reg;
6352   int ix;
6353
6354   for (ix = 0;
6355        VEC_iterate (cached_reg_t, r->regcache, ix, reg);
6356        ix++)
6357     xfree (reg->data);
6358
6359   VEC_free (cached_reg_t, r->regcache);
6360 }
6361
6362 static struct notif_event *
6363 remote_notif_stop_alloc_reply (void)
6364 {
6365   /* We cast to a pointer to the "base class".  */
6366   struct notif_event *r = (struct notif_event *) XNEW (struct stop_reply);
6367
6368   r->dtr = stop_reply_dtr;
6369
6370   return r;
6371 }
6372
6373 /* A client of notification Stop.  */
6374
6375 struct notif_client notif_client_stop =
6376 {
6377   "Stop",
6378   "vStopped",
6379   remote_notif_stop_parse,
6380   remote_notif_stop_ack,
6381   remote_notif_stop_can_get_pending_events,
6382   remote_notif_stop_alloc_reply,
6383   REMOTE_NOTIF_STOP,
6384 };
6385
6386 /* A parameter to pass data in and out.  */
6387
6388 struct queue_iter_param
6389 {
6390   void *input;
6391   struct stop_reply *output;
6392 };
6393
6394 /* Determine if THREAD_PTID is a pending fork parent thread.  ARG contains
6395    the pid of the process that owns the threads we want to check, or
6396    -1 if we want to check all threads.  */
6397
6398 static int
6399 is_pending_fork_parent (struct target_waitstatus *ws, int event_pid,
6400                         ptid_t thread_ptid)
6401 {
6402   if (ws->kind == TARGET_WAITKIND_FORKED
6403       || ws->kind == TARGET_WAITKIND_VFORKED)
6404     {
6405       if (event_pid == -1 || event_pid == ptid_get_pid (thread_ptid))
6406         return 1;
6407     }
6408
6409   return 0;
6410 }
6411
6412 /* Return the thread's pending status used to determine whether the
6413    thread is a fork parent stopped at a fork event.  */
6414
6415 static struct target_waitstatus *
6416 thread_pending_fork_status (struct thread_info *thread)
6417 {
6418   if (thread->suspend.waitstatus_pending_p)
6419     return &thread->suspend.waitstatus;
6420   else
6421     return &thread->pending_follow;
6422 }
6423
6424 /* Determine if THREAD is a pending fork parent thread.  */
6425
6426 static int
6427 is_pending_fork_parent_thread (struct thread_info *thread)
6428 {
6429   struct target_waitstatus *ws = thread_pending_fork_status (thread);
6430   int pid = -1;
6431
6432   return is_pending_fork_parent (ws, pid, thread->ptid);
6433 }
6434
6435 /* Check whether EVENT is a fork event, and if it is, remove the
6436    fork child from the context list passed in DATA.  */
6437
6438 static int
6439 remove_child_of_pending_fork (QUEUE (stop_reply_p) *q,
6440                               QUEUE_ITER (stop_reply_p) *iter,
6441                               stop_reply_p event,
6442                               void *data)
6443 {
6444   struct queue_iter_param *param = (struct queue_iter_param *) data;
6445   struct threads_listing_context *context
6446     = (struct threads_listing_context *) param->input;
6447
6448   if (event->ws.kind == TARGET_WAITKIND_FORKED
6449       || event->ws.kind == TARGET_WAITKIND_VFORKED
6450       || event->ws.kind == TARGET_WAITKIND_THREAD_EXITED)
6451     context->remove_thread (event->ws.value.related_pid);
6452
6453   return 1;
6454 }
6455
6456 /* If CONTEXT contains any fork child threads that have not been
6457    reported yet, remove them from the CONTEXT list.  If such a
6458    thread exists it is because we are stopped at a fork catchpoint
6459    and have not yet called follow_fork, which will set up the
6460    host-side data structures for the new process.  */
6461
6462 static void
6463 remove_new_fork_children (struct threads_listing_context *context)
6464 {
6465   struct thread_info * thread;
6466   int pid = -1;
6467   struct notif_client *notif = &notif_client_stop;
6468   struct queue_iter_param param;
6469
6470   /* For any threads stopped at a fork event, remove the corresponding
6471      fork child threads from the CONTEXT list.  */
6472   ALL_NON_EXITED_THREADS (thread)
6473     {
6474       struct target_waitstatus *ws = thread_pending_fork_status (thread);
6475
6476       if (is_pending_fork_parent (ws, pid, thread->ptid))
6477         context->remove_thread (ws->value.related_pid);
6478     }
6479
6480   /* Check for any pending fork events (not reported or processed yet)
6481      in process PID and remove those fork child threads from the
6482      CONTEXT list as well.  */
6483   remote_notif_get_pending_events (notif);
6484   param.input = context;
6485   param.output = NULL;
6486   QUEUE_iterate (stop_reply_p, stop_reply_queue,
6487                  remove_child_of_pending_fork, &param);
6488 }
6489
6490 /* Check whether EVENT would prevent a global or process wildcard
6491    vCont action.  */
6492
6493 static int
6494 check_pending_event_prevents_wildcard_vcont_callback
6495   (QUEUE (stop_reply_p) *q,
6496    QUEUE_ITER (stop_reply_p) *iter,
6497    stop_reply_p event,
6498    void *data)
6499 {
6500   struct inferior *inf;
6501   int *may_global_wildcard_vcont = (int *) data;
6502
6503   if (event->ws.kind == TARGET_WAITKIND_NO_RESUMED
6504       || event->ws.kind == TARGET_WAITKIND_NO_HISTORY)
6505     return 1;
6506
6507   if (event->ws.kind == TARGET_WAITKIND_FORKED
6508       || event->ws.kind == TARGET_WAITKIND_VFORKED)
6509     *may_global_wildcard_vcont = 0;
6510
6511   inf = find_inferior_ptid (event->ptid);
6512
6513   /* This may be the first time we heard about this process.
6514      Regardless, we must not do a global wildcard resume, otherwise
6515      we'd resume this process too.  */
6516   *may_global_wildcard_vcont = 0;
6517   if (inf != NULL)
6518     get_remote_inferior (inf)->may_wildcard_vcont = false;
6519
6520   return 1;
6521 }
6522
6523 /* Check whether any event pending in the vStopped queue would prevent
6524    a global or process wildcard vCont action.  Clear
6525    *may_global_wildcard if we can't do a global wildcard (vCont;c),
6526    and clear the event inferior's may_wildcard_vcont flag if we can't
6527    do a process-wide wildcard resume (vCont;c:pPID.-1).  */
6528
6529 static void
6530 check_pending_events_prevent_wildcard_vcont (int *may_global_wildcard)
6531 {
6532   struct notif_client *notif = &notif_client_stop;
6533
6534   remote_notif_get_pending_events (notif);
6535   QUEUE_iterate (stop_reply_p, stop_reply_queue,
6536                  check_pending_event_prevents_wildcard_vcont_callback,
6537                  may_global_wildcard);
6538 }
6539
6540 /* Remove stop replies in the queue if its pid is equal to the given
6541    inferior's pid.  */
6542
6543 static int
6544 remove_stop_reply_for_inferior (QUEUE (stop_reply_p) *q,
6545                                 QUEUE_ITER (stop_reply_p) *iter,
6546                                 stop_reply_p event,
6547                                 void *data)
6548 {
6549   struct queue_iter_param *param = (struct queue_iter_param *) data;
6550   struct inferior *inf = (struct inferior *) param->input;
6551
6552   if (ptid_get_pid (event->ptid) == inf->pid)
6553     {
6554       stop_reply_xfree (event);
6555       QUEUE_remove_elem (stop_reply_p, q, iter);
6556     }
6557
6558   return 1;
6559 }
6560
6561 /* Discard all pending stop replies of inferior INF.  */
6562
6563 static void
6564 discard_pending_stop_replies (struct inferior *inf)
6565 {
6566   struct queue_iter_param param;
6567   struct stop_reply *reply;
6568   struct remote_state *rs = get_remote_state ();
6569   struct remote_notif_state *rns = rs->notif_state;
6570
6571   /* This function can be notified when an inferior exists.  When the
6572      target is not remote, the notification state is NULL.  */
6573   if (rs->remote_desc == NULL)
6574     return;
6575
6576   reply = (struct stop_reply *) rns->pending_event[notif_client_stop.id];
6577
6578   /* Discard the in-flight notification.  */
6579   if (reply != NULL && ptid_get_pid (reply->ptid) == inf->pid)
6580     {
6581       stop_reply_xfree (reply);
6582       rns->pending_event[notif_client_stop.id] = NULL;
6583     }
6584
6585   param.input = inf;
6586   param.output = NULL;
6587   /* Discard the stop replies we have already pulled with
6588      vStopped.  */
6589   QUEUE_iterate (stop_reply_p, stop_reply_queue,
6590                  remove_stop_reply_for_inferior, &param);
6591 }
6592
6593 /* If its remote state is equal to the given remote state,
6594    remove EVENT from the stop reply queue.  */
6595
6596 static int
6597 remove_stop_reply_of_remote_state (QUEUE (stop_reply_p) *q,
6598                                    QUEUE_ITER (stop_reply_p) *iter,
6599                                    stop_reply_p event,
6600                                    void *data)
6601 {
6602   struct queue_iter_param *param = (struct queue_iter_param *) data;
6603   struct remote_state *rs = (struct remote_state *) param->input;
6604
6605   if (event->rs == rs)
6606     {
6607       stop_reply_xfree (event);
6608       QUEUE_remove_elem (stop_reply_p, q, iter);
6609     }
6610
6611   return 1;
6612 }
6613
6614 /* Discard the stop replies for RS in stop_reply_queue.  */
6615
6616 static void
6617 discard_pending_stop_replies_in_queue (struct remote_state *rs)
6618 {
6619   struct queue_iter_param param;
6620
6621   param.input = rs;
6622   param.output = NULL;
6623   /* Discard the stop replies we have already pulled with
6624      vStopped.  */
6625   QUEUE_iterate (stop_reply_p, stop_reply_queue,
6626                  remove_stop_reply_of_remote_state, &param);
6627 }
6628
6629 /* A parameter to pass data in and out.  */
6630
6631 static int
6632 remote_notif_remove_once_on_match (QUEUE (stop_reply_p) *q,
6633                                    QUEUE_ITER (stop_reply_p) *iter,
6634                                    stop_reply_p event,
6635                                    void *data)
6636 {
6637   struct queue_iter_param *param = (struct queue_iter_param *) data;
6638   ptid_t *ptid = (ptid_t *) param->input;
6639
6640   if (ptid_match (event->ptid, *ptid))
6641     {
6642       param->output = event;
6643       QUEUE_remove_elem (stop_reply_p, q, iter);
6644       return 0;
6645     }
6646
6647   return 1;
6648 }
6649
6650 /* Remove the first reply in 'stop_reply_queue' which matches
6651    PTID.  */
6652
6653 static struct stop_reply *
6654 remote_notif_remove_queued_reply (ptid_t ptid)
6655 {
6656   struct queue_iter_param param;
6657
6658   param.input = &ptid;
6659   param.output = NULL;
6660
6661   QUEUE_iterate (stop_reply_p, stop_reply_queue,
6662                  remote_notif_remove_once_on_match, &param);
6663   if (notif_debug)
6664     fprintf_unfiltered (gdb_stdlog,
6665                         "notif: discard queued event: 'Stop' in %s\n",
6666                         target_pid_to_str (ptid));
6667
6668   return param.output;
6669 }
6670
6671 /* Look for a queued stop reply belonging to PTID.  If one is found,
6672    remove it from the queue, and return it.  Returns NULL if none is
6673    found.  If there are still queued events left to process, tell the
6674    event loop to get back to target_wait soon.  */
6675
6676 static struct stop_reply *
6677 queued_stop_reply (ptid_t ptid)
6678 {
6679   struct stop_reply *r = remote_notif_remove_queued_reply (ptid);
6680
6681   if (!QUEUE_is_empty (stop_reply_p, stop_reply_queue))
6682     /* There's still at least an event left.  */
6683     mark_async_event_handler (remote_async_inferior_event_token);
6684
6685   return r;
6686 }
6687
6688 /* Push a fully parsed stop reply in the stop reply queue.  Since we
6689    know that we now have at least one queued event left to pass to the
6690    core side, tell the event loop to get back to target_wait soon.  */
6691
6692 static void
6693 push_stop_reply (struct stop_reply *new_event)
6694 {
6695   QUEUE_enque (stop_reply_p, stop_reply_queue, new_event);
6696
6697   if (notif_debug)
6698     fprintf_unfiltered (gdb_stdlog,
6699                         "notif: push 'Stop' %s to queue %d\n",
6700                         target_pid_to_str (new_event->ptid),
6701                         QUEUE_length (stop_reply_p,
6702                                       stop_reply_queue));
6703
6704   mark_async_event_handler (remote_async_inferior_event_token);
6705 }
6706
6707 static int
6708 stop_reply_match_ptid_and_ws (QUEUE (stop_reply_p) *q,
6709                               QUEUE_ITER (stop_reply_p) *iter,
6710                               struct stop_reply *event,
6711                               void *data)
6712 {
6713   ptid_t *ptid = (ptid_t *) data;
6714
6715   return !(ptid_equal (*ptid, event->ptid)
6716            && event->ws.kind == TARGET_WAITKIND_STOPPED);
6717 }
6718
6719 /* Returns true if we have a stop reply for PTID.  */
6720
6721 static int
6722 peek_stop_reply (ptid_t ptid)
6723 {
6724   return !QUEUE_iterate (stop_reply_p, stop_reply_queue,
6725                          stop_reply_match_ptid_and_ws, &ptid);
6726 }
6727
6728 /* Helper for remote_parse_stop_reply.  Return nonzero if the substring
6729    starting with P and ending with PEND matches PREFIX.  */
6730
6731 static int
6732 strprefix (const char *p, const char *pend, const char *prefix)
6733 {
6734   for ( ; p < pend; p++, prefix++)
6735     if (*p != *prefix)
6736       return 0;
6737   return *prefix == '\0';
6738 }
6739
6740 /* Parse the stop reply in BUF.  Either the function succeeds, and the
6741    result is stored in EVENT, or throws an error.  */
6742
6743 static void
6744 remote_parse_stop_reply (char *buf, struct stop_reply *event)
6745 {
6746   remote_arch_state *rsa = NULL;
6747   ULONGEST addr;
6748   const char *p;
6749   int skipregs = 0;
6750
6751   event->ptid = null_ptid;
6752   event->rs = get_remote_state ();
6753   event->ws.kind = TARGET_WAITKIND_IGNORE;
6754   event->ws.value.integer = 0;
6755   event->stop_reason = TARGET_STOPPED_BY_NO_REASON;
6756   event->regcache = NULL;
6757   event->core = -1;
6758
6759   switch (buf[0])
6760     {
6761     case 'T':           /* Status with PC, SP, FP, ...  */
6762       /* Expedited reply, containing Signal, {regno, reg} repeat.  */
6763       /*  format is:  'Tssn...:r...;n...:r...;n...:r...;#cc', where
6764             ss = signal number
6765             n... = register number
6766             r... = register contents
6767       */
6768
6769       p = &buf[3];      /* after Txx */
6770       while (*p)
6771         {
6772           const char *p1;
6773           int fieldsize;
6774
6775           p1 = strchr (p, ':');
6776           if (p1 == NULL)
6777             error (_("Malformed packet(a) (missing colon): %s\n\
6778 Packet: '%s'\n"),
6779                    p, buf);
6780           if (p == p1)
6781             error (_("Malformed packet(a) (missing register number): %s\n\
6782 Packet: '%s'\n"),
6783                    p, buf);
6784
6785           /* Some "registers" are actually extended stop information.
6786              Note if you're adding a new entry here: GDB 7.9 and
6787              earlier assume that all register "numbers" that start
6788              with an hex digit are real register numbers.  Make sure
6789              the server only sends such a packet if it knows the
6790              client understands it.  */
6791
6792           if (strprefix (p, p1, "thread"))
6793             event->ptid = read_ptid (++p1, &p);
6794           else if (strprefix (p, p1, "syscall_entry"))
6795             {
6796               ULONGEST sysno;
6797
6798               event->ws.kind = TARGET_WAITKIND_SYSCALL_ENTRY;
6799               p = unpack_varlen_hex (++p1, &sysno);
6800               event->ws.value.syscall_number = (int) sysno;
6801             }
6802           else if (strprefix (p, p1, "syscall_return"))
6803             {
6804               ULONGEST sysno;
6805
6806               event->ws.kind = TARGET_WAITKIND_SYSCALL_RETURN;
6807               p = unpack_varlen_hex (++p1, &sysno);
6808               event->ws.value.syscall_number = (int) sysno;
6809             }
6810           else if (strprefix (p, p1, "watch")
6811                    || strprefix (p, p1, "rwatch")
6812                    || strprefix (p, p1, "awatch"))
6813             {
6814               event->stop_reason = TARGET_STOPPED_BY_WATCHPOINT;
6815               p = unpack_varlen_hex (++p1, &addr);
6816               event->watch_data_address = (CORE_ADDR) addr;
6817             }
6818           else if (strprefix (p, p1, "swbreak"))
6819             {
6820               event->stop_reason = TARGET_STOPPED_BY_SW_BREAKPOINT;
6821
6822               /* Make sure the stub doesn't forget to indicate support
6823                  with qSupported.  */
6824               if (packet_support (PACKET_swbreak_feature) != PACKET_ENABLE)
6825                 error (_("Unexpected swbreak stop reason"));
6826
6827               /* The value part is documented as "must be empty",
6828                  though we ignore it, in case we ever decide to make
6829                  use of it in a backward compatible way.  */
6830               p = strchrnul (p1 + 1, ';');
6831             }
6832           else if (strprefix (p, p1, "hwbreak"))
6833             {
6834               event->stop_reason = TARGET_STOPPED_BY_HW_BREAKPOINT;
6835
6836               /* Make sure the stub doesn't forget to indicate support
6837                  with qSupported.  */
6838               if (packet_support (PACKET_hwbreak_feature) != PACKET_ENABLE)
6839                 error (_("Unexpected hwbreak stop reason"));
6840
6841               /* See above.  */
6842               p = strchrnul (p1 + 1, ';');
6843             }
6844           else if (strprefix (p, p1, "library"))
6845             {
6846               event->ws.kind = TARGET_WAITKIND_LOADED;
6847               p = strchrnul (p1 + 1, ';');
6848             }
6849           else if (strprefix (p, p1, "replaylog"))
6850             {
6851               event->ws.kind = TARGET_WAITKIND_NO_HISTORY;
6852               /* p1 will indicate "begin" or "end", but it makes
6853                  no difference for now, so ignore it.  */
6854               p = strchrnul (p1 + 1, ';');
6855             }
6856           else if (strprefix (p, p1, "core"))
6857             {
6858               ULONGEST c;
6859
6860               p = unpack_varlen_hex (++p1, &c);
6861               event->core = c;
6862             }
6863           else if (strprefix (p, p1, "fork"))
6864             {
6865               event->ws.value.related_pid = read_ptid (++p1, &p);
6866               event->ws.kind = TARGET_WAITKIND_FORKED;
6867             }
6868           else if (strprefix (p, p1, "vfork"))
6869             {
6870               event->ws.value.related_pid = read_ptid (++p1, &p);
6871               event->ws.kind = TARGET_WAITKIND_VFORKED;
6872             }
6873           else if (strprefix (p, p1, "vforkdone"))
6874             {
6875               event->ws.kind = TARGET_WAITKIND_VFORK_DONE;
6876               p = strchrnul (p1 + 1, ';');
6877             }
6878           else if (strprefix (p, p1, "exec"))
6879             {
6880               ULONGEST ignored;
6881               char pathname[PATH_MAX];
6882               int pathlen;
6883
6884               /* Determine the length of the execd pathname.  */
6885               p = unpack_varlen_hex (++p1, &ignored);
6886               pathlen = (p - p1) / 2;
6887
6888               /* Save the pathname for event reporting and for
6889                  the next run command.  */
6890               hex2bin (p1, (gdb_byte *) pathname, pathlen);
6891               pathname[pathlen] = '\0';
6892
6893               /* This is freed during event handling.  */
6894               event->ws.value.execd_pathname = xstrdup (pathname);
6895               event->ws.kind = TARGET_WAITKIND_EXECD;
6896
6897               /* Skip the registers included in this packet, since
6898                  they may be for an architecture different from the
6899                  one used by the original program.  */
6900               skipregs = 1;
6901             }
6902           else if (strprefix (p, p1, "create"))
6903             {
6904               event->ws.kind = TARGET_WAITKIND_THREAD_CREATED;
6905               p = strchrnul (p1 + 1, ';');
6906             }
6907           else
6908             {
6909               ULONGEST pnum;
6910               const char *p_temp;
6911
6912               if (skipregs)
6913                 {
6914                   p = strchrnul (p1 + 1, ';');
6915                   p++;
6916                   continue;
6917                 }
6918
6919               /* Maybe a real ``P'' register number.  */
6920               p_temp = unpack_varlen_hex (p, &pnum);
6921               /* If the first invalid character is the colon, we got a
6922                  register number.  Otherwise, it's an unknown stop
6923                  reason.  */
6924               if (p_temp == p1)
6925                 {
6926                   /* If we haven't parsed the event's thread yet, find
6927                      it now, in order to find the architecture of the
6928                      reported expedited registers.  */
6929                   if (event->ptid == null_ptid)
6930                     {
6931                       const char *thr = strstr (p1 + 1, ";thread:");
6932                       if (thr != NULL)
6933                         event->ptid = read_ptid (thr + strlen (";thread:"),
6934                                                  NULL);
6935                       else
6936                         event->ptid = magic_null_ptid;
6937                     }
6938
6939                   if (rsa == NULL)
6940                     {
6941                       inferior *inf = (event->ptid == null_ptid
6942                                        ? NULL
6943                                        : find_inferior_ptid (event->ptid));
6944                       /* If this is the first time we learn anything
6945                          about this process, skip the registers
6946                          included in this packet, since we don't yet
6947                          know which architecture to use to parse them.
6948                          We'll determine the architecture later when
6949                          we process the stop reply and retrieve the
6950                          target description, via
6951                          remote_notice_new_inferior ->
6952                          post_create_inferior.  */
6953                       if (inf == NULL)
6954                         {
6955                           p = strchrnul (p1 + 1, ';');
6956                           p++;
6957                           continue;
6958                         }
6959
6960                       event->arch = inf->gdbarch;
6961                       rsa = get_remote_arch_state (event->arch);
6962                     }
6963
6964                   packet_reg *reg
6965                     = packet_reg_from_pnum (event->arch, rsa, pnum);
6966                   cached_reg_t cached_reg;
6967
6968                   if (reg == NULL)
6969                     error (_("Remote sent bad register number %s: %s\n\
6970 Packet: '%s'\n"),
6971                            hex_string (pnum), p, buf);
6972
6973                   cached_reg.num = reg->regnum;
6974                   cached_reg.data = (gdb_byte *)
6975                     xmalloc (register_size (event->arch, reg->regnum));
6976
6977                   p = p1 + 1;
6978                   fieldsize = hex2bin (p, cached_reg.data,
6979                                        register_size (event->arch, reg->regnum));
6980                   p += 2 * fieldsize;
6981                   if (fieldsize < register_size (event->arch, reg->regnum))
6982                     warning (_("Remote reply is too short: %s"), buf);
6983
6984                   VEC_safe_push (cached_reg_t, event->regcache, &cached_reg);
6985                 }
6986               else
6987                 {
6988                   /* Not a number.  Silently skip unknown optional
6989                      info.  */
6990                   p = strchrnul (p1 + 1, ';');
6991                 }
6992             }
6993
6994           if (*p != ';')
6995             error (_("Remote register badly formatted: %s\nhere: %s"),
6996                    buf, p);
6997           ++p;
6998         }
6999
7000       if (event->ws.kind != TARGET_WAITKIND_IGNORE)
7001         break;
7002
7003       /* fall through */
7004     case 'S':           /* Old style status, just signal only.  */
7005       {
7006         int sig;
7007
7008         event->ws.kind = TARGET_WAITKIND_STOPPED;
7009         sig = (fromhex (buf[1]) << 4) + fromhex (buf[2]);
7010         if (GDB_SIGNAL_FIRST <= sig && sig < GDB_SIGNAL_LAST)
7011           event->ws.value.sig = (enum gdb_signal) sig;
7012         else
7013           event->ws.value.sig = GDB_SIGNAL_UNKNOWN;
7014       }
7015       break;
7016     case 'w':           /* Thread exited.  */
7017       {
7018         const char *p;
7019         ULONGEST value;
7020
7021         event->ws.kind = TARGET_WAITKIND_THREAD_EXITED;
7022         p = unpack_varlen_hex (&buf[1], &value);
7023         event->ws.value.integer = value;
7024         if (*p != ';')
7025           error (_("stop reply packet badly formatted: %s"), buf);
7026         event->ptid = read_ptid (++p, NULL);
7027         break;
7028       }
7029     case 'W':           /* Target exited.  */
7030     case 'X':
7031       {
7032         const char *p;
7033         int pid;
7034         ULONGEST value;
7035
7036         /* GDB used to accept only 2 hex chars here.  Stubs should
7037            only send more if they detect GDB supports multi-process
7038            support.  */
7039         p = unpack_varlen_hex (&buf[1], &value);
7040
7041         if (buf[0] == 'W')
7042           {
7043             /* The remote process exited.  */
7044             event->ws.kind = TARGET_WAITKIND_EXITED;
7045             event->ws.value.integer = value;
7046           }
7047         else
7048           {
7049             /* The remote process exited with a signal.  */
7050             event->ws.kind = TARGET_WAITKIND_SIGNALLED;
7051             if (GDB_SIGNAL_FIRST <= value && value < GDB_SIGNAL_LAST)
7052               event->ws.value.sig = (enum gdb_signal) value;
7053             else
7054               event->ws.value.sig = GDB_SIGNAL_UNKNOWN;
7055           }
7056
7057         /* If no process is specified, assume inferior_ptid.  */
7058         pid = ptid_get_pid (inferior_ptid);
7059         if (*p == '\0')
7060           ;
7061         else if (*p == ';')
7062           {
7063             p++;
7064
7065             if (*p == '\0')
7066               ;
7067             else if (startswith (p, "process:"))
7068               {
7069                 ULONGEST upid;
7070
7071                 p += sizeof ("process:") - 1;
7072                 unpack_varlen_hex (p, &upid);
7073                 pid = upid;
7074               }
7075             else
7076               error (_("unknown stop reply packet: %s"), buf);
7077           }
7078         else
7079           error (_("unknown stop reply packet: %s"), buf);
7080         event->ptid = pid_to_ptid (pid);
7081       }
7082       break;
7083     case 'N':
7084       event->ws.kind = TARGET_WAITKIND_NO_RESUMED;
7085       event->ptid = minus_one_ptid;
7086       break;
7087     }
7088
7089   if (target_is_non_stop_p () && ptid_equal (event->ptid, null_ptid))
7090     error (_("No process or thread specified in stop reply: %s"), buf);
7091 }
7092
7093 /* When the stub wants to tell GDB about a new notification reply, it
7094    sends a notification (%Stop, for example).  Those can come it at
7095    any time, hence, we have to make sure that any pending
7096    putpkt/getpkt sequence we're making is finished, before querying
7097    the stub for more events with the corresponding ack command
7098    (vStopped, for example).  E.g., if we started a vStopped sequence
7099    immediately upon receiving the notification, something like this
7100    could happen:
7101
7102     1.1) --> Hg 1
7103     1.2) <-- OK
7104     1.3) --> g
7105     1.4) <-- %Stop
7106     1.5) --> vStopped
7107     1.6) <-- (registers reply to step #1.3)
7108
7109    Obviously, the reply in step #1.6 would be unexpected to a vStopped
7110    query.
7111
7112    To solve this, whenever we parse a %Stop notification successfully,
7113    we mark the REMOTE_ASYNC_GET_PENDING_EVENTS_TOKEN, and carry on
7114    doing whatever we were doing:
7115
7116     2.1) --> Hg 1
7117     2.2) <-- OK
7118     2.3) --> g
7119     2.4) <-- %Stop
7120       <GDB marks the REMOTE_ASYNC_GET_PENDING_EVENTS_TOKEN>
7121     2.5) <-- (registers reply to step #2.3)
7122
7123    Eventualy after step #2.5, we return to the event loop, which
7124    notices there's an event on the
7125    REMOTE_ASYNC_GET_PENDING_EVENTS_TOKEN event and calls the
7126    associated callback --- the function below.  At this point, we're
7127    always safe to start a vStopped sequence. :
7128
7129     2.6) --> vStopped
7130     2.7) <-- T05 thread:2
7131     2.8) --> vStopped
7132     2.9) --> OK
7133 */
7134
7135 void
7136 remote_notif_get_pending_events (struct notif_client *nc)
7137 {
7138   struct remote_state *rs = get_remote_state ();
7139
7140   if (rs->notif_state->pending_event[nc->id] != NULL)
7141     {
7142       if (notif_debug)
7143         fprintf_unfiltered (gdb_stdlog,
7144                             "notif: process: '%s' ack pending event\n",
7145                             nc->name);
7146
7147       /* acknowledge */
7148       nc->ack (nc, rs->buf, rs->notif_state->pending_event[nc->id]);
7149       rs->notif_state->pending_event[nc->id] = NULL;
7150
7151       while (1)
7152         {
7153           getpkt (&rs->buf, &rs->buf_size, 0);
7154           if (strcmp (rs->buf, "OK") == 0)
7155             break;
7156           else
7157             remote_notif_ack (nc, rs->buf);
7158         }
7159     }
7160   else
7161     {
7162       if (notif_debug)
7163         fprintf_unfiltered (gdb_stdlog,
7164                             "notif: process: '%s' no pending reply\n",
7165                             nc->name);
7166     }
7167 }
7168
7169 /* Called when it is decided that STOP_REPLY holds the info of the
7170    event that is to be returned to the core.  This function always
7171    destroys STOP_REPLY.  */
7172
7173 static ptid_t
7174 process_stop_reply (struct stop_reply *stop_reply,
7175                     struct target_waitstatus *status)
7176 {
7177   ptid_t ptid;
7178
7179   *status = stop_reply->ws;
7180   ptid = stop_reply->ptid;
7181
7182   /* If no thread/process was reported by the stub, assume the current
7183      inferior.  */
7184   if (ptid_equal (ptid, null_ptid))
7185     ptid = inferior_ptid;
7186
7187   if (status->kind != TARGET_WAITKIND_EXITED
7188       && status->kind != TARGET_WAITKIND_SIGNALLED
7189       && status->kind != TARGET_WAITKIND_NO_RESUMED)
7190     {
7191       /* Expedited registers.  */
7192       if (stop_reply->regcache)
7193         {
7194           struct regcache *regcache
7195             = get_thread_arch_regcache (ptid, stop_reply->arch);
7196           cached_reg_t *reg;
7197           int ix;
7198
7199           for (ix = 0;
7200                VEC_iterate (cached_reg_t, stop_reply->regcache, ix, reg);
7201                ix++)
7202           {
7203             regcache_raw_supply (regcache, reg->num, reg->data);
7204             xfree (reg->data);
7205           }
7206
7207           VEC_free (cached_reg_t, stop_reply->regcache);
7208         }
7209
7210       remote_notice_new_inferior (ptid, 0);
7211       remote_thread_info *remote_thr = get_remote_thread_info (ptid);
7212       remote_thr->core = stop_reply->core;
7213       remote_thr->stop_reason = stop_reply->stop_reason;
7214       remote_thr->watch_data_address = stop_reply->watch_data_address;
7215       remote_thr->vcont_resumed = 0;
7216     }
7217
7218   stop_reply_xfree (stop_reply);
7219   return ptid;
7220 }
7221
7222 /* The non-stop mode version of target_wait.  */
7223
7224 static ptid_t
7225 remote_wait_ns (ptid_t ptid, struct target_waitstatus *status, int options)
7226 {
7227   struct remote_state *rs = get_remote_state ();
7228   struct stop_reply *stop_reply;
7229   int ret;
7230   int is_notif = 0;
7231
7232   /* If in non-stop mode, get out of getpkt even if a
7233      notification is received.  */
7234
7235   ret = getpkt_or_notif_sane (&rs->buf, &rs->buf_size,
7236                               0 /* forever */, &is_notif);
7237   while (1)
7238     {
7239       if (ret != -1 && !is_notif)
7240         switch (rs->buf[0])
7241           {
7242           case 'E':             /* Error of some sort.  */
7243             /* We're out of sync with the target now.  Did it continue
7244                or not?  We can't tell which thread it was in non-stop,
7245                so just ignore this.  */
7246             warning (_("Remote failure reply: %s"), rs->buf);
7247             break;
7248           case 'O':             /* Console output.  */
7249             remote_console_output (rs->buf + 1);
7250             break;
7251           default:
7252             warning (_("Invalid remote reply: %s"), rs->buf);
7253             break;
7254           }
7255
7256       /* Acknowledge a pending stop reply that may have arrived in the
7257          mean time.  */
7258       if (rs->notif_state->pending_event[notif_client_stop.id] != NULL)
7259         remote_notif_get_pending_events (&notif_client_stop);
7260
7261       /* If indeed we noticed a stop reply, we're done.  */
7262       stop_reply = queued_stop_reply (ptid);
7263       if (stop_reply != NULL)
7264         return process_stop_reply (stop_reply, status);
7265
7266       /* Still no event.  If we're just polling for an event, then
7267          return to the event loop.  */
7268       if (options & TARGET_WNOHANG)
7269         {
7270           status->kind = TARGET_WAITKIND_IGNORE;
7271           return minus_one_ptid;
7272         }
7273
7274       /* Otherwise do a blocking wait.  */
7275       ret = getpkt_or_notif_sane (&rs->buf, &rs->buf_size,
7276                                   1 /* forever */, &is_notif);
7277     }
7278 }
7279
7280 /* Wait until the remote machine stops, then return, storing status in
7281    STATUS just as `wait' would.  */
7282
7283 static ptid_t
7284 remote_wait_as (ptid_t ptid, struct target_waitstatus *status, int options)
7285 {
7286   struct remote_state *rs = get_remote_state ();
7287   ptid_t event_ptid = null_ptid;
7288   char *buf;
7289   struct stop_reply *stop_reply;
7290
7291  again:
7292
7293   status->kind = TARGET_WAITKIND_IGNORE;
7294   status->value.integer = 0;
7295
7296   stop_reply = queued_stop_reply (ptid);
7297   if (stop_reply != NULL)
7298     return process_stop_reply (stop_reply, status);
7299
7300   if (rs->cached_wait_status)
7301     /* Use the cached wait status, but only once.  */
7302     rs->cached_wait_status = 0;
7303   else
7304     {
7305       int ret;
7306       int is_notif;
7307       int forever = ((options & TARGET_WNOHANG) == 0
7308                      && wait_forever_enabled_p);
7309
7310       if (!rs->waiting_for_stop_reply)
7311         {
7312           status->kind = TARGET_WAITKIND_NO_RESUMED;
7313           return minus_one_ptid;
7314         }
7315
7316       /* FIXME: cagney/1999-09-27: If we're in async mode we should
7317          _never_ wait for ever -> test on target_is_async_p().
7318          However, before we do that we need to ensure that the caller
7319          knows how to take the target into/out of async mode.  */
7320       ret = getpkt_or_notif_sane (&rs->buf, &rs->buf_size,
7321                                   forever, &is_notif);
7322
7323       /* GDB gets a notification.  Return to core as this event is
7324          not interesting.  */
7325       if (ret != -1 && is_notif)
7326         return minus_one_ptid;
7327
7328       if (ret == -1 && (options & TARGET_WNOHANG) != 0)
7329         return minus_one_ptid;
7330     }
7331
7332   buf = rs->buf;
7333
7334   /* Assume that the target has acknowledged Ctrl-C unless we receive
7335      an 'F' or 'O' packet.  */
7336   if (buf[0] != 'F' && buf[0] != 'O')
7337     rs->ctrlc_pending_p = 0;
7338
7339   switch (buf[0])
7340     {
7341     case 'E':           /* Error of some sort.  */
7342       /* We're out of sync with the target now.  Did it continue or
7343          not?  Not is more likely, so report a stop.  */
7344       rs->waiting_for_stop_reply = 0;
7345
7346       warning (_("Remote failure reply: %s"), buf);
7347       status->kind = TARGET_WAITKIND_STOPPED;
7348       status->value.sig = GDB_SIGNAL_0;
7349       break;
7350     case 'F':           /* File-I/O request.  */
7351       /* GDB may access the inferior memory while handling the File-I/O
7352          request, but we don't want GDB accessing memory while waiting
7353          for a stop reply.  See the comments in putpkt_binary.  Set
7354          waiting_for_stop_reply to 0 temporarily.  */
7355       rs->waiting_for_stop_reply = 0;
7356       remote_fileio_request (buf, rs->ctrlc_pending_p);
7357       rs->ctrlc_pending_p = 0;
7358       /* GDB handled the File-I/O request, and the target is running
7359          again.  Keep waiting for events.  */
7360       rs->waiting_for_stop_reply = 1;
7361       break;
7362     case 'N': case 'T': case 'S': case 'X': case 'W':
7363       {
7364         struct stop_reply *stop_reply;
7365
7366         /* There is a stop reply to handle.  */
7367         rs->waiting_for_stop_reply = 0;
7368
7369         stop_reply
7370           = (struct stop_reply *) remote_notif_parse (&notif_client_stop,
7371                                                       rs->buf);
7372
7373         event_ptid = process_stop_reply (stop_reply, status);
7374         break;
7375       }
7376     case 'O':           /* Console output.  */
7377       remote_console_output (buf + 1);
7378       break;
7379     case '\0':
7380       if (rs->last_sent_signal != GDB_SIGNAL_0)
7381         {
7382           /* Zero length reply means that we tried 'S' or 'C' and the
7383              remote system doesn't support it.  */
7384           target_terminal::ours_for_output ();
7385           printf_filtered
7386             ("Can't send signals to this remote system.  %s not sent.\n",
7387              gdb_signal_to_name (rs->last_sent_signal));
7388           rs->last_sent_signal = GDB_SIGNAL_0;
7389           target_terminal::inferior ();
7390
7391           strcpy (buf, rs->last_sent_step ? "s" : "c");
7392           putpkt (buf);
7393           break;
7394         }
7395       /* else fallthrough */
7396     default:
7397       warning (_("Invalid remote reply: %s"), buf);
7398       break;
7399     }
7400
7401   if (status->kind == TARGET_WAITKIND_NO_RESUMED)
7402     return minus_one_ptid;
7403   else if (status->kind == TARGET_WAITKIND_IGNORE)
7404     {
7405       /* Nothing interesting happened.  If we're doing a non-blocking
7406          poll, we're done.  Otherwise, go back to waiting.  */
7407       if (options & TARGET_WNOHANG)
7408         return minus_one_ptid;
7409       else
7410         goto again;
7411     }
7412   else if (status->kind != TARGET_WAITKIND_EXITED
7413            && status->kind != TARGET_WAITKIND_SIGNALLED)
7414     {
7415       if (!ptid_equal (event_ptid, null_ptid))
7416         record_currthread (rs, event_ptid);
7417       else
7418         event_ptid = inferior_ptid;
7419     }
7420   else
7421     /* A process exit.  Invalidate our notion of current thread.  */
7422     record_currthread (rs, minus_one_ptid);
7423
7424   return event_ptid;
7425 }
7426
7427 /* Wait until the remote machine stops, then return, storing status in
7428    STATUS just as `wait' would.  */
7429
7430 static ptid_t
7431 remote_wait (struct target_ops *ops,
7432              ptid_t ptid, struct target_waitstatus *status, int options)
7433 {
7434   ptid_t event_ptid;
7435
7436   if (target_is_non_stop_p ())
7437     event_ptid = remote_wait_ns (ptid, status, options);
7438   else
7439     event_ptid = remote_wait_as (ptid, status, options);
7440
7441   if (target_is_async_p ())
7442     {
7443       /* If there are are events left in the queue tell the event loop
7444          to return here.  */
7445       if (!QUEUE_is_empty (stop_reply_p, stop_reply_queue))
7446         mark_async_event_handler (remote_async_inferior_event_token);
7447     }
7448
7449   return event_ptid;
7450 }
7451
7452 /* Fetch a single register using a 'p' packet.  */
7453
7454 static int
7455 fetch_register_using_p (struct regcache *regcache, struct packet_reg *reg)
7456 {
7457   struct gdbarch *gdbarch = regcache->arch ();
7458   struct remote_state *rs = get_remote_state ();
7459   char *buf, *p;
7460   gdb_byte *regp = (gdb_byte *) alloca (register_size (gdbarch, reg->regnum));
7461   int i;
7462
7463   if (packet_support (PACKET_p) == PACKET_DISABLE)
7464     return 0;
7465
7466   if (reg->pnum == -1)
7467     return 0;
7468
7469   p = rs->buf;
7470   *p++ = 'p';
7471   p += hexnumstr (p, reg->pnum);
7472   *p++ = '\0';
7473   putpkt (rs->buf);
7474   getpkt (&rs->buf, &rs->buf_size, 0);
7475
7476   buf = rs->buf;
7477
7478   switch (packet_ok (buf, &remote_protocol_packets[PACKET_p]))
7479     {
7480     case PACKET_OK:
7481       break;
7482     case PACKET_UNKNOWN:
7483       return 0;
7484     case PACKET_ERROR:
7485       error (_("Could not fetch register \"%s\"; remote failure reply '%s'"),
7486              gdbarch_register_name (regcache->arch (), 
7487                                     reg->regnum), 
7488              buf);
7489     }
7490
7491   /* If this register is unfetchable, tell the regcache.  */
7492   if (buf[0] == 'x')
7493     {
7494       regcache_raw_supply (regcache, reg->regnum, NULL);
7495       return 1;
7496     }
7497
7498   /* Otherwise, parse and supply the value.  */
7499   p = buf;
7500   i = 0;
7501   while (p[0] != 0)
7502     {
7503       if (p[1] == 0)
7504         error (_("fetch_register_using_p: early buf termination"));
7505
7506       regp[i++] = fromhex (p[0]) * 16 + fromhex (p[1]);
7507       p += 2;
7508     }
7509   regcache_raw_supply (regcache, reg->regnum, regp);
7510   return 1;
7511 }
7512
7513 /* Fetch the registers included in the target's 'g' packet.  */
7514
7515 static int
7516 send_g_packet (void)
7517 {
7518   struct remote_state *rs = get_remote_state ();
7519   int buf_len;
7520
7521   xsnprintf (rs->buf, get_remote_packet_size (), "g");
7522   remote_send (&rs->buf, &rs->buf_size);
7523
7524   /* We can get out of synch in various cases.  If the first character
7525      in the buffer is not a hex character, assume that has happened
7526      and try to fetch another packet to read.  */
7527   while ((rs->buf[0] < '0' || rs->buf[0] > '9')
7528          && (rs->buf[0] < 'A' || rs->buf[0] > 'F')
7529          && (rs->buf[0] < 'a' || rs->buf[0] > 'f')
7530          && rs->buf[0] != 'x')  /* New: unavailable register value.  */
7531     {
7532       if (remote_debug)
7533         fprintf_unfiltered (gdb_stdlog,
7534                             "Bad register packet; fetching a new packet\n");
7535       getpkt (&rs->buf, &rs->buf_size, 0);
7536     }
7537
7538   buf_len = strlen (rs->buf);
7539
7540   /* Sanity check the received packet.  */
7541   if (buf_len % 2 != 0)
7542     error (_("Remote 'g' packet reply is of odd length: %s"), rs->buf);
7543
7544   return buf_len / 2;
7545 }
7546
7547 static void
7548 process_g_packet (struct regcache *regcache)
7549 {
7550   struct gdbarch *gdbarch = regcache->arch ();
7551   struct remote_state *rs = get_remote_state ();
7552   remote_arch_state *rsa = get_remote_arch_state (gdbarch);
7553   int i, buf_len;
7554   char *p;
7555   char *regs;
7556
7557   buf_len = strlen (rs->buf);
7558
7559   /* Further sanity checks, with knowledge of the architecture.  */
7560   if (buf_len > 2 * rsa->sizeof_g_packet)
7561     error (_("Remote 'g' packet reply is too long (expected %ld bytes, got %d "
7562              "bytes): %s"), rsa->sizeof_g_packet, buf_len / 2, rs->buf);
7563
7564   /* Save the size of the packet sent to us by the target.  It is used
7565      as a heuristic when determining the max size of packets that the
7566      target can safely receive.  */
7567   if (rsa->actual_register_packet_size == 0)
7568     rsa->actual_register_packet_size = buf_len;
7569
7570   /* If this is smaller than we guessed the 'g' packet would be,
7571      update our records.  A 'g' reply that doesn't include a register's
7572      value implies either that the register is not available, or that
7573      the 'p' packet must be used.  */
7574   if (buf_len < 2 * rsa->sizeof_g_packet)
7575     {
7576       long sizeof_g_packet = buf_len / 2;
7577
7578       for (i = 0; i < gdbarch_num_regs (gdbarch); i++)
7579         {
7580           long offset = rsa->regs[i].offset;
7581           long reg_size = register_size (gdbarch, i);
7582
7583           if (rsa->regs[i].pnum == -1)
7584             continue;
7585
7586           if (offset >= sizeof_g_packet)
7587             rsa->regs[i].in_g_packet = 0;
7588           else if (offset + reg_size > sizeof_g_packet)
7589             error (_("Truncated register %d in remote 'g' packet"), i);
7590           else
7591             rsa->regs[i].in_g_packet = 1;
7592         }
7593
7594       /* Looks valid enough, we can assume this is the correct length
7595          for a 'g' packet.  It's important not to adjust
7596          rsa->sizeof_g_packet if we have truncated registers otherwise
7597          this "if" won't be run the next time the method is called
7598          with a packet of the same size and one of the internal errors
7599          below will trigger instead.  */
7600       rsa->sizeof_g_packet = sizeof_g_packet;
7601     }
7602
7603   regs = (char *) alloca (rsa->sizeof_g_packet);
7604
7605   /* Unimplemented registers read as all bits zero.  */
7606   memset (regs, 0, rsa->sizeof_g_packet);
7607
7608   /* Reply describes registers byte by byte, each byte encoded as two
7609      hex characters.  Suck them all up, then supply them to the
7610      register cacheing/storage mechanism.  */
7611
7612   p = rs->buf;
7613   for (i = 0; i < rsa->sizeof_g_packet; i++)
7614     {
7615       if (p[0] == 0 || p[1] == 0)
7616         /* This shouldn't happen - we adjusted sizeof_g_packet above.  */
7617         internal_error (__FILE__, __LINE__,
7618                         _("unexpected end of 'g' packet reply"));
7619
7620       if (p[0] == 'x' && p[1] == 'x')
7621         regs[i] = 0;            /* 'x' */
7622       else
7623         regs[i] = fromhex (p[0]) * 16 + fromhex (p[1]);
7624       p += 2;
7625     }
7626
7627   for (i = 0; i < gdbarch_num_regs (gdbarch); i++)
7628     {
7629       struct packet_reg *r = &rsa->regs[i];
7630       long reg_size = register_size (gdbarch, i);
7631
7632       if (r->in_g_packet)
7633         {
7634           if ((r->offset + reg_size) * 2 > strlen (rs->buf))
7635             /* This shouldn't happen - we adjusted in_g_packet above.  */
7636             internal_error (__FILE__, __LINE__,
7637                             _("unexpected end of 'g' packet reply"));
7638           else if (rs->buf[r->offset * 2] == 'x')
7639             {
7640               gdb_assert (r->offset * 2 < strlen (rs->buf));
7641               /* The register isn't available, mark it as such (at
7642                  the same time setting the value to zero).  */
7643               regcache_raw_supply (regcache, r->regnum, NULL);
7644             }
7645           else
7646             regcache_raw_supply (regcache, r->regnum,
7647                                  regs + r->offset);
7648         }
7649     }
7650 }
7651
7652 static void
7653 fetch_registers_using_g (struct regcache *regcache)
7654 {
7655   send_g_packet ();
7656   process_g_packet (regcache);
7657 }
7658
7659 /* Make the remote selected traceframe match GDB's selected
7660    traceframe.  */
7661
7662 static void
7663 set_remote_traceframe (void)
7664 {
7665   int newnum;
7666   struct remote_state *rs = get_remote_state ();
7667
7668   if (rs->remote_traceframe_number == get_traceframe_number ())
7669     return;
7670
7671   /* Avoid recursion, remote_trace_find calls us again.  */
7672   rs->remote_traceframe_number = get_traceframe_number ();
7673
7674   newnum = target_trace_find (tfind_number,
7675                               get_traceframe_number (), 0, 0, NULL);
7676
7677   /* Should not happen.  If it does, all bets are off.  */
7678   if (newnum != get_traceframe_number ())
7679     warning (_("could not set remote traceframe"));
7680 }
7681
7682 static void
7683 remote_fetch_registers (struct target_ops *ops,
7684                         struct regcache *regcache, int regnum)
7685 {
7686   struct gdbarch *gdbarch = regcache->arch ();
7687   remote_arch_state *rsa = get_remote_arch_state (gdbarch);
7688   int i;
7689
7690   set_remote_traceframe ();
7691   set_general_thread (regcache_get_ptid (regcache));
7692
7693   if (regnum >= 0)
7694     {
7695       packet_reg *reg = packet_reg_from_regnum (gdbarch, rsa, regnum);
7696
7697       gdb_assert (reg != NULL);
7698
7699       /* If this register might be in the 'g' packet, try that first -
7700          we are likely to read more than one register.  If this is the
7701          first 'g' packet, we might be overly optimistic about its
7702          contents, so fall back to 'p'.  */
7703       if (reg->in_g_packet)
7704         {
7705           fetch_registers_using_g (regcache);
7706           if (reg->in_g_packet)
7707             return;
7708         }
7709
7710       if (fetch_register_using_p (regcache, reg))
7711         return;
7712
7713       /* This register is not available.  */
7714       regcache_raw_supply (regcache, reg->regnum, NULL);
7715
7716       return;
7717     }
7718
7719   fetch_registers_using_g (regcache);
7720
7721   for (i = 0; i < gdbarch_num_regs (gdbarch); i++)
7722     if (!rsa->regs[i].in_g_packet)
7723       if (!fetch_register_using_p (regcache, &rsa->regs[i]))
7724         {
7725           /* This register is not available.  */
7726           regcache_raw_supply (regcache, i, NULL);
7727         }
7728 }
7729
7730 /* Prepare to store registers.  Since we may send them all (using a
7731    'G' request), we have to read out the ones we don't want to change
7732    first.  */
7733
7734 static void
7735 remote_prepare_to_store (struct target_ops *self, struct regcache *regcache)
7736 {
7737   remote_arch_state *rsa = get_remote_arch_state (regcache->arch ());
7738   int i;
7739
7740   /* Make sure the entire registers array is valid.  */
7741   switch (packet_support (PACKET_P))
7742     {
7743     case PACKET_DISABLE:
7744     case PACKET_SUPPORT_UNKNOWN:
7745       /* Make sure all the necessary registers are cached.  */
7746       for (i = 0; i < gdbarch_num_regs (regcache->arch ()); i++)
7747         if (rsa->regs[i].in_g_packet)
7748           regcache_raw_update (regcache, rsa->regs[i].regnum);
7749       break;
7750     case PACKET_ENABLE:
7751       break;
7752     }
7753 }
7754
7755 /* Helper: Attempt to store REGNUM using the P packet.  Return fail IFF
7756    packet was not recognized.  */
7757
7758 static int
7759 store_register_using_P (const struct regcache *regcache, 
7760                         struct packet_reg *reg)
7761 {
7762   struct gdbarch *gdbarch = regcache->arch ();
7763   struct remote_state *rs = get_remote_state ();
7764   /* Try storing a single register.  */
7765   char *buf = rs->buf;
7766   gdb_byte *regp = (gdb_byte *) alloca (register_size (gdbarch, reg->regnum));
7767   char *p;
7768
7769   if (packet_support (PACKET_P) == PACKET_DISABLE)
7770     return 0;
7771
7772   if (reg->pnum == -1)
7773     return 0;
7774
7775   xsnprintf (buf, get_remote_packet_size (), "P%s=", phex_nz (reg->pnum, 0));
7776   p = buf + strlen (buf);
7777   regcache_raw_collect (regcache, reg->regnum, regp);
7778   bin2hex (regp, p, register_size (gdbarch, reg->regnum));
7779   putpkt (rs->buf);
7780   getpkt (&rs->buf, &rs->buf_size, 0);
7781
7782   switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_P]))
7783     {
7784     case PACKET_OK:
7785       return 1;
7786     case PACKET_ERROR:
7787       error (_("Could not write register \"%s\"; remote failure reply '%s'"),
7788              gdbarch_register_name (gdbarch, reg->regnum), rs->buf);
7789     case PACKET_UNKNOWN:
7790       return 0;
7791     default:
7792       internal_error (__FILE__, __LINE__, _("Bad result from packet_ok"));
7793     }
7794 }
7795
7796 /* Store register REGNUM, or all registers if REGNUM == -1, from the
7797    contents of the register cache buffer.  FIXME: ignores errors.  */
7798
7799 static void
7800 store_registers_using_G (const struct regcache *regcache)
7801 {
7802   struct remote_state *rs = get_remote_state ();
7803   remote_arch_state *rsa = get_remote_arch_state (regcache->arch ());
7804   gdb_byte *regs;
7805   char *p;
7806
7807   /* Extract all the registers in the regcache copying them into a
7808      local buffer.  */
7809   {
7810     int i;
7811
7812     regs = (gdb_byte *) alloca (rsa->sizeof_g_packet);
7813     memset (regs, 0, rsa->sizeof_g_packet);
7814     for (i = 0; i < gdbarch_num_regs (regcache->arch ()); i++)
7815       {
7816         struct packet_reg *r = &rsa->regs[i];
7817
7818         if (r->in_g_packet)
7819           regcache_raw_collect (regcache, r->regnum, regs + r->offset);
7820       }
7821   }
7822
7823   /* Command describes registers byte by byte,
7824      each byte encoded as two hex characters.  */
7825   p = rs->buf;
7826   *p++ = 'G';
7827   bin2hex (regs, p, rsa->sizeof_g_packet);
7828   putpkt (rs->buf);
7829   getpkt (&rs->buf, &rs->buf_size, 0);
7830   if (packet_check_result (rs->buf) == PACKET_ERROR)
7831     error (_("Could not write registers; remote failure reply '%s'"), 
7832            rs->buf);
7833 }
7834
7835 /* Store register REGNUM, or all registers if REGNUM == -1, from the contents
7836    of the register cache buffer.  FIXME: ignores errors.  */
7837
7838 static void
7839 remote_store_registers (struct target_ops *ops,
7840                         struct regcache *regcache, int regnum)
7841 {
7842   struct gdbarch *gdbarch = regcache->arch ();
7843   remote_arch_state *rsa = get_remote_arch_state (gdbarch);
7844   int i;
7845
7846   set_remote_traceframe ();
7847   set_general_thread (regcache_get_ptid (regcache));
7848
7849   if (regnum >= 0)
7850     {
7851       packet_reg *reg = packet_reg_from_regnum (gdbarch, rsa, regnum);
7852
7853       gdb_assert (reg != NULL);
7854
7855       /* Always prefer to store registers using the 'P' packet if
7856          possible; we often change only a small number of registers.
7857          Sometimes we change a larger number; we'd need help from a
7858          higher layer to know to use 'G'.  */
7859       if (store_register_using_P (regcache, reg))
7860         return;
7861
7862       /* For now, don't complain if we have no way to write the
7863          register.  GDB loses track of unavailable registers too
7864          easily.  Some day, this may be an error.  We don't have
7865          any way to read the register, either...  */
7866       if (!reg->in_g_packet)
7867         return;
7868
7869       store_registers_using_G (regcache);
7870       return;
7871     }
7872
7873   store_registers_using_G (regcache);
7874
7875   for (i = 0; i < gdbarch_num_regs (gdbarch); i++)
7876     if (!rsa->regs[i].in_g_packet)
7877       if (!store_register_using_P (regcache, &rsa->regs[i]))
7878         /* See above for why we do not issue an error here.  */
7879         continue;
7880 }
7881 \f
7882
7883 /* Return the number of hex digits in num.  */
7884
7885 static int
7886 hexnumlen (ULONGEST num)
7887 {
7888   int i;
7889
7890   for (i = 0; num != 0; i++)
7891     num >>= 4;
7892
7893   return std::max (i, 1);
7894 }
7895
7896 /* Set BUF to the minimum number of hex digits representing NUM.  */
7897
7898 static int
7899 hexnumstr (char *buf, ULONGEST num)
7900 {
7901   int len = hexnumlen (num);
7902
7903   return hexnumnstr (buf, num, len);
7904 }
7905
7906
7907 /* Set BUF to the hex digits representing NUM, padded to WIDTH characters.  */
7908
7909 static int
7910 hexnumnstr (char *buf, ULONGEST num, int width)
7911 {
7912   int i;
7913
7914   buf[width] = '\0';
7915
7916   for (i = width - 1; i >= 0; i--)
7917     {
7918       buf[i] = "0123456789abcdef"[(num & 0xf)];
7919       num >>= 4;
7920     }
7921
7922   return width;
7923 }
7924
7925 /* Mask all but the least significant REMOTE_ADDRESS_SIZE bits.  */
7926
7927 static CORE_ADDR
7928 remote_address_masked (CORE_ADDR addr)
7929 {
7930   unsigned int address_size = remote_address_size;
7931
7932   /* If "remoteaddresssize" was not set, default to target address size.  */
7933   if (!address_size)
7934     address_size = gdbarch_addr_bit (target_gdbarch ());
7935
7936   if (address_size > 0
7937       && address_size < (sizeof (ULONGEST) * 8))
7938     {
7939       /* Only create a mask when that mask can safely be constructed
7940          in a ULONGEST variable.  */
7941       ULONGEST mask = 1;
7942
7943       mask = (mask << address_size) - 1;
7944       addr &= mask;
7945     }
7946   return addr;
7947 }
7948
7949 /* Determine whether the remote target supports binary downloading.
7950    This is accomplished by sending a no-op memory write of zero length
7951    to the target at the specified address. It does not suffice to send
7952    the whole packet, since many stubs strip the eighth bit and
7953    subsequently compute a wrong checksum, which causes real havoc with
7954    remote_write_bytes.
7955
7956    NOTE: This can still lose if the serial line is not eight-bit
7957    clean.  In cases like this, the user should clear "remote
7958    X-packet".  */
7959
7960 static void
7961 check_binary_download (CORE_ADDR addr)
7962 {
7963   struct remote_state *rs = get_remote_state ();
7964
7965   switch (packet_support (PACKET_X))
7966     {
7967     case PACKET_DISABLE:
7968       break;
7969     case PACKET_ENABLE:
7970       break;
7971     case PACKET_SUPPORT_UNKNOWN:
7972       {
7973         char *p;
7974
7975         p = rs->buf;
7976         *p++ = 'X';
7977         p += hexnumstr (p, (ULONGEST) addr);
7978         *p++ = ',';
7979         p += hexnumstr (p, (ULONGEST) 0);
7980         *p++ = ':';
7981         *p = '\0';
7982
7983         putpkt_binary (rs->buf, (int) (p - rs->buf));
7984         getpkt (&rs->buf, &rs->buf_size, 0);
7985
7986         if (rs->buf[0] == '\0')
7987           {
7988             if (remote_debug)
7989               fprintf_unfiltered (gdb_stdlog,
7990                                   "binary downloading NOT "
7991                                   "supported by target\n");
7992             remote_protocol_packets[PACKET_X].support = PACKET_DISABLE;
7993           }
7994         else
7995           {
7996             if (remote_debug)
7997               fprintf_unfiltered (gdb_stdlog,
7998                                   "binary downloading supported by target\n");
7999             remote_protocol_packets[PACKET_X].support = PACKET_ENABLE;
8000           }
8001         break;
8002       }
8003     }
8004 }
8005
8006 /* Helper function to resize the payload in order to try to get a good
8007    alignment.  We try to write an amount of data such that the next write will
8008    start on an address aligned on REMOTE_ALIGN_WRITES.  */
8009
8010 static int
8011 align_for_efficient_write (int todo, CORE_ADDR memaddr)
8012 {
8013   return ((memaddr + todo) & ~(REMOTE_ALIGN_WRITES - 1)) - memaddr;
8014 }
8015
8016 /* Write memory data directly to the remote machine.
8017    This does not inform the data cache; the data cache uses this.
8018    HEADER is the starting part of the packet.
8019    MEMADDR is the address in the remote memory space.
8020    MYADDR is the address of the buffer in our space.
8021    LEN_UNITS is the number of addressable units to write.
8022    UNIT_SIZE is the length in bytes of an addressable unit.
8023    PACKET_FORMAT should be either 'X' or 'M', and indicates if we
8024    should send data as binary ('X'), or hex-encoded ('M').
8025
8026    The function creates packet of the form
8027        <HEADER><ADDRESS>,<LENGTH>:<DATA>
8028
8029    where encoding of <DATA> is terminated by PACKET_FORMAT.
8030
8031    If USE_LENGTH is 0, then the <LENGTH> field and the preceding comma
8032    are omitted.
8033
8034    Return the transferred status, error or OK (an
8035    'enum target_xfer_status' value).  Save the number of addressable units
8036    transferred in *XFERED_LEN_UNITS.  Only transfer a single packet.
8037
8038    On a platform with an addressable memory size of 2 bytes (UNIT_SIZE == 2), an
8039    exchange between gdb and the stub could look like (?? in place of the
8040    checksum):
8041
8042    -> $m1000,4#??
8043    <- aaaabbbbccccdddd
8044
8045    -> $M1000,3:eeeeffffeeee#??
8046    <- OK
8047
8048    -> $m1000,4#??
8049    <- eeeeffffeeeedddd  */
8050
8051 static enum target_xfer_status
8052 remote_write_bytes_aux (const char *header, CORE_ADDR memaddr,
8053                         const gdb_byte *myaddr, ULONGEST len_units,
8054                         int unit_size, ULONGEST *xfered_len_units,
8055                         char packet_format, int use_length)
8056 {
8057   struct remote_state *rs = get_remote_state ();
8058   char *p;
8059   char *plen = NULL;
8060   int plenlen = 0;
8061   int todo_units;
8062   int units_written;
8063   int payload_capacity_bytes;
8064   int payload_length_bytes;
8065
8066   if (packet_format != 'X' && packet_format != 'M')
8067     internal_error (__FILE__, __LINE__,
8068                     _("remote_write_bytes_aux: bad packet format"));
8069
8070   if (len_units == 0)
8071     return TARGET_XFER_EOF;
8072
8073   payload_capacity_bytes = get_memory_write_packet_size ();
8074
8075   /* The packet buffer will be large enough for the payload;
8076      get_memory_packet_size ensures this.  */
8077   rs->buf[0] = '\0';
8078
8079   /* Compute the size of the actual payload by subtracting out the
8080      packet header and footer overhead: "$M<memaddr>,<len>:...#nn".  */
8081
8082   payload_capacity_bytes -= strlen ("$,:#NN");
8083   if (!use_length)
8084     /* The comma won't be used.  */
8085     payload_capacity_bytes += 1;
8086   payload_capacity_bytes -= strlen (header);
8087   payload_capacity_bytes -= hexnumlen (memaddr);
8088
8089   /* Construct the packet excluding the data: "<header><memaddr>,<len>:".  */
8090
8091   strcat (rs->buf, header);
8092   p = rs->buf + strlen (header);
8093
8094   /* Compute a best guess of the number of bytes actually transfered.  */
8095   if (packet_format == 'X')
8096     {
8097       /* Best guess at number of bytes that will fit.  */
8098       todo_units = std::min (len_units,
8099                              (ULONGEST) payload_capacity_bytes / unit_size);
8100       if (use_length)
8101         payload_capacity_bytes -= hexnumlen (todo_units);
8102       todo_units = std::min (todo_units, payload_capacity_bytes / unit_size);
8103     }
8104   else
8105     {
8106       /* Number of bytes that will fit.  */
8107       todo_units
8108         = std::min (len_units,
8109                     (ULONGEST) (payload_capacity_bytes / unit_size) / 2);
8110       if (use_length)
8111         payload_capacity_bytes -= hexnumlen (todo_units);
8112       todo_units = std::min (todo_units,
8113                              (payload_capacity_bytes / unit_size) / 2);
8114     }
8115
8116   if (todo_units <= 0)
8117     internal_error (__FILE__, __LINE__,
8118                     _("minimum packet size too small to write data"));
8119
8120   /* If we already need another packet, then try to align the end
8121      of this packet to a useful boundary.  */
8122   if (todo_units > 2 * REMOTE_ALIGN_WRITES && todo_units < len_units)
8123     todo_units = align_for_efficient_write (todo_units, memaddr);
8124
8125   /* Append "<memaddr>".  */
8126   memaddr = remote_address_masked (memaddr);
8127   p += hexnumstr (p, (ULONGEST) memaddr);
8128
8129   if (use_length)
8130     {
8131       /* Append ",".  */
8132       *p++ = ',';
8133
8134       /* Append the length and retain its location and size.  It may need to be
8135          adjusted once the packet body has been created.  */
8136       plen = p;
8137       plenlen = hexnumstr (p, (ULONGEST) todo_units);
8138       p += plenlen;
8139     }
8140
8141   /* Append ":".  */
8142   *p++ = ':';
8143   *p = '\0';
8144
8145   /* Append the packet body.  */
8146   if (packet_format == 'X')
8147     {
8148       /* Binary mode.  Send target system values byte by byte, in
8149          increasing byte addresses.  Only escape certain critical
8150          characters.  */
8151       payload_length_bytes =
8152           remote_escape_output (myaddr, todo_units, unit_size, (gdb_byte *) p,
8153                                 &units_written, payload_capacity_bytes);
8154
8155       /* If not all TODO units fit, then we'll need another packet.  Make
8156          a second try to keep the end of the packet aligned.  Don't do
8157          this if the packet is tiny.  */
8158       if (units_written < todo_units && units_written > 2 * REMOTE_ALIGN_WRITES)
8159         {
8160           int new_todo_units;
8161
8162           new_todo_units = align_for_efficient_write (units_written, memaddr);
8163
8164           if (new_todo_units != units_written)
8165             payload_length_bytes =
8166                 remote_escape_output (myaddr, new_todo_units, unit_size,
8167                                       (gdb_byte *) p, &units_written,
8168                                       payload_capacity_bytes);
8169         }
8170
8171       p += payload_length_bytes;
8172       if (use_length && units_written < todo_units)
8173         {
8174           /* Escape chars have filled up the buffer prematurely,
8175              and we have actually sent fewer units than planned.
8176              Fix-up the length field of the packet.  Use the same
8177              number of characters as before.  */
8178           plen += hexnumnstr (plen, (ULONGEST) units_written,
8179                               plenlen);
8180           *plen = ':';  /* overwrite \0 from hexnumnstr() */
8181         }
8182     }
8183   else
8184     {
8185       /* Normal mode: Send target system values byte by byte, in
8186          increasing byte addresses.  Each byte is encoded as a two hex
8187          value.  */
8188       p += 2 * bin2hex (myaddr, p, todo_units * unit_size);
8189       units_written = todo_units;
8190     }
8191
8192   putpkt_binary (rs->buf, (int) (p - rs->buf));
8193   getpkt (&rs->buf, &rs->buf_size, 0);
8194
8195   if (rs->buf[0] == 'E')
8196     return TARGET_XFER_E_IO;
8197
8198   /* Return UNITS_WRITTEN, not TODO_UNITS, in case escape chars caused us to
8199      send fewer units than we'd planned.  */
8200   *xfered_len_units = (ULONGEST) units_written;
8201   return (*xfered_len_units != 0) ? TARGET_XFER_OK : TARGET_XFER_EOF;
8202 }
8203
8204 /* Write memory data directly to the remote machine.
8205    This does not inform the data cache; the data cache uses this.
8206    MEMADDR is the address in the remote memory space.
8207    MYADDR is the address of the buffer in our space.
8208    LEN is the number of bytes.
8209
8210    Return the transferred status, error or OK (an
8211    'enum target_xfer_status' value).  Save the number of bytes
8212    transferred in *XFERED_LEN.  Only transfer a single packet.  */
8213
8214 static enum target_xfer_status
8215 remote_write_bytes (CORE_ADDR memaddr, const gdb_byte *myaddr, ULONGEST len,
8216                     int unit_size, ULONGEST *xfered_len)
8217 {
8218   const char *packet_format = NULL;
8219
8220   /* Check whether the target supports binary download.  */
8221   check_binary_download (memaddr);
8222
8223   switch (packet_support (PACKET_X))
8224     {
8225     case PACKET_ENABLE:
8226       packet_format = "X";
8227       break;
8228     case PACKET_DISABLE:
8229       packet_format = "M";
8230       break;
8231     case PACKET_SUPPORT_UNKNOWN:
8232       internal_error (__FILE__, __LINE__,
8233                       _("remote_write_bytes: bad internal state"));
8234     default:
8235       internal_error (__FILE__, __LINE__, _("bad switch"));
8236     }
8237
8238   return remote_write_bytes_aux (packet_format,
8239                                  memaddr, myaddr, len, unit_size, xfered_len,
8240                                  packet_format[0], 1);
8241 }
8242
8243 /* Read memory data directly from the remote machine.
8244    This does not use the data cache; the data cache uses this.
8245    MEMADDR is the address in the remote memory space.
8246    MYADDR is the address of the buffer in our space.
8247    LEN_UNITS is the number of addressable memory units to read..
8248    UNIT_SIZE is the length in bytes of an addressable unit.
8249
8250    Return the transferred status, error or OK (an
8251    'enum target_xfer_status' value).  Save the number of bytes
8252    transferred in *XFERED_LEN_UNITS.
8253
8254    See the comment of remote_write_bytes_aux for an example of
8255    memory read/write exchange between gdb and the stub.  */
8256
8257 static enum target_xfer_status
8258 remote_read_bytes_1 (CORE_ADDR memaddr, gdb_byte *myaddr, ULONGEST len_units,
8259                      int unit_size, ULONGEST *xfered_len_units)
8260 {
8261   struct remote_state *rs = get_remote_state ();
8262   int buf_size_bytes;           /* Max size of packet output buffer.  */
8263   char *p;
8264   int todo_units;
8265   int decoded_bytes;
8266
8267   buf_size_bytes = get_memory_read_packet_size ();
8268   /* The packet buffer will be large enough for the payload;
8269      get_memory_packet_size ensures this.  */
8270
8271   /* Number of units that will fit.  */
8272   todo_units = std::min (len_units,
8273                          (ULONGEST) (buf_size_bytes / unit_size) / 2);
8274
8275   /* Construct "m"<memaddr>","<len>".  */
8276   memaddr = remote_address_masked (memaddr);
8277   p = rs->buf;
8278   *p++ = 'm';
8279   p += hexnumstr (p, (ULONGEST) memaddr);
8280   *p++ = ',';
8281   p += hexnumstr (p, (ULONGEST) todo_units);
8282   *p = '\0';
8283   putpkt (rs->buf);
8284   getpkt (&rs->buf, &rs->buf_size, 0);
8285   if (rs->buf[0] == 'E'
8286       && isxdigit (rs->buf[1]) && isxdigit (rs->buf[2])
8287       && rs->buf[3] == '\0')
8288     return TARGET_XFER_E_IO;
8289   /* Reply describes memory byte by byte, each byte encoded as two hex
8290      characters.  */
8291   p = rs->buf;
8292   decoded_bytes = hex2bin (p, myaddr, todo_units * unit_size);
8293   /* Return what we have.  Let higher layers handle partial reads.  */
8294   *xfered_len_units = (ULONGEST) (decoded_bytes / unit_size);
8295   return (*xfered_len_units != 0) ? TARGET_XFER_OK : TARGET_XFER_EOF;
8296 }
8297
8298 /* Using the set of read-only target sections of remote, read live
8299    read-only memory.
8300
8301    For interface/parameters/return description see target.h,
8302    to_xfer_partial.  */
8303
8304 static enum target_xfer_status
8305 remote_xfer_live_readonly_partial (struct target_ops *ops, gdb_byte *readbuf,
8306                                    ULONGEST memaddr, ULONGEST len,
8307                                    int unit_size, ULONGEST *xfered_len)
8308 {
8309   struct target_section *secp;
8310   struct target_section_table *table;
8311
8312   secp = target_section_by_addr (ops, memaddr);
8313   if (secp != NULL
8314       && (bfd_get_section_flags (secp->the_bfd_section->owner,
8315                                  secp->the_bfd_section)
8316           & SEC_READONLY))
8317     {
8318       struct target_section *p;
8319       ULONGEST memend = memaddr + len;
8320
8321       table = target_get_section_table (ops);
8322
8323       for (p = table->sections; p < table->sections_end; p++)
8324         {
8325           if (memaddr >= p->addr)
8326             {
8327               if (memend <= p->endaddr)
8328                 {
8329                   /* Entire transfer is within this section.  */
8330                   return remote_read_bytes_1 (memaddr, readbuf, len, unit_size,
8331                                               xfered_len);
8332                 }
8333               else if (memaddr >= p->endaddr)
8334                 {
8335                   /* This section ends before the transfer starts.  */
8336                   continue;
8337                 }
8338               else
8339                 {
8340                   /* This section overlaps the transfer.  Just do half.  */
8341                   len = p->endaddr - memaddr;
8342                   return remote_read_bytes_1 (memaddr, readbuf, len, unit_size,
8343                                               xfered_len);
8344                 }
8345             }
8346         }
8347     }
8348
8349   return TARGET_XFER_EOF;
8350 }
8351
8352 /* Similar to remote_read_bytes_1, but it reads from the remote stub
8353    first if the requested memory is unavailable in traceframe.
8354    Otherwise, fall back to remote_read_bytes_1.  */
8355
8356 static enum target_xfer_status
8357 remote_read_bytes (struct target_ops *ops, CORE_ADDR memaddr,
8358                    gdb_byte *myaddr, ULONGEST len, int unit_size,
8359                    ULONGEST *xfered_len)
8360 {
8361   if (len == 0)
8362     return TARGET_XFER_EOF;
8363
8364   if (get_traceframe_number () != -1)
8365     {
8366       std::vector<mem_range> available;
8367
8368       /* If we fail to get the set of available memory, then the
8369          target does not support querying traceframe info, and so we
8370          attempt reading from the traceframe anyway (assuming the
8371          target implements the old QTro packet then).  */
8372       if (traceframe_available_memory (&available, memaddr, len))
8373         {
8374           if (available.empty () || available[0].start != memaddr)
8375             {
8376               enum target_xfer_status res;
8377
8378               /* Don't read into the traceframe's available
8379                  memory.  */
8380               if (!available.empty ())
8381                 {
8382                   LONGEST oldlen = len;
8383
8384                   len = available[0].start - memaddr;
8385                   gdb_assert (len <= oldlen);
8386                 }
8387
8388               /* This goes through the topmost target again.  */
8389               res = remote_xfer_live_readonly_partial (ops, myaddr, memaddr,
8390                                                        len, unit_size, xfered_len);
8391               if (res == TARGET_XFER_OK)
8392                 return TARGET_XFER_OK;
8393               else
8394                 {
8395                   /* No use trying further, we know some memory starting
8396                      at MEMADDR isn't available.  */
8397                   *xfered_len = len;
8398                   return (*xfered_len != 0) ?
8399                     TARGET_XFER_UNAVAILABLE : TARGET_XFER_EOF;
8400                 }
8401             }
8402
8403           /* Don't try to read more than how much is available, in
8404              case the target implements the deprecated QTro packet to
8405              cater for older GDBs (the target's knowledge of read-only
8406              sections may be outdated by now).  */
8407           len = available[0].length;
8408         }
8409     }
8410
8411   return remote_read_bytes_1 (memaddr, myaddr, len, unit_size, xfered_len);
8412 }
8413
8414 \f
8415
8416 /* Sends a packet with content determined by the printf format string
8417    FORMAT and the remaining arguments, then gets the reply.  Returns
8418    whether the packet was a success, a failure, or unknown.  */
8419
8420 static enum packet_result remote_send_printf (const char *format, ...)
8421   ATTRIBUTE_PRINTF (1, 2);
8422
8423 static enum packet_result
8424 remote_send_printf (const char *format, ...)
8425 {
8426   struct remote_state *rs = get_remote_state ();
8427   int max_size = get_remote_packet_size ();
8428   va_list ap;
8429
8430   va_start (ap, format);
8431
8432   rs->buf[0] = '\0';
8433   if (vsnprintf (rs->buf, max_size, format, ap) >= max_size)
8434     internal_error (__FILE__, __LINE__, _("Too long remote packet."));
8435
8436   if (putpkt (rs->buf) < 0)
8437     error (_("Communication problem with target."));
8438
8439   rs->buf[0] = '\0';
8440   getpkt (&rs->buf, &rs->buf_size, 0);
8441
8442   return packet_check_result (rs->buf);
8443 }
8444
8445 /* Flash writing can take quite some time.  We'll set
8446    effectively infinite timeout for flash operations.
8447    In future, we'll need to decide on a better approach.  */
8448 static const int remote_flash_timeout = 1000;
8449
8450 static void
8451 remote_flash_erase (struct target_ops *ops,
8452                     ULONGEST address, LONGEST length)
8453 {
8454   int addr_size = gdbarch_addr_bit (target_gdbarch ()) / 8;
8455   enum packet_result ret;
8456   scoped_restore restore_timeout
8457     = make_scoped_restore (&remote_timeout, remote_flash_timeout);
8458
8459   ret = remote_send_printf ("vFlashErase:%s,%s",
8460                             phex (address, addr_size),
8461                             phex (length, 4));
8462   switch (ret)
8463     {
8464     case PACKET_UNKNOWN:
8465       error (_("Remote target does not support flash erase"));
8466     case PACKET_ERROR:
8467       error (_("Error erasing flash with vFlashErase packet"));
8468     default:
8469       break;
8470     }
8471 }
8472
8473 static enum target_xfer_status
8474 remote_flash_write (struct target_ops *ops, ULONGEST address,
8475                     ULONGEST length, ULONGEST *xfered_len,
8476                     const gdb_byte *data)
8477 {
8478   scoped_restore restore_timeout
8479     = make_scoped_restore (&remote_timeout, remote_flash_timeout);
8480   return remote_write_bytes_aux ("vFlashWrite:", address, data, length, 1,
8481                                  xfered_len,'X', 0);
8482 }
8483
8484 static void
8485 remote_flash_done (struct target_ops *ops)
8486 {
8487   int ret;
8488
8489   scoped_restore restore_timeout
8490     = make_scoped_restore (&remote_timeout, remote_flash_timeout);
8491
8492   ret = remote_send_printf ("vFlashDone");
8493
8494   switch (ret)
8495     {
8496     case PACKET_UNKNOWN:
8497       error (_("Remote target does not support vFlashDone"));
8498     case PACKET_ERROR:
8499       error (_("Error finishing flash operation"));
8500     default:
8501       break;
8502     }
8503 }
8504
8505 static void
8506 remote_files_info (struct target_ops *ignore)
8507 {
8508   puts_filtered ("Debugging a target over a serial line.\n");
8509 }
8510 \f
8511 /* Stuff for dealing with the packets which are part of this protocol.
8512    See comment at top of file for details.  */
8513
8514 /* Close/unpush the remote target, and throw a TARGET_CLOSE_ERROR
8515    error to higher layers.  Called when a serial error is detected.
8516    The exception message is STRING, followed by a colon and a blank,
8517    the system error message for errno at function entry and final dot
8518    for output compatibility with throw_perror_with_name.  */
8519
8520 static void
8521 unpush_and_perror (const char *string)
8522 {
8523   int saved_errno = errno;
8524
8525   remote_unpush_target ();
8526   throw_error (TARGET_CLOSE_ERROR, "%s: %s.", string,
8527                safe_strerror (saved_errno));
8528 }
8529
8530 /* Read a single character from the remote end.  The current quit
8531    handler is overridden to avoid quitting in the middle of packet
8532    sequence, as that would break communication with the remote server.
8533    See remote_serial_quit_handler for more detail.  */
8534
8535 static int
8536 readchar (int timeout)
8537 {
8538   int ch;
8539   struct remote_state *rs = get_remote_state ();
8540
8541   {
8542     scoped_restore restore_quit
8543       = make_scoped_restore (&quit_handler, remote_serial_quit_handler);
8544
8545     rs->got_ctrlc_during_io = 0;
8546
8547     ch = serial_readchar (rs->remote_desc, timeout);
8548
8549     if (rs->got_ctrlc_during_io)
8550       set_quit_flag ();
8551   }
8552
8553   if (ch >= 0)
8554     return ch;
8555
8556   switch ((enum serial_rc) ch)
8557     {
8558     case SERIAL_EOF:
8559       remote_unpush_target ();
8560       throw_error (TARGET_CLOSE_ERROR, _("Remote connection closed"));
8561       /* no return */
8562     case SERIAL_ERROR:
8563       unpush_and_perror (_("Remote communication error.  "
8564                            "Target disconnected."));
8565       /* no return */
8566     case SERIAL_TIMEOUT:
8567       break;
8568     }
8569   return ch;
8570 }
8571
8572 /* Wrapper for serial_write that closes the target and throws if
8573    writing fails.  The current quit handler is overridden to avoid
8574    quitting in the middle of packet sequence, as that would break
8575    communication with the remote server.  See
8576    remote_serial_quit_handler for more detail.  */
8577
8578 static void
8579 remote_serial_write (const char *str, int len)
8580 {
8581   struct remote_state *rs = get_remote_state ();
8582
8583   scoped_restore restore_quit
8584     = make_scoped_restore (&quit_handler, remote_serial_quit_handler);
8585
8586   rs->got_ctrlc_during_io = 0;
8587
8588   if (serial_write (rs->remote_desc, str, len))
8589     {
8590       unpush_and_perror (_("Remote communication error.  "
8591                            "Target disconnected."));
8592     }
8593
8594   if (rs->got_ctrlc_during_io)
8595     set_quit_flag ();
8596 }
8597
8598 /* Send the command in *BUF to the remote machine, and read the reply
8599    into *BUF.  Report an error if we get an error reply.  Resize
8600    *BUF using xrealloc if necessary to hold the result, and update
8601    *SIZEOF_BUF.  */
8602
8603 static void
8604 remote_send (char **buf,
8605              long *sizeof_buf)
8606 {
8607   putpkt (*buf);
8608   getpkt (buf, sizeof_buf, 0);
8609
8610   if ((*buf)[0] == 'E')
8611     error (_("Remote failure reply: %s"), *buf);
8612 }
8613
8614 /* Return a string representing an escaped version of BUF, of len N.
8615    E.g. \n is converted to \\n, \t to \\t, etc.  */
8616
8617 static std::string
8618 escape_buffer (const char *buf, int n)
8619 {
8620   string_file stb;
8621
8622   stb.putstrn (buf, n, '\\');
8623   return std::move (stb.string ());
8624 }
8625
8626 /* Display a null-terminated packet on stdout, for debugging, using C
8627    string notation.  */
8628
8629 static void
8630 print_packet (const char *buf)
8631 {
8632   puts_filtered ("\"");
8633   fputstr_filtered (buf, '"', gdb_stdout);
8634   puts_filtered ("\"");
8635 }
8636
8637 int
8638 putpkt (const char *buf)
8639 {
8640   return putpkt_binary (buf, strlen (buf));
8641 }
8642
8643 /* Send a packet to the remote machine, with error checking.  The data
8644    of the packet is in BUF.  The string in BUF can be at most
8645    get_remote_packet_size () - 5 to account for the $, # and checksum,
8646    and for a possible /0 if we are debugging (remote_debug) and want
8647    to print the sent packet as a string.  */
8648
8649 static int
8650 putpkt_binary (const char *buf, int cnt)
8651 {
8652   struct remote_state *rs = get_remote_state ();
8653   int i;
8654   unsigned char csum = 0;
8655   gdb::def_vector<char> data (cnt + 6);
8656   char *buf2 = data.data ();
8657
8658   int ch;
8659   int tcount = 0;
8660   char *p;
8661
8662   /* Catch cases like trying to read memory or listing threads while
8663      we're waiting for a stop reply.  The remote server wouldn't be
8664      ready to handle this request, so we'd hang and timeout.  We don't
8665      have to worry about this in synchronous mode, because in that
8666      case it's not possible to issue a command while the target is
8667      running.  This is not a problem in non-stop mode, because in that
8668      case, the stub is always ready to process serial input.  */
8669   if (!target_is_non_stop_p ()
8670       && target_is_async_p ()
8671       && rs->waiting_for_stop_reply)
8672     {
8673       error (_("Cannot execute this command while the target is running.\n"
8674                "Use the \"interrupt\" command to stop the target\n"
8675                "and then try again."));
8676     }
8677
8678   /* We're sending out a new packet.  Make sure we don't look at a
8679      stale cached response.  */
8680   rs->cached_wait_status = 0;
8681
8682   /* Copy the packet into buffer BUF2, encapsulating it
8683      and giving it a checksum.  */
8684
8685   p = buf2;
8686   *p++ = '$';
8687
8688   for (i = 0; i < cnt; i++)
8689     {
8690       csum += buf[i];
8691       *p++ = buf[i];
8692     }
8693   *p++ = '#';
8694   *p++ = tohex ((csum >> 4) & 0xf);
8695   *p++ = tohex (csum & 0xf);
8696
8697   /* Send it over and over until we get a positive ack.  */
8698
8699   while (1)
8700     {
8701       int started_error_output = 0;
8702
8703       if (remote_debug)
8704         {
8705           *p = '\0';
8706
8707           int len = (int) (p - buf2);
8708
8709           std::string str
8710             = escape_buffer (buf2, std::min (len, REMOTE_DEBUG_MAX_CHAR));
8711
8712           fprintf_unfiltered (gdb_stdlog, "Sending packet: %s", str.c_str ());
8713
8714           if (str.length () > REMOTE_DEBUG_MAX_CHAR)
8715             {
8716               fprintf_unfiltered (gdb_stdlog, "[%zu bytes omitted]",
8717                                   str.length () - REMOTE_DEBUG_MAX_CHAR);
8718             }
8719
8720           fprintf_unfiltered (gdb_stdlog, "...");
8721
8722           gdb_flush (gdb_stdlog);
8723         }
8724       remote_serial_write (buf2, p - buf2);
8725
8726       /* If this is a no acks version of the remote protocol, send the
8727          packet and move on.  */
8728       if (rs->noack_mode)
8729         break;
8730
8731       /* Read until either a timeout occurs (-2) or '+' is read.
8732          Handle any notification that arrives in the mean time.  */
8733       while (1)
8734         {
8735           ch = readchar (remote_timeout);
8736
8737           if (remote_debug)
8738             {
8739               switch (ch)
8740                 {
8741                 case '+':
8742                 case '-':
8743                 case SERIAL_TIMEOUT:
8744                 case '$':
8745                 case '%':
8746                   if (started_error_output)
8747                     {
8748                       putchar_unfiltered ('\n');
8749                       started_error_output = 0;
8750                     }
8751                 }
8752             }
8753
8754           switch (ch)
8755             {
8756             case '+':
8757               if (remote_debug)
8758                 fprintf_unfiltered (gdb_stdlog, "Ack\n");
8759               return 1;
8760             case '-':
8761               if (remote_debug)
8762                 fprintf_unfiltered (gdb_stdlog, "Nak\n");
8763               /* FALLTHROUGH */
8764             case SERIAL_TIMEOUT:
8765               tcount++;
8766               if (tcount > 3)
8767                 return 0;
8768               break;            /* Retransmit buffer.  */
8769             case '$':
8770               {
8771                 if (remote_debug)
8772                   fprintf_unfiltered (gdb_stdlog,
8773                                       "Packet instead of Ack, ignoring it\n");
8774                 /* It's probably an old response sent because an ACK
8775                    was lost.  Gobble up the packet and ack it so it
8776                    doesn't get retransmitted when we resend this
8777                    packet.  */
8778                 skip_frame ();
8779                 remote_serial_write ("+", 1);
8780                 continue;       /* Now, go look for +.  */
8781               }
8782
8783             case '%':
8784               {
8785                 int val;
8786
8787                 /* If we got a notification, handle it, and go back to looking
8788                    for an ack.  */
8789                 /* We've found the start of a notification.  Now
8790                    collect the data.  */
8791                 val = read_frame (&rs->buf, &rs->buf_size);
8792                 if (val >= 0)
8793                   {
8794                     if (remote_debug)
8795                       {
8796                         std::string str = escape_buffer (rs->buf, val);
8797
8798                         fprintf_unfiltered (gdb_stdlog,
8799                                             "  Notification received: %s\n",
8800                                             str.c_str ());
8801                       }
8802                     handle_notification (rs->notif_state, rs->buf);
8803                     /* We're in sync now, rewait for the ack.  */
8804                     tcount = 0;
8805                   }
8806                 else
8807                   {
8808                     if (remote_debug)
8809                       {
8810                         if (!started_error_output)
8811                           {
8812                             started_error_output = 1;
8813                             fprintf_unfiltered (gdb_stdlog, "putpkt: Junk: ");
8814                           }
8815                         fputc_unfiltered (ch & 0177, gdb_stdlog);
8816                         fprintf_unfiltered (gdb_stdlog, "%s", rs->buf);
8817                       }
8818                   }
8819                 continue;
8820               }
8821               /* fall-through */
8822             default:
8823               if (remote_debug)
8824                 {
8825                   if (!started_error_output)
8826                     {
8827                       started_error_output = 1;
8828                       fprintf_unfiltered (gdb_stdlog, "putpkt: Junk: ");
8829                     }
8830                   fputc_unfiltered (ch & 0177, gdb_stdlog);
8831                 }
8832               continue;
8833             }
8834           break;                /* Here to retransmit.  */
8835         }
8836
8837 #if 0
8838       /* This is wrong.  If doing a long backtrace, the user should be
8839          able to get out next time we call QUIT, without anything as
8840          violent as interrupt_query.  If we want to provide a way out of
8841          here without getting to the next QUIT, it should be based on
8842          hitting ^C twice as in remote_wait.  */
8843       if (quit_flag)
8844         {
8845           quit_flag = 0;
8846           interrupt_query ();
8847         }
8848 #endif
8849     }
8850
8851   return 0;
8852 }
8853
8854 /* Come here after finding the start of a frame when we expected an
8855    ack.  Do our best to discard the rest of this packet.  */
8856
8857 static void
8858 skip_frame (void)
8859 {
8860   int c;
8861
8862   while (1)
8863     {
8864       c = readchar (remote_timeout);
8865       switch (c)
8866         {
8867         case SERIAL_TIMEOUT:
8868           /* Nothing we can do.  */
8869           return;
8870         case '#':
8871           /* Discard the two bytes of checksum and stop.  */
8872           c = readchar (remote_timeout);
8873           if (c >= 0)
8874             c = readchar (remote_timeout);
8875
8876           return;
8877         case '*':               /* Run length encoding.  */
8878           /* Discard the repeat count.  */
8879           c = readchar (remote_timeout);
8880           if (c < 0)
8881             return;
8882           break;
8883         default:
8884           /* A regular character.  */
8885           break;
8886         }
8887     }
8888 }
8889
8890 /* Come here after finding the start of the frame.  Collect the rest
8891    into *BUF, verifying the checksum, length, and handling run-length
8892    compression.  NUL terminate the buffer.  If there is not enough room,
8893    expand *BUF using xrealloc.
8894
8895    Returns -1 on error, number of characters in buffer (ignoring the
8896    trailing NULL) on success. (could be extended to return one of the
8897    SERIAL status indications).  */
8898
8899 static long
8900 read_frame (char **buf_p,
8901             long *sizeof_buf)
8902 {
8903   unsigned char csum;
8904   long bc;
8905   int c;
8906   char *buf = *buf_p;
8907   struct remote_state *rs = get_remote_state ();
8908
8909   csum = 0;
8910   bc = 0;
8911
8912   while (1)
8913     {
8914       c = readchar (remote_timeout);
8915       switch (c)
8916         {
8917         case SERIAL_TIMEOUT:
8918           if (remote_debug)
8919             fputs_filtered ("Timeout in mid-packet, retrying\n", gdb_stdlog);
8920           return -1;
8921         case '$':
8922           if (remote_debug)
8923             fputs_filtered ("Saw new packet start in middle of old one\n",
8924                             gdb_stdlog);
8925           return -1;            /* Start a new packet, count retries.  */
8926         case '#':
8927           {
8928             unsigned char pktcsum;
8929             int check_0 = 0;
8930             int check_1 = 0;
8931
8932             buf[bc] = '\0';
8933
8934             check_0 = readchar (remote_timeout);
8935             if (check_0 >= 0)
8936               check_1 = readchar (remote_timeout);
8937
8938             if (check_0 == SERIAL_TIMEOUT || check_1 == SERIAL_TIMEOUT)
8939               {
8940                 if (remote_debug)
8941                   fputs_filtered ("Timeout in checksum, retrying\n",
8942                                   gdb_stdlog);
8943                 return -1;
8944               }
8945             else if (check_0 < 0 || check_1 < 0)
8946               {
8947                 if (remote_debug)
8948                   fputs_filtered ("Communication error in checksum\n",
8949                                   gdb_stdlog);
8950                 return -1;
8951               }
8952
8953             /* Don't recompute the checksum; with no ack packets we
8954                don't have any way to indicate a packet retransmission
8955                is necessary.  */
8956             if (rs->noack_mode)
8957               return bc;
8958
8959             pktcsum = (fromhex (check_0) << 4) | fromhex (check_1);
8960             if (csum == pktcsum)
8961               return bc;
8962
8963             if (remote_debug)
8964               {
8965                 std::string str = escape_buffer (buf, bc);
8966
8967                 fprintf_unfiltered (gdb_stdlog,
8968                                     "Bad checksum, sentsum=0x%x, "
8969                                     "csum=0x%x, buf=%s\n",
8970                                     pktcsum, csum, str.c_str ());
8971               }
8972             /* Number of characters in buffer ignoring trailing
8973                NULL.  */
8974             return -1;
8975           }
8976         case '*':               /* Run length encoding.  */
8977           {
8978             int repeat;
8979
8980             csum += c;
8981             c = readchar (remote_timeout);
8982             csum += c;
8983             repeat = c - ' ' + 3;       /* Compute repeat count.  */
8984
8985             /* The character before ``*'' is repeated.  */
8986
8987             if (repeat > 0 && repeat <= 255 && bc > 0)
8988               {
8989                 if (bc + repeat - 1 >= *sizeof_buf - 1)
8990                   {
8991                     /* Make some more room in the buffer.  */
8992                     *sizeof_buf += repeat;
8993                     *buf_p = (char *) xrealloc (*buf_p, *sizeof_buf);
8994                     buf = *buf_p;
8995                   }
8996
8997                 memset (&buf[bc], buf[bc - 1], repeat);
8998                 bc += repeat;
8999                 continue;
9000               }
9001
9002             buf[bc] = '\0';
9003             printf_filtered (_("Invalid run length encoding: %s\n"), buf);
9004             return -1;
9005           }
9006         default:
9007           if (bc >= *sizeof_buf - 1)
9008             {
9009               /* Make some more room in the buffer.  */
9010               *sizeof_buf *= 2;
9011               *buf_p = (char *) xrealloc (*buf_p, *sizeof_buf);
9012               buf = *buf_p;
9013             }
9014
9015           buf[bc++] = c;
9016           csum += c;
9017           continue;
9018         }
9019     }
9020 }
9021
9022 /* Read a packet from the remote machine, with error checking, and
9023    store it in *BUF.  Resize *BUF using xrealloc if necessary to hold
9024    the result, and update *SIZEOF_BUF.  If FOREVER, wait forever
9025    rather than timing out; this is used (in synchronous mode) to wait
9026    for a target that is is executing user code to stop.  */
9027 /* FIXME: ezannoni 2000-02-01 this wrapper is necessary so that we
9028    don't have to change all the calls to getpkt to deal with the
9029    return value, because at the moment I don't know what the right
9030    thing to do it for those.  */
9031 void
9032 getpkt (char **buf,
9033         long *sizeof_buf,
9034         int forever)
9035 {
9036   getpkt_sane (buf, sizeof_buf, forever);
9037 }
9038
9039
9040 /* Read a packet from the remote machine, with error checking, and
9041    store it in *BUF.  Resize *BUF using xrealloc if necessary to hold
9042    the result, and update *SIZEOF_BUF.  If FOREVER, wait forever
9043    rather than timing out; this is used (in synchronous mode) to wait
9044    for a target that is is executing user code to stop.  If FOREVER ==
9045    0, this function is allowed to time out gracefully and return an
9046    indication of this to the caller.  Otherwise return the number of
9047    bytes read.  If EXPECTING_NOTIF, consider receiving a notification
9048    enough reason to return to the caller.  *IS_NOTIF is an output
9049    boolean that indicates whether *BUF holds a notification or not
9050    (a regular packet).  */
9051
9052 static int
9053 getpkt_or_notif_sane_1 (char **buf, long *sizeof_buf, int forever,
9054                         int expecting_notif, int *is_notif)
9055 {
9056   struct remote_state *rs = get_remote_state ();
9057   int c;
9058   int tries;
9059   int timeout;
9060   int val = -1;
9061
9062   /* We're reading a new response.  Make sure we don't look at a
9063      previously cached response.  */
9064   rs->cached_wait_status = 0;
9065
9066   strcpy (*buf, "timeout");
9067
9068   if (forever)
9069     timeout = watchdog > 0 ? watchdog : -1;
9070   else if (expecting_notif)
9071     timeout = 0; /* There should already be a char in the buffer.  If
9072                     not, bail out.  */
9073   else
9074     timeout = remote_timeout;
9075
9076 #define MAX_TRIES 3
9077
9078   /* Process any number of notifications, and then return when
9079      we get a packet.  */
9080   for (;;)
9081     {
9082       /* If we get a timeout or bad checksum, retry up to MAX_TRIES
9083          times.  */
9084       for (tries = 1; tries <= MAX_TRIES; tries++)
9085         {
9086           /* This can loop forever if the remote side sends us
9087              characters continuously, but if it pauses, we'll get
9088              SERIAL_TIMEOUT from readchar because of timeout.  Then
9089              we'll count that as a retry.
9090
9091              Note that even when forever is set, we will only wait
9092              forever prior to the start of a packet.  After that, we
9093              expect characters to arrive at a brisk pace.  They should
9094              show up within remote_timeout intervals.  */
9095           do
9096             c = readchar (timeout);
9097           while (c != SERIAL_TIMEOUT && c != '$' && c != '%');
9098
9099           if (c == SERIAL_TIMEOUT)
9100             {
9101               if (expecting_notif)
9102                 return -1; /* Don't complain, it's normal to not get
9103                               anything in this case.  */
9104
9105               if (forever)      /* Watchdog went off?  Kill the target.  */
9106                 {
9107                   remote_unpush_target ();
9108                   throw_error (TARGET_CLOSE_ERROR,
9109                                _("Watchdog timeout has expired.  "
9110                                  "Target detached."));
9111                 }
9112               if (remote_debug)
9113                 fputs_filtered ("Timed out.\n", gdb_stdlog);
9114             }
9115           else
9116             {
9117               /* We've found the start of a packet or notification.
9118                  Now collect the data.  */
9119               val = read_frame (buf, sizeof_buf);
9120               if (val >= 0)
9121                 break;
9122             }
9123
9124           remote_serial_write ("-", 1);
9125         }
9126
9127       if (tries > MAX_TRIES)
9128         {
9129           /* We have tried hard enough, and just can't receive the
9130              packet/notification.  Give up.  */
9131           printf_unfiltered (_("Ignoring packet error, continuing...\n"));
9132
9133           /* Skip the ack char if we're in no-ack mode.  */
9134           if (!rs->noack_mode)
9135             remote_serial_write ("+", 1);
9136           return -1;
9137         }
9138
9139       /* If we got an ordinary packet, return that to our caller.  */
9140       if (c == '$')
9141         {
9142           if (remote_debug)
9143             {
9144               std::string str
9145                 = escape_buffer (*buf,
9146                                  std::min (val, REMOTE_DEBUG_MAX_CHAR));
9147
9148               fprintf_unfiltered (gdb_stdlog, "Packet received: %s",
9149                                   str.c_str ());
9150
9151               if (str.length () >  REMOTE_DEBUG_MAX_CHAR)
9152                 {
9153                   fprintf_unfiltered (gdb_stdlog, "[%zu bytes omitted]",
9154                                       str.length () - REMOTE_DEBUG_MAX_CHAR);
9155                 }
9156
9157               fprintf_unfiltered (gdb_stdlog, "\n");
9158             }
9159
9160           /* Skip the ack char if we're in no-ack mode.  */
9161           if (!rs->noack_mode)
9162             remote_serial_write ("+", 1);
9163           if (is_notif != NULL)
9164             *is_notif = 0;
9165           return val;
9166         }
9167
9168        /* If we got a notification, handle it, and go back to looking
9169          for a packet.  */
9170       else
9171         {
9172           gdb_assert (c == '%');
9173
9174           if (remote_debug)
9175             {
9176               std::string str = escape_buffer (*buf, val);
9177
9178               fprintf_unfiltered (gdb_stdlog,
9179                                   "  Notification received: %s\n",
9180                                   str.c_str ());
9181             }
9182           if (is_notif != NULL)
9183             *is_notif = 1;
9184
9185           handle_notification (rs->notif_state, *buf);
9186
9187           /* Notifications require no acknowledgement.  */
9188
9189           if (expecting_notif)
9190             return val;
9191         }
9192     }
9193 }
9194
9195 static int
9196 getpkt_sane (char **buf, long *sizeof_buf, int forever)
9197 {
9198   return getpkt_or_notif_sane_1 (buf, sizeof_buf, forever, 0, NULL);
9199 }
9200
9201 static int
9202 getpkt_or_notif_sane (char **buf, long *sizeof_buf, int forever,
9203                       int *is_notif)
9204 {
9205   return getpkt_or_notif_sane_1 (buf, sizeof_buf, forever, 1,
9206                                  is_notif);
9207 }
9208
9209 /* Check whether EVENT is a fork event for the process specified
9210    by the pid passed in DATA, and if it is, kill the fork child.  */
9211
9212 static int
9213 kill_child_of_pending_fork (QUEUE (stop_reply_p) *q,
9214                             QUEUE_ITER (stop_reply_p) *iter,
9215                             stop_reply_p event,
9216                             void *data)
9217 {
9218   struct queue_iter_param *param = (struct queue_iter_param *) data;
9219   int parent_pid = *(int *) param->input;
9220
9221   if (is_pending_fork_parent (&event->ws, parent_pid, event->ptid))
9222     {
9223       struct remote_state *rs = get_remote_state ();
9224       int child_pid = ptid_get_pid (event->ws.value.related_pid);
9225       int res;
9226
9227       res = remote_vkill (child_pid, rs);
9228       if (res != 0)
9229         error (_("Can't kill fork child process %d"), child_pid);
9230     }
9231
9232   return 1;
9233 }
9234
9235 /* Kill any new fork children of process PID that haven't been
9236    processed by follow_fork.  */
9237
9238 static void
9239 kill_new_fork_children (int pid, struct remote_state *rs)
9240 {
9241   struct thread_info *thread;
9242   struct notif_client *notif = &notif_client_stop;
9243   struct queue_iter_param param;
9244
9245   /* Kill the fork child threads of any threads in process PID
9246      that are stopped at a fork event.  */
9247   ALL_NON_EXITED_THREADS (thread)
9248     {
9249       struct target_waitstatus *ws = &thread->pending_follow;
9250
9251       if (is_pending_fork_parent (ws, pid, thread->ptid))
9252         {
9253           struct remote_state *rs = get_remote_state ();
9254           int child_pid = ptid_get_pid (ws->value.related_pid);
9255           int res;
9256
9257           res = remote_vkill (child_pid, rs);
9258           if (res != 0)
9259             error (_("Can't kill fork child process %d"), child_pid);
9260         }
9261     }
9262
9263   /* Check for any pending fork events (not reported or processed yet)
9264      in process PID and kill those fork child threads as well.  */
9265   remote_notif_get_pending_events (notif);
9266   param.input = &pid;
9267   param.output = NULL;
9268   QUEUE_iterate (stop_reply_p, stop_reply_queue,
9269                  kill_child_of_pending_fork, &param);
9270 }
9271
9272 \f
9273 /* Target hook to kill the current inferior.  */
9274
9275 static void
9276 remote_kill (struct target_ops *ops)
9277 {
9278   int res = -1;
9279   int pid = ptid_get_pid (inferior_ptid);
9280   struct remote_state *rs = get_remote_state ();
9281
9282   if (packet_support (PACKET_vKill) != PACKET_DISABLE)
9283     {
9284       /* If we're stopped while forking and we haven't followed yet,
9285          kill the child task.  We need to do this before killing the
9286          parent task because if this is a vfork then the parent will
9287          be sleeping.  */
9288       kill_new_fork_children (pid, rs);
9289
9290       res = remote_vkill (pid, rs);
9291       if (res == 0)
9292         {
9293           target_mourn_inferior (inferior_ptid);
9294           return;
9295         }
9296     }
9297
9298   /* If we are in 'target remote' mode and we are killing the only
9299      inferior, then we will tell gdbserver to exit and unpush the
9300      target.  */
9301   if (res == -1 && !remote_multi_process_p (rs)
9302       && number_of_live_inferiors () == 1)
9303     {
9304       remote_kill_k ();
9305
9306       /* We've killed the remote end, we get to mourn it.  If we are
9307          not in extended mode, mourning the inferior also unpushes
9308          remote_ops from the target stack, which closes the remote
9309          connection.  */
9310       target_mourn_inferior (inferior_ptid);
9311
9312       return;
9313     }
9314
9315   error (_("Can't kill process"));
9316 }
9317
9318 /* Send a kill request to the target using the 'vKill' packet.  */
9319
9320 static int
9321 remote_vkill (int pid, struct remote_state *rs)
9322 {
9323   if (packet_support (PACKET_vKill) == PACKET_DISABLE)
9324     return -1;
9325
9326   /* Tell the remote target to detach.  */
9327   xsnprintf (rs->buf, get_remote_packet_size (), "vKill;%x", pid);
9328   putpkt (rs->buf);
9329   getpkt (&rs->buf, &rs->buf_size, 0);
9330
9331   switch (packet_ok (rs->buf,
9332                      &remote_protocol_packets[PACKET_vKill]))
9333     {
9334     case PACKET_OK:
9335       return 0;
9336     case PACKET_ERROR:
9337       return 1;
9338     case PACKET_UNKNOWN:
9339       return -1;
9340     default:
9341       internal_error (__FILE__, __LINE__, _("Bad result from packet_ok"));
9342     }
9343 }
9344
9345 /* Send a kill request to the target using the 'k' packet.  */
9346
9347 static void
9348 remote_kill_k (void)
9349 {
9350   /* Catch errors so the user can quit from gdb even when we
9351      aren't on speaking terms with the remote system.  */
9352   TRY
9353     {
9354       putpkt ("k");
9355     }
9356   CATCH (ex, RETURN_MASK_ERROR)
9357     {
9358       if (ex.error == TARGET_CLOSE_ERROR)
9359         {
9360           /* If we got an (EOF) error that caused the target
9361              to go away, then we're done, that's what we wanted.
9362              "k" is susceptible to cause a premature EOF, given
9363              that the remote server isn't actually required to
9364              reply to "k", and it can happen that it doesn't
9365              even get to reply ACK to the "k".  */
9366           return;
9367         }
9368
9369       /* Otherwise, something went wrong.  We didn't actually kill
9370          the target.  Just propagate the exception, and let the
9371          user or higher layers decide what to do.  */
9372       throw_exception (ex);
9373     }
9374   END_CATCH
9375 }
9376
9377 static void
9378 remote_mourn (struct target_ops *target)
9379 {
9380   struct remote_state *rs = get_remote_state ();
9381
9382   /* In 'target remote' mode with one inferior, we close the connection.  */
9383   if (!rs->extended && number_of_live_inferiors () <= 1)
9384     {
9385       unpush_target (target);
9386
9387       /* remote_close takes care of doing most of the clean up.  */
9388       generic_mourn_inferior ();
9389       return;
9390     }
9391
9392   /* In case we got here due to an error, but we're going to stay
9393      connected.  */
9394   rs->waiting_for_stop_reply = 0;
9395
9396   /* If the current general thread belonged to the process we just
9397      detached from or has exited, the remote side current general
9398      thread becomes undefined.  Considering a case like this:
9399
9400      - We just got here due to a detach.
9401      - The process that we're detaching from happens to immediately
9402        report a global breakpoint being hit in non-stop mode, in the
9403        same thread we had selected before.
9404      - GDB attaches to this process again.
9405      - This event happens to be the next event we handle.
9406
9407      GDB would consider that the current general thread didn't need to
9408      be set on the stub side (with Hg), since for all it knew,
9409      GENERAL_THREAD hadn't changed.
9410
9411      Notice that although in all-stop mode, the remote server always
9412      sets the current thread to the thread reporting the stop event,
9413      that doesn't happen in non-stop mode; in non-stop, the stub *must
9414      not* change the current thread when reporting a breakpoint hit,
9415      due to the decoupling of event reporting and event handling.
9416
9417      To keep things simple, we always invalidate our notion of the
9418      current thread.  */
9419   record_currthread (rs, minus_one_ptid);
9420
9421   /* Call common code to mark the inferior as not running.  */
9422   generic_mourn_inferior ();
9423
9424   if (!have_inferiors ())
9425     {
9426       if (!remote_multi_process_p (rs))
9427         {
9428           /* Check whether the target is running now - some remote stubs
9429              automatically restart after kill.  */
9430           putpkt ("?");
9431           getpkt (&rs->buf, &rs->buf_size, 0);
9432
9433           if (rs->buf[0] == 'S' || rs->buf[0] == 'T')
9434             {
9435               /* Assume that the target has been restarted.  Set
9436                  inferior_ptid so that bits of core GDB realizes
9437                  there's something here, e.g., so that the user can
9438                  say "kill" again.  */
9439               inferior_ptid = magic_null_ptid;
9440             }
9441         }
9442     }
9443 }
9444
9445 static int
9446 extended_remote_supports_disable_randomization (struct target_ops *self)
9447 {
9448   return packet_support (PACKET_QDisableRandomization) == PACKET_ENABLE;
9449 }
9450
9451 static void
9452 extended_remote_disable_randomization (int val)
9453 {
9454   struct remote_state *rs = get_remote_state ();
9455   char *reply;
9456
9457   xsnprintf (rs->buf, get_remote_packet_size (), "QDisableRandomization:%x",
9458              val);
9459   putpkt (rs->buf);
9460   reply = remote_get_noisy_reply ();
9461   if (*reply == '\0')
9462     error (_("Target does not support QDisableRandomization."));
9463   if (strcmp (reply, "OK") != 0)
9464     error (_("Bogus QDisableRandomization reply from target: %s"), reply);
9465 }
9466
9467 static int
9468 extended_remote_run (const std::string &args)
9469 {
9470   struct remote_state *rs = get_remote_state ();
9471   int len;
9472   const char *remote_exec_file = get_remote_exec_file ();
9473
9474   /* If the user has disabled vRun support, or we have detected that
9475      support is not available, do not try it.  */
9476   if (packet_support (PACKET_vRun) == PACKET_DISABLE)
9477     return -1;
9478
9479   strcpy (rs->buf, "vRun;");
9480   len = strlen (rs->buf);
9481
9482   if (strlen (remote_exec_file) * 2 + len >= get_remote_packet_size ())
9483     error (_("Remote file name too long for run packet"));
9484   len += 2 * bin2hex ((gdb_byte *) remote_exec_file, rs->buf + len,
9485                       strlen (remote_exec_file));
9486
9487   if (!args.empty ())
9488     {
9489       int i;
9490
9491       gdb_argv argv (args.c_str ());
9492       for (i = 0; argv[i] != NULL; i++)
9493         {
9494           if (strlen (argv[i]) * 2 + 1 + len >= get_remote_packet_size ())
9495             error (_("Argument list too long for run packet"));
9496           rs->buf[len++] = ';';
9497           len += 2 * bin2hex ((gdb_byte *) argv[i], rs->buf + len,
9498                               strlen (argv[i]));
9499         }
9500     }
9501
9502   rs->buf[len++] = '\0';
9503
9504   putpkt (rs->buf);
9505   getpkt (&rs->buf, &rs->buf_size, 0);
9506
9507   switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_vRun]))
9508     {
9509     case PACKET_OK:
9510       /* We have a wait response.  All is well.  */
9511       return 0;
9512     case PACKET_UNKNOWN:
9513       return -1;
9514     case PACKET_ERROR:
9515       if (remote_exec_file[0] == '\0')
9516         error (_("Running the default executable on the remote target failed; "
9517                  "try \"set remote exec-file\"?"));
9518       else
9519         error (_("Running \"%s\" on the remote target failed"),
9520                remote_exec_file);
9521     default:
9522       gdb_assert_not_reached (_("bad switch"));
9523     }
9524 }
9525
9526 /* Helper function to send set/unset environment packets.  ACTION is
9527    either "set" or "unset".  PACKET is either "QEnvironmentHexEncoded"
9528    or "QEnvironmentUnsetVariable".  VALUE is the variable to be
9529    sent.  */
9530
9531 static void
9532 send_environment_packet (struct remote_state *rs,
9533                          const char *action,
9534                          const char *packet,
9535                          const char *value)
9536 {
9537   /* Convert the environment variable to an hex string, which
9538      is the best format to be transmitted over the wire.  */
9539   std::string encoded_value = bin2hex ((const gdb_byte *) value,
9540                                          strlen (value));
9541
9542   xsnprintf (rs->buf, get_remote_packet_size (),
9543              "%s:%s", packet, encoded_value.c_str ());
9544
9545   putpkt (rs->buf);
9546   getpkt (&rs->buf, &rs->buf_size, 0);
9547   if (strcmp (rs->buf, "OK") != 0)
9548     warning (_("Unable to %s environment variable '%s' on remote."),
9549              action, value);
9550 }
9551
9552 /* Helper function to handle the QEnvironment* packets.  */
9553
9554 static void
9555 extended_remote_environment_support (struct remote_state *rs)
9556 {
9557   if (packet_support (PACKET_QEnvironmentReset) != PACKET_DISABLE)
9558     {
9559       putpkt ("QEnvironmentReset");
9560       getpkt (&rs->buf, &rs->buf_size, 0);
9561       if (strcmp (rs->buf, "OK") != 0)
9562         warning (_("Unable to reset environment on remote."));
9563     }
9564
9565   gdb_environ *e = &current_inferior ()->environment;
9566
9567   if (packet_support (PACKET_QEnvironmentHexEncoded) != PACKET_DISABLE)
9568     for (const std::string &el : e->user_set_env ())
9569       send_environment_packet (rs, "set", "QEnvironmentHexEncoded",
9570                                el.c_str ());
9571
9572   if (packet_support (PACKET_QEnvironmentUnset) != PACKET_DISABLE)
9573     for (const std::string &el : e->user_unset_env ())
9574       send_environment_packet (rs, "unset", "QEnvironmentUnset", el.c_str ());
9575 }
9576
9577 /* Helper function to set the current working directory for the
9578    inferior in the remote target.  */
9579
9580 static void
9581 extended_remote_set_inferior_cwd (struct remote_state *rs)
9582 {
9583   if (packet_support (PACKET_QSetWorkingDir) != PACKET_DISABLE)
9584     {
9585       const char *inferior_cwd = get_inferior_cwd ();
9586
9587       if (inferior_cwd != NULL)
9588         {
9589           std::string hexpath = bin2hex ((const gdb_byte *) inferior_cwd,
9590                                          strlen (inferior_cwd));
9591
9592           xsnprintf (rs->buf, get_remote_packet_size (),
9593                      "QSetWorkingDir:%s", hexpath.c_str ());
9594         }
9595       else
9596         {
9597           /* An empty inferior_cwd means that the user wants us to
9598              reset the remote server's inferior's cwd.  */
9599           xsnprintf (rs->buf, get_remote_packet_size (),
9600                      "QSetWorkingDir:");
9601         }
9602
9603       putpkt (rs->buf);
9604       getpkt (&rs->buf, &rs->buf_size, 0);
9605       if (packet_ok (rs->buf,
9606                      &remote_protocol_packets[PACKET_QSetWorkingDir])
9607           != PACKET_OK)
9608         error (_("\
9609 Remote replied unexpectedly while setting the inferior's working\n\
9610 directory: %s"),
9611                rs->buf);
9612
9613     }
9614 }
9615
9616 /* In the extended protocol we want to be able to do things like
9617    "run" and have them basically work as expected.  So we need
9618    a special create_inferior function.  We support changing the
9619    executable file and the command line arguments, but not the
9620    environment.  */
9621
9622 static void
9623 extended_remote_create_inferior (struct target_ops *ops,
9624                                  const char *exec_file,
9625                                  const std::string &args,
9626                                  char **env, int from_tty)
9627 {
9628   int run_worked;
9629   char *stop_reply;
9630   struct remote_state *rs = get_remote_state ();
9631   const char *remote_exec_file = get_remote_exec_file ();
9632
9633   /* If running asynchronously, register the target file descriptor
9634      with the event loop.  */
9635   if (target_can_async_p ())
9636     target_async (1);
9637
9638   /* Disable address space randomization if requested (and supported).  */
9639   if (extended_remote_supports_disable_randomization (ops))
9640     extended_remote_disable_randomization (disable_randomization);
9641
9642   /* If startup-with-shell is on, we inform gdbserver to start the
9643      remote inferior using a shell.  */
9644   if (packet_support (PACKET_QStartupWithShell) != PACKET_DISABLE)
9645     {
9646       xsnprintf (rs->buf, get_remote_packet_size (),
9647                  "QStartupWithShell:%d", startup_with_shell ? 1 : 0);
9648       putpkt (rs->buf);
9649       getpkt (&rs->buf, &rs->buf_size, 0);
9650       if (strcmp (rs->buf, "OK") != 0)
9651         error (_("\
9652 Remote replied unexpectedly while setting startup-with-shell: %s"),
9653                rs->buf);
9654     }
9655
9656   extended_remote_environment_support (rs);
9657
9658   extended_remote_set_inferior_cwd (rs);
9659
9660   /* Now restart the remote server.  */
9661   run_worked = extended_remote_run (args) != -1;
9662   if (!run_worked)
9663     {
9664       /* vRun was not supported.  Fail if we need it to do what the
9665          user requested.  */
9666       if (remote_exec_file[0])
9667         error (_("Remote target does not support \"set remote exec-file\""));
9668       if (!args.empty ())
9669         error (_("Remote target does not support \"set args\" or run <ARGS>"));
9670
9671       /* Fall back to "R".  */
9672       extended_remote_restart ();
9673     }
9674
9675   if (!have_inferiors ())
9676     {
9677       /* Clean up from the last time we ran, before we mark the target
9678          running again.  This will mark breakpoints uninserted, and
9679          get_offsets may insert breakpoints.  */
9680       init_thread_list ();
9681       init_wait_for_inferior ();
9682     }
9683
9684   /* vRun's success return is a stop reply.  */
9685   stop_reply = run_worked ? rs->buf : NULL;
9686   add_current_inferior_and_thread (stop_reply);
9687
9688   /* Get updated offsets, if the stub uses qOffsets.  */
9689   get_offsets ();
9690 }
9691 \f
9692
9693 /* Given a location's target info BP_TGT and the packet buffer BUF,  output
9694    the list of conditions (in agent expression bytecode format), if any, the
9695    target needs to evaluate.  The output is placed into the packet buffer
9696    started from BUF and ended at BUF_END.  */
9697
9698 static int
9699 remote_add_target_side_condition (struct gdbarch *gdbarch,
9700                                   struct bp_target_info *bp_tgt, char *buf,
9701                                   char *buf_end)
9702 {
9703   if (bp_tgt->conditions.empty ())
9704     return 0;
9705
9706   buf += strlen (buf);
9707   xsnprintf (buf, buf_end - buf, "%s", ";");
9708   buf++;
9709
9710   /* Send conditions to the target.  */
9711   for (agent_expr *aexpr : bp_tgt->conditions)
9712     {
9713       xsnprintf (buf, buf_end - buf, "X%x,", aexpr->len);
9714       buf += strlen (buf);
9715       for (int i = 0; i < aexpr->len; ++i)
9716         buf = pack_hex_byte (buf, aexpr->buf[i]);
9717       *buf = '\0';
9718     }
9719   return 0;
9720 }
9721
9722 static void
9723 remote_add_target_side_commands (struct gdbarch *gdbarch,
9724                                  struct bp_target_info *bp_tgt, char *buf)
9725 {
9726   if (bp_tgt->tcommands.empty ())
9727     return;
9728
9729   buf += strlen (buf);
9730
9731   sprintf (buf, ";cmds:%x,", bp_tgt->persist);
9732   buf += strlen (buf);
9733
9734   /* Concatenate all the agent expressions that are commands into the
9735      cmds parameter.  */
9736   for (agent_expr *aexpr : bp_tgt->tcommands)
9737     {
9738       sprintf (buf, "X%x,", aexpr->len);
9739       buf += strlen (buf);
9740       for (int i = 0; i < aexpr->len; ++i)
9741         buf = pack_hex_byte (buf, aexpr->buf[i]);
9742       *buf = '\0';
9743     }
9744 }
9745
9746 /* Insert a breakpoint.  On targets that have software breakpoint
9747    support, we ask the remote target to do the work; on targets
9748    which don't, we insert a traditional memory breakpoint.  */
9749
9750 static int
9751 remote_insert_breakpoint (struct target_ops *ops,
9752                           struct gdbarch *gdbarch,
9753                           struct bp_target_info *bp_tgt)
9754 {
9755   /* Try the "Z" s/w breakpoint packet if it is not already disabled.
9756      If it succeeds, then set the support to PACKET_ENABLE.  If it
9757      fails, and the user has explicitly requested the Z support then
9758      report an error, otherwise, mark it disabled and go on.  */
9759
9760   if (packet_support (PACKET_Z0) != PACKET_DISABLE)
9761     {
9762       CORE_ADDR addr = bp_tgt->reqstd_address;
9763       struct remote_state *rs;
9764       char *p, *endbuf;
9765
9766       /* Make sure the remote is pointing at the right process, if
9767          necessary.  */
9768       if (!gdbarch_has_global_breakpoints (target_gdbarch ()))
9769         set_general_process ();
9770
9771       rs = get_remote_state ();
9772       p = rs->buf;
9773       endbuf = rs->buf + get_remote_packet_size ();
9774
9775       *(p++) = 'Z';
9776       *(p++) = '0';
9777       *(p++) = ',';
9778       addr = (ULONGEST) remote_address_masked (addr);
9779       p += hexnumstr (p, addr);
9780       xsnprintf (p, endbuf - p, ",%d", bp_tgt->kind);
9781
9782       if (remote_supports_cond_breakpoints (ops))
9783         remote_add_target_side_condition (gdbarch, bp_tgt, p, endbuf);
9784
9785       if (remote_can_run_breakpoint_commands (ops))
9786         remote_add_target_side_commands (gdbarch, bp_tgt, p);
9787
9788       putpkt (rs->buf);
9789       getpkt (&rs->buf, &rs->buf_size, 0);
9790
9791       switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_Z0]))
9792         {
9793         case PACKET_ERROR:
9794           return -1;
9795         case PACKET_OK:
9796           return 0;
9797         case PACKET_UNKNOWN:
9798           break;
9799         }
9800     }
9801
9802   /* If this breakpoint has target-side commands but this stub doesn't
9803      support Z0 packets, throw error.  */
9804   if (!bp_tgt->tcommands.empty ())
9805     throw_error (NOT_SUPPORTED_ERROR, _("\
9806 Target doesn't support breakpoints that have target side commands."));
9807
9808   return memory_insert_breakpoint (ops, gdbarch, bp_tgt);
9809 }
9810
9811 static int
9812 remote_remove_breakpoint (struct target_ops *ops,
9813                           struct gdbarch *gdbarch,
9814                           struct bp_target_info *bp_tgt,
9815                           enum remove_bp_reason reason)
9816 {
9817   CORE_ADDR addr = bp_tgt->placed_address;
9818   struct remote_state *rs = get_remote_state ();
9819
9820   if (packet_support (PACKET_Z0) != PACKET_DISABLE)
9821     {
9822       char *p = rs->buf;
9823       char *endbuf = rs->buf + get_remote_packet_size ();
9824
9825       /* Make sure the remote is pointing at the right process, if
9826          necessary.  */
9827       if (!gdbarch_has_global_breakpoints (target_gdbarch ()))
9828         set_general_process ();
9829
9830       *(p++) = 'z';
9831       *(p++) = '0';
9832       *(p++) = ',';
9833
9834       addr = (ULONGEST) remote_address_masked (bp_tgt->placed_address);
9835       p += hexnumstr (p, addr);
9836       xsnprintf (p, endbuf - p, ",%d", bp_tgt->kind);
9837
9838       putpkt (rs->buf);
9839       getpkt (&rs->buf, &rs->buf_size, 0);
9840
9841       return (rs->buf[0] == 'E');
9842     }
9843
9844   return memory_remove_breakpoint (ops, gdbarch, bp_tgt, reason);
9845 }
9846
9847 static enum Z_packet_type
9848 watchpoint_to_Z_packet (int type)
9849 {
9850   switch (type)
9851     {
9852     case hw_write:
9853       return Z_PACKET_WRITE_WP;
9854       break;
9855     case hw_read:
9856       return Z_PACKET_READ_WP;
9857       break;
9858     case hw_access:
9859       return Z_PACKET_ACCESS_WP;
9860       break;
9861     default:
9862       internal_error (__FILE__, __LINE__,
9863                       _("hw_bp_to_z: bad watchpoint type %d"), type);
9864     }
9865 }
9866
9867 static int
9868 remote_insert_watchpoint (struct target_ops *self, CORE_ADDR addr, int len,
9869                           enum target_hw_bp_type type, struct expression *cond)
9870 {
9871   struct remote_state *rs = get_remote_state ();
9872   char *endbuf = rs->buf + get_remote_packet_size ();
9873   char *p;
9874   enum Z_packet_type packet = watchpoint_to_Z_packet (type);
9875
9876   if (packet_support (PACKET_Z0 + packet) == PACKET_DISABLE)
9877     return 1;
9878
9879   /* Make sure the remote is pointing at the right process, if
9880      necessary.  */
9881   if (!gdbarch_has_global_breakpoints (target_gdbarch ()))
9882     set_general_process ();
9883
9884   xsnprintf (rs->buf, endbuf - rs->buf, "Z%x,", packet);
9885   p = strchr (rs->buf, '\0');
9886   addr = remote_address_masked (addr);
9887   p += hexnumstr (p, (ULONGEST) addr);
9888   xsnprintf (p, endbuf - p, ",%x", len);
9889
9890   putpkt (rs->buf);
9891   getpkt (&rs->buf, &rs->buf_size, 0);
9892
9893   switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_Z0 + packet]))
9894     {
9895     case PACKET_ERROR:
9896       return -1;
9897     case PACKET_UNKNOWN:
9898       return 1;
9899     case PACKET_OK:
9900       return 0;
9901     }
9902   internal_error (__FILE__, __LINE__,
9903                   _("remote_insert_watchpoint: reached end of function"));
9904 }
9905
9906 static int
9907 remote_watchpoint_addr_within_range (struct target_ops *target, CORE_ADDR addr,
9908                                      CORE_ADDR start, int length)
9909 {
9910   CORE_ADDR diff = remote_address_masked (addr - start);
9911
9912   return diff < length;
9913 }
9914
9915
9916 static int
9917 remote_remove_watchpoint (struct target_ops *self, CORE_ADDR addr, int len,
9918                           enum target_hw_bp_type type, struct expression *cond)
9919 {
9920   struct remote_state *rs = get_remote_state ();
9921   char *endbuf = rs->buf + get_remote_packet_size ();
9922   char *p;
9923   enum Z_packet_type packet = watchpoint_to_Z_packet (type);
9924
9925   if (packet_support (PACKET_Z0 + packet) == PACKET_DISABLE)
9926     return -1;
9927
9928   /* Make sure the remote is pointing at the right process, if
9929      necessary.  */
9930   if (!gdbarch_has_global_breakpoints (target_gdbarch ()))
9931     set_general_process ();
9932
9933   xsnprintf (rs->buf, endbuf - rs->buf, "z%x,", packet);
9934   p = strchr (rs->buf, '\0');
9935   addr = remote_address_masked (addr);
9936   p += hexnumstr (p, (ULONGEST) addr);
9937   xsnprintf (p, endbuf - p, ",%x", len);
9938   putpkt (rs->buf);
9939   getpkt (&rs->buf, &rs->buf_size, 0);
9940
9941   switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_Z0 + packet]))
9942     {
9943     case PACKET_ERROR:
9944     case PACKET_UNKNOWN:
9945       return -1;
9946     case PACKET_OK:
9947       return 0;
9948     }
9949   internal_error (__FILE__, __LINE__,
9950                   _("remote_remove_watchpoint: reached end of function"));
9951 }
9952
9953
9954 int remote_hw_watchpoint_limit = -1;
9955 int remote_hw_watchpoint_length_limit = -1;
9956 int remote_hw_breakpoint_limit = -1;
9957
9958 static int
9959 remote_region_ok_for_hw_watchpoint (struct target_ops *self,
9960                                     CORE_ADDR addr, int len)
9961 {
9962   if (remote_hw_watchpoint_length_limit == 0)
9963     return 0;
9964   else if (remote_hw_watchpoint_length_limit < 0)
9965     return 1;
9966   else if (len <= remote_hw_watchpoint_length_limit)
9967     return 1;
9968   else
9969     return 0;
9970 }
9971
9972 static int
9973 remote_check_watch_resources (struct target_ops *self,
9974                               enum bptype type, int cnt, int ot)
9975 {
9976   if (type == bp_hardware_breakpoint)
9977     {
9978       if (remote_hw_breakpoint_limit == 0)
9979         return 0;
9980       else if (remote_hw_breakpoint_limit < 0)
9981         return 1;
9982       else if (cnt <= remote_hw_breakpoint_limit)
9983         return 1;
9984     }
9985   else
9986     {
9987       if (remote_hw_watchpoint_limit == 0)
9988         return 0;
9989       else if (remote_hw_watchpoint_limit < 0)
9990         return 1;
9991       else if (ot)
9992         return -1;
9993       else if (cnt <= remote_hw_watchpoint_limit)
9994         return 1;
9995     }
9996   return -1;
9997 }
9998
9999 /* The to_stopped_by_sw_breakpoint method of target remote.  */
10000
10001 static int
10002 remote_stopped_by_sw_breakpoint (struct target_ops *ops)
10003 {
10004   struct thread_info *thread = inferior_thread ();
10005
10006   return (thread->priv != NULL
10007           && (get_remote_thread_info (thread)->stop_reason
10008               == TARGET_STOPPED_BY_SW_BREAKPOINT));
10009 }
10010
10011 /* The to_supports_stopped_by_sw_breakpoint method of target
10012    remote.  */
10013
10014 static int
10015 remote_supports_stopped_by_sw_breakpoint (struct target_ops *ops)
10016 {
10017   return (packet_support (PACKET_swbreak_feature) == PACKET_ENABLE);
10018 }
10019
10020 /* The to_stopped_by_hw_breakpoint method of target remote.  */
10021
10022 static int
10023 remote_stopped_by_hw_breakpoint (struct target_ops *ops)
10024 {
10025   struct thread_info *thread = inferior_thread ();
10026
10027   return (thread->priv != NULL
10028           && (get_remote_thread_info (thread)->stop_reason
10029               == TARGET_STOPPED_BY_HW_BREAKPOINT));
10030 }
10031
10032 /* The to_supports_stopped_by_hw_breakpoint method of target
10033    remote.  */
10034
10035 static int
10036 remote_supports_stopped_by_hw_breakpoint (struct target_ops *ops)
10037 {
10038   return (packet_support (PACKET_hwbreak_feature) == PACKET_ENABLE);
10039 }
10040
10041 static int
10042 remote_stopped_by_watchpoint (struct target_ops *ops)
10043 {
10044   struct thread_info *thread = inferior_thread ();
10045
10046   return (thread->priv != NULL
10047           && (get_remote_thread_info (thread)->stop_reason
10048               == TARGET_STOPPED_BY_WATCHPOINT));
10049 }
10050
10051 static int
10052 remote_stopped_data_address (struct target_ops *target, CORE_ADDR *addr_p)
10053 {
10054   struct thread_info *thread = inferior_thread ();
10055
10056   if (thread->priv != NULL
10057       && (get_remote_thread_info (thread)->stop_reason
10058           == TARGET_STOPPED_BY_WATCHPOINT))
10059     {
10060       *addr_p = get_remote_thread_info (thread)->watch_data_address;
10061       return 1;
10062     }
10063
10064   return 0;
10065 }
10066
10067
10068 static int
10069 remote_insert_hw_breakpoint (struct target_ops *self, struct gdbarch *gdbarch,
10070                              struct bp_target_info *bp_tgt)
10071 {
10072   CORE_ADDR addr = bp_tgt->reqstd_address;
10073   struct remote_state *rs;
10074   char *p, *endbuf;
10075   char *message;
10076
10077   if (packet_support (PACKET_Z1) == PACKET_DISABLE)
10078     return -1;
10079
10080   /* Make sure the remote is pointing at the right process, if
10081      necessary.  */
10082   if (!gdbarch_has_global_breakpoints (target_gdbarch ()))
10083     set_general_process ();
10084
10085   rs = get_remote_state ();
10086   p = rs->buf;
10087   endbuf = rs->buf + get_remote_packet_size ();
10088
10089   *(p++) = 'Z';
10090   *(p++) = '1';
10091   *(p++) = ',';
10092
10093   addr = remote_address_masked (addr);
10094   p += hexnumstr (p, (ULONGEST) addr);
10095   xsnprintf (p, endbuf - p, ",%x", bp_tgt->kind);
10096
10097   if (remote_supports_cond_breakpoints (self))
10098     remote_add_target_side_condition (gdbarch, bp_tgt, p, endbuf);
10099
10100   if (remote_can_run_breakpoint_commands (self))
10101     remote_add_target_side_commands (gdbarch, bp_tgt, p);
10102
10103   putpkt (rs->buf);
10104   getpkt (&rs->buf, &rs->buf_size, 0);
10105
10106   switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_Z1]))
10107     {
10108     case PACKET_ERROR:
10109       if (rs->buf[1] == '.')
10110         {
10111           message = strchr (rs->buf + 2, '.');
10112           if (message)
10113             error (_("Remote failure reply: %s"), message + 1);
10114         }
10115       return -1;
10116     case PACKET_UNKNOWN:
10117       return -1;
10118     case PACKET_OK:
10119       return 0;
10120     }
10121   internal_error (__FILE__, __LINE__,
10122                   _("remote_insert_hw_breakpoint: reached end of function"));
10123 }
10124
10125
10126 static int
10127 remote_remove_hw_breakpoint (struct target_ops *self, struct gdbarch *gdbarch,
10128                              struct bp_target_info *bp_tgt)
10129 {
10130   CORE_ADDR addr;
10131   struct remote_state *rs = get_remote_state ();
10132   char *p = rs->buf;
10133   char *endbuf = rs->buf + get_remote_packet_size ();
10134
10135   if (packet_support (PACKET_Z1) == PACKET_DISABLE)
10136     return -1;
10137
10138   /* Make sure the remote is pointing at the right process, if
10139      necessary.  */
10140   if (!gdbarch_has_global_breakpoints (target_gdbarch ()))
10141     set_general_process ();
10142
10143   *(p++) = 'z';
10144   *(p++) = '1';
10145   *(p++) = ',';
10146
10147   addr = remote_address_masked (bp_tgt->placed_address);
10148   p += hexnumstr (p, (ULONGEST) addr);
10149   xsnprintf (p, endbuf  - p, ",%x", bp_tgt->kind);
10150
10151   putpkt (rs->buf);
10152   getpkt (&rs->buf, &rs->buf_size, 0);
10153
10154   switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_Z1]))
10155     {
10156     case PACKET_ERROR:
10157     case PACKET_UNKNOWN:
10158       return -1;
10159     case PACKET_OK:
10160       return 0;
10161     }
10162   internal_error (__FILE__, __LINE__,
10163                   _("remote_remove_hw_breakpoint: reached end of function"));
10164 }
10165
10166 /* Verify memory using the "qCRC:" request.  */
10167
10168 static int
10169 remote_verify_memory (struct target_ops *ops,
10170                       const gdb_byte *data, CORE_ADDR lma, ULONGEST size)
10171 {
10172   struct remote_state *rs = get_remote_state ();
10173   unsigned long host_crc, target_crc;
10174   char *tmp;
10175
10176   /* It doesn't make sense to use qCRC if the remote target is
10177      connected but not running.  */
10178   if (target_has_execution && packet_support (PACKET_qCRC) != PACKET_DISABLE)
10179     {
10180       enum packet_result result;
10181
10182       /* Make sure the remote is pointing at the right process.  */
10183       set_general_process ();
10184
10185       /* FIXME: assumes lma can fit into long.  */
10186       xsnprintf (rs->buf, get_remote_packet_size (), "qCRC:%lx,%lx",
10187                  (long) lma, (long) size);
10188       putpkt (rs->buf);
10189
10190       /* Be clever; compute the host_crc before waiting for target
10191          reply.  */
10192       host_crc = xcrc32 (data, size, 0xffffffff);
10193
10194       getpkt (&rs->buf, &rs->buf_size, 0);
10195
10196       result = packet_ok (rs->buf,
10197                           &remote_protocol_packets[PACKET_qCRC]);
10198       if (result == PACKET_ERROR)
10199         return -1;
10200       else if (result == PACKET_OK)
10201         {
10202           for (target_crc = 0, tmp = &rs->buf[1]; *tmp; tmp++)
10203             target_crc = target_crc * 16 + fromhex (*tmp);
10204
10205           return (host_crc == target_crc);
10206         }
10207     }
10208
10209   return simple_verify_memory (ops, data, lma, size);
10210 }
10211
10212 /* compare-sections command
10213
10214    With no arguments, compares each loadable section in the exec bfd
10215    with the same memory range on the target, and reports mismatches.
10216    Useful for verifying the image on the target against the exec file.  */
10217
10218 static void
10219 compare_sections_command (const char *args, int from_tty)
10220 {
10221   asection *s;
10222   const char *sectname;
10223   bfd_size_type size;
10224   bfd_vma lma;
10225   int matched = 0;
10226   int mismatched = 0;
10227   int res;
10228   int read_only = 0;
10229
10230   if (!exec_bfd)
10231     error (_("command cannot be used without an exec file"));
10232
10233   /* Make sure the remote is pointing at the right process.  */
10234   set_general_process ();
10235
10236   if (args != NULL && strcmp (args, "-r") == 0)
10237     {
10238       read_only = 1;
10239       args = NULL;
10240     }
10241
10242   for (s = exec_bfd->sections; s; s = s->next)
10243     {
10244       if (!(s->flags & SEC_LOAD))
10245         continue;               /* Skip non-loadable section.  */
10246
10247       if (read_only && (s->flags & SEC_READONLY) == 0)
10248         continue;               /* Skip writeable sections */
10249
10250       size = bfd_get_section_size (s);
10251       if (size == 0)
10252         continue;               /* Skip zero-length section.  */
10253
10254       sectname = bfd_get_section_name (exec_bfd, s);
10255       if (args && strcmp (args, sectname) != 0)
10256         continue;               /* Not the section selected by user.  */
10257
10258       matched = 1;              /* Do this section.  */
10259       lma = s->lma;
10260
10261       gdb::byte_vector sectdata (size);
10262       bfd_get_section_contents (exec_bfd, s, sectdata.data (), 0, size);
10263
10264       res = target_verify_memory (sectdata.data (), lma, size);
10265
10266       if (res == -1)
10267         error (_("target memory fault, section %s, range %s -- %s"), sectname,
10268                paddress (target_gdbarch (), lma),
10269                paddress (target_gdbarch (), lma + size));
10270
10271       printf_filtered ("Section %s, range %s -- %s: ", sectname,
10272                        paddress (target_gdbarch (), lma),
10273                        paddress (target_gdbarch (), lma + size));
10274       if (res)
10275         printf_filtered ("matched.\n");
10276       else
10277         {
10278           printf_filtered ("MIS-MATCHED!\n");
10279           mismatched++;
10280         }
10281     }
10282   if (mismatched > 0)
10283     warning (_("One or more sections of the target image does not match\n\
10284 the loaded file\n"));
10285   if (args && !matched)
10286     printf_filtered (_("No loaded section named '%s'.\n"), args);
10287 }
10288
10289 /* Write LEN bytes from WRITEBUF into OBJECT_NAME/ANNEX at OFFSET
10290    into remote target.  The number of bytes written to the remote
10291    target is returned, or -1 for error.  */
10292
10293 static enum target_xfer_status
10294 remote_write_qxfer (struct target_ops *ops, const char *object_name,
10295                     const char *annex, const gdb_byte *writebuf, 
10296                     ULONGEST offset, LONGEST len, ULONGEST *xfered_len,
10297                     struct packet_config *packet)
10298 {
10299   int i, buf_len;
10300   ULONGEST n;
10301   struct remote_state *rs = get_remote_state ();
10302   int max_size = get_memory_write_packet_size (); 
10303
10304   if (packet_config_support (packet) == PACKET_DISABLE)
10305     return TARGET_XFER_E_IO;
10306
10307   /* Insert header.  */
10308   i = snprintf (rs->buf, max_size, 
10309                 "qXfer:%s:write:%s:%s:",
10310                 object_name, annex ? annex : "",
10311                 phex_nz (offset, sizeof offset));
10312   max_size -= (i + 1);
10313
10314   /* Escape as much data as fits into rs->buf.  */
10315   buf_len = remote_escape_output 
10316     (writebuf, len, 1, (gdb_byte *) rs->buf + i, &max_size, max_size);
10317
10318   if (putpkt_binary (rs->buf, i + buf_len) < 0
10319       || getpkt_sane (&rs->buf, &rs->buf_size, 0) < 0
10320       || packet_ok (rs->buf, packet) != PACKET_OK)
10321     return TARGET_XFER_E_IO;
10322
10323   unpack_varlen_hex (rs->buf, &n);
10324
10325   *xfered_len = n;
10326   return (*xfered_len != 0) ? TARGET_XFER_OK : TARGET_XFER_EOF;
10327 }
10328
10329 /* Read OBJECT_NAME/ANNEX from the remote target using a qXfer packet.
10330    Data at OFFSET, of up to LEN bytes, is read into READBUF; the
10331    number of bytes read is returned, or 0 for EOF, or -1 for error.
10332    The number of bytes read may be less than LEN without indicating an
10333    EOF.  PACKET is checked and updated to indicate whether the remote
10334    target supports this object.  */
10335
10336 static enum target_xfer_status
10337 remote_read_qxfer (struct target_ops *ops, const char *object_name,
10338                    const char *annex,
10339                    gdb_byte *readbuf, ULONGEST offset, LONGEST len,
10340                    ULONGEST *xfered_len,
10341                    struct packet_config *packet)
10342 {
10343   struct remote_state *rs = get_remote_state ();
10344   LONGEST i, n, packet_len;
10345
10346   if (packet_config_support (packet) == PACKET_DISABLE)
10347     return TARGET_XFER_E_IO;
10348
10349   /* Check whether we've cached an end-of-object packet that matches
10350      this request.  */
10351   if (rs->finished_object)
10352     {
10353       if (strcmp (object_name, rs->finished_object) == 0
10354           && strcmp (annex ? annex : "", rs->finished_annex) == 0
10355           && offset == rs->finished_offset)
10356         return TARGET_XFER_EOF;
10357
10358
10359       /* Otherwise, we're now reading something different.  Discard
10360          the cache.  */
10361       xfree (rs->finished_object);
10362       xfree (rs->finished_annex);
10363       rs->finished_object = NULL;
10364       rs->finished_annex = NULL;
10365     }
10366
10367   /* Request only enough to fit in a single packet.  The actual data
10368      may not, since we don't know how much of it will need to be escaped;
10369      the target is free to respond with slightly less data.  We subtract
10370      five to account for the response type and the protocol frame.  */
10371   n = std::min<LONGEST> (get_remote_packet_size () - 5, len);
10372   snprintf (rs->buf, get_remote_packet_size () - 4, "qXfer:%s:read:%s:%s,%s",
10373             object_name, annex ? annex : "",
10374             phex_nz (offset, sizeof offset),
10375             phex_nz (n, sizeof n));
10376   i = putpkt (rs->buf);
10377   if (i < 0)
10378     return TARGET_XFER_E_IO;
10379
10380   rs->buf[0] = '\0';
10381   packet_len = getpkt_sane (&rs->buf, &rs->buf_size, 0);
10382   if (packet_len < 0 || packet_ok (rs->buf, packet) != PACKET_OK)
10383     return TARGET_XFER_E_IO;
10384
10385   if (rs->buf[0] != 'l' && rs->buf[0] != 'm')
10386     error (_("Unknown remote qXfer reply: %s"), rs->buf);
10387
10388   /* 'm' means there is (or at least might be) more data after this
10389      batch.  That does not make sense unless there's at least one byte
10390      of data in this reply.  */
10391   if (rs->buf[0] == 'm' && packet_len == 1)
10392     error (_("Remote qXfer reply contained no data."));
10393
10394   /* Got some data.  */
10395   i = remote_unescape_input ((gdb_byte *) rs->buf + 1,
10396                              packet_len - 1, readbuf, n);
10397
10398   /* 'l' is an EOF marker, possibly including a final block of data,
10399      or possibly empty.  If we have the final block of a non-empty
10400      object, record this fact to bypass a subsequent partial read.  */
10401   if (rs->buf[0] == 'l' && offset + i > 0)
10402     {
10403       rs->finished_object = xstrdup (object_name);
10404       rs->finished_annex = xstrdup (annex ? annex : "");
10405       rs->finished_offset = offset + i;
10406     }
10407
10408   if (i == 0)
10409     return TARGET_XFER_EOF;
10410   else
10411     {
10412       *xfered_len = i;
10413       return TARGET_XFER_OK;
10414     }
10415 }
10416
10417 static enum target_xfer_status
10418 remote_xfer_partial (struct target_ops *ops, enum target_object object,
10419                      const char *annex, gdb_byte *readbuf,
10420                      const gdb_byte *writebuf, ULONGEST offset, ULONGEST len,
10421                      ULONGEST *xfered_len)
10422 {
10423   struct remote_state *rs;
10424   int i;
10425   char *p2;
10426   char query_type;
10427   int unit_size = gdbarch_addressable_memory_unit_size (target_gdbarch ());
10428
10429   set_remote_traceframe ();
10430   set_general_thread (inferior_ptid);
10431
10432   rs = get_remote_state ();
10433
10434   /* Handle memory using the standard memory routines.  */
10435   if (object == TARGET_OBJECT_MEMORY)
10436     {
10437       /* If the remote target is connected but not running, we should
10438          pass this request down to a lower stratum (e.g. the executable
10439          file).  */
10440       if (!target_has_execution)
10441         return TARGET_XFER_EOF;
10442
10443       if (writebuf != NULL)
10444         return remote_write_bytes (offset, writebuf, len, unit_size,
10445                                    xfered_len);
10446       else
10447         return remote_read_bytes (ops, offset, readbuf, len, unit_size,
10448                                   xfered_len);
10449     }
10450
10451   /* Handle SPU memory using qxfer packets.  */
10452   if (object == TARGET_OBJECT_SPU)
10453     {
10454       if (readbuf)
10455         return remote_read_qxfer (ops, "spu", annex, readbuf, offset, len,
10456                                   xfered_len, &remote_protocol_packets
10457                                   [PACKET_qXfer_spu_read]);
10458       else
10459         return remote_write_qxfer (ops, "spu", annex, writebuf, offset, len,
10460                                    xfered_len, &remote_protocol_packets
10461                                    [PACKET_qXfer_spu_write]);
10462     }
10463
10464   /* Handle extra signal info using qxfer packets.  */
10465   if (object == TARGET_OBJECT_SIGNAL_INFO)
10466     {
10467       if (readbuf)
10468         return remote_read_qxfer (ops, "siginfo", annex, readbuf, offset, len,
10469                                   xfered_len, &remote_protocol_packets
10470                                   [PACKET_qXfer_siginfo_read]);
10471       else
10472         return remote_write_qxfer (ops, "siginfo", annex,
10473                                    writebuf, offset, len, xfered_len,
10474                                    &remote_protocol_packets
10475                                    [PACKET_qXfer_siginfo_write]);
10476     }
10477
10478   if (object == TARGET_OBJECT_STATIC_TRACE_DATA)
10479     {
10480       if (readbuf)
10481         return remote_read_qxfer (ops, "statictrace", annex,
10482                                   readbuf, offset, len, xfered_len,
10483                                   &remote_protocol_packets
10484                                   [PACKET_qXfer_statictrace_read]);
10485       else
10486         return TARGET_XFER_E_IO;
10487     }
10488
10489   /* Only handle flash writes.  */
10490   if (writebuf != NULL)
10491     {
10492       switch (object)
10493         {
10494         case TARGET_OBJECT_FLASH:
10495           return remote_flash_write (ops, offset, len, xfered_len,
10496                                      writebuf);
10497
10498         default:
10499           return TARGET_XFER_E_IO;
10500         }
10501     }
10502
10503   /* Map pre-existing objects onto letters.  DO NOT do this for new
10504      objects!!!  Instead specify new query packets.  */
10505   switch (object)
10506     {
10507     case TARGET_OBJECT_AVR:
10508       query_type = 'R';
10509       break;
10510
10511     case TARGET_OBJECT_AUXV:
10512       gdb_assert (annex == NULL);
10513       return remote_read_qxfer (ops, "auxv", annex, readbuf, offset, len,
10514                                 xfered_len,
10515                                 &remote_protocol_packets[PACKET_qXfer_auxv]);
10516
10517     case TARGET_OBJECT_AVAILABLE_FEATURES:
10518       return remote_read_qxfer
10519         (ops, "features", annex, readbuf, offset, len, xfered_len,
10520          &remote_protocol_packets[PACKET_qXfer_features]);
10521
10522     case TARGET_OBJECT_LIBRARIES:
10523       return remote_read_qxfer
10524         (ops, "libraries", annex, readbuf, offset, len, xfered_len,
10525          &remote_protocol_packets[PACKET_qXfer_libraries]);
10526
10527     case TARGET_OBJECT_LIBRARIES_SVR4:
10528       return remote_read_qxfer
10529         (ops, "libraries-svr4", annex, readbuf, offset, len, xfered_len,
10530          &remote_protocol_packets[PACKET_qXfer_libraries_svr4]);
10531
10532     case TARGET_OBJECT_MEMORY_MAP:
10533       gdb_assert (annex == NULL);
10534       return remote_read_qxfer (ops, "memory-map", annex, readbuf, offset, len,
10535                                  xfered_len,
10536                                 &remote_protocol_packets[PACKET_qXfer_memory_map]);
10537
10538     case TARGET_OBJECT_OSDATA:
10539       /* Should only get here if we're connected.  */
10540       gdb_assert (rs->remote_desc);
10541       return remote_read_qxfer
10542         (ops, "osdata", annex, readbuf, offset, len, xfered_len,
10543         &remote_protocol_packets[PACKET_qXfer_osdata]);
10544
10545     case TARGET_OBJECT_THREADS:
10546       gdb_assert (annex == NULL);
10547       return remote_read_qxfer (ops, "threads", annex, readbuf, offset, len,
10548                                 xfered_len,
10549                                 &remote_protocol_packets[PACKET_qXfer_threads]);
10550
10551     case TARGET_OBJECT_TRACEFRAME_INFO:
10552       gdb_assert (annex == NULL);
10553       return remote_read_qxfer
10554         (ops, "traceframe-info", annex, readbuf, offset, len, xfered_len,
10555          &remote_protocol_packets[PACKET_qXfer_traceframe_info]);
10556
10557     case TARGET_OBJECT_FDPIC:
10558       return remote_read_qxfer (ops, "fdpic", annex, readbuf, offset, len,
10559                                 xfered_len,
10560                                 &remote_protocol_packets[PACKET_qXfer_fdpic]);
10561
10562     case TARGET_OBJECT_OPENVMS_UIB:
10563       return remote_read_qxfer (ops, "uib", annex, readbuf, offset, len,
10564                                 xfered_len,
10565                                 &remote_protocol_packets[PACKET_qXfer_uib]);
10566
10567     case TARGET_OBJECT_BTRACE:
10568       return remote_read_qxfer (ops, "btrace", annex, readbuf, offset, len,
10569                                 xfered_len,
10570         &remote_protocol_packets[PACKET_qXfer_btrace]);
10571
10572     case TARGET_OBJECT_BTRACE_CONF:
10573       return remote_read_qxfer (ops, "btrace-conf", annex, readbuf, offset,
10574                                 len, xfered_len,
10575         &remote_protocol_packets[PACKET_qXfer_btrace_conf]);
10576
10577     case TARGET_OBJECT_EXEC_FILE:
10578       return remote_read_qxfer (ops, "exec-file", annex, readbuf, offset,
10579                                 len, xfered_len,
10580         &remote_protocol_packets[PACKET_qXfer_exec_file]);
10581
10582     default:
10583       return TARGET_XFER_E_IO;
10584     }
10585
10586   /* Minimum outbuf size is get_remote_packet_size ().  If LEN is not
10587      large enough let the caller deal with it.  */
10588   if (len < get_remote_packet_size ())
10589     return TARGET_XFER_E_IO;
10590   len = get_remote_packet_size ();
10591
10592   /* Except for querying the minimum buffer size, target must be open.  */
10593   if (!rs->remote_desc)
10594     error (_("remote query is only available after target open"));
10595
10596   gdb_assert (annex != NULL);
10597   gdb_assert (readbuf != NULL);
10598
10599   p2 = rs->buf;
10600   *p2++ = 'q';
10601   *p2++ = query_type;
10602
10603   /* We used one buffer char for the remote protocol q command and
10604      another for the query type.  As the remote protocol encapsulation
10605      uses 4 chars plus one extra in case we are debugging
10606      (remote_debug), we have PBUFZIZ - 7 left to pack the query
10607      string.  */
10608   i = 0;
10609   while (annex[i] && (i < (get_remote_packet_size () - 8)))
10610     {
10611       /* Bad caller may have sent forbidden characters.  */
10612       gdb_assert (isprint (annex[i]) && annex[i] != '$' && annex[i] != '#');
10613       *p2++ = annex[i];
10614       i++;
10615     }
10616   *p2 = '\0';
10617   gdb_assert (annex[i] == '\0');
10618
10619   i = putpkt (rs->buf);
10620   if (i < 0)
10621     return TARGET_XFER_E_IO;
10622
10623   getpkt (&rs->buf, &rs->buf_size, 0);
10624   strcpy ((char *) readbuf, rs->buf);
10625
10626   *xfered_len = strlen ((char *) readbuf);
10627   return (*xfered_len != 0) ? TARGET_XFER_OK : TARGET_XFER_EOF;
10628 }
10629
10630 /* Implementation of to_get_memory_xfer_limit.  */
10631
10632 static ULONGEST
10633 remote_get_memory_xfer_limit (struct target_ops *ops)
10634 {
10635   return get_memory_write_packet_size ();
10636 }
10637
10638 static int
10639 remote_search_memory (struct target_ops* ops,
10640                       CORE_ADDR start_addr, ULONGEST search_space_len,
10641                       const gdb_byte *pattern, ULONGEST pattern_len,
10642                       CORE_ADDR *found_addrp)
10643 {
10644   int addr_size = gdbarch_addr_bit (target_gdbarch ()) / 8;
10645   struct remote_state *rs = get_remote_state ();
10646   int max_size = get_memory_write_packet_size ();
10647   struct packet_config *packet =
10648     &remote_protocol_packets[PACKET_qSearch_memory];
10649   /* Number of packet bytes used to encode the pattern;
10650      this could be more than PATTERN_LEN due to escape characters.  */
10651   int escaped_pattern_len;
10652   /* Amount of pattern that was encodable in the packet.  */
10653   int used_pattern_len;
10654   int i;
10655   int found;
10656   ULONGEST found_addr;
10657
10658   /* Don't go to the target if we don't have to.  This is done before
10659      checking packet_config_support to avoid the possibility that a
10660      success for this edge case means the facility works in
10661      general.  */
10662   if (pattern_len > search_space_len)
10663     return 0;
10664   if (pattern_len == 0)
10665     {
10666       *found_addrp = start_addr;
10667       return 1;
10668     }
10669
10670   /* If we already know the packet isn't supported, fall back to the simple
10671      way of searching memory.  */
10672
10673   if (packet_config_support (packet) == PACKET_DISABLE)
10674     {
10675       /* Target doesn't provided special support, fall back and use the
10676          standard support (copy memory and do the search here).  */
10677       return simple_search_memory (ops, start_addr, search_space_len,
10678                                    pattern, pattern_len, found_addrp);
10679     }
10680
10681   /* Make sure the remote is pointing at the right process.  */
10682   set_general_process ();
10683
10684   /* Insert header.  */
10685   i = snprintf (rs->buf, max_size, 
10686                 "qSearch:memory:%s;%s;",
10687                 phex_nz (start_addr, addr_size),
10688                 phex_nz (search_space_len, sizeof (search_space_len)));
10689   max_size -= (i + 1);
10690
10691   /* Escape as much data as fits into rs->buf.  */
10692   escaped_pattern_len =
10693     remote_escape_output (pattern, pattern_len, 1, (gdb_byte *) rs->buf + i,
10694                           &used_pattern_len, max_size);
10695
10696   /* Bail if the pattern is too large.  */
10697   if (used_pattern_len != pattern_len)
10698     error (_("Pattern is too large to transmit to remote target."));
10699
10700   if (putpkt_binary (rs->buf, i + escaped_pattern_len) < 0
10701       || getpkt_sane (&rs->buf, &rs->buf_size, 0) < 0
10702       || packet_ok (rs->buf, packet) != PACKET_OK)
10703     {
10704       /* The request may not have worked because the command is not
10705          supported.  If so, fall back to the simple way.  */
10706       if (packet_config_support (packet) == PACKET_DISABLE)
10707         {
10708           return simple_search_memory (ops, start_addr, search_space_len,
10709                                        pattern, pattern_len, found_addrp);
10710         }
10711       return -1;
10712     }
10713
10714   if (rs->buf[0] == '0')
10715     found = 0;
10716   else if (rs->buf[0] == '1')
10717     {
10718       found = 1;
10719       if (rs->buf[1] != ',')
10720         error (_("Unknown qSearch:memory reply: %s"), rs->buf);
10721       unpack_varlen_hex (rs->buf + 2, &found_addr);
10722       *found_addrp = found_addr;
10723     }
10724   else
10725     error (_("Unknown qSearch:memory reply: %s"), rs->buf);
10726
10727   return found;
10728 }
10729
10730 static void
10731 remote_rcmd (struct target_ops *self, const char *command,
10732              struct ui_file *outbuf)
10733 {
10734   struct remote_state *rs = get_remote_state ();
10735   char *p = rs->buf;
10736
10737   if (!rs->remote_desc)
10738     error (_("remote rcmd is only available after target open"));
10739
10740   /* Send a NULL command across as an empty command.  */
10741   if (command == NULL)
10742     command = "";
10743
10744   /* The query prefix.  */
10745   strcpy (rs->buf, "qRcmd,");
10746   p = strchr (rs->buf, '\0');
10747
10748   if ((strlen (rs->buf) + strlen (command) * 2 + 8/*misc*/)
10749       > get_remote_packet_size ())
10750     error (_("\"monitor\" command ``%s'' is too long."), command);
10751
10752   /* Encode the actual command.  */
10753   bin2hex ((const gdb_byte *) command, p, strlen (command));
10754
10755   if (putpkt (rs->buf) < 0)
10756     error (_("Communication problem with target."));
10757
10758   /* get/display the response */
10759   while (1)
10760     {
10761       char *buf;
10762
10763       /* XXX - see also remote_get_noisy_reply().  */
10764       QUIT;                     /* Allow user to bail out with ^C.  */
10765       rs->buf[0] = '\0';
10766       if (getpkt_sane (&rs->buf, &rs->buf_size, 0) == -1)
10767         { 
10768           /* Timeout.  Continue to (try to) read responses.
10769              This is better than stopping with an error, assuming the stub
10770              is still executing the (long) monitor command.
10771              If needed, the user can interrupt gdb using C-c, obtaining
10772              an effect similar to stop on timeout.  */
10773           continue;
10774         }
10775       buf = rs->buf;
10776       if (buf[0] == '\0')
10777         error (_("Target does not support this command."));
10778       if (buf[0] == 'O' && buf[1] != 'K')
10779         {
10780           remote_console_output (buf + 1); /* 'O' message from stub.  */
10781           continue;
10782         }
10783       if (strcmp (buf, "OK") == 0)
10784         break;
10785       if (strlen (buf) == 3 && buf[0] == 'E'
10786           && isdigit (buf[1]) && isdigit (buf[2]))
10787         {
10788           error (_("Protocol error with Rcmd"));
10789         }
10790       for (p = buf; p[0] != '\0' && p[1] != '\0'; p += 2)
10791         {
10792           char c = (fromhex (p[0]) << 4) + fromhex (p[1]);
10793
10794           fputc_unfiltered (c, outbuf);
10795         }
10796       break;
10797     }
10798 }
10799
10800 static std::vector<mem_region>
10801 remote_memory_map (struct target_ops *ops)
10802 {
10803   std::vector<mem_region> result;
10804   gdb::unique_xmalloc_ptr<char> text
10805     = target_read_stralloc (&current_target, TARGET_OBJECT_MEMORY_MAP, NULL);
10806
10807   if (text)
10808     result = parse_memory_map (text.get ());
10809
10810   return result;
10811 }
10812
10813 static void
10814 packet_command (const char *args, int from_tty)
10815 {
10816   struct remote_state *rs = get_remote_state ();
10817
10818   if (!rs->remote_desc)
10819     error (_("command can only be used with remote target"));
10820
10821   if (!args)
10822     error (_("remote-packet command requires packet text as argument"));
10823
10824   puts_filtered ("sending: ");
10825   print_packet (args);
10826   puts_filtered ("\n");
10827   putpkt (args);
10828
10829   getpkt (&rs->buf, &rs->buf_size, 0);
10830   puts_filtered ("received: ");
10831   print_packet (rs->buf);
10832   puts_filtered ("\n");
10833 }
10834
10835 #if 0
10836 /* --------- UNIT_TEST for THREAD oriented PACKETS ------------------- */
10837
10838 static void display_thread_info (struct gdb_ext_thread_info *info);
10839
10840 static void threadset_test_cmd (char *cmd, int tty);
10841
10842 static void threadalive_test (char *cmd, int tty);
10843
10844 static void threadlist_test_cmd (char *cmd, int tty);
10845
10846 int get_and_display_threadinfo (threadref *ref);
10847
10848 static void threadinfo_test_cmd (char *cmd, int tty);
10849
10850 static int thread_display_step (threadref *ref, void *context);
10851
10852 static void threadlist_update_test_cmd (char *cmd, int tty);
10853
10854 static void init_remote_threadtests (void);
10855
10856 #define SAMPLE_THREAD  0x05060708       /* Truncated 64 bit threadid.  */
10857
10858 static void
10859 threadset_test_cmd (const char *cmd, int tty)
10860 {
10861   int sample_thread = SAMPLE_THREAD;
10862
10863   printf_filtered (_("Remote threadset test\n"));
10864   set_general_thread (sample_thread);
10865 }
10866
10867
10868 static void
10869 threadalive_test (const char *cmd, int tty)
10870 {
10871   int sample_thread = SAMPLE_THREAD;
10872   int pid = ptid_get_pid (inferior_ptid);
10873   ptid_t ptid = ptid_build (pid, sample_thread, 0);
10874
10875   if (remote_thread_alive (ptid))
10876     printf_filtered ("PASS: Thread alive test\n");
10877   else
10878     printf_filtered ("FAIL: Thread alive test\n");
10879 }
10880
10881 void output_threadid (char *title, threadref *ref);
10882
10883 void
10884 output_threadid (char *title, threadref *ref)
10885 {
10886   char hexid[20];
10887
10888   pack_threadid (&hexid[0], ref);       /* Convert threead id into hex.  */
10889   hexid[16] = 0;
10890   printf_filtered ("%s  %s\n", title, (&hexid[0]));
10891 }
10892
10893 static void
10894 threadlist_test_cmd (const char *cmd, int tty)
10895 {
10896   int startflag = 1;
10897   threadref nextthread;
10898   int done, result_count;
10899   threadref threadlist[3];
10900
10901   printf_filtered ("Remote Threadlist test\n");
10902   if (!remote_get_threadlist (startflag, &nextthread, 3, &done,
10903                               &result_count, &threadlist[0]))
10904     printf_filtered ("FAIL: threadlist test\n");
10905   else
10906     {
10907       threadref *scan = threadlist;
10908       threadref *limit = scan + result_count;
10909
10910       while (scan < limit)
10911         output_threadid (" thread ", scan++);
10912     }
10913 }
10914
10915 void
10916 display_thread_info (struct gdb_ext_thread_info *info)
10917 {
10918   output_threadid ("Threadid: ", &info->threadid);
10919   printf_filtered ("Name: %s\n ", info->shortname);
10920   printf_filtered ("State: %s\n", info->display);
10921   printf_filtered ("other: %s\n\n", info->more_display);
10922 }
10923
10924 int
10925 get_and_display_threadinfo (threadref *ref)
10926 {
10927   int result;
10928   int set;
10929   struct gdb_ext_thread_info threadinfo;
10930
10931   set = TAG_THREADID | TAG_EXISTS | TAG_THREADNAME
10932     | TAG_MOREDISPLAY | TAG_DISPLAY;
10933   if (0 != (result = remote_get_threadinfo (ref, set, &threadinfo)))
10934     display_thread_info (&threadinfo);
10935   return result;
10936 }
10937
10938 static void
10939 threadinfo_test_cmd (const char *cmd, int tty)
10940 {
10941   int athread = SAMPLE_THREAD;
10942   threadref thread;
10943   int set;
10944
10945   int_to_threadref (&thread, athread);
10946   printf_filtered ("Remote Threadinfo test\n");
10947   if (!get_and_display_threadinfo (&thread))
10948     printf_filtered ("FAIL cannot get thread info\n");
10949 }
10950
10951 static int
10952 thread_display_step (threadref *ref, void *context)
10953 {
10954   /* output_threadid(" threadstep ",ref); *//* simple test */
10955   return get_and_display_threadinfo (ref);
10956 }
10957
10958 static void
10959 threadlist_update_test_cmd (const char *cmd, int tty)
10960 {
10961   printf_filtered ("Remote Threadlist update test\n");
10962   remote_threadlist_iterator (thread_display_step, 0, CRAZY_MAX_THREADS);
10963 }
10964
10965 static void
10966 init_remote_threadtests (void)
10967 {
10968   add_com ("tlist", class_obscure, threadlist_test_cmd,
10969            _("Fetch and print the remote list of "
10970              "thread identifiers, one pkt only"));
10971   add_com ("tinfo", class_obscure, threadinfo_test_cmd,
10972            _("Fetch and display info about one thread"));
10973   add_com ("tset", class_obscure, threadset_test_cmd,
10974            _("Test setting to a different thread"));
10975   add_com ("tupd", class_obscure, threadlist_update_test_cmd,
10976            _("Iterate through updating all remote thread info"));
10977   add_com ("talive", class_obscure, threadalive_test,
10978            _(" Remote thread alive test "));
10979 }
10980
10981 #endif /* 0 */
10982
10983 /* Convert a thread ID to a string.  Returns the string in a static
10984    buffer.  */
10985
10986 static const char *
10987 remote_pid_to_str (struct target_ops *ops, ptid_t ptid)
10988 {
10989   static char buf[64];
10990   struct remote_state *rs = get_remote_state ();
10991
10992   if (ptid_equal (ptid, null_ptid))
10993     return normal_pid_to_str (ptid);
10994   else if (ptid_is_pid (ptid))
10995     {
10996       /* Printing an inferior target id.  */
10997
10998       /* When multi-process extensions are off, there's no way in the
10999          remote protocol to know the remote process id, if there's any
11000          at all.  There's one exception --- when we're connected with
11001          target extended-remote, and we manually attached to a process
11002          with "attach PID".  We don't record anywhere a flag that
11003          allows us to distinguish that case from the case of
11004          connecting with extended-remote and the stub already being
11005          attached to a process, and reporting yes to qAttached, hence
11006          no smart special casing here.  */
11007       if (!remote_multi_process_p (rs))
11008         {
11009           xsnprintf (buf, sizeof buf, "Remote target");
11010           return buf;
11011         }
11012
11013       return normal_pid_to_str (ptid);
11014     }
11015   else
11016     {
11017       if (ptid_equal (magic_null_ptid, ptid))
11018         xsnprintf (buf, sizeof buf, "Thread <main>");
11019       else if (remote_multi_process_p (rs))
11020         if (ptid_get_lwp (ptid) == 0)
11021           return normal_pid_to_str (ptid);
11022         else
11023           xsnprintf (buf, sizeof buf, "Thread %d.%ld",
11024                      ptid_get_pid (ptid), ptid_get_lwp (ptid));
11025       else
11026         xsnprintf (buf, sizeof buf, "Thread %ld",
11027                    ptid_get_lwp (ptid));
11028       return buf;
11029     }
11030 }
11031
11032 /* Get the address of the thread local variable in OBJFILE which is
11033    stored at OFFSET within the thread local storage for thread PTID.  */
11034
11035 static CORE_ADDR
11036 remote_get_thread_local_address (struct target_ops *ops,
11037                                  ptid_t ptid, CORE_ADDR lm, CORE_ADDR offset)
11038 {
11039   if (packet_support (PACKET_qGetTLSAddr) != PACKET_DISABLE)
11040     {
11041       struct remote_state *rs = get_remote_state ();
11042       char *p = rs->buf;
11043       char *endp = rs->buf + get_remote_packet_size ();
11044       enum packet_result result;
11045
11046       strcpy (p, "qGetTLSAddr:");
11047       p += strlen (p);
11048       p = write_ptid (p, endp, ptid);
11049       *p++ = ',';
11050       p += hexnumstr (p, offset);
11051       *p++ = ',';
11052       p += hexnumstr (p, lm);
11053       *p++ = '\0';
11054
11055       putpkt (rs->buf);
11056       getpkt (&rs->buf, &rs->buf_size, 0);
11057       result = packet_ok (rs->buf,
11058                           &remote_protocol_packets[PACKET_qGetTLSAddr]);
11059       if (result == PACKET_OK)
11060         {
11061           ULONGEST result;
11062
11063           unpack_varlen_hex (rs->buf, &result);
11064           return result;
11065         }
11066       else if (result == PACKET_UNKNOWN)
11067         throw_error (TLS_GENERIC_ERROR,
11068                      _("Remote target doesn't support qGetTLSAddr packet"));
11069       else
11070         throw_error (TLS_GENERIC_ERROR,
11071                      _("Remote target failed to process qGetTLSAddr request"));
11072     }
11073   else
11074     throw_error (TLS_GENERIC_ERROR,
11075                  _("TLS not supported or disabled on this target"));
11076   /* Not reached.  */
11077   return 0;
11078 }
11079
11080 /* Provide thread local base, i.e. Thread Information Block address.
11081    Returns 1 if ptid is found and thread_local_base is non zero.  */
11082
11083 static int
11084 remote_get_tib_address (struct target_ops *self, ptid_t ptid, CORE_ADDR *addr)
11085 {
11086   if (packet_support (PACKET_qGetTIBAddr) != PACKET_DISABLE)
11087     {
11088       struct remote_state *rs = get_remote_state ();
11089       char *p = rs->buf;
11090       char *endp = rs->buf + get_remote_packet_size ();
11091       enum packet_result result;
11092
11093       strcpy (p, "qGetTIBAddr:");
11094       p += strlen (p);
11095       p = write_ptid (p, endp, ptid);
11096       *p++ = '\0';
11097
11098       putpkt (rs->buf);
11099       getpkt (&rs->buf, &rs->buf_size, 0);
11100       result = packet_ok (rs->buf,
11101                           &remote_protocol_packets[PACKET_qGetTIBAddr]);
11102       if (result == PACKET_OK)
11103         {
11104           ULONGEST result;
11105
11106           unpack_varlen_hex (rs->buf, &result);
11107           if (addr)
11108             *addr = (CORE_ADDR) result;
11109           return 1;
11110         }
11111       else if (result == PACKET_UNKNOWN)
11112         error (_("Remote target doesn't support qGetTIBAddr packet"));
11113       else
11114         error (_("Remote target failed to process qGetTIBAddr request"));
11115     }
11116   else
11117     error (_("qGetTIBAddr not supported or disabled on this target"));
11118   /* Not reached.  */
11119   return 0;
11120 }
11121
11122 /* Support for inferring a target description based on the current
11123    architecture and the size of a 'g' packet.  While the 'g' packet
11124    can have any size (since optional registers can be left off the
11125    end), some sizes are easily recognizable given knowledge of the
11126    approximate architecture.  */
11127
11128 struct remote_g_packet_guess
11129 {
11130   int bytes;
11131   const struct target_desc *tdesc;
11132 };
11133 typedef struct remote_g_packet_guess remote_g_packet_guess_s;
11134 DEF_VEC_O(remote_g_packet_guess_s);
11135
11136 struct remote_g_packet_data
11137 {
11138   VEC(remote_g_packet_guess_s) *guesses;
11139 };
11140
11141 static struct gdbarch_data *remote_g_packet_data_handle;
11142
11143 static void *
11144 remote_g_packet_data_init (struct obstack *obstack)
11145 {
11146   return OBSTACK_ZALLOC (obstack, struct remote_g_packet_data);
11147 }
11148
11149 void
11150 register_remote_g_packet_guess (struct gdbarch *gdbarch, int bytes,
11151                                 const struct target_desc *tdesc)
11152 {
11153   struct remote_g_packet_data *data
11154     = ((struct remote_g_packet_data *)
11155        gdbarch_data (gdbarch, remote_g_packet_data_handle));
11156   struct remote_g_packet_guess new_guess, *guess;
11157   int ix;
11158
11159   gdb_assert (tdesc != NULL);
11160
11161   for (ix = 0;
11162        VEC_iterate (remote_g_packet_guess_s, data->guesses, ix, guess);
11163        ix++)
11164     if (guess->bytes == bytes)
11165       internal_error (__FILE__, __LINE__,
11166                       _("Duplicate g packet description added for size %d"),
11167                       bytes);
11168
11169   new_guess.bytes = bytes;
11170   new_guess.tdesc = tdesc;
11171   VEC_safe_push (remote_g_packet_guess_s, data->guesses, &new_guess);
11172 }
11173
11174 /* Return 1 if remote_read_description would do anything on this target
11175    and architecture, 0 otherwise.  */
11176
11177 static int
11178 remote_read_description_p (struct target_ops *target)
11179 {
11180   struct remote_g_packet_data *data
11181     = ((struct remote_g_packet_data *)
11182        gdbarch_data (target_gdbarch (), remote_g_packet_data_handle));
11183
11184   if (!VEC_empty (remote_g_packet_guess_s, data->guesses))
11185     return 1;
11186
11187   return 0;
11188 }
11189
11190 static const struct target_desc *
11191 remote_read_description (struct target_ops *target)
11192 {
11193   struct remote_g_packet_data *data
11194     = ((struct remote_g_packet_data *)
11195        gdbarch_data (target_gdbarch (), remote_g_packet_data_handle));
11196
11197   /* Do not try this during initial connection, when we do not know
11198      whether there is a running but stopped thread.  */
11199   if (!target_has_execution || ptid_equal (inferior_ptid, null_ptid))
11200     return target->beneath->to_read_description (target->beneath);
11201
11202   if (!VEC_empty (remote_g_packet_guess_s, data->guesses))
11203     {
11204       struct remote_g_packet_guess *guess;
11205       int ix;
11206       int bytes = send_g_packet ();
11207
11208       for (ix = 0;
11209            VEC_iterate (remote_g_packet_guess_s, data->guesses, ix, guess);
11210            ix++)
11211         if (guess->bytes == bytes)
11212           return guess->tdesc;
11213
11214       /* We discard the g packet.  A minor optimization would be to
11215          hold on to it, and fill the register cache once we have selected
11216          an architecture, but it's too tricky to do safely.  */
11217     }
11218
11219   return target->beneath->to_read_description (target->beneath);
11220 }
11221
11222 /* Remote file transfer support.  This is host-initiated I/O, not
11223    target-initiated; for target-initiated, see remote-fileio.c.  */
11224
11225 /* If *LEFT is at least the length of STRING, copy STRING to
11226    *BUFFER, update *BUFFER to point to the new end of the buffer, and
11227    decrease *LEFT.  Otherwise raise an error.  */
11228
11229 static void
11230 remote_buffer_add_string (char **buffer, int *left, const char *string)
11231 {
11232   int len = strlen (string);
11233
11234   if (len > *left)
11235     error (_("Packet too long for target."));
11236
11237   memcpy (*buffer, string, len);
11238   *buffer += len;
11239   *left -= len;
11240
11241   /* NUL-terminate the buffer as a convenience, if there is
11242      room.  */
11243   if (*left)
11244     **buffer = '\0';
11245 }
11246
11247 /* If *LEFT is large enough, hex encode LEN bytes from BYTES into
11248    *BUFFER, update *BUFFER to point to the new end of the buffer, and
11249    decrease *LEFT.  Otherwise raise an error.  */
11250
11251 static void
11252 remote_buffer_add_bytes (char **buffer, int *left, const gdb_byte *bytes,
11253                          int len)
11254 {
11255   if (2 * len > *left)
11256     error (_("Packet too long for target."));
11257
11258   bin2hex (bytes, *buffer, len);
11259   *buffer += 2 * len;
11260   *left -= 2 * len;
11261
11262   /* NUL-terminate the buffer as a convenience, if there is
11263      room.  */
11264   if (*left)
11265     **buffer = '\0';
11266 }
11267
11268 /* If *LEFT is large enough, convert VALUE to hex and add it to
11269    *BUFFER, update *BUFFER to point to the new end of the buffer, and
11270    decrease *LEFT.  Otherwise raise an error.  */
11271
11272 static void
11273 remote_buffer_add_int (char **buffer, int *left, ULONGEST value)
11274 {
11275   int len = hexnumlen (value);
11276
11277   if (len > *left)
11278     error (_("Packet too long for target."));
11279
11280   hexnumstr (*buffer, value);
11281   *buffer += len;
11282   *left -= len;
11283
11284   /* NUL-terminate the buffer as a convenience, if there is
11285      room.  */
11286   if (*left)
11287     **buffer = '\0';
11288 }
11289
11290 /* Parse an I/O result packet from BUFFER.  Set RETCODE to the return
11291    value, *REMOTE_ERRNO to the remote error number or zero if none
11292    was included, and *ATTACHMENT to point to the start of the annex
11293    if any.  The length of the packet isn't needed here; there may
11294    be NUL bytes in BUFFER, but they will be after *ATTACHMENT.
11295
11296    Return 0 if the packet could be parsed, -1 if it could not.  If
11297    -1 is returned, the other variables may not be initialized.  */
11298
11299 static int
11300 remote_hostio_parse_result (char *buffer, int *retcode,
11301                             int *remote_errno, char **attachment)
11302 {
11303   char *p, *p2;
11304
11305   *remote_errno = 0;
11306   *attachment = NULL;
11307
11308   if (buffer[0] != 'F')
11309     return -1;
11310
11311   errno = 0;
11312   *retcode = strtol (&buffer[1], &p, 16);
11313   if (errno != 0 || p == &buffer[1])
11314     return -1;
11315
11316   /* Check for ",errno".  */
11317   if (*p == ',')
11318     {
11319       errno = 0;
11320       *remote_errno = strtol (p + 1, &p2, 16);
11321       if (errno != 0 || p + 1 == p2)
11322         return -1;
11323       p = p2;
11324     }
11325
11326   /* Check for ";attachment".  If there is no attachment, the
11327      packet should end here.  */
11328   if (*p == ';')
11329     {
11330       *attachment = p + 1;
11331       return 0;
11332     }
11333   else if (*p == '\0')
11334     return 0;
11335   else
11336     return -1;
11337 }
11338
11339 /* Send a prepared I/O packet to the target and read its response.
11340    The prepared packet is in the global RS->BUF before this function
11341    is called, and the answer is there when we return.
11342
11343    COMMAND_BYTES is the length of the request to send, which may include
11344    binary data.  WHICH_PACKET is the packet configuration to check
11345    before attempting a packet.  If an error occurs, *REMOTE_ERRNO
11346    is set to the error number and -1 is returned.  Otherwise the value
11347    returned by the function is returned.
11348
11349    ATTACHMENT and ATTACHMENT_LEN should be non-NULL if and only if an
11350    attachment is expected; an error will be reported if there's a
11351    mismatch.  If one is found, *ATTACHMENT will be set to point into
11352    the packet buffer and *ATTACHMENT_LEN will be set to the
11353    attachment's length.  */
11354
11355 static int
11356 remote_hostio_send_command (int command_bytes, int which_packet,
11357                             int *remote_errno, char **attachment,
11358                             int *attachment_len)
11359 {
11360   struct remote_state *rs = get_remote_state ();
11361   int ret, bytes_read;
11362   char *attachment_tmp;
11363
11364   if (!rs->remote_desc
11365       || packet_support (which_packet) == PACKET_DISABLE)
11366     {
11367       *remote_errno = FILEIO_ENOSYS;
11368       return -1;
11369     }
11370
11371   putpkt_binary (rs->buf, command_bytes);
11372   bytes_read = getpkt_sane (&rs->buf, &rs->buf_size, 0);
11373
11374   /* If it timed out, something is wrong.  Don't try to parse the
11375      buffer.  */
11376   if (bytes_read < 0)
11377     {
11378       *remote_errno = FILEIO_EINVAL;
11379       return -1;
11380     }
11381
11382   switch (packet_ok (rs->buf, &remote_protocol_packets[which_packet]))
11383     {
11384     case PACKET_ERROR:
11385       *remote_errno = FILEIO_EINVAL;
11386       return -1;
11387     case PACKET_UNKNOWN:
11388       *remote_errno = FILEIO_ENOSYS;
11389       return -1;
11390     case PACKET_OK:
11391       break;
11392     }
11393
11394   if (remote_hostio_parse_result (rs->buf, &ret, remote_errno,
11395                                   &attachment_tmp))
11396     {
11397       *remote_errno = FILEIO_EINVAL;
11398       return -1;
11399     }
11400
11401   /* Make sure we saw an attachment if and only if we expected one.  */
11402   if ((attachment_tmp == NULL && attachment != NULL)
11403       || (attachment_tmp != NULL && attachment == NULL))
11404     {
11405       *remote_errno = FILEIO_EINVAL;
11406       return -1;
11407     }
11408
11409   /* If an attachment was found, it must point into the packet buffer;
11410      work out how many bytes there were.  */
11411   if (attachment_tmp != NULL)
11412     {
11413       *attachment = attachment_tmp;
11414       *attachment_len = bytes_read - (*attachment - rs->buf);
11415     }
11416
11417   return ret;
11418 }
11419
11420 /* Invalidate the readahead cache.  */
11421
11422 static void
11423 readahead_cache_invalidate (void)
11424 {
11425   struct remote_state *rs = get_remote_state ();
11426
11427   rs->readahead_cache.fd = -1;
11428 }
11429
11430 /* Invalidate the readahead cache if it is holding data for FD.  */
11431
11432 static void
11433 readahead_cache_invalidate_fd (int fd)
11434 {
11435   struct remote_state *rs = get_remote_state ();
11436
11437   if (rs->readahead_cache.fd == fd)
11438     rs->readahead_cache.fd = -1;
11439 }
11440
11441 /* Set the filesystem remote_hostio functions that take FILENAME
11442    arguments will use.  Return 0 on success, or -1 if an error
11443    occurs (and set *REMOTE_ERRNO).  */
11444
11445 static int
11446 remote_hostio_set_filesystem (struct inferior *inf, int *remote_errno)
11447 {
11448   struct remote_state *rs = get_remote_state ();
11449   int required_pid = (inf == NULL || inf->fake_pid_p) ? 0 : inf->pid;
11450   char *p = rs->buf;
11451   int left = get_remote_packet_size () - 1;
11452   char arg[9];
11453   int ret;
11454
11455   if (packet_support (PACKET_vFile_setfs) == PACKET_DISABLE)
11456     return 0;
11457
11458   if (rs->fs_pid != -1 && required_pid == rs->fs_pid)
11459     return 0;
11460
11461   remote_buffer_add_string (&p, &left, "vFile:setfs:");
11462
11463   xsnprintf (arg, sizeof (arg), "%x", required_pid);
11464   remote_buffer_add_string (&p, &left, arg);
11465
11466   ret = remote_hostio_send_command (p - rs->buf, PACKET_vFile_setfs,
11467                                     remote_errno, NULL, NULL);
11468
11469   if (packet_support (PACKET_vFile_setfs) == PACKET_DISABLE)
11470     return 0;
11471
11472   if (ret == 0)
11473     rs->fs_pid = required_pid;
11474
11475   return ret;
11476 }
11477
11478 /* Implementation of to_fileio_open.  */
11479
11480 static int
11481 remote_hostio_open (struct target_ops *self,
11482                     struct inferior *inf, const char *filename,
11483                     int flags, int mode, int warn_if_slow,
11484                     int *remote_errno)
11485 {
11486   struct remote_state *rs = get_remote_state ();
11487   char *p = rs->buf;
11488   int left = get_remote_packet_size () - 1;
11489
11490   if (warn_if_slow)
11491     {
11492       static int warning_issued = 0;
11493
11494       printf_unfiltered (_("Reading %s from remote target...\n"),
11495                          filename);
11496
11497       if (!warning_issued)
11498         {
11499           warning (_("File transfers from remote targets can be slow."
11500                      " Use \"set sysroot\" to access files locally"
11501                      " instead."));
11502           warning_issued = 1;
11503         }
11504     }
11505
11506   if (remote_hostio_set_filesystem (inf, remote_errno) != 0)
11507     return -1;
11508
11509   remote_buffer_add_string (&p, &left, "vFile:open:");
11510
11511   remote_buffer_add_bytes (&p, &left, (const gdb_byte *) filename,
11512                            strlen (filename));
11513   remote_buffer_add_string (&p, &left, ",");
11514
11515   remote_buffer_add_int (&p, &left, flags);
11516   remote_buffer_add_string (&p, &left, ",");
11517
11518   remote_buffer_add_int (&p, &left, mode);
11519
11520   return remote_hostio_send_command (p - rs->buf, PACKET_vFile_open,
11521                                      remote_errno, NULL, NULL);
11522 }
11523
11524 /* Implementation of to_fileio_pwrite.  */
11525
11526 static int
11527 remote_hostio_pwrite (struct target_ops *self,
11528                       int fd, const gdb_byte *write_buf, int len,
11529                       ULONGEST offset, int *remote_errno)
11530 {
11531   struct remote_state *rs = get_remote_state ();
11532   char *p = rs->buf;
11533   int left = get_remote_packet_size ();
11534   int out_len;
11535
11536   readahead_cache_invalidate_fd (fd);
11537
11538   remote_buffer_add_string (&p, &left, "vFile:pwrite:");
11539
11540   remote_buffer_add_int (&p, &left, fd);
11541   remote_buffer_add_string (&p, &left, ",");
11542
11543   remote_buffer_add_int (&p, &left, offset);
11544   remote_buffer_add_string (&p, &left, ",");
11545
11546   p += remote_escape_output (write_buf, len, 1, (gdb_byte *) p, &out_len,
11547                              get_remote_packet_size () - (p - rs->buf));
11548
11549   return remote_hostio_send_command (p - rs->buf, PACKET_vFile_pwrite,
11550                                      remote_errno, NULL, NULL);
11551 }
11552
11553 /* Helper for the implementation of to_fileio_pread.  Read the file
11554    from the remote side with vFile:pread.  */
11555
11556 static int
11557 remote_hostio_pread_vFile (struct target_ops *self,
11558                            int fd, gdb_byte *read_buf, int len,
11559                            ULONGEST offset, int *remote_errno)
11560 {
11561   struct remote_state *rs = get_remote_state ();
11562   char *p = rs->buf;
11563   char *attachment;
11564   int left = get_remote_packet_size ();
11565   int ret, attachment_len;
11566   int read_len;
11567
11568   remote_buffer_add_string (&p, &left, "vFile:pread:");
11569
11570   remote_buffer_add_int (&p, &left, fd);
11571   remote_buffer_add_string (&p, &left, ",");
11572
11573   remote_buffer_add_int (&p, &left, len);
11574   remote_buffer_add_string (&p, &left, ",");
11575
11576   remote_buffer_add_int (&p, &left, offset);
11577
11578   ret = remote_hostio_send_command (p - rs->buf, PACKET_vFile_pread,
11579                                     remote_errno, &attachment,
11580                                     &attachment_len);
11581
11582   if (ret < 0)
11583     return ret;
11584
11585   read_len = remote_unescape_input ((gdb_byte *) attachment, attachment_len,
11586                                     read_buf, len);
11587   if (read_len != ret)
11588     error (_("Read returned %d, but %d bytes."), ret, (int) read_len);
11589
11590   return ret;
11591 }
11592
11593 /* Serve pread from the readahead cache.  Returns number of bytes
11594    read, or 0 if the request can't be served from the cache.  */
11595
11596 static int
11597 remote_hostio_pread_from_cache (struct remote_state *rs,
11598                                 int fd, gdb_byte *read_buf, size_t len,
11599                                 ULONGEST offset)
11600 {
11601   struct readahead_cache *cache = &rs->readahead_cache;
11602
11603   if (cache->fd == fd
11604       && cache->offset <= offset
11605       && offset < cache->offset + cache->bufsize)
11606     {
11607       ULONGEST max = cache->offset + cache->bufsize;
11608
11609       if (offset + len > max)
11610         len = max - offset;
11611
11612       memcpy (read_buf, cache->buf + offset - cache->offset, len);
11613       return len;
11614     }
11615
11616   return 0;
11617 }
11618
11619 /* Implementation of to_fileio_pread.  */
11620
11621 static int
11622 remote_hostio_pread (struct target_ops *self,
11623                      int fd, gdb_byte *read_buf, int len,
11624                      ULONGEST offset, int *remote_errno)
11625 {
11626   int ret;
11627   struct remote_state *rs = get_remote_state ();
11628   struct readahead_cache *cache = &rs->readahead_cache;
11629
11630   ret = remote_hostio_pread_from_cache (rs, fd, read_buf, len, offset);
11631   if (ret > 0)
11632     {
11633       cache->hit_count++;
11634
11635       if (remote_debug)
11636         fprintf_unfiltered (gdb_stdlog, "readahead cache hit %s\n",
11637                             pulongest (cache->hit_count));
11638       return ret;
11639     }
11640
11641   cache->miss_count++;
11642   if (remote_debug)
11643     fprintf_unfiltered (gdb_stdlog, "readahead cache miss %s\n",
11644                         pulongest (cache->miss_count));
11645
11646   cache->fd = fd;
11647   cache->offset = offset;
11648   cache->bufsize = get_remote_packet_size ();
11649   cache->buf = (gdb_byte *) xrealloc (cache->buf, cache->bufsize);
11650
11651   ret = remote_hostio_pread_vFile (self, cache->fd, cache->buf, cache->bufsize,
11652                                    cache->offset, remote_errno);
11653   if (ret <= 0)
11654     {
11655       readahead_cache_invalidate_fd (fd);
11656       return ret;
11657     }
11658
11659   cache->bufsize = ret;
11660   return remote_hostio_pread_from_cache (rs, fd, read_buf, len, offset);
11661 }
11662
11663 /* Implementation of to_fileio_close.  */
11664
11665 static int
11666 remote_hostio_close (struct target_ops *self, int fd, int *remote_errno)
11667 {
11668   struct remote_state *rs = get_remote_state ();
11669   char *p = rs->buf;
11670   int left = get_remote_packet_size () - 1;
11671
11672   readahead_cache_invalidate_fd (fd);
11673
11674   remote_buffer_add_string (&p, &left, "vFile:close:");
11675
11676   remote_buffer_add_int (&p, &left, fd);
11677
11678   return remote_hostio_send_command (p - rs->buf, PACKET_vFile_close,
11679                                      remote_errno, NULL, NULL);
11680 }
11681
11682 /* Implementation of to_fileio_unlink.  */
11683
11684 static int
11685 remote_hostio_unlink (struct target_ops *self,
11686                       struct inferior *inf, const char *filename,
11687                       int *remote_errno)
11688 {
11689   struct remote_state *rs = get_remote_state ();
11690   char *p = rs->buf;
11691   int left = get_remote_packet_size () - 1;
11692
11693   if (remote_hostio_set_filesystem (inf, remote_errno) != 0)
11694     return -1;
11695
11696   remote_buffer_add_string (&p, &left, "vFile:unlink:");
11697
11698   remote_buffer_add_bytes (&p, &left, (const gdb_byte *) filename,
11699                            strlen (filename));
11700
11701   return remote_hostio_send_command (p - rs->buf, PACKET_vFile_unlink,
11702                                      remote_errno, NULL, NULL);
11703 }
11704
11705 /* Implementation of to_fileio_readlink.  */
11706
11707 static char *
11708 remote_hostio_readlink (struct target_ops *self,
11709                         struct inferior *inf, const char *filename,
11710                         int *remote_errno)
11711 {
11712   struct remote_state *rs = get_remote_state ();
11713   char *p = rs->buf;
11714   char *attachment;
11715   int left = get_remote_packet_size ();
11716   int len, attachment_len;
11717   int read_len;
11718   char *ret;
11719
11720   if (remote_hostio_set_filesystem (inf, remote_errno) != 0)
11721     return NULL;
11722
11723   remote_buffer_add_string (&p, &left, "vFile:readlink:");
11724
11725   remote_buffer_add_bytes (&p, &left, (const gdb_byte *) filename,
11726                            strlen (filename));
11727
11728   len = remote_hostio_send_command (p - rs->buf, PACKET_vFile_readlink,
11729                                     remote_errno, &attachment,
11730                                     &attachment_len);
11731
11732   if (len < 0)
11733     return NULL;
11734
11735   ret = (char *) xmalloc (len + 1);
11736
11737   read_len = remote_unescape_input ((gdb_byte *) attachment, attachment_len,
11738                                     (gdb_byte *) ret, len);
11739   if (read_len != len)
11740     error (_("Readlink returned %d, but %d bytes."), len, read_len);
11741
11742   ret[len] = '\0';
11743   return ret;
11744 }
11745
11746 /* Implementation of to_fileio_fstat.  */
11747
11748 static int
11749 remote_hostio_fstat (struct target_ops *self,
11750                      int fd, struct stat *st,
11751                      int *remote_errno)
11752 {
11753   struct remote_state *rs = get_remote_state ();
11754   char *p = rs->buf;
11755   int left = get_remote_packet_size ();
11756   int attachment_len, ret;
11757   char *attachment;
11758   struct fio_stat fst;
11759   int read_len;
11760
11761   remote_buffer_add_string (&p, &left, "vFile:fstat:");
11762
11763   remote_buffer_add_int (&p, &left, fd);
11764
11765   ret = remote_hostio_send_command (p - rs->buf, PACKET_vFile_fstat,
11766                                     remote_errno, &attachment,
11767                                     &attachment_len);
11768   if (ret < 0)
11769     {
11770       if (*remote_errno != FILEIO_ENOSYS)
11771         return ret;
11772
11773       /* Strictly we should return -1, ENOSYS here, but when
11774          "set sysroot remote:" was implemented in August 2008
11775          BFD's need for a stat function was sidestepped with
11776          this hack.  This was not remedied until March 2015
11777          so we retain the previous behavior to avoid breaking
11778          compatibility.
11779
11780          Note that the memset is a March 2015 addition; older
11781          GDBs set st_size *and nothing else* so the structure
11782          would have garbage in all other fields.  This might
11783          break something but retaining the previous behavior
11784          here would be just too wrong.  */
11785
11786       memset (st, 0, sizeof (struct stat));
11787       st->st_size = INT_MAX;
11788       return 0;
11789     }
11790
11791   read_len = remote_unescape_input ((gdb_byte *) attachment, attachment_len,
11792                                     (gdb_byte *) &fst, sizeof (fst));
11793
11794   if (read_len != ret)
11795     error (_("vFile:fstat returned %d, but %d bytes."), ret, read_len);
11796
11797   if (read_len != sizeof (fst))
11798     error (_("vFile:fstat returned %d bytes, but expecting %d."),
11799            read_len, (int) sizeof (fst));
11800
11801   remote_fileio_to_host_stat (&fst, st);
11802
11803   return 0;
11804 }
11805
11806 /* Implementation of to_filesystem_is_local.  */
11807
11808 static int
11809 remote_filesystem_is_local (struct target_ops *self)
11810 {
11811   /* Valgrind GDB presents itself as a remote target but works
11812      on the local filesystem: it does not implement remote get
11813      and users are not expected to set a sysroot.  To handle
11814      this case we treat the remote filesystem as local if the
11815      sysroot is exactly TARGET_SYSROOT_PREFIX and if the stub
11816      does not support vFile:open.  */
11817   if (strcmp (gdb_sysroot, TARGET_SYSROOT_PREFIX) == 0)
11818     {
11819       enum packet_support ps = packet_support (PACKET_vFile_open);
11820
11821       if (ps == PACKET_SUPPORT_UNKNOWN)
11822         {
11823           int fd, remote_errno;
11824
11825           /* Try opening a file to probe support.  The supplied
11826              filename is irrelevant, we only care about whether
11827              the stub recognizes the packet or not.  */
11828           fd = remote_hostio_open (self, NULL, "just probing",
11829                                    FILEIO_O_RDONLY, 0700, 0,
11830                                    &remote_errno);
11831
11832           if (fd >= 0)
11833             remote_hostio_close (self, fd, &remote_errno);
11834
11835           ps = packet_support (PACKET_vFile_open);
11836         }
11837
11838       if (ps == PACKET_DISABLE)
11839         {
11840           static int warning_issued = 0;
11841
11842           if (!warning_issued)
11843             {
11844               warning (_("remote target does not support file"
11845                          " transfer, attempting to access files"
11846                          " from local filesystem."));
11847               warning_issued = 1;
11848             }
11849
11850           return 1;
11851         }
11852     }
11853
11854   return 0;
11855 }
11856
11857 static int
11858 remote_fileio_errno_to_host (int errnum)
11859 {
11860   switch (errnum)
11861     {
11862       case FILEIO_EPERM:
11863         return EPERM;
11864       case FILEIO_ENOENT:
11865         return ENOENT;
11866       case FILEIO_EINTR:
11867         return EINTR;
11868       case FILEIO_EIO:
11869         return EIO;
11870       case FILEIO_EBADF:
11871         return EBADF;
11872       case FILEIO_EACCES:
11873         return EACCES;
11874       case FILEIO_EFAULT:
11875         return EFAULT;
11876       case FILEIO_EBUSY:
11877         return EBUSY;
11878       case FILEIO_EEXIST:
11879         return EEXIST;
11880       case FILEIO_ENODEV:
11881         return ENODEV;
11882       case FILEIO_ENOTDIR:
11883         return ENOTDIR;
11884       case FILEIO_EISDIR:
11885         return EISDIR;
11886       case FILEIO_EINVAL:
11887         return EINVAL;
11888       case FILEIO_ENFILE:
11889         return ENFILE;
11890       case FILEIO_EMFILE:
11891         return EMFILE;
11892       case FILEIO_EFBIG:
11893         return EFBIG;
11894       case FILEIO_ENOSPC:
11895         return ENOSPC;
11896       case FILEIO_ESPIPE:
11897         return ESPIPE;
11898       case FILEIO_EROFS:
11899         return EROFS;
11900       case FILEIO_ENOSYS:
11901         return ENOSYS;
11902       case FILEIO_ENAMETOOLONG:
11903         return ENAMETOOLONG;
11904     }
11905   return -1;
11906 }
11907
11908 static char *
11909 remote_hostio_error (int errnum)
11910 {
11911   int host_error = remote_fileio_errno_to_host (errnum);
11912
11913   if (host_error == -1)
11914     error (_("Unknown remote I/O error %d"), errnum);
11915   else
11916     error (_("Remote I/O error: %s"), safe_strerror (host_error));
11917 }
11918
11919 static void
11920 remote_hostio_close_cleanup (void *opaque)
11921 {
11922   int fd = *(int *) opaque;
11923   int remote_errno;
11924
11925   remote_hostio_close (find_target_at (process_stratum), fd, &remote_errno);
11926 }
11927
11928 void
11929 remote_file_put (const char *local_file, const char *remote_file, int from_tty)
11930 {
11931   struct cleanup *back_to, *close_cleanup;
11932   int retcode, fd, remote_errno, bytes, io_size;
11933   gdb_byte *buffer;
11934   int bytes_in_buffer;
11935   int saw_eof;
11936   ULONGEST offset;
11937   struct remote_state *rs = get_remote_state ();
11938
11939   if (!rs->remote_desc)
11940     error (_("command can only be used with remote target"));
11941
11942   gdb_file_up file = gdb_fopen_cloexec (local_file, "rb");
11943   if (file == NULL)
11944     perror_with_name (local_file);
11945
11946   fd = remote_hostio_open (find_target_at (process_stratum), NULL,
11947                            remote_file, (FILEIO_O_WRONLY | FILEIO_O_CREAT
11948                                          | FILEIO_O_TRUNC),
11949                            0700, 0, &remote_errno);
11950   if (fd == -1)
11951     remote_hostio_error (remote_errno);
11952
11953   /* Send up to this many bytes at once.  They won't all fit in the
11954      remote packet limit, so we'll transfer slightly fewer.  */
11955   io_size = get_remote_packet_size ();
11956   buffer = (gdb_byte *) xmalloc (io_size);
11957   back_to = make_cleanup (xfree, buffer);
11958
11959   close_cleanup = make_cleanup (remote_hostio_close_cleanup, &fd);
11960
11961   bytes_in_buffer = 0;
11962   saw_eof = 0;
11963   offset = 0;
11964   while (bytes_in_buffer || !saw_eof)
11965     {
11966       if (!saw_eof)
11967         {
11968           bytes = fread (buffer + bytes_in_buffer, 1,
11969                          io_size - bytes_in_buffer,
11970                          file.get ());
11971           if (bytes == 0)
11972             {
11973               if (ferror (file.get ()))
11974                 error (_("Error reading %s."), local_file);
11975               else
11976                 {
11977                   /* EOF.  Unless there is something still in the
11978                      buffer from the last iteration, we are done.  */
11979                   saw_eof = 1;
11980                   if (bytes_in_buffer == 0)
11981                     break;
11982                 }
11983             }
11984         }
11985       else
11986         bytes = 0;
11987
11988       bytes += bytes_in_buffer;
11989       bytes_in_buffer = 0;
11990
11991       retcode = remote_hostio_pwrite (find_target_at (process_stratum),
11992                                       fd, buffer, bytes,
11993                                       offset, &remote_errno);
11994
11995       if (retcode < 0)
11996         remote_hostio_error (remote_errno);
11997       else if (retcode == 0)
11998         error (_("Remote write of %d bytes returned 0!"), bytes);
11999       else if (retcode < bytes)
12000         {
12001           /* Short write.  Save the rest of the read data for the next
12002              write.  */
12003           bytes_in_buffer = bytes - retcode;
12004           memmove (buffer, buffer + retcode, bytes_in_buffer);
12005         }
12006
12007       offset += retcode;
12008     }
12009
12010   discard_cleanups (close_cleanup);
12011   if (remote_hostio_close (find_target_at (process_stratum), fd, &remote_errno))
12012     remote_hostio_error (remote_errno);
12013
12014   if (from_tty)
12015     printf_filtered (_("Successfully sent file \"%s\".\n"), local_file);
12016   do_cleanups (back_to);
12017 }
12018
12019 void
12020 remote_file_get (const char *remote_file, const char *local_file, int from_tty)
12021 {
12022   struct cleanup *back_to, *close_cleanup;
12023   int fd, remote_errno, bytes, io_size;
12024   gdb_byte *buffer;
12025   ULONGEST offset;
12026   struct remote_state *rs = get_remote_state ();
12027
12028   if (!rs->remote_desc)
12029     error (_("command can only be used with remote target"));
12030
12031   fd = remote_hostio_open (find_target_at (process_stratum), NULL,
12032                            remote_file, FILEIO_O_RDONLY, 0, 0,
12033                            &remote_errno);
12034   if (fd == -1)
12035     remote_hostio_error (remote_errno);
12036
12037   gdb_file_up file = gdb_fopen_cloexec (local_file, "wb");
12038   if (file == NULL)
12039     perror_with_name (local_file);
12040
12041   /* Send up to this many bytes at once.  They won't all fit in the
12042      remote packet limit, so we'll transfer slightly fewer.  */
12043   io_size = get_remote_packet_size ();
12044   buffer = (gdb_byte *) xmalloc (io_size);
12045   back_to = make_cleanup (xfree, buffer);
12046
12047   close_cleanup = make_cleanup (remote_hostio_close_cleanup, &fd);
12048
12049   offset = 0;
12050   while (1)
12051     {
12052       bytes = remote_hostio_pread (find_target_at (process_stratum),
12053                                    fd, buffer, io_size, offset, &remote_errno);
12054       if (bytes == 0)
12055         /* Success, but no bytes, means end-of-file.  */
12056         break;
12057       if (bytes == -1)
12058         remote_hostio_error (remote_errno);
12059
12060       offset += bytes;
12061
12062       bytes = fwrite (buffer, 1, bytes, file.get ());
12063       if (bytes == 0)
12064         perror_with_name (local_file);
12065     }
12066
12067   discard_cleanups (close_cleanup);
12068   if (remote_hostio_close (find_target_at (process_stratum), fd, &remote_errno))
12069     remote_hostio_error (remote_errno);
12070
12071   if (from_tty)
12072     printf_filtered (_("Successfully fetched file \"%s\".\n"), remote_file);
12073   do_cleanups (back_to);
12074 }
12075
12076 void
12077 remote_file_delete (const char *remote_file, int from_tty)
12078 {
12079   int retcode, remote_errno;
12080   struct remote_state *rs = get_remote_state ();
12081
12082   if (!rs->remote_desc)
12083     error (_("command can only be used with remote target"));
12084
12085   retcode = remote_hostio_unlink (find_target_at (process_stratum),
12086                                   NULL, remote_file, &remote_errno);
12087   if (retcode == -1)
12088     remote_hostio_error (remote_errno);
12089
12090   if (from_tty)
12091     printf_filtered (_("Successfully deleted file \"%s\".\n"), remote_file);
12092 }
12093
12094 static void
12095 remote_put_command (const char *args, int from_tty)
12096 {
12097   if (args == NULL)
12098     error_no_arg (_("file to put"));
12099
12100   gdb_argv argv (args);
12101   if (argv[0] == NULL || argv[1] == NULL || argv[2] != NULL)
12102     error (_("Invalid parameters to remote put"));
12103
12104   remote_file_put (argv[0], argv[1], from_tty);
12105 }
12106
12107 static void
12108 remote_get_command (const char *args, int from_tty)
12109 {
12110   if (args == NULL)
12111     error_no_arg (_("file to get"));
12112
12113   gdb_argv argv (args);
12114   if (argv[0] == NULL || argv[1] == NULL || argv[2] != NULL)
12115     error (_("Invalid parameters to remote get"));
12116
12117   remote_file_get (argv[0], argv[1], from_tty);
12118 }
12119
12120 static void
12121 remote_delete_command (const char *args, int from_tty)
12122 {
12123   if (args == NULL)
12124     error_no_arg (_("file to delete"));
12125
12126   gdb_argv argv (args);
12127   if (argv[0] == NULL || argv[1] != NULL)
12128     error (_("Invalid parameters to remote delete"));
12129
12130   remote_file_delete (argv[0], from_tty);
12131 }
12132
12133 static void
12134 remote_command (const char *args, int from_tty)
12135 {
12136   help_list (remote_cmdlist, "remote ", all_commands, gdb_stdout);
12137 }
12138
12139 static int
12140 remote_can_execute_reverse (struct target_ops *self)
12141 {
12142   if (packet_support (PACKET_bs) == PACKET_ENABLE
12143       || packet_support (PACKET_bc) == PACKET_ENABLE)
12144     return 1;
12145   else
12146     return 0;
12147 }
12148
12149 static int
12150 remote_supports_non_stop (struct target_ops *self)
12151 {
12152   return 1;
12153 }
12154
12155 static int
12156 remote_supports_disable_randomization (struct target_ops *self)
12157 {
12158   /* Only supported in extended mode.  */
12159   return 0;
12160 }
12161
12162 static int
12163 remote_supports_multi_process (struct target_ops *self)
12164 {
12165   struct remote_state *rs = get_remote_state ();
12166
12167   return remote_multi_process_p (rs);
12168 }
12169
12170 static int
12171 remote_supports_cond_tracepoints (void)
12172 {
12173   return packet_support (PACKET_ConditionalTracepoints) == PACKET_ENABLE;
12174 }
12175
12176 static int
12177 remote_supports_cond_breakpoints (struct target_ops *self)
12178 {
12179   return packet_support (PACKET_ConditionalBreakpoints) == PACKET_ENABLE;
12180 }
12181
12182 static int
12183 remote_supports_fast_tracepoints (void)
12184 {
12185   return packet_support (PACKET_FastTracepoints) == PACKET_ENABLE;
12186 }
12187
12188 static int
12189 remote_supports_static_tracepoints (void)
12190 {
12191   return packet_support (PACKET_StaticTracepoints) == PACKET_ENABLE;
12192 }
12193
12194 static int
12195 remote_supports_install_in_trace (void)
12196 {
12197   return packet_support (PACKET_InstallInTrace) == PACKET_ENABLE;
12198 }
12199
12200 static int
12201 remote_supports_enable_disable_tracepoint (struct target_ops *self)
12202 {
12203   return (packet_support (PACKET_EnableDisableTracepoints_feature)
12204           == PACKET_ENABLE);
12205 }
12206
12207 static int
12208 remote_supports_string_tracing (struct target_ops *self)
12209 {
12210   return packet_support (PACKET_tracenz_feature) == PACKET_ENABLE;
12211 }
12212
12213 static int
12214 remote_can_run_breakpoint_commands (struct target_ops *self)
12215 {
12216   return packet_support (PACKET_BreakpointCommands) == PACKET_ENABLE;
12217 }
12218
12219 static void
12220 remote_trace_init (struct target_ops *self)
12221 {
12222   struct remote_state *rs = get_remote_state ();
12223
12224   putpkt ("QTinit");
12225   remote_get_noisy_reply ();
12226   if (strcmp (rs->buf, "OK") != 0)
12227     error (_("Target does not support this command."));
12228 }
12229
12230 /* Recursive routine to walk through command list including loops, and
12231    download packets for each command.  */
12232
12233 static void
12234 remote_download_command_source (int num, ULONGEST addr,
12235                                 struct command_line *cmds)
12236 {
12237   struct remote_state *rs = get_remote_state ();
12238   struct command_line *cmd;
12239
12240   for (cmd = cmds; cmd; cmd = cmd->next)
12241     {
12242       QUIT;     /* Allow user to bail out with ^C.  */
12243       strcpy (rs->buf, "QTDPsrc:");
12244       encode_source_string (num, addr, "cmd", cmd->line,
12245                             rs->buf + strlen (rs->buf),
12246                             rs->buf_size - strlen (rs->buf));
12247       putpkt (rs->buf);
12248       remote_get_noisy_reply ();
12249       if (strcmp (rs->buf, "OK"))
12250         warning (_("Target does not support source download."));
12251
12252       if (cmd->control_type == while_control
12253           || cmd->control_type == while_stepping_control)
12254         {
12255           remote_download_command_source (num, addr, *cmd->body_list);
12256
12257           QUIT; /* Allow user to bail out with ^C.  */
12258           strcpy (rs->buf, "QTDPsrc:");
12259           encode_source_string (num, addr, "cmd", "end",
12260                                 rs->buf + strlen (rs->buf),
12261                                 rs->buf_size - strlen (rs->buf));
12262           putpkt (rs->buf);
12263           remote_get_noisy_reply ();
12264           if (strcmp (rs->buf, "OK"))
12265             warning (_("Target does not support source download."));
12266         }
12267     }
12268 }
12269
12270 static void
12271 remote_download_tracepoint (struct target_ops *self, struct bp_location *loc)
12272 {
12273 #define BUF_SIZE 2048
12274
12275   CORE_ADDR tpaddr;
12276   char addrbuf[40];
12277   char buf[BUF_SIZE];
12278   std::vector<std::string> tdp_actions;
12279   std::vector<std::string> stepping_actions;
12280   char *pkt;
12281   struct breakpoint *b = loc->owner;
12282   struct tracepoint *t = (struct tracepoint *) b;
12283   struct remote_state *rs = get_remote_state ();
12284
12285   encode_actions_rsp (loc, &tdp_actions, &stepping_actions);
12286
12287   tpaddr = loc->address;
12288   sprintf_vma (addrbuf, tpaddr);
12289   xsnprintf (buf, BUF_SIZE, "QTDP:%x:%s:%c:%lx:%x", b->number,
12290              addrbuf, /* address */
12291              (b->enable_state == bp_enabled ? 'E' : 'D'),
12292              t->step_count, t->pass_count);
12293   /* Fast tracepoints are mostly handled by the target, but we can
12294      tell the target how big of an instruction block should be moved
12295      around.  */
12296   if (b->type == bp_fast_tracepoint)
12297     {
12298       /* Only test for support at download time; we may not know
12299          target capabilities at definition time.  */
12300       if (remote_supports_fast_tracepoints ())
12301         {
12302           if (gdbarch_fast_tracepoint_valid_at (loc->gdbarch, tpaddr,
12303                                                 NULL))
12304             xsnprintf (buf + strlen (buf), BUF_SIZE - strlen (buf), ":F%x",
12305                        gdb_insn_length (loc->gdbarch, tpaddr));
12306           else
12307             /* If it passed validation at definition but fails now,
12308                something is very wrong.  */
12309             internal_error (__FILE__, __LINE__,
12310                             _("Fast tracepoint not "
12311                               "valid during download"));
12312         }
12313       else
12314         /* Fast tracepoints are functionally identical to regular
12315            tracepoints, so don't take lack of support as a reason to
12316            give up on the trace run.  */
12317         warning (_("Target does not support fast tracepoints, "
12318                    "downloading %d as regular tracepoint"), b->number);
12319     }
12320   else if (b->type == bp_static_tracepoint)
12321     {
12322       /* Only test for support at download time; we may not know
12323          target capabilities at definition time.  */
12324       if (remote_supports_static_tracepoints ())
12325         {
12326           struct static_tracepoint_marker marker;
12327
12328           if (target_static_tracepoint_marker_at (tpaddr, &marker))
12329             strcat (buf, ":S");
12330           else
12331             error (_("Static tracepoint not valid during download"));
12332         }
12333       else
12334         /* Fast tracepoints are functionally identical to regular
12335            tracepoints, so don't take lack of support as a reason
12336            to give up on the trace run.  */
12337         error (_("Target does not support static tracepoints"));
12338     }
12339   /* If the tracepoint has a conditional, make it into an agent
12340      expression and append to the definition.  */
12341   if (loc->cond)
12342     {
12343       /* Only test support at download time, we may not know target
12344          capabilities at definition time.  */
12345       if (remote_supports_cond_tracepoints ())
12346         {
12347           agent_expr_up aexpr = gen_eval_for_expr (tpaddr, loc->cond.get ());
12348           xsnprintf (buf + strlen (buf), BUF_SIZE - strlen (buf), ":X%x,",
12349                      aexpr->len);
12350           pkt = buf + strlen (buf);
12351           for (int ndx = 0; ndx < aexpr->len; ++ndx)
12352             pkt = pack_hex_byte (pkt, aexpr->buf[ndx]);
12353           *pkt = '\0';
12354         }
12355       else
12356         warning (_("Target does not support conditional tracepoints, "
12357                    "ignoring tp %d cond"), b->number);
12358     }
12359
12360   if (b->commands || *default_collect)
12361     strcat (buf, "-");
12362   putpkt (buf);
12363   remote_get_noisy_reply ();
12364   if (strcmp (rs->buf, "OK"))
12365     error (_("Target does not support tracepoints."));
12366
12367   /* do_single_steps (t); */
12368   for (auto action_it = tdp_actions.begin ();
12369        action_it != tdp_actions.end (); action_it++)
12370     {
12371       QUIT;     /* Allow user to bail out with ^C.  */
12372
12373       bool has_more = (action_it != tdp_actions.end ()
12374                        || !stepping_actions.empty ());
12375
12376       xsnprintf (buf, BUF_SIZE, "QTDP:-%x:%s:%s%c",
12377                  b->number, addrbuf, /* address */
12378                  action_it->c_str (),
12379                  has_more ? '-' : 0);
12380       putpkt (buf);
12381       remote_get_noisy_reply ();
12382       if (strcmp (rs->buf, "OK"))
12383         error (_("Error on target while setting tracepoints."));
12384     }
12385
12386     for (auto action_it = stepping_actions.begin ();
12387          action_it != stepping_actions.end (); action_it++)
12388       {
12389         QUIT;   /* Allow user to bail out with ^C.  */
12390
12391         bool is_first = action_it == stepping_actions.begin ();
12392         bool has_more = action_it != stepping_actions.end ();
12393
12394         xsnprintf (buf, BUF_SIZE, "QTDP:-%x:%s:%s%s%s",
12395                    b->number, addrbuf, /* address */
12396                    is_first ? "S" : "",
12397                    action_it->c_str (),
12398                    has_more ? "-" : "");
12399         putpkt (buf);
12400         remote_get_noisy_reply ();
12401         if (strcmp (rs->buf, "OK"))
12402           error (_("Error on target while setting tracepoints."));
12403       }
12404
12405   if (packet_support (PACKET_TracepointSource) == PACKET_ENABLE)
12406     {
12407       if (b->location != NULL)
12408         {
12409           strcpy (buf, "QTDPsrc:");
12410           encode_source_string (b->number, loc->address, "at",
12411                                 event_location_to_string (b->location.get ()),
12412                                 buf + strlen (buf), 2048 - strlen (buf));
12413           putpkt (buf);
12414           remote_get_noisy_reply ();
12415           if (strcmp (rs->buf, "OK"))
12416             warning (_("Target does not support source download."));
12417         }
12418       if (b->cond_string)
12419         {
12420           strcpy (buf, "QTDPsrc:");
12421           encode_source_string (b->number, loc->address,
12422                                 "cond", b->cond_string, buf + strlen (buf),
12423                                 2048 - strlen (buf));
12424           putpkt (buf);
12425           remote_get_noisy_reply ();
12426           if (strcmp (rs->buf, "OK"))
12427             warning (_("Target does not support source download."));
12428         }
12429       remote_download_command_source (b->number, loc->address,
12430                                       breakpoint_commands (b));
12431     }
12432 }
12433
12434 static int
12435 remote_can_download_tracepoint (struct target_ops *self)
12436 {
12437   struct remote_state *rs = get_remote_state ();
12438   struct trace_status *ts;
12439   int status;
12440
12441   /* Don't try to install tracepoints until we've relocated our
12442      symbols, and fetched and merged the target's tracepoint list with
12443      ours.  */
12444   if (rs->starting_up)
12445     return 0;
12446
12447   ts = current_trace_status ();
12448   status = remote_get_trace_status (self, ts);
12449
12450   if (status == -1 || !ts->running_known || !ts->running)
12451     return 0;
12452
12453   /* If we are in a tracing experiment, but remote stub doesn't support
12454      installing tracepoint in trace, we have to return.  */
12455   if (!remote_supports_install_in_trace ())
12456     return 0;
12457
12458   return 1;
12459 }
12460
12461
12462 static void
12463 remote_download_trace_state_variable (struct target_ops *self,
12464                                       struct trace_state_variable *tsv)
12465 {
12466   struct remote_state *rs = get_remote_state ();
12467   char *p;
12468
12469   xsnprintf (rs->buf, get_remote_packet_size (), "QTDV:%x:%s:%x:",
12470              tsv->number, phex ((ULONGEST) tsv->initial_value, 8),
12471              tsv->builtin);
12472   p = rs->buf + strlen (rs->buf);
12473   if ((p - rs->buf) + strlen (tsv->name) * 2 >= get_remote_packet_size ())
12474     error (_("Trace state variable name too long for tsv definition packet"));
12475   p += 2 * bin2hex ((gdb_byte *) (tsv->name), p, strlen (tsv->name));
12476   *p++ = '\0';
12477   putpkt (rs->buf);
12478   remote_get_noisy_reply ();
12479   if (*rs->buf == '\0')
12480     error (_("Target does not support this command."));
12481   if (strcmp (rs->buf, "OK") != 0)
12482     error (_("Error on target while downloading trace state variable."));
12483 }
12484
12485 static void
12486 remote_enable_tracepoint (struct target_ops *self,
12487                           struct bp_location *location)
12488 {
12489   struct remote_state *rs = get_remote_state ();
12490   char addr_buf[40];
12491
12492   sprintf_vma (addr_buf, location->address);
12493   xsnprintf (rs->buf, get_remote_packet_size (), "QTEnable:%x:%s",
12494              location->owner->number, addr_buf);
12495   putpkt (rs->buf);
12496   remote_get_noisy_reply ();
12497   if (*rs->buf == '\0')
12498     error (_("Target does not support enabling tracepoints while a trace run is ongoing."));
12499   if (strcmp (rs->buf, "OK") != 0)
12500     error (_("Error on target while enabling tracepoint."));
12501 }
12502
12503 static void
12504 remote_disable_tracepoint (struct target_ops *self,
12505                            struct bp_location *location)
12506 {
12507   struct remote_state *rs = get_remote_state ();
12508   char addr_buf[40];
12509
12510   sprintf_vma (addr_buf, location->address);
12511   xsnprintf (rs->buf, get_remote_packet_size (), "QTDisable:%x:%s",
12512              location->owner->number, addr_buf);
12513   putpkt (rs->buf);
12514   remote_get_noisy_reply ();
12515   if (*rs->buf == '\0')
12516     error (_("Target does not support disabling tracepoints while a trace run is ongoing."));
12517   if (strcmp (rs->buf, "OK") != 0)
12518     error (_("Error on target while disabling tracepoint."));
12519 }
12520
12521 static void
12522 remote_trace_set_readonly_regions (struct target_ops *self)
12523 {
12524   asection *s;
12525   bfd *abfd = NULL;
12526   bfd_size_type size;
12527   bfd_vma vma;
12528   int anysecs = 0;
12529   int offset = 0;
12530
12531   if (!exec_bfd)
12532     return;                     /* No information to give.  */
12533
12534   struct remote_state *rs = get_remote_state ();
12535
12536   strcpy (rs->buf, "QTro");
12537   offset = strlen (rs->buf);
12538   for (s = exec_bfd->sections; s; s = s->next)
12539     {
12540       char tmp1[40], tmp2[40];
12541       int sec_length;
12542
12543       if ((s->flags & SEC_LOAD) == 0 ||
12544       /*  (s->flags & SEC_CODE) == 0 || */
12545           (s->flags & SEC_READONLY) == 0)
12546         continue;
12547
12548       anysecs = 1;
12549       vma = bfd_get_section_vma (abfd, s);
12550       size = bfd_get_section_size (s);
12551       sprintf_vma (tmp1, vma);
12552       sprintf_vma (tmp2, vma + size);
12553       sec_length = 1 + strlen (tmp1) + 1 + strlen (tmp2);
12554       if (offset + sec_length + 1 > rs->buf_size)
12555         {
12556           if (packet_support (PACKET_qXfer_traceframe_info) != PACKET_ENABLE)
12557             warning (_("\
12558 Too many sections for read-only sections definition packet."));
12559           break;
12560         }
12561       xsnprintf (rs->buf + offset, rs->buf_size - offset, ":%s,%s",
12562                  tmp1, tmp2);
12563       offset += sec_length;
12564     }
12565   if (anysecs)
12566     {
12567       putpkt (rs->buf);
12568       getpkt (&rs->buf, &rs->buf_size, 0);
12569     }
12570 }
12571
12572 static void
12573 remote_trace_start (struct target_ops *self)
12574 {
12575   struct remote_state *rs = get_remote_state ();
12576
12577   putpkt ("QTStart");
12578   remote_get_noisy_reply ();
12579   if (*rs->buf == '\0')
12580     error (_("Target does not support this command."));
12581   if (strcmp (rs->buf, "OK") != 0)
12582     error (_("Bogus reply from target: %s"), rs->buf);
12583 }
12584
12585 static int
12586 remote_get_trace_status (struct target_ops *self, struct trace_status *ts)
12587 {
12588   /* Initialize it just to avoid a GCC false warning.  */
12589   char *p = NULL;
12590   /* FIXME we need to get register block size some other way.  */
12591   extern int trace_regblock_size;
12592   enum packet_result result;
12593   struct remote_state *rs = get_remote_state ();
12594
12595   if (packet_support (PACKET_qTStatus) == PACKET_DISABLE)
12596     return -1;
12597
12598   trace_regblock_size
12599     = get_remote_arch_state (target_gdbarch ())->sizeof_g_packet;
12600
12601   putpkt ("qTStatus");
12602
12603   TRY
12604     {
12605       p = remote_get_noisy_reply ();
12606     }
12607   CATCH (ex, RETURN_MASK_ERROR)
12608     {
12609       if (ex.error != TARGET_CLOSE_ERROR)
12610         {
12611           exception_fprintf (gdb_stderr, ex, "qTStatus: ");
12612           return -1;
12613         }
12614       throw_exception (ex);
12615     }
12616   END_CATCH
12617
12618   result = packet_ok (p, &remote_protocol_packets[PACKET_qTStatus]);
12619
12620   /* If the remote target doesn't do tracing, flag it.  */
12621   if (result == PACKET_UNKNOWN)
12622     return -1;
12623
12624   /* We're working with a live target.  */
12625   ts->filename = NULL;
12626
12627   if (*p++ != 'T')
12628     error (_("Bogus trace status reply from target: %s"), rs->buf);
12629
12630   /* Function 'parse_trace_status' sets default value of each field of
12631      'ts' at first, so we don't have to do it here.  */
12632   parse_trace_status (p, ts);
12633
12634   return ts->running;
12635 }
12636
12637 static void
12638 remote_get_tracepoint_status (struct target_ops *self, struct breakpoint *bp,
12639                               struct uploaded_tp *utp)
12640 {
12641   struct remote_state *rs = get_remote_state ();
12642   char *reply;
12643   struct bp_location *loc;
12644   struct tracepoint *tp = (struct tracepoint *) bp;
12645   size_t size = get_remote_packet_size ();
12646
12647   if (tp)
12648     {
12649       tp->hit_count = 0;
12650       tp->traceframe_usage = 0;
12651       for (loc = tp->loc; loc; loc = loc->next)
12652         {
12653           /* If the tracepoint was never downloaded, don't go asking for
12654              any status.  */
12655           if (tp->number_on_target == 0)
12656             continue;
12657           xsnprintf (rs->buf, size, "qTP:%x:%s", tp->number_on_target,
12658                      phex_nz (loc->address, 0));
12659           putpkt (rs->buf);
12660           reply = remote_get_noisy_reply ();
12661           if (reply && *reply)
12662             {
12663               if (*reply == 'V')
12664                 parse_tracepoint_status (reply + 1, bp, utp);
12665             }
12666         }
12667     }
12668   else if (utp)
12669     {
12670       utp->hit_count = 0;
12671       utp->traceframe_usage = 0;
12672       xsnprintf (rs->buf, size, "qTP:%x:%s", utp->number,
12673                  phex_nz (utp->addr, 0));
12674       putpkt (rs->buf);
12675       reply = remote_get_noisy_reply ();
12676       if (reply && *reply)
12677         {
12678           if (*reply == 'V')
12679             parse_tracepoint_status (reply + 1, bp, utp);
12680         }
12681     }
12682 }
12683
12684 static void
12685 remote_trace_stop (struct target_ops *self)
12686 {
12687   struct remote_state *rs = get_remote_state ();
12688
12689   putpkt ("QTStop");
12690   remote_get_noisy_reply ();
12691   if (*rs->buf == '\0')
12692     error (_("Target does not support this command."));
12693   if (strcmp (rs->buf, "OK") != 0)
12694     error (_("Bogus reply from target: %s"), rs->buf);
12695 }
12696
12697 static int
12698 remote_trace_find (struct target_ops *self,
12699                    enum trace_find_type type, int num,
12700                    CORE_ADDR addr1, CORE_ADDR addr2,
12701                    int *tpp)
12702 {
12703   struct remote_state *rs = get_remote_state ();
12704   char *endbuf = rs->buf + get_remote_packet_size ();
12705   char *p, *reply;
12706   int target_frameno = -1, target_tracept = -1;
12707
12708   /* Lookups other than by absolute frame number depend on the current
12709      trace selected, so make sure it is correct on the remote end
12710      first.  */
12711   if (type != tfind_number)
12712     set_remote_traceframe ();
12713
12714   p = rs->buf;
12715   strcpy (p, "QTFrame:");
12716   p = strchr (p, '\0');
12717   switch (type)
12718     {
12719     case tfind_number:
12720       xsnprintf (p, endbuf - p, "%x", num);
12721       break;
12722     case tfind_pc:
12723       xsnprintf (p, endbuf - p, "pc:%s", phex_nz (addr1, 0));
12724       break;
12725     case tfind_tp:
12726       xsnprintf (p, endbuf - p, "tdp:%x", num);
12727       break;
12728     case tfind_range:
12729       xsnprintf (p, endbuf - p, "range:%s:%s", phex_nz (addr1, 0),
12730                  phex_nz (addr2, 0));
12731       break;
12732     case tfind_outside:
12733       xsnprintf (p, endbuf - p, "outside:%s:%s", phex_nz (addr1, 0),
12734                  phex_nz (addr2, 0));
12735       break;
12736     default:
12737       error (_("Unknown trace find type %d"), type);
12738     }
12739
12740   putpkt (rs->buf);
12741   reply = remote_get_noisy_reply ();
12742   if (*reply == '\0')
12743     error (_("Target does not support this command."));
12744
12745   while (reply && *reply)
12746     switch (*reply)
12747       {
12748       case 'F':
12749         p = ++reply;
12750         target_frameno = (int) strtol (p, &reply, 16);
12751         if (reply == p)
12752           error (_("Unable to parse trace frame number"));
12753         /* Don't update our remote traceframe number cache on failure
12754            to select a remote traceframe.  */
12755         if (target_frameno == -1)
12756           return -1;
12757         break;
12758       case 'T':
12759         p = ++reply;
12760         target_tracept = (int) strtol (p, &reply, 16);
12761         if (reply == p)
12762           error (_("Unable to parse tracepoint number"));
12763         break;
12764       case 'O':         /* "OK"? */
12765         if (reply[1] == 'K' && reply[2] == '\0')
12766           reply += 2;
12767         else
12768           error (_("Bogus reply from target: %s"), reply);
12769         break;
12770       default:
12771         error (_("Bogus reply from target: %s"), reply);
12772       }
12773   if (tpp)
12774     *tpp = target_tracept;
12775
12776   rs->remote_traceframe_number = target_frameno;
12777   return target_frameno;
12778 }
12779
12780 static int
12781 remote_get_trace_state_variable_value (struct target_ops *self,
12782                                        int tsvnum, LONGEST *val)
12783 {
12784   struct remote_state *rs = get_remote_state ();
12785   char *reply;
12786   ULONGEST uval;
12787
12788   set_remote_traceframe ();
12789
12790   xsnprintf (rs->buf, get_remote_packet_size (), "qTV:%x", tsvnum);
12791   putpkt (rs->buf);
12792   reply = remote_get_noisy_reply ();
12793   if (reply && *reply)
12794     {
12795       if (*reply == 'V')
12796         {
12797           unpack_varlen_hex (reply + 1, &uval);
12798           *val = (LONGEST) uval;
12799           return 1;
12800         }
12801     }
12802   return 0;
12803 }
12804
12805 static int
12806 remote_save_trace_data (struct target_ops *self, const char *filename)
12807 {
12808   struct remote_state *rs = get_remote_state ();
12809   char *p, *reply;
12810
12811   p = rs->buf;
12812   strcpy (p, "QTSave:");
12813   p += strlen (p);
12814   if ((p - rs->buf) + strlen (filename) * 2 >= get_remote_packet_size ())
12815     error (_("Remote file name too long for trace save packet"));
12816   p += 2 * bin2hex ((gdb_byte *) filename, p, strlen (filename));
12817   *p++ = '\0';
12818   putpkt (rs->buf);
12819   reply = remote_get_noisy_reply ();
12820   if (*reply == '\0')
12821     error (_("Target does not support this command."));
12822   if (strcmp (reply, "OK") != 0)
12823     error (_("Bogus reply from target: %s"), reply);
12824   return 0;
12825 }
12826
12827 /* This is basically a memory transfer, but needs to be its own packet
12828    because we don't know how the target actually organizes its trace
12829    memory, plus we want to be able to ask for as much as possible, but
12830    not be unhappy if we don't get as much as we ask for.  */
12831
12832 static LONGEST
12833 remote_get_raw_trace_data (struct target_ops *self,
12834                            gdb_byte *buf, ULONGEST offset, LONGEST len)
12835 {
12836   struct remote_state *rs = get_remote_state ();
12837   char *reply;
12838   char *p;
12839   int rslt;
12840
12841   p = rs->buf;
12842   strcpy (p, "qTBuffer:");
12843   p += strlen (p);
12844   p += hexnumstr (p, offset);
12845   *p++ = ',';
12846   p += hexnumstr (p, len);
12847   *p++ = '\0';
12848
12849   putpkt (rs->buf);
12850   reply = remote_get_noisy_reply ();
12851   if (reply && *reply)
12852     {
12853       /* 'l' by itself means we're at the end of the buffer and
12854          there is nothing more to get.  */
12855       if (*reply == 'l')
12856         return 0;
12857
12858       /* Convert the reply into binary.  Limit the number of bytes to
12859          convert according to our passed-in buffer size, rather than
12860          what was returned in the packet; if the target is
12861          unexpectedly generous and gives us a bigger reply than we
12862          asked for, we don't want to crash.  */
12863       rslt = hex2bin (reply, buf, len);
12864       return rslt;
12865     }
12866
12867   /* Something went wrong, flag as an error.  */
12868   return -1;
12869 }
12870
12871 static void
12872 remote_set_disconnected_tracing (struct target_ops *self, int val)
12873 {
12874   struct remote_state *rs = get_remote_state ();
12875
12876   if (packet_support (PACKET_DisconnectedTracing_feature) == PACKET_ENABLE)
12877     {
12878       char *reply;
12879
12880       xsnprintf (rs->buf, get_remote_packet_size (), "QTDisconnected:%x", val);
12881       putpkt (rs->buf);
12882       reply = remote_get_noisy_reply ();
12883       if (*reply == '\0')
12884         error (_("Target does not support this command."));
12885       if (strcmp (reply, "OK") != 0)
12886         error (_("Bogus reply from target: %s"), reply);
12887     }
12888   else if (val)
12889     warning (_("Target does not support disconnected tracing."));
12890 }
12891
12892 static int
12893 remote_core_of_thread (struct target_ops *ops, ptid_t ptid)
12894 {
12895   struct thread_info *info = find_thread_ptid (ptid);
12896
12897   if (info != NULL && info->priv != NULL)
12898     return get_remote_thread_info (info)->core;
12899
12900   return -1;
12901 }
12902
12903 static void
12904 remote_set_circular_trace_buffer (struct target_ops *self, int val)
12905 {
12906   struct remote_state *rs = get_remote_state ();
12907   char *reply;
12908
12909   xsnprintf (rs->buf, get_remote_packet_size (), "QTBuffer:circular:%x", val);
12910   putpkt (rs->buf);
12911   reply = remote_get_noisy_reply ();
12912   if (*reply == '\0')
12913     error (_("Target does not support this command."));
12914   if (strcmp (reply, "OK") != 0)
12915     error (_("Bogus reply from target: %s"), reply);
12916 }
12917
12918 static traceframe_info_up
12919 remote_traceframe_info (struct target_ops *self)
12920 {
12921   gdb::unique_xmalloc_ptr<char> text
12922     = target_read_stralloc (&current_target, TARGET_OBJECT_TRACEFRAME_INFO,
12923                             NULL);
12924   if (text != NULL)
12925     return parse_traceframe_info (text.get ());
12926
12927   return NULL;
12928 }
12929
12930 /* Handle the qTMinFTPILen packet.  Returns the minimum length of
12931    instruction on which a fast tracepoint may be placed.  Returns -1
12932    if the packet is not supported, and 0 if the minimum instruction
12933    length is unknown.  */
12934
12935 static int
12936 remote_get_min_fast_tracepoint_insn_len (struct target_ops *self)
12937 {
12938   struct remote_state *rs = get_remote_state ();
12939   char *reply;
12940
12941   /* If we're not debugging a process yet, the IPA can't be
12942      loaded.  */
12943   if (!target_has_execution)
12944     return 0;
12945
12946   /* Make sure the remote is pointing at the right process.  */
12947   set_general_process ();
12948
12949   xsnprintf (rs->buf, get_remote_packet_size (), "qTMinFTPILen");
12950   putpkt (rs->buf);
12951   reply = remote_get_noisy_reply ();
12952   if (*reply == '\0')
12953     return -1;
12954   else
12955     {
12956       ULONGEST min_insn_len;
12957
12958       unpack_varlen_hex (reply, &min_insn_len);
12959
12960       return (int) min_insn_len;
12961     }
12962 }
12963
12964 static void
12965 remote_set_trace_buffer_size (struct target_ops *self, LONGEST val)
12966 {
12967   if (packet_support (PACKET_QTBuffer_size) != PACKET_DISABLE)
12968     {
12969       struct remote_state *rs = get_remote_state ();
12970       char *buf = rs->buf;
12971       char *endbuf = rs->buf + get_remote_packet_size ();
12972       enum packet_result result;
12973
12974       gdb_assert (val >= 0 || val == -1);
12975       buf += xsnprintf (buf, endbuf - buf, "QTBuffer:size:");
12976       /* Send -1 as literal "-1" to avoid host size dependency.  */
12977       if (val < 0)
12978         {
12979           *buf++ = '-';
12980           buf += hexnumstr (buf, (ULONGEST) -val);
12981         }
12982       else
12983         buf += hexnumstr (buf, (ULONGEST) val);
12984
12985       putpkt (rs->buf);
12986       remote_get_noisy_reply ();
12987       result = packet_ok (rs->buf,
12988                   &remote_protocol_packets[PACKET_QTBuffer_size]);
12989
12990       if (result != PACKET_OK)
12991         warning (_("Bogus reply from target: %s"), rs->buf);
12992     }
12993 }
12994
12995 static int
12996 remote_set_trace_notes (struct target_ops *self,
12997                         const char *user, const char *notes,
12998                         const char *stop_notes)
12999 {
13000   struct remote_state *rs = get_remote_state ();
13001   char *reply;
13002   char *buf = rs->buf;
13003   char *endbuf = rs->buf + get_remote_packet_size ();
13004   int nbytes;
13005
13006   buf += xsnprintf (buf, endbuf - buf, "QTNotes:");
13007   if (user)
13008     {
13009       buf += xsnprintf (buf, endbuf - buf, "user:");
13010       nbytes = bin2hex ((gdb_byte *) user, buf, strlen (user));
13011       buf += 2 * nbytes;
13012       *buf++ = ';';
13013     }
13014   if (notes)
13015     {
13016       buf += xsnprintf (buf, endbuf - buf, "notes:");
13017       nbytes = bin2hex ((gdb_byte *) notes, buf, strlen (notes));
13018       buf += 2 * nbytes;
13019       *buf++ = ';';
13020     }
13021   if (stop_notes)
13022     {
13023       buf += xsnprintf (buf, endbuf - buf, "tstop:");
13024       nbytes = bin2hex ((gdb_byte *) stop_notes, buf, strlen (stop_notes));
13025       buf += 2 * nbytes;
13026       *buf++ = ';';
13027     }
13028   /* Ensure the buffer is terminated.  */
13029   *buf = '\0';
13030
13031   putpkt (rs->buf);
13032   reply = remote_get_noisy_reply ();
13033   if (*reply == '\0')
13034     return 0;
13035
13036   if (strcmp (reply, "OK") != 0)
13037     error (_("Bogus reply from target: %s"), reply);
13038
13039   return 1;
13040 }
13041
13042 static int
13043 remote_use_agent (struct target_ops *self, int use)
13044 {
13045   if (packet_support (PACKET_QAgent) != PACKET_DISABLE)
13046     {
13047       struct remote_state *rs = get_remote_state ();
13048
13049       /* If the stub supports QAgent.  */
13050       xsnprintf (rs->buf, get_remote_packet_size (), "QAgent:%d", use);
13051       putpkt (rs->buf);
13052       getpkt (&rs->buf, &rs->buf_size, 0);
13053
13054       if (strcmp (rs->buf, "OK") == 0)
13055         {
13056           use_agent = use;
13057           return 1;
13058         }
13059     }
13060
13061   return 0;
13062 }
13063
13064 static int
13065 remote_can_use_agent (struct target_ops *self)
13066 {
13067   return (packet_support (PACKET_QAgent) != PACKET_DISABLE);
13068 }
13069
13070 struct btrace_target_info
13071 {
13072   /* The ptid of the traced thread.  */
13073   ptid_t ptid;
13074
13075   /* The obtained branch trace configuration.  */
13076   struct btrace_config conf;
13077 };
13078
13079 /* Reset our idea of our target's btrace configuration.  */
13080
13081 static void
13082 remote_btrace_reset (void)
13083 {
13084   struct remote_state *rs = get_remote_state ();
13085
13086   memset (&rs->btrace_config, 0, sizeof (rs->btrace_config));
13087 }
13088
13089 /* Check whether the target supports branch tracing.  */
13090
13091 static int
13092 remote_supports_btrace (struct target_ops *self, enum btrace_format format)
13093 {
13094   if (packet_support (PACKET_Qbtrace_off) != PACKET_ENABLE)
13095     return 0;
13096   if (packet_support (PACKET_qXfer_btrace) != PACKET_ENABLE)
13097     return 0;
13098
13099   switch (format)
13100     {
13101       case BTRACE_FORMAT_NONE:
13102         return 0;
13103
13104       case BTRACE_FORMAT_BTS:
13105         return (packet_support (PACKET_Qbtrace_bts) == PACKET_ENABLE);
13106
13107       case BTRACE_FORMAT_PT:
13108         /* The trace is decoded on the host.  Even if our target supports it,
13109            we still need to have libipt to decode the trace.  */
13110 #if defined (HAVE_LIBIPT)
13111         return (packet_support (PACKET_Qbtrace_pt) == PACKET_ENABLE);
13112 #else /* !defined (HAVE_LIBIPT)  */
13113         return 0;
13114 #endif /* !defined (HAVE_LIBIPT)  */
13115     }
13116
13117   internal_error (__FILE__, __LINE__, _("Unknown branch trace format"));
13118 }
13119
13120 /* Synchronize the configuration with the target.  */
13121
13122 static void
13123 btrace_sync_conf (const struct btrace_config *conf)
13124 {
13125   struct packet_config *packet;
13126   struct remote_state *rs;
13127   char *buf, *pos, *endbuf;
13128
13129   rs = get_remote_state ();
13130   buf = rs->buf;
13131   endbuf = buf + get_remote_packet_size ();
13132
13133   packet = &remote_protocol_packets[PACKET_Qbtrace_conf_bts_size];
13134   if (packet_config_support (packet) == PACKET_ENABLE
13135       && conf->bts.size != rs->btrace_config.bts.size)
13136     {
13137       pos = buf;
13138       pos += xsnprintf (pos, endbuf - pos, "%s=0x%x", packet->name,
13139                         conf->bts.size);
13140
13141       putpkt (buf);
13142       getpkt (&buf, &rs->buf_size, 0);
13143
13144       if (packet_ok (buf, packet) == PACKET_ERROR)
13145         {
13146           if (buf[0] == 'E' && buf[1] == '.')
13147             error (_("Failed to configure the BTS buffer size: %s"), buf + 2);
13148           else
13149             error (_("Failed to configure the BTS buffer size."));
13150         }
13151
13152       rs->btrace_config.bts.size = conf->bts.size;
13153     }
13154
13155   packet = &remote_protocol_packets[PACKET_Qbtrace_conf_pt_size];
13156   if (packet_config_support (packet) == PACKET_ENABLE
13157       && conf->pt.size != rs->btrace_config.pt.size)
13158     {
13159       pos = buf;
13160       pos += xsnprintf (pos, endbuf - pos, "%s=0x%x", packet->name,
13161                         conf->pt.size);
13162
13163       putpkt (buf);
13164       getpkt (&buf, &rs->buf_size, 0);
13165
13166       if (packet_ok (buf, packet) == PACKET_ERROR)
13167         {
13168           if (buf[0] == 'E' && buf[1] == '.')
13169             error (_("Failed to configure the trace buffer size: %s"), buf + 2);
13170           else
13171             error (_("Failed to configure the trace buffer size."));
13172         }
13173
13174       rs->btrace_config.pt.size = conf->pt.size;
13175     }
13176 }
13177
13178 /* Read the current thread's btrace configuration from the target and
13179    store it into CONF.  */
13180
13181 static void
13182 btrace_read_config (struct btrace_config *conf)
13183 {
13184   gdb::unique_xmalloc_ptr<char> xml
13185     = target_read_stralloc (&current_target, TARGET_OBJECT_BTRACE_CONF, "");
13186   if (xml != NULL)
13187     parse_xml_btrace_conf (conf, xml.get ());
13188 }
13189
13190 /* Maybe reopen target btrace.  */
13191
13192 static void
13193 remote_btrace_maybe_reopen (void)
13194 {
13195   struct remote_state *rs = get_remote_state ();
13196   struct thread_info *tp;
13197   int btrace_target_pushed = 0;
13198   int warned = 0;
13199
13200   scoped_restore_current_thread restore_thread;
13201
13202   ALL_NON_EXITED_THREADS (tp)
13203     {
13204       set_general_thread (tp->ptid);
13205
13206       memset (&rs->btrace_config, 0x00, sizeof (struct btrace_config));
13207       btrace_read_config (&rs->btrace_config);
13208
13209       if (rs->btrace_config.format == BTRACE_FORMAT_NONE)
13210         continue;
13211
13212 #if !defined (HAVE_LIBIPT)
13213       if (rs->btrace_config.format == BTRACE_FORMAT_PT)
13214         {
13215           if (!warned)
13216             {
13217               warned = 1;
13218               warning (_("GDB does not support Intel Processor Trace. "
13219                          "\"record\" will not work in this session."));
13220             }
13221
13222           continue;
13223         }
13224 #endif /* !defined (HAVE_LIBIPT) */
13225
13226       /* Push target, once, but before anything else happens.  This way our
13227          changes to the threads will be cleaned up by unpushing the target
13228          in case btrace_read_config () throws.  */
13229       if (!btrace_target_pushed)
13230         {
13231           btrace_target_pushed = 1;
13232           record_btrace_push_target ();
13233           printf_filtered (_("Target is recording using %s.\n"),
13234                            btrace_format_string (rs->btrace_config.format));
13235         }
13236
13237       tp->btrace.target = XCNEW (struct btrace_target_info);
13238       tp->btrace.target->ptid = tp->ptid;
13239       tp->btrace.target->conf = rs->btrace_config;
13240     }
13241 }
13242
13243 /* Enable branch tracing.  */
13244
13245 static struct btrace_target_info *
13246 remote_enable_btrace (struct target_ops *self, ptid_t ptid,
13247                       const struct btrace_config *conf)
13248 {
13249   struct btrace_target_info *tinfo = NULL;
13250   struct packet_config *packet = NULL;
13251   struct remote_state *rs = get_remote_state ();
13252   char *buf = rs->buf;
13253   char *endbuf = rs->buf + get_remote_packet_size ();
13254
13255   switch (conf->format)
13256     {
13257       case BTRACE_FORMAT_BTS:
13258         packet = &remote_protocol_packets[PACKET_Qbtrace_bts];
13259         break;
13260
13261       case BTRACE_FORMAT_PT:
13262         packet = &remote_protocol_packets[PACKET_Qbtrace_pt];
13263         break;
13264     }
13265
13266   if (packet == NULL || packet_config_support (packet) != PACKET_ENABLE)
13267     error (_("Target does not support branch tracing."));
13268
13269   btrace_sync_conf (conf);
13270
13271   set_general_thread (ptid);
13272
13273   buf += xsnprintf (buf, endbuf - buf, "%s", packet->name);
13274   putpkt (rs->buf);
13275   getpkt (&rs->buf, &rs->buf_size, 0);
13276
13277   if (packet_ok (rs->buf, packet) == PACKET_ERROR)
13278     {
13279       if (rs->buf[0] == 'E' && rs->buf[1] == '.')
13280         error (_("Could not enable branch tracing for %s: %s"),
13281                target_pid_to_str (ptid), rs->buf + 2);
13282       else
13283         error (_("Could not enable branch tracing for %s."),
13284                target_pid_to_str (ptid));
13285     }
13286
13287   tinfo = XCNEW (struct btrace_target_info);
13288   tinfo->ptid = ptid;
13289
13290   /* If we fail to read the configuration, we lose some information, but the
13291      tracing itself is not impacted.  */
13292   TRY
13293     {
13294       btrace_read_config (&tinfo->conf);
13295     }
13296   CATCH (err, RETURN_MASK_ERROR)
13297     {
13298       if (err.message != NULL)
13299         warning ("%s", err.message);
13300     }
13301   END_CATCH
13302
13303   return tinfo;
13304 }
13305
13306 /* Disable branch tracing.  */
13307
13308 static void
13309 remote_disable_btrace (struct target_ops *self,
13310                        struct btrace_target_info *tinfo)
13311 {
13312   struct packet_config *packet = &remote_protocol_packets[PACKET_Qbtrace_off];
13313   struct remote_state *rs = get_remote_state ();
13314   char *buf = rs->buf;
13315   char *endbuf = rs->buf + get_remote_packet_size ();
13316
13317   if (packet_config_support (packet) != PACKET_ENABLE)
13318     error (_("Target does not support branch tracing."));
13319
13320   set_general_thread (tinfo->ptid);
13321
13322   buf += xsnprintf (buf, endbuf - buf, "%s", packet->name);
13323   putpkt (rs->buf);
13324   getpkt (&rs->buf, &rs->buf_size, 0);
13325
13326   if (packet_ok (rs->buf, packet) == PACKET_ERROR)
13327     {
13328       if (rs->buf[0] == 'E' && rs->buf[1] == '.')
13329         error (_("Could not disable branch tracing for %s: %s"),
13330                target_pid_to_str (tinfo->ptid), rs->buf + 2);
13331       else
13332         error (_("Could not disable branch tracing for %s."),
13333                target_pid_to_str (tinfo->ptid));
13334     }
13335
13336   xfree (tinfo);
13337 }
13338
13339 /* Teardown branch tracing.  */
13340
13341 static void
13342 remote_teardown_btrace (struct target_ops *self,
13343                         struct btrace_target_info *tinfo)
13344 {
13345   /* We must not talk to the target during teardown.  */
13346   xfree (tinfo);
13347 }
13348
13349 /* Read the branch trace.  */
13350
13351 static enum btrace_error
13352 remote_read_btrace (struct target_ops *self,
13353                     struct btrace_data *btrace,
13354                     struct btrace_target_info *tinfo,
13355                     enum btrace_read_type type)
13356 {
13357   struct packet_config *packet = &remote_protocol_packets[PACKET_qXfer_btrace];
13358   const char *annex;
13359
13360   if (packet_config_support (packet) != PACKET_ENABLE)
13361     error (_("Target does not support branch tracing."));
13362
13363 #if !defined(HAVE_LIBEXPAT)
13364   error (_("Cannot process branch tracing result. XML parsing not supported."));
13365 #endif
13366
13367   switch (type)
13368     {
13369     case BTRACE_READ_ALL:
13370       annex = "all";
13371       break;
13372     case BTRACE_READ_NEW:
13373       annex = "new";
13374       break;
13375     case BTRACE_READ_DELTA:
13376       annex = "delta";
13377       break;
13378     default:
13379       internal_error (__FILE__, __LINE__,
13380                       _("Bad branch tracing read type: %u."),
13381                       (unsigned int) type);
13382     }
13383
13384   gdb::unique_xmalloc_ptr<char> xml
13385     = target_read_stralloc (&current_target, TARGET_OBJECT_BTRACE, annex);
13386   if (xml == NULL)
13387     return BTRACE_ERR_UNKNOWN;
13388
13389   parse_xml_btrace (btrace, xml.get ());
13390
13391   return BTRACE_ERR_NONE;
13392 }
13393
13394 static const struct btrace_config *
13395 remote_btrace_conf (struct target_ops *self,
13396                     const struct btrace_target_info *tinfo)
13397 {
13398   return &tinfo->conf;
13399 }
13400
13401 static int
13402 remote_augmented_libraries_svr4_read (struct target_ops *self)
13403 {
13404   return (packet_support (PACKET_augmented_libraries_svr4_read_feature)
13405           == PACKET_ENABLE);
13406 }
13407
13408 /* Implementation of to_load.  */
13409
13410 static void
13411 remote_load (struct target_ops *self, const char *name, int from_tty)
13412 {
13413   generic_load (name, from_tty);
13414 }
13415
13416 /* Accepts an integer PID; returns a string representing a file that
13417    can be opened on the remote side to get the symbols for the child
13418    process.  Returns NULL if the operation is not supported.  */
13419
13420 static char *
13421 remote_pid_to_exec_file (struct target_ops *self, int pid)
13422 {
13423   static gdb::unique_xmalloc_ptr<char> filename;
13424   struct inferior *inf;
13425   char *annex = NULL;
13426
13427   if (packet_support (PACKET_qXfer_exec_file) != PACKET_ENABLE)
13428     return NULL;
13429
13430   inf = find_inferior_pid (pid);
13431   if (inf == NULL)
13432     internal_error (__FILE__, __LINE__,
13433                     _("not currently attached to process %d"), pid);
13434
13435   if (!inf->fake_pid_p)
13436     {
13437       const int annex_size = 9;
13438
13439       annex = (char *) alloca (annex_size);
13440       xsnprintf (annex, annex_size, "%x", pid);
13441     }
13442
13443   filename = target_read_stralloc (&current_target,
13444                                    TARGET_OBJECT_EXEC_FILE, annex);
13445
13446   return filename.get ();
13447 }
13448
13449 /* Implement the to_can_do_single_step target_ops method.  */
13450
13451 static int
13452 remote_can_do_single_step (struct target_ops *ops)
13453 {
13454   /* We can only tell whether target supports single step or not by
13455      supported s and S vCont actions if the stub supports vContSupported
13456      feature.  If the stub doesn't support vContSupported feature,
13457      we have conservatively to think target doesn't supports single
13458      step.  */
13459   if (packet_support (PACKET_vContSupported) == PACKET_ENABLE)
13460     {
13461       struct remote_state *rs = get_remote_state ();
13462
13463       if (packet_support (PACKET_vCont) == PACKET_SUPPORT_UNKNOWN)
13464         remote_vcont_probe (rs);
13465
13466       return rs->supports_vCont.s && rs->supports_vCont.S;
13467     }
13468   else
13469     return 0;
13470 }
13471
13472 /* Implementation of the to_execution_direction method for the remote
13473    target.  */
13474
13475 static enum exec_direction_kind
13476 remote_execution_direction (struct target_ops *self)
13477 {
13478   struct remote_state *rs = get_remote_state ();
13479
13480   return rs->last_resume_exec_dir;
13481 }
13482
13483 /* Return pointer to the thread_info struct which corresponds to
13484    THREAD_HANDLE (having length HANDLE_LEN).  */
13485
13486 static struct thread_info *
13487 remote_thread_handle_to_thread_info (struct target_ops *ops,
13488                                      const gdb_byte *thread_handle,
13489                                      int handle_len,
13490                                      struct inferior *inf)
13491 {
13492   struct thread_info *tp;
13493
13494   ALL_NON_EXITED_THREADS (tp)
13495     {
13496       remote_thread_info *priv = get_remote_thread_info (tp);
13497
13498       if (tp->inf == inf && priv != NULL)
13499         {
13500           if (handle_len != priv->thread_handle.size ())
13501             error (_("Thread handle size mismatch: %d vs %zu (from remote)"),
13502                    handle_len, priv->thread_handle.size ());
13503           if (memcmp (thread_handle, priv->thread_handle.data (),
13504                       handle_len) == 0)
13505             return tp;
13506         }
13507     }
13508
13509   return NULL;
13510 }
13511
13512 static void
13513 init_remote_ops (void)
13514 {
13515   remote_ops.to_shortname = "remote";
13516   remote_ops.to_longname = "Remote serial target in gdb-specific protocol";
13517   remote_ops.to_doc =
13518     "Use a remote computer via a serial line, using a gdb-specific protocol.\n\
13519 Specify the serial device it is connected to\n\
13520 (e.g. /dev/ttyS0, /dev/ttya, COM1, etc.).";
13521   remote_ops.to_open = remote_open;
13522   remote_ops.to_close = remote_close;
13523   remote_ops.to_detach = remote_detach;
13524   remote_ops.to_disconnect = remote_disconnect;
13525   remote_ops.to_resume = remote_resume;
13526   remote_ops.to_commit_resume = remote_commit_resume;
13527   remote_ops.to_wait = remote_wait;
13528   remote_ops.to_fetch_registers = remote_fetch_registers;
13529   remote_ops.to_store_registers = remote_store_registers;
13530   remote_ops.to_prepare_to_store = remote_prepare_to_store;
13531   remote_ops.to_files_info = remote_files_info;
13532   remote_ops.to_insert_breakpoint = remote_insert_breakpoint;
13533   remote_ops.to_remove_breakpoint = remote_remove_breakpoint;
13534   remote_ops.to_stopped_by_sw_breakpoint = remote_stopped_by_sw_breakpoint;
13535   remote_ops.to_supports_stopped_by_sw_breakpoint = remote_supports_stopped_by_sw_breakpoint;
13536   remote_ops.to_stopped_by_hw_breakpoint = remote_stopped_by_hw_breakpoint;
13537   remote_ops.to_supports_stopped_by_hw_breakpoint = remote_supports_stopped_by_hw_breakpoint;
13538   remote_ops.to_stopped_by_watchpoint = remote_stopped_by_watchpoint;
13539   remote_ops.to_stopped_data_address = remote_stopped_data_address;
13540   remote_ops.to_watchpoint_addr_within_range =
13541     remote_watchpoint_addr_within_range;
13542   remote_ops.to_can_use_hw_breakpoint = remote_check_watch_resources;
13543   remote_ops.to_insert_hw_breakpoint = remote_insert_hw_breakpoint;
13544   remote_ops.to_remove_hw_breakpoint = remote_remove_hw_breakpoint;
13545   remote_ops.to_region_ok_for_hw_watchpoint
13546      = remote_region_ok_for_hw_watchpoint;
13547   remote_ops.to_insert_watchpoint = remote_insert_watchpoint;
13548   remote_ops.to_remove_watchpoint = remote_remove_watchpoint;
13549   remote_ops.to_kill = remote_kill;
13550   remote_ops.to_load = remote_load;
13551   remote_ops.to_mourn_inferior = remote_mourn;
13552   remote_ops.to_pass_signals = remote_pass_signals;
13553   remote_ops.to_set_syscall_catchpoint = remote_set_syscall_catchpoint;
13554   remote_ops.to_program_signals = remote_program_signals;
13555   remote_ops.to_thread_alive = remote_thread_alive;
13556   remote_ops.to_thread_name = remote_thread_name;
13557   remote_ops.to_update_thread_list = remote_update_thread_list;
13558   remote_ops.to_pid_to_str = remote_pid_to_str;
13559   remote_ops.to_extra_thread_info = remote_threads_extra_info;
13560   remote_ops.to_get_ada_task_ptid = remote_get_ada_task_ptid;
13561   remote_ops.to_stop = remote_stop;
13562   remote_ops.to_interrupt = remote_interrupt;
13563   remote_ops.to_pass_ctrlc = remote_pass_ctrlc;
13564   remote_ops.to_xfer_partial = remote_xfer_partial;
13565   remote_ops.to_get_memory_xfer_limit = remote_get_memory_xfer_limit;
13566   remote_ops.to_rcmd = remote_rcmd;
13567   remote_ops.to_pid_to_exec_file = remote_pid_to_exec_file;
13568   remote_ops.to_log_command = serial_log_command;
13569   remote_ops.to_get_thread_local_address = remote_get_thread_local_address;
13570   remote_ops.to_stratum = process_stratum;
13571   remote_ops.to_has_all_memory = default_child_has_all_memory;
13572   remote_ops.to_has_memory = default_child_has_memory;
13573   remote_ops.to_has_stack = default_child_has_stack;
13574   remote_ops.to_has_registers = default_child_has_registers;
13575   remote_ops.to_has_execution = default_child_has_execution;
13576   remote_ops.to_has_thread_control = tc_schedlock;    /* can lock scheduler */
13577   remote_ops.to_can_execute_reverse = remote_can_execute_reverse;
13578   remote_ops.to_magic = OPS_MAGIC;
13579   remote_ops.to_memory_map = remote_memory_map;
13580   remote_ops.to_flash_erase = remote_flash_erase;
13581   remote_ops.to_flash_done = remote_flash_done;
13582   remote_ops.to_read_description = remote_read_description;
13583   remote_ops.to_search_memory = remote_search_memory;
13584   remote_ops.to_can_async_p = remote_can_async_p;
13585   remote_ops.to_is_async_p = remote_is_async_p;
13586   remote_ops.to_async = remote_async;
13587   remote_ops.to_thread_events = remote_thread_events;
13588   remote_ops.to_can_do_single_step = remote_can_do_single_step;
13589   remote_ops.to_terminal_inferior = remote_terminal_inferior;
13590   remote_ops.to_terminal_ours = remote_terminal_ours;
13591   remote_ops.to_supports_non_stop = remote_supports_non_stop;
13592   remote_ops.to_supports_multi_process = remote_supports_multi_process;
13593   remote_ops.to_supports_disable_randomization
13594     = remote_supports_disable_randomization;
13595   remote_ops.to_filesystem_is_local = remote_filesystem_is_local;
13596   remote_ops.to_fileio_open = remote_hostio_open;
13597   remote_ops.to_fileio_pwrite = remote_hostio_pwrite;
13598   remote_ops.to_fileio_pread = remote_hostio_pread;
13599   remote_ops.to_fileio_fstat = remote_hostio_fstat;
13600   remote_ops.to_fileio_close = remote_hostio_close;
13601   remote_ops.to_fileio_unlink = remote_hostio_unlink;
13602   remote_ops.to_fileio_readlink = remote_hostio_readlink;
13603   remote_ops.to_supports_enable_disable_tracepoint = remote_supports_enable_disable_tracepoint;
13604   remote_ops.to_supports_string_tracing = remote_supports_string_tracing;
13605   remote_ops.to_supports_evaluation_of_breakpoint_conditions = remote_supports_cond_breakpoints;
13606   remote_ops.to_can_run_breakpoint_commands = remote_can_run_breakpoint_commands;
13607   remote_ops.to_trace_init = remote_trace_init;
13608   remote_ops.to_download_tracepoint = remote_download_tracepoint;
13609   remote_ops.to_can_download_tracepoint = remote_can_download_tracepoint;
13610   remote_ops.to_download_trace_state_variable
13611     = remote_download_trace_state_variable;
13612   remote_ops.to_enable_tracepoint = remote_enable_tracepoint;
13613   remote_ops.to_disable_tracepoint = remote_disable_tracepoint;
13614   remote_ops.to_trace_set_readonly_regions = remote_trace_set_readonly_regions;
13615   remote_ops.to_trace_start = remote_trace_start;
13616   remote_ops.to_get_trace_status = remote_get_trace_status;
13617   remote_ops.to_get_tracepoint_status = remote_get_tracepoint_status;
13618   remote_ops.to_trace_stop = remote_trace_stop;
13619   remote_ops.to_trace_find = remote_trace_find;
13620   remote_ops.to_get_trace_state_variable_value
13621     = remote_get_trace_state_variable_value;
13622   remote_ops.to_save_trace_data = remote_save_trace_data;
13623   remote_ops.to_upload_tracepoints = remote_upload_tracepoints;
13624   remote_ops.to_upload_trace_state_variables
13625     = remote_upload_trace_state_variables;
13626   remote_ops.to_get_raw_trace_data = remote_get_raw_trace_data;
13627   remote_ops.to_get_min_fast_tracepoint_insn_len = remote_get_min_fast_tracepoint_insn_len;
13628   remote_ops.to_set_disconnected_tracing = remote_set_disconnected_tracing;
13629   remote_ops.to_set_circular_trace_buffer = remote_set_circular_trace_buffer;
13630   remote_ops.to_set_trace_buffer_size = remote_set_trace_buffer_size;
13631   remote_ops.to_set_trace_notes = remote_set_trace_notes;
13632   remote_ops.to_core_of_thread = remote_core_of_thread;
13633   remote_ops.to_verify_memory = remote_verify_memory;
13634   remote_ops.to_get_tib_address = remote_get_tib_address;
13635   remote_ops.to_set_permissions = remote_set_permissions;
13636   remote_ops.to_static_tracepoint_marker_at
13637     = remote_static_tracepoint_marker_at;
13638   remote_ops.to_static_tracepoint_markers_by_strid
13639     = remote_static_tracepoint_markers_by_strid;
13640   remote_ops.to_traceframe_info = remote_traceframe_info;
13641   remote_ops.to_use_agent = remote_use_agent;
13642   remote_ops.to_can_use_agent = remote_can_use_agent;
13643   remote_ops.to_supports_btrace = remote_supports_btrace;
13644   remote_ops.to_enable_btrace = remote_enable_btrace;
13645   remote_ops.to_disable_btrace = remote_disable_btrace;
13646   remote_ops.to_teardown_btrace = remote_teardown_btrace;
13647   remote_ops.to_read_btrace = remote_read_btrace;
13648   remote_ops.to_btrace_conf = remote_btrace_conf;
13649   remote_ops.to_augmented_libraries_svr4_read =
13650     remote_augmented_libraries_svr4_read;
13651   remote_ops.to_follow_fork = remote_follow_fork;
13652   remote_ops.to_follow_exec = remote_follow_exec;
13653   remote_ops.to_insert_fork_catchpoint = remote_insert_fork_catchpoint;
13654   remote_ops.to_remove_fork_catchpoint = remote_remove_fork_catchpoint;
13655   remote_ops.to_insert_vfork_catchpoint = remote_insert_vfork_catchpoint;
13656   remote_ops.to_remove_vfork_catchpoint = remote_remove_vfork_catchpoint;
13657   remote_ops.to_insert_exec_catchpoint = remote_insert_exec_catchpoint;
13658   remote_ops.to_remove_exec_catchpoint = remote_remove_exec_catchpoint;
13659   remote_ops.to_execution_direction = remote_execution_direction;
13660   remote_ops.to_thread_handle_to_thread_info =
13661     remote_thread_handle_to_thread_info;
13662 }
13663
13664 /* Set up the extended remote vector by making a copy of the standard
13665    remote vector and adding to it.  */
13666
13667 static void
13668 init_extended_remote_ops (void)
13669 {
13670   extended_remote_ops = remote_ops;
13671
13672   extended_remote_ops.to_shortname = "extended-remote";
13673   extended_remote_ops.to_longname =
13674     "Extended remote serial target in gdb-specific protocol";
13675   extended_remote_ops.to_doc =
13676     "Use a remote computer via a serial line, using a gdb-specific protocol.\n\
13677 Specify the serial device it is connected to (e.g. /dev/ttya).";
13678   extended_remote_ops.to_open = extended_remote_open;
13679   extended_remote_ops.to_create_inferior = extended_remote_create_inferior;
13680   extended_remote_ops.to_detach = extended_remote_detach;
13681   extended_remote_ops.to_attach = extended_remote_attach;
13682   extended_remote_ops.to_post_attach = extended_remote_post_attach;
13683   extended_remote_ops.to_supports_disable_randomization
13684     = extended_remote_supports_disable_randomization;
13685 }
13686
13687 static int
13688 remote_can_async_p (struct target_ops *ops)
13689 {
13690   struct remote_state *rs = get_remote_state ();
13691
13692   /* We don't go async if the user has explicitly prevented it with the
13693      "maint set target-async" command.  */
13694   if (!target_async_permitted)
13695     return 0;
13696
13697   /* We're async whenever the serial device is.  */
13698   return serial_can_async_p (rs->remote_desc);
13699 }
13700
13701 static int
13702 remote_is_async_p (struct target_ops *ops)
13703 {
13704   struct remote_state *rs = get_remote_state ();
13705
13706   if (!target_async_permitted)
13707     /* We only enable async when the user specifically asks for it.  */
13708     return 0;
13709
13710   /* We're async whenever the serial device is.  */
13711   return serial_is_async_p (rs->remote_desc);
13712 }
13713
13714 /* Pass the SERIAL event on and up to the client.  One day this code
13715    will be able to delay notifying the client of an event until the
13716    point where an entire packet has been received.  */
13717
13718 static serial_event_ftype remote_async_serial_handler;
13719
13720 static void
13721 remote_async_serial_handler (struct serial *scb, void *context)
13722 {
13723   /* Don't propogate error information up to the client.  Instead let
13724      the client find out about the error by querying the target.  */
13725   inferior_event_handler (INF_REG_EVENT, NULL);
13726 }
13727
13728 static void
13729 remote_async_inferior_event_handler (gdb_client_data data)
13730 {
13731   inferior_event_handler (INF_REG_EVENT, NULL);
13732 }
13733
13734 static void
13735 remote_async (struct target_ops *ops, int enable)
13736 {
13737   struct remote_state *rs = get_remote_state ();
13738
13739   if (enable)
13740     {
13741       serial_async (rs->remote_desc, remote_async_serial_handler, rs);
13742
13743       /* If there are pending events in the stop reply queue tell the
13744          event loop to process them.  */
13745       if (!QUEUE_is_empty (stop_reply_p, stop_reply_queue))
13746         mark_async_event_handler (remote_async_inferior_event_token);
13747       /* For simplicity, below we clear the pending events token
13748          without remembering whether it is marked, so here we always
13749          mark it.  If there's actually no pending notification to
13750          process, this ends up being a no-op (other than a spurious
13751          event-loop wakeup).  */
13752       if (target_is_non_stop_p ())
13753         mark_async_event_handler (rs->notif_state->get_pending_events_token);
13754     }
13755   else
13756     {
13757       serial_async (rs->remote_desc, NULL, NULL);
13758       /* If the core is disabling async, it doesn't want to be
13759          disturbed with target events.  Clear all async event sources
13760          too.  */
13761       clear_async_event_handler (remote_async_inferior_event_token);
13762       if (target_is_non_stop_p ())
13763         clear_async_event_handler (rs->notif_state->get_pending_events_token);
13764     }
13765 }
13766
13767 /* Implementation of the to_thread_events method.  */
13768
13769 static void
13770 remote_thread_events (struct target_ops *ops, int enable)
13771 {
13772   struct remote_state *rs = get_remote_state ();
13773   size_t size = get_remote_packet_size ();
13774
13775   if (packet_support (PACKET_QThreadEvents) == PACKET_DISABLE)
13776     return;
13777
13778   xsnprintf (rs->buf, size, "QThreadEvents:%x", enable ? 1 : 0);
13779   putpkt (rs->buf);
13780   getpkt (&rs->buf, &rs->buf_size, 0);
13781
13782   switch (packet_ok (rs->buf,
13783                      &remote_protocol_packets[PACKET_QThreadEvents]))
13784     {
13785     case PACKET_OK:
13786       if (strcmp (rs->buf, "OK") != 0)
13787         error (_("Remote refused setting thread events: %s"), rs->buf);
13788       break;
13789     case PACKET_ERROR:
13790       warning (_("Remote failure reply: %s"), rs->buf);
13791       break;
13792     case PACKET_UNKNOWN:
13793       break;
13794     }
13795 }
13796
13797 static void
13798 set_remote_cmd (const char *args, int from_tty)
13799 {
13800   help_list (remote_set_cmdlist, "set remote ", all_commands, gdb_stdout);
13801 }
13802
13803 static void
13804 show_remote_cmd (const char *args, int from_tty)
13805 {
13806   /* We can't just use cmd_show_list here, because we want to skip
13807      the redundant "show remote Z-packet" and the legacy aliases.  */
13808   struct cmd_list_element *list = remote_show_cmdlist;
13809   struct ui_out *uiout = current_uiout;
13810
13811   ui_out_emit_tuple tuple_emitter (uiout, "showlist");
13812   for (; list != NULL; list = list->next)
13813     if (strcmp (list->name, "Z-packet") == 0)
13814       continue;
13815     else if (list->type == not_set_cmd)
13816       /* Alias commands are exactly like the original, except they
13817          don't have the normal type.  */
13818       continue;
13819     else
13820       {
13821         ui_out_emit_tuple option_emitter (uiout, "option");
13822
13823         uiout->field_string ("name", list->name);
13824         uiout->text (":  ");
13825         if (list->type == show_cmd)
13826           do_show_command (NULL, from_tty, list);
13827         else
13828           cmd_func (list, NULL, from_tty);
13829       }
13830 }
13831
13832
13833 /* Function to be called whenever a new objfile (shlib) is detected.  */
13834 static void
13835 remote_new_objfile (struct objfile *objfile)
13836 {
13837   struct remote_state *rs = get_remote_state ();
13838
13839   if (rs->remote_desc != 0)             /* Have a remote connection.  */
13840     remote_check_symbols ();
13841 }
13842
13843 /* Pull all the tracepoints defined on the target and create local
13844    data structures representing them.  We don't want to create real
13845    tracepoints yet, we don't want to mess up the user's existing
13846    collection.  */
13847   
13848 static int
13849 remote_upload_tracepoints (struct target_ops *self, struct uploaded_tp **utpp)
13850 {
13851   struct remote_state *rs = get_remote_state ();
13852   char *p;
13853
13854   /* Ask for a first packet of tracepoint definition.  */
13855   putpkt ("qTfP");
13856   getpkt (&rs->buf, &rs->buf_size, 0);
13857   p = rs->buf;
13858   while (*p && *p != 'l')
13859     {
13860       parse_tracepoint_definition (p, utpp);
13861       /* Ask for another packet of tracepoint definition.  */
13862       putpkt ("qTsP");
13863       getpkt (&rs->buf, &rs->buf_size, 0);
13864       p = rs->buf;
13865     }
13866   return 0;
13867 }
13868
13869 static int
13870 remote_upload_trace_state_variables (struct target_ops *self,
13871                                      struct uploaded_tsv **utsvp)
13872 {
13873   struct remote_state *rs = get_remote_state ();
13874   char *p;
13875
13876   /* Ask for a first packet of variable definition.  */
13877   putpkt ("qTfV");
13878   getpkt (&rs->buf, &rs->buf_size, 0);
13879   p = rs->buf;
13880   while (*p && *p != 'l')
13881     {
13882       parse_tsv_definition (p, utsvp);
13883       /* Ask for another packet of variable definition.  */
13884       putpkt ("qTsV");
13885       getpkt (&rs->buf, &rs->buf_size, 0);
13886       p = rs->buf;
13887     }
13888   return 0;
13889 }
13890
13891 /* The "set/show range-stepping" show hook.  */
13892
13893 static void
13894 show_range_stepping (struct ui_file *file, int from_tty,
13895                      struct cmd_list_element *c,
13896                      const char *value)
13897 {
13898   fprintf_filtered (file,
13899                     _("Debugger's willingness to use range stepping "
13900                       "is %s.\n"), value);
13901 }
13902
13903 /* The "set/show range-stepping" set hook.  */
13904
13905 static void
13906 set_range_stepping (const char *ignore_args, int from_tty,
13907                     struct cmd_list_element *c)
13908 {
13909   struct remote_state *rs = get_remote_state ();
13910
13911   /* Whene enabling, check whether range stepping is actually
13912      supported by the target, and warn if not.  */
13913   if (use_range_stepping)
13914     {
13915       if (rs->remote_desc != NULL)
13916         {
13917           if (packet_support (PACKET_vCont) == PACKET_SUPPORT_UNKNOWN)
13918             remote_vcont_probe (rs);
13919
13920           if (packet_support (PACKET_vCont) == PACKET_ENABLE
13921               && rs->supports_vCont.r)
13922             return;
13923         }
13924
13925       warning (_("Range stepping is not supported by the current target"));
13926     }
13927 }
13928
13929 void
13930 _initialize_remote (void)
13931 {
13932   struct cmd_list_element *cmd;
13933   const char *cmd_name;
13934
13935   /* architecture specific data */
13936   remote_gdbarch_data_handle =
13937     gdbarch_data_register_post_init (init_remote_state);
13938   remote_g_packet_data_handle =
13939     gdbarch_data_register_pre_init (remote_g_packet_data_init);
13940
13941   remote_pspace_data
13942     = register_program_space_data_with_cleanup (NULL,
13943                                                 remote_pspace_data_cleanup);
13944
13945   /* Initialize the per-target state.  At the moment there is only one
13946      of these, not one per target.  Only one target is active at a
13947      time.  */
13948   remote_state = new_remote_state ();
13949
13950   init_remote_ops ();
13951   add_target (&remote_ops);
13952
13953   init_extended_remote_ops ();
13954   add_target (&extended_remote_ops);
13955
13956   /* Hook into new objfile notification.  */
13957   observer_attach_new_objfile (remote_new_objfile);
13958   /* We're no longer interested in notification events of an inferior
13959      when it exits.  */
13960   observer_attach_inferior_exit (discard_pending_stop_replies);
13961
13962 #if 0
13963   init_remote_threadtests ();
13964 #endif
13965
13966   stop_reply_queue = QUEUE_alloc (stop_reply_p, stop_reply_xfree);
13967   /* set/show remote ...  */
13968
13969   add_prefix_cmd ("remote", class_maintenance, set_remote_cmd, _("\
13970 Remote protocol specific variables\n\
13971 Configure various remote-protocol specific variables such as\n\
13972 the packets being used"),
13973                   &remote_set_cmdlist, "set remote ",
13974                   0 /* allow-unknown */, &setlist);
13975   add_prefix_cmd ("remote", class_maintenance, show_remote_cmd, _("\
13976 Remote protocol specific variables\n\
13977 Configure various remote-protocol specific variables such as\n\
13978 the packets being used"),
13979                   &remote_show_cmdlist, "show remote ",
13980                   0 /* allow-unknown */, &showlist);
13981
13982   add_cmd ("compare-sections", class_obscure, compare_sections_command, _("\
13983 Compare section data on target to the exec file.\n\
13984 Argument is a single section name (default: all loaded sections).\n\
13985 To compare only read-only loaded sections, specify the -r option."),
13986            &cmdlist);
13987
13988   add_cmd ("packet", class_maintenance, packet_command, _("\
13989 Send an arbitrary packet to a remote target.\n\
13990    maintenance packet TEXT\n\
13991 If GDB is talking to an inferior via the GDB serial protocol, then\n\
13992 this command sends the string TEXT to the inferior, and displays the\n\
13993 response packet.  GDB supplies the initial `$' character, and the\n\
13994 terminating `#' character and checksum."),
13995            &maintenancelist);
13996
13997   add_setshow_boolean_cmd ("remotebreak", no_class, &remote_break, _("\
13998 Set whether to send break if interrupted."), _("\
13999 Show whether to send break if interrupted."), _("\
14000 If set, a break, instead of a cntrl-c, is sent to the remote target."),
14001                            set_remotebreak, show_remotebreak,
14002                            &setlist, &showlist);
14003   cmd_name = "remotebreak";
14004   cmd = lookup_cmd (&cmd_name, setlist, "", -1, 1);
14005   deprecate_cmd (cmd, "set remote interrupt-sequence");
14006   cmd_name = "remotebreak"; /* needed because lookup_cmd updates the pointer */
14007   cmd = lookup_cmd (&cmd_name, showlist, "", -1, 1);
14008   deprecate_cmd (cmd, "show remote interrupt-sequence");
14009
14010   add_setshow_enum_cmd ("interrupt-sequence", class_support,
14011                         interrupt_sequence_modes, &interrupt_sequence_mode,
14012                         _("\
14013 Set interrupt sequence to remote target."), _("\
14014 Show interrupt sequence to remote target."), _("\
14015 Valid value is \"Ctrl-C\", \"BREAK\" or \"BREAK-g\". The default is \"Ctrl-C\"."),
14016                         NULL, show_interrupt_sequence,
14017                         &remote_set_cmdlist,
14018                         &remote_show_cmdlist);
14019
14020   add_setshow_boolean_cmd ("interrupt-on-connect", class_support,
14021                            &interrupt_on_connect, _("\
14022 Set whether interrupt-sequence is sent to remote target when gdb connects to."), _("            \
14023 Show whether interrupt-sequence is sent to remote target when gdb connects to."), _("           \
14024 If set, interrupt sequence is sent to remote target."),
14025                            NULL, NULL,
14026                            &remote_set_cmdlist, &remote_show_cmdlist);
14027
14028   /* Install commands for configuring memory read/write packets.  */
14029
14030   add_cmd ("remotewritesize", no_class, set_memory_write_packet_size, _("\
14031 Set the maximum number of bytes per memory write packet (deprecated)."),
14032            &setlist);
14033   add_cmd ("remotewritesize", no_class, show_memory_write_packet_size, _("\
14034 Show the maximum number of bytes per memory write packet (deprecated)."),
14035            &showlist);
14036   add_cmd ("memory-write-packet-size", no_class,
14037            set_memory_write_packet_size, _("\
14038 Set the maximum number of bytes per memory-write packet.\n\
14039 Specify the number of bytes in a packet or 0 (zero) for the\n\
14040 default packet size.  The actual limit is further reduced\n\
14041 dependent on the target.  Specify ``fixed'' to disable the\n\
14042 further restriction and ``limit'' to enable that restriction."),
14043            &remote_set_cmdlist);
14044   add_cmd ("memory-read-packet-size", no_class,
14045            set_memory_read_packet_size, _("\
14046 Set the maximum number of bytes per memory-read packet.\n\
14047 Specify the number of bytes in a packet or 0 (zero) for the\n\
14048 default packet size.  The actual limit is further reduced\n\
14049 dependent on the target.  Specify ``fixed'' to disable the\n\
14050 further restriction and ``limit'' to enable that restriction."),
14051            &remote_set_cmdlist);
14052   add_cmd ("memory-write-packet-size", no_class,
14053            show_memory_write_packet_size,
14054            _("Show the maximum number of bytes per memory-write packet."),
14055            &remote_show_cmdlist);
14056   add_cmd ("memory-read-packet-size", no_class,
14057            show_memory_read_packet_size,
14058            _("Show the maximum number of bytes per memory-read packet."),
14059            &remote_show_cmdlist);
14060
14061   add_setshow_zinteger_cmd ("hardware-watchpoint-limit", no_class,
14062                             &remote_hw_watchpoint_limit, _("\
14063 Set the maximum number of target hardware watchpoints."), _("\
14064 Show the maximum number of target hardware watchpoints."), _("\
14065 Specify a negative limit for unlimited."),
14066                             NULL, NULL, /* FIXME: i18n: The maximum
14067                                            number of target hardware
14068                                            watchpoints is %s.  */
14069                             &remote_set_cmdlist, &remote_show_cmdlist);
14070   add_setshow_zinteger_cmd ("hardware-watchpoint-length-limit", no_class,
14071                             &remote_hw_watchpoint_length_limit, _("\
14072 Set the maximum length (in bytes) of a target hardware watchpoint."), _("\
14073 Show the maximum length (in bytes) of a target hardware watchpoint."), _("\
14074 Specify a negative limit for unlimited."),
14075                             NULL, NULL, /* FIXME: i18n: The maximum
14076                                            length (in bytes) of a target
14077                                            hardware watchpoint is %s.  */
14078                             &remote_set_cmdlist, &remote_show_cmdlist);
14079   add_setshow_zinteger_cmd ("hardware-breakpoint-limit", no_class,
14080                             &remote_hw_breakpoint_limit, _("\
14081 Set the maximum number of target hardware breakpoints."), _("\
14082 Show the maximum number of target hardware breakpoints."), _("\
14083 Specify a negative limit for unlimited."),
14084                             NULL, NULL, /* FIXME: i18n: The maximum
14085                                            number of target hardware
14086                                            breakpoints is %s.  */
14087                             &remote_set_cmdlist, &remote_show_cmdlist);
14088
14089   add_setshow_zuinteger_cmd ("remoteaddresssize", class_obscure,
14090                              &remote_address_size, _("\
14091 Set the maximum size of the address (in bits) in a memory packet."), _("\
14092 Show the maximum size of the address (in bits) in a memory packet."), NULL,
14093                              NULL,
14094                              NULL, /* FIXME: i18n: */
14095                              &setlist, &showlist);
14096
14097   init_all_packet_configs ();
14098
14099   add_packet_config_cmd (&remote_protocol_packets[PACKET_X],
14100                          "X", "binary-download", 1);
14101
14102   add_packet_config_cmd (&remote_protocol_packets[PACKET_vCont],
14103                          "vCont", "verbose-resume", 0);
14104
14105   add_packet_config_cmd (&remote_protocol_packets[PACKET_QPassSignals],
14106                          "QPassSignals", "pass-signals", 0);
14107
14108   add_packet_config_cmd (&remote_protocol_packets[PACKET_QCatchSyscalls],
14109                          "QCatchSyscalls", "catch-syscalls", 0);
14110
14111   add_packet_config_cmd (&remote_protocol_packets[PACKET_QProgramSignals],
14112                          "QProgramSignals", "program-signals", 0);
14113
14114   add_packet_config_cmd (&remote_protocol_packets[PACKET_QSetWorkingDir],
14115                          "QSetWorkingDir", "set-working-dir", 0);
14116
14117   add_packet_config_cmd (&remote_protocol_packets[PACKET_QStartupWithShell],
14118                          "QStartupWithShell", "startup-with-shell", 0);
14119
14120   add_packet_config_cmd (&remote_protocol_packets
14121                          [PACKET_QEnvironmentHexEncoded],
14122                          "QEnvironmentHexEncoded", "environment-hex-encoded",
14123                          0);
14124
14125   add_packet_config_cmd (&remote_protocol_packets[PACKET_QEnvironmentReset],
14126                          "QEnvironmentReset", "environment-reset",
14127                          0);
14128
14129   add_packet_config_cmd (&remote_protocol_packets[PACKET_QEnvironmentUnset],
14130                          "QEnvironmentUnset", "environment-unset",
14131                          0);
14132
14133   add_packet_config_cmd (&remote_protocol_packets[PACKET_qSymbol],
14134                          "qSymbol", "symbol-lookup", 0);
14135
14136   add_packet_config_cmd (&remote_protocol_packets[PACKET_P],
14137                          "P", "set-register", 1);
14138
14139   add_packet_config_cmd (&remote_protocol_packets[PACKET_p],
14140                          "p", "fetch-register", 1);
14141
14142   add_packet_config_cmd (&remote_protocol_packets[PACKET_Z0],
14143                          "Z0", "software-breakpoint", 0);
14144
14145   add_packet_config_cmd (&remote_protocol_packets[PACKET_Z1],
14146                          "Z1", "hardware-breakpoint", 0);
14147
14148   add_packet_config_cmd (&remote_protocol_packets[PACKET_Z2],
14149                          "Z2", "write-watchpoint", 0);
14150
14151   add_packet_config_cmd (&remote_protocol_packets[PACKET_Z3],
14152                          "Z3", "read-watchpoint", 0);
14153
14154   add_packet_config_cmd (&remote_protocol_packets[PACKET_Z4],
14155                          "Z4", "access-watchpoint", 0);
14156
14157   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_auxv],
14158                          "qXfer:auxv:read", "read-aux-vector", 0);
14159
14160   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_exec_file],
14161                          "qXfer:exec-file:read", "pid-to-exec-file", 0);
14162
14163   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_features],
14164                          "qXfer:features:read", "target-features", 0);
14165
14166   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_libraries],
14167                          "qXfer:libraries:read", "library-info", 0);
14168
14169   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_libraries_svr4],
14170                          "qXfer:libraries-svr4:read", "library-info-svr4", 0);
14171
14172   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_memory_map],
14173                          "qXfer:memory-map:read", "memory-map", 0);
14174
14175   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_spu_read],
14176                          "qXfer:spu:read", "read-spu-object", 0);
14177
14178   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_spu_write],
14179                          "qXfer:spu:write", "write-spu-object", 0);
14180
14181   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_osdata],
14182                         "qXfer:osdata:read", "osdata", 0);
14183
14184   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_threads],
14185                          "qXfer:threads:read", "threads", 0);
14186
14187   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_siginfo_read],
14188                          "qXfer:siginfo:read", "read-siginfo-object", 0);
14189
14190   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_siginfo_write],
14191                          "qXfer:siginfo:write", "write-siginfo-object", 0);
14192
14193   add_packet_config_cmd
14194     (&remote_protocol_packets[PACKET_qXfer_traceframe_info],
14195      "qXfer:traceframe-info:read", "traceframe-info", 0);
14196
14197   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_uib],
14198                          "qXfer:uib:read", "unwind-info-block", 0);
14199
14200   add_packet_config_cmd (&remote_protocol_packets[PACKET_qGetTLSAddr],
14201                          "qGetTLSAddr", "get-thread-local-storage-address",
14202                          0);
14203
14204   add_packet_config_cmd (&remote_protocol_packets[PACKET_qGetTIBAddr],
14205                          "qGetTIBAddr", "get-thread-information-block-address",
14206                          0);
14207
14208   add_packet_config_cmd (&remote_protocol_packets[PACKET_bc],
14209                          "bc", "reverse-continue", 0);
14210
14211   add_packet_config_cmd (&remote_protocol_packets[PACKET_bs],
14212                          "bs", "reverse-step", 0);
14213
14214   add_packet_config_cmd (&remote_protocol_packets[PACKET_qSupported],
14215                          "qSupported", "supported-packets", 0);
14216
14217   add_packet_config_cmd (&remote_protocol_packets[PACKET_qSearch_memory],
14218                          "qSearch:memory", "search-memory", 0);
14219
14220   add_packet_config_cmd (&remote_protocol_packets[PACKET_qTStatus],
14221                          "qTStatus", "trace-status", 0);
14222
14223   add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_setfs],
14224                          "vFile:setfs", "hostio-setfs", 0);
14225
14226   add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_open],
14227                          "vFile:open", "hostio-open", 0);
14228
14229   add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_pread],
14230                          "vFile:pread", "hostio-pread", 0);
14231
14232   add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_pwrite],
14233                          "vFile:pwrite", "hostio-pwrite", 0);
14234
14235   add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_close],
14236                          "vFile:close", "hostio-close", 0);
14237
14238   add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_unlink],
14239                          "vFile:unlink", "hostio-unlink", 0);
14240
14241   add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_readlink],
14242                          "vFile:readlink", "hostio-readlink", 0);
14243
14244   add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_fstat],
14245                          "vFile:fstat", "hostio-fstat", 0);
14246
14247   add_packet_config_cmd (&remote_protocol_packets[PACKET_vAttach],
14248                          "vAttach", "attach", 0);
14249
14250   add_packet_config_cmd (&remote_protocol_packets[PACKET_vRun],
14251                          "vRun", "run", 0);
14252
14253   add_packet_config_cmd (&remote_protocol_packets[PACKET_QStartNoAckMode],
14254                          "QStartNoAckMode", "noack", 0);
14255
14256   add_packet_config_cmd (&remote_protocol_packets[PACKET_vKill],
14257                          "vKill", "kill", 0);
14258
14259   add_packet_config_cmd (&remote_protocol_packets[PACKET_qAttached],
14260                          "qAttached", "query-attached", 0);
14261
14262   add_packet_config_cmd (&remote_protocol_packets[PACKET_ConditionalTracepoints],
14263                          "ConditionalTracepoints",
14264                          "conditional-tracepoints", 0);
14265
14266   add_packet_config_cmd (&remote_protocol_packets[PACKET_ConditionalBreakpoints],
14267                          "ConditionalBreakpoints",
14268                          "conditional-breakpoints", 0);
14269
14270   add_packet_config_cmd (&remote_protocol_packets[PACKET_BreakpointCommands],
14271                          "BreakpointCommands",
14272                          "breakpoint-commands", 0);
14273
14274   add_packet_config_cmd (&remote_protocol_packets[PACKET_FastTracepoints],
14275                          "FastTracepoints", "fast-tracepoints", 0);
14276
14277   add_packet_config_cmd (&remote_protocol_packets[PACKET_TracepointSource],
14278                          "TracepointSource", "TracepointSource", 0);
14279
14280   add_packet_config_cmd (&remote_protocol_packets[PACKET_QAllow],
14281                          "QAllow", "allow", 0);
14282
14283   add_packet_config_cmd (&remote_protocol_packets[PACKET_StaticTracepoints],
14284                          "StaticTracepoints", "static-tracepoints", 0);
14285
14286   add_packet_config_cmd (&remote_protocol_packets[PACKET_InstallInTrace],
14287                          "InstallInTrace", "install-in-trace", 0);
14288
14289   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_statictrace_read],
14290                          "qXfer:statictrace:read", "read-sdata-object", 0);
14291
14292   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_fdpic],
14293                          "qXfer:fdpic:read", "read-fdpic-loadmap", 0);
14294
14295   add_packet_config_cmd (&remote_protocol_packets[PACKET_QDisableRandomization],
14296                          "QDisableRandomization", "disable-randomization", 0);
14297
14298   add_packet_config_cmd (&remote_protocol_packets[PACKET_QAgent],
14299                          "QAgent", "agent", 0);
14300
14301   add_packet_config_cmd (&remote_protocol_packets[PACKET_QTBuffer_size],
14302                          "QTBuffer:size", "trace-buffer-size", 0);
14303
14304   add_packet_config_cmd (&remote_protocol_packets[PACKET_Qbtrace_off],
14305        "Qbtrace:off", "disable-btrace", 0);
14306
14307   add_packet_config_cmd (&remote_protocol_packets[PACKET_Qbtrace_bts],
14308        "Qbtrace:bts", "enable-btrace-bts", 0);
14309
14310   add_packet_config_cmd (&remote_protocol_packets[PACKET_Qbtrace_pt],
14311        "Qbtrace:pt", "enable-btrace-pt", 0);
14312
14313   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_btrace],
14314        "qXfer:btrace", "read-btrace", 0);
14315
14316   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_btrace_conf],
14317        "qXfer:btrace-conf", "read-btrace-conf", 0);
14318
14319   add_packet_config_cmd (&remote_protocol_packets[PACKET_Qbtrace_conf_bts_size],
14320        "Qbtrace-conf:bts:size", "btrace-conf-bts-size", 0);
14321
14322   add_packet_config_cmd (&remote_protocol_packets[PACKET_multiprocess_feature],
14323        "multiprocess-feature", "multiprocess-feature", 0);
14324
14325   add_packet_config_cmd (&remote_protocol_packets[PACKET_swbreak_feature],
14326                          "swbreak-feature", "swbreak-feature", 0);
14327
14328   add_packet_config_cmd (&remote_protocol_packets[PACKET_hwbreak_feature],
14329                          "hwbreak-feature", "hwbreak-feature", 0);
14330
14331   add_packet_config_cmd (&remote_protocol_packets[PACKET_fork_event_feature],
14332                          "fork-event-feature", "fork-event-feature", 0);
14333
14334   add_packet_config_cmd (&remote_protocol_packets[PACKET_vfork_event_feature],
14335                          "vfork-event-feature", "vfork-event-feature", 0);
14336
14337   add_packet_config_cmd (&remote_protocol_packets[PACKET_Qbtrace_conf_pt_size],
14338        "Qbtrace-conf:pt:size", "btrace-conf-pt-size", 0);
14339
14340   add_packet_config_cmd (&remote_protocol_packets[PACKET_vContSupported],
14341                          "vContSupported", "verbose-resume-supported", 0);
14342
14343   add_packet_config_cmd (&remote_protocol_packets[PACKET_exec_event_feature],
14344                          "exec-event-feature", "exec-event-feature", 0);
14345
14346   add_packet_config_cmd (&remote_protocol_packets[PACKET_vCtrlC],
14347                          "vCtrlC", "ctrl-c", 0);
14348
14349   add_packet_config_cmd (&remote_protocol_packets[PACKET_QThreadEvents],
14350                          "QThreadEvents", "thread-events", 0);
14351
14352   add_packet_config_cmd (&remote_protocol_packets[PACKET_no_resumed],
14353                          "N stop reply", "no-resumed-stop-reply", 0);
14354
14355   /* Assert that we've registered "set remote foo-packet" commands
14356      for all packet configs.  */
14357   {
14358     int i;
14359
14360     for (i = 0; i < PACKET_MAX; i++)
14361       {
14362         /* Ideally all configs would have a command associated.  Some
14363            still don't though.  */
14364         int excepted;
14365
14366         switch (i)
14367           {
14368           case PACKET_QNonStop:
14369           case PACKET_EnableDisableTracepoints_feature:
14370           case PACKET_tracenz_feature:
14371           case PACKET_DisconnectedTracing_feature:
14372           case PACKET_augmented_libraries_svr4_read_feature:
14373           case PACKET_qCRC:
14374             /* Additions to this list need to be well justified:
14375                pre-existing packets are OK; new packets are not.  */
14376             excepted = 1;
14377             break;
14378           default:
14379             excepted = 0;
14380             break;
14381           }
14382
14383         /* This catches both forgetting to add a config command, and
14384            forgetting to remove a packet from the exception list.  */
14385         gdb_assert (excepted == (remote_protocol_packets[i].name == NULL));
14386       }
14387   }
14388
14389   /* Keep the old ``set remote Z-packet ...'' working.  Each individual
14390      Z sub-packet has its own set and show commands, but users may
14391      have sets to this variable in their .gdbinit files (or in their
14392      documentation).  */
14393   add_setshow_auto_boolean_cmd ("Z-packet", class_obscure,
14394                                 &remote_Z_packet_detect, _("\
14395 Set use of remote protocol `Z' packets"), _("\
14396 Show use of remote protocol `Z' packets "), _("\
14397 When set, GDB will attempt to use the remote breakpoint and watchpoint\n\
14398 packets."),
14399                                 set_remote_protocol_Z_packet_cmd,
14400                                 show_remote_protocol_Z_packet_cmd,
14401                                 /* FIXME: i18n: Use of remote protocol
14402                                    `Z' packets is %s.  */
14403                                 &remote_set_cmdlist, &remote_show_cmdlist);
14404
14405   add_prefix_cmd ("remote", class_files, remote_command, _("\
14406 Manipulate files on the remote system\n\
14407 Transfer files to and from the remote target system."),
14408                   &remote_cmdlist, "remote ",
14409                   0 /* allow-unknown */, &cmdlist);
14410
14411   add_cmd ("put", class_files, remote_put_command,
14412            _("Copy a local file to the remote system."),
14413            &remote_cmdlist);
14414
14415   add_cmd ("get", class_files, remote_get_command,
14416            _("Copy a remote file to the local system."),
14417            &remote_cmdlist);
14418
14419   add_cmd ("delete", class_files, remote_delete_command,
14420            _("Delete a remote file."),
14421            &remote_cmdlist);
14422
14423   add_setshow_string_noescape_cmd ("exec-file", class_files,
14424                                    &remote_exec_file_var, _("\
14425 Set the remote pathname for \"run\""), _("\
14426 Show the remote pathname for \"run\""), NULL,
14427                                    set_remote_exec_file,
14428                                    show_remote_exec_file,
14429                                    &remote_set_cmdlist,
14430                                    &remote_show_cmdlist);
14431
14432   add_setshow_boolean_cmd ("range-stepping", class_run,
14433                            &use_range_stepping, _("\
14434 Enable or disable range stepping."), _("\
14435 Show whether target-assisted range stepping is enabled."), _("\
14436 If on, and the target supports it, when stepping a source line, GDB\n\
14437 tells the target to step the corresponding range of addresses itself instead\n\
14438 of issuing multiple single-steps.  This speeds up source level\n\
14439 stepping.  If off, GDB always issues single-steps, even if range\n\
14440 stepping is supported by the target.  The default is on."),
14441                            set_range_stepping,
14442                            show_range_stepping,
14443                            &setlist,
14444                            &showlist);
14445
14446   /* Eventually initialize fileio.  See fileio.c */
14447   initialize_remote_fileio (remote_set_cmdlist, remote_show_cmdlist);
14448
14449   /* Take advantage of the fact that the TID field is not used, to tag
14450      special ptids with it set to != 0.  */
14451   magic_null_ptid = ptid_build (42000, -1, 1);
14452   not_sent_ptid = ptid_build (42000, -2, 1);
14453   any_thread_ptid = ptid_build (42000, 0, 1);
14454 }