Create private_thread_info hierarchy
[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, int needed, int any_count,
2028                                int table_size, int *table)
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)
2041     {
2042       int i;
2043
2044       /* Count how many syscalls are to be caught (table[sysno] != 0).  */
2045       for (i = 0; i < table_size; i++)
2046         {
2047           if (table[i] != 0)
2048             n_sysno++;
2049         }
2050     }
2051
2052   if (remote_debug)
2053     {
2054       fprintf_unfiltered (gdb_stdlog,
2055                           "remote_set_syscall_catchpoint "
2056                           "pid %d needed %d any_count %d n_sysno %d\n",
2057                           pid, needed, any_count, n_sysno);
2058     }
2059
2060   std::string built_packet;
2061   if (needed)
2062     {
2063       /* Prepare a packet with the sysno list, assuming max 8+1
2064          characters for a sysno.  If the resulting packet size is too
2065          big, fallback on the non-selective packet.  */
2066       const int maxpktsz = strlen ("QCatchSyscalls:1") + n_sysno * 9 + 1;
2067       built_packet.reserve (maxpktsz);
2068       built_packet = "QCatchSyscalls:1";
2069       if (!any_count)
2070         {
2071           /* Add in catch_packet each syscall to be caught (table[i] != 0).  */
2072           for (int i = 0; i < table_size; i++)
2073             {
2074               if (table[i] != 0)
2075                 string_appendf (built_packet, ";%x", i);
2076             }
2077         }
2078       if (built_packet.size () > get_remote_packet_size ())
2079         {
2080           /* catch_packet too big.  Fallback to less efficient
2081              non selective mode, with GDB doing the filtering.  */
2082           catch_packet = "QCatchSyscalls:1";
2083         }
2084       else
2085         catch_packet = built_packet.c_str ();
2086     }
2087   else
2088     catch_packet = "QCatchSyscalls:0";
2089
2090   struct remote_state *rs = get_remote_state ();
2091
2092   putpkt (catch_packet);
2093   getpkt (&rs->buf, &rs->buf_size, 0);
2094   result = packet_ok (rs->buf, &remote_protocol_packets[PACKET_QCatchSyscalls]);
2095   if (result == PACKET_OK)
2096     return 0;
2097   else
2098     return -1;
2099 }
2100
2101 /* If 'QProgramSignals' is supported, tell the remote stub what
2102    signals it should pass through to the inferior when detaching.  */
2103
2104 static void
2105 remote_program_signals (struct target_ops *self,
2106                         int numsigs, unsigned char *signals)
2107 {
2108   if (packet_support (PACKET_QProgramSignals) != PACKET_DISABLE)
2109     {
2110       char *packet, *p;
2111       int count = 0, i;
2112       struct remote_state *rs = get_remote_state ();
2113
2114       gdb_assert (numsigs < 256);
2115       for (i = 0; i < numsigs; i++)
2116         {
2117           if (signals[i])
2118             count++;
2119         }
2120       packet = (char *) xmalloc (count * 3 + strlen ("QProgramSignals:") + 1);
2121       strcpy (packet, "QProgramSignals:");
2122       p = packet + strlen (packet);
2123       for (i = 0; i < numsigs; i++)
2124         {
2125           if (signal_pass_state (i))
2126             {
2127               if (i >= 16)
2128                 *p++ = tohex (i >> 4);
2129               *p++ = tohex (i & 15);
2130               if (count)
2131                 *p++ = ';';
2132               else
2133                 break;
2134               count--;
2135             }
2136         }
2137       *p = 0;
2138       if (!rs->last_program_signals_packet
2139           || strcmp (rs->last_program_signals_packet, packet) != 0)
2140         {
2141           putpkt (packet);
2142           getpkt (&rs->buf, &rs->buf_size, 0);
2143           packet_ok (rs->buf, &remote_protocol_packets[PACKET_QProgramSignals]);
2144           xfree (rs->last_program_signals_packet);
2145           rs->last_program_signals_packet = packet;
2146         }
2147       else
2148         xfree (packet);
2149     }
2150 }
2151
2152 /* If PTID is MAGIC_NULL_PTID, don't set any thread.  If PTID is
2153    MINUS_ONE_PTID, set the thread to -1, so the stub returns the
2154    thread.  If GEN is set, set the general thread, if not, then set
2155    the step/continue thread.  */
2156 static void
2157 set_thread (ptid_t ptid, int gen)
2158 {
2159   struct remote_state *rs = get_remote_state ();
2160   ptid_t state = gen ? rs->general_thread : rs->continue_thread;
2161   char *buf = rs->buf;
2162   char *endbuf = rs->buf + get_remote_packet_size ();
2163
2164   if (ptid_equal (state, ptid))
2165     return;
2166
2167   *buf++ = 'H';
2168   *buf++ = gen ? 'g' : 'c';
2169   if (ptid_equal (ptid, magic_null_ptid))
2170     xsnprintf (buf, endbuf - buf, "0");
2171   else if (ptid_equal (ptid, any_thread_ptid))
2172     xsnprintf (buf, endbuf - buf, "0");
2173   else if (ptid_equal (ptid, minus_one_ptid))
2174     xsnprintf (buf, endbuf - buf, "-1");
2175   else
2176     write_ptid (buf, endbuf, ptid);
2177   putpkt (rs->buf);
2178   getpkt (&rs->buf, &rs->buf_size, 0);
2179   if (gen)
2180     rs->general_thread = ptid;
2181   else
2182     rs->continue_thread = ptid;
2183 }
2184
2185 static void
2186 set_general_thread (ptid_t ptid)
2187 {
2188   set_thread (ptid, 1);
2189 }
2190
2191 static void
2192 set_continue_thread (ptid_t ptid)
2193 {
2194   set_thread (ptid, 0);
2195 }
2196
2197 /* Change the remote current process.  Which thread within the process
2198    ends up selected isn't important, as long as it is the same process
2199    as what INFERIOR_PTID points to.
2200
2201    This comes from that fact that there is no explicit notion of
2202    "selected process" in the protocol.  The selected process for
2203    general operations is the process the selected general thread
2204    belongs to.  */
2205
2206 static void
2207 set_general_process (void)
2208 {
2209   struct remote_state *rs = get_remote_state ();
2210
2211   /* If the remote can't handle multiple processes, don't bother.  */
2212   if (!remote_multi_process_p (rs))
2213     return;
2214
2215   /* We only need to change the remote current thread if it's pointing
2216      at some other process.  */
2217   if (ptid_get_pid (rs->general_thread) != ptid_get_pid (inferior_ptid))
2218     set_general_thread (inferior_ptid);
2219 }
2220
2221 \f
2222 /* Return nonzero if this is the main thread that we made up ourselves
2223    to model non-threaded targets as single-threaded.  */
2224
2225 static int
2226 remote_thread_always_alive (struct target_ops *ops, ptid_t ptid)
2227 {
2228   if (ptid_equal (ptid, magic_null_ptid))
2229     /* The main thread is always alive.  */
2230     return 1;
2231
2232   if (ptid_get_pid (ptid) != 0 && ptid_get_lwp (ptid) == 0)
2233     /* The main thread is always alive.  This can happen after a
2234        vAttach, if the remote side doesn't support
2235        multi-threading.  */
2236     return 1;
2237
2238   return 0;
2239 }
2240
2241 /* Return nonzero if the thread PTID is still alive on the remote
2242    system.  */
2243
2244 static int
2245 remote_thread_alive (struct target_ops *ops, ptid_t ptid)
2246 {
2247   struct remote_state *rs = get_remote_state ();
2248   char *p, *endp;
2249
2250   /* Check if this is a thread that we made up ourselves to model
2251      non-threaded targets as single-threaded.  */
2252   if (remote_thread_always_alive (ops, ptid))
2253     return 1;
2254
2255   p = rs->buf;
2256   endp = rs->buf + get_remote_packet_size ();
2257
2258   *p++ = 'T';
2259   write_ptid (p, endp, ptid);
2260
2261   putpkt (rs->buf);
2262   getpkt (&rs->buf, &rs->buf_size, 0);
2263   return (rs->buf[0] == 'O' && rs->buf[1] == 'K');
2264 }
2265
2266 /* Return a pointer to a thread name if we know it and NULL otherwise.
2267    The thread_info object owns the memory for the name.  */
2268
2269 static const char *
2270 remote_thread_name (struct target_ops *ops, struct thread_info *info)
2271 {
2272   if (info->priv != NULL)
2273     return get_remote_thread_info (info)->name.c_str ();
2274
2275   return NULL;
2276 }
2277
2278 /* About these extended threadlist and threadinfo packets.  They are
2279    variable length packets but, the fields within them are often fixed
2280    length.  They are redundent enough to send over UDP as is the
2281    remote protocol in general.  There is a matching unit test module
2282    in libstub.  */
2283
2284 /* WARNING: This threadref data structure comes from the remote O.S.,
2285    libstub protocol encoding, and remote.c.  It is not particularly
2286    changable.  */
2287
2288 /* Right now, the internal structure is int. We want it to be bigger.
2289    Plan to fix this.  */
2290
2291 typedef int gdb_threadref;      /* Internal GDB thread reference.  */
2292
2293 /* gdb_ext_thread_info is an internal GDB data structure which is
2294    equivalent to the reply of the remote threadinfo packet.  */
2295
2296 struct gdb_ext_thread_info
2297   {
2298     threadref threadid;         /* External form of thread reference.  */
2299     int active;                 /* Has state interesting to GDB?
2300                                    regs, stack.  */
2301     char display[256];          /* Brief state display, name,
2302                                    blocked/suspended.  */
2303     char shortname[32];         /* To be used to name threads.  */
2304     char more_display[256];     /* Long info, statistics, queue depth,
2305                                    whatever.  */
2306   };
2307
2308 /* The volume of remote transfers can be limited by submitting
2309    a mask containing bits specifying the desired information.
2310    Use a union of these values as the 'selection' parameter to
2311    get_thread_info.  FIXME: Make these TAG names more thread specific.  */
2312
2313 #define TAG_THREADID 1
2314 #define TAG_EXISTS 2
2315 #define TAG_DISPLAY 4
2316 #define TAG_THREADNAME 8
2317 #define TAG_MOREDISPLAY 16
2318
2319 #define BUF_THREAD_ID_SIZE (OPAQUETHREADBYTES * 2)
2320
2321 static char *unpack_nibble (char *buf, int *val);
2322
2323 static char *unpack_byte (char *buf, int *value);
2324
2325 static char *pack_int (char *buf, int value);
2326
2327 static char *unpack_int (char *buf, int *value);
2328
2329 static char *unpack_string (char *src, char *dest, int length);
2330
2331 static char *pack_threadid (char *pkt, threadref *id);
2332
2333 static char *unpack_threadid (char *inbuf, threadref *id);
2334
2335 void int_to_threadref (threadref *id, int value);
2336
2337 static int threadref_to_int (threadref *ref);
2338
2339 static void copy_threadref (threadref *dest, threadref *src);
2340
2341 static int threadmatch (threadref *dest, threadref *src);
2342
2343 static char *pack_threadinfo_request (char *pkt, int mode,
2344                                       threadref *id);
2345
2346 static int remote_unpack_thread_info_response (char *pkt,
2347                                                threadref *expectedref,
2348                                                struct gdb_ext_thread_info
2349                                                *info);
2350
2351
2352 static int remote_get_threadinfo (threadref *threadid,
2353                                   int fieldset, /*TAG mask */
2354                                   struct gdb_ext_thread_info *info);
2355
2356 static char *pack_threadlist_request (char *pkt, int startflag,
2357                                       int threadcount,
2358                                       threadref *nextthread);
2359
2360 static int parse_threadlist_response (char *pkt,
2361                                       int result_limit,
2362                                       threadref *original_echo,
2363                                       threadref *resultlist,
2364                                       int *doneflag);
2365
2366 static int remote_get_threadlist (int startflag,
2367                                   threadref *nextthread,
2368                                   int result_limit,
2369                                   int *done,
2370                                   int *result_count,
2371                                   threadref *threadlist);
2372
2373 typedef int (*rmt_thread_action) (threadref *ref, void *context);
2374
2375 static int remote_threadlist_iterator (rmt_thread_action stepfunction,
2376                                        void *context, int looplimit);
2377
2378 static int remote_newthread_step (threadref *ref, void *context);
2379
2380
2381 /* Write a PTID to BUF.  ENDBUF points to one-passed-the-end of the
2382    buffer we're allowed to write to.  Returns
2383    BUF+CHARACTERS_WRITTEN.  */
2384
2385 static char *
2386 write_ptid (char *buf, const char *endbuf, ptid_t ptid)
2387 {
2388   int pid, tid;
2389   struct remote_state *rs = get_remote_state ();
2390
2391   if (remote_multi_process_p (rs))
2392     {
2393       pid = ptid_get_pid (ptid);
2394       if (pid < 0)
2395         buf += xsnprintf (buf, endbuf - buf, "p-%x.", -pid);
2396       else
2397         buf += xsnprintf (buf, endbuf - buf, "p%x.", pid);
2398     }
2399   tid = ptid_get_lwp (ptid);
2400   if (tid < 0)
2401     buf += xsnprintf (buf, endbuf - buf, "-%x", -tid);
2402   else
2403     buf += xsnprintf (buf, endbuf - buf, "%x", tid);
2404
2405   return buf;
2406 }
2407
2408 /* Extract a PTID from BUF.  If non-null, OBUF is set to one past the
2409    last parsed char.  Returns null_ptid if no thread id is found, and
2410    throws an error if the thread id has an invalid format.  */
2411
2412 static ptid_t
2413 read_ptid (const char *buf, const char **obuf)
2414 {
2415   const char *p = buf;
2416   const char *pp;
2417   ULONGEST pid = 0, tid = 0;
2418
2419   if (*p == 'p')
2420     {
2421       /* Multi-process ptid.  */
2422       pp = unpack_varlen_hex (p + 1, &pid);
2423       if (*pp != '.')
2424         error (_("invalid remote ptid: %s"), p);
2425
2426       p = pp;
2427       pp = unpack_varlen_hex (p + 1, &tid);
2428       if (obuf)
2429         *obuf = pp;
2430       return ptid_build (pid, tid, 0);
2431     }
2432
2433   /* No multi-process.  Just a tid.  */
2434   pp = unpack_varlen_hex (p, &tid);
2435
2436   /* Return null_ptid when no thread id is found.  */
2437   if (p == pp)
2438     {
2439       if (obuf)
2440         *obuf = pp;
2441       return null_ptid;
2442     }
2443
2444   /* Since the stub is not sending a process id, then default to
2445      what's in inferior_ptid, unless it's null at this point.  If so,
2446      then since there's no way to know the pid of the reported
2447      threads, use the magic number.  */
2448   if (ptid_equal (inferior_ptid, null_ptid))
2449     pid = ptid_get_pid (magic_null_ptid);
2450   else
2451     pid = ptid_get_pid (inferior_ptid);
2452
2453   if (obuf)
2454     *obuf = pp;
2455   return ptid_build (pid, tid, 0);
2456 }
2457
2458 static int
2459 stubhex (int ch)
2460 {
2461   if (ch >= 'a' && ch <= 'f')
2462     return ch - 'a' + 10;
2463   if (ch >= '0' && ch <= '9')
2464     return ch - '0';
2465   if (ch >= 'A' && ch <= 'F')
2466     return ch - 'A' + 10;
2467   return -1;
2468 }
2469
2470 static int
2471 stub_unpack_int (char *buff, int fieldlength)
2472 {
2473   int nibble;
2474   int retval = 0;
2475
2476   while (fieldlength)
2477     {
2478       nibble = stubhex (*buff++);
2479       retval |= nibble;
2480       fieldlength--;
2481       if (fieldlength)
2482         retval = retval << 4;
2483     }
2484   return retval;
2485 }
2486
2487 static char *
2488 unpack_nibble (char *buf, int *val)
2489 {
2490   *val = fromhex (*buf++);
2491   return buf;
2492 }
2493
2494 static char *
2495 unpack_byte (char *buf, int *value)
2496 {
2497   *value = stub_unpack_int (buf, 2);
2498   return buf + 2;
2499 }
2500
2501 static char *
2502 pack_int (char *buf, int value)
2503 {
2504   buf = pack_hex_byte (buf, (value >> 24) & 0xff);
2505   buf = pack_hex_byte (buf, (value >> 16) & 0xff);
2506   buf = pack_hex_byte (buf, (value >> 8) & 0x0ff);
2507   buf = pack_hex_byte (buf, (value & 0xff));
2508   return buf;
2509 }
2510
2511 static char *
2512 unpack_int (char *buf, int *value)
2513 {
2514   *value = stub_unpack_int (buf, 8);
2515   return buf + 8;
2516 }
2517
2518 #if 0                   /* Currently unused, uncomment when needed.  */
2519 static char *pack_string (char *pkt, char *string);
2520
2521 static char *
2522 pack_string (char *pkt, char *string)
2523 {
2524   char ch;
2525   int len;
2526
2527   len = strlen (string);
2528   if (len > 200)
2529     len = 200;          /* Bigger than most GDB packets, junk???  */
2530   pkt = pack_hex_byte (pkt, len);
2531   while (len-- > 0)
2532     {
2533       ch = *string++;
2534       if ((ch == '\0') || (ch == '#'))
2535         ch = '*';               /* Protect encapsulation.  */
2536       *pkt++ = ch;
2537     }
2538   return pkt;
2539 }
2540 #endif /* 0 (unused) */
2541
2542 static char *
2543 unpack_string (char *src, char *dest, int length)
2544 {
2545   while (length--)
2546     *dest++ = *src++;
2547   *dest = '\0';
2548   return src;
2549 }
2550
2551 static char *
2552 pack_threadid (char *pkt, threadref *id)
2553 {
2554   char *limit;
2555   unsigned char *altid;
2556
2557   altid = (unsigned char *) id;
2558   limit = pkt + BUF_THREAD_ID_SIZE;
2559   while (pkt < limit)
2560     pkt = pack_hex_byte (pkt, *altid++);
2561   return pkt;
2562 }
2563
2564
2565 static char *
2566 unpack_threadid (char *inbuf, threadref *id)
2567 {
2568   char *altref;
2569   char *limit = inbuf + BUF_THREAD_ID_SIZE;
2570   int x, y;
2571
2572   altref = (char *) id;
2573
2574   while (inbuf < limit)
2575     {
2576       x = stubhex (*inbuf++);
2577       y = stubhex (*inbuf++);
2578       *altref++ = (x << 4) | y;
2579     }
2580   return inbuf;
2581 }
2582
2583 /* Externally, threadrefs are 64 bits but internally, they are still
2584    ints.  This is due to a mismatch of specifications.  We would like
2585    to use 64bit thread references internally.  This is an adapter
2586    function.  */
2587
2588 void
2589 int_to_threadref (threadref *id, int value)
2590 {
2591   unsigned char *scan;
2592
2593   scan = (unsigned char *) id;
2594   {
2595     int i = 4;
2596     while (i--)
2597       *scan++ = 0;
2598   }
2599   *scan++ = (value >> 24) & 0xff;
2600   *scan++ = (value >> 16) & 0xff;
2601   *scan++ = (value >> 8) & 0xff;
2602   *scan++ = (value & 0xff);
2603 }
2604
2605 static int
2606 threadref_to_int (threadref *ref)
2607 {
2608   int i, value = 0;
2609   unsigned char *scan;
2610
2611   scan = *ref;
2612   scan += 4;
2613   i = 4;
2614   while (i-- > 0)
2615     value = (value << 8) | ((*scan++) & 0xff);
2616   return value;
2617 }
2618
2619 static void
2620 copy_threadref (threadref *dest, threadref *src)
2621 {
2622   int i;
2623   unsigned char *csrc, *cdest;
2624
2625   csrc = (unsigned char *) src;
2626   cdest = (unsigned char *) dest;
2627   i = 8;
2628   while (i--)
2629     *cdest++ = *csrc++;
2630 }
2631
2632 static int
2633 threadmatch (threadref *dest, threadref *src)
2634 {
2635   /* Things are broken right now, so just assume we got a match.  */
2636 #if 0
2637   unsigned char *srcp, *destp;
2638   int i, result;
2639   srcp = (char *) src;
2640   destp = (char *) dest;
2641
2642   result = 1;
2643   while (i-- > 0)
2644     result &= (*srcp++ == *destp++) ? 1 : 0;
2645   return result;
2646 #endif
2647   return 1;
2648 }
2649
2650 /*
2651    threadid:1,        # always request threadid
2652    context_exists:2,
2653    display:4,
2654    unique_name:8,
2655    more_display:16
2656  */
2657
2658 /* Encoding:  'Q':8,'P':8,mask:32,threadid:64 */
2659
2660 static char *
2661 pack_threadinfo_request (char *pkt, int mode, threadref *id)
2662 {
2663   *pkt++ = 'q';                         /* Info Query */
2664   *pkt++ = 'P';                         /* process or thread info */
2665   pkt = pack_int (pkt, mode);           /* mode */
2666   pkt = pack_threadid (pkt, id);        /* threadid */
2667   *pkt = '\0';                          /* terminate */
2668   return pkt;
2669 }
2670
2671 /* These values tag the fields in a thread info response packet.  */
2672 /* Tagging the fields allows us to request specific fields and to
2673    add more fields as time goes by.  */
2674
2675 #define TAG_THREADID 1          /* Echo the thread identifier.  */
2676 #define TAG_EXISTS 2            /* Is this process defined enough to
2677                                    fetch registers and its stack?  */
2678 #define TAG_DISPLAY 4           /* A short thing maybe to put on a window */
2679 #define TAG_THREADNAME 8        /* string, maps 1-to-1 with a thread is.  */
2680 #define TAG_MOREDISPLAY 16      /* Whatever the kernel wants to say about
2681                                    the process.  */
2682
2683 static int
2684 remote_unpack_thread_info_response (char *pkt, threadref *expectedref,
2685                                     struct gdb_ext_thread_info *info)
2686 {
2687   struct remote_state *rs = get_remote_state ();
2688   int mask, length;
2689   int tag;
2690   threadref ref;
2691   char *limit = pkt + rs->buf_size; /* Plausible parsing limit.  */
2692   int retval = 1;
2693
2694   /* info->threadid = 0; FIXME: implement zero_threadref.  */
2695   info->active = 0;
2696   info->display[0] = '\0';
2697   info->shortname[0] = '\0';
2698   info->more_display[0] = '\0';
2699
2700   /* Assume the characters indicating the packet type have been
2701      stripped.  */
2702   pkt = unpack_int (pkt, &mask);        /* arg mask */
2703   pkt = unpack_threadid (pkt, &ref);
2704
2705   if (mask == 0)
2706     warning (_("Incomplete response to threadinfo request."));
2707   if (!threadmatch (&ref, expectedref))
2708     {                   /* This is an answer to a different request.  */
2709       warning (_("ERROR RMT Thread info mismatch."));
2710       return 0;
2711     }
2712   copy_threadref (&info->threadid, &ref);
2713
2714   /* Loop on tagged fields , try to bail if somthing goes wrong.  */
2715
2716   /* Packets are terminated with nulls.  */
2717   while ((pkt < limit) && mask && *pkt)
2718     {
2719       pkt = unpack_int (pkt, &tag);     /* tag */
2720       pkt = unpack_byte (pkt, &length); /* length */
2721       if (!(tag & mask))                /* Tags out of synch with mask.  */
2722         {
2723           warning (_("ERROR RMT: threadinfo tag mismatch."));
2724           retval = 0;
2725           break;
2726         }
2727       if (tag == TAG_THREADID)
2728         {
2729           if (length != 16)
2730             {
2731               warning (_("ERROR RMT: length of threadid is not 16."));
2732               retval = 0;
2733               break;
2734             }
2735           pkt = unpack_threadid (pkt, &ref);
2736           mask = mask & ~TAG_THREADID;
2737           continue;
2738         }
2739       if (tag == TAG_EXISTS)
2740         {
2741           info->active = stub_unpack_int (pkt, length);
2742           pkt += length;
2743           mask = mask & ~(TAG_EXISTS);
2744           if (length > 8)
2745             {
2746               warning (_("ERROR RMT: 'exists' length too long."));
2747               retval = 0;
2748               break;
2749             }
2750           continue;
2751         }
2752       if (tag == TAG_THREADNAME)
2753         {
2754           pkt = unpack_string (pkt, &info->shortname[0], length);
2755           mask = mask & ~TAG_THREADNAME;
2756           continue;
2757         }
2758       if (tag == TAG_DISPLAY)
2759         {
2760           pkt = unpack_string (pkt, &info->display[0], length);
2761           mask = mask & ~TAG_DISPLAY;
2762           continue;
2763         }
2764       if (tag == TAG_MOREDISPLAY)
2765         {
2766           pkt = unpack_string (pkt, &info->more_display[0], length);
2767           mask = mask & ~TAG_MOREDISPLAY;
2768           continue;
2769         }
2770       warning (_("ERROR RMT: unknown thread info tag."));
2771       break;                    /* Not a tag we know about.  */
2772     }
2773   return retval;
2774 }
2775
2776 static int
2777 remote_get_threadinfo (threadref *threadid, int fieldset,       /* TAG mask */
2778                        struct gdb_ext_thread_info *info)
2779 {
2780   struct remote_state *rs = get_remote_state ();
2781   int result;
2782
2783   pack_threadinfo_request (rs->buf, fieldset, threadid);
2784   putpkt (rs->buf);
2785   getpkt (&rs->buf, &rs->buf_size, 0);
2786
2787   if (rs->buf[0] == '\0')
2788     return 0;
2789
2790   result = remote_unpack_thread_info_response (rs->buf + 2,
2791                                                threadid, info);
2792   return result;
2793 }
2794
2795 /*    Format: i'Q':8,i"L":8,initflag:8,batchsize:16,lastthreadid:32   */
2796
2797 static char *
2798 pack_threadlist_request (char *pkt, int startflag, int threadcount,
2799                          threadref *nextthread)
2800 {
2801   *pkt++ = 'q';                 /* info query packet */
2802   *pkt++ = 'L';                 /* Process LIST or threadLIST request */
2803   pkt = pack_nibble (pkt, startflag);           /* initflag 1 bytes */
2804   pkt = pack_hex_byte (pkt, threadcount);       /* threadcount 2 bytes */
2805   pkt = pack_threadid (pkt, nextthread);        /* 64 bit thread identifier */
2806   *pkt = '\0';
2807   return pkt;
2808 }
2809
2810 /* Encoding:   'q':8,'M':8,count:16,done:8,argthreadid:64,(threadid:64)* */
2811
2812 static int
2813 parse_threadlist_response (char *pkt, int result_limit,
2814                            threadref *original_echo, threadref *resultlist,
2815                            int *doneflag)
2816 {
2817   struct remote_state *rs = get_remote_state ();
2818   char *limit;
2819   int count, resultcount, done;
2820
2821   resultcount = 0;
2822   /* Assume the 'q' and 'M chars have been stripped.  */
2823   limit = pkt + (rs->buf_size - BUF_THREAD_ID_SIZE);
2824   /* done parse past here */
2825   pkt = unpack_byte (pkt, &count);      /* count field */
2826   pkt = unpack_nibble (pkt, &done);
2827   /* The first threadid is the argument threadid.  */
2828   pkt = unpack_threadid (pkt, original_echo);   /* should match query packet */
2829   while ((count-- > 0) && (pkt < limit))
2830     {
2831       pkt = unpack_threadid (pkt, resultlist++);
2832       if (resultcount++ >= result_limit)
2833         break;
2834     }
2835   if (doneflag)
2836     *doneflag = done;
2837   return resultcount;
2838 }
2839
2840 /* Fetch the next batch of threads from the remote.  Returns -1 if the
2841    qL packet is not supported, 0 on error and 1 on success.  */
2842
2843 static int
2844 remote_get_threadlist (int startflag, threadref *nextthread, int result_limit,
2845                        int *done, int *result_count, threadref *threadlist)
2846 {
2847   struct remote_state *rs = get_remote_state ();
2848   int result = 1;
2849
2850   /* Trancate result limit to be smaller than the packet size.  */
2851   if ((((result_limit + 1) * BUF_THREAD_ID_SIZE) + 10)
2852       >= get_remote_packet_size ())
2853     result_limit = (get_remote_packet_size () / BUF_THREAD_ID_SIZE) - 2;
2854
2855   pack_threadlist_request (rs->buf, startflag, result_limit, nextthread);
2856   putpkt (rs->buf);
2857   getpkt (&rs->buf, &rs->buf_size, 0);
2858   if (*rs->buf == '\0')
2859     {
2860       /* Packet not supported.  */
2861       return -1;
2862     }
2863
2864   *result_count =
2865     parse_threadlist_response (rs->buf + 2, result_limit,
2866                                &rs->echo_nextthread, threadlist, done);
2867
2868   if (!threadmatch (&rs->echo_nextthread, nextthread))
2869     {
2870       /* FIXME: This is a good reason to drop the packet.  */
2871       /* Possably, there is a duplicate response.  */
2872       /* Possabilities :
2873          retransmit immediatly - race conditions
2874          retransmit after timeout - yes
2875          exit
2876          wait for packet, then exit
2877        */
2878       warning (_("HMM: threadlist did not echo arg thread, dropping it."));
2879       return 0;                 /* I choose simply exiting.  */
2880     }
2881   if (*result_count <= 0)
2882     {
2883       if (*done != 1)
2884         {
2885           warning (_("RMT ERROR : failed to get remote thread list."));
2886           result = 0;
2887         }
2888       return result;            /* break; */
2889     }
2890   if (*result_count > result_limit)
2891     {
2892       *result_count = 0;
2893       warning (_("RMT ERROR: threadlist response longer than requested."));
2894       return 0;
2895     }
2896   return result;
2897 }
2898
2899 /* Fetch the list of remote threads, with the qL packet, and call
2900    STEPFUNCTION for each thread found.  Stops iterating and returns 1
2901    if STEPFUNCTION returns true.  Stops iterating and returns 0 if the
2902    STEPFUNCTION returns false.  If the packet is not supported,
2903    returns -1.  */
2904
2905 static int
2906 remote_threadlist_iterator (rmt_thread_action stepfunction, void *context,
2907                             int looplimit)
2908 {
2909   struct remote_state *rs = get_remote_state ();
2910   int done, i, result_count;
2911   int startflag = 1;
2912   int result = 1;
2913   int loopcount = 0;
2914
2915   done = 0;
2916   while (!done)
2917     {
2918       if (loopcount++ > looplimit)
2919         {
2920           result = 0;
2921           warning (_("Remote fetch threadlist -infinite loop-."));
2922           break;
2923         }
2924       result = remote_get_threadlist (startflag, &rs->nextthread,
2925                                       MAXTHREADLISTRESULTS,
2926                                       &done, &result_count,
2927                                       rs->resultthreadlist);
2928       if (result <= 0)
2929         break;
2930       /* Clear for later iterations.  */
2931       startflag = 0;
2932       /* Setup to resume next batch of thread references, set nextthread.  */
2933       if (result_count >= 1)
2934         copy_threadref (&rs->nextthread,
2935                         &rs->resultthreadlist[result_count - 1]);
2936       i = 0;
2937       while (result_count--)
2938         {
2939           if (!(*stepfunction) (&rs->resultthreadlist[i++], context))
2940             {
2941               result = 0;
2942               break;
2943             }
2944         }
2945     }
2946   return result;
2947 }
2948
2949 /* A thread found on the remote target.  */
2950
2951 struct thread_item
2952 {
2953   explicit thread_item (ptid_t ptid_)
2954   : ptid (ptid_)
2955   {}
2956
2957   thread_item (thread_item &&other) = default;
2958   thread_item &operator= (thread_item &&other) = default;
2959
2960   DISABLE_COPY_AND_ASSIGN (thread_item);
2961
2962   /* The thread's PTID.  */
2963   ptid_t ptid;
2964
2965   /* The thread's extra info.  */
2966   std::string extra;
2967
2968   /* The thread's name.  */
2969   std::string name;
2970
2971   /* The core the thread was running on.  -1 if not known.  */
2972   int core = -1;
2973
2974   /* The thread handle associated with the thread.  */
2975   gdb::byte_vector thread_handle;
2976 };
2977
2978 /* Context passed around to the various methods listing remote
2979    threads.  As new threads are found, they're added to the ITEMS
2980    vector.  */
2981
2982 struct threads_listing_context
2983 {
2984   /* Return true if this object contains an entry for a thread with ptid
2985      PTID.  */
2986
2987   bool contains_thread (ptid_t ptid) const
2988   {
2989     auto match_ptid = [&] (const thread_item &item)
2990       {
2991         return item.ptid == ptid;
2992       };
2993
2994     auto it = std::find_if (this->items.begin (),
2995                             this->items.end (),
2996                             match_ptid);
2997
2998     return it != this->items.end ();
2999   }
3000
3001   /* Remove the thread with ptid PTID.  */
3002
3003   void remove_thread (ptid_t ptid)
3004   {
3005     auto match_ptid = [&] (const thread_item &item)
3006       {
3007         return item.ptid == ptid;
3008       };
3009
3010     auto it = std::remove_if (this->items.begin (),
3011                               this->items.end (),
3012                               match_ptid);
3013
3014     if (it != this->items.end ())
3015       this->items.erase (it);
3016   }
3017
3018   /* The threads found on the remote target.  */
3019   std::vector<thread_item> items;
3020 };
3021
3022 static int
3023 remote_newthread_step (threadref *ref, void *data)
3024 {
3025   struct threads_listing_context *context
3026     = (struct threads_listing_context *) data;
3027   int pid = inferior_ptid.pid ();
3028   int lwp = threadref_to_int (ref);
3029   ptid_t ptid (pid, lwp);
3030
3031   context->items.emplace_back (ptid);
3032
3033   return 1;                     /* continue iterator */
3034 }
3035
3036 #define CRAZY_MAX_THREADS 1000
3037
3038 static ptid_t
3039 remote_current_thread (ptid_t oldpid)
3040 {
3041   struct remote_state *rs = get_remote_state ();
3042
3043   putpkt ("qC");
3044   getpkt (&rs->buf, &rs->buf_size, 0);
3045   if (rs->buf[0] == 'Q' && rs->buf[1] == 'C')
3046     {
3047       const char *obuf;
3048       ptid_t result;
3049
3050       result = read_ptid (&rs->buf[2], &obuf);
3051       if (*obuf != '\0' && remote_debug)
3052         fprintf_unfiltered (gdb_stdlog,
3053                             "warning: garbage in qC reply\n");
3054
3055       return result;
3056     }
3057   else
3058     return oldpid;
3059 }
3060
3061 /* List remote threads using the deprecated qL packet.  */
3062
3063 static int
3064 remote_get_threads_with_ql (struct target_ops *ops,
3065                             struct threads_listing_context *context)
3066 {
3067   if (remote_threadlist_iterator (remote_newthread_step, context,
3068                                   CRAZY_MAX_THREADS) >= 0)
3069     return 1;
3070
3071   return 0;
3072 }
3073
3074 #if defined(HAVE_LIBEXPAT)
3075
3076 static void
3077 start_thread (struct gdb_xml_parser *parser,
3078               const struct gdb_xml_element *element,
3079               void *user_data, VEC(gdb_xml_value_s) *attributes)
3080 {
3081   struct threads_listing_context *data
3082     = (struct threads_listing_context *) user_data;
3083   struct gdb_xml_value *attr;
3084
3085   char *id = (char *) xml_find_attribute (attributes, "id")->value;
3086   ptid_t ptid = read_ptid (id, NULL);
3087
3088   data->items.emplace_back (ptid);
3089   thread_item &item = data->items.back ();
3090
3091   attr = xml_find_attribute (attributes, "core");
3092   if (attr != NULL)
3093     item.core = *(ULONGEST *) attr->value;
3094
3095   attr = xml_find_attribute (attributes, "name");
3096   if (attr != NULL)
3097     item.name = (const char *) attr->value;
3098
3099   attr = xml_find_attribute (attributes, "handle");
3100   if (attr != NULL)
3101     item.thread_handle = hex2bin ((const char *) attr->value);
3102 }
3103
3104 static void
3105 end_thread (struct gdb_xml_parser *parser,
3106             const struct gdb_xml_element *element,
3107             void *user_data, const char *body_text)
3108 {
3109   struct threads_listing_context *data
3110     = (struct threads_listing_context *) user_data;
3111
3112   if (body_text != NULL && *body_text != '\0')
3113     data->items.back ().extra = body_text;
3114 }
3115
3116 const struct gdb_xml_attribute thread_attributes[] = {
3117   { "id", GDB_XML_AF_NONE, NULL, NULL },
3118   { "core", GDB_XML_AF_OPTIONAL, gdb_xml_parse_attr_ulongest, NULL },
3119   { "name", GDB_XML_AF_OPTIONAL, NULL, NULL },
3120   { "handle", GDB_XML_AF_OPTIONAL, NULL, NULL },
3121   { NULL, GDB_XML_AF_NONE, NULL, NULL }
3122 };
3123
3124 const struct gdb_xml_element thread_children[] = {
3125   { NULL, NULL, NULL, GDB_XML_EF_NONE, NULL, NULL }
3126 };
3127
3128 const struct gdb_xml_element threads_children[] = {
3129   { "thread", thread_attributes, thread_children,
3130     GDB_XML_EF_REPEATABLE | GDB_XML_EF_OPTIONAL,
3131     start_thread, end_thread },
3132   { NULL, NULL, NULL, GDB_XML_EF_NONE, NULL, NULL }
3133 };
3134
3135 const struct gdb_xml_element threads_elements[] = {
3136   { "threads", NULL, threads_children,
3137     GDB_XML_EF_NONE, NULL, NULL },
3138   { NULL, NULL, NULL, GDB_XML_EF_NONE, NULL, NULL }
3139 };
3140
3141 #endif
3142
3143 /* List remote threads using qXfer:threads:read.  */
3144
3145 static int
3146 remote_get_threads_with_qxfer (struct target_ops *ops,
3147                                struct threads_listing_context *context)
3148 {
3149 #if defined(HAVE_LIBEXPAT)
3150   if (packet_support (PACKET_qXfer_threads) == PACKET_ENABLE)
3151     {
3152       gdb::unique_xmalloc_ptr<char> xml
3153         = target_read_stralloc (ops, TARGET_OBJECT_THREADS, NULL);
3154
3155       if (xml != NULL && *xml != '\0')
3156         {
3157           gdb_xml_parse_quick (_("threads"), "threads.dtd",
3158                                threads_elements, xml.get (), context);
3159         }
3160
3161       return 1;
3162     }
3163 #endif
3164
3165   return 0;
3166 }
3167
3168 /* List remote threads using qfThreadInfo/qsThreadInfo.  */
3169
3170 static int
3171 remote_get_threads_with_qthreadinfo (struct target_ops *ops,
3172                                      struct threads_listing_context *context)
3173 {
3174   struct remote_state *rs = get_remote_state ();
3175
3176   if (rs->use_threadinfo_query)
3177     {
3178       const char *bufp;
3179
3180       putpkt ("qfThreadInfo");
3181       getpkt (&rs->buf, &rs->buf_size, 0);
3182       bufp = rs->buf;
3183       if (bufp[0] != '\0')              /* q packet recognized */
3184         {
3185           while (*bufp++ == 'm')        /* reply contains one or more TID */
3186             {
3187               do
3188                 {
3189                   ptid_t ptid = read_ptid (bufp, &bufp);
3190                   context->items.emplace_back (ptid);
3191                 }
3192               while (*bufp++ == ',');   /* comma-separated list */
3193               putpkt ("qsThreadInfo");
3194               getpkt (&rs->buf, &rs->buf_size, 0);
3195               bufp = rs->buf;
3196             }
3197           return 1;
3198         }
3199       else
3200         {
3201           /* Packet not recognized.  */
3202           rs->use_threadinfo_query = 0;
3203         }
3204     }
3205
3206   return 0;
3207 }
3208
3209 /* Implement the to_update_thread_list function for the remote
3210    targets.  */
3211
3212 static void
3213 remote_update_thread_list (struct target_ops *ops)
3214 {
3215   struct threads_listing_context context;
3216   int got_list = 0;
3217
3218   /* We have a few different mechanisms to fetch the thread list.  Try
3219      them all, starting with the most preferred one first, falling
3220      back to older methods.  */
3221   if (remote_get_threads_with_qxfer (ops, &context)
3222       || remote_get_threads_with_qthreadinfo (ops, &context)
3223       || remote_get_threads_with_ql (ops, &context))
3224     {
3225       int i;
3226       struct thread_info *tp, *tmp;
3227
3228       got_list = 1;
3229
3230       if (context.items.empty ()
3231           && remote_thread_always_alive (ops, inferior_ptid))
3232         {
3233           /* Some targets don't really support threads, but still
3234              reply an (empty) thread list in response to the thread
3235              listing packets, instead of replying "packet not
3236              supported".  Exit early so we don't delete the main
3237              thread.  */
3238           return;
3239         }
3240
3241       /* CONTEXT now holds the current thread list on the remote
3242          target end.  Delete GDB-side threads no longer found on the
3243          target.  */
3244       ALL_THREADS_SAFE (tp, tmp)
3245         {
3246           if (!context.contains_thread (tp->ptid))
3247             {
3248               /* Not found.  */
3249               delete_thread (tp->ptid);
3250             }
3251         }
3252
3253       /* Remove any unreported fork child threads from CONTEXT so
3254          that we don't interfere with follow fork, which is where
3255          creation of such threads is handled.  */
3256       remove_new_fork_children (&context);
3257
3258       /* And now add threads we don't know about yet to our list.  */
3259       for (thread_item &item : context.items)
3260         {
3261           if (item.ptid != null_ptid)
3262             {
3263               /* In non-stop mode, we assume new found threads are
3264                  executing until proven otherwise with a stop reply.
3265                  In all-stop, we can only get here if all threads are
3266                  stopped.  */
3267               int executing = target_is_non_stop_p () ? 1 : 0;
3268
3269               remote_notice_new_inferior (item.ptid, executing);
3270
3271               remote_thread_info *info = get_remote_thread_info (item.ptid);
3272               info->core = item.core;
3273               info->extra = std::move (item.extra);
3274               info->name = std::move (item.name);
3275               info->thread_handle = std::move (item.thread_handle);
3276             }
3277         }
3278     }
3279
3280   if (!got_list)
3281     {
3282       /* If no thread listing method is supported, then query whether
3283          each known thread is alive, one by one, with the T packet.
3284          If the target doesn't support threads at all, then this is a
3285          no-op.  See remote_thread_alive.  */
3286       prune_threads ();
3287     }
3288 }
3289
3290 /*
3291  * Collect a descriptive string about the given thread.
3292  * The target may say anything it wants to about the thread
3293  * (typically info about its blocked / runnable state, name, etc.).
3294  * This string will appear in the info threads display.
3295  *
3296  * Optional: targets are not required to implement this function.
3297  */
3298
3299 static const char *
3300 remote_threads_extra_info (struct target_ops *self, struct thread_info *tp)
3301 {
3302   struct remote_state *rs = get_remote_state ();
3303   int result;
3304   int set;
3305   threadref id;
3306   struct gdb_ext_thread_info threadinfo;
3307   static char display_buf[100]; /* arbitrary...  */
3308   int n = 0;                    /* position in display_buf */
3309
3310   if (rs->remote_desc == 0)             /* paranoia */
3311     internal_error (__FILE__, __LINE__,
3312                     _("remote_threads_extra_info"));
3313
3314   if (ptid_equal (tp->ptid, magic_null_ptid)
3315       || (ptid_get_pid (tp->ptid) != 0 && ptid_get_lwp (tp->ptid) == 0))
3316     /* This is the main thread which was added by GDB.  The remote
3317        server doesn't know about it.  */
3318     return NULL;
3319
3320   if (packet_support (PACKET_qXfer_threads) == PACKET_ENABLE)
3321     {
3322       struct thread_info *info = find_thread_ptid (tp->ptid);
3323
3324       if (info != NULL && info->priv != NULL)
3325         return get_remote_thread_info (info)->extra.c_str ();
3326       else
3327         return NULL;
3328     }
3329
3330   if (rs->use_threadextra_query)
3331     {
3332       char *b = rs->buf;
3333       char *endb = rs->buf + get_remote_packet_size ();
3334
3335       xsnprintf (b, endb - b, "qThreadExtraInfo,");
3336       b += strlen (b);
3337       write_ptid (b, endb, tp->ptid);
3338
3339       putpkt (rs->buf);
3340       getpkt (&rs->buf, &rs->buf_size, 0);
3341       if (rs->buf[0] != 0)
3342         {
3343           n = std::min (strlen (rs->buf) / 2, sizeof (display_buf));
3344           result = hex2bin (rs->buf, (gdb_byte *) display_buf, n);
3345           display_buf [result] = '\0';
3346           return display_buf;
3347         }
3348     }
3349
3350   /* If the above query fails, fall back to the old method.  */
3351   rs->use_threadextra_query = 0;
3352   set = TAG_THREADID | TAG_EXISTS | TAG_THREADNAME
3353     | TAG_MOREDISPLAY | TAG_DISPLAY;
3354   int_to_threadref (&id, ptid_get_lwp (tp->ptid));
3355   if (remote_get_threadinfo (&id, set, &threadinfo))
3356     if (threadinfo.active)
3357       {
3358         if (*threadinfo.shortname)
3359           n += xsnprintf (&display_buf[0], sizeof (display_buf) - n,
3360                           " Name: %s,", threadinfo.shortname);
3361         if (*threadinfo.display)
3362           n += xsnprintf (&display_buf[n], sizeof (display_buf) - n,
3363                           " State: %s,", threadinfo.display);
3364         if (*threadinfo.more_display)
3365           n += xsnprintf (&display_buf[n], sizeof (display_buf) - n,
3366                           " Priority: %s", threadinfo.more_display);
3367
3368         if (n > 0)
3369           {
3370             /* For purely cosmetic reasons, clear up trailing commas.  */
3371             if (',' == display_buf[n-1])
3372               display_buf[n-1] = ' ';
3373             return display_buf;
3374           }
3375       }
3376   return NULL;
3377 }
3378 \f
3379
3380 static int
3381 remote_static_tracepoint_marker_at (struct target_ops *self, CORE_ADDR addr,
3382                                     struct static_tracepoint_marker *marker)
3383 {
3384   struct remote_state *rs = get_remote_state ();
3385   char *p = rs->buf;
3386
3387   xsnprintf (p, get_remote_packet_size (), "qTSTMat:");
3388   p += strlen (p);
3389   p += hexnumstr (p, addr);
3390   putpkt (rs->buf);
3391   getpkt (&rs->buf, &rs->buf_size, 0);
3392   p = rs->buf;
3393
3394   if (*p == 'E')
3395     error (_("Remote failure reply: %s"), p);
3396
3397   if (*p++ == 'm')
3398     {
3399       parse_static_tracepoint_marker_definition (p, NULL, marker);
3400       return 1;
3401     }
3402
3403   return 0;
3404 }
3405
3406 static VEC(static_tracepoint_marker_p) *
3407 remote_static_tracepoint_markers_by_strid (struct target_ops *self,
3408                                            const char *strid)
3409 {
3410   struct remote_state *rs = get_remote_state ();
3411   VEC(static_tracepoint_marker_p) *markers = NULL;
3412   struct static_tracepoint_marker *marker = NULL;
3413   struct cleanup *old_chain;
3414   const char *p;
3415
3416   /* Ask for a first packet of static tracepoint marker
3417      definition.  */
3418   putpkt ("qTfSTM");
3419   getpkt (&rs->buf, &rs->buf_size, 0);
3420   p = rs->buf;
3421   if (*p == 'E')
3422     error (_("Remote failure reply: %s"), p);
3423
3424   old_chain = make_cleanup (free_current_marker, &marker);
3425
3426   while (*p++ == 'm')
3427     {
3428       if (marker == NULL)
3429         marker = XCNEW (struct static_tracepoint_marker);
3430
3431       do
3432         {
3433           parse_static_tracepoint_marker_definition (p, &p, marker);
3434
3435           if (strid == NULL || strcmp (strid, marker->str_id) == 0)
3436             {
3437               VEC_safe_push (static_tracepoint_marker_p,
3438                              markers, marker);
3439               marker = NULL;
3440             }
3441           else
3442             {
3443               release_static_tracepoint_marker (marker);
3444               memset (marker, 0, sizeof (*marker));
3445             }
3446         }
3447       while (*p++ == ',');      /* comma-separated list */
3448       /* Ask for another packet of static tracepoint definition.  */
3449       putpkt ("qTsSTM");
3450       getpkt (&rs->buf, &rs->buf_size, 0);
3451       p = rs->buf;
3452     }
3453
3454   do_cleanups (old_chain);
3455   return markers;
3456 }
3457
3458 \f
3459 /* Implement the to_get_ada_task_ptid function for the remote targets.  */
3460
3461 static ptid_t
3462 remote_get_ada_task_ptid (struct target_ops *self, long lwp, long thread)
3463 {
3464   return ptid_build (ptid_get_pid (inferior_ptid), lwp, 0);
3465 }
3466 \f
3467
3468 /* Restart the remote side; this is an extended protocol operation.  */
3469
3470 static void
3471 extended_remote_restart (void)
3472 {
3473   struct remote_state *rs = get_remote_state ();
3474
3475   /* Send the restart command; for reasons I don't understand the
3476      remote side really expects a number after the "R".  */
3477   xsnprintf (rs->buf, get_remote_packet_size (), "R%x", 0);
3478   putpkt (rs->buf);
3479
3480   remote_fileio_reset ();
3481 }
3482 \f
3483 /* Clean up connection to a remote debugger.  */
3484
3485 static void
3486 remote_close (struct target_ops *self)
3487 {
3488   struct remote_state *rs = get_remote_state ();
3489
3490   if (rs->remote_desc == NULL)
3491     return; /* already closed */
3492
3493   /* Make sure we leave stdin registered in the event loop.  */
3494   remote_terminal_ours (self);
3495
3496   serial_close (rs->remote_desc);
3497   rs->remote_desc = NULL;
3498
3499   /* We don't have a connection to the remote stub anymore.  Get rid
3500      of all the inferiors and their threads we were controlling.
3501      Reset inferior_ptid to null_ptid first, as otherwise has_stack_frame
3502      will be unable to find the thread corresponding to (pid, 0, 0).  */
3503   inferior_ptid = null_ptid;
3504   discard_all_inferiors ();
3505
3506   /* We are closing the remote target, so we should discard
3507      everything of this target.  */
3508   discard_pending_stop_replies_in_queue (rs);
3509
3510   if (remote_async_inferior_event_token)
3511     delete_async_event_handler (&remote_async_inferior_event_token);
3512
3513   remote_notif_state_xfree (rs->notif_state);
3514
3515   trace_reset_local_state ();
3516 }
3517
3518 /* Query the remote side for the text, data and bss offsets.  */
3519
3520 static void
3521 get_offsets (void)
3522 {
3523   struct remote_state *rs = get_remote_state ();
3524   char *buf;
3525   char *ptr;
3526   int lose, num_segments = 0, do_sections, do_segments;
3527   CORE_ADDR text_addr, data_addr, bss_addr, segments[2];
3528   struct section_offsets *offs;
3529   struct symfile_segment_data *data;
3530
3531   if (symfile_objfile == NULL)
3532     return;
3533
3534   putpkt ("qOffsets");
3535   getpkt (&rs->buf, &rs->buf_size, 0);
3536   buf = rs->buf;
3537
3538   if (buf[0] == '\000')
3539     return;                     /* Return silently.  Stub doesn't support
3540                                    this command.  */
3541   if (buf[0] == 'E')
3542     {
3543       warning (_("Remote failure reply: %s"), buf);
3544       return;
3545     }
3546
3547   /* Pick up each field in turn.  This used to be done with scanf, but
3548      scanf will make trouble if CORE_ADDR size doesn't match
3549      conversion directives correctly.  The following code will work
3550      with any size of CORE_ADDR.  */
3551   text_addr = data_addr = bss_addr = 0;
3552   ptr = buf;
3553   lose = 0;
3554
3555   if (startswith (ptr, "Text="))
3556     {
3557       ptr += 5;
3558       /* Don't use strtol, could lose on big values.  */
3559       while (*ptr && *ptr != ';')
3560         text_addr = (text_addr << 4) + fromhex (*ptr++);
3561
3562       if (startswith (ptr, ";Data="))
3563         {
3564           ptr += 6;
3565           while (*ptr && *ptr != ';')
3566             data_addr = (data_addr << 4) + fromhex (*ptr++);
3567         }
3568       else
3569         lose = 1;
3570
3571       if (!lose && startswith (ptr, ";Bss="))
3572         {
3573           ptr += 5;
3574           while (*ptr && *ptr != ';')
3575             bss_addr = (bss_addr << 4) + fromhex (*ptr++);
3576
3577           if (bss_addr != data_addr)
3578             warning (_("Target reported unsupported offsets: %s"), buf);
3579         }
3580       else
3581         lose = 1;
3582     }
3583   else if (startswith (ptr, "TextSeg="))
3584     {
3585       ptr += 8;
3586       /* Don't use strtol, could lose on big values.  */
3587       while (*ptr && *ptr != ';')
3588         text_addr = (text_addr << 4) + fromhex (*ptr++);
3589       num_segments = 1;
3590
3591       if (startswith (ptr, ";DataSeg="))
3592         {
3593           ptr += 9;
3594           while (*ptr && *ptr != ';')
3595             data_addr = (data_addr << 4) + fromhex (*ptr++);
3596           num_segments++;
3597         }
3598     }
3599   else
3600     lose = 1;
3601
3602   if (lose)
3603     error (_("Malformed response to offset query, %s"), buf);
3604   else if (*ptr != '\0')
3605     warning (_("Target reported unsupported offsets: %s"), buf);
3606
3607   offs = ((struct section_offsets *)
3608           alloca (SIZEOF_N_SECTION_OFFSETS (symfile_objfile->num_sections)));
3609   memcpy (offs, symfile_objfile->section_offsets,
3610           SIZEOF_N_SECTION_OFFSETS (symfile_objfile->num_sections));
3611
3612   data = get_symfile_segment_data (symfile_objfile->obfd);
3613   do_segments = (data != NULL);
3614   do_sections = num_segments == 0;
3615
3616   if (num_segments > 0)
3617     {
3618       segments[0] = text_addr;
3619       segments[1] = data_addr;
3620     }
3621   /* If we have two segments, we can still try to relocate everything
3622      by assuming that the .text and .data offsets apply to the whole
3623      text and data segments.  Convert the offsets given in the packet
3624      to base addresses for symfile_map_offsets_to_segments.  */
3625   else if (data && data->num_segments == 2)
3626     {
3627       segments[0] = data->segment_bases[0] + text_addr;
3628       segments[1] = data->segment_bases[1] + data_addr;
3629       num_segments = 2;
3630     }
3631   /* If the object file has only one segment, assume that it is text
3632      rather than data; main programs with no writable data are rare,
3633      but programs with no code are useless.  Of course the code might
3634      have ended up in the data segment... to detect that we would need
3635      the permissions here.  */
3636   else if (data && data->num_segments == 1)
3637     {
3638       segments[0] = data->segment_bases[0] + text_addr;
3639       num_segments = 1;
3640     }
3641   /* There's no way to relocate by segment.  */
3642   else
3643     do_segments = 0;
3644
3645   if (do_segments)
3646     {
3647       int ret = symfile_map_offsets_to_segments (symfile_objfile->obfd, data,
3648                                                  offs, num_segments, segments);
3649
3650       if (ret == 0 && !do_sections)
3651         error (_("Can not handle qOffsets TextSeg "
3652                  "response with this symbol file"));
3653
3654       if (ret > 0)
3655         do_sections = 0;
3656     }
3657
3658   if (data)
3659     free_symfile_segment_data (data);
3660
3661   if (do_sections)
3662     {
3663       offs->offsets[SECT_OFF_TEXT (symfile_objfile)] = text_addr;
3664
3665       /* This is a temporary kludge to force data and bss to use the
3666          same offsets because that's what nlmconv does now.  The real
3667          solution requires changes to the stub and remote.c that I
3668          don't have time to do right now.  */
3669
3670       offs->offsets[SECT_OFF_DATA (symfile_objfile)] = data_addr;
3671       offs->offsets[SECT_OFF_BSS (symfile_objfile)] = data_addr;
3672     }
3673
3674   objfile_relocate (symfile_objfile, offs);
3675 }
3676
3677 /* Send interrupt_sequence to remote target.  */
3678 static void
3679 send_interrupt_sequence (void)
3680 {
3681   struct remote_state *rs = get_remote_state ();
3682
3683   if (interrupt_sequence_mode == interrupt_sequence_control_c)
3684     remote_serial_write ("\x03", 1);
3685   else if (interrupt_sequence_mode == interrupt_sequence_break)
3686     serial_send_break (rs->remote_desc);
3687   else if (interrupt_sequence_mode == interrupt_sequence_break_g)
3688     {
3689       serial_send_break (rs->remote_desc);
3690       remote_serial_write ("g", 1);
3691     }
3692   else
3693     internal_error (__FILE__, __LINE__,
3694                     _("Invalid value for interrupt_sequence_mode: %s."),
3695                     interrupt_sequence_mode);
3696 }
3697
3698
3699 /* If STOP_REPLY is a T stop reply, look for the "thread" register,
3700    and extract the PTID.  Returns NULL_PTID if not found.  */
3701
3702 static ptid_t
3703 stop_reply_extract_thread (char *stop_reply)
3704 {
3705   if (stop_reply[0] == 'T' && strlen (stop_reply) > 3)
3706     {
3707       const char *p;
3708
3709       /* Txx r:val ; r:val (...)  */
3710       p = &stop_reply[3];
3711
3712       /* Look for "register" named "thread".  */
3713       while (*p != '\0')
3714         {
3715           const char *p1;
3716
3717           p1 = strchr (p, ':');
3718           if (p1 == NULL)
3719             return null_ptid;
3720
3721           if (strncmp (p, "thread", p1 - p) == 0)
3722             return read_ptid (++p1, &p);
3723
3724           p1 = strchr (p, ';');
3725           if (p1 == NULL)
3726             return null_ptid;
3727           p1++;
3728
3729           p = p1;
3730         }
3731     }
3732
3733   return null_ptid;
3734 }
3735
3736 /* Determine the remote side's current thread.  If we have a stop
3737    reply handy (in WAIT_STATUS), maybe it's a T stop reply with a
3738    "thread" register we can extract the current thread from.  If not,
3739    ask the remote which is the current thread with qC.  The former
3740    method avoids a roundtrip.  */
3741
3742 static ptid_t
3743 get_current_thread (char *wait_status)
3744 {
3745   ptid_t ptid = null_ptid;
3746
3747   /* Note we don't use remote_parse_stop_reply as that makes use of
3748      the target architecture, which we haven't yet fully determined at
3749      this point.  */
3750   if (wait_status != NULL)
3751     ptid = stop_reply_extract_thread (wait_status);
3752   if (ptid_equal (ptid, null_ptid))
3753     ptid = remote_current_thread (inferior_ptid);
3754
3755   return ptid;
3756 }
3757
3758 /* Query the remote target for which is the current thread/process,
3759    add it to our tables, and update INFERIOR_PTID.  The caller is
3760    responsible for setting the state such that the remote end is ready
3761    to return the current thread.
3762
3763    This function is called after handling the '?' or 'vRun' packets,
3764    whose response is a stop reply from which we can also try
3765    extracting the thread.  If the target doesn't support the explicit
3766    qC query, we infer the current thread from that stop reply, passed
3767    in in WAIT_STATUS, which may be NULL.  */
3768
3769 static void
3770 add_current_inferior_and_thread (char *wait_status)
3771 {
3772   struct remote_state *rs = get_remote_state ();
3773   int fake_pid_p = 0;
3774
3775   inferior_ptid = null_ptid;
3776
3777   /* Now, if we have thread information, update inferior_ptid.  */
3778   ptid_t curr_ptid = get_current_thread (wait_status);
3779
3780   if (curr_ptid != null_ptid)
3781     {
3782       if (!remote_multi_process_p (rs))
3783         fake_pid_p = 1;
3784     }
3785   else
3786     {
3787       /* Without this, some commands which require an active target
3788          (such as kill) won't work.  This variable serves (at least)
3789          double duty as both the pid of the target process (if it has
3790          such), and as a flag indicating that a target is active.  */
3791       curr_ptid = magic_null_ptid;
3792       fake_pid_p = 1;
3793     }
3794
3795   remote_add_inferior (fake_pid_p, ptid_get_pid (curr_ptid), -1, 1);
3796
3797   /* Add the main thread and switch to it.  Don't try reading
3798      registers yet, since we haven't fetched the target description
3799      yet.  */
3800   thread_info *tp = add_thread_silent (curr_ptid);
3801   switch_to_thread_no_regs (tp);
3802 }
3803
3804 /* Print info about a thread that was found already stopped on
3805    connection.  */
3806
3807 static void
3808 print_one_stopped_thread (struct thread_info *thread)
3809 {
3810   struct target_waitstatus *ws = &thread->suspend.waitstatus;
3811
3812   switch_to_thread (thread->ptid);
3813   stop_pc = get_frame_pc (get_current_frame ());
3814   set_current_sal_from_frame (get_current_frame ());
3815
3816   thread->suspend.waitstatus_pending_p = 0;
3817
3818   if (ws->kind == TARGET_WAITKIND_STOPPED)
3819     {
3820       enum gdb_signal sig = ws->value.sig;
3821
3822       if (signal_print_state (sig))
3823         observer_notify_signal_received (sig);
3824     }
3825   observer_notify_normal_stop (NULL, 1);
3826 }
3827
3828 /* Process all initial stop replies the remote side sent in response
3829    to the ? packet.  These indicate threads that were already stopped
3830    on initial connection.  We mark these threads as stopped and print
3831    their current frame before giving the user the prompt.  */
3832
3833 static void
3834 process_initial_stop_replies (int from_tty)
3835 {
3836   int pending_stop_replies = stop_reply_queue_length ();
3837   struct inferior *inf;
3838   struct thread_info *thread;
3839   struct thread_info *selected = NULL;
3840   struct thread_info *lowest_stopped = NULL;
3841   struct thread_info *first = NULL;
3842
3843   /* Consume the initial pending events.  */
3844   while (pending_stop_replies-- > 0)
3845     {
3846       ptid_t waiton_ptid = minus_one_ptid;
3847       ptid_t event_ptid;
3848       struct target_waitstatus ws;
3849       int ignore_event = 0;
3850       struct thread_info *thread;
3851
3852       memset (&ws, 0, sizeof (ws));
3853       event_ptid = target_wait (waiton_ptid, &ws, TARGET_WNOHANG);
3854       if (remote_debug)
3855         print_target_wait_results (waiton_ptid, event_ptid, &ws);
3856
3857       switch (ws.kind)
3858         {
3859         case TARGET_WAITKIND_IGNORE:
3860         case TARGET_WAITKIND_NO_RESUMED:
3861         case TARGET_WAITKIND_SIGNALLED:
3862         case TARGET_WAITKIND_EXITED:
3863           /* We shouldn't see these, but if we do, just ignore.  */
3864           if (remote_debug)
3865             fprintf_unfiltered (gdb_stdlog, "remote: event ignored\n");
3866           ignore_event = 1;
3867           break;
3868
3869         case TARGET_WAITKIND_EXECD:
3870           xfree (ws.value.execd_pathname);
3871           break;
3872         default:
3873           break;
3874         }
3875
3876       if (ignore_event)
3877         continue;
3878
3879       thread = find_thread_ptid (event_ptid);
3880
3881       if (ws.kind == TARGET_WAITKIND_STOPPED)
3882         {
3883           enum gdb_signal sig = ws.value.sig;
3884
3885           /* Stubs traditionally report SIGTRAP as initial signal,
3886              instead of signal 0.  Suppress it.  */
3887           if (sig == GDB_SIGNAL_TRAP)
3888             sig = GDB_SIGNAL_0;
3889           thread->suspend.stop_signal = sig;
3890           ws.value.sig = sig;
3891         }
3892
3893       thread->suspend.waitstatus = ws;
3894
3895       if (ws.kind != TARGET_WAITKIND_STOPPED
3896           || ws.value.sig != GDB_SIGNAL_0)
3897         thread->suspend.waitstatus_pending_p = 1;
3898
3899       set_executing (event_ptid, 0);
3900       set_running (event_ptid, 0);
3901       get_remote_thread_info (thread)->vcont_resumed = 0;
3902     }
3903
3904   /* "Notice" the new inferiors before anything related to
3905      registers/memory.  */
3906   ALL_INFERIORS (inf)
3907     {
3908       if (inf->pid == 0)
3909         continue;
3910
3911       inf->needs_setup = 1;
3912
3913       if (non_stop)
3914         {
3915           thread = any_live_thread_of_process (inf->pid);
3916           notice_new_inferior (thread->ptid,
3917                                thread->state == THREAD_RUNNING,
3918                                from_tty);
3919         }
3920     }
3921
3922   /* If all-stop on top of non-stop, pause all threads.  Note this
3923      records the threads' stop pc, so must be done after "noticing"
3924      the inferiors.  */
3925   if (!non_stop)
3926     {
3927       stop_all_threads ();
3928
3929       /* If all threads of an inferior were already stopped, we
3930          haven't setup the inferior yet.  */
3931       ALL_INFERIORS (inf)
3932         {
3933           if (inf->pid == 0)
3934             continue;
3935
3936           if (inf->needs_setup)
3937             {
3938               thread = any_live_thread_of_process (inf->pid);
3939               switch_to_thread_no_regs (thread);
3940               setup_inferior (0);
3941             }
3942         }
3943     }
3944
3945   /* Now go over all threads that are stopped, and print their current
3946      frame.  If all-stop, then if there's a signalled thread, pick
3947      that as current.  */
3948   ALL_NON_EXITED_THREADS (thread)
3949     {
3950       if (first == NULL)
3951         first = thread;
3952
3953       if (!non_stop)
3954         set_running (thread->ptid, 0);
3955       else if (thread->state != THREAD_STOPPED)
3956         continue;
3957
3958       if (selected == NULL
3959           && thread->suspend.waitstatus_pending_p)
3960         selected = thread;
3961
3962       if (lowest_stopped == NULL
3963           || thread->inf->num < lowest_stopped->inf->num
3964           || thread->per_inf_num < lowest_stopped->per_inf_num)
3965         lowest_stopped = thread;
3966
3967       if (non_stop)
3968         print_one_stopped_thread (thread);
3969     }
3970
3971   /* In all-stop, we only print the status of one thread, and leave
3972      others with their status pending.  */
3973   if (!non_stop)
3974     {
3975       thread = selected;
3976       if (thread == NULL)
3977         thread = lowest_stopped;
3978       if (thread == NULL)
3979         thread = first;
3980
3981       print_one_stopped_thread (thread);
3982     }
3983
3984   /* For "info program".  */
3985   thread = inferior_thread ();
3986   if (thread->state == THREAD_STOPPED)
3987     set_last_target_status (inferior_ptid, thread->suspend.waitstatus);
3988 }
3989
3990 /* Start the remote connection and sync state.  */
3991
3992 static void
3993 remote_start_remote (int from_tty, struct target_ops *target, int extended_p)
3994 {
3995   struct remote_state *rs = get_remote_state ();
3996   struct packet_config *noack_config;
3997   char *wait_status = NULL;
3998
3999   /* Signal other parts that we're going through the initial setup,
4000      and so things may not be stable yet.  E.g., we don't try to
4001      install tracepoints until we've relocated symbols.  Also, a
4002      Ctrl-C before we're connected and synced up can't interrupt the
4003      target.  Instead, it offers to drop the (potentially wedged)
4004      connection.  */
4005   rs->starting_up = 1;
4006
4007   QUIT;
4008
4009   if (interrupt_on_connect)
4010     send_interrupt_sequence ();
4011
4012   /* Ack any packet which the remote side has already sent.  */
4013   remote_serial_write ("+", 1);
4014
4015   /* The first packet we send to the target is the optional "supported
4016      packets" request.  If the target can answer this, it will tell us
4017      which later probes to skip.  */
4018   remote_query_supported ();
4019
4020   /* If the stub wants to get a QAllow, compose one and send it.  */
4021   if (packet_support (PACKET_QAllow) != PACKET_DISABLE)
4022     remote_set_permissions (target);
4023
4024   /* gdbserver < 7.7 (before its fix from 2013-12-11) did reply to any
4025      unknown 'v' packet with string "OK".  "OK" gets interpreted by GDB
4026      as a reply to known packet.  For packet "vFile:setfs:" it is an
4027      invalid reply and GDB would return error in
4028      remote_hostio_set_filesystem, making remote files access impossible.
4029      Disable "vFile:setfs:" in such case.  Do not disable other 'v' packets as
4030      other "vFile" packets get correctly detected even on gdbserver < 7.7.  */
4031   {
4032     const char v_mustreplyempty[] = "vMustReplyEmpty";
4033
4034     putpkt (v_mustreplyempty);
4035     getpkt (&rs->buf, &rs->buf_size, 0);
4036     if (strcmp (rs->buf, "OK") == 0)
4037       remote_protocol_packets[PACKET_vFile_setfs].support = PACKET_DISABLE;
4038     else if (strcmp (rs->buf, "") != 0)
4039       error (_("Remote replied unexpectedly to '%s': %s"), v_mustreplyempty,
4040              rs->buf);
4041   }
4042
4043   /* Next, we possibly activate noack mode.
4044
4045      If the QStartNoAckMode packet configuration is set to AUTO,
4046      enable noack mode if the stub reported a wish for it with
4047      qSupported.
4048
4049      If set to TRUE, then enable noack mode even if the stub didn't
4050      report it in qSupported.  If the stub doesn't reply OK, the
4051      session ends with an error.
4052
4053      If FALSE, then don't activate noack mode, regardless of what the
4054      stub claimed should be the default with qSupported.  */
4055
4056   noack_config = &remote_protocol_packets[PACKET_QStartNoAckMode];
4057   if (packet_config_support (noack_config) != PACKET_DISABLE)
4058     {
4059       putpkt ("QStartNoAckMode");
4060       getpkt (&rs->buf, &rs->buf_size, 0);
4061       if (packet_ok (rs->buf, noack_config) == PACKET_OK)
4062         rs->noack_mode = 1;
4063     }
4064
4065   if (extended_p)
4066     {
4067       /* Tell the remote that we are using the extended protocol.  */
4068       putpkt ("!");
4069       getpkt (&rs->buf, &rs->buf_size, 0);
4070     }
4071
4072   /* Let the target know which signals it is allowed to pass down to
4073      the program.  */
4074   update_signals_program_target ();
4075
4076   /* Next, if the target can specify a description, read it.  We do
4077      this before anything involving memory or registers.  */
4078   target_find_description ();
4079
4080   /* Next, now that we know something about the target, update the
4081      address spaces in the program spaces.  */
4082   update_address_spaces ();
4083
4084   /* On OSs where the list of libraries is global to all
4085      processes, we fetch them early.  */
4086   if (gdbarch_has_global_solist (target_gdbarch ()))
4087     solib_add (NULL, from_tty, auto_solib_add);
4088
4089   if (target_is_non_stop_p ())
4090     {
4091       if (packet_support (PACKET_QNonStop) != PACKET_ENABLE)
4092         error (_("Non-stop mode requested, but remote "
4093                  "does not support non-stop"));
4094
4095       putpkt ("QNonStop:1");
4096       getpkt (&rs->buf, &rs->buf_size, 0);
4097
4098       if (strcmp (rs->buf, "OK") != 0)
4099         error (_("Remote refused setting non-stop mode with: %s"), rs->buf);
4100
4101       /* Find about threads and processes the stub is already
4102          controlling.  We default to adding them in the running state.
4103          The '?' query below will then tell us about which threads are
4104          stopped.  */
4105       remote_update_thread_list (target);
4106     }
4107   else if (packet_support (PACKET_QNonStop) == PACKET_ENABLE)
4108     {
4109       /* Don't assume that the stub can operate in all-stop mode.
4110          Request it explicitly.  */
4111       putpkt ("QNonStop:0");
4112       getpkt (&rs->buf, &rs->buf_size, 0);
4113
4114       if (strcmp (rs->buf, "OK") != 0)
4115         error (_("Remote refused setting all-stop mode with: %s"), rs->buf);
4116     }
4117
4118   /* Upload TSVs regardless of whether the target is running or not.  The
4119      remote stub, such as GDBserver, may have some predefined or builtin
4120      TSVs, even if the target is not running.  */
4121   if (remote_get_trace_status (target, current_trace_status ()) != -1)
4122     {
4123       struct uploaded_tsv *uploaded_tsvs = NULL;
4124
4125       remote_upload_trace_state_variables (target, &uploaded_tsvs);
4126       merge_uploaded_trace_state_variables (&uploaded_tsvs);
4127     }
4128
4129   /* Check whether the target is running now.  */
4130   putpkt ("?");
4131   getpkt (&rs->buf, &rs->buf_size, 0);
4132
4133   if (!target_is_non_stop_p ())
4134     {
4135       if (rs->buf[0] == 'W' || rs->buf[0] == 'X')
4136         {
4137           if (!extended_p)
4138             error (_("The target is not running (try extended-remote?)"));
4139
4140           /* We're connected, but not running.  Drop out before we
4141              call start_remote.  */
4142           rs->starting_up = 0;
4143           return;
4144         }
4145       else
4146         {
4147           /* Save the reply for later.  */
4148           wait_status = (char *) alloca (strlen (rs->buf) + 1);
4149           strcpy (wait_status, rs->buf);
4150         }
4151
4152       /* Fetch thread list.  */
4153       target_update_thread_list ();
4154
4155       /* Let the stub know that we want it to return the thread.  */
4156       set_continue_thread (minus_one_ptid);
4157
4158       if (thread_count () == 0)
4159         {
4160           /* Target has no concept of threads at all.  GDB treats
4161              non-threaded target as single-threaded; add a main
4162              thread.  */
4163           add_current_inferior_and_thread (wait_status);
4164         }
4165       else
4166         {
4167           /* We have thread information; select the thread the target
4168              says should be current.  If we're reconnecting to a
4169              multi-threaded program, this will ideally be the thread
4170              that last reported an event before GDB disconnected.  */
4171           inferior_ptid = get_current_thread (wait_status);
4172           if (ptid_equal (inferior_ptid, null_ptid))
4173             {
4174               /* Odd... The target was able to list threads, but not
4175                  tell us which thread was current (no "thread"
4176                  register in T stop reply?).  Just pick the first
4177                  thread in the thread list then.  */
4178               
4179               if (remote_debug)
4180                 fprintf_unfiltered (gdb_stdlog,
4181                                     "warning: couldn't determine remote "
4182                                     "current thread; picking first in list.\n");
4183
4184               inferior_ptid = thread_list->ptid;
4185             }
4186         }
4187
4188       /* init_wait_for_inferior should be called before get_offsets in order
4189          to manage `inserted' flag in bp loc in a correct state.
4190          breakpoint_init_inferior, called from init_wait_for_inferior, set
4191          `inserted' flag to 0, while before breakpoint_re_set, called from
4192          start_remote, set `inserted' flag to 1.  In the initialization of
4193          inferior, breakpoint_init_inferior should be called first, and then
4194          breakpoint_re_set can be called.  If this order is broken, state of
4195          `inserted' flag is wrong, and cause some problems on breakpoint
4196          manipulation.  */
4197       init_wait_for_inferior ();
4198
4199       get_offsets ();           /* Get text, data & bss offsets.  */
4200
4201       /* If we could not find a description using qXfer, and we know
4202          how to do it some other way, try again.  This is not
4203          supported for non-stop; it could be, but it is tricky if
4204          there are no stopped threads when we connect.  */
4205       if (remote_read_description_p (target)
4206           && gdbarch_target_desc (target_gdbarch ()) == NULL)
4207         {
4208           target_clear_description ();
4209           target_find_description ();
4210         }
4211
4212       /* Use the previously fetched status.  */
4213       gdb_assert (wait_status != NULL);
4214       strcpy (rs->buf, wait_status);
4215       rs->cached_wait_status = 1;
4216
4217       start_remote (from_tty); /* Initialize gdb process mechanisms.  */
4218     }
4219   else
4220     {
4221       /* Clear WFI global state.  Do this before finding about new
4222          threads and inferiors, and setting the current inferior.
4223          Otherwise we would clear the proceed status of the current
4224          inferior when we want its stop_soon state to be preserved
4225          (see notice_new_inferior).  */
4226       init_wait_for_inferior ();
4227
4228       /* In non-stop, we will either get an "OK", meaning that there
4229          are no stopped threads at this time; or, a regular stop
4230          reply.  In the latter case, there may be more than one thread
4231          stopped --- we pull them all out using the vStopped
4232          mechanism.  */
4233       if (strcmp (rs->buf, "OK") != 0)
4234         {
4235           struct notif_client *notif = &notif_client_stop;
4236
4237           /* remote_notif_get_pending_replies acks this one, and gets
4238              the rest out.  */
4239           rs->notif_state->pending_event[notif_client_stop.id]
4240             = remote_notif_parse (notif, rs->buf);
4241           remote_notif_get_pending_events (notif);
4242         }
4243
4244       if (thread_count () == 0)
4245         {
4246           if (!extended_p)
4247             error (_("The target is not running (try extended-remote?)"));
4248
4249           /* We're connected, but not running.  Drop out before we
4250              call start_remote.  */
4251           rs->starting_up = 0;
4252           return;
4253         }
4254
4255       /* In non-stop mode, any cached wait status will be stored in
4256          the stop reply queue.  */
4257       gdb_assert (wait_status == NULL);
4258
4259       /* Report all signals during attach/startup.  */
4260       remote_pass_signals (target, 0, NULL);
4261
4262       /* If there are already stopped threads, mark them stopped and
4263          report their stops before giving the prompt to the user.  */
4264       process_initial_stop_replies (from_tty);
4265
4266       if (target_can_async_p ())
4267         target_async (1);
4268     }
4269
4270   /* If we connected to a live target, do some additional setup.  */
4271   if (target_has_execution)
4272     {
4273       if (symfile_objfile)      /* No use without a symbol-file.  */
4274         remote_check_symbols ();
4275     }
4276
4277   /* Possibly the target has been engaged in a trace run started
4278      previously; find out where things are at.  */
4279   if (remote_get_trace_status (target, current_trace_status ()) != -1)
4280     {
4281       struct uploaded_tp *uploaded_tps = NULL;
4282
4283       if (current_trace_status ()->running)
4284         printf_filtered (_("Trace is already running on the target.\n"));
4285
4286       remote_upload_tracepoints (target, &uploaded_tps);
4287
4288       merge_uploaded_tracepoints (&uploaded_tps);
4289     }
4290
4291   /* Possibly the target has been engaged in a btrace record started
4292      previously; find out where things are at.  */
4293   remote_btrace_maybe_reopen ();
4294
4295   /* The thread and inferior lists are now synchronized with the
4296      target, our symbols have been relocated, and we're merged the
4297      target's tracepoints with ours.  We're done with basic start
4298      up.  */
4299   rs->starting_up = 0;
4300
4301   /* Maybe breakpoints are global and need to be inserted now.  */
4302   if (breakpoints_should_be_inserted_now ())
4303     insert_breakpoints ();
4304 }
4305
4306 /* Open a connection to a remote debugger.
4307    NAME is the filename used for communication.  */
4308
4309 static void
4310 remote_open (const char *name, int from_tty)
4311 {
4312   remote_open_1 (name, from_tty, &remote_ops, 0);
4313 }
4314
4315 /* Open a connection to a remote debugger using the extended
4316    remote gdb protocol.  NAME is the filename used for communication.  */
4317
4318 static void
4319 extended_remote_open (const char *name, int from_tty)
4320 {
4321   remote_open_1 (name, from_tty, &extended_remote_ops, 1 /*extended_p */);
4322 }
4323
4324 /* Reset all packets back to "unknown support".  Called when opening a
4325    new connection to a remote target.  */
4326
4327 static void
4328 reset_all_packet_configs_support (void)
4329 {
4330   int i;
4331
4332   for (i = 0; i < PACKET_MAX; i++)
4333     remote_protocol_packets[i].support = PACKET_SUPPORT_UNKNOWN;
4334 }
4335
4336 /* Initialize all packet configs.  */
4337
4338 static void
4339 init_all_packet_configs (void)
4340 {
4341   int i;
4342
4343   for (i = 0; i < PACKET_MAX; i++)
4344     {
4345       remote_protocol_packets[i].detect = AUTO_BOOLEAN_AUTO;
4346       remote_protocol_packets[i].support = PACKET_SUPPORT_UNKNOWN;
4347     }
4348 }
4349
4350 /* Symbol look-up.  */
4351
4352 static void
4353 remote_check_symbols (void)
4354 {
4355   struct remote_state *rs = get_remote_state ();
4356   char *msg, *reply, *tmp;
4357   int end;
4358   long reply_size;
4359   struct cleanup *old_chain;
4360
4361   /* The remote side has no concept of inferiors that aren't running
4362      yet, it only knows about running processes.  If we're connected
4363      but our current inferior is not running, we should not invite the
4364      remote target to request symbol lookups related to its
4365      (unrelated) current process.  */
4366   if (!target_has_execution)
4367     return;
4368
4369   if (packet_support (PACKET_qSymbol) == PACKET_DISABLE)
4370     return;
4371
4372   /* Make sure the remote is pointing at the right process.  Note
4373      there's no way to select "no process".  */
4374   set_general_process ();
4375
4376   /* Allocate a message buffer.  We can't reuse the input buffer in RS,
4377      because we need both at the same time.  */
4378   msg = (char *) xmalloc (get_remote_packet_size ());
4379   old_chain = make_cleanup (xfree, msg);
4380   reply = (char *) xmalloc (get_remote_packet_size ());
4381   make_cleanup (free_current_contents, &reply);
4382   reply_size = get_remote_packet_size ();
4383
4384   /* Invite target to request symbol lookups.  */
4385
4386   putpkt ("qSymbol::");
4387   getpkt (&reply, &reply_size, 0);
4388   packet_ok (reply, &remote_protocol_packets[PACKET_qSymbol]);
4389
4390   while (startswith (reply, "qSymbol:"))
4391     {
4392       struct bound_minimal_symbol sym;
4393
4394       tmp = &reply[8];
4395       end = hex2bin (tmp, (gdb_byte *) msg, strlen (tmp) / 2);
4396       msg[end] = '\0';
4397       sym = lookup_minimal_symbol (msg, NULL, NULL);
4398       if (sym.minsym == NULL)
4399         xsnprintf (msg, get_remote_packet_size (), "qSymbol::%s", &reply[8]);
4400       else
4401         {
4402           int addr_size = gdbarch_addr_bit (target_gdbarch ()) / 8;
4403           CORE_ADDR sym_addr = BMSYMBOL_VALUE_ADDRESS (sym);
4404
4405           /* If this is a function address, return the start of code
4406              instead of any data function descriptor.  */
4407           sym_addr = gdbarch_convert_from_func_ptr_addr (target_gdbarch (),
4408                                                          sym_addr,
4409                                                          &current_target);
4410
4411           xsnprintf (msg, get_remote_packet_size (), "qSymbol:%s:%s",
4412                      phex_nz (sym_addr, addr_size), &reply[8]);
4413         }
4414   
4415       putpkt (msg);
4416       getpkt (&reply, &reply_size, 0);
4417     }
4418
4419   do_cleanups (old_chain);
4420 }
4421
4422 static struct serial *
4423 remote_serial_open (const char *name)
4424 {
4425   static int udp_warning = 0;
4426
4427   /* FIXME: Parsing NAME here is a hack.  But we want to warn here instead
4428      of in ser-tcp.c, because it is the remote protocol assuming that the
4429      serial connection is reliable and not the serial connection promising
4430      to be.  */
4431   if (!udp_warning && startswith (name, "udp:"))
4432     {
4433       warning (_("The remote protocol may be unreliable over UDP.\n"
4434                  "Some events may be lost, rendering further debugging "
4435                  "impossible."));
4436       udp_warning = 1;
4437     }
4438
4439   return serial_open (name);
4440 }
4441
4442 /* Inform the target of our permission settings.  The permission flags
4443    work without this, but if the target knows the settings, it can do
4444    a couple things.  First, it can add its own check, to catch cases
4445    that somehow manage to get by the permissions checks in target
4446    methods.  Second, if the target is wired to disallow particular
4447    settings (for instance, a system in the field that is not set up to
4448    be able to stop at a breakpoint), it can object to any unavailable
4449    permissions.  */
4450
4451 void
4452 remote_set_permissions (struct target_ops *self)
4453 {
4454   struct remote_state *rs = get_remote_state ();
4455
4456   xsnprintf (rs->buf, get_remote_packet_size (), "QAllow:"
4457              "WriteReg:%x;WriteMem:%x;"
4458              "InsertBreak:%x;InsertTrace:%x;"
4459              "InsertFastTrace:%x;Stop:%x",
4460              may_write_registers, may_write_memory,
4461              may_insert_breakpoints, may_insert_tracepoints,
4462              may_insert_fast_tracepoints, may_stop);
4463   putpkt (rs->buf);
4464   getpkt (&rs->buf, &rs->buf_size, 0);
4465
4466   /* If the target didn't like the packet, warn the user.  Do not try
4467      to undo the user's settings, that would just be maddening.  */
4468   if (strcmp (rs->buf, "OK") != 0)
4469     warning (_("Remote refused setting permissions with: %s"), rs->buf);
4470 }
4471
4472 /* This type describes each known response to the qSupported
4473    packet.  */
4474 struct protocol_feature
4475 {
4476   /* The name of this protocol feature.  */
4477   const char *name;
4478
4479   /* The default for this protocol feature.  */
4480   enum packet_support default_support;
4481
4482   /* The function to call when this feature is reported, or after
4483      qSupported processing if the feature is not supported.
4484      The first argument points to this structure.  The second
4485      argument indicates whether the packet requested support be
4486      enabled, disabled, or probed (or the default, if this function
4487      is being called at the end of processing and this feature was
4488      not reported).  The third argument may be NULL; if not NULL, it
4489      is a NUL-terminated string taken from the packet following
4490      this feature's name and an equals sign.  */
4491   void (*func) (const struct protocol_feature *, enum packet_support,
4492                 const char *);
4493
4494   /* The corresponding packet for this feature.  Only used if
4495      FUNC is remote_supported_packet.  */
4496   int packet;
4497 };
4498
4499 static void
4500 remote_supported_packet (const struct protocol_feature *feature,
4501                          enum packet_support support,
4502                          const char *argument)
4503 {
4504   if (argument)
4505     {
4506       warning (_("Remote qSupported response supplied an unexpected value for"
4507                  " \"%s\"."), feature->name);
4508       return;
4509     }
4510
4511   remote_protocol_packets[feature->packet].support = support;
4512 }
4513
4514 static void
4515 remote_packet_size (const struct protocol_feature *feature,
4516                     enum packet_support support, const char *value)
4517 {
4518   struct remote_state *rs = get_remote_state ();
4519
4520   int packet_size;
4521   char *value_end;
4522
4523   if (support != PACKET_ENABLE)
4524     return;
4525
4526   if (value == NULL || *value == '\0')
4527     {
4528       warning (_("Remote target reported \"%s\" without a size."),
4529                feature->name);
4530       return;
4531     }
4532
4533   errno = 0;
4534   packet_size = strtol (value, &value_end, 16);
4535   if (errno != 0 || *value_end != '\0' || packet_size < 0)
4536     {
4537       warning (_("Remote target reported \"%s\" with a bad size: \"%s\"."),
4538                feature->name, value);
4539       return;
4540     }
4541
4542   /* Record the new maximum packet size.  */
4543   rs->explicit_packet_size = packet_size;
4544 }
4545
4546 static const struct protocol_feature remote_protocol_features[] = {
4547   { "PacketSize", PACKET_DISABLE, remote_packet_size, -1 },
4548   { "qXfer:auxv:read", PACKET_DISABLE, remote_supported_packet,
4549     PACKET_qXfer_auxv },
4550   { "qXfer:exec-file:read", PACKET_DISABLE, remote_supported_packet,
4551     PACKET_qXfer_exec_file },
4552   { "qXfer:features:read", PACKET_DISABLE, remote_supported_packet,
4553     PACKET_qXfer_features },
4554   { "qXfer:libraries:read", PACKET_DISABLE, remote_supported_packet,
4555     PACKET_qXfer_libraries },
4556   { "qXfer:libraries-svr4:read", PACKET_DISABLE, remote_supported_packet,
4557     PACKET_qXfer_libraries_svr4 },
4558   { "augmented-libraries-svr4-read", PACKET_DISABLE,
4559     remote_supported_packet, PACKET_augmented_libraries_svr4_read_feature },
4560   { "qXfer:memory-map:read", PACKET_DISABLE, remote_supported_packet,
4561     PACKET_qXfer_memory_map },
4562   { "qXfer:spu:read", PACKET_DISABLE, remote_supported_packet,
4563     PACKET_qXfer_spu_read },
4564   { "qXfer:spu:write", PACKET_DISABLE, remote_supported_packet,
4565     PACKET_qXfer_spu_write },
4566   { "qXfer:osdata:read", PACKET_DISABLE, remote_supported_packet,
4567     PACKET_qXfer_osdata },
4568   { "qXfer:threads:read", PACKET_DISABLE, remote_supported_packet,
4569     PACKET_qXfer_threads },
4570   { "qXfer:traceframe-info:read", PACKET_DISABLE, remote_supported_packet,
4571     PACKET_qXfer_traceframe_info },
4572   { "QPassSignals", PACKET_DISABLE, remote_supported_packet,
4573     PACKET_QPassSignals },
4574   { "QCatchSyscalls", PACKET_DISABLE, remote_supported_packet,
4575     PACKET_QCatchSyscalls },
4576   { "QProgramSignals", PACKET_DISABLE, remote_supported_packet,
4577     PACKET_QProgramSignals },
4578   { "QSetWorkingDir", PACKET_DISABLE, remote_supported_packet,
4579     PACKET_QSetWorkingDir },
4580   { "QStartupWithShell", PACKET_DISABLE, remote_supported_packet,
4581     PACKET_QStartupWithShell },
4582   { "QEnvironmentHexEncoded", PACKET_DISABLE, remote_supported_packet,
4583     PACKET_QEnvironmentHexEncoded },
4584   { "QEnvironmentReset", PACKET_DISABLE, remote_supported_packet,
4585     PACKET_QEnvironmentReset },
4586   { "QEnvironmentUnset", PACKET_DISABLE, remote_supported_packet,
4587     PACKET_QEnvironmentUnset },
4588   { "QStartNoAckMode", PACKET_DISABLE, remote_supported_packet,
4589     PACKET_QStartNoAckMode },
4590   { "multiprocess", PACKET_DISABLE, remote_supported_packet,
4591     PACKET_multiprocess_feature },
4592   { "QNonStop", PACKET_DISABLE, remote_supported_packet, PACKET_QNonStop },
4593   { "qXfer:siginfo:read", PACKET_DISABLE, remote_supported_packet,
4594     PACKET_qXfer_siginfo_read },
4595   { "qXfer:siginfo:write", PACKET_DISABLE, remote_supported_packet,
4596     PACKET_qXfer_siginfo_write },
4597   { "ConditionalTracepoints", PACKET_DISABLE, remote_supported_packet,
4598     PACKET_ConditionalTracepoints },
4599   { "ConditionalBreakpoints", PACKET_DISABLE, remote_supported_packet,
4600     PACKET_ConditionalBreakpoints },
4601   { "BreakpointCommands", PACKET_DISABLE, remote_supported_packet,
4602     PACKET_BreakpointCommands },
4603   { "FastTracepoints", PACKET_DISABLE, remote_supported_packet,
4604     PACKET_FastTracepoints },
4605   { "StaticTracepoints", PACKET_DISABLE, remote_supported_packet,
4606     PACKET_StaticTracepoints },
4607   {"InstallInTrace", PACKET_DISABLE, remote_supported_packet,
4608    PACKET_InstallInTrace},
4609   { "DisconnectedTracing", PACKET_DISABLE, remote_supported_packet,
4610     PACKET_DisconnectedTracing_feature },
4611   { "ReverseContinue", PACKET_DISABLE, remote_supported_packet,
4612     PACKET_bc },
4613   { "ReverseStep", PACKET_DISABLE, remote_supported_packet,
4614     PACKET_bs },
4615   { "TracepointSource", PACKET_DISABLE, remote_supported_packet,
4616     PACKET_TracepointSource },
4617   { "QAllow", PACKET_DISABLE, remote_supported_packet,
4618     PACKET_QAllow },
4619   { "EnableDisableTracepoints", PACKET_DISABLE, remote_supported_packet,
4620     PACKET_EnableDisableTracepoints_feature },
4621   { "qXfer:fdpic:read", PACKET_DISABLE, remote_supported_packet,
4622     PACKET_qXfer_fdpic },
4623   { "qXfer:uib:read", PACKET_DISABLE, remote_supported_packet,
4624     PACKET_qXfer_uib },
4625   { "QDisableRandomization", PACKET_DISABLE, remote_supported_packet,
4626     PACKET_QDisableRandomization },
4627   { "QAgent", PACKET_DISABLE, remote_supported_packet, PACKET_QAgent},
4628   { "QTBuffer:size", PACKET_DISABLE,
4629     remote_supported_packet, PACKET_QTBuffer_size},
4630   { "tracenz", PACKET_DISABLE, remote_supported_packet, PACKET_tracenz_feature },
4631   { "Qbtrace:off", PACKET_DISABLE, remote_supported_packet, PACKET_Qbtrace_off },
4632   { "Qbtrace:bts", PACKET_DISABLE, remote_supported_packet, PACKET_Qbtrace_bts },
4633   { "Qbtrace:pt", PACKET_DISABLE, remote_supported_packet, PACKET_Qbtrace_pt },
4634   { "qXfer:btrace:read", PACKET_DISABLE, remote_supported_packet,
4635     PACKET_qXfer_btrace },
4636   { "qXfer:btrace-conf:read", PACKET_DISABLE, remote_supported_packet,
4637     PACKET_qXfer_btrace_conf },
4638   { "Qbtrace-conf:bts:size", PACKET_DISABLE, remote_supported_packet,
4639     PACKET_Qbtrace_conf_bts_size },
4640   { "swbreak", PACKET_DISABLE, remote_supported_packet, PACKET_swbreak_feature },
4641   { "hwbreak", PACKET_DISABLE, remote_supported_packet, PACKET_hwbreak_feature },
4642   { "fork-events", PACKET_DISABLE, remote_supported_packet,
4643     PACKET_fork_event_feature },
4644   { "vfork-events", PACKET_DISABLE, remote_supported_packet,
4645     PACKET_vfork_event_feature },
4646   { "exec-events", PACKET_DISABLE, remote_supported_packet,
4647     PACKET_exec_event_feature },
4648   { "Qbtrace-conf:pt:size", PACKET_DISABLE, remote_supported_packet,
4649     PACKET_Qbtrace_conf_pt_size },
4650   { "vContSupported", PACKET_DISABLE, remote_supported_packet, PACKET_vContSupported },
4651   { "QThreadEvents", PACKET_DISABLE, remote_supported_packet, PACKET_QThreadEvents },
4652   { "no-resumed", PACKET_DISABLE, remote_supported_packet, PACKET_no_resumed },
4653 };
4654
4655 static char *remote_support_xml;
4656
4657 /* Register string appended to "xmlRegisters=" in qSupported query.  */
4658
4659 void
4660 register_remote_support_xml (const char *xml)
4661 {
4662 #if defined(HAVE_LIBEXPAT)
4663   if (remote_support_xml == NULL)
4664     remote_support_xml = concat ("xmlRegisters=", xml, (char *) NULL);
4665   else
4666     {
4667       char *copy = xstrdup (remote_support_xml + 13);
4668       char *p = strtok (copy, ",");
4669
4670       do
4671         {
4672           if (strcmp (p, xml) == 0)
4673             {
4674               /* already there */
4675               xfree (copy);
4676               return;
4677             }
4678         }
4679       while ((p = strtok (NULL, ",")) != NULL);
4680       xfree (copy);
4681
4682       remote_support_xml = reconcat (remote_support_xml,
4683                                      remote_support_xml, ",", xml,
4684                                      (char *) NULL);
4685     }
4686 #endif
4687 }
4688
4689 static char *
4690 remote_query_supported_append (char *msg, const char *append)
4691 {
4692   if (msg)
4693     return reconcat (msg, msg, ";", append, (char *) NULL);
4694   else
4695     return xstrdup (append);
4696 }
4697
4698 static void
4699 remote_query_supported (void)
4700 {
4701   struct remote_state *rs = get_remote_state ();
4702   char *next;
4703   int i;
4704   unsigned char seen [ARRAY_SIZE (remote_protocol_features)];
4705
4706   /* The packet support flags are handled differently for this packet
4707      than for most others.  We treat an error, a disabled packet, and
4708      an empty response identically: any features which must be reported
4709      to be used will be automatically disabled.  An empty buffer
4710      accomplishes this, since that is also the representation for a list
4711      containing no features.  */
4712
4713   rs->buf[0] = 0;
4714   if (packet_support (PACKET_qSupported) != PACKET_DISABLE)
4715     {
4716       char *q = NULL;
4717       struct cleanup *old_chain = make_cleanup (free_current_contents, &q);
4718
4719       if (packet_set_cmd_state (PACKET_multiprocess_feature) != AUTO_BOOLEAN_FALSE)
4720         q = remote_query_supported_append (q, "multiprocess+");
4721
4722       if (packet_set_cmd_state (PACKET_swbreak_feature) != AUTO_BOOLEAN_FALSE)
4723         q = remote_query_supported_append (q, "swbreak+");
4724       if (packet_set_cmd_state (PACKET_hwbreak_feature) != AUTO_BOOLEAN_FALSE)
4725         q = remote_query_supported_append (q, "hwbreak+");
4726
4727       q = remote_query_supported_append (q, "qRelocInsn+");
4728
4729       if (packet_set_cmd_state (PACKET_fork_event_feature)
4730           != AUTO_BOOLEAN_FALSE)
4731         q = remote_query_supported_append (q, "fork-events+");
4732       if (packet_set_cmd_state (PACKET_vfork_event_feature)
4733           != AUTO_BOOLEAN_FALSE)
4734         q = remote_query_supported_append (q, "vfork-events+");
4735       if (packet_set_cmd_state (PACKET_exec_event_feature)
4736           != AUTO_BOOLEAN_FALSE)
4737         q = remote_query_supported_append (q, "exec-events+");
4738
4739       if (packet_set_cmd_state (PACKET_vContSupported) != AUTO_BOOLEAN_FALSE)
4740         q = remote_query_supported_append (q, "vContSupported+");
4741
4742       if (packet_set_cmd_state (PACKET_QThreadEvents) != AUTO_BOOLEAN_FALSE)
4743         q = remote_query_supported_append (q, "QThreadEvents+");
4744
4745       if (packet_set_cmd_state (PACKET_no_resumed) != AUTO_BOOLEAN_FALSE)
4746         q = remote_query_supported_append (q, "no-resumed+");
4747
4748       /* Keep this one last to work around a gdbserver <= 7.10 bug in
4749          the qSupported:xmlRegisters=i386 handling.  */
4750       if (remote_support_xml != NULL)
4751         q = remote_query_supported_append (q, remote_support_xml);
4752
4753       q = reconcat (q, "qSupported:", q, (char *) NULL);
4754       putpkt (q);
4755
4756       do_cleanups (old_chain);
4757
4758       getpkt (&rs->buf, &rs->buf_size, 0);
4759
4760       /* If an error occured, warn, but do not return - just reset the
4761          buffer to empty and go on to disable features.  */
4762       if (packet_ok (rs->buf, &remote_protocol_packets[PACKET_qSupported])
4763           == PACKET_ERROR)
4764         {
4765           warning (_("Remote failure reply: %s"), rs->buf);
4766           rs->buf[0] = 0;
4767         }
4768     }
4769
4770   memset (seen, 0, sizeof (seen));
4771
4772   next = rs->buf;
4773   while (*next)
4774     {
4775       enum packet_support is_supported;
4776       char *p, *end, *name_end, *value;
4777
4778       /* First separate out this item from the rest of the packet.  If
4779          there's another item after this, we overwrite the separator
4780          (terminated strings are much easier to work with).  */
4781       p = next;
4782       end = strchr (p, ';');
4783       if (end == NULL)
4784         {
4785           end = p + strlen (p);
4786           next = end;
4787         }
4788       else
4789         {
4790           *end = '\0';
4791           next = end + 1;
4792
4793           if (end == p)
4794             {
4795               warning (_("empty item in \"qSupported\" response"));
4796               continue;
4797             }
4798         }
4799
4800       name_end = strchr (p, '=');
4801       if (name_end)
4802         {
4803           /* This is a name=value entry.  */
4804           is_supported = PACKET_ENABLE;
4805           value = name_end + 1;
4806           *name_end = '\0';
4807         }
4808       else
4809         {
4810           value = NULL;
4811           switch (end[-1])
4812             {
4813             case '+':
4814               is_supported = PACKET_ENABLE;
4815               break;
4816
4817             case '-':
4818               is_supported = PACKET_DISABLE;
4819               break;
4820
4821             case '?':
4822               is_supported = PACKET_SUPPORT_UNKNOWN;
4823               break;
4824
4825             default:
4826               warning (_("unrecognized item \"%s\" "
4827                          "in \"qSupported\" response"), p);
4828               continue;
4829             }
4830           end[-1] = '\0';
4831         }
4832
4833       for (i = 0; i < ARRAY_SIZE (remote_protocol_features); i++)
4834         if (strcmp (remote_protocol_features[i].name, p) == 0)
4835           {
4836             const struct protocol_feature *feature;
4837
4838             seen[i] = 1;
4839             feature = &remote_protocol_features[i];
4840             feature->func (feature, is_supported, value);
4841             break;
4842           }
4843     }
4844
4845   /* If we increased the packet size, make sure to increase the global
4846      buffer size also.  We delay this until after parsing the entire
4847      qSupported packet, because this is the same buffer we were
4848      parsing.  */
4849   if (rs->buf_size < rs->explicit_packet_size)
4850     {
4851       rs->buf_size = rs->explicit_packet_size;
4852       rs->buf = (char *) xrealloc (rs->buf, rs->buf_size);
4853     }
4854
4855   /* Handle the defaults for unmentioned features.  */
4856   for (i = 0; i < ARRAY_SIZE (remote_protocol_features); i++)
4857     if (!seen[i])
4858       {
4859         const struct protocol_feature *feature;
4860
4861         feature = &remote_protocol_features[i];
4862         feature->func (feature, feature->default_support, NULL);
4863       }
4864 }
4865
4866 /* Serial QUIT handler for the remote serial descriptor.
4867
4868    Defers handling a Ctrl-C until we're done with the current
4869    command/response packet sequence, unless:
4870
4871    - We're setting up the connection.  Don't send a remote interrupt
4872      request, as we're not fully synced yet.  Quit immediately
4873      instead.
4874
4875    - The target has been resumed in the foreground
4876      (target_terminal::is_ours is false) with a synchronous resume
4877      packet, and we're blocked waiting for the stop reply, thus a
4878      Ctrl-C should be immediately sent to the target.
4879
4880    - We get a second Ctrl-C while still within the same serial read or
4881      write.  In that case the serial is seemingly wedged --- offer to
4882      quit/disconnect.
4883
4884    - We see a second Ctrl-C without target response, after having
4885      previously interrupted the target.  In that case the target/stub
4886      is probably wedged --- offer to quit/disconnect.
4887 */
4888
4889 static void
4890 remote_serial_quit_handler (void)
4891 {
4892   struct remote_state *rs = get_remote_state ();
4893
4894   if (check_quit_flag ())
4895     {
4896       /* If we're starting up, we're not fully synced yet.  Quit
4897          immediately.  */
4898       if (rs->starting_up)
4899         quit ();
4900       else if (rs->got_ctrlc_during_io)
4901         {
4902           if (query (_("The target is not responding to GDB commands.\n"
4903                        "Stop debugging it? ")))
4904             remote_unpush_and_throw ();
4905         }
4906       /* If ^C has already been sent once, offer to disconnect.  */
4907       else if (!target_terminal::is_ours () && rs->ctrlc_pending_p)
4908         interrupt_query ();
4909       /* All-stop protocol, and blocked waiting for stop reply.  Send
4910          an interrupt request.  */
4911       else if (!target_terminal::is_ours () && rs->waiting_for_stop_reply)
4912         target_interrupt (inferior_ptid);
4913       else
4914         rs->got_ctrlc_during_io = 1;
4915     }
4916 }
4917
4918 /* Remove any of the remote.c targets from target stack.  Upper targets depend
4919    on it so remove them first.  */
4920
4921 static void
4922 remote_unpush_target (void)
4923 {
4924   pop_all_targets_at_and_above (process_stratum);
4925 }
4926
4927 static void
4928 remote_unpush_and_throw (void)
4929 {
4930   remote_unpush_target ();
4931   throw_error (TARGET_CLOSE_ERROR, _("Disconnected from target."));
4932 }
4933
4934 static void
4935 remote_open_1 (const char *name, int from_tty,
4936                struct target_ops *target, int extended_p)
4937 {
4938   struct remote_state *rs = get_remote_state ();
4939
4940   if (name == 0)
4941     error (_("To open a remote debug connection, you need to specify what\n"
4942            "serial device is attached to the remote system\n"
4943            "(e.g. /dev/ttyS0, /dev/ttya, COM1, etc.)."));
4944
4945   /* See FIXME above.  */
4946   if (!target_async_permitted)
4947     wait_forever_enabled_p = 1;
4948
4949   /* If we're connected to a running target, target_preopen will kill it.
4950      Ask this question first, before target_preopen has a chance to kill
4951      anything.  */
4952   if (rs->remote_desc != NULL && !have_inferiors ())
4953     {
4954       if (from_tty
4955           && !query (_("Already connected to a remote target.  Disconnect? ")))
4956         error (_("Still connected."));
4957     }
4958
4959   /* Here the possibly existing remote target gets unpushed.  */
4960   target_preopen (from_tty);
4961
4962   /* Make sure we send the passed signals list the next time we resume.  */
4963   xfree (rs->last_pass_packet);
4964   rs->last_pass_packet = NULL;
4965
4966   /* Make sure we send the program signals list the next time we
4967      resume.  */
4968   xfree (rs->last_program_signals_packet);
4969   rs->last_program_signals_packet = NULL;
4970
4971   remote_fileio_reset ();
4972   reopen_exec_file ();
4973   reread_symbols ();
4974
4975   rs->remote_desc = remote_serial_open (name);
4976   if (!rs->remote_desc)
4977     perror_with_name (name);
4978
4979   if (baud_rate != -1)
4980     {
4981       if (serial_setbaudrate (rs->remote_desc, baud_rate))
4982         {
4983           /* The requested speed could not be set.  Error out to
4984              top level after closing remote_desc.  Take care to
4985              set remote_desc to NULL to avoid closing remote_desc
4986              more than once.  */
4987           serial_close (rs->remote_desc);
4988           rs->remote_desc = NULL;
4989           perror_with_name (name);
4990         }
4991     }
4992
4993   serial_setparity (rs->remote_desc, serial_parity);
4994   serial_raw (rs->remote_desc);
4995
4996   /* If there is something sitting in the buffer we might take it as a
4997      response to a command, which would be bad.  */
4998   serial_flush_input (rs->remote_desc);
4999
5000   if (from_tty)
5001     {
5002       puts_filtered ("Remote debugging using ");
5003       puts_filtered (name);
5004       puts_filtered ("\n");
5005     }
5006   push_target (target);         /* Switch to using remote target now.  */
5007
5008   /* Register extra event sources in the event loop.  */
5009   remote_async_inferior_event_token
5010     = create_async_event_handler (remote_async_inferior_event_handler,
5011                                   NULL);
5012   rs->notif_state = remote_notif_state_allocate ();
5013
5014   /* Reset the target state; these things will be queried either by
5015      remote_query_supported or as they are needed.  */
5016   reset_all_packet_configs_support ();
5017   rs->cached_wait_status = 0;
5018   rs->explicit_packet_size = 0;
5019   rs->noack_mode = 0;
5020   rs->extended = extended_p;
5021   rs->waiting_for_stop_reply = 0;
5022   rs->ctrlc_pending_p = 0;
5023   rs->got_ctrlc_during_io = 0;
5024
5025   rs->general_thread = not_sent_ptid;
5026   rs->continue_thread = not_sent_ptid;
5027   rs->remote_traceframe_number = -1;
5028
5029   rs->last_resume_exec_dir = EXEC_FORWARD;
5030
5031   /* Probe for ability to use "ThreadInfo" query, as required.  */
5032   rs->use_threadinfo_query = 1;
5033   rs->use_threadextra_query = 1;
5034
5035   readahead_cache_invalidate ();
5036
5037   if (target_async_permitted)
5038     {
5039       /* FIXME: cagney/1999-09-23: During the initial connection it is
5040          assumed that the target is already ready and able to respond to
5041          requests.  Unfortunately remote_start_remote() eventually calls
5042          wait_for_inferior() with no timeout.  wait_forever_enabled_p gets
5043          around this.  Eventually a mechanism that allows
5044          wait_for_inferior() to expect/get timeouts will be
5045          implemented.  */
5046       wait_forever_enabled_p = 0;
5047     }
5048
5049   /* First delete any symbols previously loaded from shared libraries.  */
5050   no_shared_libraries (NULL, 0);
5051
5052   /* Start afresh.  */
5053   init_thread_list ();
5054
5055   /* Start the remote connection.  If error() or QUIT, discard this
5056      target (we'd otherwise be in an inconsistent state) and then
5057      propogate the error on up the exception chain.  This ensures that
5058      the caller doesn't stumble along blindly assuming that the
5059      function succeeded.  The CLI doesn't have this problem but other
5060      UI's, such as MI do.
5061
5062      FIXME: cagney/2002-05-19: Instead of re-throwing the exception,
5063      this function should return an error indication letting the
5064      caller restore the previous state.  Unfortunately the command
5065      ``target remote'' is directly wired to this function making that
5066      impossible.  On a positive note, the CLI side of this problem has
5067      been fixed - the function set_cmd_context() makes it possible for
5068      all the ``target ....'' commands to share a common callback
5069      function.  See cli-dump.c.  */
5070   {
5071
5072     TRY
5073       {
5074         remote_start_remote (from_tty, target, extended_p);
5075       }
5076     CATCH (ex, RETURN_MASK_ALL)
5077       {
5078         /* Pop the partially set up target - unless something else did
5079            already before throwing the exception.  */
5080         if (rs->remote_desc != NULL)
5081           remote_unpush_target ();
5082         if (target_async_permitted)
5083           wait_forever_enabled_p = 1;
5084         throw_exception (ex);
5085       }
5086     END_CATCH
5087   }
5088
5089   remote_btrace_reset ();
5090
5091   if (target_async_permitted)
5092     wait_forever_enabled_p = 1;
5093 }
5094
5095 /* Detach the specified process.  */
5096
5097 static void
5098 remote_detach_pid (int pid)
5099 {
5100   struct remote_state *rs = get_remote_state ();
5101
5102   if (remote_multi_process_p (rs))
5103     xsnprintf (rs->buf, get_remote_packet_size (), "D;%x", pid);
5104   else
5105     strcpy (rs->buf, "D");
5106
5107   putpkt (rs->buf);
5108   getpkt (&rs->buf, &rs->buf_size, 0);
5109
5110   if (rs->buf[0] == 'O' && rs->buf[1] == 'K')
5111     ;
5112   else if (rs->buf[0] == '\0')
5113     error (_("Remote doesn't know how to detach"));
5114   else
5115     error (_("Can't detach process."));
5116 }
5117
5118 /* This detaches a program to which we previously attached, using
5119    inferior_ptid to identify the process.  After this is done, GDB
5120    can be used to debug some other program.  We better not have left
5121    any breakpoints in the target program or it'll die when it hits
5122    one.  */
5123
5124 static void
5125 remote_detach_1 (const char *args, int from_tty)
5126 {
5127   int pid = ptid_get_pid (inferior_ptid);
5128   struct remote_state *rs = get_remote_state ();
5129   struct thread_info *tp = find_thread_ptid (inferior_ptid);
5130   int is_fork_parent;
5131
5132   if (args)
5133     error (_("Argument given to \"detach\" when remotely debugging."));
5134
5135   if (!target_has_execution)
5136     error (_("No process to detach from."));
5137
5138   target_announce_detach (from_tty);
5139
5140   /* Tell the remote target to detach.  */
5141   remote_detach_pid (pid);
5142
5143   /* Exit only if this is the only active inferior.  */
5144   if (from_tty && !rs->extended && number_of_live_inferiors () == 1)
5145     puts_filtered (_("Ending remote debugging.\n"));
5146
5147   /* Check to see if we are detaching a fork parent.  Note that if we
5148      are detaching a fork child, tp == NULL.  */
5149   is_fork_parent = (tp != NULL
5150                     && tp->pending_follow.kind == TARGET_WAITKIND_FORKED);
5151
5152   /* If doing detach-on-fork, we don't mourn, because that will delete
5153      breakpoints that should be available for the followed inferior.  */
5154   if (!is_fork_parent)
5155     target_mourn_inferior (inferior_ptid);
5156   else
5157     {
5158       inferior_ptid = null_ptid;
5159       detach_inferior (pid);
5160     }
5161 }
5162
5163 static void
5164 remote_detach (struct target_ops *ops, const char *args, int from_tty)
5165 {
5166   remote_detach_1 (args, from_tty);
5167 }
5168
5169 static void
5170 extended_remote_detach (struct target_ops *ops, const char *args, int from_tty)
5171 {
5172   remote_detach_1 (args, from_tty);
5173 }
5174
5175 /* Target follow-fork function for remote targets.  On entry, and
5176    at return, the current inferior is the fork parent.
5177
5178    Note that although this is currently only used for extended-remote,
5179    it is named remote_follow_fork in anticipation of using it for the
5180    remote target as well.  */
5181
5182 static int
5183 remote_follow_fork (struct target_ops *ops, int follow_child,
5184                     int detach_fork)
5185 {
5186   struct remote_state *rs = get_remote_state ();
5187   enum target_waitkind kind = inferior_thread ()->pending_follow.kind;
5188
5189   if ((kind == TARGET_WAITKIND_FORKED && remote_fork_event_p (rs))
5190       || (kind == TARGET_WAITKIND_VFORKED && remote_vfork_event_p (rs)))
5191     {
5192       /* When following the parent and detaching the child, we detach
5193          the child here.  For the case of following the child and
5194          detaching the parent, the detach is done in the target-
5195          independent follow fork code in infrun.c.  We can't use
5196          target_detach when detaching an unfollowed child because
5197          the client side doesn't know anything about the child.  */
5198       if (detach_fork && !follow_child)
5199         {
5200           /* Detach the fork child.  */
5201           ptid_t child_ptid;
5202           pid_t child_pid;
5203
5204           child_ptid = inferior_thread ()->pending_follow.value.related_pid;
5205           child_pid = ptid_get_pid (child_ptid);
5206
5207           remote_detach_pid (child_pid);
5208           detach_inferior (child_pid);
5209         }
5210     }
5211   return 0;
5212 }
5213
5214 /* Target follow-exec function for remote targets.  Save EXECD_PATHNAME
5215    in the program space of the new inferior.  On entry and at return the
5216    current inferior is the exec'ing inferior.  INF is the new exec'd
5217    inferior, which may be the same as the exec'ing inferior unless
5218    follow-exec-mode is "new".  */
5219
5220 static void
5221 remote_follow_exec (struct target_ops *ops,
5222                     struct inferior *inf, char *execd_pathname)
5223 {
5224   /* We know that this is a target file name, so if it has the "target:"
5225      prefix we strip it off before saving it in the program space.  */
5226   if (is_target_filename (execd_pathname))
5227     execd_pathname += strlen (TARGET_SYSROOT_PREFIX);
5228
5229   set_pspace_remote_exec_file (inf->pspace, execd_pathname);
5230 }
5231
5232 /* Same as remote_detach, but don't send the "D" packet; just disconnect.  */
5233
5234 static void
5235 remote_disconnect (struct target_ops *target, const char *args, int from_tty)
5236 {
5237   if (args)
5238     error (_("Argument given to \"disconnect\" when remotely debugging."));
5239
5240   /* Make sure we unpush even the extended remote targets.  Calling
5241      target_mourn_inferior won't unpush, and remote_mourn won't
5242      unpush if there is more than one inferior left.  */
5243   unpush_target (target);
5244   generic_mourn_inferior ();
5245
5246   if (from_tty)
5247     puts_filtered ("Ending remote debugging.\n");
5248 }
5249
5250 /* Attach to the process specified by ARGS.  If FROM_TTY is non-zero,
5251    be chatty about it.  */
5252
5253 static void
5254 extended_remote_attach (struct target_ops *target, const char *args,
5255                         int from_tty)
5256 {
5257   struct remote_state *rs = get_remote_state ();
5258   int pid;
5259   char *wait_status = NULL;
5260
5261   pid = parse_pid_to_attach (args);
5262
5263   /* Remote PID can be freely equal to getpid, do not check it here the same
5264      way as in other targets.  */
5265
5266   if (packet_support (PACKET_vAttach) == PACKET_DISABLE)
5267     error (_("This target does not support attaching to a process"));
5268
5269   if (from_tty)
5270     {
5271       char *exec_file = get_exec_file (0);
5272
5273       if (exec_file)
5274         printf_unfiltered (_("Attaching to program: %s, %s\n"), exec_file,
5275                            target_pid_to_str (pid_to_ptid (pid)));
5276       else
5277         printf_unfiltered (_("Attaching to %s\n"),
5278                            target_pid_to_str (pid_to_ptid (pid)));
5279
5280       gdb_flush (gdb_stdout);
5281     }
5282
5283   xsnprintf (rs->buf, get_remote_packet_size (), "vAttach;%x", pid);
5284   putpkt (rs->buf);
5285   getpkt (&rs->buf, &rs->buf_size, 0);
5286
5287   switch (packet_ok (rs->buf,
5288                      &remote_protocol_packets[PACKET_vAttach]))
5289     {
5290     case PACKET_OK:
5291       if (!target_is_non_stop_p ())
5292         {
5293           /* Save the reply for later.  */
5294           wait_status = (char *) alloca (strlen (rs->buf) + 1);
5295           strcpy (wait_status, rs->buf);
5296         }
5297       else if (strcmp (rs->buf, "OK") != 0)
5298         error (_("Attaching to %s failed with: %s"),
5299                target_pid_to_str (pid_to_ptid (pid)),
5300                rs->buf);
5301       break;
5302     case PACKET_UNKNOWN:
5303       error (_("This target does not support attaching to a process"));
5304     default:
5305       error (_("Attaching to %s failed"),
5306              target_pid_to_str (pid_to_ptid (pid)));
5307     }
5308
5309   set_current_inferior (remote_add_inferior (0, pid, 1, 0));
5310
5311   inferior_ptid = pid_to_ptid (pid);
5312
5313   if (target_is_non_stop_p ())
5314     {
5315       struct thread_info *thread;
5316
5317       /* Get list of threads.  */
5318       remote_update_thread_list (target);
5319
5320       thread = first_thread_of_process (pid);
5321       if (thread)
5322         inferior_ptid = thread->ptid;
5323       else
5324         inferior_ptid = pid_to_ptid (pid);
5325
5326       /* Invalidate our notion of the remote current thread.  */
5327       record_currthread (rs, minus_one_ptid);
5328     }
5329   else
5330     {
5331       /* Now, if we have thread information, update inferior_ptid.  */
5332       inferior_ptid = remote_current_thread (inferior_ptid);
5333
5334       /* Add the main thread to the thread list.  */
5335       add_thread_silent (inferior_ptid);
5336     }
5337
5338   /* Next, if the target can specify a description, read it.  We do
5339      this before anything involving memory or registers.  */
5340   target_find_description ();
5341
5342   if (!target_is_non_stop_p ())
5343     {
5344       /* Use the previously fetched status.  */
5345       gdb_assert (wait_status != NULL);
5346
5347       if (target_can_async_p ())
5348         {
5349           struct notif_event *reply
5350             =  remote_notif_parse (&notif_client_stop, wait_status);
5351
5352           push_stop_reply ((struct stop_reply *) reply);
5353
5354           target_async (1);
5355         }
5356       else
5357         {
5358           gdb_assert (wait_status != NULL);
5359           strcpy (rs->buf, wait_status);
5360           rs->cached_wait_status = 1;
5361         }
5362     }
5363   else
5364     gdb_assert (wait_status == NULL);
5365 }
5366
5367 /* Implementation of the to_post_attach method.  */
5368
5369 static void
5370 extended_remote_post_attach (struct target_ops *ops, int pid)
5371 {
5372   /* Get text, data & bss offsets.  */
5373   get_offsets ();
5374
5375   /* In certain cases GDB might not have had the chance to start
5376      symbol lookup up until now.  This could happen if the debugged
5377      binary is not using shared libraries, the vsyscall page is not
5378      present (on Linux) and the binary itself hadn't changed since the
5379      debugging process was started.  */
5380   if (symfile_objfile != NULL)
5381     remote_check_symbols();
5382 }
5383
5384 \f
5385 /* Check for the availability of vCont.  This function should also check
5386    the response.  */
5387
5388 static void
5389 remote_vcont_probe (struct remote_state *rs)
5390 {
5391   char *buf;
5392
5393   strcpy (rs->buf, "vCont?");
5394   putpkt (rs->buf);
5395   getpkt (&rs->buf, &rs->buf_size, 0);
5396   buf = rs->buf;
5397
5398   /* Make sure that the features we assume are supported.  */
5399   if (startswith (buf, "vCont"))
5400     {
5401       char *p = &buf[5];
5402       int support_c, support_C;
5403
5404       rs->supports_vCont.s = 0;
5405       rs->supports_vCont.S = 0;
5406       support_c = 0;
5407       support_C = 0;
5408       rs->supports_vCont.t = 0;
5409       rs->supports_vCont.r = 0;
5410       while (p && *p == ';')
5411         {
5412           p++;
5413           if (*p == 's' && (*(p + 1) == ';' || *(p + 1) == 0))
5414             rs->supports_vCont.s = 1;
5415           else if (*p == 'S' && (*(p + 1) == ';' || *(p + 1) == 0))
5416             rs->supports_vCont.S = 1;
5417           else if (*p == 'c' && (*(p + 1) == ';' || *(p + 1) == 0))
5418             support_c = 1;
5419           else if (*p == 'C' && (*(p + 1) == ';' || *(p + 1) == 0))
5420             support_C = 1;
5421           else if (*p == 't' && (*(p + 1) == ';' || *(p + 1) == 0))
5422             rs->supports_vCont.t = 1;
5423           else if (*p == 'r' && (*(p + 1) == ';' || *(p + 1) == 0))
5424             rs->supports_vCont.r = 1;
5425
5426           p = strchr (p, ';');
5427         }
5428
5429       /* If c, and C are not all supported, we can't use vCont.  Clearing
5430          BUF will make packet_ok disable the packet.  */
5431       if (!support_c || !support_C)
5432         buf[0] = 0;
5433     }
5434
5435   packet_ok (buf, &remote_protocol_packets[PACKET_vCont]);
5436 }
5437
5438 /* Helper function for building "vCont" resumptions.  Write a
5439    resumption to P.  ENDP points to one-passed-the-end of the buffer
5440    we're allowed to write to.  Returns BUF+CHARACTERS_WRITTEN.  The
5441    thread to be resumed is PTID; STEP and SIGGNAL indicate whether the
5442    resumed thread should be single-stepped and/or signalled.  If PTID
5443    equals minus_one_ptid, then all threads are resumed; if PTID
5444    represents a process, then all threads of the process are resumed;
5445    the thread to be stepped and/or signalled is given in the global
5446    INFERIOR_PTID.  */
5447
5448 static char *
5449 append_resumption (char *p, char *endp,
5450                    ptid_t ptid, int step, enum gdb_signal siggnal)
5451 {
5452   struct remote_state *rs = get_remote_state ();
5453
5454   if (step && siggnal != GDB_SIGNAL_0)
5455     p += xsnprintf (p, endp - p, ";S%02x", siggnal);
5456   else if (step
5457            /* GDB is willing to range step.  */
5458            && use_range_stepping
5459            /* Target supports range stepping.  */
5460            && rs->supports_vCont.r
5461            /* We don't currently support range stepping multiple
5462               threads with a wildcard (though the protocol allows it,
5463               so stubs shouldn't make an active effort to forbid
5464               it).  */
5465            && !(remote_multi_process_p (rs) && ptid_is_pid (ptid)))
5466     {
5467       struct thread_info *tp;
5468
5469       if (ptid_equal (ptid, minus_one_ptid))
5470         {
5471           /* If we don't know about the target thread's tid, then
5472              we're resuming magic_null_ptid (see caller).  */
5473           tp = find_thread_ptid (magic_null_ptid);
5474         }
5475       else
5476         tp = find_thread_ptid (ptid);
5477       gdb_assert (tp != NULL);
5478
5479       if (tp->control.may_range_step)
5480         {
5481           int addr_size = gdbarch_addr_bit (target_gdbarch ()) / 8;
5482
5483           p += xsnprintf (p, endp - p, ";r%s,%s",
5484                           phex_nz (tp->control.step_range_start,
5485                                    addr_size),
5486                           phex_nz (tp->control.step_range_end,
5487                                    addr_size));
5488         }
5489       else
5490         p += xsnprintf (p, endp - p, ";s");
5491     }
5492   else if (step)
5493     p += xsnprintf (p, endp - p, ";s");
5494   else if (siggnal != GDB_SIGNAL_0)
5495     p += xsnprintf (p, endp - p, ";C%02x", siggnal);
5496   else
5497     p += xsnprintf (p, endp - p, ";c");
5498
5499   if (remote_multi_process_p (rs) && ptid_is_pid (ptid))
5500     {
5501       ptid_t nptid;
5502
5503       /* All (-1) threads of process.  */
5504       nptid = ptid_build (ptid_get_pid (ptid), -1, 0);
5505
5506       p += xsnprintf (p, endp - p, ":");
5507       p = write_ptid (p, endp, nptid);
5508     }
5509   else if (!ptid_equal (ptid, minus_one_ptid))
5510     {
5511       p += xsnprintf (p, endp - p, ":");
5512       p = write_ptid (p, endp, ptid);
5513     }
5514
5515   return p;
5516 }
5517
5518 /* Clear the thread's private info on resume.  */
5519
5520 static void
5521 resume_clear_thread_private_info (struct thread_info *thread)
5522 {
5523   if (thread->priv != NULL)
5524     {
5525       remote_thread_info *priv = get_remote_thread_info (thread);
5526
5527       priv->stop_reason = TARGET_STOPPED_BY_NO_REASON;
5528       priv->watch_data_address = 0;
5529     }
5530 }
5531
5532 /* Append a vCont continue-with-signal action for threads that have a
5533    non-zero stop signal.  */
5534
5535 static char *
5536 append_pending_thread_resumptions (char *p, char *endp, ptid_t ptid)
5537 {
5538   struct thread_info *thread;
5539
5540   ALL_NON_EXITED_THREADS (thread)
5541     if (ptid_match (thread->ptid, ptid)
5542         && !ptid_equal (inferior_ptid, thread->ptid)
5543         && thread->suspend.stop_signal != GDB_SIGNAL_0)
5544       {
5545         p = append_resumption (p, endp, thread->ptid,
5546                                0, thread->suspend.stop_signal);
5547         thread->suspend.stop_signal = GDB_SIGNAL_0;
5548         resume_clear_thread_private_info (thread);
5549       }
5550
5551   return p;
5552 }
5553
5554 /* Set the target running, using the packets that use Hc
5555    (c/s/C/S).  */
5556
5557 static void
5558 remote_resume_with_hc (struct target_ops *ops,
5559                        ptid_t ptid, int step, enum gdb_signal siggnal)
5560 {
5561   struct remote_state *rs = get_remote_state ();
5562   struct thread_info *thread;
5563   char *buf;
5564
5565   rs->last_sent_signal = siggnal;
5566   rs->last_sent_step = step;
5567
5568   /* The c/s/C/S resume packets use Hc, so set the continue
5569      thread.  */
5570   if (ptid_equal (ptid, minus_one_ptid))
5571     set_continue_thread (any_thread_ptid);
5572   else
5573     set_continue_thread (ptid);
5574
5575   ALL_NON_EXITED_THREADS (thread)
5576     resume_clear_thread_private_info (thread);
5577
5578   buf = rs->buf;
5579   if (execution_direction == EXEC_REVERSE)
5580     {
5581       /* We don't pass signals to the target in reverse exec mode.  */
5582       if (info_verbose && siggnal != GDB_SIGNAL_0)
5583         warning (_(" - Can't pass signal %d to target in reverse: ignored."),
5584                  siggnal);
5585
5586       if (step && packet_support (PACKET_bs) == PACKET_DISABLE)
5587         error (_("Remote reverse-step not supported."));
5588       if (!step && packet_support (PACKET_bc) == PACKET_DISABLE)
5589         error (_("Remote reverse-continue not supported."));
5590
5591       strcpy (buf, step ? "bs" : "bc");
5592     }
5593   else if (siggnal != GDB_SIGNAL_0)
5594     {
5595       buf[0] = step ? 'S' : 'C';
5596       buf[1] = tohex (((int) siggnal >> 4) & 0xf);
5597       buf[2] = tohex (((int) siggnal) & 0xf);
5598       buf[3] = '\0';
5599     }
5600   else
5601     strcpy (buf, step ? "s" : "c");
5602
5603   putpkt (buf);
5604 }
5605
5606 /* Resume the remote inferior by using a "vCont" packet.  The thread
5607    to be resumed is PTID; STEP and SIGGNAL indicate whether the
5608    resumed thread should be single-stepped and/or signalled.  If PTID
5609    equals minus_one_ptid, then all threads are resumed; the thread to
5610    be stepped and/or signalled is given in the global INFERIOR_PTID.
5611    This function returns non-zero iff it resumes the inferior.
5612
5613    This function issues a strict subset of all possible vCont commands
5614    at the moment.  */
5615
5616 static int
5617 remote_resume_with_vcont (ptid_t ptid, int step, enum gdb_signal siggnal)
5618 {
5619   struct remote_state *rs = get_remote_state ();
5620   char *p;
5621   char *endp;
5622
5623   /* No reverse execution actions defined for vCont.  */
5624   if (execution_direction == EXEC_REVERSE)
5625     return 0;
5626
5627   if (packet_support (PACKET_vCont) == PACKET_SUPPORT_UNKNOWN)
5628     remote_vcont_probe (rs);
5629
5630   if (packet_support (PACKET_vCont) == PACKET_DISABLE)
5631     return 0;
5632
5633   p = rs->buf;
5634   endp = rs->buf + get_remote_packet_size ();
5635
5636   /* If we could generate a wider range of packets, we'd have to worry
5637      about overflowing BUF.  Should there be a generic
5638      "multi-part-packet" packet?  */
5639
5640   p += xsnprintf (p, endp - p, "vCont");
5641
5642   if (ptid_equal (ptid, magic_null_ptid))
5643     {
5644       /* MAGIC_NULL_PTID means that we don't have any active threads,
5645          so we don't have any TID numbers the inferior will
5646          understand.  Make sure to only send forms that do not specify
5647          a TID.  */
5648       append_resumption (p, endp, minus_one_ptid, step, siggnal);
5649     }
5650   else if (ptid_equal (ptid, minus_one_ptid) || ptid_is_pid (ptid))
5651     {
5652       /* Resume all threads (of all processes, or of a single
5653          process), with preference for INFERIOR_PTID.  This assumes
5654          inferior_ptid belongs to the set of all threads we are about
5655          to resume.  */
5656       if (step || siggnal != GDB_SIGNAL_0)
5657         {
5658           /* Step inferior_ptid, with or without signal.  */
5659           p = append_resumption (p, endp, inferior_ptid, step, siggnal);
5660         }
5661
5662       /* Also pass down any pending signaled resumption for other
5663          threads not the current.  */
5664       p = append_pending_thread_resumptions (p, endp, ptid);
5665
5666       /* And continue others without a signal.  */
5667       append_resumption (p, endp, ptid, /*step=*/ 0, GDB_SIGNAL_0);
5668     }
5669   else
5670     {
5671       /* Scheduler locking; resume only PTID.  */
5672       append_resumption (p, endp, ptid, step, siggnal);
5673     }
5674
5675   gdb_assert (strlen (rs->buf) < get_remote_packet_size ());
5676   putpkt (rs->buf);
5677
5678   if (target_is_non_stop_p ())
5679     {
5680       /* In non-stop, the stub replies to vCont with "OK".  The stop
5681          reply will be reported asynchronously by means of a `%Stop'
5682          notification.  */
5683       getpkt (&rs->buf, &rs->buf_size, 0);
5684       if (strcmp (rs->buf, "OK") != 0)
5685         error (_("Unexpected vCont reply in non-stop mode: %s"), rs->buf);
5686     }
5687
5688   return 1;
5689 }
5690
5691 /* Tell the remote machine to resume.  */
5692
5693 static void
5694 remote_resume (struct target_ops *ops,
5695                ptid_t ptid, int step, enum gdb_signal siggnal)
5696 {
5697   struct remote_state *rs = get_remote_state ();
5698
5699   /* When connected in non-stop mode, the core resumes threads
5700      individually.  Resuming remote threads directly in target_resume
5701      would thus result in sending one packet per thread.  Instead, to
5702      minimize roundtrip latency, here we just store the resume
5703      request; the actual remote resumption will be done in
5704      target_commit_resume / remote_commit_resume, where we'll be able
5705      to do vCont action coalescing.  */
5706   if (target_is_non_stop_p () && execution_direction != EXEC_REVERSE)
5707     {
5708       remote_thread_info *remote_thr;
5709
5710       if (ptid_equal (minus_one_ptid, ptid) || ptid_is_pid (ptid))
5711         remote_thr = get_remote_thread_info (inferior_ptid);
5712       else
5713         remote_thr = get_remote_thread_info (ptid);
5714
5715       remote_thr->last_resume_step = step;
5716       remote_thr->last_resume_sig = siggnal;
5717       return;
5718     }
5719
5720   /* In all-stop, we can't mark REMOTE_ASYNC_GET_PENDING_EVENTS_TOKEN
5721      (explained in remote-notif.c:handle_notification) so
5722      remote_notif_process is not called.  We need find a place where
5723      it is safe to start a 'vNotif' sequence.  It is good to do it
5724      before resuming inferior, because inferior was stopped and no RSP
5725      traffic at that moment.  */
5726   if (!target_is_non_stop_p ())
5727     remote_notif_process (rs->notif_state, &notif_client_stop);
5728
5729   rs->last_resume_exec_dir = execution_direction;
5730
5731   /* Prefer vCont, and fallback to s/c/S/C, which use Hc.  */
5732   if (!remote_resume_with_vcont (ptid, step, siggnal))
5733     remote_resume_with_hc (ops, ptid, step, siggnal);
5734
5735   /* We are about to start executing the inferior, let's register it
5736      with the event loop.  NOTE: this is the one place where all the
5737      execution commands end up.  We could alternatively do this in each
5738      of the execution commands in infcmd.c.  */
5739   /* FIXME: ezannoni 1999-09-28: We may need to move this out of here
5740      into infcmd.c in order to allow inferior function calls to work
5741      NOT asynchronously.  */
5742   if (target_can_async_p ())
5743     target_async (1);
5744
5745   /* We've just told the target to resume.  The remote server will
5746      wait for the inferior to stop, and then send a stop reply.  In
5747      the mean time, we can't start another command/query ourselves
5748      because the stub wouldn't be ready to process it.  This applies
5749      only to the base all-stop protocol, however.  In non-stop (which
5750      only supports vCont), the stub replies with an "OK", and is
5751      immediate able to process further serial input.  */
5752   if (!target_is_non_stop_p ())
5753     rs->waiting_for_stop_reply = 1;
5754 }
5755
5756 static void check_pending_events_prevent_wildcard_vcont
5757   (int *may_global_wildcard_vcont);
5758 static int is_pending_fork_parent_thread (struct thread_info *thread);
5759
5760 /* Private per-inferior info for target remote processes.  */
5761
5762 struct remote_inferior : public private_inferior
5763 {
5764   /* Whether we can send a wildcard vCont for this process.  */
5765   bool may_wildcard_vcont = true;
5766 };
5767
5768 /* Get the remote private inferior data associated to INF.  */
5769
5770 static remote_inferior *
5771 get_remote_inferior (inferior *inf)
5772 {
5773   if (inf->priv == NULL)
5774     inf->priv.reset (new remote_inferior);
5775
5776   return static_cast<remote_inferior *> (inf->priv.get ());
5777 }
5778
5779 /* Structure used to track the construction of a vCont packet in the
5780    outgoing packet buffer.  This is used to send multiple vCont
5781    packets if we have more actions than would fit a single packet.  */
5782
5783 struct vcont_builder
5784 {
5785   /* Pointer to the first action.  P points here if no action has been
5786      appended yet.  */
5787   char *first_action;
5788
5789   /* Where the next action will be appended.  */
5790   char *p;
5791
5792   /* The end of the buffer.  Must never write past this.  */
5793   char *endp;
5794 };
5795
5796 /* Prepare the outgoing buffer for a new vCont packet.  */
5797
5798 static void
5799 vcont_builder_restart (struct vcont_builder *builder)
5800 {
5801   struct remote_state *rs = get_remote_state ();
5802
5803   builder->p = rs->buf;
5804   builder->endp = rs->buf + get_remote_packet_size ();
5805   builder->p += xsnprintf (builder->p, builder->endp - builder->p, "vCont");
5806   builder->first_action = builder->p;
5807 }
5808
5809 /* If the vCont packet being built has any action, send it to the
5810    remote end.  */
5811
5812 static void
5813 vcont_builder_flush (struct vcont_builder *builder)
5814 {
5815   struct remote_state *rs;
5816
5817   if (builder->p == builder->first_action)
5818     return;
5819
5820   rs = get_remote_state ();
5821   putpkt (rs->buf);
5822   getpkt (&rs->buf, &rs->buf_size, 0);
5823   if (strcmp (rs->buf, "OK") != 0)
5824     error (_("Unexpected vCont reply in non-stop mode: %s"), rs->buf);
5825 }
5826
5827 /* The largest action is range-stepping, with its two addresses.  This
5828    is more than sufficient.  If a new, bigger action is created, it'll
5829    quickly trigger a failed assertion in append_resumption (and we'll
5830    just bump this).  */
5831 #define MAX_ACTION_SIZE 200
5832
5833 /* Append a new vCont action in the outgoing packet being built.  If
5834    the action doesn't fit the packet along with previous actions, push
5835    what we've got so far to the remote end and start over a new vCont
5836    packet (with the new action).  */
5837
5838 static void
5839 vcont_builder_push_action (struct vcont_builder *builder,
5840                            ptid_t ptid, int step, enum gdb_signal siggnal)
5841 {
5842   char buf[MAX_ACTION_SIZE + 1];
5843   char *endp;
5844   size_t rsize;
5845
5846   endp = append_resumption (buf, buf + sizeof (buf),
5847                             ptid, step, siggnal);
5848
5849   /* Check whether this new action would fit in the vCont packet along
5850      with previous actions.  If not, send what we've got so far and
5851      start a new vCont packet.  */
5852   rsize = endp - buf;
5853   if (rsize > builder->endp - builder->p)
5854     {
5855       vcont_builder_flush (builder);
5856       vcont_builder_restart (builder);
5857
5858       /* Should now fit.  */
5859       gdb_assert (rsize <= builder->endp - builder->p);
5860     }
5861
5862   memcpy (builder->p, buf, rsize);
5863   builder->p += rsize;
5864   *builder->p = '\0';
5865 }
5866
5867 /* to_commit_resume implementation.  */
5868
5869 static void
5870 remote_commit_resume (struct target_ops *ops)
5871 {
5872   struct remote_state *rs = get_remote_state ();
5873   struct inferior *inf;
5874   struct thread_info *tp;
5875   int any_process_wildcard;
5876   int may_global_wildcard_vcont;
5877   struct vcont_builder vcont_builder;
5878
5879   /* If connected in all-stop mode, we'd send the remote resume
5880      request directly from remote_resume.  Likewise if
5881      reverse-debugging, as there are no defined vCont actions for
5882      reverse execution.  */
5883   if (!target_is_non_stop_p () || execution_direction == EXEC_REVERSE)
5884     return;
5885
5886   /* Try to send wildcard actions ("vCont;c" or "vCont;c:pPID.-1")
5887      instead of resuming all threads of each process individually.
5888      However, if any thread of a process must remain halted, we can't
5889      send wildcard resumes and must send one action per thread.
5890
5891      Care must be taken to not resume threads/processes the server
5892      side already told us are stopped, but the core doesn't know about
5893      yet, because the events are still in the vStopped notification
5894      queue.  For example:
5895
5896        #1 => vCont s:p1.1;c
5897        #2 <= OK
5898        #3 <= %Stopped T05 p1.1
5899        #4 => vStopped
5900        #5 <= T05 p1.2
5901        #6 => vStopped
5902        #7 <= OK
5903        #8 (infrun handles the stop for p1.1 and continues stepping)
5904        #9 => vCont s:p1.1;c
5905
5906      The last vCont above would resume thread p1.2 by mistake, because
5907      the server has no idea that the event for p1.2 had not been
5908      handled yet.
5909
5910      The server side must similarly ignore resume actions for the
5911      thread that has a pending %Stopped notification (and any other
5912      threads with events pending), until GDB acks the notification
5913      with vStopped.  Otherwise, e.g., the following case is
5914      mishandled:
5915
5916        #1 => g  (or any other packet)
5917        #2 <= [registers]
5918        #3 <= %Stopped T05 p1.2
5919        #4 => vCont s:p1.1;c
5920        #5 <= OK
5921
5922      Above, the server must not resume thread p1.2.  GDB can't know
5923      that p1.2 stopped until it acks the %Stopped notification, and
5924      since from GDB's perspective all threads should be running, it
5925      sends a "c" action.
5926
5927      Finally, special care must also be given to handling fork/vfork
5928      events.  A (v)fork event actually tells us that two processes
5929      stopped -- the parent and the child.  Until we follow the fork,
5930      we must not resume the child.  Therefore, if we have a pending
5931      fork follow, we must not send a global wildcard resume action
5932      (vCont;c).  We can still send process-wide wildcards though.  */
5933
5934   /* Start by assuming a global wildcard (vCont;c) is possible.  */
5935   may_global_wildcard_vcont = 1;
5936
5937   /* And assume every process is individually wildcard-able too.  */
5938   ALL_NON_EXITED_INFERIORS (inf)
5939     {
5940       remote_inferior *priv = get_remote_inferior (inf);
5941
5942       priv->may_wildcard_vcont = true;
5943     }
5944
5945   /* Check for any pending events (not reported or processed yet) and
5946      disable process and global wildcard resumes appropriately.  */
5947   check_pending_events_prevent_wildcard_vcont (&may_global_wildcard_vcont);
5948
5949   ALL_NON_EXITED_THREADS (tp)
5950     {
5951       /* If a thread of a process is not meant to be resumed, then we
5952          can't wildcard that process.  */
5953       if (!tp->executing)
5954         {
5955           get_remote_inferior (tp->inf)->may_wildcard_vcont = false;
5956
5957           /* And if we can't wildcard a process, we can't wildcard
5958              everything either.  */
5959           may_global_wildcard_vcont = 0;
5960           continue;
5961         }
5962
5963       /* If a thread is the parent of an unfollowed fork, then we
5964          can't do a global wildcard, as that would resume the fork
5965          child.  */
5966       if (is_pending_fork_parent_thread (tp))
5967         may_global_wildcard_vcont = 0;
5968     }
5969
5970   /* Now let's build the vCont packet(s).  Actions must be appended
5971      from narrower to wider scopes (thread -> process -> global).  If
5972      we end up with too many actions for a single packet vcont_builder
5973      flushes the current vCont packet to the remote side and starts a
5974      new one.  */
5975   vcont_builder_restart (&vcont_builder);
5976
5977   /* Threads first.  */
5978   ALL_NON_EXITED_THREADS (tp)
5979     {
5980       remote_thread_info *remote_thr = get_remote_thread_info (tp);
5981
5982       if (!tp->executing || remote_thr->vcont_resumed)
5983         continue;
5984
5985       gdb_assert (!thread_is_in_step_over_chain (tp));
5986
5987       if (!remote_thr->last_resume_step
5988           && remote_thr->last_resume_sig == GDB_SIGNAL_0
5989           && get_remote_inferior (tp->inf)->may_wildcard_vcont)
5990         {
5991           /* We'll send a wildcard resume instead.  */
5992           remote_thr->vcont_resumed = 1;
5993           continue;
5994         }
5995
5996       vcont_builder_push_action (&vcont_builder, tp->ptid,
5997                                  remote_thr->last_resume_step,
5998                                  remote_thr->last_resume_sig);
5999       remote_thr->vcont_resumed = 1;
6000     }
6001
6002   /* Now check whether we can send any process-wide wildcard.  This is
6003      to avoid sending a global wildcard in the case nothing is
6004      supposed to be resumed.  */
6005   any_process_wildcard = 0;
6006
6007   ALL_NON_EXITED_INFERIORS (inf)
6008     {
6009       if (get_remote_inferior (inf)->may_wildcard_vcont)
6010         {
6011           any_process_wildcard = 1;
6012           break;
6013         }
6014     }
6015
6016   if (any_process_wildcard)
6017     {
6018       /* If all processes are wildcard-able, then send a single "c"
6019          action, otherwise, send an "all (-1) threads of process"
6020          continue action for each running process, if any.  */
6021       if (may_global_wildcard_vcont)
6022         {
6023           vcont_builder_push_action (&vcont_builder, minus_one_ptid,
6024                                      0, GDB_SIGNAL_0);
6025         }
6026       else
6027         {
6028           ALL_NON_EXITED_INFERIORS (inf)
6029             {
6030               if (get_remote_inferior (inf)->may_wildcard_vcont)
6031                 {
6032                   vcont_builder_push_action (&vcont_builder,
6033                                              pid_to_ptid (inf->pid),
6034                                              0, GDB_SIGNAL_0);
6035                 }
6036             }
6037         }
6038     }
6039
6040   vcont_builder_flush (&vcont_builder);
6041 }
6042
6043 \f
6044
6045 /* Non-stop version of target_stop.  Uses `vCont;t' to stop a remote
6046    thread, all threads of a remote process, or all threads of all
6047    processes.  */
6048
6049 static void
6050 remote_stop_ns (ptid_t ptid)
6051 {
6052   struct remote_state *rs = get_remote_state ();
6053   char *p = rs->buf;
6054   char *endp = rs->buf + get_remote_packet_size ();
6055
6056   if (packet_support (PACKET_vCont) == PACKET_SUPPORT_UNKNOWN)
6057     remote_vcont_probe (rs);
6058
6059   if (!rs->supports_vCont.t)
6060     error (_("Remote server does not support stopping threads"));
6061
6062   if (ptid_equal (ptid, minus_one_ptid)
6063       || (!remote_multi_process_p (rs) && ptid_is_pid (ptid)))
6064     p += xsnprintf (p, endp - p, "vCont;t");
6065   else
6066     {
6067       ptid_t nptid;
6068
6069       p += xsnprintf (p, endp - p, "vCont;t:");
6070
6071       if (ptid_is_pid (ptid))
6072           /* All (-1) threads of process.  */
6073         nptid = ptid_build (ptid_get_pid (ptid), -1, 0);
6074       else
6075         {
6076           /* Small optimization: if we already have a stop reply for
6077              this thread, no use in telling the stub we want this
6078              stopped.  */
6079           if (peek_stop_reply (ptid))
6080             return;
6081
6082           nptid = ptid;
6083         }
6084
6085       write_ptid (p, endp, nptid);
6086     }
6087
6088   /* In non-stop, we get an immediate OK reply.  The stop reply will
6089      come in asynchronously by notification.  */
6090   putpkt (rs->buf);
6091   getpkt (&rs->buf, &rs->buf_size, 0);
6092   if (strcmp (rs->buf, "OK") != 0)
6093     error (_("Stopping %s failed: %s"), target_pid_to_str (ptid), rs->buf);
6094 }
6095
6096 /* All-stop version of target_interrupt.  Sends a break or a ^C to
6097    interrupt the remote target.  It is undefined which thread of which
6098    process reports the interrupt.  */
6099
6100 static void
6101 remote_interrupt_as (void)
6102 {
6103   struct remote_state *rs = get_remote_state ();
6104
6105   rs->ctrlc_pending_p = 1;
6106
6107   /* If the inferior is stopped already, but the core didn't know
6108      about it yet, just ignore the request.  The cached wait status
6109      will be collected in remote_wait.  */
6110   if (rs->cached_wait_status)
6111     return;
6112
6113   /* Send interrupt_sequence to remote target.  */
6114   send_interrupt_sequence ();
6115 }
6116
6117 /* Non-stop version of target_interrupt.  Uses `vCtrlC' to interrupt
6118    the remote target.  It is undefined which thread of which process
6119    reports the interrupt.  Throws an error if the packet is not
6120    supported by the server.  */
6121
6122 static void
6123 remote_interrupt_ns (void)
6124 {
6125   struct remote_state *rs = get_remote_state ();
6126   char *p = rs->buf;
6127   char *endp = rs->buf + get_remote_packet_size ();
6128
6129   xsnprintf (p, endp - p, "vCtrlC");
6130
6131   /* In non-stop, we get an immediate OK reply.  The stop reply will
6132      come in asynchronously by notification.  */
6133   putpkt (rs->buf);
6134   getpkt (&rs->buf, &rs->buf_size, 0);
6135
6136   switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_vCtrlC]))
6137     {
6138     case PACKET_OK:
6139       break;
6140     case PACKET_UNKNOWN:
6141       error (_("No support for interrupting the remote target."));
6142     case PACKET_ERROR:
6143       error (_("Interrupting target failed: %s"), rs->buf);
6144     }
6145 }
6146
6147 /* Implement the to_stop function for the remote targets.  */
6148
6149 static void
6150 remote_stop (struct target_ops *self, ptid_t ptid)
6151 {
6152   if (remote_debug)
6153     fprintf_unfiltered (gdb_stdlog, "remote_stop called\n");
6154
6155   if (target_is_non_stop_p ())
6156     remote_stop_ns (ptid);
6157   else
6158     {
6159       /* We don't currently have a way to transparently pause the
6160          remote target in all-stop mode.  Interrupt it instead.  */
6161       remote_interrupt_as ();
6162     }
6163 }
6164
6165 /* Implement the to_interrupt function for the remote targets.  */
6166
6167 static void
6168 remote_interrupt (struct target_ops *self, ptid_t ptid)
6169 {
6170   struct remote_state *rs = get_remote_state ();
6171
6172   if (remote_debug)
6173     fprintf_unfiltered (gdb_stdlog, "remote_interrupt called\n");
6174
6175   if (target_is_non_stop_p ())
6176     remote_interrupt_ns ();
6177   else
6178     remote_interrupt_as ();
6179 }
6180
6181 /* Implement the to_pass_ctrlc function for the remote targets.  */
6182
6183 static void
6184 remote_pass_ctrlc (struct target_ops *self)
6185 {
6186   struct remote_state *rs = get_remote_state ();
6187
6188   if (remote_debug)
6189     fprintf_unfiltered (gdb_stdlog, "remote_pass_ctrlc called\n");
6190
6191   /* If we're starting up, we're not fully synced yet.  Quit
6192      immediately.  */
6193   if (rs->starting_up)
6194     quit ();
6195   /* If ^C has already been sent once, offer to disconnect.  */
6196   else if (rs->ctrlc_pending_p)
6197     interrupt_query ();
6198   else
6199     target_interrupt (inferior_ptid);
6200 }
6201
6202 /* Ask the user what to do when an interrupt is received.  */
6203
6204 static void
6205 interrupt_query (void)
6206 {
6207   struct remote_state *rs = get_remote_state ();
6208
6209   if (rs->waiting_for_stop_reply && rs->ctrlc_pending_p)
6210     {
6211       if (query (_("The target is not responding to interrupt requests.\n"
6212                    "Stop debugging it? ")))
6213         {
6214           remote_unpush_target ();
6215           throw_error (TARGET_CLOSE_ERROR, _("Disconnected from target."));
6216         }
6217     }
6218   else
6219     {
6220       if (query (_("Interrupted while waiting for the program.\n"
6221                    "Give up waiting? ")))
6222         quit ();
6223     }
6224 }
6225
6226 /* Enable/disable target terminal ownership.  Most targets can use
6227    terminal groups to control terminal ownership.  Remote targets are
6228    different in that explicit transfer of ownership to/from GDB/target
6229    is required.  */
6230
6231 static void
6232 remote_terminal_inferior (struct target_ops *self)
6233 {
6234   /* NOTE: At this point we could also register our selves as the
6235      recipient of all input.  Any characters typed could then be
6236      passed on down to the target.  */
6237 }
6238
6239 static void
6240 remote_terminal_ours (struct target_ops *self)
6241 {
6242 }
6243
6244 static void
6245 remote_console_output (char *msg)
6246 {
6247   char *p;
6248
6249   for (p = msg; p[0] && p[1]; p += 2)
6250     {
6251       char tb[2];
6252       char c = fromhex (p[0]) * 16 + fromhex (p[1]);
6253
6254       tb[0] = c;
6255       tb[1] = 0;
6256       fputs_unfiltered (tb, gdb_stdtarg);
6257     }
6258   gdb_flush (gdb_stdtarg);
6259 }
6260
6261 DEF_VEC_O(cached_reg_t);
6262
6263 typedef struct stop_reply
6264 {
6265   struct notif_event base;
6266
6267   /* The identifier of the thread about this event  */
6268   ptid_t ptid;
6269
6270   /* The remote state this event is associated with.  When the remote
6271      connection, represented by a remote_state object, is closed,
6272      all the associated stop_reply events should be released.  */
6273   struct remote_state *rs;
6274
6275   struct target_waitstatus ws;
6276
6277   /* The architecture associated with the expedited registers.  */
6278   gdbarch *arch;
6279
6280   /* Expedited registers.  This makes remote debugging a bit more
6281      efficient for those targets that provide critical registers as
6282      part of their normal status mechanism (as another roundtrip to
6283      fetch them is avoided).  */
6284   VEC(cached_reg_t) *regcache;
6285
6286   enum target_stop_reason stop_reason;
6287
6288   CORE_ADDR watch_data_address;
6289
6290   int core;
6291 } *stop_reply_p;
6292
6293 DECLARE_QUEUE_P (stop_reply_p);
6294 DEFINE_QUEUE_P (stop_reply_p);
6295 /* The list of already fetched and acknowledged stop events.  This
6296    queue is used for notification Stop, and other notifications
6297    don't need queue for their events, because the notification events
6298    of Stop can't be consumed immediately, so that events should be
6299    queued first, and be consumed by remote_wait_{ns,as} one per
6300    time.  Other notifications can consume their events immediately,
6301    so queue is not needed for them.  */
6302 static QUEUE (stop_reply_p) *stop_reply_queue;
6303
6304 static void
6305 stop_reply_xfree (struct stop_reply *r)
6306 {
6307   notif_event_xfree ((struct notif_event *) r);
6308 }
6309
6310 /* Return the length of the stop reply queue.  */
6311
6312 static int
6313 stop_reply_queue_length (void)
6314 {
6315   return QUEUE_length (stop_reply_p, stop_reply_queue);
6316 }
6317
6318 static void
6319 remote_notif_stop_parse (struct notif_client *self, char *buf,
6320                          struct notif_event *event)
6321 {
6322   remote_parse_stop_reply (buf, (struct stop_reply *) event);
6323 }
6324
6325 static void
6326 remote_notif_stop_ack (struct notif_client *self, char *buf,
6327                        struct notif_event *event)
6328 {
6329   struct stop_reply *stop_reply = (struct stop_reply *) event;
6330
6331   /* acknowledge */
6332   putpkt (self->ack_command);
6333
6334   if (stop_reply->ws.kind == TARGET_WAITKIND_IGNORE)
6335       /* We got an unknown stop reply.  */
6336       error (_("Unknown stop reply"));
6337
6338   push_stop_reply (stop_reply);
6339 }
6340
6341 static int
6342 remote_notif_stop_can_get_pending_events (struct notif_client *self)
6343 {
6344   /* We can't get pending events in remote_notif_process for
6345      notification stop, and we have to do this in remote_wait_ns
6346      instead.  If we fetch all queued events from stub, remote stub
6347      may exit and we have no chance to process them back in
6348      remote_wait_ns.  */
6349   mark_async_event_handler (remote_async_inferior_event_token);
6350   return 0;
6351 }
6352
6353 static void
6354 stop_reply_dtr (struct notif_event *event)
6355 {
6356   struct stop_reply *r = (struct stop_reply *) event;
6357   cached_reg_t *reg;
6358   int ix;
6359
6360   for (ix = 0;
6361        VEC_iterate (cached_reg_t, r->regcache, ix, reg);
6362        ix++)
6363     xfree (reg->data);
6364
6365   VEC_free (cached_reg_t, r->regcache);
6366 }
6367
6368 static struct notif_event *
6369 remote_notif_stop_alloc_reply (void)
6370 {
6371   /* We cast to a pointer to the "base class".  */
6372   struct notif_event *r = (struct notif_event *) XNEW (struct stop_reply);
6373
6374   r->dtr = stop_reply_dtr;
6375
6376   return r;
6377 }
6378
6379 /* A client of notification Stop.  */
6380
6381 struct notif_client notif_client_stop =
6382 {
6383   "Stop",
6384   "vStopped",
6385   remote_notif_stop_parse,
6386   remote_notif_stop_ack,
6387   remote_notif_stop_can_get_pending_events,
6388   remote_notif_stop_alloc_reply,
6389   REMOTE_NOTIF_STOP,
6390 };
6391
6392 /* A parameter to pass data in and out.  */
6393
6394 struct queue_iter_param
6395 {
6396   void *input;
6397   struct stop_reply *output;
6398 };
6399
6400 /* Determine if THREAD_PTID is a pending fork parent thread.  ARG contains
6401    the pid of the process that owns the threads we want to check, or
6402    -1 if we want to check all threads.  */
6403
6404 static int
6405 is_pending_fork_parent (struct target_waitstatus *ws, int event_pid,
6406                         ptid_t thread_ptid)
6407 {
6408   if (ws->kind == TARGET_WAITKIND_FORKED
6409       || ws->kind == TARGET_WAITKIND_VFORKED)
6410     {
6411       if (event_pid == -1 || event_pid == ptid_get_pid (thread_ptid))
6412         return 1;
6413     }
6414
6415   return 0;
6416 }
6417
6418 /* Return the thread's pending status used to determine whether the
6419    thread is a fork parent stopped at a fork event.  */
6420
6421 static struct target_waitstatus *
6422 thread_pending_fork_status (struct thread_info *thread)
6423 {
6424   if (thread->suspend.waitstatus_pending_p)
6425     return &thread->suspend.waitstatus;
6426   else
6427     return &thread->pending_follow;
6428 }
6429
6430 /* Determine if THREAD is a pending fork parent thread.  */
6431
6432 static int
6433 is_pending_fork_parent_thread (struct thread_info *thread)
6434 {
6435   struct target_waitstatus *ws = thread_pending_fork_status (thread);
6436   int pid = -1;
6437
6438   return is_pending_fork_parent (ws, pid, thread->ptid);
6439 }
6440
6441 /* Check whether EVENT is a fork event, and if it is, remove the
6442    fork child from the context list passed in DATA.  */
6443
6444 static int
6445 remove_child_of_pending_fork (QUEUE (stop_reply_p) *q,
6446                               QUEUE_ITER (stop_reply_p) *iter,
6447                               stop_reply_p event,
6448                               void *data)
6449 {
6450   struct queue_iter_param *param = (struct queue_iter_param *) data;
6451   struct threads_listing_context *context
6452     = (struct threads_listing_context *) param->input;
6453
6454   if (event->ws.kind == TARGET_WAITKIND_FORKED
6455       || event->ws.kind == TARGET_WAITKIND_VFORKED
6456       || event->ws.kind == TARGET_WAITKIND_THREAD_EXITED)
6457     context->remove_thread (event->ws.value.related_pid);
6458
6459   return 1;
6460 }
6461
6462 /* If CONTEXT contains any fork child threads that have not been
6463    reported yet, remove them from the CONTEXT list.  If such a
6464    thread exists it is because we are stopped at a fork catchpoint
6465    and have not yet called follow_fork, which will set up the
6466    host-side data structures for the new process.  */
6467
6468 static void
6469 remove_new_fork_children (struct threads_listing_context *context)
6470 {
6471   struct thread_info * thread;
6472   int pid = -1;
6473   struct notif_client *notif = &notif_client_stop;
6474   struct queue_iter_param param;
6475
6476   /* For any threads stopped at a fork event, remove the corresponding
6477      fork child threads from the CONTEXT list.  */
6478   ALL_NON_EXITED_THREADS (thread)
6479     {
6480       struct target_waitstatus *ws = thread_pending_fork_status (thread);
6481
6482       if (is_pending_fork_parent (ws, pid, thread->ptid))
6483         context->remove_thread (ws->value.related_pid);
6484     }
6485
6486   /* Check for any pending fork events (not reported or processed yet)
6487      in process PID and remove those fork child threads from the
6488      CONTEXT list as well.  */
6489   remote_notif_get_pending_events (notif);
6490   param.input = context;
6491   param.output = NULL;
6492   QUEUE_iterate (stop_reply_p, stop_reply_queue,
6493                  remove_child_of_pending_fork, &param);
6494 }
6495
6496 /* Check whether EVENT would prevent a global or process wildcard
6497    vCont action.  */
6498
6499 static int
6500 check_pending_event_prevents_wildcard_vcont_callback
6501   (QUEUE (stop_reply_p) *q,
6502    QUEUE_ITER (stop_reply_p) *iter,
6503    stop_reply_p event,
6504    void *data)
6505 {
6506   struct inferior *inf;
6507   int *may_global_wildcard_vcont = (int *) data;
6508
6509   if (event->ws.kind == TARGET_WAITKIND_NO_RESUMED
6510       || event->ws.kind == TARGET_WAITKIND_NO_HISTORY)
6511     return 1;
6512
6513   if (event->ws.kind == TARGET_WAITKIND_FORKED
6514       || event->ws.kind == TARGET_WAITKIND_VFORKED)
6515     *may_global_wildcard_vcont = 0;
6516
6517   inf = find_inferior_ptid (event->ptid);
6518
6519   /* This may be the first time we heard about this process.
6520      Regardless, we must not do a global wildcard resume, otherwise
6521      we'd resume this process too.  */
6522   *may_global_wildcard_vcont = 0;
6523   if (inf != NULL)
6524     get_remote_inferior (inf)->may_wildcard_vcont = false;
6525
6526   return 1;
6527 }
6528
6529 /* Check whether any event pending in the vStopped queue would prevent
6530    a global or process wildcard vCont action.  Clear
6531    *may_global_wildcard if we can't do a global wildcard (vCont;c),
6532    and clear the event inferior's may_wildcard_vcont flag if we can't
6533    do a process-wide wildcard resume (vCont;c:pPID.-1).  */
6534
6535 static void
6536 check_pending_events_prevent_wildcard_vcont (int *may_global_wildcard)
6537 {
6538   struct notif_client *notif = &notif_client_stop;
6539
6540   remote_notif_get_pending_events (notif);
6541   QUEUE_iterate (stop_reply_p, stop_reply_queue,
6542                  check_pending_event_prevents_wildcard_vcont_callback,
6543                  may_global_wildcard);
6544 }
6545
6546 /* Remove stop replies in the queue if its pid is equal to the given
6547    inferior's pid.  */
6548
6549 static int
6550 remove_stop_reply_for_inferior (QUEUE (stop_reply_p) *q,
6551                                 QUEUE_ITER (stop_reply_p) *iter,
6552                                 stop_reply_p event,
6553                                 void *data)
6554 {
6555   struct queue_iter_param *param = (struct queue_iter_param *) data;
6556   struct inferior *inf = (struct inferior *) param->input;
6557
6558   if (ptid_get_pid (event->ptid) == inf->pid)
6559     {
6560       stop_reply_xfree (event);
6561       QUEUE_remove_elem (stop_reply_p, q, iter);
6562     }
6563
6564   return 1;
6565 }
6566
6567 /* Discard all pending stop replies of inferior INF.  */
6568
6569 static void
6570 discard_pending_stop_replies (struct inferior *inf)
6571 {
6572   struct queue_iter_param param;
6573   struct stop_reply *reply;
6574   struct remote_state *rs = get_remote_state ();
6575   struct remote_notif_state *rns = rs->notif_state;
6576
6577   /* This function can be notified when an inferior exists.  When the
6578      target is not remote, the notification state is NULL.  */
6579   if (rs->remote_desc == NULL)
6580     return;
6581
6582   reply = (struct stop_reply *) rns->pending_event[notif_client_stop.id];
6583
6584   /* Discard the in-flight notification.  */
6585   if (reply != NULL && ptid_get_pid (reply->ptid) == inf->pid)
6586     {
6587       stop_reply_xfree (reply);
6588       rns->pending_event[notif_client_stop.id] = NULL;
6589     }
6590
6591   param.input = inf;
6592   param.output = NULL;
6593   /* Discard the stop replies we have already pulled with
6594      vStopped.  */
6595   QUEUE_iterate (stop_reply_p, stop_reply_queue,
6596                  remove_stop_reply_for_inferior, &param);
6597 }
6598
6599 /* If its remote state is equal to the given remote state,
6600    remove EVENT from the stop reply queue.  */
6601
6602 static int
6603 remove_stop_reply_of_remote_state (QUEUE (stop_reply_p) *q,
6604                                    QUEUE_ITER (stop_reply_p) *iter,
6605                                    stop_reply_p event,
6606                                    void *data)
6607 {
6608   struct queue_iter_param *param = (struct queue_iter_param *) data;
6609   struct remote_state *rs = (struct remote_state *) param->input;
6610
6611   if (event->rs == rs)
6612     {
6613       stop_reply_xfree (event);
6614       QUEUE_remove_elem (stop_reply_p, q, iter);
6615     }
6616
6617   return 1;
6618 }
6619
6620 /* Discard the stop replies for RS in stop_reply_queue.  */
6621
6622 static void
6623 discard_pending_stop_replies_in_queue (struct remote_state *rs)
6624 {
6625   struct queue_iter_param param;
6626
6627   param.input = rs;
6628   param.output = NULL;
6629   /* Discard the stop replies we have already pulled with
6630      vStopped.  */
6631   QUEUE_iterate (stop_reply_p, stop_reply_queue,
6632                  remove_stop_reply_of_remote_state, &param);
6633 }
6634
6635 /* A parameter to pass data in and out.  */
6636
6637 static int
6638 remote_notif_remove_once_on_match (QUEUE (stop_reply_p) *q,
6639                                    QUEUE_ITER (stop_reply_p) *iter,
6640                                    stop_reply_p event,
6641                                    void *data)
6642 {
6643   struct queue_iter_param *param = (struct queue_iter_param *) data;
6644   ptid_t *ptid = (ptid_t *) param->input;
6645
6646   if (ptid_match (event->ptid, *ptid))
6647     {
6648       param->output = event;
6649       QUEUE_remove_elem (stop_reply_p, q, iter);
6650       return 0;
6651     }
6652
6653   return 1;
6654 }
6655
6656 /* Remove the first reply in 'stop_reply_queue' which matches
6657    PTID.  */
6658
6659 static struct stop_reply *
6660 remote_notif_remove_queued_reply (ptid_t ptid)
6661 {
6662   struct queue_iter_param param;
6663
6664   param.input = &ptid;
6665   param.output = NULL;
6666
6667   QUEUE_iterate (stop_reply_p, stop_reply_queue,
6668                  remote_notif_remove_once_on_match, &param);
6669   if (notif_debug)
6670     fprintf_unfiltered (gdb_stdlog,
6671                         "notif: discard queued event: 'Stop' in %s\n",
6672                         target_pid_to_str (ptid));
6673
6674   return param.output;
6675 }
6676
6677 /* Look for a queued stop reply belonging to PTID.  If one is found,
6678    remove it from the queue, and return it.  Returns NULL if none is
6679    found.  If there are still queued events left to process, tell the
6680    event loop to get back to target_wait soon.  */
6681
6682 static struct stop_reply *
6683 queued_stop_reply (ptid_t ptid)
6684 {
6685   struct stop_reply *r = remote_notif_remove_queued_reply (ptid);
6686
6687   if (!QUEUE_is_empty (stop_reply_p, stop_reply_queue))
6688     /* There's still at least an event left.  */
6689     mark_async_event_handler (remote_async_inferior_event_token);
6690
6691   return r;
6692 }
6693
6694 /* Push a fully parsed stop reply in the stop reply queue.  Since we
6695    know that we now have at least one queued event left to pass to the
6696    core side, tell the event loop to get back to target_wait soon.  */
6697
6698 static void
6699 push_stop_reply (struct stop_reply *new_event)
6700 {
6701   QUEUE_enque (stop_reply_p, stop_reply_queue, new_event);
6702
6703   if (notif_debug)
6704     fprintf_unfiltered (gdb_stdlog,
6705                         "notif: push 'Stop' %s to queue %d\n",
6706                         target_pid_to_str (new_event->ptid),
6707                         QUEUE_length (stop_reply_p,
6708                                       stop_reply_queue));
6709
6710   mark_async_event_handler (remote_async_inferior_event_token);
6711 }
6712
6713 static int
6714 stop_reply_match_ptid_and_ws (QUEUE (stop_reply_p) *q,
6715                               QUEUE_ITER (stop_reply_p) *iter,
6716                               struct stop_reply *event,
6717                               void *data)
6718 {
6719   ptid_t *ptid = (ptid_t *) data;
6720
6721   return !(ptid_equal (*ptid, event->ptid)
6722            && event->ws.kind == TARGET_WAITKIND_STOPPED);
6723 }
6724
6725 /* Returns true if we have a stop reply for PTID.  */
6726
6727 static int
6728 peek_stop_reply (ptid_t ptid)
6729 {
6730   return !QUEUE_iterate (stop_reply_p, stop_reply_queue,
6731                          stop_reply_match_ptid_and_ws, &ptid);
6732 }
6733
6734 /* Helper for remote_parse_stop_reply.  Return nonzero if the substring
6735    starting with P and ending with PEND matches PREFIX.  */
6736
6737 static int
6738 strprefix (const char *p, const char *pend, const char *prefix)
6739 {
6740   for ( ; p < pend; p++, prefix++)
6741     if (*p != *prefix)
6742       return 0;
6743   return *prefix == '\0';
6744 }
6745
6746 /* Parse the stop reply in BUF.  Either the function succeeds, and the
6747    result is stored in EVENT, or throws an error.  */
6748
6749 static void
6750 remote_parse_stop_reply (char *buf, struct stop_reply *event)
6751 {
6752   remote_arch_state *rsa = NULL;
6753   ULONGEST addr;
6754   const char *p;
6755   int skipregs = 0;
6756
6757   event->ptid = null_ptid;
6758   event->rs = get_remote_state ();
6759   event->ws.kind = TARGET_WAITKIND_IGNORE;
6760   event->ws.value.integer = 0;
6761   event->stop_reason = TARGET_STOPPED_BY_NO_REASON;
6762   event->regcache = NULL;
6763   event->core = -1;
6764
6765   switch (buf[0])
6766     {
6767     case 'T':           /* Status with PC, SP, FP, ...  */
6768       /* Expedited reply, containing Signal, {regno, reg} repeat.  */
6769       /*  format is:  'Tssn...:r...;n...:r...;n...:r...;#cc', where
6770             ss = signal number
6771             n... = register number
6772             r... = register contents
6773       */
6774
6775       p = &buf[3];      /* after Txx */
6776       while (*p)
6777         {
6778           const char *p1;
6779           int fieldsize;
6780
6781           p1 = strchr (p, ':');
6782           if (p1 == NULL)
6783             error (_("Malformed packet(a) (missing colon): %s\n\
6784 Packet: '%s'\n"),
6785                    p, buf);
6786           if (p == p1)
6787             error (_("Malformed packet(a) (missing register number): %s\n\
6788 Packet: '%s'\n"),
6789                    p, buf);
6790
6791           /* Some "registers" are actually extended stop information.
6792              Note if you're adding a new entry here: GDB 7.9 and
6793              earlier assume that all register "numbers" that start
6794              with an hex digit are real register numbers.  Make sure
6795              the server only sends such a packet if it knows the
6796              client understands it.  */
6797
6798           if (strprefix (p, p1, "thread"))
6799             event->ptid = read_ptid (++p1, &p);
6800           else if (strprefix (p, p1, "syscall_entry"))
6801             {
6802               ULONGEST sysno;
6803
6804               event->ws.kind = TARGET_WAITKIND_SYSCALL_ENTRY;
6805               p = unpack_varlen_hex (++p1, &sysno);
6806               event->ws.value.syscall_number = (int) sysno;
6807             }
6808           else if (strprefix (p, p1, "syscall_return"))
6809             {
6810               ULONGEST sysno;
6811
6812               event->ws.kind = TARGET_WAITKIND_SYSCALL_RETURN;
6813               p = unpack_varlen_hex (++p1, &sysno);
6814               event->ws.value.syscall_number = (int) sysno;
6815             }
6816           else if (strprefix (p, p1, "watch")
6817                    || strprefix (p, p1, "rwatch")
6818                    || strprefix (p, p1, "awatch"))
6819             {
6820               event->stop_reason = TARGET_STOPPED_BY_WATCHPOINT;
6821               p = unpack_varlen_hex (++p1, &addr);
6822               event->watch_data_address = (CORE_ADDR) addr;
6823             }
6824           else if (strprefix (p, p1, "swbreak"))
6825             {
6826               event->stop_reason = TARGET_STOPPED_BY_SW_BREAKPOINT;
6827
6828               /* Make sure the stub doesn't forget to indicate support
6829                  with qSupported.  */
6830               if (packet_support (PACKET_swbreak_feature) != PACKET_ENABLE)
6831                 error (_("Unexpected swbreak stop reason"));
6832
6833               /* The value part is documented as "must be empty",
6834                  though we ignore it, in case we ever decide to make
6835                  use of it in a backward compatible way.  */
6836               p = strchrnul (p1 + 1, ';');
6837             }
6838           else if (strprefix (p, p1, "hwbreak"))
6839             {
6840               event->stop_reason = TARGET_STOPPED_BY_HW_BREAKPOINT;
6841
6842               /* Make sure the stub doesn't forget to indicate support
6843                  with qSupported.  */
6844               if (packet_support (PACKET_hwbreak_feature) != PACKET_ENABLE)
6845                 error (_("Unexpected hwbreak stop reason"));
6846
6847               /* See above.  */
6848               p = strchrnul (p1 + 1, ';');
6849             }
6850           else if (strprefix (p, p1, "library"))
6851             {
6852               event->ws.kind = TARGET_WAITKIND_LOADED;
6853               p = strchrnul (p1 + 1, ';');
6854             }
6855           else if (strprefix (p, p1, "replaylog"))
6856             {
6857               event->ws.kind = TARGET_WAITKIND_NO_HISTORY;
6858               /* p1 will indicate "begin" or "end", but it makes
6859                  no difference for now, so ignore it.  */
6860               p = strchrnul (p1 + 1, ';');
6861             }
6862           else if (strprefix (p, p1, "core"))
6863             {
6864               ULONGEST c;
6865
6866               p = unpack_varlen_hex (++p1, &c);
6867               event->core = c;
6868             }
6869           else if (strprefix (p, p1, "fork"))
6870             {
6871               event->ws.value.related_pid = read_ptid (++p1, &p);
6872               event->ws.kind = TARGET_WAITKIND_FORKED;
6873             }
6874           else if (strprefix (p, p1, "vfork"))
6875             {
6876               event->ws.value.related_pid = read_ptid (++p1, &p);
6877               event->ws.kind = TARGET_WAITKIND_VFORKED;
6878             }
6879           else if (strprefix (p, p1, "vforkdone"))
6880             {
6881               event->ws.kind = TARGET_WAITKIND_VFORK_DONE;
6882               p = strchrnul (p1 + 1, ';');
6883             }
6884           else if (strprefix (p, p1, "exec"))
6885             {
6886               ULONGEST ignored;
6887               char pathname[PATH_MAX];
6888               int pathlen;
6889
6890               /* Determine the length of the execd pathname.  */
6891               p = unpack_varlen_hex (++p1, &ignored);
6892               pathlen = (p - p1) / 2;
6893
6894               /* Save the pathname for event reporting and for
6895                  the next run command.  */
6896               hex2bin (p1, (gdb_byte *) pathname, pathlen);
6897               pathname[pathlen] = '\0';
6898
6899               /* This is freed during event handling.  */
6900               event->ws.value.execd_pathname = xstrdup (pathname);
6901               event->ws.kind = TARGET_WAITKIND_EXECD;
6902
6903               /* Skip the registers included in this packet, since
6904                  they may be for an architecture different from the
6905                  one used by the original program.  */
6906               skipregs = 1;
6907             }
6908           else if (strprefix (p, p1, "create"))
6909             {
6910               event->ws.kind = TARGET_WAITKIND_THREAD_CREATED;
6911               p = strchrnul (p1 + 1, ';');
6912             }
6913           else
6914             {
6915               ULONGEST pnum;
6916               const char *p_temp;
6917
6918               if (skipregs)
6919                 {
6920                   p = strchrnul (p1 + 1, ';');
6921                   p++;
6922                   continue;
6923                 }
6924
6925               /* Maybe a real ``P'' register number.  */
6926               p_temp = unpack_varlen_hex (p, &pnum);
6927               /* If the first invalid character is the colon, we got a
6928                  register number.  Otherwise, it's an unknown stop
6929                  reason.  */
6930               if (p_temp == p1)
6931                 {
6932                   /* If we haven't parsed the event's thread yet, find
6933                      it now, in order to find the architecture of the
6934                      reported expedited registers.  */
6935                   if (event->ptid == null_ptid)
6936                     {
6937                       const char *thr = strstr (p1 + 1, ";thread:");
6938                       if (thr != NULL)
6939                         event->ptid = read_ptid (thr + strlen (";thread:"),
6940                                                  NULL);
6941                       else
6942                         event->ptid = magic_null_ptid;
6943                     }
6944
6945                   if (rsa == NULL)
6946                     {
6947                       inferior *inf = (event->ptid == null_ptid
6948                                        ? NULL
6949                                        : find_inferior_ptid (event->ptid));
6950                       /* If this is the first time we learn anything
6951                          about this process, skip the registers
6952                          included in this packet, since we don't yet
6953                          know which architecture to use to parse them.
6954                          We'll determine the architecture later when
6955                          we process the stop reply and retrieve the
6956                          target description, via
6957                          remote_notice_new_inferior ->
6958                          post_create_inferior.  */
6959                       if (inf == NULL)
6960                         {
6961                           p = strchrnul (p1 + 1, ';');
6962                           p++;
6963                           continue;
6964                         }
6965
6966                       event->arch = inf->gdbarch;
6967                       rsa = get_remote_arch_state (event->arch);
6968                     }
6969
6970                   packet_reg *reg
6971                     = packet_reg_from_pnum (event->arch, rsa, pnum);
6972                   cached_reg_t cached_reg;
6973
6974                   if (reg == NULL)
6975                     error (_("Remote sent bad register number %s: %s\n\
6976 Packet: '%s'\n"),
6977                            hex_string (pnum), p, buf);
6978
6979                   cached_reg.num = reg->regnum;
6980                   cached_reg.data = (gdb_byte *)
6981                     xmalloc (register_size (event->arch, reg->regnum));
6982
6983                   p = p1 + 1;
6984                   fieldsize = hex2bin (p, cached_reg.data,
6985                                        register_size (event->arch, reg->regnum));
6986                   p += 2 * fieldsize;
6987                   if (fieldsize < register_size (event->arch, reg->regnum))
6988                     warning (_("Remote reply is too short: %s"), buf);
6989
6990                   VEC_safe_push (cached_reg_t, event->regcache, &cached_reg);
6991                 }
6992               else
6993                 {
6994                   /* Not a number.  Silently skip unknown optional
6995                      info.  */
6996                   p = strchrnul (p1 + 1, ';');
6997                 }
6998             }
6999
7000           if (*p != ';')
7001             error (_("Remote register badly formatted: %s\nhere: %s"),
7002                    buf, p);
7003           ++p;
7004         }
7005
7006       if (event->ws.kind != TARGET_WAITKIND_IGNORE)
7007         break;
7008
7009       /* fall through */
7010     case 'S':           /* Old style status, just signal only.  */
7011       {
7012         int sig;
7013
7014         event->ws.kind = TARGET_WAITKIND_STOPPED;
7015         sig = (fromhex (buf[1]) << 4) + fromhex (buf[2]);
7016         if (GDB_SIGNAL_FIRST <= sig && sig < GDB_SIGNAL_LAST)
7017           event->ws.value.sig = (enum gdb_signal) sig;
7018         else
7019           event->ws.value.sig = GDB_SIGNAL_UNKNOWN;
7020       }
7021       break;
7022     case 'w':           /* Thread exited.  */
7023       {
7024         const char *p;
7025         ULONGEST value;
7026
7027         event->ws.kind = TARGET_WAITKIND_THREAD_EXITED;
7028         p = unpack_varlen_hex (&buf[1], &value);
7029         event->ws.value.integer = value;
7030         if (*p != ';')
7031           error (_("stop reply packet badly formatted: %s"), buf);
7032         event->ptid = read_ptid (++p, NULL);
7033         break;
7034       }
7035     case 'W':           /* Target exited.  */
7036     case 'X':
7037       {
7038         const char *p;
7039         int pid;
7040         ULONGEST value;
7041
7042         /* GDB used to accept only 2 hex chars here.  Stubs should
7043            only send more if they detect GDB supports multi-process
7044            support.  */
7045         p = unpack_varlen_hex (&buf[1], &value);
7046
7047         if (buf[0] == 'W')
7048           {
7049             /* The remote process exited.  */
7050             event->ws.kind = TARGET_WAITKIND_EXITED;
7051             event->ws.value.integer = value;
7052           }
7053         else
7054           {
7055             /* The remote process exited with a signal.  */
7056             event->ws.kind = TARGET_WAITKIND_SIGNALLED;
7057             if (GDB_SIGNAL_FIRST <= value && value < GDB_SIGNAL_LAST)
7058               event->ws.value.sig = (enum gdb_signal) value;
7059             else
7060               event->ws.value.sig = GDB_SIGNAL_UNKNOWN;
7061           }
7062
7063         /* If no process is specified, assume inferior_ptid.  */
7064         pid = ptid_get_pid (inferior_ptid);
7065         if (*p == '\0')
7066           ;
7067         else if (*p == ';')
7068           {
7069             p++;
7070
7071             if (*p == '\0')
7072               ;
7073             else if (startswith (p, "process:"))
7074               {
7075                 ULONGEST upid;
7076
7077                 p += sizeof ("process:") - 1;
7078                 unpack_varlen_hex (p, &upid);
7079                 pid = upid;
7080               }
7081             else
7082               error (_("unknown stop reply packet: %s"), buf);
7083           }
7084         else
7085           error (_("unknown stop reply packet: %s"), buf);
7086         event->ptid = pid_to_ptid (pid);
7087       }
7088       break;
7089     case 'N':
7090       event->ws.kind = TARGET_WAITKIND_NO_RESUMED;
7091       event->ptid = minus_one_ptid;
7092       break;
7093     }
7094
7095   if (target_is_non_stop_p () && ptid_equal (event->ptid, null_ptid))
7096     error (_("No process or thread specified in stop reply: %s"), buf);
7097 }
7098
7099 /* When the stub wants to tell GDB about a new notification reply, it
7100    sends a notification (%Stop, for example).  Those can come it at
7101    any time, hence, we have to make sure that any pending
7102    putpkt/getpkt sequence we're making is finished, before querying
7103    the stub for more events with the corresponding ack command
7104    (vStopped, for example).  E.g., if we started a vStopped sequence
7105    immediately upon receiving the notification, something like this
7106    could happen:
7107
7108     1.1) --> Hg 1
7109     1.2) <-- OK
7110     1.3) --> g
7111     1.4) <-- %Stop
7112     1.5) --> vStopped
7113     1.6) <-- (registers reply to step #1.3)
7114
7115    Obviously, the reply in step #1.6 would be unexpected to a vStopped
7116    query.
7117
7118    To solve this, whenever we parse a %Stop notification successfully,
7119    we mark the REMOTE_ASYNC_GET_PENDING_EVENTS_TOKEN, and carry on
7120    doing whatever we were doing:
7121
7122     2.1) --> Hg 1
7123     2.2) <-- OK
7124     2.3) --> g
7125     2.4) <-- %Stop
7126       <GDB marks the REMOTE_ASYNC_GET_PENDING_EVENTS_TOKEN>
7127     2.5) <-- (registers reply to step #2.3)
7128
7129    Eventualy after step #2.5, we return to the event loop, which
7130    notices there's an event on the
7131    REMOTE_ASYNC_GET_PENDING_EVENTS_TOKEN event and calls the
7132    associated callback --- the function below.  At this point, we're
7133    always safe to start a vStopped sequence. :
7134
7135     2.6) --> vStopped
7136     2.7) <-- T05 thread:2
7137     2.8) --> vStopped
7138     2.9) --> OK
7139 */
7140
7141 void
7142 remote_notif_get_pending_events (struct notif_client *nc)
7143 {
7144   struct remote_state *rs = get_remote_state ();
7145
7146   if (rs->notif_state->pending_event[nc->id] != NULL)
7147     {
7148       if (notif_debug)
7149         fprintf_unfiltered (gdb_stdlog,
7150                             "notif: process: '%s' ack pending event\n",
7151                             nc->name);
7152
7153       /* acknowledge */
7154       nc->ack (nc, rs->buf, rs->notif_state->pending_event[nc->id]);
7155       rs->notif_state->pending_event[nc->id] = NULL;
7156
7157       while (1)
7158         {
7159           getpkt (&rs->buf, &rs->buf_size, 0);
7160           if (strcmp (rs->buf, "OK") == 0)
7161             break;
7162           else
7163             remote_notif_ack (nc, rs->buf);
7164         }
7165     }
7166   else
7167     {
7168       if (notif_debug)
7169         fprintf_unfiltered (gdb_stdlog,
7170                             "notif: process: '%s' no pending reply\n",
7171                             nc->name);
7172     }
7173 }
7174
7175 /* Called when it is decided that STOP_REPLY holds the info of the
7176    event that is to be returned to the core.  This function always
7177    destroys STOP_REPLY.  */
7178
7179 static ptid_t
7180 process_stop_reply (struct stop_reply *stop_reply,
7181                     struct target_waitstatus *status)
7182 {
7183   ptid_t ptid;
7184
7185   *status = stop_reply->ws;
7186   ptid = stop_reply->ptid;
7187
7188   /* If no thread/process was reported by the stub, assume the current
7189      inferior.  */
7190   if (ptid_equal (ptid, null_ptid))
7191     ptid = inferior_ptid;
7192
7193   if (status->kind != TARGET_WAITKIND_EXITED
7194       && status->kind != TARGET_WAITKIND_SIGNALLED
7195       && status->kind != TARGET_WAITKIND_NO_RESUMED)
7196     {
7197       /* Expedited registers.  */
7198       if (stop_reply->regcache)
7199         {
7200           struct regcache *regcache
7201             = get_thread_arch_regcache (ptid, stop_reply->arch);
7202           cached_reg_t *reg;
7203           int ix;
7204
7205           for (ix = 0;
7206                VEC_iterate (cached_reg_t, stop_reply->regcache, ix, reg);
7207                ix++)
7208           {
7209             regcache_raw_supply (regcache, reg->num, reg->data);
7210             xfree (reg->data);
7211           }
7212
7213           VEC_free (cached_reg_t, stop_reply->regcache);
7214         }
7215
7216       remote_notice_new_inferior (ptid, 0);
7217       remote_thread_info *remote_thr = get_remote_thread_info (ptid);
7218       remote_thr->core = stop_reply->core;
7219       remote_thr->stop_reason = stop_reply->stop_reason;
7220       remote_thr->watch_data_address = stop_reply->watch_data_address;
7221       remote_thr->vcont_resumed = 0;
7222     }
7223
7224   stop_reply_xfree (stop_reply);
7225   return ptid;
7226 }
7227
7228 /* The non-stop mode version of target_wait.  */
7229
7230 static ptid_t
7231 remote_wait_ns (ptid_t ptid, struct target_waitstatus *status, int options)
7232 {
7233   struct remote_state *rs = get_remote_state ();
7234   struct stop_reply *stop_reply;
7235   int ret;
7236   int is_notif = 0;
7237
7238   /* If in non-stop mode, get out of getpkt even if a
7239      notification is received.  */
7240
7241   ret = getpkt_or_notif_sane (&rs->buf, &rs->buf_size,
7242                               0 /* forever */, &is_notif);
7243   while (1)
7244     {
7245       if (ret != -1 && !is_notif)
7246         switch (rs->buf[0])
7247           {
7248           case 'E':             /* Error of some sort.  */
7249             /* We're out of sync with the target now.  Did it continue
7250                or not?  We can't tell which thread it was in non-stop,
7251                so just ignore this.  */
7252             warning (_("Remote failure reply: %s"), rs->buf);
7253             break;
7254           case 'O':             /* Console output.  */
7255             remote_console_output (rs->buf + 1);
7256             break;
7257           default:
7258             warning (_("Invalid remote reply: %s"), rs->buf);
7259             break;
7260           }
7261
7262       /* Acknowledge a pending stop reply that may have arrived in the
7263          mean time.  */
7264       if (rs->notif_state->pending_event[notif_client_stop.id] != NULL)
7265         remote_notif_get_pending_events (&notif_client_stop);
7266
7267       /* If indeed we noticed a stop reply, we're done.  */
7268       stop_reply = queued_stop_reply (ptid);
7269       if (stop_reply != NULL)
7270         return process_stop_reply (stop_reply, status);
7271
7272       /* Still no event.  If we're just polling for an event, then
7273          return to the event loop.  */
7274       if (options & TARGET_WNOHANG)
7275         {
7276           status->kind = TARGET_WAITKIND_IGNORE;
7277           return minus_one_ptid;
7278         }
7279
7280       /* Otherwise do a blocking wait.  */
7281       ret = getpkt_or_notif_sane (&rs->buf, &rs->buf_size,
7282                                   1 /* forever */, &is_notif);
7283     }
7284 }
7285
7286 /* Wait until the remote machine stops, then return, storing status in
7287    STATUS just as `wait' would.  */
7288
7289 static ptid_t
7290 remote_wait_as (ptid_t ptid, struct target_waitstatus *status, int options)
7291 {
7292   struct remote_state *rs = get_remote_state ();
7293   ptid_t event_ptid = null_ptid;
7294   char *buf;
7295   struct stop_reply *stop_reply;
7296
7297  again:
7298
7299   status->kind = TARGET_WAITKIND_IGNORE;
7300   status->value.integer = 0;
7301
7302   stop_reply = queued_stop_reply (ptid);
7303   if (stop_reply != NULL)
7304     return process_stop_reply (stop_reply, status);
7305
7306   if (rs->cached_wait_status)
7307     /* Use the cached wait status, but only once.  */
7308     rs->cached_wait_status = 0;
7309   else
7310     {
7311       int ret;
7312       int is_notif;
7313       int forever = ((options & TARGET_WNOHANG) == 0
7314                      && wait_forever_enabled_p);
7315
7316       if (!rs->waiting_for_stop_reply)
7317         {
7318           status->kind = TARGET_WAITKIND_NO_RESUMED;
7319           return minus_one_ptid;
7320         }
7321
7322       /* FIXME: cagney/1999-09-27: If we're in async mode we should
7323          _never_ wait for ever -> test on target_is_async_p().
7324          However, before we do that we need to ensure that the caller
7325          knows how to take the target into/out of async mode.  */
7326       ret = getpkt_or_notif_sane (&rs->buf, &rs->buf_size,
7327                                   forever, &is_notif);
7328
7329       /* GDB gets a notification.  Return to core as this event is
7330          not interesting.  */
7331       if (ret != -1 && is_notif)
7332         return minus_one_ptid;
7333
7334       if (ret == -1 && (options & TARGET_WNOHANG) != 0)
7335         return minus_one_ptid;
7336     }
7337
7338   buf = rs->buf;
7339
7340   /* Assume that the target has acknowledged Ctrl-C unless we receive
7341      an 'F' or 'O' packet.  */
7342   if (buf[0] != 'F' && buf[0] != 'O')
7343     rs->ctrlc_pending_p = 0;
7344
7345   switch (buf[0])
7346     {
7347     case 'E':           /* Error of some sort.  */
7348       /* We're out of sync with the target now.  Did it continue or
7349          not?  Not is more likely, so report a stop.  */
7350       rs->waiting_for_stop_reply = 0;
7351
7352       warning (_("Remote failure reply: %s"), buf);
7353       status->kind = TARGET_WAITKIND_STOPPED;
7354       status->value.sig = GDB_SIGNAL_0;
7355       break;
7356     case 'F':           /* File-I/O request.  */
7357       /* GDB may access the inferior memory while handling the File-I/O
7358          request, but we don't want GDB accessing memory while waiting
7359          for a stop reply.  See the comments in putpkt_binary.  Set
7360          waiting_for_stop_reply to 0 temporarily.  */
7361       rs->waiting_for_stop_reply = 0;
7362       remote_fileio_request (buf, rs->ctrlc_pending_p);
7363       rs->ctrlc_pending_p = 0;
7364       /* GDB handled the File-I/O request, and the target is running
7365          again.  Keep waiting for events.  */
7366       rs->waiting_for_stop_reply = 1;
7367       break;
7368     case 'N': case 'T': case 'S': case 'X': case 'W':
7369       {
7370         struct stop_reply *stop_reply;
7371
7372         /* There is a stop reply to handle.  */
7373         rs->waiting_for_stop_reply = 0;
7374
7375         stop_reply
7376           = (struct stop_reply *) remote_notif_parse (&notif_client_stop,
7377                                                       rs->buf);
7378
7379         event_ptid = process_stop_reply (stop_reply, status);
7380         break;
7381       }
7382     case 'O':           /* Console output.  */
7383       remote_console_output (buf + 1);
7384       break;
7385     case '\0':
7386       if (rs->last_sent_signal != GDB_SIGNAL_0)
7387         {
7388           /* Zero length reply means that we tried 'S' or 'C' and the
7389              remote system doesn't support it.  */
7390           target_terminal::ours_for_output ();
7391           printf_filtered
7392             ("Can't send signals to this remote system.  %s not sent.\n",
7393              gdb_signal_to_name (rs->last_sent_signal));
7394           rs->last_sent_signal = GDB_SIGNAL_0;
7395           target_terminal::inferior ();
7396
7397           strcpy (buf, rs->last_sent_step ? "s" : "c");
7398           putpkt (buf);
7399           break;
7400         }
7401       /* else fallthrough */
7402     default:
7403       warning (_("Invalid remote reply: %s"), buf);
7404       break;
7405     }
7406
7407   if (status->kind == TARGET_WAITKIND_NO_RESUMED)
7408     return minus_one_ptid;
7409   else if (status->kind == TARGET_WAITKIND_IGNORE)
7410     {
7411       /* Nothing interesting happened.  If we're doing a non-blocking
7412          poll, we're done.  Otherwise, go back to waiting.  */
7413       if (options & TARGET_WNOHANG)
7414         return minus_one_ptid;
7415       else
7416         goto again;
7417     }
7418   else if (status->kind != TARGET_WAITKIND_EXITED
7419            && status->kind != TARGET_WAITKIND_SIGNALLED)
7420     {
7421       if (!ptid_equal (event_ptid, null_ptid))
7422         record_currthread (rs, event_ptid);
7423       else
7424         event_ptid = inferior_ptid;
7425     }
7426   else
7427     /* A process exit.  Invalidate our notion of current thread.  */
7428     record_currthread (rs, minus_one_ptid);
7429
7430   return event_ptid;
7431 }
7432
7433 /* Wait until the remote machine stops, then return, storing status in
7434    STATUS just as `wait' would.  */
7435
7436 static ptid_t
7437 remote_wait (struct target_ops *ops,
7438              ptid_t ptid, struct target_waitstatus *status, int options)
7439 {
7440   ptid_t event_ptid;
7441
7442   if (target_is_non_stop_p ())
7443     event_ptid = remote_wait_ns (ptid, status, options);
7444   else
7445     event_ptid = remote_wait_as (ptid, status, options);
7446
7447   if (target_is_async_p ())
7448     {
7449       /* If there are are events left in the queue tell the event loop
7450          to return here.  */
7451       if (!QUEUE_is_empty (stop_reply_p, stop_reply_queue))
7452         mark_async_event_handler (remote_async_inferior_event_token);
7453     }
7454
7455   return event_ptid;
7456 }
7457
7458 /* Fetch a single register using a 'p' packet.  */
7459
7460 static int
7461 fetch_register_using_p (struct regcache *regcache, struct packet_reg *reg)
7462 {
7463   struct gdbarch *gdbarch = regcache->arch ();
7464   struct remote_state *rs = get_remote_state ();
7465   char *buf, *p;
7466   gdb_byte *regp = (gdb_byte *) alloca (register_size (gdbarch, reg->regnum));
7467   int i;
7468
7469   if (packet_support (PACKET_p) == PACKET_DISABLE)
7470     return 0;
7471
7472   if (reg->pnum == -1)
7473     return 0;
7474
7475   p = rs->buf;
7476   *p++ = 'p';
7477   p += hexnumstr (p, reg->pnum);
7478   *p++ = '\0';
7479   putpkt (rs->buf);
7480   getpkt (&rs->buf, &rs->buf_size, 0);
7481
7482   buf = rs->buf;
7483
7484   switch (packet_ok (buf, &remote_protocol_packets[PACKET_p]))
7485     {
7486     case PACKET_OK:
7487       break;
7488     case PACKET_UNKNOWN:
7489       return 0;
7490     case PACKET_ERROR:
7491       error (_("Could not fetch register \"%s\"; remote failure reply '%s'"),
7492              gdbarch_register_name (regcache->arch (), 
7493                                     reg->regnum), 
7494              buf);
7495     }
7496
7497   /* If this register is unfetchable, tell the regcache.  */
7498   if (buf[0] == 'x')
7499     {
7500       regcache_raw_supply (regcache, reg->regnum, NULL);
7501       return 1;
7502     }
7503
7504   /* Otherwise, parse and supply the value.  */
7505   p = buf;
7506   i = 0;
7507   while (p[0] != 0)
7508     {
7509       if (p[1] == 0)
7510         error (_("fetch_register_using_p: early buf termination"));
7511
7512       regp[i++] = fromhex (p[0]) * 16 + fromhex (p[1]);
7513       p += 2;
7514     }
7515   regcache_raw_supply (regcache, reg->regnum, regp);
7516   return 1;
7517 }
7518
7519 /* Fetch the registers included in the target's 'g' packet.  */
7520
7521 static int
7522 send_g_packet (void)
7523 {
7524   struct remote_state *rs = get_remote_state ();
7525   int buf_len;
7526
7527   xsnprintf (rs->buf, get_remote_packet_size (), "g");
7528   remote_send (&rs->buf, &rs->buf_size);
7529
7530   /* We can get out of synch in various cases.  If the first character
7531      in the buffer is not a hex character, assume that has happened
7532      and try to fetch another packet to read.  */
7533   while ((rs->buf[0] < '0' || rs->buf[0] > '9')
7534          && (rs->buf[0] < 'A' || rs->buf[0] > 'F')
7535          && (rs->buf[0] < 'a' || rs->buf[0] > 'f')
7536          && rs->buf[0] != 'x')  /* New: unavailable register value.  */
7537     {
7538       if (remote_debug)
7539         fprintf_unfiltered (gdb_stdlog,
7540                             "Bad register packet; fetching a new packet\n");
7541       getpkt (&rs->buf, &rs->buf_size, 0);
7542     }
7543
7544   buf_len = strlen (rs->buf);
7545
7546   /* Sanity check the received packet.  */
7547   if (buf_len % 2 != 0)
7548     error (_("Remote 'g' packet reply is of odd length: %s"), rs->buf);
7549
7550   return buf_len / 2;
7551 }
7552
7553 static void
7554 process_g_packet (struct regcache *regcache)
7555 {
7556   struct gdbarch *gdbarch = regcache->arch ();
7557   struct remote_state *rs = get_remote_state ();
7558   remote_arch_state *rsa = get_remote_arch_state (gdbarch);
7559   int i, buf_len;
7560   char *p;
7561   char *regs;
7562
7563   buf_len = strlen (rs->buf);
7564
7565   /* Further sanity checks, with knowledge of the architecture.  */
7566   if (buf_len > 2 * rsa->sizeof_g_packet)
7567     error (_("Remote 'g' packet reply is too long (expected %ld bytes, got %d "
7568              "bytes): %s"), rsa->sizeof_g_packet, buf_len / 2, rs->buf);
7569
7570   /* Save the size of the packet sent to us by the target.  It is used
7571      as a heuristic when determining the max size of packets that the
7572      target can safely receive.  */
7573   if (rsa->actual_register_packet_size == 0)
7574     rsa->actual_register_packet_size = buf_len;
7575
7576   /* If this is smaller than we guessed the 'g' packet would be,
7577      update our records.  A 'g' reply that doesn't include a register's
7578      value implies either that the register is not available, or that
7579      the 'p' packet must be used.  */
7580   if (buf_len < 2 * rsa->sizeof_g_packet)
7581     {
7582       long sizeof_g_packet = buf_len / 2;
7583
7584       for (i = 0; i < gdbarch_num_regs (gdbarch); i++)
7585         {
7586           long offset = rsa->regs[i].offset;
7587           long reg_size = register_size (gdbarch, i);
7588
7589           if (rsa->regs[i].pnum == -1)
7590             continue;
7591
7592           if (offset >= sizeof_g_packet)
7593             rsa->regs[i].in_g_packet = 0;
7594           else if (offset + reg_size > sizeof_g_packet)
7595             error (_("Truncated register %d in remote 'g' packet"), i);
7596           else
7597             rsa->regs[i].in_g_packet = 1;
7598         }
7599
7600       /* Looks valid enough, we can assume this is the correct length
7601          for a 'g' packet.  It's important not to adjust
7602          rsa->sizeof_g_packet if we have truncated registers otherwise
7603          this "if" won't be run the next time the method is called
7604          with a packet of the same size and one of the internal errors
7605          below will trigger instead.  */
7606       rsa->sizeof_g_packet = sizeof_g_packet;
7607     }
7608
7609   regs = (char *) alloca (rsa->sizeof_g_packet);
7610
7611   /* Unimplemented registers read as all bits zero.  */
7612   memset (regs, 0, rsa->sizeof_g_packet);
7613
7614   /* Reply describes registers byte by byte, each byte encoded as two
7615      hex characters.  Suck them all up, then supply them to the
7616      register cacheing/storage mechanism.  */
7617
7618   p = rs->buf;
7619   for (i = 0; i < rsa->sizeof_g_packet; i++)
7620     {
7621       if (p[0] == 0 || p[1] == 0)
7622         /* This shouldn't happen - we adjusted sizeof_g_packet above.  */
7623         internal_error (__FILE__, __LINE__,
7624                         _("unexpected end of 'g' packet reply"));
7625
7626       if (p[0] == 'x' && p[1] == 'x')
7627         regs[i] = 0;            /* 'x' */
7628       else
7629         regs[i] = fromhex (p[0]) * 16 + fromhex (p[1]);
7630       p += 2;
7631     }
7632
7633   for (i = 0; i < gdbarch_num_regs (gdbarch); i++)
7634     {
7635       struct packet_reg *r = &rsa->regs[i];
7636       long reg_size = register_size (gdbarch, i);
7637
7638       if (r->in_g_packet)
7639         {
7640           if ((r->offset + reg_size) * 2 > strlen (rs->buf))
7641             /* This shouldn't happen - we adjusted in_g_packet above.  */
7642             internal_error (__FILE__, __LINE__,
7643                             _("unexpected end of 'g' packet reply"));
7644           else if (rs->buf[r->offset * 2] == 'x')
7645             {
7646               gdb_assert (r->offset * 2 < strlen (rs->buf));
7647               /* The register isn't available, mark it as such (at
7648                  the same time setting the value to zero).  */
7649               regcache_raw_supply (regcache, r->regnum, NULL);
7650             }
7651           else
7652             regcache_raw_supply (regcache, r->regnum,
7653                                  regs + r->offset);
7654         }
7655     }
7656 }
7657
7658 static void
7659 fetch_registers_using_g (struct regcache *regcache)
7660 {
7661   send_g_packet ();
7662   process_g_packet (regcache);
7663 }
7664
7665 /* Make the remote selected traceframe match GDB's selected
7666    traceframe.  */
7667
7668 static void
7669 set_remote_traceframe (void)
7670 {
7671   int newnum;
7672   struct remote_state *rs = get_remote_state ();
7673
7674   if (rs->remote_traceframe_number == get_traceframe_number ())
7675     return;
7676
7677   /* Avoid recursion, remote_trace_find calls us again.  */
7678   rs->remote_traceframe_number = get_traceframe_number ();
7679
7680   newnum = target_trace_find (tfind_number,
7681                               get_traceframe_number (), 0, 0, NULL);
7682
7683   /* Should not happen.  If it does, all bets are off.  */
7684   if (newnum != get_traceframe_number ())
7685     warning (_("could not set remote traceframe"));
7686 }
7687
7688 static void
7689 remote_fetch_registers (struct target_ops *ops,
7690                         struct regcache *regcache, int regnum)
7691 {
7692   struct gdbarch *gdbarch = regcache->arch ();
7693   remote_arch_state *rsa = get_remote_arch_state (gdbarch);
7694   int i;
7695
7696   set_remote_traceframe ();
7697   set_general_thread (regcache_get_ptid (regcache));
7698
7699   if (regnum >= 0)
7700     {
7701       packet_reg *reg = packet_reg_from_regnum (gdbarch, rsa, regnum);
7702
7703       gdb_assert (reg != NULL);
7704
7705       /* If this register might be in the 'g' packet, try that first -
7706          we are likely to read more than one register.  If this is the
7707          first 'g' packet, we might be overly optimistic about its
7708          contents, so fall back to 'p'.  */
7709       if (reg->in_g_packet)
7710         {
7711           fetch_registers_using_g (regcache);
7712           if (reg->in_g_packet)
7713             return;
7714         }
7715
7716       if (fetch_register_using_p (regcache, reg))
7717         return;
7718
7719       /* This register is not available.  */
7720       regcache_raw_supply (regcache, reg->regnum, NULL);
7721
7722       return;
7723     }
7724
7725   fetch_registers_using_g (regcache);
7726
7727   for (i = 0; i < gdbarch_num_regs (gdbarch); i++)
7728     if (!rsa->regs[i].in_g_packet)
7729       if (!fetch_register_using_p (regcache, &rsa->regs[i]))
7730         {
7731           /* This register is not available.  */
7732           regcache_raw_supply (regcache, i, NULL);
7733         }
7734 }
7735
7736 /* Prepare to store registers.  Since we may send them all (using a
7737    'G' request), we have to read out the ones we don't want to change
7738    first.  */
7739
7740 static void
7741 remote_prepare_to_store (struct target_ops *self, struct regcache *regcache)
7742 {
7743   remote_arch_state *rsa = get_remote_arch_state (regcache->arch ());
7744   int i;
7745
7746   /* Make sure the entire registers array is valid.  */
7747   switch (packet_support (PACKET_P))
7748     {
7749     case PACKET_DISABLE:
7750     case PACKET_SUPPORT_UNKNOWN:
7751       /* Make sure all the necessary registers are cached.  */
7752       for (i = 0; i < gdbarch_num_regs (regcache->arch ()); i++)
7753         if (rsa->regs[i].in_g_packet)
7754           regcache_raw_update (regcache, rsa->regs[i].regnum);
7755       break;
7756     case PACKET_ENABLE:
7757       break;
7758     }
7759 }
7760
7761 /* Helper: Attempt to store REGNUM using the P packet.  Return fail IFF
7762    packet was not recognized.  */
7763
7764 static int
7765 store_register_using_P (const struct regcache *regcache, 
7766                         struct packet_reg *reg)
7767 {
7768   struct gdbarch *gdbarch = regcache->arch ();
7769   struct remote_state *rs = get_remote_state ();
7770   /* Try storing a single register.  */
7771   char *buf = rs->buf;
7772   gdb_byte *regp = (gdb_byte *) alloca (register_size (gdbarch, reg->regnum));
7773   char *p;
7774
7775   if (packet_support (PACKET_P) == PACKET_DISABLE)
7776     return 0;
7777
7778   if (reg->pnum == -1)
7779     return 0;
7780
7781   xsnprintf (buf, get_remote_packet_size (), "P%s=", phex_nz (reg->pnum, 0));
7782   p = buf + strlen (buf);
7783   regcache_raw_collect (regcache, reg->regnum, regp);
7784   bin2hex (regp, p, register_size (gdbarch, reg->regnum));
7785   putpkt (rs->buf);
7786   getpkt (&rs->buf, &rs->buf_size, 0);
7787
7788   switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_P]))
7789     {
7790     case PACKET_OK:
7791       return 1;
7792     case PACKET_ERROR:
7793       error (_("Could not write register \"%s\"; remote failure reply '%s'"),
7794              gdbarch_register_name (gdbarch, reg->regnum), rs->buf);
7795     case PACKET_UNKNOWN:
7796       return 0;
7797     default:
7798       internal_error (__FILE__, __LINE__, _("Bad result from packet_ok"));
7799     }
7800 }
7801
7802 /* Store register REGNUM, or all registers if REGNUM == -1, from the
7803    contents of the register cache buffer.  FIXME: ignores errors.  */
7804
7805 static void
7806 store_registers_using_G (const struct regcache *regcache)
7807 {
7808   struct remote_state *rs = get_remote_state ();
7809   remote_arch_state *rsa = get_remote_arch_state (regcache->arch ());
7810   gdb_byte *regs;
7811   char *p;
7812
7813   /* Extract all the registers in the regcache copying them into a
7814      local buffer.  */
7815   {
7816     int i;
7817
7818     regs = (gdb_byte *) alloca (rsa->sizeof_g_packet);
7819     memset (regs, 0, rsa->sizeof_g_packet);
7820     for (i = 0; i < gdbarch_num_regs (regcache->arch ()); i++)
7821       {
7822         struct packet_reg *r = &rsa->regs[i];
7823
7824         if (r->in_g_packet)
7825           regcache_raw_collect (regcache, r->regnum, regs + r->offset);
7826       }
7827   }
7828
7829   /* Command describes registers byte by byte,
7830      each byte encoded as two hex characters.  */
7831   p = rs->buf;
7832   *p++ = 'G';
7833   bin2hex (regs, p, rsa->sizeof_g_packet);
7834   putpkt (rs->buf);
7835   getpkt (&rs->buf, &rs->buf_size, 0);
7836   if (packet_check_result (rs->buf) == PACKET_ERROR)
7837     error (_("Could not write registers; remote failure reply '%s'"), 
7838            rs->buf);
7839 }
7840
7841 /* Store register REGNUM, or all registers if REGNUM == -1, from the contents
7842    of the register cache buffer.  FIXME: ignores errors.  */
7843
7844 static void
7845 remote_store_registers (struct target_ops *ops,
7846                         struct regcache *regcache, int regnum)
7847 {
7848   struct gdbarch *gdbarch = regcache->arch ();
7849   remote_arch_state *rsa = get_remote_arch_state (gdbarch);
7850   int i;
7851
7852   set_remote_traceframe ();
7853   set_general_thread (regcache_get_ptid (regcache));
7854
7855   if (regnum >= 0)
7856     {
7857       packet_reg *reg = packet_reg_from_regnum (gdbarch, rsa, regnum);
7858
7859       gdb_assert (reg != NULL);
7860
7861       /* Always prefer to store registers using the 'P' packet if
7862          possible; we often change only a small number of registers.
7863          Sometimes we change a larger number; we'd need help from a
7864          higher layer to know to use 'G'.  */
7865       if (store_register_using_P (regcache, reg))
7866         return;
7867
7868       /* For now, don't complain if we have no way to write the
7869          register.  GDB loses track of unavailable registers too
7870          easily.  Some day, this may be an error.  We don't have
7871          any way to read the register, either...  */
7872       if (!reg->in_g_packet)
7873         return;
7874
7875       store_registers_using_G (regcache);
7876       return;
7877     }
7878
7879   store_registers_using_G (regcache);
7880
7881   for (i = 0; i < gdbarch_num_regs (gdbarch); i++)
7882     if (!rsa->regs[i].in_g_packet)
7883       if (!store_register_using_P (regcache, &rsa->regs[i]))
7884         /* See above for why we do not issue an error here.  */
7885         continue;
7886 }
7887 \f
7888
7889 /* Return the number of hex digits in num.  */
7890
7891 static int
7892 hexnumlen (ULONGEST num)
7893 {
7894   int i;
7895
7896   for (i = 0; num != 0; i++)
7897     num >>= 4;
7898
7899   return std::max (i, 1);
7900 }
7901
7902 /* Set BUF to the minimum number of hex digits representing NUM.  */
7903
7904 static int
7905 hexnumstr (char *buf, ULONGEST num)
7906 {
7907   int len = hexnumlen (num);
7908
7909   return hexnumnstr (buf, num, len);
7910 }
7911
7912
7913 /* Set BUF to the hex digits representing NUM, padded to WIDTH characters.  */
7914
7915 static int
7916 hexnumnstr (char *buf, ULONGEST num, int width)
7917 {
7918   int i;
7919
7920   buf[width] = '\0';
7921
7922   for (i = width - 1; i >= 0; i--)
7923     {
7924       buf[i] = "0123456789abcdef"[(num & 0xf)];
7925       num >>= 4;
7926     }
7927
7928   return width;
7929 }
7930
7931 /* Mask all but the least significant REMOTE_ADDRESS_SIZE bits.  */
7932
7933 static CORE_ADDR
7934 remote_address_masked (CORE_ADDR addr)
7935 {
7936   unsigned int address_size = remote_address_size;
7937
7938   /* If "remoteaddresssize" was not set, default to target address size.  */
7939   if (!address_size)
7940     address_size = gdbarch_addr_bit (target_gdbarch ());
7941
7942   if (address_size > 0
7943       && address_size < (sizeof (ULONGEST) * 8))
7944     {
7945       /* Only create a mask when that mask can safely be constructed
7946          in a ULONGEST variable.  */
7947       ULONGEST mask = 1;
7948
7949       mask = (mask << address_size) - 1;
7950       addr &= mask;
7951     }
7952   return addr;
7953 }
7954
7955 /* Determine whether the remote target supports binary downloading.
7956    This is accomplished by sending a no-op memory write of zero length
7957    to the target at the specified address. It does not suffice to send
7958    the whole packet, since many stubs strip the eighth bit and
7959    subsequently compute a wrong checksum, which causes real havoc with
7960    remote_write_bytes.
7961
7962    NOTE: This can still lose if the serial line is not eight-bit
7963    clean.  In cases like this, the user should clear "remote
7964    X-packet".  */
7965
7966 static void
7967 check_binary_download (CORE_ADDR addr)
7968 {
7969   struct remote_state *rs = get_remote_state ();
7970
7971   switch (packet_support (PACKET_X))
7972     {
7973     case PACKET_DISABLE:
7974       break;
7975     case PACKET_ENABLE:
7976       break;
7977     case PACKET_SUPPORT_UNKNOWN:
7978       {
7979         char *p;
7980
7981         p = rs->buf;
7982         *p++ = 'X';
7983         p += hexnumstr (p, (ULONGEST) addr);
7984         *p++ = ',';
7985         p += hexnumstr (p, (ULONGEST) 0);
7986         *p++ = ':';
7987         *p = '\0';
7988
7989         putpkt_binary (rs->buf, (int) (p - rs->buf));
7990         getpkt (&rs->buf, &rs->buf_size, 0);
7991
7992         if (rs->buf[0] == '\0')
7993           {
7994             if (remote_debug)
7995               fprintf_unfiltered (gdb_stdlog,
7996                                   "binary downloading NOT "
7997                                   "supported by target\n");
7998             remote_protocol_packets[PACKET_X].support = PACKET_DISABLE;
7999           }
8000         else
8001           {
8002             if (remote_debug)
8003               fprintf_unfiltered (gdb_stdlog,
8004                                   "binary downloading supported by target\n");
8005             remote_protocol_packets[PACKET_X].support = PACKET_ENABLE;
8006           }
8007         break;
8008       }
8009     }
8010 }
8011
8012 /* Helper function to resize the payload in order to try to get a good
8013    alignment.  We try to write an amount of data such that the next write will
8014    start on an address aligned on REMOTE_ALIGN_WRITES.  */
8015
8016 static int
8017 align_for_efficient_write (int todo, CORE_ADDR memaddr)
8018 {
8019   return ((memaddr + todo) & ~(REMOTE_ALIGN_WRITES - 1)) - memaddr;
8020 }
8021
8022 /* Write memory data directly to the remote machine.
8023    This does not inform the data cache; the data cache uses this.
8024    HEADER is the starting part of the packet.
8025    MEMADDR is the address in the remote memory space.
8026    MYADDR is the address of the buffer in our space.
8027    LEN_UNITS is the number of addressable units to write.
8028    UNIT_SIZE is the length in bytes of an addressable unit.
8029    PACKET_FORMAT should be either 'X' or 'M', and indicates if we
8030    should send data as binary ('X'), or hex-encoded ('M').
8031
8032    The function creates packet of the form
8033        <HEADER><ADDRESS>,<LENGTH>:<DATA>
8034
8035    where encoding of <DATA> is terminated by PACKET_FORMAT.
8036
8037    If USE_LENGTH is 0, then the <LENGTH> field and the preceding comma
8038    are omitted.
8039
8040    Return the transferred status, error or OK (an
8041    'enum target_xfer_status' value).  Save the number of addressable units
8042    transferred in *XFERED_LEN_UNITS.  Only transfer a single packet.
8043
8044    On a platform with an addressable memory size of 2 bytes (UNIT_SIZE == 2), an
8045    exchange between gdb and the stub could look like (?? in place of the
8046    checksum):
8047
8048    -> $m1000,4#??
8049    <- aaaabbbbccccdddd
8050
8051    -> $M1000,3:eeeeffffeeee#??
8052    <- OK
8053
8054    -> $m1000,4#??
8055    <- eeeeffffeeeedddd  */
8056
8057 static enum target_xfer_status
8058 remote_write_bytes_aux (const char *header, CORE_ADDR memaddr,
8059                         const gdb_byte *myaddr, ULONGEST len_units,
8060                         int unit_size, ULONGEST *xfered_len_units,
8061                         char packet_format, int use_length)
8062 {
8063   struct remote_state *rs = get_remote_state ();
8064   char *p;
8065   char *plen = NULL;
8066   int plenlen = 0;
8067   int todo_units;
8068   int units_written;
8069   int payload_capacity_bytes;
8070   int payload_length_bytes;
8071
8072   if (packet_format != 'X' && packet_format != 'M')
8073     internal_error (__FILE__, __LINE__,
8074                     _("remote_write_bytes_aux: bad packet format"));
8075
8076   if (len_units == 0)
8077     return TARGET_XFER_EOF;
8078
8079   payload_capacity_bytes = get_memory_write_packet_size ();
8080
8081   /* The packet buffer will be large enough for the payload;
8082      get_memory_packet_size ensures this.  */
8083   rs->buf[0] = '\0';
8084
8085   /* Compute the size of the actual payload by subtracting out the
8086      packet header and footer overhead: "$M<memaddr>,<len>:...#nn".  */
8087
8088   payload_capacity_bytes -= strlen ("$,:#NN");
8089   if (!use_length)
8090     /* The comma won't be used.  */
8091     payload_capacity_bytes += 1;
8092   payload_capacity_bytes -= strlen (header);
8093   payload_capacity_bytes -= hexnumlen (memaddr);
8094
8095   /* Construct the packet excluding the data: "<header><memaddr>,<len>:".  */
8096
8097   strcat (rs->buf, header);
8098   p = rs->buf + strlen (header);
8099
8100   /* Compute a best guess of the number of bytes actually transfered.  */
8101   if (packet_format == 'X')
8102     {
8103       /* Best guess at number of bytes that will fit.  */
8104       todo_units = std::min (len_units,
8105                              (ULONGEST) payload_capacity_bytes / unit_size);
8106       if (use_length)
8107         payload_capacity_bytes -= hexnumlen (todo_units);
8108       todo_units = std::min (todo_units, payload_capacity_bytes / unit_size);
8109     }
8110   else
8111     {
8112       /* Number of bytes that will fit.  */
8113       todo_units
8114         = std::min (len_units,
8115                     (ULONGEST) (payload_capacity_bytes / unit_size) / 2);
8116       if (use_length)
8117         payload_capacity_bytes -= hexnumlen (todo_units);
8118       todo_units = std::min (todo_units,
8119                              (payload_capacity_bytes / unit_size) / 2);
8120     }
8121
8122   if (todo_units <= 0)
8123     internal_error (__FILE__, __LINE__,
8124                     _("minimum packet size too small to write data"));
8125
8126   /* If we already need another packet, then try to align the end
8127      of this packet to a useful boundary.  */
8128   if (todo_units > 2 * REMOTE_ALIGN_WRITES && todo_units < len_units)
8129     todo_units = align_for_efficient_write (todo_units, memaddr);
8130
8131   /* Append "<memaddr>".  */
8132   memaddr = remote_address_masked (memaddr);
8133   p += hexnumstr (p, (ULONGEST) memaddr);
8134
8135   if (use_length)
8136     {
8137       /* Append ",".  */
8138       *p++ = ',';
8139
8140       /* Append the length and retain its location and size.  It may need to be
8141          adjusted once the packet body has been created.  */
8142       plen = p;
8143       plenlen = hexnumstr (p, (ULONGEST) todo_units);
8144       p += plenlen;
8145     }
8146
8147   /* Append ":".  */
8148   *p++ = ':';
8149   *p = '\0';
8150
8151   /* Append the packet body.  */
8152   if (packet_format == 'X')
8153     {
8154       /* Binary mode.  Send target system values byte by byte, in
8155          increasing byte addresses.  Only escape certain critical
8156          characters.  */
8157       payload_length_bytes =
8158           remote_escape_output (myaddr, todo_units, unit_size, (gdb_byte *) p,
8159                                 &units_written, payload_capacity_bytes);
8160
8161       /* If not all TODO units fit, then we'll need another packet.  Make
8162          a second try to keep the end of the packet aligned.  Don't do
8163          this if the packet is tiny.  */
8164       if (units_written < todo_units && units_written > 2 * REMOTE_ALIGN_WRITES)
8165         {
8166           int new_todo_units;
8167
8168           new_todo_units = align_for_efficient_write (units_written, memaddr);
8169
8170           if (new_todo_units != units_written)
8171             payload_length_bytes =
8172                 remote_escape_output (myaddr, new_todo_units, unit_size,
8173                                       (gdb_byte *) p, &units_written,
8174                                       payload_capacity_bytes);
8175         }
8176
8177       p += payload_length_bytes;
8178       if (use_length && units_written < todo_units)
8179         {
8180           /* Escape chars have filled up the buffer prematurely,
8181              and we have actually sent fewer units than planned.
8182              Fix-up the length field of the packet.  Use the same
8183              number of characters as before.  */
8184           plen += hexnumnstr (plen, (ULONGEST) units_written,
8185                               plenlen);
8186           *plen = ':';  /* overwrite \0 from hexnumnstr() */
8187         }
8188     }
8189   else
8190     {
8191       /* Normal mode: Send target system values byte by byte, in
8192          increasing byte addresses.  Each byte is encoded as a two hex
8193          value.  */
8194       p += 2 * bin2hex (myaddr, p, todo_units * unit_size);
8195       units_written = todo_units;
8196     }
8197
8198   putpkt_binary (rs->buf, (int) (p - rs->buf));
8199   getpkt (&rs->buf, &rs->buf_size, 0);
8200
8201   if (rs->buf[0] == 'E')
8202     return TARGET_XFER_E_IO;
8203
8204   /* Return UNITS_WRITTEN, not TODO_UNITS, in case escape chars caused us to
8205      send fewer units than we'd planned.  */
8206   *xfered_len_units = (ULONGEST) units_written;
8207   return (*xfered_len_units != 0) ? TARGET_XFER_OK : TARGET_XFER_EOF;
8208 }
8209
8210 /* Write memory data directly to the remote machine.
8211    This does not inform the data cache; the data cache uses this.
8212    MEMADDR is the address in the remote memory space.
8213    MYADDR is the address of the buffer in our space.
8214    LEN is the number of bytes.
8215
8216    Return the transferred status, error or OK (an
8217    'enum target_xfer_status' value).  Save the number of bytes
8218    transferred in *XFERED_LEN.  Only transfer a single packet.  */
8219
8220 static enum target_xfer_status
8221 remote_write_bytes (CORE_ADDR memaddr, const gdb_byte *myaddr, ULONGEST len,
8222                     int unit_size, ULONGEST *xfered_len)
8223 {
8224   const char *packet_format = NULL;
8225
8226   /* Check whether the target supports binary download.  */
8227   check_binary_download (memaddr);
8228
8229   switch (packet_support (PACKET_X))
8230     {
8231     case PACKET_ENABLE:
8232       packet_format = "X";
8233       break;
8234     case PACKET_DISABLE:
8235       packet_format = "M";
8236       break;
8237     case PACKET_SUPPORT_UNKNOWN:
8238       internal_error (__FILE__, __LINE__,
8239                       _("remote_write_bytes: bad internal state"));
8240     default:
8241       internal_error (__FILE__, __LINE__, _("bad switch"));
8242     }
8243
8244   return remote_write_bytes_aux (packet_format,
8245                                  memaddr, myaddr, len, unit_size, xfered_len,
8246                                  packet_format[0], 1);
8247 }
8248
8249 /* Read memory data directly from the remote machine.
8250    This does not use the data cache; the data cache uses this.
8251    MEMADDR is the address in the remote memory space.
8252    MYADDR is the address of the buffer in our space.
8253    LEN_UNITS is the number of addressable memory units to read..
8254    UNIT_SIZE is the length in bytes of an addressable unit.
8255
8256    Return the transferred status, error or OK (an
8257    'enum target_xfer_status' value).  Save the number of bytes
8258    transferred in *XFERED_LEN_UNITS.
8259
8260    See the comment of remote_write_bytes_aux for an example of
8261    memory read/write exchange between gdb and the stub.  */
8262
8263 static enum target_xfer_status
8264 remote_read_bytes_1 (CORE_ADDR memaddr, gdb_byte *myaddr, ULONGEST len_units,
8265                      int unit_size, ULONGEST *xfered_len_units)
8266 {
8267   struct remote_state *rs = get_remote_state ();
8268   int buf_size_bytes;           /* Max size of packet output buffer.  */
8269   char *p;
8270   int todo_units;
8271   int decoded_bytes;
8272
8273   buf_size_bytes = get_memory_read_packet_size ();
8274   /* The packet buffer will be large enough for the payload;
8275      get_memory_packet_size ensures this.  */
8276
8277   /* Number of units that will fit.  */
8278   todo_units = std::min (len_units,
8279                          (ULONGEST) (buf_size_bytes / unit_size) / 2);
8280
8281   /* Construct "m"<memaddr>","<len>".  */
8282   memaddr = remote_address_masked (memaddr);
8283   p = rs->buf;
8284   *p++ = 'm';
8285   p += hexnumstr (p, (ULONGEST) memaddr);
8286   *p++ = ',';
8287   p += hexnumstr (p, (ULONGEST) todo_units);
8288   *p = '\0';
8289   putpkt (rs->buf);
8290   getpkt (&rs->buf, &rs->buf_size, 0);
8291   if (rs->buf[0] == 'E'
8292       && isxdigit (rs->buf[1]) && isxdigit (rs->buf[2])
8293       && rs->buf[3] == '\0')
8294     return TARGET_XFER_E_IO;
8295   /* Reply describes memory byte by byte, each byte encoded as two hex
8296      characters.  */
8297   p = rs->buf;
8298   decoded_bytes = hex2bin (p, myaddr, todo_units * unit_size);
8299   /* Return what we have.  Let higher layers handle partial reads.  */
8300   *xfered_len_units = (ULONGEST) (decoded_bytes / unit_size);
8301   return (*xfered_len_units != 0) ? TARGET_XFER_OK : TARGET_XFER_EOF;
8302 }
8303
8304 /* Using the set of read-only target sections of remote, read live
8305    read-only memory.
8306
8307    For interface/parameters/return description see target.h,
8308    to_xfer_partial.  */
8309
8310 static enum target_xfer_status
8311 remote_xfer_live_readonly_partial (struct target_ops *ops, gdb_byte *readbuf,
8312                                    ULONGEST memaddr, ULONGEST len,
8313                                    int unit_size, ULONGEST *xfered_len)
8314 {
8315   struct target_section *secp;
8316   struct target_section_table *table;
8317
8318   secp = target_section_by_addr (ops, memaddr);
8319   if (secp != NULL
8320       && (bfd_get_section_flags (secp->the_bfd_section->owner,
8321                                  secp->the_bfd_section)
8322           & SEC_READONLY))
8323     {
8324       struct target_section *p;
8325       ULONGEST memend = memaddr + len;
8326
8327       table = target_get_section_table (ops);
8328
8329       for (p = table->sections; p < table->sections_end; p++)
8330         {
8331           if (memaddr >= p->addr)
8332             {
8333               if (memend <= p->endaddr)
8334                 {
8335                   /* Entire transfer is within this section.  */
8336                   return remote_read_bytes_1 (memaddr, readbuf, len, unit_size,
8337                                               xfered_len);
8338                 }
8339               else if (memaddr >= p->endaddr)
8340                 {
8341                   /* This section ends before the transfer starts.  */
8342                   continue;
8343                 }
8344               else
8345                 {
8346                   /* This section overlaps the transfer.  Just do half.  */
8347                   len = p->endaddr - memaddr;
8348                   return remote_read_bytes_1 (memaddr, readbuf, len, unit_size,
8349                                               xfered_len);
8350                 }
8351             }
8352         }
8353     }
8354
8355   return TARGET_XFER_EOF;
8356 }
8357
8358 /* Similar to remote_read_bytes_1, but it reads from the remote stub
8359    first if the requested memory is unavailable in traceframe.
8360    Otherwise, fall back to remote_read_bytes_1.  */
8361
8362 static enum target_xfer_status
8363 remote_read_bytes (struct target_ops *ops, CORE_ADDR memaddr,
8364                    gdb_byte *myaddr, ULONGEST len, int unit_size,
8365                    ULONGEST *xfered_len)
8366 {
8367   if (len == 0)
8368     return TARGET_XFER_EOF;
8369
8370   if (get_traceframe_number () != -1)
8371     {
8372       std::vector<mem_range> available;
8373
8374       /* If we fail to get the set of available memory, then the
8375          target does not support querying traceframe info, and so we
8376          attempt reading from the traceframe anyway (assuming the
8377          target implements the old QTro packet then).  */
8378       if (traceframe_available_memory (&available, memaddr, len))
8379         {
8380           if (available.empty () || available[0].start != memaddr)
8381             {
8382               enum target_xfer_status res;
8383
8384               /* Don't read into the traceframe's available
8385                  memory.  */
8386               if (!available.empty ())
8387                 {
8388                   LONGEST oldlen = len;
8389
8390                   len = available[0].start - memaddr;
8391                   gdb_assert (len <= oldlen);
8392                 }
8393
8394               /* This goes through the topmost target again.  */
8395               res = remote_xfer_live_readonly_partial (ops, myaddr, memaddr,
8396                                                        len, unit_size, xfered_len);
8397               if (res == TARGET_XFER_OK)
8398                 return TARGET_XFER_OK;
8399               else
8400                 {
8401                   /* No use trying further, we know some memory starting
8402                      at MEMADDR isn't available.  */
8403                   *xfered_len = len;
8404                   return (*xfered_len != 0) ?
8405                     TARGET_XFER_UNAVAILABLE : TARGET_XFER_EOF;
8406                 }
8407             }
8408
8409           /* Don't try to read more than how much is available, in
8410              case the target implements the deprecated QTro packet to
8411              cater for older GDBs (the target's knowledge of read-only
8412              sections may be outdated by now).  */
8413           len = available[0].length;
8414         }
8415     }
8416
8417   return remote_read_bytes_1 (memaddr, myaddr, len, unit_size, xfered_len);
8418 }
8419
8420 \f
8421
8422 /* Sends a packet with content determined by the printf format string
8423    FORMAT and the remaining arguments, then gets the reply.  Returns
8424    whether the packet was a success, a failure, or unknown.  */
8425
8426 static enum packet_result remote_send_printf (const char *format, ...)
8427   ATTRIBUTE_PRINTF (1, 2);
8428
8429 static enum packet_result
8430 remote_send_printf (const char *format, ...)
8431 {
8432   struct remote_state *rs = get_remote_state ();
8433   int max_size = get_remote_packet_size ();
8434   va_list ap;
8435
8436   va_start (ap, format);
8437
8438   rs->buf[0] = '\0';
8439   if (vsnprintf (rs->buf, max_size, format, ap) >= max_size)
8440     internal_error (__FILE__, __LINE__, _("Too long remote packet."));
8441
8442   if (putpkt (rs->buf) < 0)
8443     error (_("Communication problem with target."));
8444
8445   rs->buf[0] = '\0';
8446   getpkt (&rs->buf, &rs->buf_size, 0);
8447
8448   return packet_check_result (rs->buf);
8449 }
8450
8451 /* Flash writing can take quite some time.  We'll set
8452    effectively infinite timeout for flash operations.
8453    In future, we'll need to decide on a better approach.  */
8454 static const int remote_flash_timeout = 1000;
8455
8456 static void
8457 remote_flash_erase (struct target_ops *ops,
8458                     ULONGEST address, LONGEST length)
8459 {
8460   int addr_size = gdbarch_addr_bit (target_gdbarch ()) / 8;
8461   enum packet_result ret;
8462   scoped_restore restore_timeout
8463     = make_scoped_restore (&remote_timeout, remote_flash_timeout);
8464
8465   ret = remote_send_printf ("vFlashErase:%s,%s",
8466                             phex (address, addr_size),
8467                             phex (length, 4));
8468   switch (ret)
8469     {
8470     case PACKET_UNKNOWN:
8471       error (_("Remote target does not support flash erase"));
8472     case PACKET_ERROR:
8473       error (_("Error erasing flash with vFlashErase packet"));
8474     default:
8475       break;
8476     }
8477 }
8478
8479 static enum target_xfer_status
8480 remote_flash_write (struct target_ops *ops, ULONGEST address,
8481                     ULONGEST length, ULONGEST *xfered_len,
8482                     const gdb_byte *data)
8483 {
8484   scoped_restore restore_timeout
8485     = make_scoped_restore (&remote_timeout, remote_flash_timeout);
8486   return remote_write_bytes_aux ("vFlashWrite:", address, data, length, 1,
8487                                  xfered_len,'X', 0);
8488 }
8489
8490 static void
8491 remote_flash_done (struct target_ops *ops)
8492 {
8493   int ret;
8494
8495   scoped_restore restore_timeout
8496     = make_scoped_restore (&remote_timeout, remote_flash_timeout);
8497
8498   ret = remote_send_printf ("vFlashDone");
8499
8500   switch (ret)
8501     {
8502     case PACKET_UNKNOWN:
8503       error (_("Remote target does not support vFlashDone"));
8504     case PACKET_ERROR:
8505       error (_("Error finishing flash operation"));
8506     default:
8507       break;
8508     }
8509 }
8510
8511 static void
8512 remote_files_info (struct target_ops *ignore)
8513 {
8514   puts_filtered ("Debugging a target over a serial line.\n");
8515 }
8516 \f
8517 /* Stuff for dealing with the packets which are part of this protocol.
8518    See comment at top of file for details.  */
8519
8520 /* Close/unpush the remote target, and throw a TARGET_CLOSE_ERROR
8521    error to higher layers.  Called when a serial error is detected.
8522    The exception message is STRING, followed by a colon and a blank,
8523    the system error message for errno at function entry and final dot
8524    for output compatibility with throw_perror_with_name.  */
8525
8526 static void
8527 unpush_and_perror (const char *string)
8528 {
8529   int saved_errno = errno;
8530
8531   remote_unpush_target ();
8532   throw_error (TARGET_CLOSE_ERROR, "%s: %s.", string,
8533                safe_strerror (saved_errno));
8534 }
8535
8536 /* Read a single character from the remote end.  The current quit
8537    handler is overridden to avoid quitting in the middle of packet
8538    sequence, as that would break communication with the remote server.
8539    See remote_serial_quit_handler for more detail.  */
8540
8541 static int
8542 readchar (int timeout)
8543 {
8544   int ch;
8545   struct remote_state *rs = get_remote_state ();
8546
8547   {
8548     scoped_restore restore_quit
8549       = make_scoped_restore (&quit_handler, remote_serial_quit_handler);
8550
8551     rs->got_ctrlc_during_io = 0;
8552
8553     ch = serial_readchar (rs->remote_desc, timeout);
8554
8555     if (rs->got_ctrlc_during_io)
8556       set_quit_flag ();
8557   }
8558
8559   if (ch >= 0)
8560     return ch;
8561
8562   switch ((enum serial_rc) ch)
8563     {
8564     case SERIAL_EOF:
8565       remote_unpush_target ();
8566       throw_error (TARGET_CLOSE_ERROR, _("Remote connection closed"));
8567       /* no return */
8568     case SERIAL_ERROR:
8569       unpush_and_perror (_("Remote communication error.  "
8570                            "Target disconnected."));
8571       /* no return */
8572     case SERIAL_TIMEOUT:
8573       break;
8574     }
8575   return ch;
8576 }
8577
8578 /* Wrapper for serial_write that closes the target and throws if
8579    writing fails.  The current quit handler is overridden to avoid
8580    quitting in the middle of packet sequence, as that would break
8581    communication with the remote server.  See
8582    remote_serial_quit_handler for more detail.  */
8583
8584 static void
8585 remote_serial_write (const char *str, int len)
8586 {
8587   struct remote_state *rs = get_remote_state ();
8588
8589   scoped_restore restore_quit
8590     = make_scoped_restore (&quit_handler, remote_serial_quit_handler);
8591
8592   rs->got_ctrlc_during_io = 0;
8593
8594   if (serial_write (rs->remote_desc, str, len))
8595     {
8596       unpush_and_perror (_("Remote communication error.  "
8597                            "Target disconnected."));
8598     }
8599
8600   if (rs->got_ctrlc_during_io)
8601     set_quit_flag ();
8602 }
8603
8604 /* Send the command in *BUF to the remote machine, and read the reply
8605    into *BUF.  Report an error if we get an error reply.  Resize
8606    *BUF using xrealloc if necessary to hold the result, and update
8607    *SIZEOF_BUF.  */
8608
8609 static void
8610 remote_send (char **buf,
8611              long *sizeof_buf)
8612 {
8613   putpkt (*buf);
8614   getpkt (buf, sizeof_buf, 0);
8615
8616   if ((*buf)[0] == 'E')
8617     error (_("Remote failure reply: %s"), *buf);
8618 }
8619
8620 /* Return a string representing an escaped version of BUF, of len N.
8621    E.g. \n is converted to \\n, \t to \\t, etc.  */
8622
8623 static std::string
8624 escape_buffer (const char *buf, int n)
8625 {
8626   string_file stb;
8627
8628   stb.putstrn (buf, n, '\\');
8629   return std::move (stb.string ());
8630 }
8631
8632 /* Display a null-terminated packet on stdout, for debugging, using C
8633    string notation.  */
8634
8635 static void
8636 print_packet (const char *buf)
8637 {
8638   puts_filtered ("\"");
8639   fputstr_filtered (buf, '"', gdb_stdout);
8640   puts_filtered ("\"");
8641 }
8642
8643 int
8644 putpkt (const char *buf)
8645 {
8646   return putpkt_binary (buf, strlen (buf));
8647 }
8648
8649 /* Send a packet to the remote machine, with error checking.  The data
8650    of the packet is in BUF.  The string in BUF can be at most
8651    get_remote_packet_size () - 5 to account for the $, # and checksum,
8652    and for a possible /0 if we are debugging (remote_debug) and want
8653    to print the sent packet as a string.  */
8654
8655 static int
8656 putpkt_binary (const char *buf, int cnt)
8657 {
8658   struct remote_state *rs = get_remote_state ();
8659   int i;
8660   unsigned char csum = 0;
8661   gdb::def_vector<char> data (cnt + 6);
8662   char *buf2 = data.data ();
8663
8664   int ch;
8665   int tcount = 0;
8666   char *p;
8667
8668   /* Catch cases like trying to read memory or listing threads while
8669      we're waiting for a stop reply.  The remote server wouldn't be
8670      ready to handle this request, so we'd hang and timeout.  We don't
8671      have to worry about this in synchronous mode, because in that
8672      case it's not possible to issue a command while the target is
8673      running.  This is not a problem in non-stop mode, because in that
8674      case, the stub is always ready to process serial input.  */
8675   if (!target_is_non_stop_p ()
8676       && target_is_async_p ()
8677       && rs->waiting_for_stop_reply)
8678     {
8679       error (_("Cannot execute this command while the target is running.\n"
8680                "Use the \"interrupt\" command to stop the target\n"
8681                "and then try again."));
8682     }
8683
8684   /* We're sending out a new packet.  Make sure we don't look at a
8685      stale cached response.  */
8686   rs->cached_wait_status = 0;
8687
8688   /* Copy the packet into buffer BUF2, encapsulating it
8689      and giving it a checksum.  */
8690
8691   p = buf2;
8692   *p++ = '$';
8693
8694   for (i = 0; i < cnt; i++)
8695     {
8696       csum += buf[i];
8697       *p++ = buf[i];
8698     }
8699   *p++ = '#';
8700   *p++ = tohex ((csum >> 4) & 0xf);
8701   *p++ = tohex (csum & 0xf);
8702
8703   /* Send it over and over until we get a positive ack.  */
8704
8705   while (1)
8706     {
8707       int started_error_output = 0;
8708
8709       if (remote_debug)
8710         {
8711           *p = '\0';
8712
8713           int len = (int) (p - buf2);
8714
8715           std::string str
8716             = escape_buffer (buf2, std::min (len, REMOTE_DEBUG_MAX_CHAR));
8717
8718           fprintf_unfiltered (gdb_stdlog, "Sending packet: %s", str.c_str ());
8719
8720           if (str.length () > REMOTE_DEBUG_MAX_CHAR)
8721             {
8722               fprintf_unfiltered (gdb_stdlog, "[%zu bytes omitted]",
8723                                   str.length () - REMOTE_DEBUG_MAX_CHAR);
8724             }
8725
8726           fprintf_unfiltered (gdb_stdlog, "...");
8727
8728           gdb_flush (gdb_stdlog);
8729         }
8730       remote_serial_write (buf2, p - buf2);
8731
8732       /* If this is a no acks version of the remote protocol, send the
8733          packet and move on.  */
8734       if (rs->noack_mode)
8735         break;
8736
8737       /* Read until either a timeout occurs (-2) or '+' is read.
8738          Handle any notification that arrives in the mean time.  */
8739       while (1)
8740         {
8741           ch = readchar (remote_timeout);
8742
8743           if (remote_debug)
8744             {
8745               switch (ch)
8746                 {
8747                 case '+':
8748                 case '-':
8749                 case SERIAL_TIMEOUT:
8750                 case '$':
8751                 case '%':
8752                   if (started_error_output)
8753                     {
8754                       putchar_unfiltered ('\n');
8755                       started_error_output = 0;
8756                     }
8757                 }
8758             }
8759
8760           switch (ch)
8761             {
8762             case '+':
8763               if (remote_debug)
8764                 fprintf_unfiltered (gdb_stdlog, "Ack\n");
8765               return 1;
8766             case '-':
8767               if (remote_debug)
8768                 fprintf_unfiltered (gdb_stdlog, "Nak\n");
8769               /* FALLTHROUGH */
8770             case SERIAL_TIMEOUT:
8771               tcount++;
8772               if (tcount > 3)
8773                 return 0;
8774               break;            /* Retransmit buffer.  */
8775             case '$':
8776               {
8777                 if (remote_debug)
8778                   fprintf_unfiltered (gdb_stdlog,
8779                                       "Packet instead of Ack, ignoring it\n");
8780                 /* It's probably an old response sent because an ACK
8781                    was lost.  Gobble up the packet and ack it so it
8782                    doesn't get retransmitted when we resend this
8783                    packet.  */
8784                 skip_frame ();
8785                 remote_serial_write ("+", 1);
8786                 continue;       /* Now, go look for +.  */
8787               }
8788
8789             case '%':
8790               {
8791                 int val;
8792
8793                 /* If we got a notification, handle it, and go back to looking
8794                    for an ack.  */
8795                 /* We've found the start of a notification.  Now
8796                    collect the data.  */
8797                 val = read_frame (&rs->buf, &rs->buf_size);
8798                 if (val >= 0)
8799                   {
8800                     if (remote_debug)
8801                       {
8802                         std::string str = escape_buffer (rs->buf, val);
8803
8804                         fprintf_unfiltered (gdb_stdlog,
8805                                             "  Notification received: %s\n",
8806                                             str.c_str ());
8807                       }
8808                     handle_notification (rs->notif_state, rs->buf);
8809                     /* We're in sync now, rewait for the ack.  */
8810                     tcount = 0;
8811                   }
8812                 else
8813                   {
8814                     if (remote_debug)
8815                       {
8816                         if (!started_error_output)
8817                           {
8818                             started_error_output = 1;
8819                             fprintf_unfiltered (gdb_stdlog, "putpkt: Junk: ");
8820                           }
8821                         fputc_unfiltered (ch & 0177, gdb_stdlog);
8822                         fprintf_unfiltered (gdb_stdlog, "%s", rs->buf);
8823                       }
8824                   }
8825                 continue;
8826               }
8827               /* fall-through */
8828             default:
8829               if (remote_debug)
8830                 {
8831                   if (!started_error_output)
8832                     {
8833                       started_error_output = 1;
8834                       fprintf_unfiltered (gdb_stdlog, "putpkt: Junk: ");
8835                     }
8836                   fputc_unfiltered (ch & 0177, gdb_stdlog);
8837                 }
8838               continue;
8839             }
8840           break;                /* Here to retransmit.  */
8841         }
8842
8843 #if 0
8844       /* This is wrong.  If doing a long backtrace, the user should be
8845          able to get out next time we call QUIT, without anything as
8846          violent as interrupt_query.  If we want to provide a way out of
8847          here without getting to the next QUIT, it should be based on
8848          hitting ^C twice as in remote_wait.  */
8849       if (quit_flag)
8850         {
8851           quit_flag = 0;
8852           interrupt_query ();
8853         }
8854 #endif
8855     }
8856
8857   return 0;
8858 }
8859
8860 /* Come here after finding the start of a frame when we expected an
8861    ack.  Do our best to discard the rest of this packet.  */
8862
8863 static void
8864 skip_frame (void)
8865 {
8866   int c;
8867
8868   while (1)
8869     {
8870       c = readchar (remote_timeout);
8871       switch (c)
8872         {
8873         case SERIAL_TIMEOUT:
8874           /* Nothing we can do.  */
8875           return;
8876         case '#':
8877           /* Discard the two bytes of checksum and stop.  */
8878           c = readchar (remote_timeout);
8879           if (c >= 0)
8880             c = readchar (remote_timeout);
8881
8882           return;
8883         case '*':               /* Run length encoding.  */
8884           /* Discard the repeat count.  */
8885           c = readchar (remote_timeout);
8886           if (c < 0)
8887             return;
8888           break;
8889         default:
8890           /* A regular character.  */
8891           break;
8892         }
8893     }
8894 }
8895
8896 /* Come here after finding the start of the frame.  Collect the rest
8897    into *BUF, verifying the checksum, length, and handling run-length
8898    compression.  NUL terminate the buffer.  If there is not enough room,
8899    expand *BUF using xrealloc.
8900
8901    Returns -1 on error, number of characters in buffer (ignoring the
8902    trailing NULL) on success. (could be extended to return one of the
8903    SERIAL status indications).  */
8904
8905 static long
8906 read_frame (char **buf_p,
8907             long *sizeof_buf)
8908 {
8909   unsigned char csum;
8910   long bc;
8911   int c;
8912   char *buf = *buf_p;
8913   struct remote_state *rs = get_remote_state ();
8914
8915   csum = 0;
8916   bc = 0;
8917
8918   while (1)
8919     {
8920       c = readchar (remote_timeout);
8921       switch (c)
8922         {
8923         case SERIAL_TIMEOUT:
8924           if (remote_debug)
8925             fputs_filtered ("Timeout in mid-packet, retrying\n", gdb_stdlog);
8926           return -1;
8927         case '$':
8928           if (remote_debug)
8929             fputs_filtered ("Saw new packet start in middle of old one\n",
8930                             gdb_stdlog);
8931           return -1;            /* Start a new packet, count retries.  */
8932         case '#':
8933           {
8934             unsigned char pktcsum;
8935             int check_0 = 0;
8936             int check_1 = 0;
8937
8938             buf[bc] = '\0';
8939
8940             check_0 = readchar (remote_timeout);
8941             if (check_0 >= 0)
8942               check_1 = readchar (remote_timeout);
8943
8944             if (check_0 == SERIAL_TIMEOUT || check_1 == SERIAL_TIMEOUT)
8945               {
8946                 if (remote_debug)
8947                   fputs_filtered ("Timeout in checksum, retrying\n",
8948                                   gdb_stdlog);
8949                 return -1;
8950               }
8951             else if (check_0 < 0 || check_1 < 0)
8952               {
8953                 if (remote_debug)
8954                   fputs_filtered ("Communication error in checksum\n",
8955                                   gdb_stdlog);
8956                 return -1;
8957               }
8958
8959             /* Don't recompute the checksum; with no ack packets we
8960                don't have any way to indicate a packet retransmission
8961                is necessary.  */
8962             if (rs->noack_mode)
8963               return bc;
8964
8965             pktcsum = (fromhex (check_0) << 4) | fromhex (check_1);
8966             if (csum == pktcsum)
8967               return bc;
8968
8969             if (remote_debug)
8970               {
8971                 std::string str = escape_buffer (buf, bc);
8972
8973                 fprintf_unfiltered (gdb_stdlog,
8974                                     "Bad checksum, sentsum=0x%x, "
8975                                     "csum=0x%x, buf=%s\n",
8976                                     pktcsum, csum, str.c_str ());
8977               }
8978             /* Number of characters in buffer ignoring trailing
8979                NULL.  */
8980             return -1;
8981           }
8982         case '*':               /* Run length encoding.  */
8983           {
8984             int repeat;
8985
8986             csum += c;
8987             c = readchar (remote_timeout);
8988             csum += c;
8989             repeat = c - ' ' + 3;       /* Compute repeat count.  */
8990
8991             /* The character before ``*'' is repeated.  */
8992
8993             if (repeat > 0 && repeat <= 255 && bc > 0)
8994               {
8995                 if (bc + repeat - 1 >= *sizeof_buf - 1)
8996                   {
8997                     /* Make some more room in the buffer.  */
8998                     *sizeof_buf += repeat;
8999                     *buf_p = (char *) xrealloc (*buf_p, *sizeof_buf);
9000                     buf = *buf_p;
9001                   }
9002
9003                 memset (&buf[bc], buf[bc - 1], repeat);
9004                 bc += repeat;
9005                 continue;
9006               }
9007
9008             buf[bc] = '\0';
9009             printf_filtered (_("Invalid run length encoding: %s\n"), buf);
9010             return -1;
9011           }
9012         default:
9013           if (bc >= *sizeof_buf - 1)
9014             {
9015               /* Make some more room in the buffer.  */
9016               *sizeof_buf *= 2;
9017               *buf_p = (char *) xrealloc (*buf_p, *sizeof_buf);
9018               buf = *buf_p;
9019             }
9020
9021           buf[bc++] = c;
9022           csum += c;
9023           continue;
9024         }
9025     }
9026 }
9027
9028 /* Read a packet from the remote machine, with error checking, and
9029    store it in *BUF.  Resize *BUF using xrealloc if necessary to hold
9030    the result, and update *SIZEOF_BUF.  If FOREVER, wait forever
9031    rather than timing out; this is used (in synchronous mode) to wait
9032    for a target that is is executing user code to stop.  */
9033 /* FIXME: ezannoni 2000-02-01 this wrapper is necessary so that we
9034    don't have to change all the calls to getpkt to deal with the
9035    return value, because at the moment I don't know what the right
9036    thing to do it for those.  */
9037 void
9038 getpkt (char **buf,
9039         long *sizeof_buf,
9040         int forever)
9041 {
9042   getpkt_sane (buf, sizeof_buf, forever);
9043 }
9044
9045
9046 /* Read a packet from the remote machine, with error checking, and
9047    store it in *BUF.  Resize *BUF using xrealloc if necessary to hold
9048    the result, and update *SIZEOF_BUF.  If FOREVER, wait forever
9049    rather than timing out; this is used (in synchronous mode) to wait
9050    for a target that is is executing user code to stop.  If FOREVER ==
9051    0, this function is allowed to time out gracefully and return an
9052    indication of this to the caller.  Otherwise return the number of
9053    bytes read.  If EXPECTING_NOTIF, consider receiving a notification
9054    enough reason to return to the caller.  *IS_NOTIF is an output
9055    boolean that indicates whether *BUF holds a notification or not
9056    (a regular packet).  */
9057
9058 static int
9059 getpkt_or_notif_sane_1 (char **buf, long *sizeof_buf, int forever,
9060                         int expecting_notif, int *is_notif)
9061 {
9062   struct remote_state *rs = get_remote_state ();
9063   int c;
9064   int tries;
9065   int timeout;
9066   int val = -1;
9067
9068   /* We're reading a new response.  Make sure we don't look at a
9069      previously cached response.  */
9070   rs->cached_wait_status = 0;
9071
9072   strcpy (*buf, "timeout");
9073
9074   if (forever)
9075     timeout = watchdog > 0 ? watchdog : -1;
9076   else if (expecting_notif)
9077     timeout = 0; /* There should already be a char in the buffer.  If
9078                     not, bail out.  */
9079   else
9080     timeout = remote_timeout;
9081
9082 #define MAX_TRIES 3
9083
9084   /* Process any number of notifications, and then return when
9085      we get a packet.  */
9086   for (;;)
9087     {
9088       /* If we get a timeout or bad checksum, retry up to MAX_TRIES
9089          times.  */
9090       for (tries = 1; tries <= MAX_TRIES; tries++)
9091         {
9092           /* This can loop forever if the remote side sends us
9093              characters continuously, but if it pauses, we'll get
9094              SERIAL_TIMEOUT from readchar because of timeout.  Then
9095              we'll count that as a retry.
9096
9097              Note that even when forever is set, we will only wait
9098              forever prior to the start of a packet.  After that, we
9099              expect characters to arrive at a brisk pace.  They should
9100              show up within remote_timeout intervals.  */
9101           do
9102             c = readchar (timeout);
9103           while (c != SERIAL_TIMEOUT && c != '$' && c != '%');
9104
9105           if (c == SERIAL_TIMEOUT)
9106             {
9107               if (expecting_notif)
9108                 return -1; /* Don't complain, it's normal to not get
9109                               anything in this case.  */
9110
9111               if (forever)      /* Watchdog went off?  Kill the target.  */
9112                 {
9113                   remote_unpush_target ();
9114                   throw_error (TARGET_CLOSE_ERROR,
9115                                _("Watchdog timeout has expired.  "
9116                                  "Target detached."));
9117                 }
9118               if (remote_debug)
9119                 fputs_filtered ("Timed out.\n", gdb_stdlog);
9120             }
9121           else
9122             {
9123               /* We've found the start of a packet or notification.
9124                  Now collect the data.  */
9125               val = read_frame (buf, sizeof_buf);
9126               if (val >= 0)
9127                 break;
9128             }
9129
9130           remote_serial_write ("-", 1);
9131         }
9132
9133       if (tries > MAX_TRIES)
9134         {
9135           /* We have tried hard enough, and just can't receive the
9136              packet/notification.  Give up.  */
9137           printf_unfiltered (_("Ignoring packet error, continuing...\n"));
9138
9139           /* Skip the ack char if we're in no-ack mode.  */
9140           if (!rs->noack_mode)
9141             remote_serial_write ("+", 1);
9142           return -1;
9143         }
9144
9145       /* If we got an ordinary packet, return that to our caller.  */
9146       if (c == '$')
9147         {
9148           if (remote_debug)
9149             {
9150               std::string str
9151                 = escape_buffer (*buf,
9152                                  std::min (val, REMOTE_DEBUG_MAX_CHAR));
9153
9154               fprintf_unfiltered (gdb_stdlog, "Packet received: %s",
9155                                   str.c_str ());
9156
9157               if (str.length () >  REMOTE_DEBUG_MAX_CHAR)
9158                 {
9159                   fprintf_unfiltered (gdb_stdlog, "[%zu bytes omitted]",
9160                                       str.length () - REMOTE_DEBUG_MAX_CHAR);
9161                 }
9162
9163               fprintf_unfiltered (gdb_stdlog, "\n");
9164             }
9165
9166           /* Skip the ack char if we're in no-ack mode.  */
9167           if (!rs->noack_mode)
9168             remote_serial_write ("+", 1);
9169           if (is_notif != NULL)
9170             *is_notif = 0;
9171           return val;
9172         }
9173
9174        /* If we got a notification, handle it, and go back to looking
9175          for a packet.  */
9176       else
9177         {
9178           gdb_assert (c == '%');
9179
9180           if (remote_debug)
9181             {
9182               std::string str = escape_buffer (*buf, val);
9183
9184               fprintf_unfiltered (gdb_stdlog,
9185                                   "  Notification received: %s\n",
9186                                   str.c_str ());
9187             }
9188           if (is_notif != NULL)
9189             *is_notif = 1;
9190
9191           handle_notification (rs->notif_state, *buf);
9192
9193           /* Notifications require no acknowledgement.  */
9194
9195           if (expecting_notif)
9196             return val;
9197         }
9198     }
9199 }
9200
9201 static int
9202 getpkt_sane (char **buf, long *sizeof_buf, int forever)
9203 {
9204   return getpkt_or_notif_sane_1 (buf, sizeof_buf, forever, 0, NULL);
9205 }
9206
9207 static int
9208 getpkt_or_notif_sane (char **buf, long *sizeof_buf, int forever,
9209                       int *is_notif)
9210 {
9211   return getpkt_or_notif_sane_1 (buf, sizeof_buf, forever, 1,
9212                                  is_notif);
9213 }
9214
9215 /* Check whether EVENT is a fork event for the process specified
9216    by the pid passed in DATA, and if it is, kill the fork child.  */
9217
9218 static int
9219 kill_child_of_pending_fork (QUEUE (stop_reply_p) *q,
9220                             QUEUE_ITER (stop_reply_p) *iter,
9221                             stop_reply_p event,
9222                             void *data)
9223 {
9224   struct queue_iter_param *param = (struct queue_iter_param *) data;
9225   int parent_pid = *(int *) param->input;
9226
9227   if (is_pending_fork_parent (&event->ws, parent_pid, event->ptid))
9228     {
9229       struct remote_state *rs = get_remote_state ();
9230       int child_pid = ptid_get_pid (event->ws.value.related_pid);
9231       int res;
9232
9233       res = remote_vkill (child_pid, rs);
9234       if (res != 0)
9235         error (_("Can't kill fork child process %d"), child_pid);
9236     }
9237
9238   return 1;
9239 }
9240
9241 /* Kill any new fork children of process PID that haven't been
9242    processed by follow_fork.  */
9243
9244 static void
9245 kill_new_fork_children (int pid, struct remote_state *rs)
9246 {
9247   struct thread_info *thread;
9248   struct notif_client *notif = &notif_client_stop;
9249   struct queue_iter_param param;
9250
9251   /* Kill the fork child threads of any threads in process PID
9252      that are stopped at a fork event.  */
9253   ALL_NON_EXITED_THREADS (thread)
9254     {
9255       struct target_waitstatus *ws = &thread->pending_follow;
9256
9257       if (is_pending_fork_parent (ws, pid, thread->ptid))
9258         {
9259           struct remote_state *rs = get_remote_state ();
9260           int child_pid = ptid_get_pid (ws->value.related_pid);
9261           int res;
9262
9263           res = remote_vkill (child_pid, rs);
9264           if (res != 0)
9265             error (_("Can't kill fork child process %d"), child_pid);
9266         }
9267     }
9268
9269   /* Check for any pending fork events (not reported or processed yet)
9270      in process PID and kill those fork child threads as well.  */
9271   remote_notif_get_pending_events (notif);
9272   param.input = &pid;
9273   param.output = NULL;
9274   QUEUE_iterate (stop_reply_p, stop_reply_queue,
9275                  kill_child_of_pending_fork, &param);
9276 }
9277
9278 \f
9279 /* Target hook to kill the current inferior.  */
9280
9281 static void
9282 remote_kill (struct target_ops *ops)
9283 {
9284   int res = -1;
9285   int pid = ptid_get_pid (inferior_ptid);
9286   struct remote_state *rs = get_remote_state ();
9287
9288   if (packet_support (PACKET_vKill) != PACKET_DISABLE)
9289     {
9290       /* If we're stopped while forking and we haven't followed yet,
9291          kill the child task.  We need to do this before killing the
9292          parent task because if this is a vfork then the parent will
9293          be sleeping.  */
9294       kill_new_fork_children (pid, rs);
9295
9296       res = remote_vkill (pid, rs);
9297       if (res == 0)
9298         {
9299           target_mourn_inferior (inferior_ptid);
9300           return;
9301         }
9302     }
9303
9304   /* If we are in 'target remote' mode and we are killing the only
9305      inferior, then we will tell gdbserver to exit and unpush the
9306      target.  */
9307   if (res == -1 && !remote_multi_process_p (rs)
9308       && number_of_live_inferiors () == 1)
9309     {
9310       remote_kill_k ();
9311
9312       /* We've killed the remote end, we get to mourn it.  If we are
9313          not in extended mode, mourning the inferior also unpushes
9314          remote_ops from the target stack, which closes the remote
9315          connection.  */
9316       target_mourn_inferior (inferior_ptid);
9317
9318       return;
9319     }
9320
9321   error (_("Can't kill process"));
9322 }
9323
9324 /* Send a kill request to the target using the 'vKill' packet.  */
9325
9326 static int
9327 remote_vkill (int pid, struct remote_state *rs)
9328 {
9329   if (packet_support (PACKET_vKill) == PACKET_DISABLE)
9330     return -1;
9331
9332   /* Tell the remote target to detach.  */
9333   xsnprintf (rs->buf, get_remote_packet_size (), "vKill;%x", pid);
9334   putpkt (rs->buf);
9335   getpkt (&rs->buf, &rs->buf_size, 0);
9336
9337   switch (packet_ok (rs->buf,
9338                      &remote_protocol_packets[PACKET_vKill]))
9339     {
9340     case PACKET_OK:
9341       return 0;
9342     case PACKET_ERROR:
9343       return 1;
9344     case PACKET_UNKNOWN:
9345       return -1;
9346     default:
9347       internal_error (__FILE__, __LINE__, _("Bad result from packet_ok"));
9348     }
9349 }
9350
9351 /* Send a kill request to the target using the 'k' packet.  */
9352
9353 static void
9354 remote_kill_k (void)
9355 {
9356   /* Catch errors so the user can quit from gdb even when we
9357      aren't on speaking terms with the remote system.  */
9358   TRY
9359     {
9360       putpkt ("k");
9361     }
9362   CATCH (ex, RETURN_MASK_ERROR)
9363     {
9364       if (ex.error == TARGET_CLOSE_ERROR)
9365         {
9366           /* If we got an (EOF) error that caused the target
9367              to go away, then we're done, that's what we wanted.
9368              "k" is susceptible to cause a premature EOF, given
9369              that the remote server isn't actually required to
9370              reply to "k", and it can happen that it doesn't
9371              even get to reply ACK to the "k".  */
9372           return;
9373         }
9374
9375       /* Otherwise, something went wrong.  We didn't actually kill
9376          the target.  Just propagate the exception, and let the
9377          user or higher layers decide what to do.  */
9378       throw_exception (ex);
9379     }
9380   END_CATCH
9381 }
9382
9383 static void
9384 remote_mourn (struct target_ops *target)
9385 {
9386   struct remote_state *rs = get_remote_state ();
9387
9388   /* In 'target remote' mode with one inferior, we close the connection.  */
9389   if (!rs->extended && number_of_live_inferiors () <= 1)
9390     {
9391       unpush_target (target);
9392
9393       /* remote_close takes care of doing most of the clean up.  */
9394       generic_mourn_inferior ();
9395       return;
9396     }
9397
9398   /* In case we got here due to an error, but we're going to stay
9399      connected.  */
9400   rs->waiting_for_stop_reply = 0;
9401
9402   /* If the current general thread belonged to the process we just
9403      detached from or has exited, the remote side current general
9404      thread becomes undefined.  Considering a case like this:
9405
9406      - We just got here due to a detach.
9407      - The process that we're detaching from happens to immediately
9408        report a global breakpoint being hit in non-stop mode, in the
9409        same thread we had selected before.
9410      - GDB attaches to this process again.
9411      - This event happens to be the next event we handle.
9412
9413      GDB would consider that the current general thread didn't need to
9414      be set on the stub side (with Hg), since for all it knew,
9415      GENERAL_THREAD hadn't changed.
9416
9417      Notice that although in all-stop mode, the remote server always
9418      sets the current thread to the thread reporting the stop event,
9419      that doesn't happen in non-stop mode; in non-stop, the stub *must
9420      not* change the current thread when reporting a breakpoint hit,
9421      due to the decoupling of event reporting and event handling.
9422
9423      To keep things simple, we always invalidate our notion of the
9424      current thread.  */
9425   record_currthread (rs, minus_one_ptid);
9426
9427   /* Call common code to mark the inferior as not running.  */
9428   generic_mourn_inferior ();
9429
9430   if (!have_inferiors ())
9431     {
9432       if (!remote_multi_process_p (rs))
9433         {
9434           /* Check whether the target is running now - some remote stubs
9435              automatically restart after kill.  */
9436           putpkt ("?");
9437           getpkt (&rs->buf, &rs->buf_size, 0);
9438
9439           if (rs->buf[0] == 'S' || rs->buf[0] == 'T')
9440             {
9441               /* Assume that the target has been restarted.  Set
9442                  inferior_ptid so that bits of core GDB realizes
9443                  there's something here, e.g., so that the user can
9444                  say "kill" again.  */
9445               inferior_ptid = magic_null_ptid;
9446             }
9447         }
9448     }
9449 }
9450
9451 static int
9452 extended_remote_supports_disable_randomization (struct target_ops *self)
9453 {
9454   return packet_support (PACKET_QDisableRandomization) == PACKET_ENABLE;
9455 }
9456
9457 static void
9458 extended_remote_disable_randomization (int val)
9459 {
9460   struct remote_state *rs = get_remote_state ();
9461   char *reply;
9462
9463   xsnprintf (rs->buf, get_remote_packet_size (), "QDisableRandomization:%x",
9464              val);
9465   putpkt (rs->buf);
9466   reply = remote_get_noisy_reply ();
9467   if (*reply == '\0')
9468     error (_("Target does not support QDisableRandomization."));
9469   if (strcmp (reply, "OK") != 0)
9470     error (_("Bogus QDisableRandomization reply from target: %s"), reply);
9471 }
9472
9473 static int
9474 extended_remote_run (const std::string &args)
9475 {
9476   struct remote_state *rs = get_remote_state ();
9477   int len;
9478   const char *remote_exec_file = get_remote_exec_file ();
9479
9480   /* If the user has disabled vRun support, or we have detected that
9481      support is not available, do not try it.  */
9482   if (packet_support (PACKET_vRun) == PACKET_DISABLE)
9483     return -1;
9484
9485   strcpy (rs->buf, "vRun;");
9486   len = strlen (rs->buf);
9487
9488   if (strlen (remote_exec_file) * 2 + len >= get_remote_packet_size ())
9489     error (_("Remote file name too long for run packet"));
9490   len += 2 * bin2hex ((gdb_byte *) remote_exec_file, rs->buf + len,
9491                       strlen (remote_exec_file));
9492
9493   if (!args.empty ())
9494     {
9495       int i;
9496
9497       gdb_argv argv (args.c_str ());
9498       for (i = 0; argv[i] != NULL; i++)
9499         {
9500           if (strlen (argv[i]) * 2 + 1 + len >= get_remote_packet_size ())
9501             error (_("Argument list too long for run packet"));
9502           rs->buf[len++] = ';';
9503           len += 2 * bin2hex ((gdb_byte *) argv[i], rs->buf + len,
9504                               strlen (argv[i]));
9505         }
9506     }
9507
9508   rs->buf[len++] = '\0';
9509
9510   putpkt (rs->buf);
9511   getpkt (&rs->buf, &rs->buf_size, 0);
9512
9513   switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_vRun]))
9514     {
9515     case PACKET_OK:
9516       /* We have a wait response.  All is well.  */
9517       return 0;
9518     case PACKET_UNKNOWN:
9519       return -1;
9520     case PACKET_ERROR:
9521       if (remote_exec_file[0] == '\0')
9522         error (_("Running the default executable on the remote target failed; "
9523                  "try \"set remote exec-file\"?"));
9524       else
9525         error (_("Running \"%s\" on the remote target failed"),
9526                remote_exec_file);
9527     default:
9528       gdb_assert_not_reached (_("bad switch"));
9529     }
9530 }
9531
9532 /* Helper function to send set/unset environment packets.  ACTION is
9533    either "set" or "unset".  PACKET is either "QEnvironmentHexEncoded"
9534    or "QEnvironmentUnsetVariable".  VALUE is the variable to be
9535    sent.  */
9536
9537 static void
9538 send_environment_packet (struct remote_state *rs,
9539                          const char *action,
9540                          const char *packet,
9541                          const char *value)
9542 {
9543   /* Convert the environment variable to an hex string, which
9544      is the best format to be transmitted over the wire.  */
9545   std::string encoded_value = bin2hex ((const gdb_byte *) value,
9546                                          strlen (value));
9547
9548   xsnprintf (rs->buf, get_remote_packet_size (),
9549              "%s:%s", packet, encoded_value.c_str ());
9550
9551   putpkt (rs->buf);
9552   getpkt (&rs->buf, &rs->buf_size, 0);
9553   if (strcmp (rs->buf, "OK") != 0)
9554     warning (_("Unable to %s environment variable '%s' on remote."),
9555              action, value);
9556 }
9557
9558 /* Helper function to handle the QEnvironment* packets.  */
9559
9560 static void
9561 extended_remote_environment_support (struct remote_state *rs)
9562 {
9563   if (packet_support (PACKET_QEnvironmentReset) != PACKET_DISABLE)
9564     {
9565       putpkt ("QEnvironmentReset");
9566       getpkt (&rs->buf, &rs->buf_size, 0);
9567       if (strcmp (rs->buf, "OK") != 0)
9568         warning (_("Unable to reset environment on remote."));
9569     }
9570
9571   gdb_environ *e = &current_inferior ()->environment;
9572
9573   if (packet_support (PACKET_QEnvironmentHexEncoded) != PACKET_DISABLE)
9574     for (const std::string &el : e->user_set_env ())
9575       send_environment_packet (rs, "set", "QEnvironmentHexEncoded",
9576                                el.c_str ());
9577
9578   if (packet_support (PACKET_QEnvironmentUnset) != PACKET_DISABLE)
9579     for (const std::string &el : e->user_unset_env ())
9580       send_environment_packet (rs, "unset", "QEnvironmentUnset", el.c_str ());
9581 }
9582
9583 /* Helper function to set the current working directory for the
9584    inferior in the remote target.  */
9585
9586 static void
9587 extended_remote_set_inferior_cwd (struct remote_state *rs)
9588 {
9589   if (packet_support (PACKET_QSetWorkingDir) != PACKET_DISABLE)
9590     {
9591       const char *inferior_cwd = get_inferior_cwd ();
9592
9593       if (inferior_cwd != NULL)
9594         {
9595           std::string hexpath = bin2hex ((const gdb_byte *) inferior_cwd,
9596                                          strlen (inferior_cwd));
9597
9598           xsnprintf (rs->buf, get_remote_packet_size (),
9599                      "QSetWorkingDir:%s", hexpath.c_str ());
9600         }
9601       else
9602         {
9603           /* An empty inferior_cwd means that the user wants us to
9604              reset the remote server's inferior's cwd.  */
9605           xsnprintf (rs->buf, get_remote_packet_size (),
9606                      "QSetWorkingDir:");
9607         }
9608
9609       putpkt (rs->buf);
9610       getpkt (&rs->buf, &rs->buf_size, 0);
9611       if (packet_ok (rs->buf,
9612                      &remote_protocol_packets[PACKET_QSetWorkingDir])
9613           != PACKET_OK)
9614         error (_("\
9615 Remote replied unexpectedly while setting the inferior's working\n\
9616 directory: %s"),
9617                rs->buf);
9618
9619     }
9620 }
9621
9622 /* In the extended protocol we want to be able to do things like
9623    "run" and have them basically work as expected.  So we need
9624    a special create_inferior function.  We support changing the
9625    executable file and the command line arguments, but not the
9626    environment.  */
9627
9628 static void
9629 extended_remote_create_inferior (struct target_ops *ops,
9630                                  const char *exec_file,
9631                                  const std::string &args,
9632                                  char **env, int from_tty)
9633 {
9634   int run_worked;
9635   char *stop_reply;
9636   struct remote_state *rs = get_remote_state ();
9637   const char *remote_exec_file = get_remote_exec_file ();
9638
9639   /* If running asynchronously, register the target file descriptor
9640      with the event loop.  */
9641   if (target_can_async_p ())
9642     target_async (1);
9643
9644   /* Disable address space randomization if requested (and supported).  */
9645   if (extended_remote_supports_disable_randomization (ops))
9646     extended_remote_disable_randomization (disable_randomization);
9647
9648   /* If startup-with-shell is on, we inform gdbserver to start the
9649      remote inferior using a shell.  */
9650   if (packet_support (PACKET_QStartupWithShell) != PACKET_DISABLE)
9651     {
9652       xsnprintf (rs->buf, get_remote_packet_size (),
9653                  "QStartupWithShell:%d", startup_with_shell ? 1 : 0);
9654       putpkt (rs->buf);
9655       getpkt (&rs->buf, &rs->buf_size, 0);
9656       if (strcmp (rs->buf, "OK") != 0)
9657         error (_("\
9658 Remote replied unexpectedly while setting startup-with-shell: %s"),
9659                rs->buf);
9660     }
9661
9662   extended_remote_environment_support (rs);
9663
9664   extended_remote_set_inferior_cwd (rs);
9665
9666   /* Now restart the remote server.  */
9667   run_worked = extended_remote_run (args) != -1;
9668   if (!run_worked)
9669     {
9670       /* vRun was not supported.  Fail if we need it to do what the
9671          user requested.  */
9672       if (remote_exec_file[0])
9673         error (_("Remote target does not support \"set remote exec-file\""));
9674       if (!args.empty ())
9675         error (_("Remote target does not support \"set args\" or run <ARGS>"));
9676
9677       /* Fall back to "R".  */
9678       extended_remote_restart ();
9679     }
9680
9681   if (!have_inferiors ())
9682     {
9683       /* Clean up from the last time we ran, before we mark the target
9684          running again.  This will mark breakpoints uninserted, and
9685          get_offsets may insert breakpoints.  */
9686       init_thread_list ();
9687       init_wait_for_inferior ();
9688     }
9689
9690   /* vRun's success return is a stop reply.  */
9691   stop_reply = run_worked ? rs->buf : NULL;
9692   add_current_inferior_and_thread (stop_reply);
9693
9694   /* Get updated offsets, if the stub uses qOffsets.  */
9695   get_offsets ();
9696 }
9697 \f
9698
9699 /* Given a location's target info BP_TGT and the packet buffer BUF,  output
9700    the list of conditions (in agent expression bytecode format), if any, the
9701    target needs to evaluate.  The output is placed into the packet buffer
9702    started from BUF and ended at BUF_END.  */
9703
9704 static int
9705 remote_add_target_side_condition (struct gdbarch *gdbarch,
9706                                   struct bp_target_info *bp_tgt, char *buf,
9707                                   char *buf_end)
9708 {
9709   if (bp_tgt->conditions.empty ())
9710     return 0;
9711
9712   buf += strlen (buf);
9713   xsnprintf (buf, buf_end - buf, "%s", ";");
9714   buf++;
9715
9716   /* Send conditions to the target.  */
9717   for (agent_expr *aexpr : bp_tgt->conditions)
9718     {
9719       xsnprintf (buf, buf_end - buf, "X%x,", aexpr->len);
9720       buf += strlen (buf);
9721       for (int i = 0; i < aexpr->len; ++i)
9722         buf = pack_hex_byte (buf, aexpr->buf[i]);
9723       *buf = '\0';
9724     }
9725   return 0;
9726 }
9727
9728 static void
9729 remote_add_target_side_commands (struct gdbarch *gdbarch,
9730                                  struct bp_target_info *bp_tgt, char *buf)
9731 {
9732   if (bp_tgt->tcommands.empty ())
9733     return;
9734
9735   buf += strlen (buf);
9736
9737   sprintf (buf, ";cmds:%x,", bp_tgt->persist);
9738   buf += strlen (buf);
9739
9740   /* Concatenate all the agent expressions that are commands into the
9741      cmds parameter.  */
9742   for (agent_expr *aexpr : bp_tgt->tcommands)
9743     {
9744       sprintf (buf, "X%x,", aexpr->len);
9745       buf += strlen (buf);
9746       for (int i = 0; i < aexpr->len; ++i)
9747         buf = pack_hex_byte (buf, aexpr->buf[i]);
9748       *buf = '\0';
9749     }
9750 }
9751
9752 /* Insert a breakpoint.  On targets that have software breakpoint
9753    support, we ask the remote target to do the work; on targets
9754    which don't, we insert a traditional memory breakpoint.  */
9755
9756 static int
9757 remote_insert_breakpoint (struct target_ops *ops,
9758                           struct gdbarch *gdbarch,
9759                           struct bp_target_info *bp_tgt)
9760 {
9761   /* Try the "Z" s/w breakpoint packet if it is not already disabled.
9762      If it succeeds, then set the support to PACKET_ENABLE.  If it
9763      fails, and the user has explicitly requested the Z support then
9764      report an error, otherwise, mark it disabled and go on.  */
9765
9766   if (packet_support (PACKET_Z0) != PACKET_DISABLE)
9767     {
9768       CORE_ADDR addr = bp_tgt->reqstd_address;
9769       struct remote_state *rs;
9770       char *p, *endbuf;
9771       int bpsize;
9772
9773       /* Make sure the remote is pointing at the right process, if
9774          necessary.  */
9775       if (!gdbarch_has_global_breakpoints (target_gdbarch ()))
9776         set_general_process ();
9777
9778       rs = get_remote_state ();
9779       p = rs->buf;
9780       endbuf = rs->buf + get_remote_packet_size ();
9781
9782       *(p++) = 'Z';
9783       *(p++) = '0';
9784       *(p++) = ',';
9785       addr = (ULONGEST) remote_address_masked (addr);
9786       p += hexnumstr (p, addr);
9787       xsnprintf (p, endbuf - p, ",%d", bp_tgt->kind);
9788
9789       if (remote_supports_cond_breakpoints (ops))
9790         remote_add_target_side_condition (gdbarch, bp_tgt, p, endbuf);
9791
9792       if (remote_can_run_breakpoint_commands (ops))
9793         remote_add_target_side_commands (gdbarch, bp_tgt, p);
9794
9795       putpkt (rs->buf);
9796       getpkt (&rs->buf, &rs->buf_size, 0);
9797
9798       switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_Z0]))
9799         {
9800         case PACKET_ERROR:
9801           return -1;
9802         case PACKET_OK:
9803           return 0;
9804         case PACKET_UNKNOWN:
9805           break;
9806         }
9807     }
9808
9809   /* If this breakpoint has target-side commands but this stub doesn't
9810      support Z0 packets, throw error.  */
9811   if (!bp_tgt->tcommands.empty ())
9812     throw_error (NOT_SUPPORTED_ERROR, _("\
9813 Target doesn't support breakpoints that have target side commands."));
9814
9815   return memory_insert_breakpoint (ops, gdbarch, bp_tgt);
9816 }
9817
9818 static int
9819 remote_remove_breakpoint (struct target_ops *ops,
9820                           struct gdbarch *gdbarch,
9821                           struct bp_target_info *bp_tgt,
9822                           enum remove_bp_reason reason)
9823 {
9824   CORE_ADDR addr = bp_tgt->placed_address;
9825   struct remote_state *rs = get_remote_state ();
9826
9827   if (packet_support (PACKET_Z0) != PACKET_DISABLE)
9828     {
9829       char *p = rs->buf;
9830       char *endbuf = rs->buf + get_remote_packet_size ();
9831
9832       /* Make sure the remote is pointing at the right process, if
9833          necessary.  */
9834       if (!gdbarch_has_global_breakpoints (target_gdbarch ()))
9835         set_general_process ();
9836
9837       *(p++) = 'z';
9838       *(p++) = '0';
9839       *(p++) = ',';
9840
9841       addr = (ULONGEST) remote_address_masked (bp_tgt->placed_address);
9842       p += hexnumstr (p, addr);
9843       xsnprintf (p, endbuf - p, ",%d", bp_tgt->kind);
9844
9845       putpkt (rs->buf);
9846       getpkt (&rs->buf, &rs->buf_size, 0);
9847
9848       return (rs->buf[0] == 'E');
9849     }
9850
9851   return memory_remove_breakpoint (ops, gdbarch, bp_tgt, reason);
9852 }
9853
9854 static enum Z_packet_type
9855 watchpoint_to_Z_packet (int type)
9856 {
9857   switch (type)
9858     {
9859     case hw_write:
9860       return Z_PACKET_WRITE_WP;
9861       break;
9862     case hw_read:
9863       return Z_PACKET_READ_WP;
9864       break;
9865     case hw_access:
9866       return Z_PACKET_ACCESS_WP;
9867       break;
9868     default:
9869       internal_error (__FILE__, __LINE__,
9870                       _("hw_bp_to_z: bad watchpoint type %d"), type);
9871     }
9872 }
9873
9874 static int
9875 remote_insert_watchpoint (struct target_ops *self, CORE_ADDR addr, int len,
9876                           enum target_hw_bp_type type, struct expression *cond)
9877 {
9878   struct remote_state *rs = get_remote_state ();
9879   char *endbuf = rs->buf + get_remote_packet_size ();
9880   char *p;
9881   enum Z_packet_type packet = watchpoint_to_Z_packet (type);
9882
9883   if (packet_support (PACKET_Z0 + packet) == PACKET_DISABLE)
9884     return 1;
9885
9886   /* Make sure the remote is pointing at the right process, if
9887      necessary.  */
9888   if (!gdbarch_has_global_breakpoints (target_gdbarch ()))
9889     set_general_process ();
9890
9891   xsnprintf (rs->buf, endbuf - rs->buf, "Z%x,", packet);
9892   p = strchr (rs->buf, '\0');
9893   addr = remote_address_masked (addr);
9894   p += hexnumstr (p, (ULONGEST) addr);
9895   xsnprintf (p, endbuf - p, ",%x", len);
9896
9897   putpkt (rs->buf);
9898   getpkt (&rs->buf, &rs->buf_size, 0);
9899
9900   switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_Z0 + packet]))
9901     {
9902     case PACKET_ERROR:
9903       return -1;
9904     case PACKET_UNKNOWN:
9905       return 1;
9906     case PACKET_OK:
9907       return 0;
9908     }
9909   internal_error (__FILE__, __LINE__,
9910                   _("remote_insert_watchpoint: reached end of function"));
9911 }
9912
9913 static int
9914 remote_watchpoint_addr_within_range (struct target_ops *target, CORE_ADDR addr,
9915                                      CORE_ADDR start, int length)
9916 {
9917   CORE_ADDR diff = remote_address_masked (addr - start);
9918
9919   return diff < length;
9920 }
9921
9922
9923 static int
9924 remote_remove_watchpoint (struct target_ops *self, CORE_ADDR addr, int len,
9925                           enum target_hw_bp_type type, struct expression *cond)
9926 {
9927   struct remote_state *rs = get_remote_state ();
9928   char *endbuf = rs->buf + get_remote_packet_size ();
9929   char *p;
9930   enum Z_packet_type packet = watchpoint_to_Z_packet (type);
9931
9932   if (packet_support (PACKET_Z0 + packet) == PACKET_DISABLE)
9933     return -1;
9934
9935   /* Make sure the remote is pointing at the right process, if
9936      necessary.  */
9937   if (!gdbarch_has_global_breakpoints (target_gdbarch ()))
9938     set_general_process ();
9939
9940   xsnprintf (rs->buf, endbuf - rs->buf, "z%x,", packet);
9941   p = strchr (rs->buf, '\0');
9942   addr = remote_address_masked (addr);
9943   p += hexnumstr (p, (ULONGEST) addr);
9944   xsnprintf (p, endbuf - p, ",%x", len);
9945   putpkt (rs->buf);
9946   getpkt (&rs->buf, &rs->buf_size, 0);
9947
9948   switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_Z0 + packet]))
9949     {
9950     case PACKET_ERROR:
9951     case PACKET_UNKNOWN:
9952       return -1;
9953     case PACKET_OK:
9954       return 0;
9955     }
9956   internal_error (__FILE__, __LINE__,
9957                   _("remote_remove_watchpoint: reached end of function"));
9958 }
9959
9960
9961 int remote_hw_watchpoint_limit = -1;
9962 int remote_hw_watchpoint_length_limit = -1;
9963 int remote_hw_breakpoint_limit = -1;
9964
9965 static int
9966 remote_region_ok_for_hw_watchpoint (struct target_ops *self,
9967                                     CORE_ADDR addr, int len)
9968 {
9969   if (remote_hw_watchpoint_length_limit == 0)
9970     return 0;
9971   else if (remote_hw_watchpoint_length_limit < 0)
9972     return 1;
9973   else if (len <= remote_hw_watchpoint_length_limit)
9974     return 1;
9975   else
9976     return 0;
9977 }
9978
9979 static int
9980 remote_check_watch_resources (struct target_ops *self,
9981                               enum bptype type, int cnt, int ot)
9982 {
9983   if (type == bp_hardware_breakpoint)
9984     {
9985       if (remote_hw_breakpoint_limit == 0)
9986         return 0;
9987       else if (remote_hw_breakpoint_limit < 0)
9988         return 1;
9989       else if (cnt <= remote_hw_breakpoint_limit)
9990         return 1;
9991     }
9992   else
9993     {
9994       if (remote_hw_watchpoint_limit == 0)
9995         return 0;
9996       else if (remote_hw_watchpoint_limit < 0)
9997         return 1;
9998       else if (ot)
9999         return -1;
10000       else if (cnt <= remote_hw_watchpoint_limit)
10001         return 1;
10002     }
10003   return -1;
10004 }
10005
10006 /* The to_stopped_by_sw_breakpoint method of target remote.  */
10007
10008 static int
10009 remote_stopped_by_sw_breakpoint (struct target_ops *ops)
10010 {
10011   struct thread_info *thread = inferior_thread ();
10012
10013   return (thread->priv != NULL
10014           && (get_remote_thread_info (thread)->stop_reason
10015               == TARGET_STOPPED_BY_SW_BREAKPOINT));
10016 }
10017
10018 /* The to_supports_stopped_by_sw_breakpoint method of target
10019    remote.  */
10020
10021 static int
10022 remote_supports_stopped_by_sw_breakpoint (struct target_ops *ops)
10023 {
10024   return (packet_support (PACKET_swbreak_feature) == PACKET_ENABLE);
10025 }
10026
10027 /* The to_stopped_by_hw_breakpoint method of target remote.  */
10028
10029 static int
10030 remote_stopped_by_hw_breakpoint (struct target_ops *ops)
10031 {
10032   struct thread_info *thread = inferior_thread ();
10033
10034   return (thread->priv != NULL
10035           && (get_remote_thread_info (thread)->stop_reason
10036               == TARGET_STOPPED_BY_HW_BREAKPOINT));
10037 }
10038
10039 /* The to_supports_stopped_by_hw_breakpoint method of target
10040    remote.  */
10041
10042 static int
10043 remote_supports_stopped_by_hw_breakpoint (struct target_ops *ops)
10044 {
10045   return (packet_support (PACKET_hwbreak_feature) == PACKET_ENABLE);
10046 }
10047
10048 static int
10049 remote_stopped_by_watchpoint (struct target_ops *ops)
10050 {
10051   struct thread_info *thread = inferior_thread ();
10052
10053   return (thread->priv != NULL
10054           && (get_remote_thread_info (thread)->stop_reason
10055               == TARGET_STOPPED_BY_WATCHPOINT));
10056 }
10057
10058 static int
10059 remote_stopped_data_address (struct target_ops *target, CORE_ADDR *addr_p)
10060 {
10061   struct thread_info *thread = inferior_thread ();
10062
10063   if (thread->priv != NULL
10064       && (get_remote_thread_info (thread)->stop_reason
10065           == TARGET_STOPPED_BY_WATCHPOINT))
10066     {
10067       *addr_p = get_remote_thread_info (thread)->watch_data_address;
10068       return 1;
10069     }
10070
10071   return 0;
10072 }
10073
10074
10075 static int
10076 remote_insert_hw_breakpoint (struct target_ops *self, struct gdbarch *gdbarch,
10077                              struct bp_target_info *bp_tgt)
10078 {
10079   CORE_ADDR addr = bp_tgt->reqstd_address;
10080   struct remote_state *rs;
10081   char *p, *endbuf;
10082   char *message;
10083
10084   if (packet_support (PACKET_Z1) == PACKET_DISABLE)
10085     return -1;
10086
10087   /* Make sure the remote is pointing at the right process, if
10088      necessary.  */
10089   if (!gdbarch_has_global_breakpoints (target_gdbarch ()))
10090     set_general_process ();
10091
10092   rs = get_remote_state ();
10093   p = rs->buf;
10094   endbuf = rs->buf + get_remote_packet_size ();
10095
10096   *(p++) = 'Z';
10097   *(p++) = '1';
10098   *(p++) = ',';
10099
10100   addr = remote_address_masked (addr);
10101   p += hexnumstr (p, (ULONGEST) addr);
10102   xsnprintf (p, endbuf - p, ",%x", bp_tgt->kind);
10103
10104   if (remote_supports_cond_breakpoints (self))
10105     remote_add_target_side_condition (gdbarch, bp_tgt, p, endbuf);
10106
10107   if (remote_can_run_breakpoint_commands (self))
10108     remote_add_target_side_commands (gdbarch, bp_tgt, p);
10109
10110   putpkt (rs->buf);
10111   getpkt (&rs->buf, &rs->buf_size, 0);
10112
10113   switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_Z1]))
10114     {
10115     case PACKET_ERROR:
10116       if (rs->buf[1] == '.')
10117         {
10118           message = strchr (rs->buf + 2, '.');
10119           if (message)
10120             error (_("Remote failure reply: %s"), message + 1);
10121         }
10122       return -1;
10123     case PACKET_UNKNOWN:
10124       return -1;
10125     case PACKET_OK:
10126       return 0;
10127     }
10128   internal_error (__FILE__, __LINE__,
10129                   _("remote_insert_hw_breakpoint: reached end of function"));
10130 }
10131
10132
10133 static int
10134 remote_remove_hw_breakpoint (struct target_ops *self, struct gdbarch *gdbarch,
10135                              struct bp_target_info *bp_tgt)
10136 {
10137   CORE_ADDR addr;
10138   struct remote_state *rs = get_remote_state ();
10139   char *p = rs->buf;
10140   char *endbuf = rs->buf + get_remote_packet_size ();
10141
10142   if (packet_support (PACKET_Z1) == PACKET_DISABLE)
10143     return -1;
10144
10145   /* Make sure the remote is pointing at the right process, if
10146      necessary.  */
10147   if (!gdbarch_has_global_breakpoints (target_gdbarch ()))
10148     set_general_process ();
10149
10150   *(p++) = 'z';
10151   *(p++) = '1';
10152   *(p++) = ',';
10153
10154   addr = remote_address_masked (bp_tgt->placed_address);
10155   p += hexnumstr (p, (ULONGEST) addr);
10156   xsnprintf (p, endbuf  - p, ",%x", bp_tgt->kind);
10157
10158   putpkt (rs->buf);
10159   getpkt (&rs->buf, &rs->buf_size, 0);
10160
10161   switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_Z1]))
10162     {
10163     case PACKET_ERROR:
10164     case PACKET_UNKNOWN:
10165       return -1;
10166     case PACKET_OK:
10167       return 0;
10168     }
10169   internal_error (__FILE__, __LINE__,
10170                   _("remote_remove_hw_breakpoint: reached end of function"));
10171 }
10172
10173 /* Verify memory using the "qCRC:" request.  */
10174
10175 static int
10176 remote_verify_memory (struct target_ops *ops,
10177                       const gdb_byte *data, CORE_ADDR lma, ULONGEST size)
10178 {
10179   struct remote_state *rs = get_remote_state ();
10180   unsigned long host_crc, target_crc;
10181   char *tmp;
10182
10183   /* It doesn't make sense to use qCRC if the remote target is
10184      connected but not running.  */
10185   if (target_has_execution && packet_support (PACKET_qCRC) != PACKET_DISABLE)
10186     {
10187       enum packet_result result;
10188
10189       /* Make sure the remote is pointing at the right process.  */
10190       set_general_process ();
10191
10192       /* FIXME: assumes lma can fit into long.  */
10193       xsnprintf (rs->buf, get_remote_packet_size (), "qCRC:%lx,%lx",
10194                  (long) lma, (long) size);
10195       putpkt (rs->buf);
10196
10197       /* Be clever; compute the host_crc before waiting for target
10198          reply.  */
10199       host_crc = xcrc32 (data, size, 0xffffffff);
10200
10201       getpkt (&rs->buf, &rs->buf_size, 0);
10202
10203       result = packet_ok (rs->buf,
10204                           &remote_protocol_packets[PACKET_qCRC]);
10205       if (result == PACKET_ERROR)
10206         return -1;
10207       else if (result == PACKET_OK)
10208         {
10209           for (target_crc = 0, tmp = &rs->buf[1]; *tmp; tmp++)
10210             target_crc = target_crc * 16 + fromhex (*tmp);
10211
10212           return (host_crc == target_crc);
10213         }
10214     }
10215
10216   return simple_verify_memory (ops, data, lma, size);
10217 }
10218
10219 /* compare-sections command
10220
10221    With no arguments, compares each loadable section in the exec bfd
10222    with the same memory range on the target, and reports mismatches.
10223    Useful for verifying the image on the target against the exec file.  */
10224
10225 static void
10226 compare_sections_command (const char *args, int from_tty)
10227 {
10228   asection *s;
10229   gdb_byte *sectdata;
10230   const char *sectname;
10231   bfd_size_type size;
10232   bfd_vma lma;
10233   int matched = 0;
10234   int mismatched = 0;
10235   int res;
10236   int read_only = 0;
10237
10238   if (!exec_bfd)
10239     error (_("command cannot be used without an exec file"));
10240
10241   /* Make sure the remote is pointing at the right process.  */
10242   set_general_process ();
10243
10244   if (args != NULL && strcmp (args, "-r") == 0)
10245     {
10246       read_only = 1;
10247       args = NULL;
10248     }
10249
10250   for (s = exec_bfd->sections; s; s = s->next)
10251     {
10252       if (!(s->flags & SEC_LOAD))
10253         continue;               /* Skip non-loadable section.  */
10254
10255       if (read_only && (s->flags & SEC_READONLY) == 0)
10256         continue;               /* Skip writeable sections */
10257
10258       size = bfd_get_section_size (s);
10259       if (size == 0)
10260         continue;               /* Skip zero-length section.  */
10261
10262       sectname = bfd_get_section_name (exec_bfd, s);
10263       if (args && strcmp (args, sectname) != 0)
10264         continue;               /* Not the section selected by user.  */
10265
10266       matched = 1;              /* Do this section.  */
10267       lma = s->lma;
10268
10269       gdb::byte_vector sectdata (size);
10270       bfd_get_section_contents (exec_bfd, s, sectdata.data (), 0, size);
10271
10272       res = target_verify_memory (sectdata.data (), lma, size);
10273
10274       if (res == -1)
10275         error (_("target memory fault, section %s, range %s -- %s"), sectname,
10276                paddress (target_gdbarch (), lma),
10277                paddress (target_gdbarch (), lma + size));
10278
10279       printf_filtered ("Section %s, range %s -- %s: ", sectname,
10280                        paddress (target_gdbarch (), lma),
10281                        paddress (target_gdbarch (), lma + size));
10282       if (res)
10283         printf_filtered ("matched.\n");
10284       else
10285         {
10286           printf_filtered ("MIS-MATCHED!\n");
10287           mismatched++;
10288         }
10289     }
10290   if (mismatched > 0)
10291     warning (_("One or more sections of the target image does not match\n\
10292 the loaded file\n"));
10293   if (args && !matched)
10294     printf_filtered (_("No loaded section named '%s'.\n"), args);
10295 }
10296
10297 /* Write LEN bytes from WRITEBUF into OBJECT_NAME/ANNEX at OFFSET
10298    into remote target.  The number of bytes written to the remote
10299    target is returned, or -1 for error.  */
10300
10301 static enum target_xfer_status
10302 remote_write_qxfer (struct target_ops *ops, const char *object_name,
10303                     const char *annex, const gdb_byte *writebuf, 
10304                     ULONGEST offset, LONGEST len, ULONGEST *xfered_len,
10305                     struct packet_config *packet)
10306 {
10307   int i, buf_len;
10308   ULONGEST n;
10309   struct remote_state *rs = get_remote_state ();
10310   int max_size = get_memory_write_packet_size (); 
10311
10312   if (packet->support == PACKET_DISABLE)
10313     return TARGET_XFER_E_IO;
10314
10315   /* Insert header.  */
10316   i = snprintf (rs->buf, max_size, 
10317                 "qXfer:%s:write:%s:%s:",
10318                 object_name, annex ? annex : "",
10319                 phex_nz (offset, sizeof offset));
10320   max_size -= (i + 1);
10321
10322   /* Escape as much data as fits into rs->buf.  */
10323   buf_len = remote_escape_output 
10324     (writebuf, len, 1, (gdb_byte *) rs->buf + i, &max_size, max_size);
10325
10326   if (putpkt_binary (rs->buf, i + buf_len) < 0
10327       || getpkt_sane (&rs->buf, &rs->buf_size, 0) < 0
10328       || packet_ok (rs->buf, packet) != PACKET_OK)
10329     return TARGET_XFER_E_IO;
10330
10331   unpack_varlen_hex (rs->buf, &n);
10332
10333   *xfered_len = n;
10334   return (*xfered_len != 0) ? TARGET_XFER_OK : TARGET_XFER_EOF;
10335 }
10336
10337 /* Read OBJECT_NAME/ANNEX from the remote target using a qXfer packet.
10338    Data at OFFSET, of up to LEN bytes, is read into READBUF; the
10339    number of bytes read is returned, or 0 for EOF, or -1 for error.
10340    The number of bytes read may be less than LEN without indicating an
10341    EOF.  PACKET is checked and updated to indicate whether the remote
10342    target supports this object.  */
10343
10344 static enum target_xfer_status
10345 remote_read_qxfer (struct target_ops *ops, const char *object_name,
10346                    const char *annex,
10347                    gdb_byte *readbuf, ULONGEST offset, LONGEST len,
10348                    ULONGEST *xfered_len,
10349                    struct packet_config *packet)
10350 {
10351   struct remote_state *rs = get_remote_state ();
10352   LONGEST i, n, packet_len;
10353
10354   if (packet->support == PACKET_DISABLE)
10355     return TARGET_XFER_E_IO;
10356
10357   /* Check whether we've cached an end-of-object packet that matches
10358      this request.  */
10359   if (rs->finished_object)
10360     {
10361       if (strcmp (object_name, rs->finished_object) == 0
10362           && strcmp (annex ? annex : "", rs->finished_annex) == 0
10363           && offset == rs->finished_offset)
10364         return TARGET_XFER_EOF;
10365
10366
10367       /* Otherwise, we're now reading something different.  Discard
10368          the cache.  */
10369       xfree (rs->finished_object);
10370       xfree (rs->finished_annex);
10371       rs->finished_object = NULL;
10372       rs->finished_annex = NULL;
10373     }
10374
10375   /* Request only enough to fit in a single packet.  The actual data
10376      may not, since we don't know how much of it will need to be escaped;
10377      the target is free to respond with slightly less data.  We subtract
10378      five to account for the response type and the protocol frame.  */
10379   n = std::min<LONGEST> (get_remote_packet_size () - 5, len);
10380   snprintf (rs->buf, get_remote_packet_size () - 4, "qXfer:%s:read:%s:%s,%s",
10381             object_name, annex ? annex : "",
10382             phex_nz (offset, sizeof offset),
10383             phex_nz (n, sizeof n));
10384   i = putpkt (rs->buf);
10385   if (i < 0)
10386     return TARGET_XFER_E_IO;
10387
10388   rs->buf[0] = '\0';
10389   packet_len = getpkt_sane (&rs->buf, &rs->buf_size, 0);
10390   if (packet_len < 0 || packet_ok (rs->buf, packet) != PACKET_OK)
10391     return TARGET_XFER_E_IO;
10392
10393   if (rs->buf[0] != 'l' && rs->buf[0] != 'm')
10394     error (_("Unknown remote qXfer reply: %s"), rs->buf);
10395
10396   /* 'm' means there is (or at least might be) more data after this
10397      batch.  That does not make sense unless there's at least one byte
10398      of data in this reply.  */
10399   if (rs->buf[0] == 'm' && packet_len == 1)
10400     error (_("Remote qXfer reply contained no data."));
10401
10402   /* Got some data.  */
10403   i = remote_unescape_input ((gdb_byte *) rs->buf + 1,
10404                              packet_len - 1, readbuf, n);
10405
10406   /* 'l' is an EOF marker, possibly including a final block of data,
10407      or possibly empty.  If we have the final block of a non-empty
10408      object, record this fact to bypass a subsequent partial read.  */
10409   if (rs->buf[0] == 'l' && offset + i > 0)
10410     {
10411       rs->finished_object = xstrdup (object_name);
10412       rs->finished_annex = xstrdup (annex ? annex : "");
10413       rs->finished_offset = offset + i;
10414     }
10415
10416   if (i == 0)
10417     return TARGET_XFER_EOF;
10418   else
10419     {
10420       *xfered_len = i;
10421       return TARGET_XFER_OK;
10422     }
10423 }
10424
10425 static enum target_xfer_status
10426 remote_xfer_partial (struct target_ops *ops, enum target_object object,
10427                      const char *annex, gdb_byte *readbuf,
10428                      const gdb_byte *writebuf, ULONGEST offset, ULONGEST len,
10429                      ULONGEST *xfered_len)
10430 {
10431   struct remote_state *rs;
10432   int i;
10433   char *p2;
10434   char query_type;
10435   int unit_size = gdbarch_addressable_memory_unit_size (target_gdbarch ());
10436
10437   set_remote_traceframe ();
10438   set_general_thread (inferior_ptid);
10439
10440   rs = get_remote_state ();
10441
10442   /* Handle memory using the standard memory routines.  */
10443   if (object == TARGET_OBJECT_MEMORY)
10444     {
10445       /* If the remote target is connected but not running, we should
10446          pass this request down to a lower stratum (e.g. the executable
10447          file).  */
10448       if (!target_has_execution)
10449         return TARGET_XFER_EOF;
10450
10451       if (writebuf != NULL)
10452         return remote_write_bytes (offset, writebuf, len, unit_size,
10453                                    xfered_len);
10454       else
10455         return remote_read_bytes (ops, offset, readbuf, len, unit_size,
10456                                   xfered_len);
10457     }
10458
10459   /* Handle SPU memory using qxfer packets.  */
10460   if (object == TARGET_OBJECT_SPU)
10461     {
10462       if (readbuf)
10463         return remote_read_qxfer (ops, "spu", annex, readbuf, offset, len,
10464                                   xfered_len, &remote_protocol_packets
10465                                   [PACKET_qXfer_spu_read]);
10466       else
10467         return remote_write_qxfer (ops, "spu", annex, writebuf, offset, len,
10468                                    xfered_len, &remote_protocol_packets
10469                                    [PACKET_qXfer_spu_write]);
10470     }
10471
10472   /* Handle extra signal info using qxfer packets.  */
10473   if (object == TARGET_OBJECT_SIGNAL_INFO)
10474     {
10475       if (readbuf)
10476         return remote_read_qxfer (ops, "siginfo", annex, readbuf, offset, len,
10477                                   xfered_len, &remote_protocol_packets
10478                                   [PACKET_qXfer_siginfo_read]);
10479       else
10480         return remote_write_qxfer (ops, "siginfo", annex,
10481                                    writebuf, offset, len, xfered_len,
10482                                    &remote_protocol_packets
10483                                    [PACKET_qXfer_siginfo_write]);
10484     }
10485
10486   if (object == TARGET_OBJECT_STATIC_TRACE_DATA)
10487     {
10488       if (readbuf)
10489         return remote_read_qxfer (ops, "statictrace", annex,
10490                                   readbuf, offset, len, xfered_len,
10491                                   &remote_protocol_packets
10492                                   [PACKET_qXfer_statictrace_read]);
10493       else
10494         return TARGET_XFER_E_IO;
10495     }
10496
10497   /* Only handle flash writes.  */
10498   if (writebuf != NULL)
10499     {
10500       switch (object)
10501         {
10502         case TARGET_OBJECT_FLASH:
10503           return remote_flash_write (ops, offset, len, xfered_len,
10504                                      writebuf);
10505
10506         default:
10507           return TARGET_XFER_E_IO;
10508         }
10509     }
10510
10511   /* Map pre-existing objects onto letters.  DO NOT do this for new
10512      objects!!!  Instead specify new query packets.  */
10513   switch (object)
10514     {
10515     case TARGET_OBJECT_AVR:
10516       query_type = 'R';
10517       break;
10518
10519     case TARGET_OBJECT_AUXV:
10520       gdb_assert (annex == NULL);
10521       return remote_read_qxfer (ops, "auxv", annex, readbuf, offset, len,
10522                                 xfered_len,
10523                                 &remote_protocol_packets[PACKET_qXfer_auxv]);
10524
10525     case TARGET_OBJECT_AVAILABLE_FEATURES:
10526       return remote_read_qxfer
10527         (ops, "features", annex, readbuf, offset, len, xfered_len,
10528          &remote_protocol_packets[PACKET_qXfer_features]);
10529
10530     case TARGET_OBJECT_LIBRARIES:
10531       return remote_read_qxfer
10532         (ops, "libraries", annex, readbuf, offset, len, xfered_len,
10533          &remote_protocol_packets[PACKET_qXfer_libraries]);
10534
10535     case TARGET_OBJECT_LIBRARIES_SVR4:
10536       return remote_read_qxfer
10537         (ops, "libraries-svr4", annex, readbuf, offset, len, xfered_len,
10538          &remote_protocol_packets[PACKET_qXfer_libraries_svr4]);
10539
10540     case TARGET_OBJECT_MEMORY_MAP:
10541       gdb_assert (annex == NULL);
10542       return remote_read_qxfer (ops, "memory-map", annex, readbuf, offset, len,
10543                                  xfered_len,
10544                                 &remote_protocol_packets[PACKET_qXfer_memory_map]);
10545
10546     case TARGET_OBJECT_OSDATA:
10547       /* Should only get here if we're connected.  */
10548       gdb_assert (rs->remote_desc);
10549       return remote_read_qxfer
10550         (ops, "osdata", annex, readbuf, offset, len, xfered_len,
10551         &remote_protocol_packets[PACKET_qXfer_osdata]);
10552
10553     case TARGET_OBJECT_THREADS:
10554       gdb_assert (annex == NULL);
10555       return remote_read_qxfer (ops, "threads", annex, readbuf, offset, len,
10556                                 xfered_len,
10557                                 &remote_protocol_packets[PACKET_qXfer_threads]);
10558
10559     case TARGET_OBJECT_TRACEFRAME_INFO:
10560       gdb_assert (annex == NULL);
10561       return remote_read_qxfer
10562         (ops, "traceframe-info", annex, readbuf, offset, len, xfered_len,
10563          &remote_protocol_packets[PACKET_qXfer_traceframe_info]);
10564
10565     case TARGET_OBJECT_FDPIC:
10566       return remote_read_qxfer (ops, "fdpic", annex, readbuf, offset, len,
10567                                 xfered_len,
10568                                 &remote_protocol_packets[PACKET_qXfer_fdpic]);
10569
10570     case TARGET_OBJECT_OPENVMS_UIB:
10571       return remote_read_qxfer (ops, "uib", annex, readbuf, offset, len,
10572                                 xfered_len,
10573                                 &remote_protocol_packets[PACKET_qXfer_uib]);
10574
10575     case TARGET_OBJECT_BTRACE:
10576       return remote_read_qxfer (ops, "btrace", annex, readbuf, offset, len,
10577                                 xfered_len,
10578         &remote_protocol_packets[PACKET_qXfer_btrace]);
10579
10580     case TARGET_OBJECT_BTRACE_CONF:
10581       return remote_read_qxfer (ops, "btrace-conf", annex, readbuf, offset,
10582                                 len, xfered_len,
10583         &remote_protocol_packets[PACKET_qXfer_btrace_conf]);
10584
10585     case TARGET_OBJECT_EXEC_FILE:
10586       return remote_read_qxfer (ops, "exec-file", annex, readbuf, offset,
10587                                 len, xfered_len,
10588         &remote_protocol_packets[PACKET_qXfer_exec_file]);
10589
10590     default:
10591       return TARGET_XFER_E_IO;
10592     }
10593
10594   /* Minimum outbuf size is get_remote_packet_size ().  If LEN is not
10595      large enough let the caller deal with it.  */
10596   if (len < get_remote_packet_size ())
10597     return TARGET_XFER_E_IO;
10598   len = get_remote_packet_size ();
10599
10600   /* Except for querying the minimum buffer size, target must be open.  */
10601   if (!rs->remote_desc)
10602     error (_("remote query is only available after target open"));
10603
10604   gdb_assert (annex != NULL);
10605   gdb_assert (readbuf != NULL);
10606
10607   p2 = rs->buf;
10608   *p2++ = 'q';
10609   *p2++ = query_type;
10610
10611   /* We used one buffer char for the remote protocol q command and
10612      another for the query type.  As the remote protocol encapsulation
10613      uses 4 chars plus one extra in case we are debugging
10614      (remote_debug), we have PBUFZIZ - 7 left to pack the query
10615      string.  */
10616   i = 0;
10617   while (annex[i] && (i < (get_remote_packet_size () - 8)))
10618     {
10619       /* Bad caller may have sent forbidden characters.  */
10620       gdb_assert (isprint (annex[i]) && annex[i] != '$' && annex[i] != '#');
10621       *p2++ = annex[i];
10622       i++;
10623     }
10624   *p2 = '\0';
10625   gdb_assert (annex[i] == '\0');
10626
10627   i = putpkt (rs->buf);
10628   if (i < 0)
10629     return TARGET_XFER_E_IO;
10630
10631   getpkt (&rs->buf, &rs->buf_size, 0);
10632   strcpy ((char *) readbuf, rs->buf);
10633
10634   *xfered_len = strlen ((char *) readbuf);
10635   return (*xfered_len != 0) ? TARGET_XFER_OK : TARGET_XFER_EOF;
10636 }
10637
10638 /* Implementation of to_get_memory_xfer_limit.  */
10639
10640 static ULONGEST
10641 remote_get_memory_xfer_limit (struct target_ops *ops)
10642 {
10643   return get_memory_write_packet_size ();
10644 }
10645
10646 static int
10647 remote_search_memory (struct target_ops* ops,
10648                       CORE_ADDR start_addr, ULONGEST search_space_len,
10649                       const gdb_byte *pattern, ULONGEST pattern_len,
10650                       CORE_ADDR *found_addrp)
10651 {
10652   int addr_size = gdbarch_addr_bit (target_gdbarch ()) / 8;
10653   struct remote_state *rs = get_remote_state ();
10654   int max_size = get_memory_write_packet_size ();
10655   struct packet_config *packet =
10656     &remote_protocol_packets[PACKET_qSearch_memory];
10657   /* Number of packet bytes used to encode the pattern;
10658      this could be more than PATTERN_LEN due to escape characters.  */
10659   int escaped_pattern_len;
10660   /* Amount of pattern that was encodable in the packet.  */
10661   int used_pattern_len;
10662   int i;
10663   int found;
10664   ULONGEST found_addr;
10665
10666   /* Don't go to the target if we don't have to.
10667      This is done before checking packet->support to avoid the possibility that
10668      a success for this edge case means the facility works in general.  */
10669   if (pattern_len > search_space_len)
10670     return 0;
10671   if (pattern_len == 0)
10672     {
10673       *found_addrp = start_addr;
10674       return 1;
10675     }
10676
10677   /* If we already know the packet isn't supported, fall back to the simple
10678      way of searching memory.  */
10679
10680   if (packet_config_support (packet) == PACKET_DISABLE)
10681     {
10682       /* Target doesn't provided special support, fall back and use the
10683          standard support (copy memory and do the search here).  */
10684       return simple_search_memory (ops, start_addr, search_space_len,
10685                                    pattern, pattern_len, found_addrp);
10686     }
10687
10688   /* Make sure the remote is pointing at the right process.  */
10689   set_general_process ();
10690
10691   /* Insert header.  */
10692   i = snprintf (rs->buf, max_size, 
10693                 "qSearch:memory:%s;%s;",
10694                 phex_nz (start_addr, addr_size),
10695                 phex_nz (search_space_len, sizeof (search_space_len)));
10696   max_size -= (i + 1);
10697
10698   /* Escape as much data as fits into rs->buf.  */
10699   escaped_pattern_len =
10700     remote_escape_output (pattern, pattern_len, 1, (gdb_byte *) rs->buf + i,
10701                           &used_pattern_len, max_size);
10702
10703   /* Bail if the pattern is too large.  */
10704   if (used_pattern_len != pattern_len)
10705     error (_("Pattern is too large to transmit to remote target."));
10706
10707   if (putpkt_binary (rs->buf, i + escaped_pattern_len) < 0
10708       || getpkt_sane (&rs->buf, &rs->buf_size, 0) < 0
10709       || packet_ok (rs->buf, packet) != PACKET_OK)
10710     {
10711       /* The request may not have worked because the command is not
10712          supported.  If so, fall back to the simple way.  */
10713       if (packet->support == PACKET_DISABLE)
10714         {
10715           return simple_search_memory (ops, start_addr, search_space_len,
10716                                        pattern, pattern_len, found_addrp);
10717         }
10718       return -1;
10719     }
10720
10721   if (rs->buf[0] == '0')
10722     found = 0;
10723   else if (rs->buf[0] == '1')
10724     {
10725       found = 1;
10726       if (rs->buf[1] != ',')
10727         error (_("Unknown qSearch:memory reply: %s"), rs->buf);
10728       unpack_varlen_hex (rs->buf + 2, &found_addr);
10729       *found_addrp = found_addr;
10730     }
10731   else
10732     error (_("Unknown qSearch:memory reply: %s"), rs->buf);
10733
10734   return found;
10735 }
10736
10737 static void
10738 remote_rcmd (struct target_ops *self, const char *command,
10739              struct ui_file *outbuf)
10740 {
10741   struct remote_state *rs = get_remote_state ();
10742   char *p = rs->buf;
10743
10744   if (!rs->remote_desc)
10745     error (_("remote rcmd is only available after target open"));
10746
10747   /* Send a NULL command across as an empty command.  */
10748   if (command == NULL)
10749     command = "";
10750
10751   /* The query prefix.  */
10752   strcpy (rs->buf, "qRcmd,");
10753   p = strchr (rs->buf, '\0');
10754
10755   if ((strlen (rs->buf) + strlen (command) * 2 + 8/*misc*/)
10756       > get_remote_packet_size ())
10757     error (_("\"monitor\" command ``%s'' is too long."), command);
10758
10759   /* Encode the actual command.  */
10760   bin2hex ((const gdb_byte *) command, p, strlen (command));
10761
10762   if (putpkt (rs->buf) < 0)
10763     error (_("Communication problem with target."));
10764
10765   /* get/display the response */
10766   while (1)
10767     {
10768       char *buf;
10769
10770       /* XXX - see also remote_get_noisy_reply().  */
10771       QUIT;                     /* Allow user to bail out with ^C.  */
10772       rs->buf[0] = '\0';
10773       if (getpkt_sane (&rs->buf, &rs->buf_size, 0) == -1)
10774         { 
10775           /* Timeout.  Continue to (try to) read responses.
10776              This is better than stopping with an error, assuming the stub
10777              is still executing the (long) monitor command.
10778              If needed, the user can interrupt gdb using C-c, obtaining
10779              an effect similar to stop on timeout.  */
10780           continue;
10781         }
10782       buf = rs->buf;
10783       if (buf[0] == '\0')
10784         error (_("Target does not support this command."));
10785       if (buf[0] == 'O' && buf[1] != 'K')
10786         {
10787           remote_console_output (buf + 1); /* 'O' message from stub.  */
10788           continue;
10789         }
10790       if (strcmp (buf, "OK") == 0)
10791         break;
10792       if (strlen (buf) == 3 && buf[0] == 'E'
10793           && isdigit (buf[1]) && isdigit (buf[2]))
10794         {
10795           error (_("Protocol error with Rcmd"));
10796         }
10797       for (p = buf; p[0] != '\0' && p[1] != '\0'; p += 2)
10798         {
10799           char c = (fromhex (p[0]) << 4) + fromhex (p[1]);
10800
10801           fputc_unfiltered (c, outbuf);
10802         }
10803       break;
10804     }
10805 }
10806
10807 static std::vector<mem_region>
10808 remote_memory_map (struct target_ops *ops)
10809 {
10810   std::vector<mem_region> result;
10811   gdb::unique_xmalloc_ptr<char> text
10812     = target_read_stralloc (&current_target, TARGET_OBJECT_MEMORY_MAP, NULL);
10813
10814   if (text)
10815     result = parse_memory_map (text.get ());
10816
10817   return result;
10818 }
10819
10820 static void
10821 packet_command (const char *args, int from_tty)
10822 {
10823   struct remote_state *rs = get_remote_state ();
10824
10825   if (!rs->remote_desc)
10826     error (_("command can only be used with remote target"));
10827
10828   if (!args)
10829     error (_("remote-packet command requires packet text as argument"));
10830
10831   puts_filtered ("sending: ");
10832   print_packet (args);
10833   puts_filtered ("\n");
10834   putpkt (args);
10835
10836   getpkt (&rs->buf, &rs->buf_size, 0);
10837   puts_filtered ("received: ");
10838   print_packet (rs->buf);
10839   puts_filtered ("\n");
10840 }
10841
10842 #if 0
10843 /* --------- UNIT_TEST for THREAD oriented PACKETS ------------------- */
10844
10845 static void display_thread_info (struct gdb_ext_thread_info *info);
10846
10847 static void threadset_test_cmd (char *cmd, int tty);
10848
10849 static void threadalive_test (char *cmd, int tty);
10850
10851 static void threadlist_test_cmd (char *cmd, int tty);
10852
10853 int get_and_display_threadinfo (threadref *ref);
10854
10855 static void threadinfo_test_cmd (char *cmd, int tty);
10856
10857 static int thread_display_step (threadref *ref, void *context);
10858
10859 static void threadlist_update_test_cmd (char *cmd, int tty);
10860
10861 static void init_remote_threadtests (void);
10862
10863 #define SAMPLE_THREAD  0x05060708       /* Truncated 64 bit threadid.  */
10864
10865 static void
10866 threadset_test_cmd (const char *cmd, int tty)
10867 {
10868   int sample_thread = SAMPLE_THREAD;
10869
10870   printf_filtered (_("Remote threadset test\n"));
10871   set_general_thread (sample_thread);
10872 }
10873
10874
10875 static void
10876 threadalive_test (const char *cmd, int tty)
10877 {
10878   int sample_thread = SAMPLE_THREAD;
10879   int pid = ptid_get_pid (inferior_ptid);
10880   ptid_t ptid = ptid_build (pid, sample_thread, 0);
10881
10882   if (remote_thread_alive (ptid))
10883     printf_filtered ("PASS: Thread alive test\n");
10884   else
10885     printf_filtered ("FAIL: Thread alive test\n");
10886 }
10887
10888 void output_threadid (char *title, threadref *ref);
10889
10890 void
10891 output_threadid (char *title, threadref *ref)
10892 {
10893   char hexid[20];
10894
10895   pack_threadid (&hexid[0], ref);       /* Convert threead id into hex.  */
10896   hexid[16] = 0;
10897   printf_filtered ("%s  %s\n", title, (&hexid[0]));
10898 }
10899
10900 static void
10901 threadlist_test_cmd (const char *cmd, int tty)
10902 {
10903   int startflag = 1;
10904   threadref nextthread;
10905   int done, result_count;
10906   threadref threadlist[3];
10907
10908   printf_filtered ("Remote Threadlist test\n");
10909   if (!remote_get_threadlist (startflag, &nextthread, 3, &done,
10910                               &result_count, &threadlist[0]))
10911     printf_filtered ("FAIL: threadlist test\n");
10912   else
10913     {
10914       threadref *scan = threadlist;
10915       threadref *limit = scan + result_count;
10916
10917       while (scan < limit)
10918         output_threadid (" thread ", scan++);
10919     }
10920 }
10921
10922 void
10923 display_thread_info (struct gdb_ext_thread_info *info)
10924 {
10925   output_threadid ("Threadid: ", &info->threadid);
10926   printf_filtered ("Name: %s\n ", info->shortname);
10927   printf_filtered ("State: %s\n", info->display);
10928   printf_filtered ("other: %s\n\n", info->more_display);
10929 }
10930
10931 int
10932 get_and_display_threadinfo (threadref *ref)
10933 {
10934   int result;
10935   int set;
10936   struct gdb_ext_thread_info threadinfo;
10937
10938   set = TAG_THREADID | TAG_EXISTS | TAG_THREADNAME
10939     | TAG_MOREDISPLAY | TAG_DISPLAY;
10940   if (0 != (result = remote_get_threadinfo (ref, set, &threadinfo)))
10941     display_thread_info (&threadinfo);
10942   return result;
10943 }
10944
10945 static void
10946 threadinfo_test_cmd (const char *cmd, int tty)
10947 {
10948   int athread = SAMPLE_THREAD;
10949   threadref thread;
10950   int set;
10951
10952   int_to_threadref (&thread, athread);
10953   printf_filtered ("Remote Threadinfo test\n");
10954   if (!get_and_display_threadinfo (&thread))
10955     printf_filtered ("FAIL cannot get thread info\n");
10956 }
10957
10958 static int
10959 thread_display_step (threadref *ref, void *context)
10960 {
10961   /* output_threadid(" threadstep ",ref); *//* simple test */
10962   return get_and_display_threadinfo (ref);
10963 }
10964
10965 static void
10966 threadlist_update_test_cmd (const char *cmd, int tty)
10967 {
10968   printf_filtered ("Remote Threadlist update test\n");
10969   remote_threadlist_iterator (thread_display_step, 0, CRAZY_MAX_THREADS);
10970 }
10971
10972 static void
10973 init_remote_threadtests (void)
10974 {
10975   add_com ("tlist", class_obscure, threadlist_test_cmd,
10976            _("Fetch and print the remote list of "
10977              "thread identifiers, one pkt only"));
10978   add_com ("tinfo", class_obscure, threadinfo_test_cmd,
10979            _("Fetch and display info about one thread"));
10980   add_com ("tset", class_obscure, threadset_test_cmd,
10981            _("Test setting to a different thread"));
10982   add_com ("tupd", class_obscure, threadlist_update_test_cmd,
10983            _("Iterate through updating all remote thread info"));
10984   add_com ("talive", class_obscure, threadalive_test,
10985            _(" Remote thread alive test "));
10986 }
10987
10988 #endif /* 0 */
10989
10990 /* Convert a thread ID to a string.  Returns the string in a static
10991    buffer.  */
10992
10993 static const char *
10994 remote_pid_to_str (struct target_ops *ops, ptid_t ptid)
10995 {
10996   static char buf[64];
10997   struct remote_state *rs = get_remote_state ();
10998
10999   if (ptid_equal (ptid, null_ptid))
11000     return normal_pid_to_str (ptid);
11001   else if (ptid_is_pid (ptid))
11002     {
11003       /* Printing an inferior target id.  */
11004
11005       /* When multi-process extensions are off, there's no way in the
11006          remote protocol to know the remote process id, if there's any
11007          at all.  There's one exception --- when we're connected with
11008          target extended-remote, and we manually attached to a process
11009          with "attach PID".  We don't record anywhere a flag that
11010          allows us to distinguish that case from the case of
11011          connecting with extended-remote and the stub already being
11012          attached to a process, and reporting yes to qAttached, hence
11013          no smart special casing here.  */
11014       if (!remote_multi_process_p (rs))
11015         {
11016           xsnprintf (buf, sizeof buf, "Remote target");
11017           return buf;
11018         }
11019
11020       return normal_pid_to_str (ptid);
11021     }
11022   else
11023     {
11024       if (ptid_equal (magic_null_ptid, ptid))
11025         xsnprintf (buf, sizeof buf, "Thread <main>");
11026       else if (remote_multi_process_p (rs))
11027         if (ptid_get_lwp (ptid) == 0)
11028           return normal_pid_to_str (ptid);
11029         else
11030           xsnprintf (buf, sizeof buf, "Thread %d.%ld",
11031                      ptid_get_pid (ptid), ptid_get_lwp (ptid));
11032       else
11033         xsnprintf (buf, sizeof buf, "Thread %ld",
11034                    ptid_get_lwp (ptid));
11035       return buf;
11036     }
11037 }
11038
11039 /* Get the address of the thread local variable in OBJFILE which is
11040    stored at OFFSET within the thread local storage for thread PTID.  */
11041
11042 static CORE_ADDR
11043 remote_get_thread_local_address (struct target_ops *ops,
11044                                  ptid_t ptid, CORE_ADDR lm, CORE_ADDR offset)
11045 {
11046   if (packet_support (PACKET_qGetTLSAddr) != PACKET_DISABLE)
11047     {
11048       struct remote_state *rs = get_remote_state ();
11049       char *p = rs->buf;
11050       char *endp = rs->buf + get_remote_packet_size ();
11051       enum packet_result result;
11052
11053       strcpy (p, "qGetTLSAddr:");
11054       p += strlen (p);
11055       p = write_ptid (p, endp, ptid);
11056       *p++ = ',';
11057       p += hexnumstr (p, offset);
11058       *p++ = ',';
11059       p += hexnumstr (p, lm);
11060       *p++ = '\0';
11061
11062       putpkt (rs->buf);
11063       getpkt (&rs->buf, &rs->buf_size, 0);
11064       result = packet_ok (rs->buf,
11065                           &remote_protocol_packets[PACKET_qGetTLSAddr]);
11066       if (result == PACKET_OK)
11067         {
11068           ULONGEST result;
11069
11070           unpack_varlen_hex (rs->buf, &result);
11071           return result;
11072         }
11073       else if (result == PACKET_UNKNOWN)
11074         throw_error (TLS_GENERIC_ERROR,
11075                      _("Remote target doesn't support qGetTLSAddr packet"));
11076       else
11077         throw_error (TLS_GENERIC_ERROR,
11078                      _("Remote target failed to process qGetTLSAddr request"));
11079     }
11080   else
11081     throw_error (TLS_GENERIC_ERROR,
11082                  _("TLS not supported or disabled on this target"));
11083   /* Not reached.  */
11084   return 0;
11085 }
11086
11087 /* Provide thread local base, i.e. Thread Information Block address.
11088    Returns 1 if ptid is found and thread_local_base is non zero.  */
11089
11090 static int
11091 remote_get_tib_address (struct target_ops *self, ptid_t ptid, CORE_ADDR *addr)
11092 {
11093   if (packet_support (PACKET_qGetTIBAddr) != PACKET_DISABLE)
11094     {
11095       struct remote_state *rs = get_remote_state ();
11096       char *p = rs->buf;
11097       char *endp = rs->buf + get_remote_packet_size ();
11098       enum packet_result result;
11099
11100       strcpy (p, "qGetTIBAddr:");
11101       p += strlen (p);
11102       p = write_ptid (p, endp, ptid);
11103       *p++ = '\0';
11104
11105       putpkt (rs->buf);
11106       getpkt (&rs->buf, &rs->buf_size, 0);
11107       result = packet_ok (rs->buf,
11108                           &remote_protocol_packets[PACKET_qGetTIBAddr]);
11109       if (result == PACKET_OK)
11110         {
11111           ULONGEST result;
11112
11113           unpack_varlen_hex (rs->buf, &result);
11114           if (addr)
11115             *addr = (CORE_ADDR) result;
11116           return 1;
11117         }
11118       else if (result == PACKET_UNKNOWN)
11119         error (_("Remote target doesn't support qGetTIBAddr packet"));
11120       else
11121         error (_("Remote target failed to process qGetTIBAddr request"));
11122     }
11123   else
11124     error (_("qGetTIBAddr not supported or disabled on this target"));
11125   /* Not reached.  */
11126   return 0;
11127 }
11128
11129 /* Support for inferring a target description based on the current
11130    architecture and the size of a 'g' packet.  While the 'g' packet
11131    can have any size (since optional registers can be left off the
11132    end), some sizes are easily recognizable given knowledge of the
11133    approximate architecture.  */
11134
11135 struct remote_g_packet_guess
11136 {
11137   int bytes;
11138   const struct target_desc *tdesc;
11139 };
11140 typedef struct remote_g_packet_guess remote_g_packet_guess_s;
11141 DEF_VEC_O(remote_g_packet_guess_s);
11142
11143 struct remote_g_packet_data
11144 {
11145   VEC(remote_g_packet_guess_s) *guesses;
11146 };
11147
11148 static struct gdbarch_data *remote_g_packet_data_handle;
11149
11150 static void *
11151 remote_g_packet_data_init (struct obstack *obstack)
11152 {
11153   return OBSTACK_ZALLOC (obstack, struct remote_g_packet_data);
11154 }
11155
11156 void
11157 register_remote_g_packet_guess (struct gdbarch *gdbarch, int bytes,
11158                                 const struct target_desc *tdesc)
11159 {
11160   struct remote_g_packet_data *data
11161     = ((struct remote_g_packet_data *)
11162        gdbarch_data (gdbarch, remote_g_packet_data_handle));
11163   struct remote_g_packet_guess new_guess, *guess;
11164   int ix;
11165
11166   gdb_assert (tdesc != NULL);
11167
11168   for (ix = 0;
11169        VEC_iterate (remote_g_packet_guess_s, data->guesses, ix, guess);
11170        ix++)
11171     if (guess->bytes == bytes)
11172       internal_error (__FILE__, __LINE__,
11173                       _("Duplicate g packet description added for size %d"),
11174                       bytes);
11175
11176   new_guess.bytes = bytes;
11177   new_guess.tdesc = tdesc;
11178   VEC_safe_push (remote_g_packet_guess_s, data->guesses, &new_guess);
11179 }
11180
11181 /* Return 1 if remote_read_description would do anything on this target
11182    and architecture, 0 otherwise.  */
11183
11184 static int
11185 remote_read_description_p (struct target_ops *target)
11186 {
11187   struct remote_g_packet_data *data
11188     = ((struct remote_g_packet_data *)
11189        gdbarch_data (target_gdbarch (), remote_g_packet_data_handle));
11190
11191   if (!VEC_empty (remote_g_packet_guess_s, data->guesses))
11192     return 1;
11193
11194   return 0;
11195 }
11196
11197 static const struct target_desc *
11198 remote_read_description (struct target_ops *target)
11199 {
11200   struct remote_g_packet_data *data
11201     = ((struct remote_g_packet_data *)
11202        gdbarch_data (target_gdbarch (), remote_g_packet_data_handle));
11203
11204   /* Do not try this during initial connection, when we do not know
11205      whether there is a running but stopped thread.  */
11206   if (!target_has_execution || ptid_equal (inferior_ptid, null_ptid))
11207     return target->beneath->to_read_description (target->beneath);
11208
11209   if (!VEC_empty (remote_g_packet_guess_s, data->guesses))
11210     {
11211       struct remote_g_packet_guess *guess;
11212       int ix;
11213       int bytes = send_g_packet ();
11214
11215       for (ix = 0;
11216            VEC_iterate (remote_g_packet_guess_s, data->guesses, ix, guess);
11217            ix++)
11218         if (guess->bytes == bytes)
11219           return guess->tdesc;
11220
11221       /* We discard the g packet.  A minor optimization would be to
11222          hold on to it, and fill the register cache once we have selected
11223          an architecture, but it's too tricky to do safely.  */
11224     }
11225
11226   return target->beneath->to_read_description (target->beneath);
11227 }
11228
11229 /* Remote file transfer support.  This is host-initiated I/O, not
11230    target-initiated; for target-initiated, see remote-fileio.c.  */
11231
11232 /* If *LEFT is at least the length of STRING, copy STRING to
11233    *BUFFER, update *BUFFER to point to the new end of the buffer, and
11234    decrease *LEFT.  Otherwise raise an error.  */
11235
11236 static void
11237 remote_buffer_add_string (char **buffer, int *left, const char *string)
11238 {
11239   int len = strlen (string);
11240
11241   if (len > *left)
11242     error (_("Packet too long for target."));
11243
11244   memcpy (*buffer, string, len);
11245   *buffer += len;
11246   *left -= len;
11247
11248   /* NUL-terminate the buffer as a convenience, if there is
11249      room.  */
11250   if (*left)
11251     **buffer = '\0';
11252 }
11253
11254 /* If *LEFT is large enough, hex encode LEN bytes from BYTES into
11255    *BUFFER, update *BUFFER to point to the new end of the buffer, and
11256    decrease *LEFT.  Otherwise raise an error.  */
11257
11258 static void
11259 remote_buffer_add_bytes (char **buffer, int *left, const gdb_byte *bytes,
11260                          int len)
11261 {
11262   if (2 * len > *left)
11263     error (_("Packet too long for target."));
11264
11265   bin2hex (bytes, *buffer, len);
11266   *buffer += 2 * len;
11267   *left -= 2 * len;
11268
11269   /* NUL-terminate the buffer as a convenience, if there is
11270      room.  */
11271   if (*left)
11272     **buffer = '\0';
11273 }
11274
11275 /* If *LEFT is large enough, convert VALUE to hex and add it to
11276    *BUFFER, update *BUFFER to point to the new end of the buffer, and
11277    decrease *LEFT.  Otherwise raise an error.  */
11278
11279 static void
11280 remote_buffer_add_int (char **buffer, int *left, ULONGEST value)
11281 {
11282   int len = hexnumlen (value);
11283
11284   if (len > *left)
11285     error (_("Packet too long for target."));
11286
11287   hexnumstr (*buffer, value);
11288   *buffer += len;
11289   *left -= len;
11290
11291   /* NUL-terminate the buffer as a convenience, if there is
11292      room.  */
11293   if (*left)
11294     **buffer = '\0';
11295 }
11296
11297 /* Parse an I/O result packet from BUFFER.  Set RETCODE to the return
11298    value, *REMOTE_ERRNO to the remote error number or zero if none
11299    was included, and *ATTACHMENT to point to the start of the annex
11300    if any.  The length of the packet isn't needed here; there may
11301    be NUL bytes in BUFFER, but they will be after *ATTACHMENT.
11302
11303    Return 0 if the packet could be parsed, -1 if it could not.  If
11304    -1 is returned, the other variables may not be initialized.  */
11305
11306 static int
11307 remote_hostio_parse_result (char *buffer, int *retcode,
11308                             int *remote_errno, char **attachment)
11309 {
11310   char *p, *p2;
11311
11312   *remote_errno = 0;
11313   *attachment = NULL;
11314
11315   if (buffer[0] != 'F')
11316     return -1;
11317
11318   errno = 0;
11319   *retcode = strtol (&buffer[1], &p, 16);
11320   if (errno != 0 || p == &buffer[1])
11321     return -1;
11322
11323   /* Check for ",errno".  */
11324   if (*p == ',')
11325     {
11326       errno = 0;
11327       *remote_errno = strtol (p + 1, &p2, 16);
11328       if (errno != 0 || p + 1 == p2)
11329         return -1;
11330       p = p2;
11331     }
11332
11333   /* Check for ";attachment".  If there is no attachment, the
11334      packet should end here.  */
11335   if (*p == ';')
11336     {
11337       *attachment = p + 1;
11338       return 0;
11339     }
11340   else if (*p == '\0')
11341     return 0;
11342   else
11343     return -1;
11344 }
11345
11346 /* Send a prepared I/O packet to the target and read its response.
11347    The prepared packet is in the global RS->BUF before this function
11348    is called, and the answer is there when we return.
11349
11350    COMMAND_BYTES is the length of the request to send, which may include
11351    binary data.  WHICH_PACKET is the packet configuration to check
11352    before attempting a packet.  If an error occurs, *REMOTE_ERRNO
11353    is set to the error number and -1 is returned.  Otherwise the value
11354    returned by the function is returned.
11355
11356    ATTACHMENT and ATTACHMENT_LEN should be non-NULL if and only if an
11357    attachment is expected; an error will be reported if there's a
11358    mismatch.  If one is found, *ATTACHMENT will be set to point into
11359    the packet buffer and *ATTACHMENT_LEN will be set to the
11360    attachment's length.  */
11361
11362 static int
11363 remote_hostio_send_command (int command_bytes, int which_packet,
11364                             int *remote_errno, char **attachment,
11365                             int *attachment_len)
11366 {
11367   struct remote_state *rs = get_remote_state ();
11368   int ret, bytes_read;
11369   char *attachment_tmp;
11370
11371   if (!rs->remote_desc
11372       || packet_support (which_packet) == PACKET_DISABLE)
11373     {
11374       *remote_errno = FILEIO_ENOSYS;
11375       return -1;
11376     }
11377
11378   putpkt_binary (rs->buf, command_bytes);
11379   bytes_read = getpkt_sane (&rs->buf, &rs->buf_size, 0);
11380
11381   /* If it timed out, something is wrong.  Don't try to parse the
11382      buffer.  */
11383   if (bytes_read < 0)
11384     {
11385       *remote_errno = FILEIO_EINVAL;
11386       return -1;
11387     }
11388
11389   switch (packet_ok (rs->buf, &remote_protocol_packets[which_packet]))
11390     {
11391     case PACKET_ERROR:
11392       *remote_errno = FILEIO_EINVAL;
11393       return -1;
11394     case PACKET_UNKNOWN:
11395       *remote_errno = FILEIO_ENOSYS;
11396       return -1;
11397     case PACKET_OK:
11398       break;
11399     }
11400
11401   if (remote_hostio_parse_result (rs->buf, &ret, remote_errno,
11402                                   &attachment_tmp))
11403     {
11404       *remote_errno = FILEIO_EINVAL;
11405       return -1;
11406     }
11407
11408   /* Make sure we saw an attachment if and only if we expected one.  */
11409   if ((attachment_tmp == NULL && attachment != NULL)
11410       || (attachment_tmp != NULL && attachment == NULL))
11411     {
11412       *remote_errno = FILEIO_EINVAL;
11413       return -1;
11414     }
11415
11416   /* If an attachment was found, it must point into the packet buffer;
11417      work out how many bytes there were.  */
11418   if (attachment_tmp != NULL)
11419     {
11420       *attachment = attachment_tmp;
11421       *attachment_len = bytes_read - (*attachment - rs->buf);
11422     }
11423
11424   return ret;
11425 }
11426
11427 /* Invalidate the readahead cache.  */
11428
11429 static void
11430 readahead_cache_invalidate (void)
11431 {
11432   struct remote_state *rs = get_remote_state ();
11433
11434   rs->readahead_cache.fd = -1;
11435 }
11436
11437 /* Invalidate the readahead cache if it is holding data for FD.  */
11438
11439 static void
11440 readahead_cache_invalidate_fd (int fd)
11441 {
11442   struct remote_state *rs = get_remote_state ();
11443
11444   if (rs->readahead_cache.fd == fd)
11445     rs->readahead_cache.fd = -1;
11446 }
11447
11448 /* Set the filesystem remote_hostio functions that take FILENAME
11449    arguments will use.  Return 0 on success, or -1 if an error
11450    occurs (and set *REMOTE_ERRNO).  */
11451
11452 static int
11453 remote_hostio_set_filesystem (struct inferior *inf, int *remote_errno)
11454 {
11455   struct remote_state *rs = get_remote_state ();
11456   int required_pid = (inf == NULL || inf->fake_pid_p) ? 0 : inf->pid;
11457   char *p = rs->buf;
11458   int left = get_remote_packet_size () - 1;
11459   char arg[9];
11460   int ret;
11461
11462   if (packet_support (PACKET_vFile_setfs) == PACKET_DISABLE)
11463     return 0;
11464
11465   if (rs->fs_pid != -1 && required_pid == rs->fs_pid)
11466     return 0;
11467
11468   remote_buffer_add_string (&p, &left, "vFile:setfs:");
11469
11470   xsnprintf (arg, sizeof (arg), "%x", required_pid);
11471   remote_buffer_add_string (&p, &left, arg);
11472
11473   ret = remote_hostio_send_command (p - rs->buf, PACKET_vFile_setfs,
11474                                     remote_errno, NULL, NULL);
11475
11476   if (packet_support (PACKET_vFile_setfs) == PACKET_DISABLE)
11477     return 0;
11478
11479   if (ret == 0)
11480     rs->fs_pid = required_pid;
11481
11482   return ret;
11483 }
11484
11485 /* Implementation of to_fileio_open.  */
11486
11487 static int
11488 remote_hostio_open (struct target_ops *self,
11489                     struct inferior *inf, const char *filename,
11490                     int flags, int mode, int warn_if_slow,
11491                     int *remote_errno)
11492 {
11493   struct remote_state *rs = get_remote_state ();
11494   char *p = rs->buf;
11495   int left = get_remote_packet_size () - 1;
11496
11497   if (warn_if_slow)
11498     {
11499       static int warning_issued = 0;
11500
11501       printf_unfiltered (_("Reading %s from remote target...\n"),
11502                          filename);
11503
11504       if (!warning_issued)
11505         {
11506           warning (_("File transfers from remote targets can be slow."
11507                      " Use \"set sysroot\" to access files locally"
11508                      " instead."));
11509           warning_issued = 1;
11510         }
11511     }
11512
11513   if (remote_hostio_set_filesystem (inf, remote_errno) != 0)
11514     return -1;
11515
11516   remote_buffer_add_string (&p, &left, "vFile:open:");
11517
11518   remote_buffer_add_bytes (&p, &left, (const gdb_byte *) filename,
11519                            strlen (filename));
11520   remote_buffer_add_string (&p, &left, ",");
11521
11522   remote_buffer_add_int (&p, &left, flags);
11523   remote_buffer_add_string (&p, &left, ",");
11524
11525   remote_buffer_add_int (&p, &left, mode);
11526
11527   return remote_hostio_send_command (p - rs->buf, PACKET_vFile_open,
11528                                      remote_errno, NULL, NULL);
11529 }
11530
11531 /* Implementation of to_fileio_pwrite.  */
11532
11533 static int
11534 remote_hostio_pwrite (struct target_ops *self,
11535                       int fd, const gdb_byte *write_buf, int len,
11536                       ULONGEST offset, int *remote_errno)
11537 {
11538   struct remote_state *rs = get_remote_state ();
11539   char *p = rs->buf;
11540   int left = get_remote_packet_size ();
11541   int out_len;
11542
11543   readahead_cache_invalidate_fd (fd);
11544
11545   remote_buffer_add_string (&p, &left, "vFile:pwrite:");
11546
11547   remote_buffer_add_int (&p, &left, fd);
11548   remote_buffer_add_string (&p, &left, ",");
11549
11550   remote_buffer_add_int (&p, &left, offset);
11551   remote_buffer_add_string (&p, &left, ",");
11552
11553   p += remote_escape_output (write_buf, len, 1, (gdb_byte *) p, &out_len,
11554                              get_remote_packet_size () - (p - rs->buf));
11555
11556   return remote_hostio_send_command (p - rs->buf, PACKET_vFile_pwrite,
11557                                      remote_errno, NULL, NULL);
11558 }
11559
11560 /* Helper for the implementation of to_fileio_pread.  Read the file
11561    from the remote side with vFile:pread.  */
11562
11563 static int
11564 remote_hostio_pread_vFile (struct target_ops *self,
11565                            int fd, gdb_byte *read_buf, int len,
11566                            ULONGEST offset, int *remote_errno)
11567 {
11568   struct remote_state *rs = get_remote_state ();
11569   char *p = rs->buf;
11570   char *attachment;
11571   int left = get_remote_packet_size ();
11572   int ret, attachment_len;
11573   int read_len;
11574
11575   remote_buffer_add_string (&p, &left, "vFile:pread:");
11576
11577   remote_buffer_add_int (&p, &left, fd);
11578   remote_buffer_add_string (&p, &left, ",");
11579
11580   remote_buffer_add_int (&p, &left, len);
11581   remote_buffer_add_string (&p, &left, ",");
11582
11583   remote_buffer_add_int (&p, &left, offset);
11584
11585   ret = remote_hostio_send_command (p - rs->buf, PACKET_vFile_pread,
11586                                     remote_errno, &attachment,
11587                                     &attachment_len);
11588
11589   if (ret < 0)
11590     return ret;
11591
11592   read_len = remote_unescape_input ((gdb_byte *) attachment, attachment_len,
11593                                     read_buf, len);
11594   if (read_len != ret)
11595     error (_("Read returned %d, but %d bytes."), ret, (int) read_len);
11596
11597   return ret;
11598 }
11599
11600 /* Serve pread from the readahead cache.  Returns number of bytes
11601    read, or 0 if the request can't be served from the cache.  */
11602
11603 static int
11604 remote_hostio_pread_from_cache (struct remote_state *rs,
11605                                 int fd, gdb_byte *read_buf, size_t len,
11606                                 ULONGEST offset)
11607 {
11608   struct readahead_cache *cache = &rs->readahead_cache;
11609
11610   if (cache->fd == fd
11611       && cache->offset <= offset
11612       && offset < cache->offset + cache->bufsize)
11613     {
11614       ULONGEST max = cache->offset + cache->bufsize;
11615
11616       if (offset + len > max)
11617         len = max - offset;
11618
11619       memcpy (read_buf, cache->buf + offset - cache->offset, len);
11620       return len;
11621     }
11622
11623   return 0;
11624 }
11625
11626 /* Implementation of to_fileio_pread.  */
11627
11628 static int
11629 remote_hostio_pread (struct target_ops *self,
11630                      int fd, gdb_byte *read_buf, int len,
11631                      ULONGEST offset, int *remote_errno)
11632 {
11633   int ret;
11634   struct remote_state *rs = get_remote_state ();
11635   struct readahead_cache *cache = &rs->readahead_cache;
11636
11637   ret = remote_hostio_pread_from_cache (rs, fd, read_buf, len, offset);
11638   if (ret > 0)
11639     {
11640       cache->hit_count++;
11641
11642       if (remote_debug)
11643         fprintf_unfiltered (gdb_stdlog, "readahead cache hit %s\n",
11644                             pulongest (cache->hit_count));
11645       return ret;
11646     }
11647
11648   cache->miss_count++;
11649   if (remote_debug)
11650     fprintf_unfiltered (gdb_stdlog, "readahead cache miss %s\n",
11651                         pulongest (cache->miss_count));
11652
11653   cache->fd = fd;
11654   cache->offset = offset;
11655   cache->bufsize = get_remote_packet_size ();
11656   cache->buf = (gdb_byte *) xrealloc (cache->buf, cache->bufsize);
11657
11658   ret = remote_hostio_pread_vFile (self, cache->fd, cache->buf, cache->bufsize,
11659                                    cache->offset, remote_errno);
11660   if (ret <= 0)
11661     {
11662       readahead_cache_invalidate_fd (fd);
11663       return ret;
11664     }
11665
11666   cache->bufsize = ret;
11667   return remote_hostio_pread_from_cache (rs, fd, read_buf, len, offset);
11668 }
11669
11670 /* Implementation of to_fileio_close.  */
11671
11672 static int
11673 remote_hostio_close (struct target_ops *self, int fd, int *remote_errno)
11674 {
11675   struct remote_state *rs = get_remote_state ();
11676   char *p = rs->buf;
11677   int left = get_remote_packet_size () - 1;
11678
11679   readahead_cache_invalidate_fd (fd);
11680
11681   remote_buffer_add_string (&p, &left, "vFile:close:");
11682
11683   remote_buffer_add_int (&p, &left, fd);
11684
11685   return remote_hostio_send_command (p - rs->buf, PACKET_vFile_close,
11686                                      remote_errno, NULL, NULL);
11687 }
11688
11689 /* Implementation of to_fileio_unlink.  */
11690
11691 static int
11692 remote_hostio_unlink (struct target_ops *self,
11693                       struct inferior *inf, const char *filename,
11694                       int *remote_errno)
11695 {
11696   struct remote_state *rs = get_remote_state ();
11697   char *p = rs->buf;
11698   int left = get_remote_packet_size () - 1;
11699
11700   if (remote_hostio_set_filesystem (inf, remote_errno) != 0)
11701     return -1;
11702
11703   remote_buffer_add_string (&p, &left, "vFile:unlink:");
11704
11705   remote_buffer_add_bytes (&p, &left, (const gdb_byte *) filename,
11706                            strlen (filename));
11707
11708   return remote_hostio_send_command (p - rs->buf, PACKET_vFile_unlink,
11709                                      remote_errno, NULL, NULL);
11710 }
11711
11712 /* Implementation of to_fileio_readlink.  */
11713
11714 static char *
11715 remote_hostio_readlink (struct target_ops *self,
11716                         struct inferior *inf, const char *filename,
11717                         int *remote_errno)
11718 {
11719   struct remote_state *rs = get_remote_state ();
11720   char *p = rs->buf;
11721   char *attachment;
11722   int left = get_remote_packet_size ();
11723   int len, attachment_len;
11724   int read_len;
11725   char *ret;
11726
11727   if (remote_hostio_set_filesystem (inf, remote_errno) != 0)
11728     return NULL;
11729
11730   remote_buffer_add_string (&p, &left, "vFile:readlink:");
11731
11732   remote_buffer_add_bytes (&p, &left, (const gdb_byte *) filename,
11733                            strlen (filename));
11734
11735   len = remote_hostio_send_command (p - rs->buf, PACKET_vFile_readlink,
11736                                     remote_errno, &attachment,
11737                                     &attachment_len);
11738
11739   if (len < 0)
11740     return NULL;
11741
11742   ret = (char *) xmalloc (len + 1);
11743
11744   read_len = remote_unescape_input ((gdb_byte *) attachment, attachment_len,
11745                                     (gdb_byte *) ret, len);
11746   if (read_len != len)
11747     error (_("Readlink returned %d, but %d bytes."), len, read_len);
11748
11749   ret[len] = '\0';
11750   return ret;
11751 }
11752
11753 /* Implementation of to_fileio_fstat.  */
11754
11755 static int
11756 remote_hostio_fstat (struct target_ops *self,
11757                      int fd, struct stat *st,
11758                      int *remote_errno)
11759 {
11760   struct remote_state *rs = get_remote_state ();
11761   char *p = rs->buf;
11762   int left = get_remote_packet_size ();
11763   int attachment_len, ret;
11764   char *attachment;
11765   struct fio_stat fst;
11766   int read_len;
11767
11768   remote_buffer_add_string (&p, &left, "vFile:fstat:");
11769
11770   remote_buffer_add_int (&p, &left, fd);
11771
11772   ret = remote_hostio_send_command (p - rs->buf, PACKET_vFile_fstat,
11773                                     remote_errno, &attachment,
11774                                     &attachment_len);
11775   if (ret < 0)
11776     {
11777       if (*remote_errno != FILEIO_ENOSYS)
11778         return ret;
11779
11780       /* Strictly we should return -1, ENOSYS here, but when
11781          "set sysroot remote:" was implemented in August 2008
11782          BFD's need for a stat function was sidestepped with
11783          this hack.  This was not remedied until March 2015
11784          so we retain the previous behavior to avoid breaking
11785          compatibility.
11786
11787          Note that the memset is a March 2015 addition; older
11788          GDBs set st_size *and nothing else* so the structure
11789          would have garbage in all other fields.  This might
11790          break something but retaining the previous behavior
11791          here would be just too wrong.  */
11792
11793       memset (st, 0, sizeof (struct stat));
11794       st->st_size = INT_MAX;
11795       return 0;
11796     }
11797
11798   read_len = remote_unescape_input ((gdb_byte *) attachment, attachment_len,
11799                                     (gdb_byte *) &fst, sizeof (fst));
11800
11801   if (read_len != ret)
11802     error (_("vFile:fstat returned %d, but %d bytes."), ret, read_len);
11803
11804   if (read_len != sizeof (fst))
11805     error (_("vFile:fstat returned %d bytes, but expecting %d."),
11806            read_len, (int) sizeof (fst));
11807
11808   remote_fileio_to_host_stat (&fst, st);
11809
11810   return 0;
11811 }
11812
11813 /* Implementation of to_filesystem_is_local.  */
11814
11815 static int
11816 remote_filesystem_is_local (struct target_ops *self)
11817 {
11818   /* Valgrind GDB presents itself as a remote target but works
11819      on the local filesystem: it does not implement remote get
11820      and users are not expected to set a sysroot.  To handle
11821      this case we treat the remote filesystem as local if the
11822      sysroot is exactly TARGET_SYSROOT_PREFIX and if the stub
11823      does not support vFile:open.  */
11824   if (strcmp (gdb_sysroot, TARGET_SYSROOT_PREFIX) == 0)
11825     {
11826       enum packet_support ps = packet_support (PACKET_vFile_open);
11827
11828       if (ps == PACKET_SUPPORT_UNKNOWN)
11829         {
11830           int fd, remote_errno;
11831
11832           /* Try opening a file to probe support.  The supplied
11833              filename is irrelevant, we only care about whether
11834              the stub recognizes the packet or not.  */
11835           fd = remote_hostio_open (self, NULL, "just probing",
11836                                    FILEIO_O_RDONLY, 0700, 0,
11837                                    &remote_errno);
11838
11839           if (fd >= 0)
11840             remote_hostio_close (self, fd, &remote_errno);
11841
11842           ps = packet_support (PACKET_vFile_open);
11843         }
11844
11845       if (ps == PACKET_DISABLE)
11846         {
11847           static int warning_issued = 0;
11848
11849           if (!warning_issued)
11850             {
11851               warning (_("remote target does not support file"
11852                          " transfer, attempting to access files"
11853                          " from local filesystem."));
11854               warning_issued = 1;
11855             }
11856
11857           return 1;
11858         }
11859     }
11860
11861   return 0;
11862 }
11863
11864 static int
11865 remote_fileio_errno_to_host (int errnum)
11866 {
11867   switch (errnum)
11868     {
11869       case FILEIO_EPERM:
11870         return EPERM;
11871       case FILEIO_ENOENT:
11872         return ENOENT;
11873       case FILEIO_EINTR:
11874         return EINTR;
11875       case FILEIO_EIO:
11876         return EIO;
11877       case FILEIO_EBADF:
11878         return EBADF;
11879       case FILEIO_EACCES:
11880         return EACCES;
11881       case FILEIO_EFAULT:
11882         return EFAULT;
11883       case FILEIO_EBUSY:
11884         return EBUSY;
11885       case FILEIO_EEXIST:
11886         return EEXIST;
11887       case FILEIO_ENODEV:
11888         return ENODEV;
11889       case FILEIO_ENOTDIR:
11890         return ENOTDIR;
11891       case FILEIO_EISDIR:
11892         return EISDIR;
11893       case FILEIO_EINVAL:
11894         return EINVAL;
11895       case FILEIO_ENFILE:
11896         return ENFILE;
11897       case FILEIO_EMFILE:
11898         return EMFILE;
11899       case FILEIO_EFBIG:
11900         return EFBIG;
11901       case FILEIO_ENOSPC:
11902         return ENOSPC;
11903       case FILEIO_ESPIPE:
11904         return ESPIPE;
11905       case FILEIO_EROFS:
11906         return EROFS;
11907       case FILEIO_ENOSYS:
11908         return ENOSYS;
11909       case FILEIO_ENAMETOOLONG:
11910         return ENAMETOOLONG;
11911     }
11912   return -1;
11913 }
11914
11915 static char *
11916 remote_hostio_error (int errnum)
11917 {
11918   int host_error = remote_fileio_errno_to_host (errnum);
11919
11920   if (host_error == -1)
11921     error (_("Unknown remote I/O error %d"), errnum);
11922   else
11923     error (_("Remote I/O error: %s"), safe_strerror (host_error));
11924 }
11925
11926 static void
11927 remote_hostio_close_cleanup (void *opaque)
11928 {
11929   int fd = *(int *) opaque;
11930   int remote_errno;
11931
11932   remote_hostio_close (find_target_at (process_stratum), fd, &remote_errno);
11933 }
11934
11935 void
11936 remote_file_put (const char *local_file, const char *remote_file, int from_tty)
11937 {
11938   struct cleanup *back_to, *close_cleanup;
11939   int retcode, fd, remote_errno, bytes, io_size;
11940   gdb_byte *buffer;
11941   int bytes_in_buffer;
11942   int saw_eof;
11943   ULONGEST offset;
11944   struct remote_state *rs = get_remote_state ();
11945
11946   if (!rs->remote_desc)
11947     error (_("command can only be used with remote target"));
11948
11949   gdb_file_up file = gdb_fopen_cloexec (local_file, "rb");
11950   if (file == NULL)
11951     perror_with_name (local_file);
11952
11953   fd = remote_hostio_open (find_target_at (process_stratum), NULL,
11954                            remote_file, (FILEIO_O_WRONLY | FILEIO_O_CREAT
11955                                          | FILEIO_O_TRUNC),
11956                            0700, 0, &remote_errno);
11957   if (fd == -1)
11958     remote_hostio_error (remote_errno);
11959
11960   /* Send up to this many bytes at once.  They won't all fit in the
11961      remote packet limit, so we'll transfer slightly fewer.  */
11962   io_size = get_remote_packet_size ();
11963   buffer = (gdb_byte *) xmalloc (io_size);
11964   back_to = make_cleanup (xfree, buffer);
11965
11966   close_cleanup = make_cleanup (remote_hostio_close_cleanup, &fd);
11967
11968   bytes_in_buffer = 0;
11969   saw_eof = 0;
11970   offset = 0;
11971   while (bytes_in_buffer || !saw_eof)
11972     {
11973       if (!saw_eof)
11974         {
11975           bytes = fread (buffer + bytes_in_buffer, 1,
11976                          io_size - bytes_in_buffer,
11977                          file.get ());
11978           if (bytes == 0)
11979             {
11980               if (ferror (file.get ()))
11981                 error (_("Error reading %s."), local_file);
11982               else
11983                 {
11984                   /* EOF.  Unless there is something still in the
11985                      buffer from the last iteration, we are done.  */
11986                   saw_eof = 1;
11987                   if (bytes_in_buffer == 0)
11988                     break;
11989                 }
11990             }
11991         }
11992       else
11993         bytes = 0;
11994
11995       bytes += bytes_in_buffer;
11996       bytes_in_buffer = 0;
11997
11998       retcode = remote_hostio_pwrite (find_target_at (process_stratum),
11999                                       fd, buffer, bytes,
12000                                       offset, &remote_errno);
12001
12002       if (retcode < 0)
12003         remote_hostio_error (remote_errno);
12004       else if (retcode == 0)
12005         error (_("Remote write of %d bytes returned 0!"), bytes);
12006       else if (retcode < bytes)
12007         {
12008           /* Short write.  Save the rest of the read data for the next
12009              write.  */
12010           bytes_in_buffer = bytes - retcode;
12011           memmove (buffer, buffer + retcode, bytes_in_buffer);
12012         }
12013
12014       offset += retcode;
12015     }
12016
12017   discard_cleanups (close_cleanup);
12018   if (remote_hostio_close (find_target_at (process_stratum), fd, &remote_errno))
12019     remote_hostio_error (remote_errno);
12020
12021   if (from_tty)
12022     printf_filtered (_("Successfully sent file \"%s\".\n"), local_file);
12023   do_cleanups (back_to);
12024 }
12025
12026 void
12027 remote_file_get (const char *remote_file, const char *local_file, int from_tty)
12028 {
12029   struct cleanup *back_to, *close_cleanup;
12030   int fd, remote_errno, bytes, io_size;
12031   gdb_byte *buffer;
12032   ULONGEST offset;
12033   struct remote_state *rs = get_remote_state ();
12034
12035   if (!rs->remote_desc)
12036     error (_("command can only be used with remote target"));
12037
12038   fd = remote_hostio_open (find_target_at (process_stratum), NULL,
12039                            remote_file, FILEIO_O_RDONLY, 0, 0,
12040                            &remote_errno);
12041   if (fd == -1)
12042     remote_hostio_error (remote_errno);
12043
12044   gdb_file_up file = gdb_fopen_cloexec (local_file, "wb");
12045   if (file == NULL)
12046     perror_with_name (local_file);
12047
12048   /* Send up to this many bytes at once.  They won't all fit in the
12049      remote packet limit, so we'll transfer slightly fewer.  */
12050   io_size = get_remote_packet_size ();
12051   buffer = (gdb_byte *) xmalloc (io_size);
12052   back_to = make_cleanup (xfree, buffer);
12053
12054   close_cleanup = make_cleanup (remote_hostio_close_cleanup, &fd);
12055
12056   offset = 0;
12057   while (1)
12058     {
12059       bytes = remote_hostio_pread (find_target_at (process_stratum),
12060                                    fd, buffer, io_size, offset, &remote_errno);
12061       if (bytes == 0)
12062         /* Success, but no bytes, means end-of-file.  */
12063         break;
12064       if (bytes == -1)
12065         remote_hostio_error (remote_errno);
12066
12067       offset += bytes;
12068
12069       bytes = fwrite (buffer, 1, bytes, file.get ());
12070       if (bytes == 0)
12071         perror_with_name (local_file);
12072     }
12073
12074   discard_cleanups (close_cleanup);
12075   if (remote_hostio_close (find_target_at (process_stratum), fd, &remote_errno))
12076     remote_hostio_error (remote_errno);
12077
12078   if (from_tty)
12079     printf_filtered (_("Successfully fetched file \"%s\".\n"), remote_file);
12080   do_cleanups (back_to);
12081 }
12082
12083 void
12084 remote_file_delete (const char *remote_file, int from_tty)
12085 {
12086   int retcode, remote_errno;
12087   struct remote_state *rs = get_remote_state ();
12088
12089   if (!rs->remote_desc)
12090     error (_("command can only be used with remote target"));
12091
12092   retcode = remote_hostio_unlink (find_target_at (process_stratum),
12093                                   NULL, remote_file, &remote_errno);
12094   if (retcode == -1)
12095     remote_hostio_error (remote_errno);
12096
12097   if (from_tty)
12098     printf_filtered (_("Successfully deleted file \"%s\".\n"), remote_file);
12099 }
12100
12101 static void
12102 remote_put_command (const char *args, int from_tty)
12103 {
12104   if (args == NULL)
12105     error_no_arg (_("file to put"));
12106
12107   gdb_argv argv (args);
12108   if (argv[0] == NULL || argv[1] == NULL || argv[2] != NULL)
12109     error (_("Invalid parameters to remote put"));
12110
12111   remote_file_put (argv[0], argv[1], from_tty);
12112 }
12113
12114 static void
12115 remote_get_command (const char *args, int from_tty)
12116 {
12117   if (args == NULL)
12118     error_no_arg (_("file to get"));
12119
12120   gdb_argv argv (args);
12121   if (argv[0] == NULL || argv[1] == NULL || argv[2] != NULL)
12122     error (_("Invalid parameters to remote get"));
12123
12124   remote_file_get (argv[0], argv[1], from_tty);
12125 }
12126
12127 static void
12128 remote_delete_command (const char *args, int from_tty)
12129 {
12130   if (args == NULL)
12131     error_no_arg (_("file to delete"));
12132
12133   gdb_argv argv (args);
12134   if (argv[0] == NULL || argv[1] != NULL)
12135     error (_("Invalid parameters to remote delete"));
12136
12137   remote_file_delete (argv[0], from_tty);
12138 }
12139
12140 static void
12141 remote_command (const char *args, int from_tty)
12142 {
12143   help_list (remote_cmdlist, "remote ", all_commands, gdb_stdout);
12144 }
12145
12146 static int
12147 remote_can_execute_reverse (struct target_ops *self)
12148 {
12149   if (packet_support (PACKET_bs) == PACKET_ENABLE
12150       || packet_support (PACKET_bc) == PACKET_ENABLE)
12151     return 1;
12152   else
12153     return 0;
12154 }
12155
12156 static int
12157 remote_supports_non_stop (struct target_ops *self)
12158 {
12159   return 1;
12160 }
12161
12162 static int
12163 remote_supports_disable_randomization (struct target_ops *self)
12164 {
12165   /* Only supported in extended mode.  */
12166   return 0;
12167 }
12168
12169 static int
12170 remote_supports_multi_process (struct target_ops *self)
12171 {
12172   struct remote_state *rs = get_remote_state ();
12173
12174   return remote_multi_process_p (rs);
12175 }
12176
12177 static int
12178 remote_supports_cond_tracepoints (void)
12179 {
12180   return packet_support (PACKET_ConditionalTracepoints) == PACKET_ENABLE;
12181 }
12182
12183 static int
12184 remote_supports_cond_breakpoints (struct target_ops *self)
12185 {
12186   return packet_support (PACKET_ConditionalBreakpoints) == PACKET_ENABLE;
12187 }
12188
12189 static int
12190 remote_supports_fast_tracepoints (void)
12191 {
12192   return packet_support (PACKET_FastTracepoints) == PACKET_ENABLE;
12193 }
12194
12195 static int
12196 remote_supports_static_tracepoints (void)
12197 {
12198   return packet_support (PACKET_StaticTracepoints) == PACKET_ENABLE;
12199 }
12200
12201 static int
12202 remote_supports_install_in_trace (void)
12203 {
12204   return packet_support (PACKET_InstallInTrace) == PACKET_ENABLE;
12205 }
12206
12207 static int
12208 remote_supports_enable_disable_tracepoint (struct target_ops *self)
12209 {
12210   return (packet_support (PACKET_EnableDisableTracepoints_feature)
12211           == PACKET_ENABLE);
12212 }
12213
12214 static int
12215 remote_supports_string_tracing (struct target_ops *self)
12216 {
12217   return packet_support (PACKET_tracenz_feature) == PACKET_ENABLE;
12218 }
12219
12220 static int
12221 remote_can_run_breakpoint_commands (struct target_ops *self)
12222 {
12223   return packet_support (PACKET_BreakpointCommands) == PACKET_ENABLE;
12224 }
12225
12226 static void
12227 remote_trace_init (struct target_ops *self)
12228 {
12229   struct remote_state *rs = get_remote_state ();
12230
12231   putpkt ("QTinit");
12232   remote_get_noisy_reply ();
12233   if (strcmp (rs->buf, "OK") != 0)
12234     error (_("Target does not support this command."));
12235 }
12236
12237 /* Recursive routine to walk through command list including loops, and
12238    download packets for each command.  */
12239
12240 static void
12241 remote_download_command_source (int num, ULONGEST addr,
12242                                 struct command_line *cmds)
12243 {
12244   struct remote_state *rs = get_remote_state ();
12245   struct command_line *cmd;
12246
12247   for (cmd = cmds; cmd; cmd = cmd->next)
12248     {
12249       QUIT;     /* Allow user to bail out with ^C.  */
12250       strcpy (rs->buf, "QTDPsrc:");
12251       encode_source_string (num, addr, "cmd", cmd->line,
12252                             rs->buf + strlen (rs->buf),
12253                             rs->buf_size - strlen (rs->buf));
12254       putpkt (rs->buf);
12255       remote_get_noisy_reply ();
12256       if (strcmp (rs->buf, "OK"))
12257         warning (_("Target does not support source download."));
12258
12259       if (cmd->control_type == while_control
12260           || cmd->control_type == while_stepping_control)
12261         {
12262           remote_download_command_source (num, addr, *cmd->body_list);
12263
12264           QUIT; /* Allow user to bail out with ^C.  */
12265           strcpy (rs->buf, "QTDPsrc:");
12266           encode_source_string (num, addr, "cmd", "end",
12267                                 rs->buf + strlen (rs->buf),
12268                                 rs->buf_size - strlen (rs->buf));
12269           putpkt (rs->buf);
12270           remote_get_noisy_reply ();
12271           if (strcmp (rs->buf, "OK"))
12272             warning (_("Target does not support source download."));
12273         }
12274     }
12275 }
12276
12277 static void
12278 remote_download_tracepoint (struct target_ops *self, struct bp_location *loc)
12279 {
12280 #define BUF_SIZE 2048
12281
12282   CORE_ADDR tpaddr;
12283   char addrbuf[40];
12284   char buf[BUF_SIZE];
12285   std::vector<std::string> tdp_actions;
12286   std::vector<std::string> stepping_actions;
12287   char *pkt;
12288   struct breakpoint *b = loc->owner;
12289   struct tracepoint *t = (struct tracepoint *) b;
12290   struct remote_state *rs = get_remote_state ();
12291
12292   encode_actions_rsp (loc, &tdp_actions, &stepping_actions);
12293
12294   tpaddr = loc->address;
12295   sprintf_vma (addrbuf, tpaddr);
12296   xsnprintf (buf, BUF_SIZE, "QTDP:%x:%s:%c:%lx:%x", b->number,
12297              addrbuf, /* address */
12298              (b->enable_state == bp_enabled ? 'E' : 'D'),
12299              t->step_count, t->pass_count);
12300   /* Fast tracepoints are mostly handled by the target, but we can
12301      tell the target how big of an instruction block should be moved
12302      around.  */
12303   if (b->type == bp_fast_tracepoint)
12304     {
12305       /* Only test for support at download time; we may not know
12306          target capabilities at definition time.  */
12307       if (remote_supports_fast_tracepoints ())
12308         {
12309           if (gdbarch_fast_tracepoint_valid_at (loc->gdbarch, tpaddr,
12310                                                 NULL))
12311             xsnprintf (buf + strlen (buf), BUF_SIZE - strlen (buf), ":F%x",
12312                        gdb_insn_length (loc->gdbarch, tpaddr));
12313           else
12314             /* If it passed validation at definition but fails now,
12315                something is very wrong.  */
12316             internal_error (__FILE__, __LINE__,
12317                             _("Fast tracepoint not "
12318                               "valid during download"));
12319         }
12320       else
12321         /* Fast tracepoints are functionally identical to regular
12322            tracepoints, so don't take lack of support as a reason to
12323            give up on the trace run.  */
12324         warning (_("Target does not support fast tracepoints, "
12325                    "downloading %d as regular tracepoint"), b->number);
12326     }
12327   else if (b->type == bp_static_tracepoint)
12328     {
12329       /* Only test for support at download time; we may not know
12330          target capabilities at definition time.  */
12331       if (remote_supports_static_tracepoints ())
12332         {
12333           struct static_tracepoint_marker marker;
12334
12335           if (target_static_tracepoint_marker_at (tpaddr, &marker))
12336             strcat (buf, ":S");
12337           else
12338             error (_("Static tracepoint not valid during download"));
12339         }
12340       else
12341         /* Fast tracepoints are functionally identical to regular
12342            tracepoints, so don't take lack of support as a reason
12343            to give up on the trace run.  */
12344         error (_("Target does not support static tracepoints"));
12345     }
12346   /* If the tracepoint has a conditional, make it into an agent
12347      expression and append to the definition.  */
12348   if (loc->cond)
12349     {
12350       /* Only test support at download time, we may not know target
12351          capabilities at definition time.  */
12352       if (remote_supports_cond_tracepoints ())
12353         {
12354           agent_expr_up aexpr = gen_eval_for_expr (tpaddr, loc->cond.get ());
12355           xsnprintf (buf + strlen (buf), BUF_SIZE - strlen (buf), ":X%x,",
12356                      aexpr->len);
12357           pkt = buf + strlen (buf);
12358           for (int ndx = 0; ndx < aexpr->len; ++ndx)
12359             pkt = pack_hex_byte (pkt, aexpr->buf[ndx]);
12360           *pkt = '\0';
12361         }
12362       else
12363         warning (_("Target does not support conditional tracepoints, "
12364                    "ignoring tp %d cond"), b->number);
12365     }
12366
12367   if (b->commands || *default_collect)
12368     strcat (buf, "-");
12369   putpkt (buf);
12370   remote_get_noisy_reply ();
12371   if (strcmp (rs->buf, "OK"))
12372     error (_("Target does not support tracepoints."));
12373
12374   /* do_single_steps (t); */
12375   for (auto action_it = tdp_actions.begin ();
12376        action_it != tdp_actions.end (); action_it++)
12377     {
12378       QUIT;     /* Allow user to bail out with ^C.  */
12379
12380       bool has_more = (action_it != tdp_actions.end ()
12381                        || !stepping_actions.empty ());
12382
12383       xsnprintf (buf, BUF_SIZE, "QTDP:-%x:%s:%s%c",
12384                  b->number, addrbuf, /* address */
12385                  action_it->c_str (),
12386                  has_more ? '-' : 0);
12387       putpkt (buf);
12388       remote_get_noisy_reply ();
12389       if (strcmp (rs->buf, "OK"))
12390         error (_("Error on target while setting tracepoints."));
12391     }
12392
12393     for (auto action_it = stepping_actions.begin ();
12394          action_it != stepping_actions.end (); action_it++)
12395       {
12396         QUIT;   /* Allow user to bail out with ^C.  */
12397
12398         bool is_first = action_it == stepping_actions.begin ();
12399         bool has_more = action_it != stepping_actions.end ();
12400
12401         xsnprintf (buf, BUF_SIZE, "QTDP:-%x:%s:%s%s%s",
12402                    b->number, addrbuf, /* address */
12403                    is_first ? "S" : "",
12404                    action_it->c_str (),
12405                    has_more ? "-" : "");
12406         putpkt (buf);
12407         remote_get_noisy_reply ();
12408         if (strcmp (rs->buf, "OK"))
12409           error (_("Error on target while setting tracepoints."));
12410       }
12411
12412   if (packet_support (PACKET_TracepointSource) == PACKET_ENABLE)
12413     {
12414       if (b->location != NULL)
12415         {
12416           strcpy (buf, "QTDPsrc:");
12417           encode_source_string (b->number, loc->address, "at",
12418                                 event_location_to_string (b->location.get ()),
12419                                 buf + strlen (buf), 2048 - strlen (buf));
12420           putpkt (buf);
12421           remote_get_noisy_reply ();
12422           if (strcmp (rs->buf, "OK"))
12423             warning (_("Target does not support source download."));
12424         }
12425       if (b->cond_string)
12426         {
12427           strcpy (buf, "QTDPsrc:");
12428           encode_source_string (b->number, loc->address,
12429                                 "cond", b->cond_string, buf + strlen (buf),
12430                                 2048 - strlen (buf));
12431           putpkt (buf);
12432           remote_get_noisy_reply ();
12433           if (strcmp (rs->buf, "OK"))
12434             warning (_("Target does not support source download."));
12435         }
12436       remote_download_command_source (b->number, loc->address,
12437                                       breakpoint_commands (b));
12438     }
12439 }
12440
12441 static int
12442 remote_can_download_tracepoint (struct target_ops *self)
12443 {
12444   struct remote_state *rs = get_remote_state ();
12445   struct trace_status *ts;
12446   int status;
12447
12448   /* Don't try to install tracepoints until we've relocated our
12449      symbols, and fetched and merged the target's tracepoint list with
12450      ours.  */
12451   if (rs->starting_up)
12452     return 0;
12453
12454   ts = current_trace_status ();
12455   status = remote_get_trace_status (self, ts);
12456
12457   if (status == -1 || !ts->running_known || !ts->running)
12458     return 0;
12459
12460   /* If we are in a tracing experiment, but remote stub doesn't support
12461      installing tracepoint in trace, we have to return.  */
12462   if (!remote_supports_install_in_trace ())
12463     return 0;
12464
12465   return 1;
12466 }
12467
12468
12469 static void
12470 remote_download_trace_state_variable (struct target_ops *self,
12471                                       struct trace_state_variable *tsv)
12472 {
12473   struct remote_state *rs = get_remote_state ();
12474   char *p;
12475
12476   xsnprintf (rs->buf, get_remote_packet_size (), "QTDV:%x:%s:%x:",
12477              tsv->number, phex ((ULONGEST) tsv->initial_value, 8),
12478              tsv->builtin);
12479   p = rs->buf + strlen (rs->buf);
12480   if ((p - rs->buf) + strlen (tsv->name) * 2 >= get_remote_packet_size ())
12481     error (_("Trace state variable name too long for tsv definition packet"));
12482   p += 2 * bin2hex ((gdb_byte *) (tsv->name), p, strlen (tsv->name));
12483   *p++ = '\0';
12484   putpkt (rs->buf);
12485   remote_get_noisy_reply ();
12486   if (*rs->buf == '\0')
12487     error (_("Target does not support this command."));
12488   if (strcmp (rs->buf, "OK") != 0)
12489     error (_("Error on target while downloading trace state variable."));
12490 }
12491
12492 static void
12493 remote_enable_tracepoint (struct target_ops *self,
12494                           struct bp_location *location)
12495 {
12496   struct remote_state *rs = get_remote_state ();
12497   char addr_buf[40];
12498
12499   sprintf_vma (addr_buf, location->address);
12500   xsnprintf (rs->buf, get_remote_packet_size (), "QTEnable:%x:%s",
12501              location->owner->number, addr_buf);
12502   putpkt (rs->buf);
12503   remote_get_noisy_reply ();
12504   if (*rs->buf == '\0')
12505     error (_("Target does not support enabling tracepoints while a trace run is ongoing."));
12506   if (strcmp (rs->buf, "OK") != 0)
12507     error (_("Error on target while enabling tracepoint."));
12508 }
12509
12510 static void
12511 remote_disable_tracepoint (struct target_ops *self,
12512                            struct bp_location *location)
12513 {
12514   struct remote_state *rs = get_remote_state ();
12515   char addr_buf[40];
12516
12517   sprintf_vma (addr_buf, location->address);
12518   xsnprintf (rs->buf, get_remote_packet_size (), "QTDisable:%x:%s",
12519              location->owner->number, addr_buf);
12520   putpkt (rs->buf);
12521   remote_get_noisy_reply ();
12522   if (*rs->buf == '\0')
12523     error (_("Target does not support disabling tracepoints while a trace run is ongoing."));
12524   if (strcmp (rs->buf, "OK") != 0)
12525     error (_("Error on target while disabling tracepoint."));
12526 }
12527
12528 static void
12529 remote_trace_set_readonly_regions (struct target_ops *self)
12530 {
12531   asection *s;
12532   bfd *abfd = NULL;
12533   bfd_size_type size;
12534   bfd_vma vma;
12535   int anysecs = 0;
12536   int offset = 0;
12537
12538   if (!exec_bfd)
12539     return;                     /* No information to give.  */
12540
12541   struct remote_state *rs = get_remote_state ();
12542
12543   strcpy (rs->buf, "QTro");
12544   offset = strlen (rs->buf);
12545   for (s = exec_bfd->sections; s; s = s->next)
12546     {
12547       char tmp1[40], tmp2[40];
12548       int sec_length;
12549
12550       if ((s->flags & SEC_LOAD) == 0 ||
12551       /*  (s->flags & SEC_CODE) == 0 || */
12552           (s->flags & SEC_READONLY) == 0)
12553         continue;
12554
12555       anysecs = 1;
12556       vma = bfd_get_section_vma (abfd, s);
12557       size = bfd_get_section_size (s);
12558       sprintf_vma (tmp1, vma);
12559       sprintf_vma (tmp2, vma + size);
12560       sec_length = 1 + strlen (tmp1) + 1 + strlen (tmp2);
12561       if (offset + sec_length + 1 > rs->buf_size)
12562         {
12563           if (packet_support (PACKET_qXfer_traceframe_info) != PACKET_ENABLE)
12564             warning (_("\
12565 Too many sections for read-only sections definition packet."));
12566           break;
12567         }
12568       xsnprintf (rs->buf + offset, rs->buf_size - offset, ":%s,%s",
12569                  tmp1, tmp2);
12570       offset += sec_length;
12571     }
12572   if (anysecs)
12573     {
12574       putpkt (rs->buf);
12575       getpkt (&rs->buf, &rs->buf_size, 0);
12576     }
12577 }
12578
12579 static void
12580 remote_trace_start (struct target_ops *self)
12581 {
12582   struct remote_state *rs = get_remote_state ();
12583
12584   putpkt ("QTStart");
12585   remote_get_noisy_reply ();
12586   if (*rs->buf == '\0')
12587     error (_("Target does not support this command."));
12588   if (strcmp (rs->buf, "OK") != 0)
12589     error (_("Bogus reply from target: %s"), rs->buf);
12590 }
12591
12592 static int
12593 remote_get_trace_status (struct target_ops *self, struct trace_status *ts)
12594 {
12595   /* Initialize it just to avoid a GCC false warning.  */
12596   char *p = NULL;
12597   /* FIXME we need to get register block size some other way.  */
12598   extern int trace_regblock_size;
12599   enum packet_result result;
12600   struct remote_state *rs = get_remote_state ();
12601
12602   if (packet_support (PACKET_qTStatus) == PACKET_DISABLE)
12603     return -1;
12604
12605   trace_regblock_size
12606     = get_remote_arch_state (target_gdbarch ())->sizeof_g_packet;
12607
12608   putpkt ("qTStatus");
12609
12610   TRY
12611     {
12612       p = remote_get_noisy_reply ();
12613     }
12614   CATCH (ex, RETURN_MASK_ERROR)
12615     {
12616       if (ex.error != TARGET_CLOSE_ERROR)
12617         {
12618           exception_fprintf (gdb_stderr, ex, "qTStatus: ");
12619           return -1;
12620         }
12621       throw_exception (ex);
12622     }
12623   END_CATCH
12624
12625   result = packet_ok (p, &remote_protocol_packets[PACKET_qTStatus]);
12626
12627   /* If the remote target doesn't do tracing, flag it.  */
12628   if (result == PACKET_UNKNOWN)
12629     return -1;
12630
12631   /* We're working with a live target.  */
12632   ts->filename = NULL;
12633
12634   if (*p++ != 'T')
12635     error (_("Bogus trace status reply from target: %s"), rs->buf);
12636
12637   /* Function 'parse_trace_status' sets default value of each field of
12638      'ts' at first, so we don't have to do it here.  */
12639   parse_trace_status (p, ts);
12640
12641   return ts->running;
12642 }
12643
12644 static void
12645 remote_get_tracepoint_status (struct target_ops *self, struct breakpoint *bp,
12646                               struct uploaded_tp *utp)
12647 {
12648   struct remote_state *rs = get_remote_state ();
12649   char *reply;
12650   struct bp_location *loc;
12651   struct tracepoint *tp = (struct tracepoint *) bp;
12652   size_t size = get_remote_packet_size ();
12653
12654   if (tp)
12655     {
12656       tp->hit_count = 0;
12657       tp->traceframe_usage = 0;
12658       for (loc = tp->loc; loc; loc = loc->next)
12659         {
12660           /* If the tracepoint was never downloaded, don't go asking for
12661              any status.  */
12662           if (tp->number_on_target == 0)
12663             continue;
12664           xsnprintf (rs->buf, size, "qTP:%x:%s", tp->number_on_target,
12665                      phex_nz (loc->address, 0));
12666           putpkt (rs->buf);
12667           reply = remote_get_noisy_reply ();
12668           if (reply && *reply)
12669             {
12670               if (*reply == 'V')
12671                 parse_tracepoint_status (reply + 1, bp, utp);
12672             }
12673         }
12674     }
12675   else if (utp)
12676     {
12677       utp->hit_count = 0;
12678       utp->traceframe_usage = 0;
12679       xsnprintf (rs->buf, size, "qTP:%x:%s", utp->number,
12680                  phex_nz (utp->addr, 0));
12681       putpkt (rs->buf);
12682       reply = remote_get_noisy_reply ();
12683       if (reply && *reply)
12684         {
12685           if (*reply == 'V')
12686             parse_tracepoint_status (reply + 1, bp, utp);
12687         }
12688     }
12689 }
12690
12691 static void
12692 remote_trace_stop (struct target_ops *self)
12693 {
12694   struct remote_state *rs = get_remote_state ();
12695
12696   putpkt ("QTStop");
12697   remote_get_noisy_reply ();
12698   if (*rs->buf == '\0')
12699     error (_("Target does not support this command."));
12700   if (strcmp (rs->buf, "OK") != 0)
12701     error (_("Bogus reply from target: %s"), rs->buf);
12702 }
12703
12704 static int
12705 remote_trace_find (struct target_ops *self,
12706                    enum trace_find_type type, int num,
12707                    CORE_ADDR addr1, CORE_ADDR addr2,
12708                    int *tpp)
12709 {
12710   struct remote_state *rs = get_remote_state ();
12711   char *endbuf = rs->buf + get_remote_packet_size ();
12712   char *p, *reply;
12713   int target_frameno = -1, target_tracept = -1;
12714
12715   /* Lookups other than by absolute frame number depend on the current
12716      trace selected, so make sure it is correct on the remote end
12717      first.  */
12718   if (type != tfind_number)
12719     set_remote_traceframe ();
12720
12721   p = rs->buf;
12722   strcpy (p, "QTFrame:");
12723   p = strchr (p, '\0');
12724   switch (type)
12725     {
12726     case tfind_number:
12727       xsnprintf (p, endbuf - p, "%x", num);
12728       break;
12729     case tfind_pc:
12730       xsnprintf (p, endbuf - p, "pc:%s", phex_nz (addr1, 0));
12731       break;
12732     case tfind_tp:
12733       xsnprintf (p, endbuf - p, "tdp:%x", num);
12734       break;
12735     case tfind_range:
12736       xsnprintf (p, endbuf - p, "range:%s:%s", phex_nz (addr1, 0),
12737                  phex_nz (addr2, 0));
12738       break;
12739     case tfind_outside:
12740       xsnprintf (p, endbuf - p, "outside:%s:%s", phex_nz (addr1, 0),
12741                  phex_nz (addr2, 0));
12742       break;
12743     default:
12744       error (_("Unknown trace find type %d"), type);
12745     }
12746
12747   putpkt (rs->buf);
12748   reply = remote_get_noisy_reply ();
12749   if (*reply == '\0')
12750     error (_("Target does not support this command."));
12751
12752   while (reply && *reply)
12753     switch (*reply)
12754       {
12755       case 'F':
12756         p = ++reply;
12757         target_frameno = (int) strtol (p, &reply, 16);
12758         if (reply == p)
12759           error (_("Unable to parse trace frame number"));
12760         /* Don't update our remote traceframe number cache on failure
12761            to select a remote traceframe.  */
12762         if (target_frameno == -1)
12763           return -1;
12764         break;
12765       case 'T':
12766         p = ++reply;
12767         target_tracept = (int) strtol (p, &reply, 16);
12768         if (reply == p)
12769           error (_("Unable to parse tracepoint number"));
12770         break;
12771       case 'O':         /* "OK"? */
12772         if (reply[1] == 'K' && reply[2] == '\0')
12773           reply += 2;
12774         else
12775           error (_("Bogus reply from target: %s"), reply);
12776         break;
12777       default:
12778         error (_("Bogus reply from target: %s"), reply);
12779       }
12780   if (tpp)
12781     *tpp = target_tracept;
12782
12783   rs->remote_traceframe_number = target_frameno;
12784   return target_frameno;
12785 }
12786
12787 static int
12788 remote_get_trace_state_variable_value (struct target_ops *self,
12789                                        int tsvnum, LONGEST *val)
12790 {
12791   struct remote_state *rs = get_remote_state ();
12792   char *reply;
12793   ULONGEST uval;
12794
12795   set_remote_traceframe ();
12796
12797   xsnprintf (rs->buf, get_remote_packet_size (), "qTV:%x", tsvnum);
12798   putpkt (rs->buf);
12799   reply = remote_get_noisy_reply ();
12800   if (reply && *reply)
12801     {
12802       if (*reply == 'V')
12803         {
12804           unpack_varlen_hex (reply + 1, &uval);
12805           *val = (LONGEST) uval;
12806           return 1;
12807         }
12808     }
12809   return 0;
12810 }
12811
12812 static int
12813 remote_save_trace_data (struct target_ops *self, const char *filename)
12814 {
12815   struct remote_state *rs = get_remote_state ();
12816   char *p, *reply;
12817
12818   p = rs->buf;
12819   strcpy (p, "QTSave:");
12820   p += strlen (p);
12821   if ((p - rs->buf) + strlen (filename) * 2 >= get_remote_packet_size ())
12822     error (_("Remote file name too long for trace save packet"));
12823   p += 2 * bin2hex ((gdb_byte *) filename, p, strlen (filename));
12824   *p++ = '\0';
12825   putpkt (rs->buf);
12826   reply = remote_get_noisy_reply ();
12827   if (*reply == '\0')
12828     error (_("Target does not support this command."));
12829   if (strcmp (reply, "OK") != 0)
12830     error (_("Bogus reply from target: %s"), reply);
12831   return 0;
12832 }
12833
12834 /* This is basically a memory transfer, but needs to be its own packet
12835    because we don't know how the target actually organizes its trace
12836    memory, plus we want to be able to ask for as much as possible, but
12837    not be unhappy if we don't get as much as we ask for.  */
12838
12839 static LONGEST
12840 remote_get_raw_trace_data (struct target_ops *self,
12841                            gdb_byte *buf, ULONGEST offset, LONGEST len)
12842 {
12843   struct remote_state *rs = get_remote_state ();
12844   char *reply;
12845   char *p;
12846   int rslt;
12847
12848   p = rs->buf;
12849   strcpy (p, "qTBuffer:");
12850   p += strlen (p);
12851   p += hexnumstr (p, offset);
12852   *p++ = ',';
12853   p += hexnumstr (p, len);
12854   *p++ = '\0';
12855
12856   putpkt (rs->buf);
12857   reply = remote_get_noisy_reply ();
12858   if (reply && *reply)
12859     {
12860       /* 'l' by itself means we're at the end of the buffer and
12861          there is nothing more to get.  */
12862       if (*reply == 'l')
12863         return 0;
12864
12865       /* Convert the reply into binary.  Limit the number of bytes to
12866          convert according to our passed-in buffer size, rather than
12867          what was returned in the packet; if the target is
12868          unexpectedly generous and gives us a bigger reply than we
12869          asked for, we don't want to crash.  */
12870       rslt = hex2bin (reply, buf, len);
12871       return rslt;
12872     }
12873
12874   /* Something went wrong, flag as an error.  */
12875   return -1;
12876 }
12877
12878 static void
12879 remote_set_disconnected_tracing (struct target_ops *self, int val)
12880 {
12881   struct remote_state *rs = get_remote_state ();
12882
12883   if (packet_support (PACKET_DisconnectedTracing_feature) == PACKET_ENABLE)
12884     {
12885       char *reply;
12886
12887       xsnprintf (rs->buf, get_remote_packet_size (), "QTDisconnected:%x", val);
12888       putpkt (rs->buf);
12889       reply = remote_get_noisy_reply ();
12890       if (*reply == '\0')
12891         error (_("Target does not support this command."));
12892       if (strcmp (reply, "OK") != 0)
12893         error (_("Bogus reply from target: %s"), reply);
12894     }
12895   else if (val)
12896     warning (_("Target does not support disconnected tracing."));
12897 }
12898
12899 static int
12900 remote_core_of_thread (struct target_ops *ops, ptid_t ptid)
12901 {
12902   struct thread_info *info = find_thread_ptid (ptid);
12903
12904   if (info != NULL && info->priv != NULL)
12905     return get_remote_thread_info (info)->core;
12906
12907   return -1;
12908 }
12909
12910 static void
12911 remote_set_circular_trace_buffer (struct target_ops *self, int val)
12912 {
12913   struct remote_state *rs = get_remote_state ();
12914   char *reply;
12915
12916   xsnprintf (rs->buf, get_remote_packet_size (), "QTBuffer:circular:%x", val);
12917   putpkt (rs->buf);
12918   reply = remote_get_noisy_reply ();
12919   if (*reply == '\0')
12920     error (_("Target does not support this command."));
12921   if (strcmp (reply, "OK") != 0)
12922     error (_("Bogus reply from target: %s"), reply);
12923 }
12924
12925 static traceframe_info_up
12926 remote_traceframe_info (struct target_ops *self)
12927 {
12928   gdb::unique_xmalloc_ptr<char> text
12929     = target_read_stralloc (&current_target, TARGET_OBJECT_TRACEFRAME_INFO,
12930                             NULL);
12931   if (text != NULL)
12932     return parse_traceframe_info (text.get ());
12933
12934   return NULL;
12935 }
12936
12937 /* Handle the qTMinFTPILen packet.  Returns the minimum length of
12938    instruction on which a fast tracepoint may be placed.  Returns -1
12939    if the packet is not supported, and 0 if the minimum instruction
12940    length is unknown.  */
12941
12942 static int
12943 remote_get_min_fast_tracepoint_insn_len (struct target_ops *self)
12944 {
12945   struct remote_state *rs = get_remote_state ();
12946   char *reply;
12947
12948   /* If we're not debugging a process yet, the IPA can't be
12949      loaded.  */
12950   if (!target_has_execution)
12951     return 0;
12952
12953   /* Make sure the remote is pointing at the right process.  */
12954   set_general_process ();
12955
12956   xsnprintf (rs->buf, get_remote_packet_size (), "qTMinFTPILen");
12957   putpkt (rs->buf);
12958   reply = remote_get_noisy_reply ();
12959   if (*reply == '\0')
12960     return -1;
12961   else
12962     {
12963       ULONGEST min_insn_len;
12964
12965       unpack_varlen_hex (reply, &min_insn_len);
12966
12967       return (int) min_insn_len;
12968     }
12969 }
12970
12971 static void
12972 remote_set_trace_buffer_size (struct target_ops *self, LONGEST val)
12973 {
12974   if (packet_support (PACKET_QTBuffer_size) != PACKET_DISABLE)
12975     {
12976       struct remote_state *rs = get_remote_state ();
12977       char *buf = rs->buf;
12978       char *endbuf = rs->buf + get_remote_packet_size ();
12979       enum packet_result result;
12980
12981       gdb_assert (val >= 0 || val == -1);
12982       buf += xsnprintf (buf, endbuf - buf, "QTBuffer:size:");
12983       /* Send -1 as literal "-1" to avoid host size dependency.  */
12984       if (val < 0)
12985         {
12986           *buf++ = '-';
12987           buf += hexnumstr (buf, (ULONGEST) -val);
12988         }
12989       else
12990         buf += hexnumstr (buf, (ULONGEST) val);
12991
12992       putpkt (rs->buf);
12993       remote_get_noisy_reply ();
12994       result = packet_ok (rs->buf,
12995                   &remote_protocol_packets[PACKET_QTBuffer_size]);
12996
12997       if (result != PACKET_OK)
12998         warning (_("Bogus reply from target: %s"), rs->buf);
12999     }
13000 }
13001
13002 static int
13003 remote_set_trace_notes (struct target_ops *self,
13004                         const char *user, const char *notes,
13005                         const char *stop_notes)
13006 {
13007   struct remote_state *rs = get_remote_state ();
13008   char *reply;
13009   char *buf = rs->buf;
13010   char *endbuf = rs->buf + get_remote_packet_size ();
13011   int nbytes;
13012
13013   buf += xsnprintf (buf, endbuf - buf, "QTNotes:");
13014   if (user)
13015     {
13016       buf += xsnprintf (buf, endbuf - buf, "user:");
13017       nbytes = bin2hex ((gdb_byte *) user, buf, strlen (user));
13018       buf += 2 * nbytes;
13019       *buf++ = ';';
13020     }
13021   if (notes)
13022     {
13023       buf += xsnprintf (buf, endbuf - buf, "notes:");
13024       nbytes = bin2hex ((gdb_byte *) notes, buf, strlen (notes));
13025       buf += 2 * nbytes;
13026       *buf++ = ';';
13027     }
13028   if (stop_notes)
13029     {
13030       buf += xsnprintf (buf, endbuf - buf, "tstop:");
13031       nbytes = bin2hex ((gdb_byte *) stop_notes, buf, strlen (stop_notes));
13032       buf += 2 * nbytes;
13033       *buf++ = ';';
13034     }
13035   /* Ensure the buffer is terminated.  */
13036   *buf = '\0';
13037
13038   putpkt (rs->buf);
13039   reply = remote_get_noisy_reply ();
13040   if (*reply == '\0')
13041     return 0;
13042
13043   if (strcmp (reply, "OK") != 0)
13044     error (_("Bogus reply from target: %s"), reply);
13045
13046   return 1;
13047 }
13048
13049 static int
13050 remote_use_agent (struct target_ops *self, int use)
13051 {
13052   if (packet_support (PACKET_QAgent) != PACKET_DISABLE)
13053     {
13054       struct remote_state *rs = get_remote_state ();
13055
13056       /* If the stub supports QAgent.  */
13057       xsnprintf (rs->buf, get_remote_packet_size (), "QAgent:%d", use);
13058       putpkt (rs->buf);
13059       getpkt (&rs->buf, &rs->buf_size, 0);
13060
13061       if (strcmp (rs->buf, "OK") == 0)
13062         {
13063           use_agent = use;
13064           return 1;
13065         }
13066     }
13067
13068   return 0;
13069 }
13070
13071 static int
13072 remote_can_use_agent (struct target_ops *self)
13073 {
13074   return (packet_support (PACKET_QAgent) != PACKET_DISABLE);
13075 }
13076
13077 struct btrace_target_info
13078 {
13079   /* The ptid of the traced thread.  */
13080   ptid_t ptid;
13081
13082   /* The obtained branch trace configuration.  */
13083   struct btrace_config conf;
13084 };
13085
13086 /* Reset our idea of our target's btrace configuration.  */
13087
13088 static void
13089 remote_btrace_reset (void)
13090 {
13091   struct remote_state *rs = get_remote_state ();
13092
13093   memset (&rs->btrace_config, 0, sizeof (rs->btrace_config));
13094 }
13095
13096 /* Check whether the target supports branch tracing.  */
13097
13098 static int
13099 remote_supports_btrace (struct target_ops *self, enum btrace_format format)
13100 {
13101   if (packet_support (PACKET_Qbtrace_off) != PACKET_ENABLE)
13102     return 0;
13103   if (packet_support (PACKET_qXfer_btrace) != PACKET_ENABLE)
13104     return 0;
13105
13106   switch (format)
13107     {
13108       case BTRACE_FORMAT_NONE:
13109         return 0;
13110
13111       case BTRACE_FORMAT_BTS:
13112         return (packet_support (PACKET_Qbtrace_bts) == PACKET_ENABLE);
13113
13114       case BTRACE_FORMAT_PT:
13115         /* The trace is decoded on the host.  Even if our target supports it,
13116            we still need to have libipt to decode the trace.  */
13117 #if defined (HAVE_LIBIPT)
13118         return (packet_support (PACKET_Qbtrace_pt) == PACKET_ENABLE);
13119 #else /* !defined (HAVE_LIBIPT)  */
13120         return 0;
13121 #endif /* !defined (HAVE_LIBIPT)  */
13122     }
13123
13124   internal_error (__FILE__, __LINE__, _("Unknown branch trace format"));
13125 }
13126
13127 /* Synchronize the configuration with the target.  */
13128
13129 static void
13130 btrace_sync_conf (const struct btrace_config *conf)
13131 {
13132   struct packet_config *packet;
13133   struct remote_state *rs;
13134   char *buf, *pos, *endbuf;
13135
13136   rs = get_remote_state ();
13137   buf = rs->buf;
13138   endbuf = buf + get_remote_packet_size ();
13139
13140   packet = &remote_protocol_packets[PACKET_Qbtrace_conf_bts_size];
13141   if (packet_config_support (packet) == PACKET_ENABLE
13142       && conf->bts.size != rs->btrace_config.bts.size)
13143     {
13144       pos = buf;
13145       pos += xsnprintf (pos, endbuf - pos, "%s=0x%x", packet->name,
13146                         conf->bts.size);
13147
13148       putpkt (buf);
13149       getpkt (&buf, &rs->buf_size, 0);
13150
13151       if (packet_ok (buf, packet) == PACKET_ERROR)
13152         {
13153           if (buf[0] == 'E' && buf[1] == '.')
13154             error (_("Failed to configure the BTS buffer size: %s"), buf + 2);
13155           else
13156             error (_("Failed to configure the BTS buffer size."));
13157         }
13158
13159       rs->btrace_config.bts.size = conf->bts.size;
13160     }
13161
13162   packet = &remote_protocol_packets[PACKET_Qbtrace_conf_pt_size];
13163   if (packet_config_support (packet) == PACKET_ENABLE
13164       && conf->pt.size != rs->btrace_config.pt.size)
13165     {
13166       pos = buf;
13167       pos += xsnprintf (pos, endbuf - pos, "%s=0x%x", packet->name,
13168                         conf->pt.size);
13169
13170       putpkt (buf);
13171       getpkt (&buf, &rs->buf_size, 0);
13172
13173       if (packet_ok (buf, packet) == PACKET_ERROR)
13174         {
13175           if (buf[0] == 'E' && buf[1] == '.')
13176             error (_("Failed to configure the trace buffer size: %s"), buf + 2);
13177           else
13178             error (_("Failed to configure the trace buffer size."));
13179         }
13180
13181       rs->btrace_config.pt.size = conf->pt.size;
13182     }
13183 }
13184
13185 /* Read the current thread's btrace configuration from the target and
13186    store it into CONF.  */
13187
13188 static void
13189 btrace_read_config (struct btrace_config *conf)
13190 {
13191   gdb::unique_xmalloc_ptr<char> xml
13192     = target_read_stralloc (&current_target, TARGET_OBJECT_BTRACE_CONF, "");
13193   if (xml != NULL)
13194     parse_xml_btrace_conf (conf, xml.get ());
13195 }
13196
13197 /* Maybe reopen target btrace.  */
13198
13199 static void
13200 remote_btrace_maybe_reopen (void)
13201 {
13202   struct remote_state *rs = get_remote_state ();
13203   struct thread_info *tp;
13204   int btrace_target_pushed = 0;
13205   int warned = 0;
13206
13207   scoped_restore_current_thread restore_thread;
13208
13209   ALL_NON_EXITED_THREADS (tp)
13210     {
13211       set_general_thread (tp->ptid);
13212
13213       memset (&rs->btrace_config, 0x00, sizeof (struct btrace_config));
13214       btrace_read_config (&rs->btrace_config);
13215
13216       if (rs->btrace_config.format == BTRACE_FORMAT_NONE)
13217         continue;
13218
13219 #if !defined (HAVE_LIBIPT)
13220       if (rs->btrace_config.format == BTRACE_FORMAT_PT)
13221         {
13222           if (!warned)
13223             {
13224               warned = 1;
13225               warning (_("GDB does not support Intel Processor Trace. "
13226                          "\"record\" will not work in this session."));
13227             }
13228
13229           continue;
13230         }
13231 #endif /* !defined (HAVE_LIBIPT) */
13232
13233       /* Push target, once, but before anything else happens.  This way our
13234          changes to the threads will be cleaned up by unpushing the target
13235          in case btrace_read_config () throws.  */
13236       if (!btrace_target_pushed)
13237         {
13238           btrace_target_pushed = 1;
13239           record_btrace_push_target ();
13240           printf_filtered (_("Target is recording using %s.\n"),
13241                            btrace_format_string (rs->btrace_config.format));
13242         }
13243
13244       tp->btrace.target = XCNEW (struct btrace_target_info);
13245       tp->btrace.target->ptid = tp->ptid;
13246       tp->btrace.target->conf = rs->btrace_config;
13247     }
13248 }
13249
13250 /* Enable branch tracing.  */
13251
13252 static struct btrace_target_info *
13253 remote_enable_btrace (struct target_ops *self, ptid_t ptid,
13254                       const struct btrace_config *conf)
13255 {
13256   struct btrace_target_info *tinfo = NULL;
13257   struct packet_config *packet = NULL;
13258   struct remote_state *rs = get_remote_state ();
13259   char *buf = rs->buf;
13260   char *endbuf = rs->buf + get_remote_packet_size ();
13261
13262   switch (conf->format)
13263     {
13264       case BTRACE_FORMAT_BTS:
13265         packet = &remote_protocol_packets[PACKET_Qbtrace_bts];
13266         break;
13267
13268       case BTRACE_FORMAT_PT:
13269         packet = &remote_protocol_packets[PACKET_Qbtrace_pt];
13270         break;
13271     }
13272
13273   if (packet == NULL || packet_config_support (packet) != PACKET_ENABLE)
13274     error (_("Target does not support branch tracing."));
13275
13276   btrace_sync_conf (conf);
13277
13278   set_general_thread (ptid);
13279
13280   buf += xsnprintf (buf, endbuf - buf, "%s", packet->name);
13281   putpkt (rs->buf);
13282   getpkt (&rs->buf, &rs->buf_size, 0);
13283
13284   if (packet_ok (rs->buf, packet) == PACKET_ERROR)
13285     {
13286       if (rs->buf[0] == 'E' && rs->buf[1] == '.')
13287         error (_("Could not enable branch tracing for %s: %s"),
13288                target_pid_to_str (ptid), rs->buf + 2);
13289       else
13290         error (_("Could not enable branch tracing for %s."),
13291                target_pid_to_str (ptid));
13292     }
13293
13294   tinfo = XCNEW (struct btrace_target_info);
13295   tinfo->ptid = ptid;
13296
13297   /* If we fail to read the configuration, we lose some information, but the
13298      tracing itself is not impacted.  */
13299   TRY
13300     {
13301       btrace_read_config (&tinfo->conf);
13302     }
13303   CATCH (err, RETURN_MASK_ERROR)
13304     {
13305       if (err.message != NULL)
13306         warning ("%s", err.message);
13307     }
13308   END_CATCH
13309
13310   return tinfo;
13311 }
13312
13313 /* Disable branch tracing.  */
13314
13315 static void
13316 remote_disable_btrace (struct target_ops *self,
13317                        struct btrace_target_info *tinfo)
13318 {
13319   struct packet_config *packet = &remote_protocol_packets[PACKET_Qbtrace_off];
13320   struct remote_state *rs = get_remote_state ();
13321   char *buf = rs->buf;
13322   char *endbuf = rs->buf + get_remote_packet_size ();
13323
13324   if (packet_config_support (packet) != PACKET_ENABLE)
13325     error (_("Target does not support branch tracing."));
13326
13327   set_general_thread (tinfo->ptid);
13328
13329   buf += xsnprintf (buf, endbuf - buf, "%s", packet->name);
13330   putpkt (rs->buf);
13331   getpkt (&rs->buf, &rs->buf_size, 0);
13332
13333   if (packet_ok (rs->buf, packet) == PACKET_ERROR)
13334     {
13335       if (rs->buf[0] == 'E' && rs->buf[1] == '.')
13336         error (_("Could not disable branch tracing for %s: %s"),
13337                target_pid_to_str (tinfo->ptid), rs->buf + 2);
13338       else
13339         error (_("Could not disable branch tracing for %s."),
13340                target_pid_to_str (tinfo->ptid));
13341     }
13342
13343   xfree (tinfo);
13344 }
13345
13346 /* Teardown branch tracing.  */
13347
13348 static void
13349 remote_teardown_btrace (struct target_ops *self,
13350                         struct btrace_target_info *tinfo)
13351 {
13352   /* We must not talk to the target during teardown.  */
13353   xfree (tinfo);
13354 }
13355
13356 /* Read the branch trace.  */
13357
13358 static enum btrace_error
13359 remote_read_btrace (struct target_ops *self,
13360                     struct btrace_data *btrace,
13361                     struct btrace_target_info *tinfo,
13362                     enum btrace_read_type type)
13363 {
13364   struct packet_config *packet = &remote_protocol_packets[PACKET_qXfer_btrace];
13365   const char *annex;
13366
13367   if (packet_config_support (packet) != PACKET_ENABLE)
13368     error (_("Target does not support branch tracing."));
13369
13370 #if !defined(HAVE_LIBEXPAT)
13371   error (_("Cannot process branch tracing result. XML parsing not supported."));
13372 #endif
13373
13374   switch (type)
13375     {
13376     case BTRACE_READ_ALL:
13377       annex = "all";
13378       break;
13379     case BTRACE_READ_NEW:
13380       annex = "new";
13381       break;
13382     case BTRACE_READ_DELTA:
13383       annex = "delta";
13384       break;
13385     default:
13386       internal_error (__FILE__, __LINE__,
13387                       _("Bad branch tracing read type: %u."),
13388                       (unsigned int) type);
13389     }
13390
13391   gdb::unique_xmalloc_ptr<char> xml
13392     = target_read_stralloc (&current_target, TARGET_OBJECT_BTRACE, annex);
13393   if (xml == NULL)
13394     return BTRACE_ERR_UNKNOWN;
13395
13396   parse_xml_btrace (btrace, xml.get ());
13397
13398   return BTRACE_ERR_NONE;
13399 }
13400
13401 static const struct btrace_config *
13402 remote_btrace_conf (struct target_ops *self,
13403                     const struct btrace_target_info *tinfo)
13404 {
13405   return &tinfo->conf;
13406 }
13407
13408 static int
13409 remote_augmented_libraries_svr4_read (struct target_ops *self)
13410 {
13411   return (packet_support (PACKET_augmented_libraries_svr4_read_feature)
13412           == PACKET_ENABLE);
13413 }
13414
13415 /* Implementation of to_load.  */
13416
13417 static void
13418 remote_load (struct target_ops *self, const char *name, int from_tty)
13419 {
13420   generic_load (name, from_tty);
13421 }
13422
13423 /* Accepts an integer PID; returns a string representing a file that
13424    can be opened on the remote side to get the symbols for the child
13425    process.  Returns NULL if the operation is not supported.  */
13426
13427 static char *
13428 remote_pid_to_exec_file (struct target_ops *self, int pid)
13429 {
13430   static gdb::unique_xmalloc_ptr<char> filename;
13431   struct inferior *inf;
13432   char *annex = NULL;
13433
13434   if (packet_support (PACKET_qXfer_exec_file) != PACKET_ENABLE)
13435     return NULL;
13436
13437   inf = find_inferior_pid (pid);
13438   if (inf == NULL)
13439     internal_error (__FILE__, __LINE__,
13440                     _("not currently attached to process %d"), pid);
13441
13442   if (!inf->fake_pid_p)
13443     {
13444       const int annex_size = 9;
13445
13446       annex = (char *) alloca (annex_size);
13447       xsnprintf (annex, annex_size, "%x", pid);
13448     }
13449
13450   filename = target_read_stralloc (&current_target,
13451                                    TARGET_OBJECT_EXEC_FILE, annex);
13452
13453   return filename.get ();
13454 }
13455
13456 /* Implement the to_can_do_single_step target_ops method.  */
13457
13458 static int
13459 remote_can_do_single_step (struct target_ops *ops)
13460 {
13461   /* We can only tell whether target supports single step or not by
13462      supported s and S vCont actions if the stub supports vContSupported
13463      feature.  If the stub doesn't support vContSupported feature,
13464      we have conservatively to think target doesn't supports single
13465      step.  */
13466   if (packet_support (PACKET_vContSupported) == PACKET_ENABLE)
13467     {
13468       struct remote_state *rs = get_remote_state ();
13469
13470       if (packet_support (PACKET_vCont) == PACKET_SUPPORT_UNKNOWN)
13471         remote_vcont_probe (rs);
13472
13473       return rs->supports_vCont.s && rs->supports_vCont.S;
13474     }
13475   else
13476     return 0;
13477 }
13478
13479 /* Implementation of the to_execution_direction method for the remote
13480    target.  */
13481
13482 static enum exec_direction_kind
13483 remote_execution_direction (struct target_ops *self)
13484 {
13485   struct remote_state *rs = get_remote_state ();
13486
13487   return rs->last_resume_exec_dir;
13488 }
13489
13490 /* Return pointer to the thread_info struct which corresponds to
13491    THREAD_HANDLE (having length HANDLE_LEN).  */
13492
13493 static struct thread_info *
13494 remote_thread_handle_to_thread_info (struct target_ops *ops,
13495                                      const gdb_byte *thread_handle,
13496                                      int handle_len,
13497                                      struct inferior *inf)
13498 {
13499   struct thread_info *tp;
13500
13501   ALL_NON_EXITED_THREADS (tp)
13502     {
13503       remote_thread_info *priv = get_remote_thread_info (tp);
13504
13505       if (tp->inf == inf && priv != NULL)
13506         {
13507           if (handle_len != priv->thread_handle.size ())
13508             error (_("Thread handle size mismatch: %d vs %zu (from remote)"),
13509                    handle_len, priv->thread_handle.size ());
13510           if (memcmp (thread_handle, priv->thread_handle.data (),
13511                       handle_len) == 0)
13512             return tp;
13513         }
13514     }
13515
13516   return NULL;
13517 }
13518
13519 static void
13520 init_remote_ops (void)
13521 {
13522   remote_ops.to_shortname = "remote";
13523   remote_ops.to_longname = "Remote serial target in gdb-specific protocol";
13524   remote_ops.to_doc =
13525     "Use a remote computer via a serial line, using a gdb-specific protocol.\n\
13526 Specify the serial device it is connected to\n\
13527 (e.g. /dev/ttyS0, /dev/ttya, COM1, etc.).";
13528   remote_ops.to_open = remote_open;
13529   remote_ops.to_close = remote_close;
13530   remote_ops.to_detach = remote_detach;
13531   remote_ops.to_disconnect = remote_disconnect;
13532   remote_ops.to_resume = remote_resume;
13533   remote_ops.to_commit_resume = remote_commit_resume;
13534   remote_ops.to_wait = remote_wait;
13535   remote_ops.to_fetch_registers = remote_fetch_registers;
13536   remote_ops.to_store_registers = remote_store_registers;
13537   remote_ops.to_prepare_to_store = remote_prepare_to_store;
13538   remote_ops.to_files_info = remote_files_info;
13539   remote_ops.to_insert_breakpoint = remote_insert_breakpoint;
13540   remote_ops.to_remove_breakpoint = remote_remove_breakpoint;
13541   remote_ops.to_stopped_by_sw_breakpoint = remote_stopped_by_sw_breakpoint;
13542   remote_ops.to_supports_stopped_by_sw_breakpoint = remote_supports_stopped_by_sw_breakpoint;
13543   remote_ops.to_stopped_by_hw_breakpoint = remote_stopped_by_hw_breakpoint;
13544   remote_ops.to_supports_stopped_by_hw_breakpoint = remote_supports_stopped_by_hw_breakpoint;
13545   remote_ops.to_stopped_by_watchpoint = remote_stopped_by_watchpoint;
13546   remote_ops.to_stopped_data_address = remote_stopped_data_address;
13547   remote_ops.to_watchpoint_addr_within_range =
13548     remote_watchpoint_addr_within_range;
13549   remote_ops.to_can_use_hw_breakpoint = remote_check_watch_resources;
13550   remote_ops.to_insert_hw_breakpoint = remote_insert_hw_breakpoint;
13551   remote_ops.to_remove_hw_breakpoint = remote_remove_hw_breakpoint;
13552   remote_ops.to_region_ok_for_hw_watchpoint
13553      = remote_region_ok_for_hw_watchpoint;
13554   remote_ops.to_insert_watchpoint = remote_insert_watchpoint;
13555   remote_ops.to_remove_watchpoint = remote_remove_watchpoint;
13556   remote_ops.to_kill = remote_kill;
13557   remote_ops.to_load = remote_load;
13558   remote_ops.to_mourn_inferior = remote_mourn;
13559   remote_ops.to_pass_signals = remote_pass_signals;
13560   remote_ops.to_set_syscall_catchpoint = remote_set_syscall_catchpoint;
13561   remote_ops.to_program_signals = remote_program_signals;
13562   remote_ops.to_thread_alive = remote_thread_alive;
13563   remote_ops.to_thread_name = remote_thread_name;
13564   remote_ops.to_update_thread_list = remote_update_thread_list;
13565   remote_ops.to_pid_to_str = remote_pid_to_str;
13566   remote_ops.to_extra_thread_info = remote_threads_extra_info;
13567   remote_ops.to_get_ada_task_ptid = remote_get_ada_task_ptid;
13568   remote_ops.to_stop = remote_stop;
13569   remote_ops.to_interrupt = remote_interrupt;
13570   remote_ops.to_pass_ctrlc = remote_pass_ctrlc;
13571   remote_ops.to_xfer_partial = remote_xfer_partial;
13572   remote_ops.to_get_memory_xfer_limit = remote_get_memory_xfer_limit;
13573   remote_ops.to_rcmd = remote_rcmd;
13574   remote_ops.to_pid_to_exec_file = remote_pid_to_exec_file;
13575   remote_ops.to_log_command = serial_log_command;
13576   remote_ops.to_get_thread_local_address = remote_get_thread_local_address;
13577   remote_ops.to_stratum = process_stratum;
13578   remote_ops.to_has_all_memory = default_child_has_all_memory;
13579   remote_ops.to_has_memory = default_child_has_memory;
13580   remote_ops.to_has_stack = default_child_has_stack;
13581   remote_ops.to_has_registers = default_child_has_registers;
13582   remote_ops.to_has_execution = default_child_has_execution;
13583   remote_ops.to_has_thread_control = tc_schedlock;    /* can lock scheduler */
13584   remote_ops.to_can_execute_reverse = remote_can_execute_reverse;
13585   remote_ops.to_magic = OPS_MAGIC;
13586   remote_ops.to_memory_map = remote_memory_map;
13587   remote_ops.to_flash_erase = remote_flash_erase;
13588   remote_ops.to_flash_done = remote_flash_done;
13589   remote_ops.to_read_description = remote_read_description;
13590   remote_ops.to_search_memory = remote_search_memory;
13591   remote_ops.to_can_async_p = remote_can_async_p;
13592   remote_ops.to_is_async_p = remote_is_async_p;
13593   remote_ops.to_async = remote_async;
13594   remote_ops.to_thread_events = remote_thread_events;
13595   remote_ops.to_can_do_single_step = remote_can_do_single_step;
13596   remote_ops.to_terminal_inferior = remote_terminal_inferior;
13597   remote_ops.to_terminal_ours = remote_terminal_ours;
13598   remote_ops.to_supports_non_stop = remote_supports_non_stop;
13599   remote_ops.to_supports_multi_process = remote_supports_multi_process;
13600   remote_ops.to_supports_disable_randomization
13601     = remote_supports_disable_randomization;
13602   remote_ops.to_filesystem_is_local = remote_filesystem_is_local;
13603   remote_ops.to_fileio_open = remote_hostio_open;
13604   remote_ops.to_fileio_pwrite = remote_hostio_pwrite;
13605   remote_ops.to_fileio_pread = remote_hostio_pread;
13606   remote_ops.to_fileio_fstat = remote_hostio_fstat;
13607   remote_ops.to_fileio_close = remote_hostio_close;
13608   remote_ops.to_fileio_unlink = remote_hostio_unlink;
13609   remote_ops.to_fileio_readlink = remote_hostio_readlink;
13610   remote_ops.to_supports_enable_disable_tracepoint = remote_supports_enable_disable_tracepoint;
13611   remote_ops.to_supports_string_tracing = remote_supports_string_tracing;
13612   remote_ops.to_supports_evaluation_of_breakpoint_conditions = remote_supports_cond_breakpoints;
13613   remote_ops.to_can_run_breakpoint_commands = remote_can_run_breakpoint_commands;
13614   remote_ops.to_trace_init = remote_trace_init;
13615   remote_ops.to_download_tracepoint = remote_download_tracepoint;
13616   remote_ops.to_can_download_tracepoint = remote_can_download_tracepoint;
13617   remote_ops.to_download_trace_state_variable
13618     = remote_download_trace_state_variable;
13619   remote_ops.to_enable_tracepoint = remote_enable_tracepoint;
13620   remote_ops.to_disable_tracepoint = remote_disable_tracepoint;
13621   remote_ops.to_trace_set_readonly_regions = remote_trace_set_readonly_regions;
13622   remote_ops.to_trace_start = remote_trace_start;
13623   remote_ops.to_get_trace_status = remote_get_trace_status;
13624   remote_ops.to_get_tracepoint_status = remote_get_tracepoint_status;
13625   remote_ops.to_trace_stop = remote_trace_stop;
13626   remote_ops.to_trace_find = remote_trace_find;
13627   remote_ops.to_get_trace_state_variable_value
13628     = remote_get_trace_state_variable_value;
13629   remote_ops.to_save_trace_data = remote_save_trace_data;
13630   remote_ops.to_upload_tracepoints = remote_upload_tracepoints;
13631   remote_ops.to_upload_trace_state_variables
13632     = remote_upload_trace_state_variables;
13633   remote_ops.to_get_raw_trace_data = remote_get_raw_trace_data;
13634   remote_ops.to_get_min_fast_tracepoint_insn_len = remote_get_min_fast_tracepoint_insn_len;
13635   remote_ops.to_set_disconnected_tracing = remote_set_disconnected_tracing;
13636   remote_ops.to_set_circular_trace_buffer = remote_set_circular_trace_buffer;
13637   remote_ops.to_set_trace_buffer_size = remote_set_trace_buffer_size;
13638   remote_ops.to_set_trace_notes = remote_set_trace_notes;
13639   remote_ops.to_core_of_thread = remote_core_of_thread;
13640   remote_ops.to_verify_memory = remote_verify_memory;
13641   remote_ops.to_get_tib_address = remote_get_tib_address;
13642   remote_ops.to_set_permissions = remote_set_permissions;
13643   remote_ops.to_static_tracepoint_marker_at
13644     = remote_static_tracepoint_marker_at;
13645   remote_ops.to_static_tracepoint_markers_by_strid
13646     = remote_static_tracepoint_markers_by_strid;
13647   remote_ops.to_traceframe_info = remote_traceframe_info;
13648   remote_ops.to_use_agent = remote_use_agent;
13649   remote_ops.to_can_use_agent = remote_can_use_agent;
13650   remote_ops.to_supports_btrace = remote_supports_btrace;
13651   remote_ops.to_enable_btrace = remote_enable_btrace;
13652   remote_ops.to_disable_btrace = remote_disable_btrace;
13653   remote_ops.to_teardown_btrace = remote_teardown_btrace;
13654   remote_ops.to_read_btrace = remote_read_btrace;
13655   remote_ops.to_btrace_conf = remote_btrace_conf;
13656   remote_ops.to_augmented_libraries_svr4_read =
13657     remote_augmented_libraries_svr4_read;
13658   remote_ops.to_follow_fork = remote_follow_fork;
13659   remote_ops.to_follow_exec = remote_follow_exec;
13660   remote_ops.to_insert_fork_catchpoint = remote_insert_fork_catchpoint;
13661   remote_ops.to_remove_fork_catchpoint = remote_remove_fork_catchpoint;
13662   remote_ops.to_insert_vfork_catchpoint = remote_insert_vfork_catchpoint;
13663   remote_ops.to_remove_vfork_catchpoint = remote_remove_vfork_catchpoint;
13664   remote_ops.to_insert_exec_catchpoint = remote_insert_exec_catchpoint;
13665   remote_ops.to_remove_exec_catchpoint = remote_remove_exec_catchpoint;
13666   remote_ops.to_execution_direction = remote_execution_direction;
13667   remote_ops.to_thread_handle_to_thread_info =
13668     remote_thread_handle_to_thread_info;
13669 }
13670
13671 /* Set up the extended remote vector by making a copy of the standard
13672    remote vector and adding to it.  */
13673
13674 static void
13675 init_extended_remote_ops (void)
13676 {
13677   extended_remote_ops = remote_ops;
13678
13679   extended_remote_ops.to_shortname = "extended-remote";
13680   extended_remote_ops.to_longname =
13681     "Extended remote serial target in gdb-specific protocol";
13682   extended_remote_ops.to_doc =
13683     "Use a remote computer via a serial line, using a gdb-specific protocol.\n\
13684 Specify the serial device it is connected to (e.g. /dev/ttya).";
13685   extended_remote_ops.to_open = extended_remote_open;
13686   extended_remote_ops.to_create_inferior = extended_remote_create_inferior;
13687   extended_remote_ops.to_detach = extended_remote_detach;
13688   extended_remote_ops.to_attach = extended_remote_attach;
13689   extended_remote_ops.to_post_attach = extended_remote_post_attach;
13690   extended_remote_ops.to_supports_disable_randomization
13691     = extended_remote_supports_disable_randomization;
13692 }
13693
13694 static int
13695 remote_can_async_p (struct target_ops *ops)
13696 {
13697   struct remote_state *rs = get_remote_state ();
13698
13699   /* We don't go async if the user has explicitly prevented it with the
13700      "maint set target-async" command.  */
13701   if (!target_async_permitted)
13702     return 0;
13703
13704   /* We're async whenever the serial device is.  */
13705   return serial_can_async_p (rs->remote_desc);
13706 }
13707
13708 static int
13709 remote_is_async_p (struct target_ops *ops)
13710 {
13711   struct remote_state *rs = get_remote_state ();
13712
13713   if (!target_async_permitted)
13714     /* We only enable async when the user specifically asks for it.  */
13715     return 0;
13716
13717   /* We're async whenever the serial device is.  */
13718   return serial_is_async_p (rs->remote_desc);
13719 }
13720
13721 /* Pass the SERIAL event on and up to the client.  One day this code
13722    will be able to delay notifying the client of an event until the
13723    point where an entire packet has been received.  */
13724
13725 static serial_event_ftype remote_async_serial_handler;
13726
13727 static void
13728 remote_async_serial_handler (struct serial *scb, void *context)
13729 {
13730   /* Don't propogate error information up to the client.  Instead let
13731      the client find out about the error by querying the target.  */
13732   inferior_event_handler (INF_REG_EVENT, NULL);
13733 }
13734
13735 static void
13736 remote_async_inferior_event_handler (gdb_client_data data)
13737 {
13738   inferior_event_handler (INF_REG_EVENT, NULL);
13739 }
13740
13741 static void
13742 remote_async (struct target_ops *ops, int enable)
13743 {
13744   struct remote_state *rs = get_remote_state ();
13745
13746   if (enable)
13747     {
13748       serial_async (rs->remote_desc, remote_async_serial_handler, rs);
13749
13750       /* If there are pending events in the stop reply queue tell the
13751          event loop to process them.  */
13752       if (!QUEUE_is_empty (stop_reply_p, stop_reply_queue))
13753         mark_async_event_handler (remote_async_inferior_event_token);
13754       /* For simplicity, below we clear the pending events token
13755          without remembering whether it is marked, so here we always
13756          mark it.  If there's actually no pending notification to
13757          process, this ends up being a no-op (other than a spurious
13758          event-loop wakeup).  */
13759       if (target_is_non_stop_p ())
13760         mark_async_event_handler (rs->notif_state->get_pending_events_token);
13761     }
13762   else
13763     {
13764       serial_async (rs->remote_desc, NULL, NULL);
13765       /* If the core is disabling async, it doesn't want to be
13766          disturbed with target events.  Clear all async event sources
13767          too.  */
13768       clear_async_event_handler (remote_async_inferior_event_token);
13769       if (target_is_non_stop_p ())
13770         clear_async_event_handler (rs->notif_state->get_pending_events_token);
13771     }
13772 }
13773
13774 /* Implementation of the to_thread_events method.  */
13775
13776 static void
13777 remote_thread_events (struct target_ops *ops, int enable)
13778 {
13779   struct remote_state *rs = get_remote_state ();
13780   size_t size = get_remote_packet_size ();
13781
13782   if (packet_support (PACKET_QThreadEvents) == PACKET_DISABLE)
13783     return;
13784
13785   xsnprintf (rs->buf, size, "QThreadEvents:%x", enable ? 1 : 0);
13786   putpkt (rs->buf);
13787   getpkt (&rs->buf, &rs->buf_size, 0);
13788
13789   switch (packet_ok (rs->buf,
13790                      &remote_protocol_packets[PACKET_QThreadEvents]))
13791     {
13792     case PACKET_OK:
13793       if (strcmp (rs->buf, "OK") != 0)
13794         error (_("Remote refused setting thread events: %s"), rs->buf);
13795       break;
13796     case PACKET_ERROR:
13797       warning (_("Remote failure reply: %s"), rs->buf);
13798       break;
13799     case PACKET_UNKNOWN:
13800       break;
13801     }
13802 }
13803
13804 static void
13805 set_remote_cmd (const char *args, int from_tty)
13806 {
13807   help_list (remote_set_cmdlist, "set remote ", all_commands, gdb_stdout);
13808 }
13809
13810 static void
13811 show_remote_cmd (const char *args, int from_tty)
13812 {
13813   /* We can't just use cmd_show_list here, because we want to skip
13814      the redundant "show remote Z-packet" and the legacy aliases.  */
13815   struct cmd_list_element *list = remote_show_cmdlist;
13816   struct ui_out *uiout = current_uiout;
13817
13818   ui_out_emit_tuple tuple_emitter (uiout, "showlist");
13819   for (; list != NULL; list = list->next)
13820     if (strcmp (list->name, "Z-packet") == 0)
13821       continue;
13822     else if (list->type == not_set_cmd)
13823       /* Alias commands are exactly like the original, except they
13824          don't have the normal type.  */
13825       continue;
13826     else
13827       {
13828         ui_out_emit_tuple option_emitter (uiout, "option");
13829
13830         uiout->field_string ("name", list->name);
13831         uiout->text (":  ");
13832         if (list->type == show_cmd)
13833           do_show_command (NULL, from_tty, list);
13834         else
13835           cmd_func (list, NULL, from_tty);
13836       }
13837 }
13838
13839
13840 /* Function to be called whenever a new objfile (shlib) is detected.  */
13841 static void
13842 remote_new_objfile (struct objfile *objfile)
13843 {
13844   struct remote_state *rs = get_remote_state ();
13845
13846   if (rs->remote_desc != 0)             /* Have a remote connection.  */
13847     remote_check_symbols ();
13848 }
13849
13850 /* Pull all the tracepoints defined on the target and create local
13851    data structures representing them.  We don't want to create real
13852    tracepoints yet, we don't want to mess up the user's existing
13853    collection.  */
13854   
13855 static int
13856 remote_upload_tracepoints (struct target_ops *self, struct uploaded_tp **utpp)
13857 {
13858   struct remote_state *rs = get_remote_state ();
13859   char *p;
13860
13861   /* Ask for a first packet of tracepoint definition.  */
13862   putpkt ("qTfP");
13863   getpkt (&rs->buf, &rs->buf_size, 0);
13864   p = rs->buf;
13865   while (*p && *p != 'l')
13866     {
13867       parse_tracepoint_definition (p, utpp);
13868       /* Ask for another packet of tracepoint definition.  */
13869       putpkt ("qTsP");
13870       getpkt (&rs->buf, &rs->buf_size, 0);
13871       p = rs->buf;
13872     }
13873   return 0;
13874 }
13875
13876 static int
13877 remote_upload_trace_state_variables (struct target_ops *self,
13878                                      struct uploaded_tsv **utsvp)
13879 {
13880   struct remote_state *rs = get_remote_state ();
13881   char *p;
13882
13883   /* Ask for a first packet of variable definition.  */
13884   putpkt ("qTfV");
13885   getpkt (&rs->buf, &rs->buf_size, 0);
13886   p = rs->buf;
13887   while (*p && *p != 'l')
13888     {
13889       parse_tsv_definition (p, utsvp);
13890       /* Ask for another packet of variable definition.  */
13891       putpkt ("qTsV");
13892       getpkt (&rs->buf, &rs->buf_size, 0);
13893       p = rs->buf;
13894     }
13895   return 0;
13896 }
13897
13898 /* The "set/show range-stepping" show hook.  */
13899
13900 static void
13901 show_range_stepping (struct ui_file *file, int from_tty,
13902                      struct cmd_list_element *c,
13903                      const char *value)
13904 {
13905   fprintf_filtered (file,
13906                     _("Debugger's willingness to use range stepping "
13907                       "is %s.\n"), value);
13908 }
13909
13910 /* The "set/show range-stepping" set hook.  */
13911
13912 static void
13913 set_range_stepping (const char *ignore_args, int from_tty,
13914                     struct cmd_list_element *c)
13915 {
13916   struct remote_state *rs = get_remote_state ();
13917
13918   /* Whene enabling, check whether range stepping is actually
13919      supported by the target, and warn if not.  */
13920   if (use_range_stepping)
13921     {
13922       if (rs->remote_desc != NULL)
13923         {
13924           if (packet_support (PACKET_vCont) == PACKET_SUPPORT_UNKNOWN)
13925             remote_vcont_probe (rs);
13926
13927           if (packet_support (PACKET_vCont) == PACKET_ENABLE
13928               && rs->supports_vCont.r)
13929             return;
13930         }
13931
13932       warning (_("Range stepping is not supported by the current target"));
13933     }
13934 }
13935
13936 void
13937 _initialize_remote (void)
13938 {
13939   struct cmd_list_element *cmd;
13940   const char *cmd_name;
13941
13942   /* architecture specific data */
13943   remote_gdbarch_data_handle =
13944     gdbarch_data_register_post_init (init_remote_state);
13945   remote_g_packet_data_handle =
13946     gdbarch_data_register_pre_init (remote_g_packet_data_init);
13947
13948   remote_pspace_data
13949     = register_program_space_data_with_cleanup (NULL,
13950                                                 remote_pspace_data_cleanup);
13951
13952   /* Initialize the per-target state.  At the moment there is only one
13953      of these, not one per target.  Only one target is active at a
13954      time.  */
13955   remote_state = new_remote_state ();
13956
13957   init_remote_ops ();
13958   add_target (&remote_ops);
13959
13960   init_extended_remote_ops ();
13961   add_target (&extended_remote_ops);
13962
13963   /* Hook into new objfile notification.  */
13964   observer_attach_new_objfile (remote_new_objfile);
13965   /* We're no longer interested in notification events of an inferior
13966      when it exits.  */
13967   observer_attach_inferior_exit (discard_pending_stop_replies);
13968
13969 #if 0
13970   init_remote_threadtests ();
13971 #endif
13972
13973   stop_reply_queue = QUEUE_alloc (stop_reply_p, stop_reply_xfree);
13974   /* set/show remote ...  */
13975
13976   add_prefix_cmd ("remote", class_maintenance, set_remote_cmd, _("\
13977 Remote protocol specific variables\n\
13978 Configure various remote-protocol specific variables such as\n\
13979 the packets being used"),
13980                   &remote_set_cmdlist, "set remote ",
13981                   0 /* allow-unknown */, &setlist);
13982   add_prefix_cmd ("remote", class_maintenance, show_remote_cmd, _("\
13983 Remote protocol specific variables\n\
13984 Configure various remote-protocol specific variables such as\n\
13985 the packets being used"),
13986                   &remote_show_cmdlist, "show remote ",
13987                   0 /* allow-unknown */, &showlist);
13988
13989   add_cmd ("compare-sections", class_obscure, compare_sections_command, _("\
13990 Compare section data on target to the exec file.\n\
13991 Argument is a single section name (default: all loaded sections).\n\
13992 To compare only read-only loaded sections, specify the -r option."),
13993            &cmdlist);
13994
13995   add_cmd ("packet", class_maintenance, packet_command, _("\
13996 Send an arbitrary packet to a remote target.\n\
13997    maintenance packet TEXT\n\
13998 If GDB is talking to an inferior via the GDB serial protocol, then\n\
13999 this command sends the string TEXT to the inferior, and displays the\n\
14000 response packet.  GDB supplies the initial `$' character, and the\n\
14001 terminating `#' character and checksum."),
14002            &maintenancelist);
14003
14004   add_setshow_boolean_cmd ("remotebreak", no_class, &remote_break, _("\
14005 Set whether to send break if interrupted."), _("\
14006 Show whether to send break if interrupted."), _("\
14007 If set, a break, instead of a cntrl-c, is sent to the remote target."),
14008                            set_remotebreak, show_remotebreak,
14009                            &setlist, &showlist);
14010   cmd_name = "remotebreak";
14011   cmd = lookup_cmd (&cmd_name, setlist, "", -1, 1);
14012   deprecate_cmd (cmd, "set remote interrupt-sequence");
14013   cmd_name = "remotebreak"; /* needed because lookup_cmd updates the pointer */
14014   cmd = lookup_cmd (&cmd_name, showlist, "", -1, 1);
14015   deprecate_cmd (cmd, "show remote interrupt-sequence");
14016
14017   add_setshow_enum_cmd ("interrupt-sequence", class_support,
14018                         interrupt_sequence_modes, &interrupt_sequence_mode,
14019                         _("\
14020 Set interrupt sequence to remote target."), _("\
14021 Show interrupt sequence to remote target."), _("\
14022 Valid value is \"Ctrl-C\", \"BREAK\" or \"BREAK-g\". The default is \"Ctrl-C\"."),
14023                         NULL, show_interrupt_sequence,
14024                         &remote_set_cmdlist,
14025                         &remote_show_cmdlist);
14026
14027   add_setshow_boolean_cmd ("interrupt-on-connect", class_support,
14028                            &interrupt_on_connect, _("\
14029 Set whether interrupt-sequence is sent to remote target when gdb connects to."), _("            \
14030 Show whether interrupt-sequence is sent to remote target when gdb connects to."), _("           \
14031 If set, interrupt sequence is sent to remote target."),
14032                            NULL, NULL,
14033                            &remote_set_cmdlist, &remote_show_cmdlist);
14034
14035   /* Install commands for configuring memory read/write packets.  */
14036
14037   add_cmd ("remotewritesize", no_class, set_memory_write_packet_size, _("\
14038 Set the maximum number of bytes per memory write packet (deprecated)."),
14039            &setlist);
14040   add_cmd ("remotewritesize", no_class, show_memory_write_packet_size, _("\
14041 Show the maximum number of bytes per memory write packet (deprecated)."),
14042            &showlist);
14043   add_cmd ("memory-write-packet-size", no_class,
14044            set_memory_write_packet_size, _("\
14045 Set the maximum number of bytes per memory-write packet.\n\
14046 Specify the number of bytes in a packet or 0 (zero) for the\n\
14047 default packet size.  The actual limit is further reduced\n\
14048 dependent on the target.  Specify ``fixed'' to disable the\n\
14049 further restriction and ``limit'' to enable that restriction."),
14050            &remote_set_cmdlist);
14051   add_cmd ("memory-read-packet-size", no_class,
14052            set_memory_read_packet_size, _("\
14053 Set the maximum number of bytes per memory-read packet.\n\
14054 Specify the number of bytes in a packet or 0 (zero) for the\n\
14055 default packet size.  The actual limit is further reduced\n\
14056 dependent on the target.  Specify ``fixed'' to disable the\n\
14057 further restriction and ``limit'' to enable that restriction."),
14058            &remote_set_cmdlist);
14059   add_cmd ("memory-write-packet-size", no_class,
14060            show_memory_write_packet_size,
14061            _("Show the maximum number of bytes per memory-write packet."),
14062            &remote_show_cmdlist);
14063   add_cmd ("memory-read-packet-size", no_class,
14064            show_memory_read_packet_size,
14065            _("Show the maximum number of bytes per memory-read packet."),
14066            &remote_show_cmdlist);
14067
14068   add_setshow_zinteger_cmd ("hardware-watchpoint-limit", no_class,
14069                             &remote_hw_watchpoint_limit, _("\
14070 Set the maximum number of target hardware watchpoints."), _("\
14071 Show the maximum number of target hardware watchpoints."), _("\
14072 Specify a negative limit for unlimited."),
14073                             NULL, NULL, /* FIXME: i18n: The maximum
14074                                            number of target hardware
14075                                            watchpoints is %s.  */
14076                             &remote_set_cmdlist, &remote_show_cmdlist);
14077   add_setshow_zinteger_cmd ("hardware-watchpoint-length-limit", no_class,
14078                             &remote_hw_watchpoint_length_limit, _("\
14079 Set the maximum length (in bytes) of a target hardware watchpoint."), _("\
14080 Show the maximum length (in bytes) of a target hardware watchpoint."), _("\
14081 Specify a negative limit for unlimited."),
14082                             NULL, NULL, /* FIXME: i18n: The maximum
14083                                            length (in bytes) of a target
14084                                            hardware watchpoint is %s.  */
14085                             &remote_set_cmdlist, &remote_show_cmdlist);
14086   add_setshow_zinteger_cmd ("hardware-breakpoint-limit", no_class,
14087                             &remote_hw_breakpoint_limit, _("\
14088 Set the maximum number of target hardware breakpoints."), _("\
14089 Show the maximum number of target hardware breakpoints."), _("\
14090 Specify a negative limit for unlimited."),
14091                             NULL, NULL, /* FIXME: i18n: The maximum
14092                                            number of target hardware
14093                                            breakpoints is %s.  */
14094                             &remote_set_cmdlist, &remote_show_cmdlist);
14095
14096   add_setshow_zuinteger_cmd ("remoteaddresssize", class_obscure,
14097                              &remote_address_size, _("\
14098 Set the maximum size of the address (in bits) in a memory packet."), _("\
14099 Show the maximum size of the address (in bits) in a memory packet."), NULL,
14100                              NULL,
14101                              NULL, /* FIXME: i18n: */
14102                              &setlist, &showlist);
14103
14104   init_all_packet_configs ();
14105
14106   add_packet_config_cmd (&remote_protocol_packets[PACKET_X],
14107                          "X", "binary-download", 1);
14108
14109   add_packet_config_cmd (&remote_protocol_packets[PACKET_vCont],
14110                          "vCont", "verbose-resume", 0);
14111
14112   add_packet_config_cmd (&remote_protocol_packets[PACKET_QPassSignals],
14113                          "QPassSignals", "pass-signals", 0);
14114
14115   add_packet_config_cmd (&remote_protocol_packets[PACKET_QCatchSyscalls],
14116                          "QCatchSyscalls", "catch-syscalls", 0);
14117
14118   add_packet_config_cmd (&remote_protocol_packets[PACKET_QProgramSignals],
14119                          "QProgramSignals", "program-signals", 0);
14120
14121   add_packet_config_cmd (&remote_protocol_packets[PACKET_QSetWorkingDir],
14122                          "QSetWorkingDir", "set-working-dir", 0);
14123
14124   add_packet_config_cmd (&remote_protocol_packets[PACKET_QStartupWithShell],
14125                          "QStartupWithShell", "startup-with-shell", 0);
14126
14127   add_packet_config_cmd (&remote_protocol_packets
14128                          [PACKET_QEnvironmentHexEncoded],
14129                          "QEnvironmentHexEncoded", "environment-hex-encoded",
14130                          0);
14131
14132   add_packet_config_cmd (&remote_protocol_packets[PACKET_QEnvironmentReset],
14133                          "QEnvironmentReset", "environment-reset",
14134                          0);
14135
14136   add_packet_config_cmd (&remote_protocol_packets[PACKET_QEnvironmentUnset],
14137                          "QEnvironmentUnset", "environment-unset",
14138                          0);
14139
14140   add_packet_config_cmd (&remote_protocol_packets[PACKET_qSymbol],
14141                          "qSymbol", "symbol-lookup", 0);
14142
14143   add_packet_config_cmd (&remote_protocol_packets[PACKET_P],
14144                          "P", "set-register", 1);
14145
14146   add_packet_config_cmd (&remote_protocol_packets[PACKET_p],
14147                          "p", "fetch-register", 1);
14148
14149   add_packet_config_cmd (&remote_protocol_packets[PACKET_Z0],
14150                          "Z0", "software-breakpoint", 0);
14151
14152   add_packet_config_cmd (&remote_protocol_packets[PACKET_Z1],
14153                          "Z1", "hardware-breakpoint", 0);
14154
14155   add_packet_config_cmd (&remote_protocol_packets[PACKET_Z2],
14156                          "Z2", "write-watchpoint", 0);
14157
14158   add_packet_config_cmd (&remote_protocol_packets[PACKET_Z3],
14159                          "Z3", "read-watchpoint", 0);
14160
14161   add_packet_config_cmd (&remote_protocol_packets[PACKET_Z4],
14162                          "Z4", "access-watchpoint", 0);
14163
14164   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_auxv],
14165                          "qXfer:auxv:read", "read-aux-vector", 0);
14166
14167   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_exec_file],
14168                          "qXfer:exec-file:read", "pid-to-exec-file", 0);
14169
14170   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_features],
14171                          "qXfer:features:read", "target-features", 0);
14172
14173   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_libraries],
14174                          "qXfer:libraries:read", "library-info", 0);
14175
14176   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_libraries_svr4],
14177                          "qXfer:libraries-svr4:read", "library-info-svr4", 0);
14178
14179   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_memory_map],
14180                          "qXfer:memory-map:read", "memory-map", 0);
14181
14182   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_spu_read],
14183                          "qXfer:spu:read", "read-spu-object", 0);
14184
14185   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_spu_write],
14186                          "qXfer:spu:write", "write-spu-object", 0);
14187
14188   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_osdata],
14189                         "qXfer:osdata:read", "osdata", 0);
14190
14191   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_threads],
14192                          "qXfer:threads:read", "threads", 0);
14193
14194   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_siginfo_read],
14195                          "qXfer:siginfo:read", "read-siginfo-object", 0);
14196
14197   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_siginfo_write],
14198                          "qXfer:siginfo:write", "write-siginfo-object", 0);
14199
14200   add_packet_config_cmd
14201     (&remote_protocol_packets[PACKET_qXfer_traceframe_info],
14202      "qXfer:traceframe-info:read", "traceframe-info", 0);
14203
14204   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_uib],
14205                          "qXfer:uib:read", "unwind-info-block", 0);
14206
14207   add_packet_config_cmd (&remote_protocol_packets[PACKET_qGetTLSAddr],
14208                          "qGetTLSAddr", "get-thread-local-storage-address",
14209                          0);
14210
14211   add_packet_config_cmd (&remote_protocol_packets[PACKET_qGetTIBAddr],
14212                          "qGetTIBAddr", "get-thread-information-block-address",
14213                          0);
14214
14215   add_packet_config_cmd (&remote_protocol_packets[PACKET_bc],
14216                          "bc", "reverse-continue", 0);
14217
14218   add_packet_config_cmd (&remote_protocol_packets[PACKET_bs],
14219                          "bs", "reverse-step", 0);
14220
14221   add_packet_config_cmd (&remote_protocol_packets[PACKET_qSupported],
14222                          "qSupported", "supported-packets", 0);
14223
14224   add_packet_config_cmd (&remote_protocol_packets[PACKET_qSearch_memory],
14225                          "qSearch:memory", "search-memory", 0);
14226
14227   add_packet_config_cmd (&remote_protocol_packets[PACKET_qTStatus],
14228                          "qTStatus", "trace-status", 0);
14229
14230   add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_setfs],
14231                          "vFile:setfs", "hostio-setfs", 0);
14232
14233   add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_open],
14234                          "vFile:open", "hostio-open", 0);
14235
14236   add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_pread],
14237                          "vFile:pread", "hostio-pread", 0);
14238
14239   add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_pwrite],
14240                          "vFile:pwrite", "hostio-pwrite", 0);
14241
14242   add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_close],
14243                          "vFile:close", "hostio-close", 0);
14244
14245   add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_unlink],
14246                          "vFile:unlink", "hostio-unlink", 0);
14247
14248   add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_readlink],
14249                          "vFile:readlink", "hostio-readlink", 0);
14250
14251   add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_fstat],
14252                          "vFile:fstat", "hostio-fstat", 0);
14253
14254   add_packet_config_cmd (&remote_protocol_packets[PACKET_vAttach],
14255                          "vAttach", "attach", 0);
14256
14257   add_packet_config_cmd (&remote_protocol_packets[PACKET_vRun],
14258                          "vRun", "run", 0);
14259
14260   add_packet_config_cmd (&remote_protocol_packets[PACKET_QStartNoAckMode],
14261                          "QStartNoAckMode", "noack", 0);
14262
14263   add_packet_config_cmd (&remote_protocol_packets[PACKET_vKill],
14264                          "vKill", "kill", 0);
14265
14266   add_packet_config_cmd (&remote_protocol_packets[PACKET_qAttached],
14267                          "qAttached", "query-attached", 0);
14268
14269   add_packet_config_cmd (&remote_protocol_packets[PACKET_ConditionalTracepoints],
14270                          "ConditionalTracepoints",
14271                          "conditional-tracepoints", 0);
14272
14273   add_packet_config_cmd (&remote_protocol_packets[PACKET_ConditionalBreakpoints],
14274                          "ConditionalBreakpoints",
14275                          "conditional-breakpoints", 0);
14276
14277   add_packet_config_cmd (&remote_protocol_packets[PACKET_BreakpointCommands],
14278                          "BreakpointCommands",
14279                          "breakpoint-commands", 0);
14280
14281   add_packet_config_cmd (&remote_protocol_packets[PACKET_FastTracepoints],
14282                          "FastTracepoints", "fast-tracepoints", 0);
14283
14284   add_packet_config_cmd (&remote_protocol_packets[PACKET_TracepointSource],
14285                          "TracepointSource", "TracepointSource", 0);
14286
14287   add_packet_config_cmd (&remote_protocol_packets[PACKET_QAllow],
14288                          "QAllow", "allow", 0);
14289
14290   add_packet_config_cmd (&remote_protocol_packets[PACKET_StaticTracepoints],
14291                          "StaticTracepoints", "static-tracepoints", 0);
14292
14293   add_packet_config_cmd (&remote_protocol_packets[PACKET_InstallInTrace],
14294                          "InstallInTrace", "install-in-trace", 0);
14295
14296   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_statictrace_read],
14297                          "qXfer:statictrace:read", "read-sdata-object", 0);
14298
14299   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_fdpic],
14300                          "qXfer:fdpic:read", "read-fdpic-loadmap", 0);
14301
14302   add_packet_config_cmd (&remote_protocol_packets[PACKET_QDisableRandomization],
14303                          "QDisableRandomization", "disable-randomization", 0);
14304
14305   add_packet_config_cmd (&remote_protocol_packets[PACKET_QAgent],
14306                          "QAgent", "agent", 0);
14307
14308   add_packet_config_cmd (&remote_protocol_packets[PACKET_QTBuffer_size],
14309                          "QTBuffer:size", "trace-buffer-size", 0);
14310
14311   add_packet_config_cmd (&remote_protocol_packets[PACKET_Qbtrace_off],
14312        "Qbtrace:off", "disable-btrace", 0);
14313
14314   add_packet_config_cmd (&remote_protocol_packets[PACKET_Qbtrace_bts],
14315        "Qbtrace:bts", "enable-btrace-bts", 0);
14316
14317   add_packet_config_cmd (&remote_protocol_packets[PACKET_Qbtrace_pt],
14318        "Qbtrace:pt", "enable-btrace-pt", 0);
14319
14320   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_btrace],
14321        "qXfer:btrace", "read-btrace", 0);
14322
14323   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_btrace_conf],
14324        "qXfer:btrace-conf", "read-btrace-conf", 0);
14325
14326   add_packet_config_cmd (&remote_protocol_packets[PACKET_Qbtrace_conf_bts_size],
14327        "Qbtrace-conf:bts:size", "btrace-conf-bts-size", 0);
14328
14329   add_packet_config_cmd (&remote_protocol_packets[PACKET_multiprocess_feature],
14330        "multiprocess-feature", "multiprocess-feature", 0);
14331
14332   add_packet_config_cmd (&remote_protocol_packets[PACKET_swbreak_feature],
14333                          "swbreak-feature", "swbreak-feature", 0);
14334
14335   add_packet_config_cmd (&remote_protocol_packets[PACKET_hwbreak_feature],
14336                          "hwbreak-feature", "hwbreak-feature", 0);
14337
14338   add_packet_config_cmd (&remote_protocol_packets[PACKET_fork_event_feature],
14339                          "fork-event-feature", "fork-event-feature", 0);
14340
14341   add_packet_config_cmd (&remote_protocol_packets[PACKET_vfork_event_feature],
14342                          "vfork-event-feature", "vfork-event-feature", 0);
14343
14344   add_packet_config_cmd (&remote_protocol_packets[PACKET_Qbtrace_conf_pt_size],
14345        "Qbtrace-conf:pt:size", "btrace-conf-pt-size", 0);
14346
14347   add_packet_config_cmd (&remote_protocol_packets[PACKET_vContSupported],
14348                          "vContSupported", "verbose-resume-supported", 0);
14349
14350   add_packet_config_cmd (&remote_protocol_packets[PACKET_exec_event_feature],
14351                          "exec-event-feature", "exec-event-feature", 0);
14352
14353   add_packet_config_cmd (&remote_protocol_packets[PACKET_vCtrlC],
14354                          "vCtrlC", "ctrl-c", 0);
14355
14356   add_packet_config_cmd (&remote_protocol_packets[PACKET_QThreadEvents],
14357                          "QThreadEvents", "thread-events", 0);
14358
14359   add_packet_config_cmd (&remote_protocol_packets[PACKET_no_resumed],
14360                          "N stop reply", "no-resumed-stop-reply", 0);
14361
14362   /* Assert that we've registered "set remote foo-packet" commands
14363      for all packet configs.  */
14364   {
14365     int i;
14366
14367     for (i = 0; i < PACKET_MAX; i++)
14368       {
14369         /* Ideally all configs would have a command associated.  Some
14370            still don't though.  */
14371         int excepted;
14372
14373         switch (i)
14374           {
14375           case PACKET_QNonStop:
14376           case PACKET_EnableDisableTracepoints_feature:
14377           case PACKET_tracenz_feature:
14378           case PACKET_DisconnectedTracing_feature:
14379           case PACKET_augmented_libraries_svr4_read_feature:
14380           case PACKET_qCRC:
14381             /* Additions to this list need to be well justified:
14382                pre-existing packets are OK; new packets are not.  */
14383             excepted = 1;
14384             break;
14385           default:
14386             excepted = 0;
14387             break;
14388           }
14389
14390         /* This catches both forgetting to add a config command, and
14391            forgetting to remove a packet from the exception list.  */
14392         gdb_assert (excepted == (remote_protocol_packets[i].name == NULL));
14393       }
14394   }
14395
14396   /* Keep the old ``set remote Z-packet ...'' working.  Each individual
14397      Z sub-packet has its own set and show commands, but users may
14398      have sets to this variable in their .gdbinit files (or in their
14399      documentation).  */
14400   add_setshow_auto_boolean_cmd ("Z-packet", class_obscure,
14401                                 &remote_Z_packet_detect, _("\
14402 Set use of remote protocol `Z' packets"), _("\
14403 Show use of remote protocol `Z' packets "), _("\
14404 When set, GDB will attempt to use the remote breakpoint and watchpoint\n\
14405 packets."),
14406                                 set_remote_protocol_Z_packet_cmd,
14407                                 show_remote_protocol_Z_packet_cmd,
14408                                 /* FIXME: i18n: Use of remote protocol
14409                                    `Z' packets is %s.  */
14410                                 &remote_set_cmdlist, &remote_show_cmdlist);
14411
14412   add_prefix_cmd ("remote", class_files, remote_command, _("\
14413 Manipulate files on the remote system\n\
14414 Transfer files to and from the remote target system."),
14415                   &remote_cmdlist, "remote ",
14416                   0 /* allow-unknown */, &cmdlist);
14417
14418   add_cmd ("put", class_files, remote_put_command,
14419            _("Copy a local file to the remote system."),
14420            &remote_cmdlist);
14421
14422   add_cmd ("get", class_files, remote_get_command,
14423            _("Copy a remote file to the local system."),
14424            &remote_cmdlist);
14425
14426   add_cmd ("delete", class_files, remote_delete_command,
14427            _("Delete a remote file."),
14428            &remote_cmdlist);
14429
14430   add_setshow_string_noescape_cmd ("exec-file", class_files,
14431                                    &remote_exec_file_var, _("\
14432 Set the remote pathname for \"run\""), _("\
14433 Show the remote pathname for \"run\""), NULL,
14434                                    set_remote_exec_file,
14435                                    show_remote_exec_file,
14436                                    &remote_set_cmdlist,
14437                                    &remote_show_cmdlist);
14438
14439   add_setshow_boolean_cmd ("range-stepping", class_run,
14440                            &use_range_stepping, _("\
14441 Enable or disable range stepping."), _("\
14442 Show whether target-assisted range stepping is enabled."), _("\
14443 If on, and the target supports it, when stepping a source line, GDB\n\
14444 tells the target to step the corresponding range of addresses itself instead\n\
14445 of issuing multiple single-steps.  This speeds up source level\n\
14446 stepping.  If off, GDB always issues single-steps, even if range\n\
14447 stepping is supported by the target.  The default is on."),
14448                            set_range_stepping,
14449                            show_range_stepping,
14450                            &setlist,
14451                            &showlist);
14452
14453   /* Eventually initialize fileio.  See fileio.c */
14454   initialize_remote_fileio (remote_set_cmdlist, remote_show_cmdlist);
14455
14456   /* Take advantage of the fact that the TID field is not used, to tag
14457      special ptids with it set to != 0.  */
14458   magic_null_ptid = ptid_build (42000, -1, 1);
14459   not_sent_ptid = ptid_build (42000, -2, 1);
14460   any_thread_ptid = ptid_build (42000, 0, 1);
14461 }