remote: C++ify thread_item and threads_listing_context
[external/binutils.git] / gdb / remote.c
1 /* Remote target communications for serial-line targets in custom GDB protocol
2
3    Copyright (C) 1988-2017 Free Software Foundation, Inc.
4
5    This file is part of GDB.
6
7    This program is free software; you can redistribute it and/or modify
8    it under the terms of the GNU General Public License as published by
9    the Free Software Foundation; either version 3 of the License, or
10    (at your option) any later version.
11
12    This program is distributed in the hope that it will be useful,
13    but WITHOUT ANY WARRANTY; without even the implied warranty of
14    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15    GNU General Public License for more details.
16
17    You should have received a copy of the GNU General Public License
18    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
19
20 /* See the GDB User Guide for details of the GDB remote protocol.  */
21
22 #include "defs.h"
23 #include <ctype.h>
24 #include <fcntl.h>
25 #include "inferior.h"
26 #include "infrun.h"
27 #include "bfd.h"
28 #include "symfile.h"
29 #include "target.h"
30 /*#include "terminal.h" */
31 #include "gdbcmd.h"
32 #include "objfiles.h"
33 #include "gdb-stabs.h"
34 #include "gdbthread.h"
35 #include "remote.h"
36 #include "remote-notif.h"
37 #include "regcache.h"
38 #include "value.h"
39 #include "observer.h"
40 #include "solib.h"
41 #include "cli/cli-decode.h"
42 #include "cli/cli-setshow.h"
43 #include "target-descriptions.h"
44 #include "gdb_bfd.h"
45 #include "filestuff.h"
46 #include "rsp-low.h"
47 #include "disasm.h"
48 #include "location.h"
49
50 #include "gdb_sys_time.h"
51
52 #include "event-loop.h"
53 #include "event-top.h"
54 #include "inf-loop.h"
55
56 #include <signal.h>
57 #include "serial.h"
58
59 #include "gdbcore.h" /* for exec_bfd */
60
61 #include "remote-fileio.h"
62 #include "gdb/fileio.h"
63 #include <sys/stat.h>
64 #include "xml-support.h"
65
66 #include "memory-map.h"
67
68 #include "tracepoint.h"
69 #include "ax.h"
70 #include "ax-gdb.h"
71 #include "agent.h"
72 #include "btrace.h"
73 #include "record-btrace.h"
74 #include <algorithm>
75 #include "common/scoped_restore.h"
76 #include "environ.h"
77 #include "common/byte-vector.h"
78
79 /* Per-program-space data key.  */
80 static const struct program_space_data *remote_pspace_data;
81
82 /* The variable registered as the control variable used by the
83    remote exec-file commands.  While the remote exec-file setting is
84    per-program-space, the set/show machinery uses this as the 
85    location of the remote exec-file value.  */
86 static char *remote_exec_file_var;
87
88 /* The size to align memory write packets, when practical.  The protocol
89    does not guarantee any alignment, and gdb will generate short
90    writes and unaligned writes, but even as a best-effort attempt this
91    can improve bulk transfers.  For instance, if a write is misaligned
92    relative to the target's data bus, the stub may need to make an extra
93    round trip fetching data from the target.  This doesn't make a
94    huge difference, but it's easy to do, so we try to be helpful.
95
96    The alignment chosen is arbitrary; usually data bus width is
97    important here, not the possibly larger cache line size.  */
98 enum { REMOTE_ALIGN_WRITES = 16 };
99
100 /* Prototypes for local functions.  */
101 static int getpkt_sane (char **buf, long *sizeof_buf, int forever);
102 static int getpkt_or_notif_sane (char **buf, long *sizeof_buf,
103                                  int forever, int *is_notif);
104
105 static void remote_files_info (struct target_ops *ignore);
106
107 static void remote_prepare_to_store (struct target_ops *self,
108                                      struct regcache *regcache);
109
110 static void remote_open_1 (const char *, int, struct target_ops *,
111                            int extended_p);
112
113 static void remote_close (struct target_ops *self);
114
115 struct remote_state;
116
117 static int remote_vkill (int pid, struct remote_state *rs);
118
119 static void remote_kill_k (void);
120
121 static void remote_mourn (struct target_ops *ops);
122
123 static void extended_remote_restart (void);
124
125 static void remote_send (char **buf, long *sizeof_buf_p);
126
127 static int readchar (int timeout);
128
129 static void remote_serial_write (const char *str, int len);
130
131 static void remote_kill (struct target_ops *ops);
132
133 static int remote_can_async_p (struct target_ops *);
134
135 static int remote_is_async_p (struct target_ops *);
136
137 static void remote_async (struct target_ops *ops, int enable);
138
139 static void remote_thread_events (struct target_ops *ops, int enable);
140
141 static void interrupt_query (void);
142
143 static void set_general_thread (ptid_t ptid);
144 static void set_continue_thread (ptid_t ptid);
145
146 static void get_offsets (void);
147
148 static void skip_frame (void);
149
150 static long read_frame (char **buf_p, long *sizeof_buf);
151
152 static int hexnumlen (ULONGEST num);
153
154 static void init_remote_ops (void);
155
156 static void init_extended_remote_ops (void);
157
158 static void remote_stop (struct target_ops *self, ptid_t);
159
160 static int stubhex (int ch);
161
162 static int hexnumstr (char *, ULONGEST);
163
164 static int hexnumnstr (char *, ULONGEST, int);
165
166 static CORE_ADDR remote_address_masked (CORE_ADDR);
167
168 static void print_packet (const char *);
169
170 static int stub_unpack_int (char *buff, int fieldlength);
171
172 static ptid_t remote_current_thread (ptid_t oldptid);
173
174 static int putpkt_binary (const char *buf, int cnt);
175
176 static void check_binary_download (CORE_ADDR addr);
177
178 struct packet_config;
179
180 static void show_packet_config_cmd (struct packet_config *config);
181
182 static void show_remote_protocol_packet_cmd (struct ui_file *file,
183                                              int from_tty,
184                                              struct cmd_list_element *c,
185                                              const char *value);
186
187 static char *write_ptid (char *buf, const char *endbuf, ptid_t ptid);
188 static ptid_t read_ptid (const char *buf, const char **obuf);
189
190 static void remote_set_permissions (struct target_ops *self);
191
192 static int remote_get_trace_status (struct target_ops *self,
193                                     struct trace_status *ts);
194
195 static int remote_upload_tracepoints (struct target_ops *self,
196                                       struct uploaded_tp **utpp);
197
198 static int remote_upload_trace_state_variables (struct target_ops *self,
199                                                 struct uploaded_tsv **utsvp);
200   
201 static void remote_query_supported (void);
202
203 static void remote_check_symbols (void);
204
205 struct stop_reply;
206 static void stop_reply_xfree (struct stop_reply *);
207 static void remote_parse_stop_reply (char *, struct stop_reply *);
208 static void push_stop_reply (struct stop_reply *);
209 static void discard_pending_stop_replies_in_queue (struct remote_state *);
210 static int peek_stop_reply (ptid_t ptid);
211
212 struct threads_listing_context;
213 static void remove_new_fork_children (struct threads_listing_context *);
214
215 static void remote_async_inferior_event_handler (gdb_client_data);
216
217 static void remote_terminal_ours (struct target_ops *self);
218
219 static int remote_read_description_p (struct target_ops *target);
220
221 static void remote_console_output (char *msg);
222
223 static int remote_supports_cond_breakpoints (struct target_ops *self);
224
225 static int remote_can_run_breakpoint_commands (struct target_ops *self);
226
227 static void remote_btrace_reset (void);
228
229 static void remote_btrace_maybe_reopen (void);
230
231 static int stop_reply_queue_length (void);
232
233 static void readahead_cache_invalidate (void);
234
235 static void remote_unpush_and_throw (void);
236
237 static struct remote_state *get_remote_state (void);
238
239 /* For "remote".  */
240
241 static struct cmd_list_element *remote_cmdlist;
242
243 /* For "set remote" and "show remote".  */
244
245 static struct cmd_list_element *remote_set_cmdlist;
246 static struct cmd_list_element *remote_show_cmdlist;
247
248 /* Stub vCont actions support.
249
250    Each field is a boolean flag indicating whether the stub reports
251    support for the corresponding action.  */
252
253 struct vCont_action_support
254 {
255   /* vCont;t */
256   int t;
257
258   /* vCont;r */
259   int r;
260
261   /* vCont;s */
262   int s;
263
264   /* vCont;S */
265   int S;
266 };
267
268 /* Controls whether GDB is willing to use range stepping.  */
269
270 static int use_range_stepping = 1;
271
272 #define OPAQUETHREADBYTES 8
273
274 /* a 64 bit opaque identifier */
275 typedef unsigned char threadref[OPAQUETHREADBYTES];
276
277 /* About this many threadisds fit in a packet.  */
278
279 #define MAXTHREADLISTRESULTS 32
280
281 /* The max number of chars in debug output.  The rest of chars are
282    omitted.  */
283
284 #define REMOTE_DEBUG_MAX_CHAR 512
285
286 /* Data for the vFile:pread readahead cache.  */
287
288 struct readahead_cache
289 {
290   /* The file descriptor for the file that is being cached.  -1 if the
291      cache is invalid.  */
292   int fd;
293
294   /* The offset into the file that the cache buffer corresponds
295      to.  */
296   ULONGEST offset;
297
298   /* The buffer holding the cache contents.  */
299   gdb_byte *buf;
300   /* The buffer's size.  We try to read as much as fits into a packet
301      at a time.  */
302   size_t bufsize;
303
304   /* Cache hit and miss counters.  */
305   ULONGEST hit_count;
306   ULONGEST miss_count;
307 };
308
309 /* Description of the remote protocol state for the currently
310    connected target.  This is per-target state, and independent of the
311    selected architecture.  */
312
313 struct remote_state
314 {
315   /* A buffer to use for incoming packets, and its current size.  The
316      buffer is grown dynamically for larger incoming packets.
317      Outgoing packets may also be constructed in this buffer.
318      BUF_SIZE is always at least REMOTE_PACKET_SIZE;
319      REMOTE_PACKET_SIZE should be used to limit the length of outgoing
320      packets.  */
321   char *buf;
322   long buf_size;
323
324   /* True if we're going through initial connection setup (finding out
325      about the remote side's threads, relocating symbols, etc.).  */
326   int starting_up;
327
328   /* If we negotiated packet size explicitly (and thus can bypass
329      heuristics for the largest packet size that will not overflow
330      a buffer in the stub), this will be set to that packet size.
331      Otherwise zero, meaning to use the guessed size.  */
332   long explicit_packet_size;
333
334   /* remote_wait is normally called when the target is running and
335      waits for a stop reply packet.  But sometimes we need to call it
336      when the target is already stopped.  We can send a "?" packet
337      and have remote_wait read the response.  Or, if we already have
338      the response, we can stash it in BUF and tell remote_wait to
339      skip calling getpkt.  This flag is set when BUF contains a
340      stop reply packet and the target is not waiting.  */
341   int cached_wait_status;
342
343   /* True, if in no ack mode.  That is, neither GDB nor the stub will
344      expect acks from each other.  The connection is assumed to be
345      reliable.  */
346   int noack_mode;
347
348   /* True if we're connected in extended remote mode.  */
349   int extended;
350
351   /* True if we resumed the target and we're waiting for the target to
352      stop.  In the mean time, we can't start another command/query.
353      The remote server wouldn't be ready to process it, so we'd
354      timeout waiting for a reply that would never come and eventually
355      we'd close the connection.  This can happen in asynchronous mode
356      because we allow GDB commands while the target is running.  */
357   int waiting_for_stop_reply;
358
359   /* The status of the stub support for the various vCont actions.  */
360   struct vCont_action_support supports_vCont;
361
362   /* Nonzero if the user has pressed Ctrl-C, but the target hasn't
363      responded to that.  */
364   int ctrlc_pending_p;
365
366   /* True if we saw a Ctrl-C while reading or writing from/to the
367      remote descriptor.  At that point it is not safe to send a remote
368      interrupt packet, so we instead remember we saw the Ctrl-C and
369      process it once we're done with sending/receiving the current
370      packet, which should be shortly.  If however that takes too long,
371      and the user presses Ctrl-C again, we offer to disconnect.  */
372   int got_ctrlc_during_io;
373
374   /* Descriptor for I/O to remote machine.  Initialize it to NULL so that
375      remote_open knows that we don't have a file open when the program
376      starts.  */
377   struct serial *remote_desc;
378
379   /* These are the threads which we last sent to the remote system.  The
380      TID member will be -1 for all or -2 for not sent yet.  */
381   ptid_t general_thread;
382   ptid_t continue_thread;
383
384   /* This is the traceframe which we last selected on the remote system.
385      It will be -1 if no traceframe is selected.  */
386   int remote_traceframe_number;
387
388   char *last_pass_packet;
389
390   /* The last QProgramSignals packet sent to the target.  We bypass
391      sending a new program signals list down to the target if the new
392      packet is exactly the same as the last we sent.  IOW, we only let
393      the target know about program signals list changes.  */
394   char *last_program_signals_packet;
395
396   enum gdb_signal last_sent_signal;
397
398   int last_sent_step;
399
400   /* The execution direction of the last resume we got.  */
401   enum exec_direction_kind last_resume_exec_dir;
402
403   char *finished_object;
404   char *finished_annex;
405   ULONGEST finished_offset;
406
407   /* Should we try the 'ThreadInfo' query packet?
408
409      This variable (NOT available to the user: auto-detect only!)
410      determines whether GDB will use the new, simpler "ThreadInfo"
411      query or the older, more complex syntax for thread queries.
412      This is an auto-detect variable (set to true at each connect,
413      and set to false when the target fails to recognize it).  */
414   int use_threadinfo_query;
415   int use_threadextra_query;
416
417   threadref echo_nextthread;
418   threadref nextthread;
419   threadref resultthreadlist[MAXTHREADLISTRESULTS];
420
421   /* The state of remote notification.  */
422   struct remote_notif_state *notif_state;
423
424   /* The branch trace configuration.  */
425   struct btrace_config btrace_config;
426
427   /* The argument to the last "vFile:setfs:" packet we sent, used
428      to avoid sending repeated unnecessary "vFile:setfs:" packets.
429      Initialized to -1 to indicate that no "vFile:setfs:" packet
430      has yet been sent.  */
431   int fs_pid;
432
433   /* A readahead cache for vFile:pread.  Often, reading a binary
434      involves a sequence of small reads.  E.g., when parsing an ELF
435      file.  A readahead cache helps mostly the case of remote
436      debugging on a connection with higher latency, due to the
437      request/reply nature of the RSP.  We only cache data for a single
438      file descriptor at a time.  */
439   struct readahead_cache readahead_cache;
440 };
441
442 /* Private data that we'll store in (struct thread_info)->private.  */
443 struct private_thread_info
444 {
445   char *extra;
446   char *name;
447   int core;
448
449   /* Thread handle, perhaps a pthread_t or thread_t value, stored as a
450      sequence of bytes.  */
451   gdb::byte_vector *thread_handle;
452
453   /* Whether the target stopped for a breakpoint/watchpoint.  */
454   enum target_stop_reason stop_reason;
455
456   /* This is set to the data address of the access causing the target
457      to stop for a watchpoint.  */
458   CORE_ADDR watch_data_address;
459
460   /* Fields used by the vCont action coalescing implemented in
461      remote_resume / remote_commit_resume.  remote_resume stores each
462      thread's last resume request in these fields, so that a later
463      remote_commit_resume knows which is the proper action for this
464      thread to include in the vCont packet.  */
465
466   /* True if the last target_resume call for this thread was a step
467      request, false if a continue request.  */
468   int last_resume_step;
469
470   /* The signal specified in the last target_resume call for this
471      thread.  */
472   enum gdb_signal last_resume_sig;
473
474   /* Whether this thread was already vCont-resumed on the remote
475      side.  */
476   int vcont_resumed;
477 };
478
479 static void
480 free_private_thread_info (struct private_thread_info *info)
481 {
482   xfree (info->extra);
483   xfree (info->name);
484   delete info->thread_handle;
485   xfree (info);
486 }
487
488 /* This data could be associated with a target, but we do not always
489    have access to the current target when we need it, so for now it is
490    static.  This will be fine for as long as only one target is in use
491    at a time.  */
492 static struct remote_state *remote_state;
493
494 static struct remote_state *
495 get_remote_state_raw (void)
496 {
497   return remote_state;
498 }
499
500 /* Allocate a new struct remote_state with xmalloc, initialize it, and
501    return it.  */
502
503 static struct remote_state *
504 new_remote_state (void)
505 {
506   struct remote_state *result = XCNEW (struct remote_state);
507
508   /* The default buffer size is unimportant; it will be expanded
509      whenever a larger buffer is needed. */
510   result->buf_size = 400;
511   result->buf = (char *) xmalloc (result->buf_size);
512   result->remote_traceframe_number = -1;
513   result->last_sent_signal = GDB_SIGNAL_0;
514   result->last_resume_exec_dir = EXEC_FORWARD;
515   result->fs_pid = -1;
516
517   return result;
518 }
519
520 /* Description of the remote protocol for a given architecture.  */
521
522 struct packet_reg
523 {
524   long offset; /* Offset into G packet.  */
525   long regnum; /* GDB's internal register number.  */
526   LONGEST pnum; /* Remote protocol register number.  */
527   int in_g_packet; /* Always part of G packet.  */
528   /* long size in bytes;  == register_size (target_gdbarch (), regnum);
529      at present.  */
530   /* char *name; == gdbarch_register_name (target_gdbarch (), regnum);
531      at present.  */
532 };
533
534 struct remote_arch_state
535 {
536   /* Description of the remote protocol registers.  */
537   long sizeof_g_packet;
538
539   /* Description of the remote protocol registers indexed by REGNUM
540      (making an array gdbarch_num_regs in size).  */
541   struct packet_reg *regs;
542
543   /* This is the size (in chars) of the first response to the ``g''
544      packet.  It is used as a heuristic when determining the maximum
545      size of memory-read and memory-write packets.  A target will
546      typically only reserve a buffer large enough to hold the ``g''
547      packet.  The size does not include packet overhead (headers and
548      trailers).  */
549   long actual_register_packet_size;
550
551   /* This is the maximum size (in chars) of a non read/write packet.
552      It is also used as a cap on the size of read/write packets.  */
553   long remote_packet_size;
554 };
555
556 /* Utility: generate error from an incoming stub packet.  */
557 static void
558 trace_error (char *buf)
559 {
560   if (*buf++ != 'E')
561     return;                     /* not an error msg */
562   switch (*buf)
563     {
564     case '1':                   /* malformed packet error */
565       if (*++buf == '0')        /*   general case: */
566         error (_("remote.c: error in outgoing packet."));
567       else
568         error (_("remote.c: error in outgoing packet at field #%ld."),
569                strtol (buf, NULL, 16));
570     default:
571       error (_("Target returns error code '%s'."), buf);
572     }
573 }
574
575 /* Utility: wait for reply from stub, while accepting "O" packets.  */
576
577 static char *
578 remote_get_noisy_reply ()
579 {
580   struct remote_state *rs = get_remote_state ();
581
582   do                            /* Loop on reply from remote stub.  */
583     {
584       char *buf;
585
586       QUIT;                     /* Allow user to bail out with ^C.  */
587       getpkt (&rs->buf, &rs->buf_size, 0);
588       buf = rs->buf;
589       if (buf[0] == 'E')
590         trace_error (buf);
591       else if (startswith (buf, "qRelocInsn:"))
592         {
593           ULONGEST ul;
594           CORE_ADDR from, to, org_to;
595           const char *p, *pp;
596           int adjusted_size = 0;
597           int relocated = 0;
598
599           p = buf + strlen ("qRelocInsn:");
600           pp = unpack_varlen_hex (p, &ul);
601           if (*pp != ';')
602             error (_("invalid qRelocInsn packet: %s"), buf);
603           from = ul;
604
605           p = pp + 1;
606           unpack_varlen_hex (p, &ul);
607           to = ul;
608
609           org_to = to;
610
611           TRY
612             {
613               gdbarch_relocate_instruction (target_gdbarch (), &to, from);
614               relocated = 1;
615             }
616           CATCH (ex, RETURN_MASK_ALL)
617             {
618               if (ex.error == MEMORY_ERROR)
619                 {
620                   /* Propagate memory errors silently back to the
621                      target.  The stub may have limited the range of
622                      addresses we can write to, for example.  */
623                 }
624               else
625                 {
626                   /* Something unexpectedly bad happened.  Be verbose
627                      so we can tell what, and propagate the error back
628                      to the stub, so it doesn't get stuck waiting for
629                      a response.  */
630                   exception_fprintf (gdb_stderr, ex,
631                                      _("warning: relocating instruction: "));
632                 }
633               putpkt ("E01");
634             }
635           END_CATCH
636
637           if (relocated)
638             {
639               adjusted_size = to - org_to;
640
641               xsnprintf (buf, rs->buf_size, "qRelocInsn:%x", adjusted_size);
642               putpkt (buf);
643             }
644         }
645       else if (buf[0] == 'O' && buf[1] != 'K')
646         remote_console_output (buf + 1);        /* 'O' message from stub */
647       else
648         return buf;             /* Here's the actual reply.  */
649     }
650   while (1);
651 }
652
653 /* Handle for retreving the remote protocol data from gdbarch.  */
654 static struct gdbarch_data *remote_gdbarch_data_handle;
655
656 static struct remote_arch_state *
657 get_remote_arch_state (struct gdbarch *gdbarch)
658 {
659   gdb_assert (gdbarch != NULL);
660   return ((struct remote_arch_state *)
661           gdbarch_data (gdbarch, remote_gdbarch_data_handle));
662 }
663
664 /* Fetch the global remote target state.  */
665
666 static struct remote_state *
667 get_remote_state (void)
668 {
669   /* Make sure that the remote architecture state has been
670      initialized, because doing so might reallocate rs->buf.  Any
671      function which calls getpkt also needs to be mindful of changes
672      to rs->buf, but this call limits the number of places which run
673      into trouble.  */
674   get_remote_arch_state (target_gdbarch ());
675
676   return get_remote_state_raw ();
677 }
678
679 /* Cleanup routine for the remote module's pspace data.  */
680
681 static void
682 remote_pspace_data_cleanup (struct program_space *pspace, void *arg)
683 {
684   char *remote_exec_file = (char *) arg;
685
686   xfree (remote_exec_file);
687 }
688
689 /* Fetch the remote exec-file from the current program space.  */
690
691 static const char *
692 get_remote_exec_file (void)
693 {
694   char *remote_exec_file;
695
696   remote_exec_file
697     = (char *) program_space_data (current_program_space,
698                                    remote_pspace_data);
699   if (remote_exec_file == NULL)
700     return "";
701
702   return remote_exec_file;
703 }
704
705 /* Set the remote exec file for PSPACE.  */
706
707 static void
708 set_pspace_remote_exec_file (struct program_space *pspace,
709                         char *remote_exec_file)
710 {
711   char *old_file = (char *) program_space_data (pspace, remote_pspace_data);
712
713   xfree (old_file);
714   set_program_space_data (pspace, remote_pspace_data,
715                           xstrdup (remote_exec_file));
716 }
717
718 /* The "set/show remote exec-file" set command hook.  */
719
720 static void
721 set_remote_exec_file (const char *ignored, int from_tty,
722                       struct cmd_list_element *c)
723 {
724   gdb_assert (remote_exec_file_var != NULL);
725   set_pspace_remote_exec_file (current_program_space, remote_exec_file_var);
726 }
727
728 /* The "set/show remote exec-file" show command hook.  */
729
730 static void
731 show_remote_exec_file (struct ui_file *file, int from_tty,
732                        struct cmd_list_element *cmd, const char *value)
733 {
734   fprintf_filtered (file, "%s\n", remote_exec_file_var);
735 }
736
737 static int
738 compare_pnums (const void *lhs_, const void *rhs_)
739 {
740   const struct packet_reg * const *lhs
741     = (const struct packet_reg * const *) lhs_;
742   const struct packet_reg * const *rhs
743     = (const struct packet_reg * const *) rhs_;
744
745   if ((*lhs)->pnum < (*rhs)->pnum)
746     return -1;
747   else if ((*lhs)->pnum == (*rhs)->pnum)
748     return 0;
749   else
750     return 1;
751 }
752
753 static int
754 map_regcache_remote_table (struct gdbarch *gdbarch, struct packet_reg *regs)
755 {
756   int regnum, num_remote_regs, offset;
757   struct packet_reg **remote_regs;
758
759   for (regnum = 0; regnum < gdbarch_num_regs (gdbarch); regnum++)
760     {
761       struct packet_reg *r = &regs[regnum];
762
763       if (register_size (gdbarch, regnum) == 0)
764         /* Do not try to fetch zero-sized (placeholder) registers.  */
765         r->pnum = -1;
766       else
767         r->pnum = gdbarch_remote_register_number (gdbarch, regnum);
768
769       r->regnum = regnum;
770     }
771
772   /* Define the g/G packet format as the contents of each register
773      with a remote protocol number, in order of ascending protocol
774      number.  */
775
776   remote_regs = XALLOCAVEC (struct packet_reg *, gdbarch_num_regs (gdbarch));
777   for (num_remote_regs = 0, regnum = 0;
778        regnum < gdbarch_num_regs (gdbarch);
779        regnum++)
780     if (regs[regnum].pnum != -1)
781       remote_regs[num_remote_regs++] = &regs[regnum];
782
783   qsort (remote_regs, num_remote_regs, sizeof (struct packet_reg *),
784          compare_pnums);
785
786   for (regnum = 0, offset = 0; regnum < num_remote_regs; regnum++)
787     {
788       remote_regs[regnum]->in_g_packet = 1;
789       remote_regs[regnum]->offset = offset;
790       offset += register_size (gdbarch, remote_regs[regnum]->regnum);
791     }
792
793   return offset;
794 }
795
796 /* Given the architecture described by GDBARCH, return the remote
797    protocol register's number and the register's offset in the g/G
798    packets of GDB register REGNUM, in PNUM and POFFSET respectively.
799    If the target does not have a mapping for REGNUM, return false,
800    otherwise, return true.  */
801
802 int
803 remote_register_number_and_offset (struct gdbarch *gdbarch, int regnum,
804                                    int *pnum, int *poffset)
805 {
806   gdb_assert (regnum < gdbarch_num_regs (gdbarch));
807
808   std::vector<packet_reg> regs (gdbarch_num_regs (gdbarch));
809
810   map_regcache_remote_table (gdbarch, regs.data ());
811
812   *pnum = regs[regnum].pnum;
813   *poffset = regs[regnum].offset;
814
815   return *pnum != -1;
816 }
817
818 static void *
819 init_remote_state (struct gdbarch *gdbarch)
820 {
821   struct remote_state *rs = get_remote_state_raw ();
822   struct remote_arch_state *rsa;
823
824   rsa = GDBARCH_OBSTACK_ZALLOC (gdbarch, struct remote_arch_state);
825
826   /* Use the architecture to build a regnum<->pnum table, which will be
827      1:1 unless a feature set specifies otherwise.  */
828   rsa->regs = GDBARCH_OBSTACK_CALLOC (gdbarch,
829                                       gdbarch_num_regs (gdbarch),
830                                       struct packet_reg);
831
832   /* Record the maximum possible size of the g packet - it may turn out
833      to be smaller.  */
834   rsa->sizeof_g_packet = map_regcache_remote_table (gdbarch, rsa->regs);
835
836   /* Default maximum number of characters in a packet body.  Many
837      remote stubs have a hardwired buffer size of 400 bytes
838      (c.f. BUFMAX in m68k-stub.c and i386-stub.c).  BUFMAX-1 is used
839      as the maximum packet-size to ensure that the packet and an extra
840      NUL character can always fit in the buffer.  This stops GDB
841      trashing stubs that try to squeeze an extra NUL into what is
842      already a full buffer (As of 1999-12-04 that was most stubs).  */
843   rsa->remote_packet_size = 400 - 1;
844
845   /* This one is filled in when a ``g'' packet is received.  */
846   rsa->actual_register_packet_size = 0;
847
848   /* Should rsa->sizeof_g_packet needs more space than the
849      default, adjust the size accordingly.  Remember that each byte is
850      encoded as two characters.  32 is the overhead for the packet
851      header / footer.  NOTE: cagney/1999-10-26: I suspect that 8
852      (``$NN:G...#NN'') is a better guess, the below has been padded a
853      little.  */
854   if (rsa->sizeof_g_packet > ((rsa->remote_packet_size - 32) / 2))
855     rsa->remote_packet_size = (rsa->sizeof_g_packet * 2 + 32);
856
857   /* Make sure that the packet buffer is plenty big enough for
858      this architecture.  */
859   if (rs->buf_size < rsa->remote_packet_size)
860     {
861       rs->buf_size = 2 * rsa->remote_packet_size;
862       rs->buf = (char *) xrealloc (rs->buf, rs->buf_size);
863     }
864
865   return rsa;
866 }
867
868 /* Return the current allowed size of a remote packet.  This is
869    inferred from the current architecture, and should be used to
870    limit the length of outgoing packets.  */
871 static long
872 get_remote_packet_size (void)
873 {
874   struct remote_state *rs = get_remote_state ();
875   remote_arch_state *rsa = get_remote_arch_state (target_gdbarch ());
876
877   if (rs->explicit_packet_size)
878     return rs->explicit_packet_size;
879
880   return rsa->remote_packet_size;
881 }
882
883 static struct packet_reg *
884 packet_reg_from_regnum (struct gdbarch *gdbarch, struct remote_arch_state *rsa,
885                         long regnum)
886 {
887   if (regnum < 0 && regnum >= gdbarch_num_regs (gdbarch))
888     return NULL;
889   else
890     {
891       struct packet_reg *r = &rsa->regs[regnum];
892
893       gdb_assert (r->regnum == regnum);
894       return r;
895     }
896 }
897
898 static struct packet_reg *
899 packet_reg_from_pnum (struct gdbarch *gdbarch, struct remote_arch_state *rsa,
900                       LONGEST pnum)
901 {
902   int i;
903
904   for (i = 0; i < gdbarch_num_regs (gdbarch); i++)
905     {
906       struct packet_reg *r = &rsa->regs[i];
907
908       if (r->pnum == pnum)
909         return r;
910     }
911   return NULL;
912 }
913
914 static struct target_ops remote_ops;
915
916 static struct target_ops extended_remote_ops;
917
918 /* FIXME: cagney/1999-09-23: Even though getpkt was called with
919    ``forever'' still use the normal timeout mechanism.  This is
920    currently used by the ASYNC code to guarentee that target reads
921    during the initial connect always time-out.  Once getpkt has been
922    modified to return a timeout indication and, in turn
923    remote_wait()/wait_for_inferior() have gained a timeout parameter
924    this can go away.  */
925 static int wait_forever_enabled_p = 1;
926
927 /* Allow the user to specify what sequence to send to the remote
928    when he requests a program interruption: Although ^C is usually
929    what remote systems expect (this is the default, here), it is
930    sometimes preferable to send a break.  On other systems such
931    as the Linux kernel, a break followed by g, which is Magic SysRq g
932    is required in order to interrupt the execution.  */
933 const char interrupt_sequence_control_c[] = "Ctrl-C";
934 const char interrupt_sequence_break[] = "BREAK";
935 const char interrupt_sequence_break_g[] = "BREAK-g";
936 static const char *const interrupt_sequence_modes[] =
937   {
938     interrupt_sequence_control_c,
939     interrupt_sequence_break,
940     interrupt_sequence_break_g,
941     NULL
942   };
943 static const char *interrupt_sequence_mode = interrupt_sequence_control_c;
944
945 static void
946 show_interrupt_sequence (struct ui_file *file, int from_tty,
947                          struct cmd_list_element *c,
948                          const char *value)
949 {
950   if (interrupt_sequence_mode == interrupt_sequence_control_c)
951     fprintf_filtered (file,
952                       _("Send the ASCII ETX character (Ctrl-c) "
953                         "to the remote target to interrupt the "
954                         "execution of the program.\n"));
955   else if (interrupt_sequence_mode == interrupt_sequence_break)
956     fprintf_filtered (file,
957                       _("send a break signal to the remote target "
958                         "to interrupt the execution of the program.\n"));
959   else if (interrupt_sequence_mode == interrupt_sequence_break_g)
960     fprintf_filtered (file,
961                       _("Send a break signal and 'g' a.k.a. Magic SysRq g to "
962                         "the remote target to interrupt the execution "
963                         "of Linux kernel.\n"));
964   else
965     internal_error (__FILE__, __LINE__,
966                     _("Invalid value for interrupt_sequence_mode: %s."),
967                     interrupt_sequence_mode);
968 }
969
970 /* This boolean variable specifies whether interrupt_sequence is sent
971    to the remote target when gdb connects to it.
972    This is mostly needed when you debug the Linux kernel: The Linux kernel
973    expects BREAK g which is Magic SysRq g for connecting gdb.  */
974 static int interrupt_on_connect = 0;
975
976 /* This variable is used to implement the "set/show remotebreak" commands.
977    Since these commands are now deprecated in favor of "set/show remote
978    interrupt-sequence", it no longer has any effect on the code.  */
979 static int remote_break;
980
981 static void
982 set_remotebreak (const char *args, int from_tty, struct cmd_list_element *c)
983 {
984   if (remote_break)
985     interrupt_sequence_mode = interrupt_sequence_break;
986   else
987     interrupt_sequence_mode = interrupt_sequence_control_c;
988 }
989
990 static void
991 show_remotebreak (struct ui_file *file, int from_tty,
992                   struct cmd_list_element *c,
993                   const char *value)
994 {
995 }
996
997 /* This variable sets the number of bits in an address that are to be
998    sent in a memory ("M" or "m") packet.  Normally, after stripping
999    leading zeros, the entire address would be sent.  This variable
1000    restricts the address to REMOTE_ADDRESS_SIZE bits.  HISTORY: The
1001    initial implementation of remote.c restricted the address sent in
1002    memory packets to ``host::sizeof long'' bytes - (typically 32
1003    bits).  Consequently, for 64 bit targets, the upper 32 bits of an
1004    address was never sent.  Since fixing this bug may cause a break in
1005    some remote targets this variable is principly provided to
1006    facilitate backward compatibility.  */
1007
1008 static unsigned int remote_address_size;
1009
1010 \f
1011 /* User configurable variables for the number of characters in a
1012    memory read/write packet.  MIN (rsa->remote_packet_size,
1013    rsa->sizeof_g_packet) is the default.  Some targets need smaller
1014    values (fifo overruns, et.al.) and some users need larger values
1015    (speed up transfers).  The variables ``preferred_*'' (the user
1016    request), ``current_*'' (what was actually set) and ``forced_*''
1017    (Positive - a soft limit, negative - a hard limit).  */
1018
1019 struct memory_packet_config
1020 {
1021   const char *name;
1022   long size;
1023   int fixed_p;
1024 };
1025
1026 /* The default max memory-write-packet-size.  The 16k is historical.
1027    (It came from older GDB's using alloca for buffers and the
1028    knowledge (folklore?) that some hosts don't cope very well with
1029    large alloca calls.)  */
1030 #define DEFAULT_MAX_MEMORY_PACKET_SIZE 16384
1031
1032 /* The minimum remote packet size for memory transfers.  Ensures we
1033    can write at least one byte.  */
1034 #define MIN_MEMORY_PACKET_SIZE 20
1035
1036 /* Compute the current size of a read/write packet.  Since this makes
1037    use of ``actual_register_packet_size'' the computation is dynamic.  */
1038
1039 static long
1040 get_memory_packet_size (struct memory_packet_config *config)
1041 {
1042   struct remote_state *rs = get_remote_state ();
1043   remote_arch_state *rsa = get_remote_arch_state (target_gdbarch ());
1044
1045   long what_they_get;
1046   if (config->fixed_p)
1047     {
1048       if (config->size <= 0)
1049         what_they_get = DEFAULT_MAX_MEMORY_PACKET_SIZE;
1050       else
1051         what_they_get = config->size;
1052     }
1053   else
1054     {
1055       what_they_get = get_remote_packet_size ();
1056       /* Limit the packet to the size specified by the user.  */
1057       if (config->size > 0
1058           && what_they_get > config->size)
1059         what_they_get = config->size;
1060
1061       /* Limit it to the size of the targets ``g'' response unless we have
1062          permission from the stub to use a larger packet size.  */
1063       if (rs->explicit_packet_size == 0
1064           && rsa->actual_register_packet_size > 0
1065           && what_they_get > rsa->actual_register_packet_size)
1066         what_they_get = rsa->actual_register_packet_size;
1067     }
1068   if (what_they_get < MIN_MEMORY_PACKET_SIZE)
1069     what_they_get = MIN_MEMORY_PACKET_SIZE;
1070
1071   /* Make sure there is room in the global buffer for this packet
1072      (including its trailing NUL byte).  */
1073   if (rs->buf_size < what_they_get + 1)
1074     {
1075       rs->buf_size = 2 * what_they_get;
1076       rs->buf = (char *) xrealloc (rs->buf, 2 * what_they_get);
1077     }
1078
1079   return what_they_get;
1080 }
1081
1082 /* Update the size of a read/write packet.  If they user wants
1083    something really big then do a sanity check.  */
1084
1085 static void
1086 set_memory_packet_size (const char *args, struct memory_packet_config *config)
1087 {
1088   int fixed_p = config->fixed_p;
1089   long size = config->size;
1090
1091   if (args == NULL)
1092     error (_("Argument required (integer, `fixed' or `limited')."));
1093   else if (strcmp (args, "hard") == 0
1094       || strcmp (args, "fixed") == 0)
1095     fixed_p = 1;
1096   else if (strcmp (args, "soft") == 0
1097            || strcmp (args, "limit") == 0)
1098     fixed_p = 0;
1099   else
1100     {
1101       char *end;
1102
1103       size = strtoul (args, &end, 0);
1104       if (args == end)
1105         error (_("Invalid %s (bad syntax)."), config->name);
1106
1107       /* Instead of explicitly capping the size of a packet to or
1108          disallowing it, the user is allowed to set the size to
1109          something arbitrarily large.  */
1110     }
1111
1112   /* So that the query shows the correct value.  */
1113   if (size <= 0)
1114     size = DEFAULT_MAX_MEMORY_PACKET_SIZE;
1115
1116   /* Extra checks?  */
1117   if (fixed_p && !config->fixed_p)
1118     {
1119       if (! query (_("The target may not be able to correctly handle a %s\n"
1120                    "of %ld bytes. Change the packet size? "),
1121                    config->name, size))
1122         error (_("Packet size not changed."));
1123     }
1124   /* Update the config.  */
1125   config->fixed_p = fixed_p;
1126   config->size = size;
1127 }
1128
1129 static void
1130 show_memory_packet_size (struct memory_packet_config *config)
1131 {
1132   printf_filtered (_("The %s is %ld. "), config->name, config->size);
1133   if (config->fixed_p)
1134     printf_filtered (_("Packets are fixed at %ld bytes.\n"),
1135                      get_memory_packet_size (config));
1136   else
1137     printf_filtered (_("Packets are limited to %ld bytes.\n"),
1138                      get_memory_packet_size (config));
1139 }
1140
1141 static struct memory_packet_config memory_write_packet_config =
1142 {
1143   "memory-write-packet-size",
1144 };
1145
1146 static void
1147 set_memory_write_packet_size (const char *args, int from_tty)
1148 {
1149   set_memory_packet_size (args, &memory_write_packet_config);
1150 }
1151
1152 static void
1153 show_memory_write_packet_size (const char *args, int from_tty)
1154 {
1155   show_memory_packet_size (&memory_write_packet_config);
1156 }
1157
1158 static long
1159 get_memory_write_packet_size (void)
1160 {
1161   return get_memory_packet_size (&memory_write_packet_config);
1162 }
1163
1164 static struct memory_packet_config memory_read_packet_config =
1165 {
1166   "memory-read-packet-size",
1167 };
1168
1169 static void
1170 set_memory_read_packet_size (const char *args, int from_tty)
1171 {
1172   set_memory_packet_size (args, &memory_read_packet_config);
1173 }
1174
1175 static void
1176 show_memory_read_packet_size (const char *args, int from_tty)
1177 {
1178   show_memory_packet_size (&memory_read_packet_config);
1179 }
1180
1181 static long
1182 get_memory_read_packet_size (void)
1183 {
1184   long size = get_memory_packet_size (&memory_read_packet_config);
1185
1186   /* FIXME: cagney/1999-11-07: Functions like getpkt() need to get an
1187      extra buffer size argument before the memory read size can be
1188      increased beyond this.  */
1189   if (size > get_remote_packet_size ())
1190     size = get_remote_packet_size ();
1191   return size;
1192 }
1193
1194 \f
1195 /* Generic configuration support for packets the stub optionally
1196    supports.  Allows the user to specify the use of the packet as well
1197    as allowing GDB to auto-detect support in the remote stub.  */
1198
1199 enum packet_support
1200   {
1201     PACKET_SUPPORT_UNKNOWN = 0,
1202     PACKET_ENABLE,
1203     PACKET_DISABLE
1204   };
1205
1206 struct packet_config
1207   {
1208     const char *name;
1209     const char *title;
1210
1211     /* If auto, GDB auto-detects support for this packet or feature,
1212        either through qSupported, or by trying the packet and looking
1213        at the response.  If true, GDB assumes the target supports this
1214        packet.  If false, the packet is disabled.  Configs that don't
1215        have an associated command always have this set to auto.  */
1216     enum auto_boolean detect;
1217
1218     /* Does the target support this packet?  */
1219     enum packet_support support;
1220   };
1221
1222 /* Analyze a packet's return value and update the packet config
1223    accordingly.  */
1224
1225 enum packet_result
1226 {
1227   PACKET_ERROR,
1228   PACKET_OK,
1229   PACKET_UNKNOWN
1230 };
1231
1232 static enum packet_support packet_config_support (struct packet_config *config);
1233 static enum packet_support packet_support (int packet);
1234
1235 static void
1236 show_packet_config_cmd (struct packet_config *config)
1237 {
1238   const char *support = "internal-error";
1239
1240   switch (packet_config_support (config))
1241     {
1242     case PACKET_ENABLE:
1243       support = "enabled";
1244       break;
1245     case PACKET_DISABLE:
1246       support = "disabled";
1247       break;
1248     case PACKET_SUPPORT_UNKNOWN:
1249       support = "unknown";
1250       break;
1251     }
1252   switch (config->detect)
1253     {
1254     case AUTO_BOOLEAN_AUTO:
1255       printf_filtered (_("Support for the `%s' packet "
1256                          "is auto-detected, currently %s.\n"),
1257                        config->name, support);
1258       break;
1259     case AUTO_BOOLEAN_TRUE:
1260     case AUTO_BOOLEAN_FALSE:
1261       printf_filtered (_("Support for the `%s' packet is currently %s.\n"),
1262                        config->name, support);
1263       break;
1264     }
1265 }
1266
1267 static void
1268 add_packet_config_cmd (struct packet_config *config, const char *name,
1269                        const char *title, int legacy)
1270 {
1271   char *set_doc;
1272   char *show_doc;
1273   char *cmd_name;
1274
1275   config->name = name;
1276   config->title = title;
1277   set_doc = xstrprintf ("Set use of remote protocol `%s' (%s) packet",
1278                         name, title);
1279   show_doc = xstrprintf ("Show current use of remote "
1280                          "protocol `%s' (%s) packet",
1281                          name, title);
1282   /* set/show TITLE-packet {auto,on,off} */
1283   cmd_name = xstrprintf ("%s-packet", title);
1284   add_setshow_auto_boolean_cmd (cmd_name, class_obscure,
1285                                 &config->detect, set_doc,
1286                                 show_doc, NULL, /* help_doc */
1287                                 NULL,
1288                                 show_remote_protocol_packet_cmd,
1289                                 &remote_set_cmdlist, &remote_show_cmdlist);
1290   /* The command code copies the documentation strings.  */
1291   xfree (set_doc);
1292   xfree (show_doc);
1293   /* set/show remote NAME-packet {auto,on,off} -- legacy.  */
1294   if (legacy)
1295     {
1296       char *legacy_name;
1297
1298       legacy_name = xstrprintf ("%s-packet", name);
1299       add_alias_cmd (legacy_name, cmd_name, class_obscure, 0,
1300                      &remote_set_cmdlist);
1301       add_alias_cmd (legacy_name, cmd_name, class_obscure, 0,
1302                      &remote_show_cmdlist);
1303     }
1304 }
1305
1306 static enum packet_result
1307 packet_check_result (const char *buf)
1308 {
1309   if (buf[0] != '\0')
1310     {
1311       /* The stub recognized the packet request.  Check that the
1312          operation succeeded.  */
1313       if (buf[0] == 'E'
1314           && isxdigit (buf[1]) && isxdigit (buf[2])
1315           && buf[3] == '\0')
1316         /* "Enn"  - definitly an error.  */
1317         return PACKET_ERROR;
1318
1319       /* Always treat "E." as an error.  This will be used for
1320          more verbose error messages, such as E.memtypes.  */
1321       if (buf[0] == 'E' && buf[1] == '.')
1322         return PACKET_ERROR;
1323
1324       /* The packet may or may not be OK.  Just assume it is.  */
1325       return PACKET_OK;
1326     }
1327   else
1328     /* The stub does not support the packet.  */
1329     return PACKET_UNKNOWN;
1330 }
1331
1332 static enum packet_result
1333 packet_ok (const char *buf, struct packet_config *config)
1334 {
1335   enum packet_result result;
1336
1337   if (config->detect != AUTO_BOOLEAN_TRUE
1338       && config->support == PACKET_DISABLE)
1339     internal_error (__FILE__, __LINE__,
1340                     _("packet_ok: attempt to use a disabled packet"));
1341
1342   result = packet_check_result (buf);
1343   switch (result)
1344     {
1345     case PACKET_OK:
1346     case PACKET_ERROR:
1347       /* The stub recognized the packet request.  */
1348       if (config->support == PACKET_SUPPORT_UNKNOWN)
1349         {
1350           if (remote_debug)
1351             fprintf_unfiltered (gdb_stdlog,
1352                                 "Packet %s (%s) is supported\n",
1353                                 config->name, config->title);
1354           config->support = PACKET_ENABLE;
1355         }
1356       break;
1357     case PACKET_UNKNOWN:
1358       /* The stub does not support the packet.  */
1359       if (config->detect == AUTO_BOOLEAN_AUTO
1360           && config->support == PACKET_ENABLE)
1361         {
1362           /* If the stub previously indicated that the packet was
1363              supported then there is a protocol error.  */
1364           error (_("Protocol error: %s (%s) conflicting enabled responses."),
1365                  config->name, config->title);
1366         }
1367       else if (config->detect == AUTO_BOOLEAN_TRUE)
1368         {
1369           /* The user set it wrong.  */
1370           error (_("Enabled packet %s (%s) not recognized by stub"),
1371                  config->name, config->title);
1372         }
1373
1374       if (remote_debug)
1375         fprintf_unfiltered (gdb_stdlog,
1376                             "Packet %s (%s) is NOT supported\n",
1377                             config->name, config->title);
1378       config->support = PACKET_DISABLE;
1379       break;
1380     }
1381
1382   return result;
1383 }
1384
1385 enum {
1386   PACKET_vCont = 0,
1387   PACKET_X,
1388   PACKET_qSymbol,
1389   PACKET_P,
1390   PACKET_p,
1391   PACKET_Z0,
1392   PACKET_Z1,
1393   PACKET_Z2,
1394   PACKET_Z3,
1395   PACKET_Z4,
1396   PACKET_vFile_setfs,
1397   PACKET_vFile_open,
1398   PACKET_vFile_pread,
1399   PACKET_vFile_pwrite,
1400   PACKET_vFile_close,
1401   PACKET_vFile_unlink,
1402   PACKET_vFile_readlink,
1403   PACKET_vFile_fstat,
1404   PACKET_qXfer_auxv,
1405   PACKET_qXfer_features,
1406   PACKET_qXfer_exec_file,
1407   PACKET_qXfer_libraries,
1408   PACKET_qXfer_libraries_svr4,
1409   PACKET_qXfer_memory_map,
1410   PACKET_qXfer_spu_read,
1411   PACKET_qXfer_spu_write,
1412   PACKET_qXfer_osdata,
1413   PACKET_qXfer_threads,
1414   PACKET_qXfer_statictrace_read,
1415   PACKET_qXfer_traceframe_info,
1416   PACKET_qXfer_uib,
1417   PACKET_qGetTIBAddr,
1418   PACKET_qGetTLSAddr,
1419   PACKET_qSupported,
1420   PACKET_qTStatus,
1421   PACKET_QPassSignals,
1422   PACKET_QCatchSyscalls,
1423   PACKET_QProgramSignals,
1424   PACKET_QSetWorkingDir,
1425   PACKET_QStartupWithShell,
1426   PACKET_QEnvironmentHexEncoded,
1427   PACKET_QEnvironmentReset,
1428   PACKET_QEnvironmentUnset,
1429   PACKET_qCRC,
1430   PACKET_qSearch_memory,
1431   PACKET_vAttach,
1432   PACKET_vRun,
1433   PACKET_QStartNoAckMode,
1434   PACKET_vKill,
1435   PACKET_qXfer_siginfo_read,
1436   PACKET_qXfer_siginfo_write,
1437   PACKET_qAttached,
1438
1439   /* Support for conditional tracepoints.  */
1440   PACKET_ConditionalTracepoints,
1441
1442   /* Support for target-side breakpoint conditions.  */
1443   PACKET_ConditionalBreakpoints,
1444
1445   /* Support for target-side breakpoint commands.  */
1446   PACKET_BreakpointCommands,
1447
1448   /* Support for fast tracepoints.  */
1449   PACKET_FastTracepoints,
1450
1451   /* Support for static tracepoints.  */
1452   PACKET_StaticTracepoints,
1453
1454   /* Support for installing tracepoints while a trace experiment is
1455      running.  */
1456   PACKET_InstallInTrace,
1457
1458   PACKET_bc,
1459   PACKET_bs,
1460   PACKET_TracepointSource,
1461   PACKET_QAllow,
1462   PACKET_qXfer_fdpic,
1463   PACKET_QDisableRandomization,
1464   PACKET_QAgent,
1465   PACKET_QTBuffer_size,
1466   PACKET_Qbtrace_off,
1467   PACKET_Qbtrace_bts,
1468   PACKET_Qbtrace_pt,
1469   PACKET_qXfer_btrace,
1470
1471   /* Support for the QNonStop packet.  */
1472   PACKET_QNonStop,
1473
1474   /* Support for the QThreadEvents packet.  */
1475   PACKET_QThreadEvents,
1476
1477   /* Support for multi-process extensions.  */
1478   PACKET_multiprocess_feature,
1479
1480   /* Support for enabling and disabling tracepoints while a trace
1481      experiment is running.  */
1482   PACKET_EnableDisableTracepoints_feature,
1483
1484   /* Support for collecting strings using the tracenz bytecode.  */
1485   PACKET_tracenz_feature,
1486
1487   /* Support for continuing to run a trace experiment while GDB is
1488      disconnected.  */
1489   PACKET_DisconnectedTracing_feature,
1490
1491   /* Support for qXfer:libraries-svr4:read with a non-empty annex.  */
1492   PACKET_augmented_libraries_svr4_read_feature,
1493
1494   /* Support for the qXfer:btrace-conf:read packet.  */
1495   PACKET_qXfer_btrace_conf,
1496
1497   /* Support for the Qbtrace-conf:bts:size packet.  */
1498   PACKET_Qbtrace_conf_bts_size,
1499
1500   /* Support for swbreak+ feature.  */
1501   PACKET_swbreak_feature,
1502
1503   /* Support for hwbreak+ feature.  */
1504   PACKET_hwbreak_feature,
1505
1506   /* Support for fork events.  */
1507   PACKET_fork_event_feature,
1508
1509   /* Support for vfork events.  */
1510   PACKET_vfork_event_feature,
1511
1512   /* Support for the Qbtrace-conf:pt:size packet.  */
1513   PACKET_Qbtrace_conf_pt_size,
1514
1515   /* Support for exec events.  */
1516   PACKET_exec_event_feature,
1517
1518   /* Support for query supported vCont actions.  */
1519   PACKET_vContSupported,
1520
1521   /* Support remote CTRL-C.  */
1522   PACKET_vCtrlC,
1523
1524   /* Support TARGET_WAITKIND_NO_RESUMED.  */
1525   PACKET_no_resumed,
1526
1527   PACKET_MAX
1528 };
1529
1530 static struct packet_config remote_protocol_packets[PACKET_MAX];
1531
1532 /* Returns the packet's corresponding "set remote foo-packet" command
1533    state.  See struct packet_config for more details.  */
1534
1535 static enum auto_boolean
1536 packet_set_cmd_state (int packet)
1537 {
1538   return remote_protocol_packets[packet].detect;
1539 }
1540
1541 /* Returns whether a given packet or feature is supported.  This takes
1542    into account the state of the corresponding "set remote foo-packet"
1543    command, which may be used to bypass auto-detection.  */
1544
1545 static enum packet_support
1546 packet_config_support (struct packet_config *config)
1547 {
1548   switch (config->detect)
1549     {
1550     case AUTO_BOOLEAN_TRUE:
1551       return PACKET_ENABLE;
1552     case AUTO_BOOLEAN_FALSE:
1553       return PACKET_DISABLE;
1554     case AUTO_BOOLEAN_AUTO:
1555       return config->support;
1556     default:
1557       gdb_assert_not_reached (_("bad switch"));
1558     }
1559 }
1560
1561 /* Same as packet_config_support, but takes the packet's enum value as
1562    argument.  */
1563
1564 static enum packet_support
1565 packet_support (int packet)
1566 {
1567   struct packet_config *config = &remote_protocol_packets[packet];
1568
1569   return packet_config_support (config);
1570 }
1571
1572 static void
1573 show_remote_protocol_packet_cmd (struct ui_file *file, int from_tty,
1574                                  struct cmd_list_element *c,
1575                                  const char *value)
1576 {
1577   struct packet_config *packet;
1578
1579   for (packet = remote_protocol_packets;
1580        packet < &remote_protocol_packets[PACKET_MAX];
1581        packet++)
1582     {
1583       if (&packet->detect == c->var)
1584         {
1585           show_packet_config_cmd (packet);
1586           return;
1587         }
1588     }
1589   internal_error (__FILE__, __LINE__, _("Could not find config for %s"),
1590                   c->name);
1591 }
1592
1593 /* Should we try one of the 'Z' requests?  */
1594
1595 enum Z_packet_type
1596 {
1597   Z_PACKET_SOFTWARE_BP,
1598   Z_PACKET_HARDWARE_BP,
1599   Z_PACKET_WRITE_WP,
1600   Z_PACKET_READ_WP,
1601   Z_PACKET_ACCESS_WP,
1602   NR_Z_PACKET_TYPES
1603 };
1604
1605 /* For compatibility with older distributions.  Provide a ``set remote
1606    Z-packet ...'' command that updates all the Z packet types.  */
1607
1608 static enum auto_boolean remote_Z_packet_detect;
1609
1610 static void
1611 set_remote_protocol_Z_packet_cmd (const char *args, int from_tty,
1612                                   struct cmd_list_element *c)
1613 {
1614   int i;
1615
1616   for (i = 0; i < NR_Z_PACKET_TYPES; i++)
1617     remote_protocol_packets[PACKET_Z0 + i].detect = remote_Z_packet_detect;
1618 }
1619
1620 static void
1621 show_remote_protocol_Z_packet_cmd (struct ui_file *file, int from_tty,
1622                                    struct cmd_list_element *c,
1623                                    const char *value)
1624 {
1625   int i;
1626
1627   for (i = 0; i < NR_Z_PACKET_TYPES; i++)
1628     {
1629       show_packet_config_cmd (&remote_protocol_packets[PACKET_Z0 + i]);
1630     }
1631 }
1632
1633 /* Returns true if the multi-process extensions are in effect.  */
1634
1635 static int
1636 remote_multi_process_p (struct remote_state *rs)
1637 {
1638   return packet_support (PACKET_multiprocess_feature) == PACKET_ENABLE;
1639 }
1640
1641 /* Returns true if fork events are supported.  */
1642
1643 static int
1644 remote_fork_event_p (struct remote_state *rs)
1645 {
1646   return packet_support (PACKET_fork_event_feature) == PACKET_ENABLE;
1647 }
1648
1649 /* Returns true if vfork events are supported.  */
1650
1651 static int
1652 remote_vfork_event_p (struct remote_state *rs)
1653 {
1654   return packet_support (PACKET_vfork_event_feature) == PACKET_ENABLE;
1655 }
1656
1657 /* Returns true if exec events are supported.  */
1658
1659 static int
1660 remote_exec_event_p (struct remote_state *rs)
1661 {
1662   return packet_support (PACKET_exec_event_feature) == PACKET_ENABLE;
1663 }
1664
1665 /* Insert fork catchpoint target routine.  If fork events are enabled
1666    then return success, nothing more to do.  */
1667
1668 static int
1669 remote_insert_fork_catchpoint (struct target_ops *ops, int pid)
1670 {
1671   struct remote_state *rs = get_remote_state ();
1672
1673   return !remote_fork_event_p (rs);
1674 }
1675
1676 /* Remove fork catchpoint target routine.  Nothing to do, just
1677    return success.  */
1678
1679 static int
1680 remote_remove_fork_catchpoint (struct target_ops *ops, int pid)
1681 {
1682   return 0;
1683 }
1684
1685 /* Insert vfork catchpoint target routine.  If vfork events are enabled
1686    then return success, nothing more to do.  */
1687
1688 static int
1689 remote_insert_vfork_catchpoint (struct target_ops *ops, int pid)
1690 {
1691   struct remote_state *rs = get_remote_state ();
1692
1693   return !remote_vfork_event_p (rs);
1694 }
1695
1696 /* Remove vfork catchpoint target routine.  Nothing to do, just
1697    return success.  */
1698
1699 static int
1700 remote_remove_vfork_catchpoint (struct target_ops *ops, int pid)
1701 {
1702   return 0;
1703 }
1704
1705 /* Insert exec catchpoint target routine.  If exec events are
1706    enabled, just return success.  */
1707
1708 static int
1709 remote_insert_exec_catchpoint (struct target_ops *ops, int pid)
1710 {
1711   struct remote_state *rs = get_remote_state ();
1712
1713   return !remote_exec_event_p (rs);
1714 }
1715
1716 /* Remove exec catchpoint target routine.  Nothing to do, just
1717    return success.  */
1718
1719 static int
1720 remote_remove_exec_catchpoint (struct target_ops *ops, int pid)
1721 {
1722   return 0;
1723 }
1724
1725 \f
1726 /* Asynchronous signal handle registered as event loop source for
1727    when we have pending events ready to be passed to the core.  */
1728
1729 static struct async_event_handler *remote_async_inferior_event_token;
1730
1731 \f
1732
1733 static ptid_t magic_null_ptid;
1734 static ptid_t not_sent_ptid;
1735 static ptid_t any_thread_ptid;
1736
1737 /* Find out if the stub attached to PID (and hence GDB should offer to
1738    detach instead of killing it when bailing out).  */
1739
1740 static int
1741 remote_query_attached (int pid)
1742 {
1743   struct remote_state *rs = get_remote_state ();
1744   size_t size = get_remote_packet_size ();
1745
1746   if (packet_support (PACKET_qAttached) == PACKET_DISABLE)
1747     return 0;
1748
1749   if (remote_multi_process_p (rs))
1750     xsnprintf (rs->buf, size, "qAttached:%x", pid);
1751   else
1752     xsnprintf (rs->buf, size, "qAttached");
1753
1754   putpkt (rs->buf);
1755   getpkt (&rs->buf, &rs->buf_size, 0);
1756
1757   switch (packet_ok (rs->buf,
1758                      &remote_protocol_packets[PACKET_qAttached]))
1759     {
1760     case PACKET_OK:
1761       if (strcmp (rs->buf, "1") == 0)
1762         return 1;
1763       break;
1764     case PACKET_ERROR:
1765       warning (_("Remote failure reply: %s"), rs->buf);
1766       break;
1767     case PACKET_UNKNOWN:
1768       break;
1769     }
1770
1771   return 0;
1772 }
1773
1774 /* Add PID to GDB's inferior table.  If FAKE_PID_P is true, then PID
1775    has been invented by GDB, instead of reported by the target.  Since
1776    we can be connected to a remote system before before knowing about
1777    any inferior, mark the target with execution when we find the first
1778    inferior.  If ATTACHED is 1, then we had just attached to this
1779    inferior.  If it is 0, then we just created this inferior.  If it
1780    is -1, then try querying the remote stub to find out if it had
1781    attached to the inferior or not.  If TRY_OPEN_EXEC is true then
1782    attempt to open this inferior's executable as the main executable
1783    if no main executable is open already.  */
1784
1785 static struct inferior *
1786 remote_add_inferior (int fake_pid_p, int pid, int attached,
1787                      int try_open_exec)
1788 {
1789   struct inferior *inf;
1790
1791   /* Check whether this process we're learning about is to be
1792      considered attached, or if is to be considered to have been
1793      spawned by the stub.  */
1794   if (attached == -1)
1795     attached = remote_query_attached (pid);
1796
1797   if (gdbarch_has_global_solist (target_gdbarch ()))
1798     {
1799       /* If the target shares code across all inferiors, then every
1800          attach adds a new inferior.  */
1801       inf = add_inferior (pid);
1802
1803       /* ... and every inferior is bound to the same program space.
1804          However, each inferior may still have its own address
1805          space.  */
1806       inf->aspace = maybe_new_address_space ();
1807       inf->pspace = current_program_space;
1808     }
1809   else
1810     {
1811       /* In the traditional debugging scenario, there's a 1-1 match
1812          between program/address spaces.  We simply bind the inferior
1813          to the program space's address space.  */
1814       inf = current_inferior ();
1815       inferior_appeared (inf, pid);
1816     }
1817
1818   inf->attach_flag = attached;
1819   inf->fake_pid_p = fake_pid_p;
1820
1821   /* If no main executable is currently open then attempt to
1822      open the file that was executed to create this inferior.  */
1823   if (try_open_exec && get_exec_file (0) == NULL)
1824     exec_file_locate_attach (pid, 0, 1);
1825
1826   return inf;
1827 }
1828
1829 static struct private_thread_info *
1830   get_private_info_thread (struct thread_info *info);
1831
1832 /* Add thread PTID to GDB's thread list.  Tag it as executing/running
1833    according to RUNNING.  */
1834
1835 static void
1836 remote_add_thread (ptid_t ptid, int running, int executing)
1837 {
1838   struct remote_state *rs = get_remote_state ();
1839   struct thread_info *thread;
1840
1841   /* GDB historically didn't pull threads in the initial connection
1842      setup.  If the remote target doesn't even have a concept of
1843      threads (e.g., a bare-metal target), even if internally we
1844      consider that a single-threaded target, mentioning a new thread
1845      might be confusing to the user.  Be silent then, preserving the
1846      age old behavior.  */
1847   if (rs->starting_up)
1848     thread = add_thread_silent (ptid);
1849   else
1850     thread = add_thread (ptid);
1851
1852   get_private_info_thread (thread)->vcont_resumed = executing;
1853   set_executing (ptid, executing);
1854   set_running (ptid, running);
1855 }
1856
1857 /* Come here when we learn about a thread id from the remote target.
1858    It may be the first time we hear about such thread, so take the
1859    opportunity to add it to GDB's thread list.  In case this is the
1860    first time we're noticing its corresponding inferior, add it to
1861    GDB's inferior list as well.  EXECUTING indicates whether the
1862    thread is (internally) executing or stopped.  */
1863
1864 static void
1865 remote_notice_new_inferior (ptid_t currthread, int executing)
1866 {
1867   /* In non-stop mode, we assume new found threads are (externally)
1868      running until proven otherwise with a stop reply.  In all-stop,
1869      we can only get here if all threads are stopped.  */
1870   int running = target_is_non_stop_p () ? 1 : 0;
1871
1872   /* If this is a new thread, add it to GDB's thread list.
1873      If we leave it up to WFI to do this, bad things will happen.  */
1874
1875   if (in_thread_list (currthread) && is_exited (currthread))
1876     {
1877       /* We're seeing an event on a thread id we knew had exited.
1878          This has to be a new thread reusing the old id.  Add it.  */
1879       remote_add_thread (currthread, running, executing);
1880       return;
1881     }
1882
1883   if (!in_thread_list (currthread))
1884     {
1885       struct inferior *inf = NULL;
1886       int pid = ptid_get_pid (currthread);
1887
1888       if (ptid_is_pid (inferior_ptid)
1889           && pid == ptid_get_pid (inferior_ptid))
1890         {
1891           /* inferior_ptid has no thread member yet.  This can happen
1892              with the vAttach -> remote_wait,"TAAthread:" path if the
1893              stub doesn't support qC.  This is the first stop reported
1894              after an attach, so this is the main thread.  Update the
1895              ptid in the thread list.  */
1896           if (in_thread_list (pid_to_ptid (pid)))
1897             thread_change_ptid (inferior_ptid, currthread);
1898           else
1899             {
1900               remote_add_thread (currthread, running, executing);
1901               inferior_ptid = currthread;
1902             }
1903           return;
1904         }
1905
1906       if (ptid_equal (magic_null_ptid, inferior_ptid))
1907         {
1908           /* inferior_ptid is not set yet.  This can happen with the
1909              vRun -> remote_wait,"TAAthread:" path if the stub
1910              doesn't support qC.  This is the first stop reported
1911              after an attach, so this is the main thread.  Update the
1912              ptid in the thread list.  */
1913           thread_change_ptid (inferior_ptid, currthread);
1914           return;
1915         }
1916
1917       /* When connecting to a target remote, or to a target
1918          extended-remote which already was debugging an inferior, we
1919          may not know about it yet.  Add it before adding its child
1920          thread, so notifications are emitted in a sensible order.  */
1921       if (!in_inferior_list (ptid_get_pid (currthread)))
1922         {
1923           struct remote_state *rs = get_remote_state ();
1924           int fake_pid_p = !remote_multi_process_p (rs);
1925
1926           inf = remote_add_inferior (fake_pid_p,
1927                                      ptid_get_pid (currthread), -1, 1);
1928         }
1929
1930       /* This is really a new thread.  Add it.  */
1931       remote_add_thread (currthread, running, executing);
1932
1933       /* If we found a new inferior, let the common code do whatever
1934          it needs to with it (e.g., read shared libraries, insert
1935          breakpoints), unless we're just setting up an all-stop
1936          connection.  */
1937       if (inf != NULL)
1938         {
1939           struct remote_state *rs = get_remote_state ();
1940
1941           if (!rs->starting_up)
1942             notice_new_inferior (currthread, executing, 0);
1943         }
1944     }
1945 }
1946
1947 /* Return THREAD's private thread data, creating it if necessary.  */
1948
1949 static struct private_thread_info *
1950 get_private_info_thread (struct thread_info *thread)
1951 {
1952   gdb_assert (thread != NULL);
1953
1954   if (thread->priv == NULL)
1955     {
1956       struct private_thread_info *priv = XNEW (struct private_thread_info);
1957
1958       thread->private_dtor = free_private_thread_info;
1959       thread->priv = priv;
1960
1961       priv->core = -1;
1962       priv->extra = NULL;
1963       priv->name = NULL;
1964       priv->name = NULL;
1965       priv->last_resume_step = 0;
1966       priv->last_resume_sig = GDB_SIGNAL_0;
1967       priv->vcont_resumed = 0;
1968       priv->thread_handle = nullptr;
1969     }
1970
1971   return thread->priv;
1972 }
1973
1974 /* Return PTID's private thread data, creating it if necessary.  */
1975
1976 static struct private_thread_info *
1977 get_private_info_ptid (ptid_t ptid)
1978 {
1979   struct thread_info *info = find_thread_ptid (ptid);
1980
1981   return get_private_info_thread (info);
1982 }
1983
1984 /* Call this function as a result of
1985    1) A halt indication (T packet) containing a thread id
1986    2) A direct query of currthread
1987    3) Successful execution of set thread */
1988
1989 static void
1990 record_currthread (struct remote_state *rs, ptid_t currthread)
1991 {
1992   rs->general_thread = currthread;
1993 }
1994
1995 /* If 'QPassSignals' is supported, tell the remote stub what signals
1996    it can simply pass through to the inferior without reporting.  */
1997
1998 static void
1999 remote_pass_signals (struct target_ops *self,
2000                      int numsigs, unsigned char *pass_signals)
2001 {
2002   if (packet_support (PACKET_QPassSignals) != PACKET_DISABLE)
2003     {
2004       char *pass_packet, *p;
2005       int count = 0, i;
2006       struct remote_state *rs = get_remote_state ();
2007
2008       gdb_assert (numsigs < 256);
2009       for (i = 0; i < numsigs; i++)
2010         {
2011           if (pass_signals[i])
2012             count++;
2013         }
2014       pass_packet = (char *) xmalloc (count * 3 + strlen ("QPassSignals:") + 1);
2015       strcpy (pass_packet, "QPassSignals:");
2016       p = pass_packet + strlen (pass_packet);
2017       for (i = 0; i < numsigs; i++)
2018         {
2019           if (pass_signals[i])
2020             {
2021               if (i >= 16)
2022                 *p++ = tohex (i >> 4);
2023               *p++ = tohex (i & 15);
2024               if (count)
2025                 *p++ = ';';
2026               else
2027                 break;
2028               count--;
2029             }
2030         }
2031       *p = 0;
2032       if (!rs->last_pass_packet || strcmp (rs->last_pass_packet, pass_packet))
2033         {
2034           putpkt (pass_packet);
2035           getpkt (&rs->buf, &rs->buf_size, 0);
2036           packet_ok (rs->buf, &remote_protocol_packets[PACKET_QPassSignals]);
2037           if (rs->last_pass_packet)
2038             xfree (rs->last_pass_packet);
2039           rs->last_pass_packet = pass_packet;
2040         }
2041       else
2042         xfree (pass_packet);
2043     }
2044 }
2045
2046 /* If 'QCatchSyscalls' is supported, tell the remote stub
2047    to report syscalls to GDB.  */
2048
2049 static int
2050 remote_set_syscall_catchpoint (struct target_ops *self,
2051                                int pid, int needed, int any_count,
2052                                int table_size, int *table)
2053 {
2054   const char *catch_packet;
2055   enum packet_result result;
2056   int n_sysno = 0;
2057
2058   if (packet_support (PACKET_QCatchSyscalls) == PACKET_DISABLE)
2059     {
2060       /* Not supported.  */
2061       return 1;
2062     }
2063
2064   if (needed && !any_count)
2065     {
2066       int i;
2067
2068       /* Count how many syscalls are to be caught (table[sysno] != 0).  */
2069       for (i = 0; i < table_size; i++)
2070         {
2071           if (table[i] != 0)
2072             n_sysno++;
2073         }
2074     }
2075
2076   if (remote_debug)
2077     {
2078       fprintf_unfiltered (gdb_stdlog,
2079                           "remote_set_syscall_catchpoint "
2080                           "pid %d needed %d any_count %d n_sysno %d\n",
2081                           pid, needed, any_count, n_sysno);
2082     }
2083
2084   std::string built_packet;
2085   if (needed)
2086     {
2087       /* Prepare a packet with the sysno list, assuming max 8+1
2088          characters for a sysno.  If the resulting packet size is too
2089          big, fallback on the non-selective packet.  */
2090       const int maxpktsz = strlen ("QCatchSyscalls:1") + n_sysno * 9 + 1;
2091       built_packet.reserve (maxpktsz);
2092       built_packet = "QCatchSyscalls:1";
2093       if (!any_count)
2094         {
2095           /* Add in catch_packet each syscall to be caught (table[i] != 0).  */
2096           for (int i = 0; i < table_size; i++)
2097             {
2098               if (table[i] != 0)
2099                 string_appendf (built_packet, ";%x", i);
2100             }
2101         }
2102       if (built_packet.size () > get_remote_packet_size ())
2103         {
2104           /* catch_packet too big.  Fallback to less efficient
2105              non selective mode, with GDB doing the filtering.  */
2106           catch_packet = "QCatchSyscalls:1";
2107         }
2108       else
2109         catch_packet = built_packet.c_str ();
2110     }
2111   else
2112     catch_packet = "QCatchSyscalls:0";
2113
2114   struct remote_state *rs = get_remote_state ();
2115
2116   putpkt (catch_packet);
2117   getpkt (&rs->buf, &rs->buf_size, 0);
2118   result = packet_ok (rs->buf, &remote_protocol_packets[PACKET_QCatchSyscalls]);
2119   if (result == PACKET_OK)
2120     return 0;
2121   else
2122     return -1;
2123 }
2124
2125 /* If 'QProgramSignals' is supported, tell the remote stub what
2126    signals it should pass through to the inferior when detaching.  */
2127
2128 static void
2129 remote_program_signals (struct target_ops *self,
2130                         int numsigs, unsigned char *signals)
2131 {
2132   if (packet_support (PACKET_QProgramSignals) != PACKET_DISABLE)
2133     {
2134       char *packet, *p;
2135       int count = 0, i;
2136       struct remote_state *rs = get_remote_state ();
2137
2138       gdb_assert (numsigs < 256);
2139       for (i = 0; i < numsigs; i++)
2140         {
2141           if (signals[i])
2142             count++;
2143         }
2144       packet = (char *) xmalloc (count * 3 + strlen ("QProgramSignals:") + 1);
2145       strcpy (packet, "QProgramSignals:");
2146       p = packet + strlen (packet);
2147       for (i = 0; i < numsigs; i++)
2148         {
2149           if (signal_pass_state (i))
2150             {
2151               if (i >= 16)
2152                 *p++ = tohex (i >> 4);
2153               *p++ = tohex (i & 15);
2154               if (count)
2155                 *p++ = ';';
2156               else
2157                 break;
2158               count--;
2159             }
2160         }
2161       *p = 0;
2162       if (!rs->last_program_signals_packet
2163           || strcmp (rs->last_program_signals_packet, packet) != 0)
2164         {
2165           putpkt (packet);
2166           getpkt (&rs->buf, &rs->buf_size, 0);
2167           packet_ok (rs->buf, &remote_protocol_packets[PACKET_QProgramSignals]);
2168           xfree (rs->last_program_signals_packet);
2169           rs->last_program_signals_packet = packet;
2170         }
2171       else
2172         xfree (packet);
2173     }
2174 }
2175
2176 /* If PTID is MAGIC_NULL_PTID, don't set any thread.  If PTID is
2177    MINUS_ONE_PTID, set the thread to -1, so the stub returns the
2178    thread.  If GEN is set, set the general thread, if not, then set
2179    the step/continue thread.  */
2180 static void
2181 set_thread (ptid_t ptid, int gen)
2182 {
2183   struct remote_state *rs = get_remote_state ();
2184   ptid_t state = gen ? rs->general_thread : rs->continue_thread;
2185   char *buf = rs->buf;
2186   char *endbuf = rs->buf + get_remote_packet_size ();
2187
2188   if (ptid_equal (state, ptid))
2189     return;
2190
2191   *buf++ = 'H';
2192   *buf++ = gen ? 'g' : 'c';
2193   if (ptid_equal (ptid, magic_null_ptid))
2194     xsnprintf (buf, endbuf - buf, "0");
2195   else if (ptid_equal (ptid, any_thread_ptid))
2196     xsnprintf (buf, endbuf - buf, "0");
2197   else if (ptid_equal (ptid, minus_one_ptid))
2198     xsnprintf (buf, endbuf - buf, "-1");
2199   else
2200     write_ptid (buf, endbuf, ptid);
2201   putpkt (rs->buf);
2202   getpkt (&rs->buf, &rs->buf_size, 0);
2203   if (gen)
2204     rs->general_thread = ptid;
2205   else
2206     rs->continue_thread = ptid;
2207 }
2208
2209 static void
2210 set_general_thread (ptid_t ptid)
2211 {
2212   set_thread (ptid, 1);
2213 }
2214
2215 static void
2216 set_continue_thread (ptid_t ptid)
2217 {
2218   set_thread (ptid, 0);
2219 }
2220
2221 /* Change the remote current process.  Which thread within the process
2222    ends up selected isn't important, as long as it is the same process
2223    as what INFERIOR_PTID points to.
2224
2225    This comes from that fact that there is no explicit notion of
2226    "selected process" in the protocol.  The selected process for
2227    general operations is the process the selected general thread
2228    belongs to.  */
2229
2230 static void
2231 set_general_process (void)
2232 {
2233   struct remote_state *rs = get_remote_state ();
2234
2235   /* If the remote can't handle multiple processes, don't bother.  */
2236   if (!remote_multi_process_p (rs))
2237     return;
2238
2239   /* We only need to change the remote current thread if it's pointing
2240      at some other process.  */
2241   if (ptid_get_pid (rs->general_thread) != ptid_get_pid (inferior_ptid))
2242     set_general_thread (inferior_ptid);
2243 }
2244
2245 \f
2246 /* Return nonzero if this is the main thread that we made up ourselves
2247    to model non-threaded targets as single-threaded.  */
2248
2249 static int
2250 remote_thread_always_alive (struct target_ops *ops, ptid_t ptid)
2251 {
2252   if (ptid_equal (ptid, magic_null_ptid))
2253     /* The main thread is always alive.  */
2254     return 1;
2255
2256   if (ptid_get_pid (ptid) != 0 && ptid_get_lwp (ptid) == 0)
2257     /* The main thread is always alive.  This can happen after a
2258        vAttach, if the remote side doesn't support
2259        multi-threading.  */
2260     return 1;
2261
2262   return 0;
2263 }
2264
2265 /* Return nonzero if the thread PTID is still alive on the remote
2266    system.  */
2267
2268 static int
2269 remote_thread_alive (struct target_ops *ops, ptid_t ptid)
2270 {
2271   struct remote_state *rs = get_remote_state ();
2272   char *p, *endp;
2273
2274   /* Check if this is a thread that we made up ourselves to model
2275      non-threaded targets as single-threaded.  */
2276   if (remote_thread_always_alive (ops, ptid))
2277     return 1;
2278
2279   p = rs->buf;
2280   endp = rs->buf + get_remote_packet_size ();
2281
2282   *p++ = 'T';
2283   write_ptid (p, endp, ptid);
2284
2285   putpkt (rs->buf);
2286   getpkt (&rs->buf, &rs->buf_size, 0);
2287   return (rs->buf[0] == 'O' && rs->buf[1] == 'K');
2288 }
2289
2290 /* Return a pointer to a thread name if we know it and NULL otherwise.
2291    The thread_info object owns the memory for the name.  */
2292
2293 static const char *
2294 remote_thread_name (struct target_ops *ops, struct thread_info *info)
2295 {
2296   if (info->priv != NULL)
2297     return info->priv->name;
2298
2299   return NULL;
2300 }
2301
2302 /* About these extended threadlist and threadinfo packets.  They are
2303    variable length packets but, the fields within them are often fixed
2304    length.  They are redundent enough to send over UDP as is the
2305    remote protocol in general.  There is a matching unit test module
2306    in libstub.  */
2307
2308 /* WARNING: This threadref data structure comes from the remote O.S.,
2309    libstub protocol encoding, and remote.c.  It is not particularly
2310    changable.  */
2311
2312 /* Right now, the internal structure is int. We want it to be bigger.
2313    Plan to fix this.  */
2314
2315 typedef int gdb_threadref;      /* Internal GDB thread reference.  */
2316
2317 /* gdb_ext_thread_info is an internal GDB data structure which is
2318    equivalent to the reply of the remote threadinfo packet.  */
2319
2320 struct gdb_ext_thread_info
2321   {
2322     threadref threadid;         /* External form of thread reference.  */
2323     int active;                 /* Has state interesting to GDB?
2324                                    regs, stack.  */
2325     char display[256];          /* Brief state display, name,
2326                                    blocked/suspended.  */
2327     char shortname[32];         /* To be used to name threads.  */
2328     char more_display[256];     /* Long info, statistics, queue depth,
2329                                    whatever.  */
2330   };
2331
2332 /* The volume of remote transfers can be limited by submitting
2333    a mask containing bits specifying the desired information.
2334    Use a union of these values as the 'selection' parameter to
2335    get_thread_info.  FIXME: Make these TAG names more thread specific.  */
2336
2337 #define TAG_THREADID 1
2338 #define TAG_EXISTS 2
2339 #define TAG_DISPLAY 4
2340 #define TAG_THREADNAME 8
2341 #define TAG_MOREDISPLAY 16
2342
2343 #define BUF_THREAD_ID_SIZE (OPAQUETHREADBYTES * 2)
2344
2345 static char *unpack_nibble (char *buf, int *val);
2346
2347 static char *unpack_byte (char *buf, int *value);
2348
2349 static char *pack_int (char *buf, int value);
2350
2351 static char *unpack_int (char *buf, int *value);
2352
2353 static char *unpack_string (char *src, char *dest, int length);
2354
2355 static char *pack_threadid (char *pkt, threadref *id);
2356
2357 static char *unpack_threadid (char *inbuf, threadref *id);
2358
2359 void int_to_threadref (threadref *id, int value);
2360
2361 static int threadref_to_int (threadref *ref);
2362
2363 static void copy_threadref (threadref *dest, threadref *src);
2364
2365 static int threadmatch (threadref *dest, threadref *src);
2366
2367 static char *pack_threadinfo_request (char *pkt, int mode,
2368                                       threadref *id);
2369
2370 static int remote_unpack_thread_info_response (char *pkt,
2371                                                threadref *expectedref,
2372                                                struct gdb_ext_thread_info
2373                                                *info);
2374
2375
2376 static int remote_get_threadinfo (threadref *threadid,
2377                                   int fieldset, /*TAG mask */
2378                                   struct gdb_ext_thread_info *info);
2379
2380 static char *pack_threadlist_request (char *pkt, int startflag,
2381                                       int threadcount,
2382                                       threadref *nextthread);
2383
2384 static int parse_threadlist_response (char *pkt,
2385                                       int result_limit,
2386                                       threadref *original_echo,
2387                                       threadref *resultlist,
2388                                       int *doneflag);
2389
2390 static int remote_get_threadlist (int startflag,
2391                                   threadref *nextthread,
2392                                   int result_limit,
2393                                   int *done,
2394                                   int *result_count,
2395                                   threadref *threadlist);
2396
2397 typedef int (*rmt_thread_action) (threadref *ref, void *context);
2398
2399 static int remote_threadlist_iterator (rmt_thread_action stepfunction,
2400                                        void *context, int looplimit);
2401
2402 static int remote_newthread_step (threadref *ref, void *context);
2403
2404
2405 /* Write a PTID to BUF.  ENDBUF points to one-passed-the-end of the
2406    buffer we're allowed to write to.  Returns
2407    BUF+CHARACTERS_WRITTEN.  */
2408
2409 static char *
2410 write_ptid (char *buf, const char *endbuf, ptid_t ptid)
2411 {
2412   int pid, tid;
2413   struct remote_state *rs = get_remote_state ();
2414
2415   if (remote_multi_process_p (rs))
2416     {
2417       pid = ptid_get_pid (ptid);
2418       if (pid < 0)
2419         buf += xsnprintf (buf, endbuf - buf, "p-%x.", -pid);
2420       else
2421         buf += xsnprintf (buf, endbuf - buf, "p%x.", pid);
2422     }
2423   tid = ptid_get_lwp (ptid);
2424   if (tid < 0)
2425     buf += xsnprintf (buf, endbuf - buf, "-%x", -tid);
2426   else
2427     buf += xsnprintf (buf, endbuf - buf, "%x", tid);
2428
2429   return buf;
2430 }
2431
2432 /* Extract a PTID from BUF.  If non-null, OBUF is set to one past the
2433    last parsed char.  Returns null_ptid if no thread id is found, and
2434    throws an error if the thread id has an invalid format.  */
2435
2436 static ptid_t
2437 read_ptid (const char *buf, const char **obuf)
2438 {
2439   const char *p = buf;
2440   const char *pp;
2441   ULONGEST pid = 0, tid = 0;
2442
2443   if (*p == 'p')
2444     {
2445       /* Multi-process ptid.  */
2446       pp = unpack_varlen_hex (p + 1, &pid);
2447       if (*pp != '.')
2448         error (_("invalid remote ptid: %s"), p);
2449
2450       p = pp;
2451       pp = unpack_varlen_hex (p + 1, &tid);
2452       if (obuf)
2453         *obuf = pp;
2454       return ptid_build (pid, tid, 0);
2455     }
2456
2457   /* No multi-process.  Just a tid.  */
2458   pp = unpack_varlen_hex (p, &tid);
2459
2460   /* Return null_ptid when no thread id is found.  */
2461   if (p == pp)
2462     {
2463       if (obuf)
2464         *obuf = pp;
2465       return null_ptid;
2466     }
2467
2468   /* Since the stub is not sending a process id, then default to
2469      what's in inferior_ptid, unless it's null at this point.  If so,
2470      then since there's no way to know the pid of the reported
2471      threads, use the magic number.  */
2472   if (ptid_equal (inferior_ptid, null_ptid))
2473     pid = ptid_get_pid (magic_null_ptid);
2474   else
2475     pid = ptid_get_pid (inferior_ptid);
2476
2477   if (obuf)
2478     *obuf = pp;
2479   return ptid_build (pid, tid, 0);
2480 }
2481
2482 static int
2483 stubhex (int ch)
2484 {
2485   if (ch >= 'a' && ch <= 'f')
2486     return ch - 'a' + 10;
2487   if (ch >= '0' && ch <= '9')
2488     return ch - '0';
2489   if (ch >= 'A' && ch <= 'F')
2490     return ch - 'A' + 10;
2491   return -1;
2492 }
2493
2494 static int
2495 stub_unpack_int (char *buff, int fieldlength)
2496 {
2497   int nibble;
2498   int retval = 0;
2499
2500   while (fieldlength)
2501     {
2502       nibble = stubhex (*buff++);
2503       retval |= nibble;
2504       fieldlength--;
2505       if (fieldlength)
2506         retval = retval << 4;
2507     }
2508   return retval;
2509 }
2510
2511 static char *
2512 unpack_nibble (char *buf, int *val)
2513 {
2514   *val = fromhex (*buf++);
2515   return buf;
2516 }
2517
2518 static char *
2519 unpack_byte (char *buf, int *value)
2520 {
2521   *value = stub_unpack_int (buf, 2);
2522   return buf + 2;
2523 }
2524
2525 static char *
2526 pack_int (char *buf, int value)
2527 {
2528   buf = pack_hex_byte (buf, (value >> 24) & 0xff);
2529   buf = pack_hex_byte (buf, (value >> 16) & 0xff);
2530   buf = pack_hex_byte (buf, (value >> 8) & 0x0ff);
2531   buf = pack_hex_byte (buf, (value & 0xff));
2532   return buf;
2533 }
2534
2535 static char *
2536 unpack_int (char *buf, int *value)
2537 {
2538   *value = stub_unpack_int (buf, 8);
2539   return buf + 8;
2540 }
2541
2542 #if 0                   /* Currently unused, uncomment when needed.  */
2543 static char *pack_string (char *pkt, char *string);
2544
2545 static char *
2546 pack_string (char *pkt, char *string)
2547 {
2548   char ch;
2549   int len;
2550
2551   len = strlen (string);
2552   if (len > 200)
2553     len = 200;          /* Bigger than most GDB packets, junk???  */
2554   pkt = pack_hex_byte (pkt, len);
2555   while (len-- > 0)
2556     {
2557       ch = *string++;
2558       if ((ch == '\0') || (ch == '#'))
2559         ch = '*';               /* Protect encapsulation.  */
2560       *pkt++ = ch;
2561     }
2562   return pkt;
2563 }
2564 #endif /* 0 (unused) */
2565
2566 static char *
2567 unpack_string (char *src, char *dest, int length)
2568 {
2569   while (length--)
2570     *dest++ = *src++;
2571   *dest = '\0';
2572   return src;
2573 }
2574
2575 static char *
2576 pack_threadid (char *pkt, threadref *id)
2577 {
2578   char *limit;
2579   unsigned char *altid;
2580
2581   altid = (unsigned char *) id;
2582   limit = pkt + BUF_THREAD_ID_SIZE;
2583   while (pkt < limit)
2584     pkt = pack_hex_byte (pkt, *altid++);
2585   return pkt;
2586 }
2587
2588
2589 static char *
2590 unpack_threadid (char *inbuf, threadref *id)
2591 {
2592   char *altref;
2593   char *limit = inbuf + BUF_THREAD_ID_SIZE;
2594   int x, y;
2595
2596   altref = (char *) id;
2597
2598   while (inbuf < limit)
2599     {
2600       x = stubhex (*inbuf++);
2601       y = stubhex (*inbuf++);
2602       *altref++ = (x << 4) | y;
2603     }
2604   return inbuf;
2605 }
2606
2607 /* Externally, threadrefs are 64 bits but internally, they are still
2608    ints.  This is due to a mismatch of specifications.  We would like
2609    to use 64bit thread references internally.  This is an adapter
2610    function.  */
2611
2612 void
2613 int_to_threadref (threadref *id, int value)
2614 {
2615   unsigned char *scan;
2616
2617   scan = (unsigned char *) id;
2618   {
2619     int i = 4;
2620     while (i--)
2621       *scan++ = 0;
2622   }
2623   *scan++ = (value >> 24) & 0xff;
2624   *scan++ = (value >> 16) & 0xff;
2625   *scan++ = (value >> 8) & 0xff;
2626   *scan++ = (value & 0xff);
2627 }
2628
2629 static int
2630 threadref_to_int (threadref *ref)
2631 {
2632   int i, value = 0;
2633   unsigned char *scan;
2634
2635   scan = *ref;
2636   scan += 4;
2637   i = 4;
2638   while (i-- > 0)
2639     value = (value << 8) | ((*scan++) & 0xff);
2640   return value;
2641 }
2642
2643 static void
2644 copy_threadref (threadref *dest, threadref *src)
2645 {
2646   int i;
2647   unsigned char *csrc, *cdest;
2648
2649   csrc = (unsigned char *) src;
2650   cdest = (unsigned char *) dest;
2651   i = 8;
2652   while (i--)
2653     *cdest++ = *csrc++;
2654 }
2655
2656 static int
2657 threadmatch (threadref *dest, threadref *src)
2658 {
2659   /* Things are broken right now, so just assume we got a match.  */
2660 #if 0
2661   unsigned char *srcp, *destp;
2662   int i, result;
2663   srcp = (char *) src;
2664   destp = (char *) dest;
2665
2666   result = 1;
2667   while (i-- > 0)
2668     result &= (*srcp++ == *destp++) ? 1 : 0;
2669   return result;
2670 #endif
2671   return 1;
2672 }
2673
2674 /*
2675    threadid:1,        # always request threadid
2676    context_exists:2,
2677    display:4,
2678    unique_name:8,
2679    more_display:16
2680  */
2681
2682 /* Encoding:  'Q':8,'P':8,mask:32,threadid:64 */
2683
2684 static char *
2685 pack_threadinfo_request (char *pkt, int mode, threadref *id)
2686 {
2687   *pkt++ = 'q';                         /* Info Query */
2688   *pkt++ = 'P';                         /* process or thread info */
2689   pkt = pack_int (pkt, mode);           /* mode */
2690   pkt = pack_threadid (pkt, id);        /* threadid */
2691   *pkt = '\0';                          /* terminate */
2692   return pkt;
2693 }
2694
2695 /* These values tag the fields in a thread info response packet.  */
2696 /* Tagging the fields allows us to request specific fields and to
2697    add more fields as time goes by.  */
2698
2699 #define TAG_THREADID 1          /* Echo the thread identifier.  */
2700 #define TAG_EXISTS 2            /* Is this process defined enough to
2701                                    fetch registers and its stack?  */
2702 #define TAG_DISPLAY 4           /* A short thing maybe to put on a window */
2703 #define TAG_THREADNAME 8        /* string, maps 1-to-1 with a thread is.  */
2704 #define TAG_MOREDISPLAY 16      /* Whatever the kernel wants to say about
2705                                    the process.  */
2706
2707 static int
2708 remote_unpack_thread_info_response (char *pkt, threadref *expectedref,
2709                                     struct gdb_ext_thread_info *info)
2710 {
2711   struct remote_state *rs = get_remote_state ();
2712   int mask, length;
2713   int tag;
2714   threadref ref;
2715   char *limit = pkt + rs->buf_size; /* Plausible parsing limit.  */
2716   int retval = 1;
2717
2718   /* info->threadid = 0; FIXME: implement zero_threadref.  */
2719   info->active = 0;
2720   info->display[0] = '\0';
2721   info->shortname[0] = '\0';
2722   info->more_display[0] = '\0';
2723
2724   /* Assume the characters indicating the packet type have been
2725      stripped.  */
2726   pkt = unpack_int (pkt, &mask);        /* arg mask */
2727   pkt = unpack_threadid (pkt, &ref);
2728
2729   if (mask == 0)
2730     warning (_("Incomplete response to threadinfo request."));
2731   if (!threadmatch (&ref, expectedref))
2732     {                   /* This is an answer to a different request.  */
2733       warning (_("ERROR RMT Thread info mismatch."));
2734       return 0;
2735     }
2736   copy_threadref (&info->threadid, &ref);
2737
2738   /* Loop on tagged fields , try to bail if somthing goes wrong.  */
2739
2740   /* Packets are terminated with nulls.  */
2741   while ((pkt < limit) && mask && *pkt)
2742     {
2743       pkt = unpack_int (pkt, &tag);     /* tag */
2744       pkt = unpack_byte (pkt, &length); /* length */
2745       if (!(tag & mask))                /* Tags out of synch with mask.  */
2746         {
2747           warning (_("ERROR RMT: threadinfo tag mismatch."));
2748           retval = 0;
2749           break;
2750         }
2751       if (tag == TAG_THREADID)
2752         {
2753           if (length != 16)
2754             {
2755               warning (_("ERROR RMT: length of threadid is not 16."));
2756               retval = 0;
2757               break;
2758             }
2759           pkt = unpack_threadid (pkt, &ref);
2760           mask = mask & ~TAG_THREADID;
2761           continue;
2762         }
2763       if (tag == TAG_EXISTS)
2764         {
2765           info->active = stub_unpack_int (pkt, length);
2766           pkt += length;
2767           mask = mask & ~(TAG_EXISTS);
2768           if (length > 8)
2769             {
2770               warning (_("ERROR RMT: 'exists' length too long."));
2771               retval = 0;
2772               break;
2773             }
2774           continue;
2775         }
2776       if (tag == TAG_THREADNAME)
2777         {
2778           pkt = unpack_string (pkt, &info->shortname[0], length);
2779           mask = mask & ~TAG_THREADNAME;
2780           continue;
2781         }
2782       if (tag == TAG_DISPLAY)
2783         {
2784           pkt = unpack_string (pkt, &info->display[0], length);
2785           mask = mask & ~TAG_DISPLAY;
2786           continue;
2787         }
2788       if (tag == TAG_MOREDISPLAY)
2789         {
2790           pkt = unpack_string (pkt, &info->more_display[0], length);
2791           mask = mask & ~TAG_MOREDISPLAY;
2792           continue;
2793         }
2794       warning (_("ERROR RMT: unknown thread info tag."));
2795       break;                    /* Not a tag we know about.  */
2796     }
2797   return retval;
2798 }
2799
2800 static int
2801 remote_get_threadinfo (threadref *threadid, int fieldset,       /* TAG mask */
2802                        struct gdb_ext_thread_info *info)
2803 {
2804   struct remote_state *rs = get_remote_state ();
2805   int result;
2806
2807   pack_threadinfo_request (rs->buf, fieldset, threadid);
2808   putpkt (rs->buf);
2809   getpkt (&rs->buf, &rs->buf_size, 0);
2810
2811   if (rs->buf[0] == '\0')
2812     return 0;
2813
2814   result = remote_unpack_thread_info_response (rs->buf + 2,
2815                                                threadid, info);
2816   return result;
2817 }
2818
2819 /*    Format: i'Q':8,i"L":8,initflag:8,batchsize:16,lastthreadid:32   */
2820
2821 static char *
2822 pack_threadlist_request (char *pkt, int startflag, int threadcount,
2823                          threadref *nextthread)
2824 {
2825   *pkt++ = 'q';                 /* info query packet */
2826   *pkt++ = 'L';                 /* Process LIST or threadLIST request */
2827   pkt = pack_nibble (pkt, startflag);           /* initflag 1 bytes */
2828   pkt = pack_hex_byte (pkt, threadcount);       /* threadcount 2 bytes */
2829   pkt = pack_threadid (pkt, nextthread);        /* 64 bit thread identifier */
2830   *pkt = '\0';
2831   return pkt;
2832 }
2833
2834 /* Encoding:   'q':8,'M':8,count:16,done:8,argthreadid:64,(threadid:64)* */
2835
2836 static int
2837 parse_threadlist_response (char *pkt, int result_limit,
2838                            threadref *original_echo, threadref *resultlist,
2839                            int *doneflag)
2840 {
2841   struct remote_state *rs = get_remote_state ();
2842   char *limit;
2843   int count, resultcount, done;
2844
2845   resultcount = 0;
2846   /* Assume the 'q' and 'M chars have been stripped.  */
2847   limit = pkt + (rs->buf_size - BUF_THREAD_ID_SIZE);
2848   /* done parse past here */
2849   pkt = unpack_byte (pkt, &count);      /* count field */
2850   pkt = unpack_nibble (pkt, &done);
2851   /* The first threadid is the argument threadid.  */
2852   pkt = unpack_threadid (pkt, original_echo);   /* should match query packet */
2853   while ((count-- > 0) && (pkt < limit))
2854     {
2855       pkt = unpack_threadid (pkt, resultlist++);
2856       if (resultcount++ >= result_limit)
2857         break;
2858     }
2859   if (doneflag)
2860     *doneflag = done;
2861   return resultcount;
2862 }
2863
2864 /* Fetch the next batch of threads from the remote.  Returns -1 if the
2865    qL packet is not supported, 0 on error and 1 on success.  */
2866
2867 static int
2868 remote_get_threadlist (int startflag, threadref *nextthread, int result_limit,
2869                        int *done, int *result_count, threadref *threadlist)
2870 {
2871   struct remote_state *rs = get_remote_state ();
2872   int result = 1;
2873
2874   /* Trancate result limit to be smaller than the packet size.  */
2875   if ((((result_limit + 1) * BUF_THREAD_ID_SIZE) + 10)
2876       >= get_remote_packet_size ())
2877     result_limit = (get_remote_packet_size () / BUF_THREAD_ID_SIZE) - 2;
2878
2879   pack_threadlist_request (rs->buf, startflag, result_limit, nextthread);
2880   putpkt (rs->buf);
2881   getpkt (&rs->buf, &rs->buf_size, 0);
2882   if (*rs->buf == '\0')
2883     {
2884       /* Packet not supported.  */
2885       return -1;
2886     }
2887
2888   *result_count =
2889     parse_threadlist_response (rs->buf + 2, result_limit,
2890                                &rs->echo_nextthread, threadlist, done);
2891
2892   if (!threadmatch (&rs->echo_nextthread, nextthread))
2893     {
2894       /* FIXME: This is a good reason to drop the packet.  */
2895       /* Possably, there is a duplicate response.  */
2896       /* Possabilities :
2897          retransmit immediatly - race conditions
2898          retransmit after timeout - yes
2899          exit
2900          wait for packet, then exit
2901        */
2902       warning (_("HMM: threadlist did not echo arg thread, dropping it."));
2903       return 0;                 /* I choose simply exiting.  */
2904     }
2905   if (*result_count <= 0)
2906     {
2907       if (*done != 1)
2908         {
2909           warning (_("RMT ERROR : failed to get remote thread list."));
2910           result = 0;
2911         }
2912       return result;            /* break; */
2913     }
2914   if (*result_count > result_limit)
2915     {
2916       *result_count = 0;
2917       warning (_("RMT ERROR: threadlist response longer than requested."));
2918       return 0;
2919     }
2920   return result;
2921 }
2922
2923 /* Fetch the list of remote threads, with the qL packet, and call
2924    STEPFUNCTION for each thread found.  Stops iterating and returns 1
2925    if STEPFUNCTION returns true.  Stops iterating and returns 0 if the
2926    STEPFUNCTION returns false.  If the packet is not supported,
2927    returns -1.  */
2928
2929 static int
2930 remote_threadlist_iterator (rmt_thread_action stepfunction, void *context,
2931                             int looplimit)
2932 {
2933   struct remote_state *rs = get_remote_state ();
2934   int done, i, result_count;
2935   int startflag = 1;
2936   int result = 1;
2937   int loopcount = 0;
2938
2939   done = 0;
2940   while (!done)
2941     {
2942       if (loopcount++ > looplimit)
2943         {
2944           result = 0;
2945           warning (_("Remote fetch threadlist -infinite loop-."));
2946           break;
2947         }
2948       result = remote_get_threadlist (startflag, &rs->nextthread,
2949                                       MAXTHREADLISTRESULTS,
2950                                       &done, &result_count,
2951                                       rs->resultthreadlist);
2952       if (result <= 0)
2953         break;
2954       /* Clear for later iterations.  */
2955       startflag = 0;
2956       /* Setup to resume next batch of thread references, set nextthread.  */
2957       if (result_count >= 1)
2958         copy_threadref (&rs->nextthread,
2959                         &rs->resultthreadlist[result_count - 1]);
2960       i = 0;
2961       while (result_count--)
2962         {
2963           if (!(*stepfunction) (&rs->resultthreadlist[i++], context))
2964             {
2965               result = 0;
2966               break;
2967             }
2968         }
2969     }
2970   return result;
2971 }
2972
2973 /* A thread found on the remote target.  */
2974
2975 struct thread_item
2976 {
2977   explicit thread_item (ptid_t ptid_)
2978   : ptid (ptid_)
2979   {}
2980
2981   thread_item (thread_item &&other) = default;
2982   thread_item &operator= (thread_item &&other) = default;
2983
2984   DISABLE_COPY_AND_ASSIGN (thread_item);
2985
2986   /* The thread's PTID.  */
2987   ptid_t ptid;
2988
2989   /* The thread's extra info.  */
2990   std::string extra;
2991
2992   /* The thread's name.  */
2993   std::string name;
2994
2995   /* The core the thread was running on.  -1 if not known.  */
2996   int core = -1;
2997
2998   /* The thread handle associated with the thread.  */
2999   gdb::byte_vector thread_handle;
3000
3001 };
3002
3003 /* Context passed around to the various methods listing remote
3004    threads.  As new threads are found, they're added to the ITEMS
3005    vector.  */
3006
3007 struct threads_listing_context
3008 {
3009   /* Return true if this object contains an entry for a thread with ptid
3010      PTID.  */
3011
3012   bool contains_thread (ptid_t ptid) const
3013   {
3014     auto match_ptid = [&] (const thread_item &item)
3015       {
3016         return item.ptid == ptid;
3017       };
3018
3019     auto it = std::find_if (this->items.begin (),
3020                             this->items.end (),
3021                             match_ptid);
3022
3023     return it != this->items.end ();
3024   }
3025
3026   /* Remove the thread with ptid PTID.  */
3027
3028   void remove_thread (ptid_t ptid)
3029   {
3030     auto match_ptid = [&] (const thread_item &item)
3031       {
3032         return item.ptid == ptid;
3033       };
3034
3035     auto it = std::remove_if (this->items.begin (),
3036                               this->items.end (),
3037                               match_ptid);
3038
3039     if (it != this->items.end ())
3040       this->items.erase (it);
3041   }
3042
3043   /* The threads found on the remote target.  */
3044   std::vector<thread_item> items;
3045 };
3046
3047 static int
3048 remote_newthread_step (threadref *ref, void *data)
3049 {
3050   struct threads_listing_context *context
3051     = (struct threads_listing_context *) data;
3052   int pid = inferior_ptid.pid ();
3053   int lwp = threadref_to_int (ref);
3054   ptid_t ptid (pid, lwp);
3055
3056   context->items.emplace_back (ptid);
3057
3058   return 1;                     /* continue iterator */
3059 }
3060
3061 #define CRAZY_MAX_THREADS 1000
3062
3063 static ptid_t
3064 remote_current_thread (ptid_t oldpid)
3065 {
3066   struct remote_state *rs = get_remote_state ();
3067
3068   putpkt ("qC");
3069   getpkt (&rs->buf, &rs->buf_size, 0);
3070   if (rs->buf[0] == 'Q' && rs->buf[1] == 'C')
3071     {
3072       const char *obuf;
3073       ptid_t result;
3074
3075       result = read_ptid (&rs->buf[2], &obuf);
3076       if (*obuf != '\0' && remote_debug)
3077         fprintf_unfiltered (gdb_stdlog,
3078                             "warning: garbage in qC reply\n");
3079
3080       return result;
3081     }
3082   else
3083     return oldpid;
3084 }
3085
3086 /* List remote threads using the deprecated qL packet.  */
3087
3088 static int
3089 remote_get_threads_with_ql (struct target_ops *ops,
3090                             struct threads_listing_context *context)
3091 {
3092   if (remote_threadlist_iterator (remote_newthread_step, context,
3093                                   CRAZY_MAX_THREADS) >= 0)
3094     return 1;
3095
3096   return 0;
3097 }
3098
3099 #if defined(HAVE_LIBEXPAT)
3100
3101 static void
3102 start_thread (struct gdb_xml_parser *parser,
3103               const struct gdb_xml_element *element,
3104               void *user_data, VEC(gdb_xml_value_s) *attributes)
3105 {
3106   struct threads_listing_context *data
3107     = (struct threads_listing_context *) user_data;
3108   struct gdb_xml_value *attr;
3109
3110   char *id = (char *) xml_find_attribute (attributes, "id")->value;
3111   ptid_t ptid = read_ptid (id, NULL);
3112
3113   data->items.emplace_back (ptid);
3114   thread_item &item = data->items.back ();
3115
3116   attr = xml_find_attribute (attributes, "core");
3117   if (attr != NULL)
3118     item.core = *(ULONGEST *) attr->value;
3119
3120   attr = xml_find_attribute (attributes, "name");
3121   if (attr != NULL)
3122     item.name = (const char *) attr->value;
3123
3124   attr = xml_find_attribute (attributes, "handle");
3125   if (attr != NULL)
3126     item.thread_handle = hex2bin ((const char *) attr->value);
3127 }
3128
3129 static void
3130 end_thread (struct gdb_xml_parser *parser,
3131             const struct gdb_xml_element *element,
3132             void *user_data, const char *body_text)
3133 {
3134   struct threads_listing_context *data
3135     = (struct threads_listing_context *) user_data;
3136
3137   if (body_text != NULL && *body_text != '\0')
3138     data->items.back ().extra = body_text;
3139 }
3140
3141 const struct gdb_xml_attribute thread_attributes[] = {
3142   { "id", GDB_XML_AF_NONE, NULL, NULL },
3143   { "core", GDB_XML_AF_OPTIONAL, gdb_xml_parse_attr_ulongest, NULL },
3144   { "name", GDB_XML_AF_OPTIONAL, NULL, NULL },
3145   { "handle", GDB_XML_AF_OPTIONAL, NULL, NULL },
3146   { NULL, GDB_XML_AF_NONE, NULL, NULL }
3147 };
3148
3149 const struct gdb_xml_element thread_children[] = {
3150   { NULL, NULL, NULL, GDB_XML_EF_NONE, NULL, NULL }
3151 };
3152
3153 const struct gdb_xml_element threads_children[] = {
3154   { "thread", thread_attributes, thread_children,
3155     GDB_XML_EF_REPEATABLE | GDB_XML_EF_OPTIONAL,
3156     start_thread, end_thread },
3157   { NULL, NULL, NULL, GDB_XML_EF_NONE, NULL, NULL }
3158 };
3159
3160 const struct gdb_xml_element threads_elements[] = {
3161   { "threads", NULL, threads_children,
3162     GDB_XML_EF_NONE, NULL, NULL },
3163   { NULL, NULL, NULL, GDB_XML_EF_NONE, NULL, NULL }
3164 };
3165
3166 #endif
3167
3168 /* List remote threads using qXfer:threads:read.  */
3169
3170 static int
3171 remote_get_threads_with_qxfer (struct target_ops *ops,
3172                                struct threads_listing_context *context)
3173 {
3174 #if defined(HAVE_LIBEXPAT)
3175   if (packet_support (PACKET_qXfer_threads) == PACKET_ENABLE)
3176     {
3177       gdb::unique_xmalloc_ptr<char> xml
3178         = target_read_stralloc (ops, TARGET_OBJECT_THREADS, NULL);
3179
3180       if (xml != NULL && *xml != '\0')
3181         {
3182           gdb_xml_parse_quick (_("threads"), "threads.dtd",
3183                                threads_elements, xml.get (), context);
3184         }
3185
3186       return 1;
3187     }
3188 #endif
3189
3190   return 0;
3191 }
3192
3193 /* List remote threads using qfThreadInfo/qsThreadInfo.  */
3194
3195 static int
3196 remote_get_threads_with_qthreadinfo (struct target_ops *ops,
3197                                      struct threads_listing_context *context)
3198 {
3199   struct remote_state *rs = get_remote_state ();
3200
3201   if (rs->use_threadinfo_query)
3202     {
3203       const char *bufp;
3204
3205       putpkt ("qfThreadInfo");
3206       getpkt (&rs->buf, &rs->buf_size, 0);
3207       bufp = rs->buf;
3208       if (bufp[0] != '\0')              /* q packet recognized */
3209         {
3210           while (*bufp++ == 'm')        /* reply contains one or more TID */
3211             {
3212               do
3213                 {
3214                   ptid_t ptid = read_ptid (bufp, &bufp);
3215                   context->items.emplace_back (ptid);
3216                 }
3217               while (*bufp++ == ',');   /* comma-separated list */
3218               putpkt ("qsThreadInfo");
3219               getpkt (&rs->buf, &rs->buf_size, 0);
3220               bufp = rs->buf;
3221             }
3222           return 1;
3223         }
3224       else
3225         {
3226           /* Packet not recognized.  */
3227           rs->use_threadinfo_query = 0;
3228         }
3229     }
3230
3231   return 0;
3232 }
3233
3234 /* Implement the to_update_thread_list function for the remote
3235    targets.  */
3236
3237 static void
3238 remote_update_thread_list (struct target_ops *ops)
3239 {
3240   struct threads_listing_context context;
3241   int got_list = 0;
3242
3243   /* We have a few different mechanisms to fetch the thread list.  Try
3244      them all, starting with the most preferred one first, falling
3245      back to older methods.  */
3246   if (remote_get_threads_with_qxfer (ops, &context)
3247       || remote_get_threads_with_qthreadinfo (ops, &context)
3248       || remote_get_threads_with_ql (ops, &context))
3249     {
3250       int i;
3251       struct thread_info *tp, *tmp;
3252
3253       got_list = 1;
3254
3255       if (context.items.empty ()
3256           && remote_thread_always_alive (ops, inferior_ptid))
3257         {
3258           /* Some targets don't really support threads, but still
3259              reply an (empty) thread list in response to the thread
3260              listing packets, instead of replying "packet not
3261              supported".  Exit early so we don't delete the main
3262              thread.  */
3263           return;
3264         }
3265
3266       /* CONTEXT now holds the current thread list on the remote
3267          target end.  Delete GDB-side threads no longer found on the
3268          target.  */
3269       ALL_THREADS_SAFE (tp, tmp)
3270         {
3271           if (!context.contains_thread (tp->ptid))
3272             {
3273               /* Not found.  */
3274               delete_thread (tp->ptid);
3275             }
3276         }
3277
3278       /* Remove any unreported fork child threads from CONTEXT so
3279          that we don't interfere with follow fork, which is where
3280          creation of such threads is handled.  */
3281       remove_new_fork_children (&context);
3282
3283       /* And now add threads we don't know about yet to our list.  */
3284       for (thread_item &item : context.items)
3285         {
3286           if (item.ptid != null_ptid)
3287             {
3288               struct private_thread_info *info;
3289               /* In non-stop mode, we assume new found threads are
3290                  executing until proven otherwise with a stop reply.
3291                  In all-stop, we can only get here if all threads are
3292                  stopped.  */
3293               int executing = target_is_non_stop_p () ? 1 : 0;
3294
3295               remote_notice_new_inferior (item.ptid, executing);
3296
3297               info = get_private_info_ptid (item.ptid);
3298               info->core = item.core;
3299               info->extra = xstrdup (item.extra.c_str ());
3300               info->name = xstrdup (item.name.c_str ());
3301               info->thread_handle
3302                 = new gdb::byte_vector (std::move (item.thread_handle));
3303             }
3304         }
3305     }
3306
3307   if (!got_list)
3308     {
3309       /* If no thread listing method is supported, then query whether
3310          each known thread is alive, one by one, with the T packet.
3311          If the target doesn't support threads at all, then this is a
3312          no-op.  See remote_thread_alive.  */
3313       prune_threads ();
3314     }
3315 }
3316
3317 /*
3318  * Collect a descriptive string about the given thread.
3319  * The target may say anything it wants to about the thread
3320  * (typically info about its blocked / runnable state, name, etc.).
3321  * This string will appear in the info threads display.
3322  *
3323  * Optional: targets are not required to implement this function.
3324  */
3325
3326 static const char *
3327 remote_threads_extra_info (struct target_ops *self, struct thread_info *tp)
3328 {
3329   struct remote_state *rs = get_remote_state ();
3330   int result;
3331   int set;
3332   threadref id;
3333   struct gdb_ext_thread_info threadinfo;
3334   static char display_buf[100]; /* arbitrary...  */
3335   int n = 0;                    /* position in display_buf */
3336
3337   if (rs->remote_desc == 0)             /* paranoia */
3338     internal_error (__FILE__, __LINE__,
3339                     _("remote_threads_extra_info"));
3340
3341   if (ptid_equal (tp->ptid, magic_null_ptid)
3342       || (ptid_get_pid (tp->ptid) != 0 && ptid_get_lwp (tp->ptid) == 0))
3343     /* This is the main thread which was added by GDB.  The remote
3344        server doesn't know about it.  */
3345     return NULL;
3346
3347   if (packet_support (PACKET_qXfer_threads) == PACKET_ENABLE)
3348     {
3349       struct thread_info *info = find_thread_ptid (tp->ptid);
3350
3351       if (info && info->priv)
3352         return info->priv->extra;
3353       else
3354         return NULL;
3355     }
3356
3357   if (rs->use_threadextra_query)
3358     {
3359       char *b = rs->buf;
3360       char *endb = rs->buf + get_remote_packet_size ();
3361
3362       xsnprintf (b, endb - b, "qThreadExtraInfo,");
3363       b += strlen (b);
3364       write_ptid (b, endb, tp->ptid);
3365
3366       putpkt (rs->buf);
3367       getpkt (&rs->buf, &rs->buf_size, 0);
3368       if (rs->buf[0] != 0)
3369         {
3370           n = std::min (strlen (rs->buf) / 2, sizeof (display_buf));
3371           result = hex2bin (rs->buf, (gdb_byte *) display_buf, n);
3372           display_buf [result] = '\0';
3373           return display_buf;
3374         }
3375     }
3376
3377   /* If the above query fails, fall back to the old method.  */
3378   rs->use_threadextra_query = 0;
3379   set = TAG_THREADID | TAG_EXISTS | TAG_THREADNAME
3380     | TAG_MOREDISPLAY | TAG_DISPLAY;
3381   int_to_threadref (&id, ptid_get_lwp (tp->ptid));
3382   if (remote_get_threadinfo (&id, set, &threadinfo))
3383     if (threadinfo.active)
3384       {
3385         if (*threadinfo.shortname)
3386           n += xsnprintf (&display_buf[0], sizeof (display_buf) - n,
3387                           " Name: %s,", threadinfo.shortname);
3388         if (*threadinfo.display)
3389           n += xsnprintf (&display_buf[n], sizeof (display_buf) - n,
3390                           " State: %s,", threadinfo.display);
3391         if (*threadinfo.more_display)
3392           n += xsnprintf (&display_buf[n], sizeof (display_buf) - n,
3393                           " Priority: %s", threadinfo.more_display);
3394
3395         if (n > 0)
3396           {
3397             /* For purely cosmetic reasons, clear up trailing commas.  */
3398             if (',' == display_buf[n-1])
3399               display_buf[n-1] = ' ';
3400             return display_buf;
3401           }
3402       }
3403   return NULL;
3404 }
3405 \f
3406
3407 static int
3408 remote_static_tracepoint_marker_at (struct target_ops *self, CORE_ADDR addr,
3409                                     struct static_tracepoint_marker *marker)
3410 {
3411   struct remote_state *rs = get_remote_state ();
3412   char *p = rs->buf;
3413
3414   xsnprintf (p, get_remote_packet_size (), "qTSTMat:");
3415   p += strlen (p);
3416   p += hexnumstr (p, addr);
3417   putpkt (rs->buf);
3418   getpkt (&rs->buf, &rs->buf_size, 0);
3419   p = rs->buf;
3420
3421   if (*p == 'E')
3422     error (_("Remote failure reply: %s"), p);
3423
3424   if (*p++ == 'm')
3425     {
3426       parse_static_tracepoint_marker_definition (p, NULL, marker);
3427       return 1;
3428     }
3429
3430   return 0;
3431 }
3432
3433 static VEC(static_tracepoint_marker_p) *
3434 remote_static_tracepoint_markers_by_strid (struct target_ops *self,
3435                                            const char *strid)
3436 {
3437   struct remote_state *rs = get_remote_state ();
3438   VEC(static_tracepoint_marker_p) *markers = NULL;
3439   struct static_tracepoint_marker *marker = NULL;
3440   struct cleanup *old_chain;
3441   const char *p;
3442
3443   /* Ask for a first packet of static tracepoint marker
3444      definition.  */
3445   putpkt ("qTfSTM");
3446   getpkt (&rs->buf, &rs->buf_size, 0);
3447   p = rs->buf;
3448   if (*p == 'E')
3449     error (_("Remote failure reply: %s"), p);
3450
3451   old_chain = make_cleanup (free_current_marker, &marker);
3452
3453   while (*p++ == 'm')
3454     {
3455       if (marker == NULL)
3456         marker = XCNEW (struct static_tracepoint_marker);
3457
3458       do
3459         {
3460           parse_static_tracepoint_marker_definition (p, &p, marker);
3461
3462           if (strid == NULL || strcmp (strid, marker->str_id) == 0)
3463             {
3464               VEC_safe_push (static_tracepoint_marker_p,
3465                              markers, marker);
3466               marker = NULL;
3467             }
3468           else
3469             {
3470               release_static_tracepoint_marker (marker);
3471               memset (marker, 0, sizeof (*marker));
3472             }
3473         }
3474       while (*p++ == ',');      /* comma-separated list */
3475       /* Ask for another packet of static tracepoint definition.  */
3476       putpkt ("qTsSTM");
3477       getpkt (&rs->buf, &rs->buf_size, 0);
3478       p = rs->buf;
3479     }
3480
3481   do_cleanups (old_chain);
3482   return markers;
3483 }
3484
3485 \f
3486 /* Implement the to_get_ada_task_ptid function for the remote targets.  */
3487
3488 static ptid_t
3489 remote_get_ada_task_ptid (struct target_ops *self, long lwp, long thread)
3490 {
3491   return ptid_build (ptid_get_pid (inferior_ptid), lwp, 0);
3492 }
3493 \f
3494
3495 /* Restart the remote side; this is an extended protocol operation.  */
3496
3497 static void
3498 extended_remote_restart (void)
3499 {
3500   struct remote_state *rs = get_remote_state ();
3501
3502   /* Send the restart command; for reasons I don't understand the
3503      remote side really expects a number after the "R".  */
3504   xsnprintf (rs->buf, get_remote_packet_size (), "R%x", 0);
3505   putpkt (rs->buf);
3506
3507   remote_fileio_reset ();
3508 }
3509 \f
3510 /* Clean up connection to a remote debugger.  */
3511
3512 static void
3513 remote_close (struct target_ops *self)
3514 {
3515   struct remote_state *rs = get_remote_state ();
3516
3517   if (rs->remote_desc == NULL)
3518     return; /* already closed */
3519
3520   /* Make sure we leave stdin registered in the event loop.  */
3521   remote_terminal_ours (self);
3522
3523   serial_close (rs->remote_desc);
3524   rs->remote_desc = NULL;
3525
3526   /* We don't have a connection to the remote stub anymore.  Get rid
3527      of all the inferiors and their threads we were controlling.
3528      Reset inferior_ptid to null_ptid first, as otherwise has_stack_frame
3529      will be unable to find the thread corresponding to (pid, 0, 0).  */
3530   inferior_ptid = null_ptid;
3531   discard_all_inferiors ();
3532
3533   /* We are closing the remote target, so we should discard
3534      everything of this target.  */
3535   discard_pending_stop_replies_in_queue (rs);
3536
3537   if (remote_async_inferior_event_token)
3538     delete_async_event_handler (&remote_async_inferior_event_token);
3539
3540   remote_notif_state_xfree (rs->notif_state);
3541
3542   trace_reset_local_state ();
3543 }
3544
3545 /* Query the remote side for the text, data and bss offsets.  */
3546
3547 static void
3548 get_offsets (void)
3549 {
3550   struct remote_state *rs = get_remote_state ();
3551   char *buf;
3552   char *ptr;
3553   int lose, num_segments = 0, do_sections, do_segments;
3554   CORE_ADDR text_addr, data_addr, bss_addr, segments[2];
3555   struct section_offsets *offs;
3556   struct symfile_segment_data *data;
3557
3558   if (symfile_objfile == NULL)
3559     return;
3560
3561   putpkt ("qOffsets");
3562   getpkt (&rs->buf, &rs->buf_size, 0);
3563   buf = rs->buf;
3564
3565   if (buf[0] == '\000')
3566     return;                     /* Return silently.  Stub doesn't support
3567                                    this command.  */
3568   if (buf[0] == 'E')
3569     {
3570       warning (_("Remote failure reply: %s"), buf);
3571       return;
3572     }
3573
3574   /* Pick up each field in turn.  This used to be done with scanf, but
3575      scanf will make trouble if CORE_ADDR size doesn't match
3576      conversion directives correctly.  The following code will work
3577      with any size of CORE_ADDR.  */
3578   text_addr = data_addr = bss_addr = 0;
3579   ptr = buf;
3580   lose = 0;
3581
3582   if (startswith (ptr, "Text="))
3583     {
3584       ptr += 5;
3585       /* Don't use strtol, could lose on big values.  */
3586       while (*ptr && *ptr != ';')
3587         text_addr = (text_addr << 4) + fromhex (*ptr++);
3588
3589       if (startswith (ptr, ";Data="))
3590         {
3591           ptr += 6;
3592           while (*ptr && *ptr != ';')
3593             data_addr = (data_addr << 4) + fromhex (*ptr++);
3594         }
3595       else
3596         lose = 1;
3597
3598       if (!lose && startswith (ptr, ";Bss="))
3599         {
3600           ptr += 5;
3601           while (*ptr && *ptr != ';')
3602             bss_addr = (bss_addr << 4) + fromhex (*ptr++);
3603
3604           if (bss_addr != data_addr)
3605             warning (_("Target reported unsupported offsets: %s"), buf);
3606         }
3607       else
3608         lose = 1;
3609     }
3610   else if (startswith (ptr, "TextSeg="))
3611     {
3612       ptr += 8;
3613       /* Don't use strtol, could lose on big values.  */
3614       while (*ptr && *ptr != ';')
3615         text_addr = (text_addr << 4) + fromhex (*ptr++);
3616       num_segments = 1;
3617
3618       if (startswith (ptr, ";DataSeg="))
3619         {
3620           ptr += 9;
3621           while (*ptr && *ptr != ';')
3622             data_addr = (data_addr << 4) + fromhex (*ptr++);
3623           num_segments++;
3624         }
3625     }
3626   else
3627     lose = 1;
3628
3629   if (lose)
3630     error (_("Malformed response to offset query, %s"), buf);
3631   else if (*ptr != '\0')
3632     warning (_("Target reported unsupported offsets: %s"), buf);
3633
3634   offs = ((struct section_offsets *)
3635           alloca (SIZEOF_N_SECTION_OFFSETS (symfile_objfile->num_sections)));
3636   memcpy (offs, symfile_objfile->section_offsets,
3637           SIZEOF_N_SECTION_OFFSETS (symfile_objfile->num_sections));
3638
3639   data = get_symfile_segment_data (symfile_objfile->obfd);
3640   do_segments = (data != NULL);
3641   do_sections = num_segments == 0;
3642
3643   if (num_segments > 0)
3644     {
3645       segments[0] = text_addr;
3646       segments[1] = data_addr;
3647     }
3648   /* If we have two segments, we can still try to relocate everything
3649      by assuming that the .text and .data offsets apply to the whole
3650      text and data segments.  Convert the offsets given in the packet
3651      to base addresses for symfile_map_offsets_to_segments.  */
3652   else if (data && data->num_segments == 2)
3653     {
3654       segments[0] = data->segment_bases[0] + text_addr;
3655       segments[1] = data->segment_bases[1] + data_addr;
3656       num_segments = 2;
3657     }
3658   /* If the object file has only one segment, assume that it is text
3659      rather than data; main programs with no writable data are rare,
3660      but programs with no code are useless.  Of course the code might
3661      have ended up in the data segment... to detect that we would need
3662      the permissions here.  */
3663   else if (data && data->num_segments == 1)
3664     {
3665       segments[0] = data->segment_bases[0] + text_addr;
3666       num_segments = 1;
3667     }
3668   /* There's no way to relocate by segment.  */
3669   else
3670     do_segments = 0;
3671
3672   if (do_segments)
3673     {
3674       int ret = symfile_map_offsets_to_segments (symfile_objfile->obfd, data,
3675                                                  offs, num_segments, segments);
3676
3677       if (ret == 0 && !do_sections)
3678         error (_("Can not handle qOffsets TextSeg "
3679                  "response with this symbol file"));
3680
3681       if (ret > 0)
3682         do_sections = 0;
3683     }
3684
3685   if (data)
3686     free_symfile_segment_data (data);
3687
3688   if (do_sections)
3689     {
3690       offs->offsets[SECT_OFF_TEXT (symfile_objfile)] = text_addr;
3691
3692       /* This is a temporary kludge to force data and bss to use the
3693          same offsets because that's what nlmconv does now.  The real
3694          solution requires changes to the stub and remote.c that I
3695          don't have time to do right now.  */
3696
3697       offs->offsets[SECT_OFF_DATA (symfile_objfile)] = data_addr;
3698       offs->offsets[SECT_OFF_BSS (symfile_objfile)] = data_addr;
3699     }
3700
3701   objfile_relocate (symfile_objfile, offs);
3702 }
3703
3704 /* Send interrupt_sequence to remote target.  */
3705 static void
3706 send_interrupt_sequence (void)
3707 {
3708   struct remote_state *rs = get_remote_state ();
3709
3710   if (interrupt_sequence_mode == interrupt_sequence_control_c)
3711     remote_serial_write ("\x03", 1);
3712   else if (interrupt_sequence_mode == interrupt_sequence_break)
3713     serial_send_break (rs->remote_desc);
3714   else if (interrupt_sequence_mode == interrupt_sequence_break_g)
3715     {
3716       serial_send_break (rs->remote_desc);
3717       remote_serial_write ("g", 1);
3718     }
3719   else
3720     internal_error (__FILE__, __LINE__,
3721                     _("Invalid value for interrupt_sequence_mode: %s."),
3722                     interrupt_sequence_mode);
3723 }
3724
3725
3726 /* If STOP_REPLY is a T stop reply, look for the "thread" register,
3727    and extract the PTID.  Returns NULL_PTID if not found.  */
3728
3729 static ptid_t
3730 stop_reply_extract_thread (char *stop_reply)
3731 {
3732   if (stop_reply[0] == 'T' && strlen (stop_reply) > 3)
3733     {
3734       const char *p;
3735
3736       /* Txx r:val ; r:val (...)  */
3737       p = &stop_reply[3];
3738
3739       /* Look for "register" named "thread".  */
3740       while (*p != '\0')
3741         {
3742           const char *p1;
3743
3744           p1 = strchr (p, ':');
3745           if (p1 == NULL)
3746             return null_ptid;
3747
3748           if (strncmp (p, "thread", p1 - p) == 0)
3749             return read_ptid (++p1, &p);
3750
3751           p1 = strchr (p, ';');
3752           if (p1 == NULL)
3753             return null_ptid;
3754           p1++;
3755
3756           p = p1;
3757         }
3758     }
3759
3760   return null_ptid;
3761 }
3762
3763 /* Determine the remote side's current thread.  If we have a stop
3764    reply handy (in WAIT_STATUS), maybe it's a T stop reply with a
3765    "thread" register we can extract the current thread from.  If not,
3766    ask the remote which is the current thread with qC.  The former
3767    method avoids a roundtrip.  */
3768
3769 static ptid_t
3770 get_current_thread (char *wait_status)
3771 {
3772   ptid_t ptid = null_ptid;
3773
3774   /* Note we don't use remote_parse_stop_reply as that makes use of
3775      the target architecture, which we haven't yet fully determined at
3776      this point.  */
3777   if (wait_status != NULL)
3778     ptid = stop_reply_extract_thread (wait_status);
3779   if (ptid_equal (ptid, null_ptid))
3780     ptid = remote_current_thread (inferior_ptid);
3781
3782   return ptid;
3783 }
3784
3785 /* Query the remote target for which is the current thread/process,
3786    add it to our tables, and update INFERIOR_PTID.  The caller is
3787    responsible for setting the state such that the remote end is ready
3788    to return the current thread.
3789
3790    This function is called after handling the '?' or 'vRun' packets,
3791    whose response is a stop reply from which we can also try
3792    extracting the thread.  If the target doesn't support the explicit
3793    qC query, we infer the current thread from that stop reply, passed
3794    in in WAIT_STATUS, which may be NULL.  */
3795
3796 static void
3797 add_current_inferior_and_thread (char *wait_status)
3798 {
3799   struct remote_state *rs = get_remote_state ();
3800   int fake_pid_p = 0;
3801
3802   inferior_ptid = null_ptid;
3803
3804   /* Now, if we have thread information, update inferior_ptid.  */
3805   ptid_t curr_ptid = get_current_thread (wait_status);
3806
3807   if (curr_ptid != null_ptid)
3808     {
3809       if (!remote_multi_process_p (rs))
3810         fake_pid_p = 1;
3811     }
3812   else
3813     {
3814       /* Without this, some commands which require an active target
3815          (such as kill) won't work.  This variable serves (at least)
3816          double duty as both the pid of the target process (if it has
3817          such), and as a flag indicating that a target is active.  */
3818       curr_ptid = magic_null_ptid;
3819       fake_pid_p = 1;
3820     }
3821
3822   remote_add_inferior (fake_pid_p, ptid_get_pid (curr_ptid), -1, 1);
3823
3824   /* Add the main thread and switch to it.  Don't try reading
3825      registers yet, since we haven't fetched the target description
3826      yet.  */
3827   thread_info *tp = add_thread_silent (curr_ptid);
3828   switch_to_thread_no_regs (tp);
3829 }
3830
3831 /* Print info about a thread that was found already stopped on
3832    connection.  */
3833
3834 static void
3835 print_one_stopped_thread (struct thread_info *thread)
3836 {
3837   struct target_waitstatus *ws = &thread->suspend.waitstatus;
3838
3839   switch_to_thread (thread->ptid);
3840   stop_pc = get_frame_pc (get_current_frame ());
3841   set_current_sal_from_frame (get_current_frame ());
3842
3843   thread->suspend.waitstatus_pending_p = 0;
3844
3845   if (ws->kind == TARGET_WAITKIND_STOPPED)
3846     {
3847       enum gdb_signal sig = ws->value.sig;
3848
3849       if (signal_print_state (sig))
3850         observer_notify_signal_received (sig);
3851     }
3852   observer_notify_normal_stop (NULL, 1);
3853 }
3854
3855 /* Process all initial stop replies the remote side sent in response
3856    to the ? packet.  These indicate threads that were already stopped
3857    on initial connection.  We mark these threads as stopped and print
3858    their current frame before giving the user the prompt.  */
3859
3860 static void
3861 process_initial_stop_replies (int from_tty)
3862 {
3863   int pending_stop_replies = stop_reply_queue_length ();
3864   struct inferior *inf;
3865   struct thread_info *thread;
3866   struct thread_info *selected = NULL;
3867   struct thread_info *lowest_stopped = NULL;
3868   struct thread_info *first = NULL;
3869
3870   /* Consume the initial pending events.  */
3871   while (pending_stop_replies-- > 0)
3872     {
3873       ptid_t waiton_ptid = minus_one_ptid;
3874       ptid_t event_ptid;
3875       struct target_waitstatus ws;
3876       int ignore_event = 0;
3877       struct thread_info *thread;
3878
3879       memset (&ws, 0, sizeof (ws));
3880       event_ptid = target_wait (waiton_ptid, &ws, TARGET_WNOHANG);
3881       if (remote_debug)
3882         print_target_wait_results (waiton_ptid, event_ptid, &ws);
3883
3884       switch (ws.kind)
3885         {
3886         case TARGET_WAITKIND_IGNORE:
3887         case TARGET_WAITKIND_NO_RESUMED:
3888         case TARGET_WAITKIND_SIGNALLED:
3889         case TARGET_WAITKIND_EXITED:
3890           /* We shouldn't see these, but if we do, just ignore.  */
3891           if (remote_debug)
3892             fprintf_unfiltered (gdb_stdlog, "remote: event ignored\n");
3893           ignore_event = 1;
3894           break;
3895
3896         case TARGET_WAITKIND_EXECD:
3897           xfree (ws.value.execd_pathname);
3898           break;
3899         default:
3900           break;
3901         }
3902
3903       if (ignore_event)
3904         continue;
3905
3906       thread = find_thread_ptid (event_ptid);
3907
3908       if (ws.kind == TARGET_WAITKIND_STOPPED)
3909         {
3910           enum gdb_signal sig = ws.value.sig;
3911
3912           /* Stubs traditionally report SIGTRAP as initial signal,
3913              instead of signal 0.  Suppress it.  */
3914           if (sig == GDB_SIGNAL_TRAP)
3915             sig = GDB_SIGNAL_0;
3916           thread->suspend.stop_signal = sig;
3917           ws.value.sig = sig;
3918         }
3919
3920       thread->suspend.waitstatus = ws;
3921
3922       if (ws.kind != TARGET_WAITKIND_STOPPED
3923           || ws.value.sig != GDB_SIGNAL_0)
3924         thread->suspend.waitstatus_pending_p = 1;
3925
3926       set_executing (event_ptid, 0);
3927       set_running (event_ptid, 0);
3928       thread->priv->vcont_resumed = 0;
3929     }
3930
3931   /* "Notice" the new inferiors before anything related to
3932      registers/memory.  */
3933   ALL_INFERIORS (inf)
3934     {
3935       if (inf->pid == 0)
3936         continue;
3937
3938       inf->needs_setup = 1;
3939
3940       if (non_stop)
3941         {
3942           thread = any_live_thread_of_process (inf->pid);
3943           notice_new_inferior (thread->ptid,
3944                                thread->state == THREAD_RUNNING,
3945                                from_tty);
3946         }
3947     }
3948
3949   /* If all-stop on top of non-stop, pause all threads.  Note this
3950      records the threads' stop pc, so must be done after "noticing"
3951      the inferiors.  */
3952   if (!non_stop)
3953     {
3954       stop_all_threads ();
3955
3956       /* If all threads of an inferior were already stopped, we
3957          haven't setup the inferior yet.  */
3958       ALL_INFERIORS (inf)
3959         {
3960           if (inf->pid == 0)
3961             continue;
3962
3963           if (inf->needs_setup)
3964             {
3965               thread = any_live_thread_of_process (inf->pid);
3966               switch_to_thread_no_regs (thread);
3967               setup_inferior (0);
3968             }
3969         }
3970     }
3971
3972   /* Now go over all threads that are stopped, and print their current
3973      frame.  If all-stop, then if there's a signalled thread, pick
3974      that as current.  */
3975   ALL_NON_EXITED_THREADS (thread)
3976     {
3977       if (first == NULL)
3978         first = thread;
3979
3980       if (!non_stop)
3981         set_running (thread->ptid, 0);
3982       else if (thread->state != THREAD_STOPPED)
3983         continue;
3984
3985       if (selected == NULL
3986           && thread->suspend.waitstatus_pending_p)
3987         selected = thread;
3988
3989       if (lowest_stopped == NULL
3990           || thread->inf->num < lowest_stopped->inf->num
3991           || thread->per_inf_num < lowest_stopped->per_inf_num)
3992         lowest_stopped = thread;
3993
3994       if (non_stop)
3995         print_one_stopped_thread (thread);
3996     }
3997
3998   /* In all-stop, we only print the status of one thread, and leave
3999      others with their status pending.  */
4000   if (!non_stop)
4001     {
4002       thread = selected;
4003       if (thread == NULL)
4004         thread = lowest_stopped;
4005       if (thread == NULL)
4006         thread = first;
4007
4008       print_one_stopped_thread (thread);
4009     }
4010
4011   /* For "info program".  */
4012   thread = inferior_thread ();
4013   if (thread->state == THREAD_STOPPED)
4014     set_last_target_status (inferior_ptid, thread->suspend.waitstatus);
4015 }
4016
4017 /* Start the remote connection and sync state.  */
4018
4019 static void
4020 remote_start_remote (int from_tty, struct target_ops *target, int extended_p)
4021 {
4022   struct remote_state *rs = get_remote_state ();
4023   struct packet_config *noack_config;
4024   char *wait_status = NULL;
4025
4026   /* Signal other parts that we're going through the initial setup,
4027      and so things may not be stable yet.  E.g., we don't try to
4028      install tracepoints until we've relocated symbols.  Also, a
4029      Ctrl-C before we're connected and synced up can't interrupt the
4030      target.  Instead, it offers to drop the (potentially wedged)
4031      connection.  */
4032   rs->starting_up = 1;
4033
4034   QUIT;
4035
4036   if (interrupt_on_connect)
4037     send_interrupt_sequence ();
4038
4039   /* Ack any packet which the remote side has already sent.  */
4040   remote_serial_write ("+", 1);
4041
4042   /* The first packet we send to the target is the optional "supported
4043      packets" request.  If the target can answer this, it will tell us
4044      which later probes to skip.  */
4045   remote_query_supported ();
4046
4047   /* If the stub wants to get a QAllow, compose one and send it.  */
4048   if (packet_support (PACKET_QAllow) != PACKET_DISABLE)
4049     remote_set_permissions (target);
4050
4051   /* gdbserver < 7.7 (before its fix from 2013-12-11) did reply to any
4052      unknown 'v' packet with string "OK".  "OK" gets interpreted by GDB
4053      as a reply to known packet.  For packet "vFile:setfs:" it is an
4054      invalid reply and GDB would return error in
4055      remote_hostio_set_filesystem, making remote files access impossible.
4056      Disable "vFile:setfs:" in such case.  Do not disable other 'v' packets as
4057      other "vFile" packets get correctly detected even on gdbserver < 7.7.  */
4058   {
4059     const char v_mustreplyempty[] = "vMustReplyEmpty";
4060
4061     putpkt (v_mustreplyempty);
4062     getpkt (&rs->buf, &rs->buf_size, 0);
4063     if (strcmp (rs->buf, "OK") == 0)
4064       remote_protocol_packets[PACKET_vFile_setfs].support = PACKET_DISABLE;
4065     else if (strcmp (rs->buf, "") != 0)
4066       error (_("Remote replied unexpectedly to '%s': %s"), v_mustreplyempty,
4067              rs->buf);
4068   }
4069
4070   /* Next, we possibly activate noack mode.
4071
4072      If the QStartNoAckMode packet configuration is set to AUTO,
4073      enable noack mode if the stub reported a wish for it with
4074      qSupported.
4075
4076      If set to TRUE, then enable noack mode even if the stub didn't
4077      report it in qSupported.  If the stub doesn't reply OK, the
4078      session ends with an error.
4079
4080      If FALSE, then don't activate noack mode, regardless of what the
4081      stub claimed should be the default with qSupported.  */
4082
4083   noack_config = &remote_protocol_packets[PACKET_QStartNoAckMode];
4084   if (packet_config_support (noack_config) != PACKET_DISABLE)
4085     {
4086       putpkt ("QStartNoAckMode");
4087       getpkt (&rs->buf, &rs->buf_size, 0);
4088       if (packet_ok (rs->buf, noack_config) == PACKET_OK)
4089         rs->noack_mode = 1;
4090     }
4091
4092   if (extended_p)
4093     {
4094       /* Tell the remote that we are using the extended protocol.  */
4095       putpkt ("!");
4096       getpkt (&rs->buf, &rs->buf_size, 0);
4097     }
4098
4099   /* Let the target know which signals it is allowed to pass down to
4100      the program.  */
4101   update_signals_program_target ();
4102
4103   /* Next, if the target can specify a description, read it.  We do
4104      this before anything involving memory or registers.  */
4105   target_find_description ();
4106
4107   /* Next, now that we know something about the target, update the
4108      address spaces in the program spaces.  */
4109   update_address_spaces ();
4110
4111   /* On OSs where the list of libraries is global to all
4112      processes, we fetch them early.  */
4113   if (gdbarch_has_global_solist (target_gdbarch ()))
4114     solib_add (NULL, from_tty, auto_solib_add);
4115
4116   if (target_is_non_stop_p ())
4117     {
4118       if (packet_support (PACKET_QNonStop) != PACKET_ENABLE)
4119         error (_("Non-stop mode requested, but remote "
4120                  "does not support non-stop"));
4121
4122       putpkt ("QNonStop:1");
4123       getpkt (&rs->buf, &rs->buf_size, 0);
4124
4125       if (strcmp (rs->buf, "OK") != 0)
4126         error (_("Remote refused setting non-stop mode with: %s"), rs->buf);
4127
4128       /* Find about threads and processes the stub is already
4129          controlling.  We default to adding them in the running state.
4130          The '?' query below will then tell us about which threads are
4131          stopped.  */
4132       remote_update_thread_list (target);
4133     }
4134   else if (packet_support (PACKET_QNonStop) == PACKET_ENABLE)
4135     {
4136       /* Don't assume that the stub can operate in all-stop mode.
4137          Request it explicitly.  */
4138       putpkt ("QNonStop:0");
4139       getpkt (&rs->buf, &rs->buf_size, 0);
4140
4141       if (strcmp (rs->buf, "OK") != 0)
4142         error (_("Remote refused setting all-stop mode with: %s"), rs->buf);
4143     }
4144
4145   /* Upload TSVs regardless of whether the target is running or not.  The
4146      remote stub, such as GDBserver, may have some predefined or builtin
4147      TSVs, even if the target is not running.  */
4148   if (remote_get_trace_status (target, current_trace_status ()) != -1)
4149     {
4150       struct uploaded_tsv *uploaded_tsvs = NULL;
4151
4152       remote_upload_trace_state_variables (target, &uploaded_tsvs);
4153       merge_uploaded_trace_state_variables (&uploaded_tsvs);
4154     }
4155
4156   /* Check whether the target is running now.  */
4157   putpkt ("?");
4158   getpkt (&rs->buf, &rs->buf_size, 0);
4159
4160   if (!target_is_non_stop_p ())
4161     {
4162       if (rs->buf[0] == 'W' || rs->buf[0] == 'X')
4163         {
4164           if (!extended_p)
4165             error (_("The target is not running (try extended-remote?)"));
4166
4167           /* We're connected, but not running.  Drop out before we
4168              call start_remote.  */
4169           rs->starting_up = 0;
4170           return;
4171         }
4172       else
4173         {
4174           /* Save the reply for later.  */
4175           wait_status = (char *) alloca (strlen (rs->buf) + 1);
4176           strcpy (wait_status, rs->buf);
4177         }
4178
4179       /* Fetch thread list.  */
4180       target_update_thread_list ();
4181
4182       /* Let the stub know that we want it to return the thread.  */
4183       set_continue_thread (minus_one_ptid);
4184
4185       if (thread_count () == 0)
4186         {
4187           /* Target has no concept of threads at all.  GDB treats
4188              non-threaded target as single-threaded; add a main
4189              thread.  */
4190           add_current_inferior_and_thread (wait_status);
4191         }
4192       else
4193         {
4194           /* We have thread information; select the thread the target
4195              says should be current.  If we're reconnecting to a
4196              multi-threaded program, this will ideally be the thread
4197              that last reported an event before GDB disconnected.  */
4198           inferior_ptid = get_current_thread (wait_status);
4199           if (ptid_equal (inferior_ptid, null_ptid))
4200             {
4201               /* Odd... The target was able to list threads, but not
4202                  tell us which thread was current (no "thread"
4203                  register in T stop reply?).  Just pick the first
4204                  thread in the thread list then.  */
4205               
4206               if (remote_debug)
4207                 fprintf_unfiltered (gdb_stdlog,
4208                                     "warning: couldn't determine remote "
4209                                     "current thread; picking first in list.\n");
4210
4211               inferior_ptid = thread_list->ptid;
4212             }
4213         }
4214
4215       /* init_wait_for_inferior should be called before get_offsets in order
4216          to manage `inserted' flag in bp loc in a correct state.
4217          breakpoint_init_inferior, called from init_wait_for_inferior, set
4218          `inserted' flag to 0, while before breakpoint_re_set, called from
4219          start_remote, set `inserted' flag to 1.  In the initialization of
4220          inferior, breakpoint_init_inferior should be called first, and then
4221          breakpoint_re_set can be called.  If this order is broken, state of
4222          `inserted' flag is wrong, and cause some problems on breakpoint
4223          manipulation.  */
4224       init_wait_for_inferior ();
4225
4226       get_offsets ();           /* Get text, data & bss offsets.  */
4227
4228       /* If we could not find a description using qXfer, and we know
4229          how to do it some other way, try again.  This is not
4230          supported for non-stop; it could be, but it is tricky if
4231          there are no stopped threads when we connect.  */
4232       if (remote_read_description_p (target)
4233           && gdbarch_target_desc (target_gdbarch ()) == NULL)
4234         {
4235           target_clear_description ();
4236           target_find_description ();
4237         }
4238
4239       /* Use the previously fetched status.  */
4240       gdb_assert (wait_status != NULL);
4241       strcpy (rs->buf, wait_status);
4242       rs->cached_wait_status = 1;
4243
4244       start_remote (from_tty); /* Initialize gdb process mechanisms.  */
4245     }
4246   else
4247     {
4248       /* Clear WFI global state.  Do this before finding about new
4249          threads and inferiors, and setting the current inferior.
4250          Otherwise we would clear the proceed status of the current
4251          inferior when we want its stop_soon state to be preserved
4252          (see notice_new_inferior).  */
4253       init_wait_for_inferior ();
4254
4255       /* In non-stop, we will either get an "OK", meaning that there
4256          are no stopped threads at this time; or, a regular stop
4257          reply.  In the latter case, there may be more than one thread
4258          stopped --- we pull them all out using the vStopped
4259          mechanism.  */
4260       if (strcmp (rs->buf, "OK") != 0)
4261         {
4262           struct notif_client *notif = &notif_client_stop;
4263
4264           /* remote_notif_get_pending_replies acks this one, and gets
4265              the rest out.  */
4266           rs->notif_state->pending_event[notif_client_stop.id]
4267             = remote_notif_parse (notif, rs->buf);
4268           remote_notif_get_pending_events (notif);
4269         }
4270
4271       if (thread_count () == 0)
4272         {
4273           if (!extended_p)
4274             error (_("The target is not running (try extended-remote?)"));
4275
4276           /* We're connected, but not running.  Drop out before we
4277              call start_remote.  */
4278           rs->starting_up = 0;
4279           return;
4280         }
4281
4282       /* In non-stop mode, any cached wait status will be stored in
4283          the stop reply queue.  */
4284       gdb_assert (wait_status == NULL);
4285
4286       /* Report all signals during attach/startup.  */
4287       remote_pass_signals (target, 0, NULL);
4288
4289       /* If there are already stopped threads, mark them stopped and
4290          report their stops before giving the prompt to the user.  */
4291       process_initial_stop_replies (from_tty);
4292
4293       if (target_can_async_p ())
4294         target_async (1);
4295     }
4296
4297   /* If we connected to a live target, do some additional setup.  */
4298   if (target_has_execution)
4299     {
4300       if (symfile_objfile)      /* No use without a symbol-file.  */
4301         remote_check_symbols ();
4302     }
4303
4304   /* Possibly the target has been engaged in a trace run started
4305      previously; find out where things are at.  */
4306   if (remote_get_trace_status (target, current_trace_status ()) != -1)
4307     {
4308       struct uploaded_tp *uploaded_tps = NULL;
4309
4310       if (current_trace_status ()->running)
4311         printf_filtered (_("Trace is already running on the target.\n"));
4312
4313       remote_upload_tracepoints (target, &uploaded_tps);
4314
4315       merge_uploaded_tracepoints (&uploaded_tps);
4316     }
4317
4318   /* Possibly the target has been engaged in a btrace record started
4319      previously; find out where things are at.  */
4320   remote_btrace_maybe_reopen ();
4321
4322   /* The thread and inferior lists are now synchronized with the
4323      target, our symbols have been relocated, and we're merged the
4324      target's tracepoints with ours.  We're done with basic start
4325      up.  */
4326   rs->starting_up = 0;
4327
4328   /* Maybe breakpoints are global and need to be inserted now.  */
4329   if (breakpoints_should_be_inserted_now ())
4330     insert_breakpoints ();
4331 }
4332
4333 /* Open a connection to a remote debugger.
4334    NAME is the filename used for communication.  */
4335
4336 static void
4337 remote_open (const char *name, int from_tty)
4338 {
4339   remote_open_1 (name, from_tty, &remote_ops, 0);
4340 }
4341
4342 /* Open a connection to a remote debugger using the extended
4343    remote gdb protocol.  NAME is the filename used for communication.  */
4344
4345 static void
4346 extended_remote_open (const char *name, int from_tty)
4347 {
4348   remote_open_1 (name, from_tty, &extended_remote_ops, 1 /*extended_p */);
4349 }
4350
4351 /* Reset all packets back to "unknown support".  Called when opening a
4352    new connection to a remote target.  */
4353
4354 static void
4355 reset_all_packet_configs_support (void)
4356 {
4357   int i;
4358
4359   for (i = 0; i < PACKET_MAX; i++)
4360     remote_protocol_packets[i].support = PACKET_SUPPORT_UNKNOWN;
4361 }
4362
4363 /* Initialize all packet configs.  */
4364
4365 static void
4366 init_all_packet_configs (void)
4367 {
4368   int i;
4369
4370   for (i = 0; i < PACKET_MAX; i++)
4371     {
4372       remote_protocol_packets[i].detect = AUTO_BOOLEAN_AUTO;
4373       remote_protocol_packets[i].support = PACKET_SUPPORT_UNKNOWN;
4374     }
4375 }
4376
4377 /* Symbol look-up.  */
4378
4379 static void
4380 remote_check_symbols (void)
4381 {
4382   struct remote_state *rs = get_remote_state ();
4383   char *msg, *reply, *tmp;
4384   int end;
4385   long reply_size;
4386   struct cleanup *old_chain;
4387
4388   /* The remote side has no concept of inferiors that aren't running
4389      yet, it only knows about running processes.  If we're connected
4390      but our current inferior is not running, we should not invite the
4391      remote target to request symbol lookups related to its
4392      (unrelated) current process.  */
4393   if (!target_has_execution)
4394     return;
4395
4396   if (packet_support (PACKET_qSymbol) == PACKET_DISABLE)
4397     return;
4398
4399   /* Make sure the remote is pointing at the right process.  Note
4400      there's no way to select "no process".  */
4401   set_general_process ();
4402
4403   /* Allocate a message buffer.  We can't reuse the input buffer in RS,
4404      because we need both at the same time.  */
4405   msg = (char *) xmalloc (get_remote_packet_size ());
4406   old_chain = make_cleanup (xfree, msg);
4407   reply = (char *) xmalloc (get_remote_packet_size ());
4408   make_cleanup (free_current_contents, &reply);
4409   reply_size = get_remote_packet_size ();
4410
4411   /* Invite target to request symbol lookups.  */
4412
4413   putpkt ("qSymbol::");
4414   getpkt (&reply, &reply_size, 0);
4415   packet_ok (reply, &remote_protocol_packets[PACKET_qSymbol]);
4416
4417   while (startswith (reply, "qSymbol:"))
4418     {
4419       struct bound_minimal_symbol sym;
4420
4421       tmp = &reply[8];
4422       end = hex2bin (tmp, (gdb_byte *) msg, strlen (tmp) / 2);
4423       msg[end] = '\0';
4424       sym = lookup_minimal_symbol (msg, NULL, NULL);
4425       if (sym.minsym == NULL)
4426         xsnprintf (msg, get_remote_packet_size (), "qSymbol::%s", &reply[8]);
4427       else
4428         {
4429           int addr_size = gdbarch_addr_bit (target_gdbarch ()) / 8;
4430           CORE_ADDR sym_addr = BMSYMBOL_VALUE_ADDRESS (sym);
4431
4432           /* If this is a function address, return the start of code
4433              instead of any data function descriptor.  */
4434           sym_addr = gdbarch_convert_from_func_ptr_addr (target_gdbarch (),
4435                                                          sym_addr,
4436                                                          &current_target);
4437
4438           xsnprintf (msg, get_remote_packet_size (), "qSymbol:%s:%s",
4439                      phex_nz (sym_addr, addr_size), &reply[8]);
4440         }
4441   
4442       putpkt (msg);
4443       getpkt (&reply, &reply_size, 0);
4444     }
4445
4446   do_cleanups (old_chain);
4447 }
4448
4449 static struct serial *
4450 remote_serial_open (const char *name)
4451 {
4452   static int udp_warning = 0;
4453
4454   /* FIXME: Parsing NAME here is a hack.  But we want to warn here instead
4455      of in ser-tcp.c, because it is the remote protocol assuming that the
4456      serial connection is reliable and not the serial connection promising
4457      to be.  */
4458   if (!udp_warning && startswith (name, "udp:"))
4459     {
4460       warning (_("The remote protocol may be unreliable over UDP.\n"
4461                  "Some events may be lost, rendering further debugging "
4462                  "impossible."));
4463       udp_warning = 1;
4464     }
4465
4466   return serial_open (name);
4467 }
4468
4469 /* Inform the target of our permission settings.  The permission flags
4470    work without this, but if the target knows the settings, it can do
4471    a couple things.  First, it can add its own check, to catch cases
4472    that somehow manage to get by the permissions checks in target
4473    methods.  Second, if the target is wired to disallow particular
4474    settings (for instance, a system in the field that is not set up to
4475    be able to stop at a breakpoint), it can object to any unavailable
4476    permissions.  */
4477
4478 void
4479 remote_set_permissions (struct target_ops *self)
4480 {
4481   struct remote_state *rs = get_remote_state ();
4482
4483   xsnprintf (rs->buf, get_remote_packet_size (), "QAllow:"
4484              "WriteReg:%x;WriteMem:%x;"
4485              "InsertBreak:%x;InsertTrace:%x;"
4486              "InsertFastTrace:%x;Stop:%x",
4487              may_write_registers, may_write_memory,
4488              may_insert_breakpoints, may_insert_tracepoints,
4489              may_insert_fast_tracepoints, may_stop);
4490   putpkt (rs->buf);
4491   getpkt (&rs->buf, &rs->buf_size, 0);
4492
4493   /* If the target didn't like the packet, warn the user.  Do not try
4494      to undo the user's settings, that would just be maddening.  */
4495   if (strcmp (rs->buf, "OK") != 0)
4496     warning (_("Remote refused setting permissions with: %s"), rs->buf);
4497 }
4498
4499 /* This type describes each known response to the qSupported
4500    packet.  */
4501 struct protocol_feature
4502 {
4503   /* The name of this protocol feature.  */
4504   const char *name;
4505
4506   /* The default for this protocol feature.  */
4507   enum packet_support default_support;
4508
4509   /* The function to call when this feature is reported, or after
4510      qSupported processing if the feature is not supported.
4511      The first argument points to this structure.  The second
4512      argument indicates whether the packet requested support be
4513      enabled, disabled, or probed (or the default, if this function
4514      is being called at the end of processing and this feature was
4515      not reported).  The third argument may be NULL; if not NULL, it
4516      is a NUL-terminated string taken from the packet following
4517      this feature's name and an equals sign.  */
4518   void (*func) (const struct protocol_feature *, enum packet_support,
4519                 const char *);
4520
4521   /* The corresponding packet for this feature.  Only used if
4522      FUNC is remote_supported_packet.  */
4523   int packet;
4524 };
4525
4526 static void
4527 remote_supported_packet (const struct protocol_feature *feature,
4528                          enum packet_support support,
4529                          const char *argument)
4530 {
4531   if (argument)
4532     {
4533       warning (_("Remote qSupported response supplied an unexpected value for"
4534                  " \"%s\"."), feature->name);
4535       return;
4536     }
4537
4538   remote_protocol_packets[feature->packet].support = support;
4539 }
4540
4541 static void
4542 remote_packet_size (const struct protocol_feature *feature,
4543                     enum packet_support support, const char *value)
4544 {
4545   struct remote_state *rs = get_remote_state ();
4546
4547   int packet_size;
4548   char *value_end;
4549
4550   if (support != PACKET_ENABLE)
4551     return;
4552
4553   if (value == NULL || *value == '\0')
4554     {
4555       warning (_("Remote target reported \"%s\" without a size."),
4556                feature->name);
4557       return;
4558     }
4559
4560   errno = 0;
4561   packet_size = strtol (value, &value_end, 16);
4562   if (errno != 0 || *value_end != '\0' || packet_size < 0)
4563     {
4564       warning (_("Remote target reported \"%s\" with a bad size: \"%s\"."),
4565                feature->name, value);
4566       return;
4567     }
4568
4569   /* Record the new maximum packet size.  */
4570   rs->explicit_packet_size = packet_size;
4571 }
4572
4573 static const struct protocol_feature remote_protocol_features[] = {
4574   { "PacketSize", PACKET_DISABLE, remote_packet_size, -1 },
4575   { "qXfer:auxv:read", PACKET_DISABLE, remote_supported_packet,
4576     PACKET_qXfer_auxv },
4577   { "qXfer:exec-file:read", PACKET_DISABLE, remote_supported_packet,
4578     PACKET_qXfer_exec_file },
4579   { "qXfer:features:read", PACKET_DISABLE, remote_supported_packet,
4580     PACKET_qXfer_features },
4581   { "qXfer:libraries:read", PACKET_DISABLE, remote_supported_packet,
4582     PACKET_qXfer_libraries },
4583   { "qXfer:libraries-svr4:read", PACKET_DISABLE, remote_supported_packet,
4584     PACKET_qXfer_libraries_svr4 },
4585   { "augmented-libraries-svr4-read", PACKET_DISABLE,
4586     remote_supported_packet, PACKET_augmented_libraries_svr4_read_feature },
4587   { "qXfer:memory-map:read", PACKET_DISABLE, remote_supported_packet,
4588     PACKET_qXfer_memory_map },
4589   { "qXfer:spu:read", PACKET_DISABLE, remote_supported_packet,
4590     PACKET_qXfer_spu_read },
4591   { "qXfer:spu:write", PACKET_DISABLE, remote_supported_packet,
4592     PACKET_qXfer_spu_write },
4593   { "qXfer:osdata:read", PACKET_DISABLE, remote_supported_packet,
4594     PACKET_qXfer_osdata },
4595   { "qXfer:threads:read", PACKET_DISABLE, remote_supported_packet,
4596     PACKET_qXfer_threads },
4597   { "qXfer:traceframe-info:read", PACKET_DISABLE, remote_supported_packet,
4598     PACKET_qXfer_traceframe_info },
4599   { "QPassSignals", PACKET_DISABLE, remote_supported_packet,
4600     PACKET_QPassSignals },
4601   { "QCatchSyscalls", PACKET_DISABLE, remote_supported_packet,
4602     PACKET_QCatchSyscalls },
4603   { "QProgramSignals", PACKET_DISABLE, remote_supported_packet,
4604     PACKET_QProgramSignals },
4605   { "QSetWorkingDir", PACKET_DISABLE, remote_supported_packet,
4606     PACKET_QSetWorkingDir },
4607   { "QStartupWithShell", PACKET_DISABLE, remote_supported_packet,
4608     PACKET_QStartupWithShell },
4609   { "QEnvironmentHexEncoded", PACKET_DISABLE, remote_supported_packet,
4610     PACKET_QEnvironmentHexEncoded },
4611   { "QEnvironmentReset", PACKET_DISABLE, remote_supported_packet,
4612     PACKET_QEnvironmentReset },
4613   { "QEnvironmentUnset", PACKET_DISABLE, remote_supported_packet,
4614     PACKET_QEnvironmentUnset },
4615   { "QStartNoAckMode", PACKET_DISABLE, remote_supported_packet,
4616     PACKET_QStartNoAckMode },
4617   { "multiprocess", PACKET_DISABLE, remote_supported_packet,
4618     PACKET_multiprocess_feature },
4619   { "QNonStop", PACKET_DISABLE, remote_supported_packet, PACKET_QNonStop },
4620   { "qXfer:siginfo:read", PACKET_DISABLE, remote_supported_packet,
4621     PACKET_qXfer_siginfo_read },
4622   { "qXfer:siginfo:write", PACKET_DISABLE, remote_supported_packet,
4623     PACKET_qXfer_siginfo_write },
4624   { "ConditionalTracepoints", PACKET_DISABLE, remote_supported_packet,
4625     PACKET_ConditionalTracepoints },
4626   { "ConditionalBreakpoints", PACKET_DISABLE, remote_supported_packet,
4627     PACKET_ConditionalBreakpoints },
4628   { "BreakpointCommands", PACKET_DISABLE, remote_supported_packet,
4629     PACKET_BreakpointCommands },
4630   { "FastTracepoints", PACKET_DISABLE, remote_supported_packet,
4631     PACKET_FastTracepoints },
4632   { "StaticTracepoints", PACKET_DISABLE, remote_supported_packet,
4633     PACKET_StaticTracepoints },
4634   {"InstallInTrace", PACKET_DISABLE, remote_supported_packet,
4635    PACKET_InstallInTrace},
4636   { "DisconnectedTracing", PACKET_DISABLE, remote_supported_packet,
4637     PACKET_DisconnectedTracing_feature },
4638   { "ReverseContinue", PACKET_DISABLE, remote_supported_packet,
4639     PACKET_bc },
4640   { "ReverseStep", PACKET_DISABLE, remote_supported_packet,
4641     PACKET_bs },
4642   { "TracepointSource", PACKET_DISABLE, remote_supported_packet,
4643     PACKET_TracepointSource },
4644   { "QAllow", PACKET_DISABLE, remote_supported_packet,
4645     PACKET_QAllow },
4646   { "EnableDisableTracepoints", PACKET_DISABLE, remote_supported_packet,
4647     PACKET_EnableDisableTracepoints_feature },
4648   { "qXfer:fdpic:read", PACKET_DISABLE, remote_supported_packet,
4649     PACKET_qXfer_fdpic },
4650   { "qXfer:uib:read", PACKET_DISABLE, remote_supported_packet,
4651     PACKET_qXfer_uib },
4652   { "QDisableRandomization", PACKET_DISABLE, remote_supported_packet,
4653     PACKET_QDisableRandomization },
4654   { "QAgent", PACKET_DISABLE, remote_supported_packet, PACKET_QAgent},
4655   { "QTBuffer:size", PACKET_DISABLE,
4656     remote_supported_packet, PACKET_QTBuffer_size},
4657   { "tracenz", PACKET_DISABLE, remote_supported_packet, PACKET_tracenz_feature },
4658   { "Qbtrace:off", PACKET_DISABLE, remote_supported_packet, PACKET_Qbtrace_off },
4659   { "Qbtrace:bts", PACKET_DISABLE, remote_supported_packet, PACKET_Qbtrace_bts },
4660   { "Qbtrace:pt", PACKET_DISABLE, remote_supported_packet, PACKET_Qbtrace_pt },
4661   { "qXfer:btrace:read", PACKET_DISABLE, remote_supported_packet,
4662     PACKET_qXfer_btrace },
4663   { "qXfer:btrace-conf:read", PACKET_DISABLE, remote_supported_packet,
4664     PACKET_qXfer_btrace_conf },
4665   { "Qbtrace-conf:bts:size", PACKET_DISABLE, remote_supported_packet,
4666     PACKET_Qbtrace_conf_bts_size },
4667   { "swbreak", PACKET_DISABLE, remote_supported_packet, PACKET_swbreak_feature },
4668   { "hwbreak", PACKET_DISABLE, remote_supported_packet, PACKET_hwbreak_feature },
4669   { "fork-events", PACKET_DISABLE, remote_supported_packet,
4670     PACKET_fork_event_feature },
4671   { "vfork-events", PACKET_DISABLE, remote_supported_packet,
4672     PACKET_vfork_event_feature },
4673   { "exec-events", PACKET_DISABLE, remote_supported_packet,
4674     PACKET_exec_event_feature },
4675   { "Qbtrace-conf:pt:size", PACKET_DISABLE, remote_supported_packet,
4676     PACKET_Qbtrace_conf_pt_size },
4677   { "vContSupported", PACKET_DISABLE, remote_supported_packet, PACKET_vContSupported },
4678   { "QThreadEvents", PACKET_DISABLE, remote_supported_packet, PACKET_QThreadEvents },
4679   { "no-resumed", PACKET_DISABLE, remote_supported_packet, PACKET_no_resumed },
4680 };
4681
4682 static char *remote_support_xml;
4683
4684 /* Register string appended to "xmlRegisters=" in qSupported query.  */
4685
4686 void
4687 register_remote_support_xml (const char *xml)
4688 {
4689 #if defined(HAVE_LIBEXPAT)
4690   if (remote_support_xml == NULL)
4691     remote_support_xml = concat ("xmlRegisters=", xml, (char *) NULL);
4692   else
4693     {
4694       char *copy = xstrdup (remote_support_xml + 13);
4695       char *p = strtok (copy, ",");
4696
4697       do
4698         {
4699           if (strcmp (p, xml) == 0)
4700             {
4701               /* already there */
4702               xfree (copy);
4703               return;
4704             }
4705         }
4706       while ((p = strtok (NULL, ",")) != NULL);
4707       xfree (copy);
4708
4709       remote_support_xml = reconcat (remote_support_xml,
4710                                      remote_support_xml, ",", xml,
4711                                      (char *) NULL);
4712     }
4713 #endif
4714 }
4715
4716 static char *
4717 remote_query_supported_append (char *msg, const char *append)
4718 {
4719   if (msg)
4720     return reconcat (msg, msg, ";", append, (char *) NULL);
4721   else
4722     return xstrdup (append);
4723 }
4724
4725 static void
4726 remote_query_supported (void)
4727 {
4728   struct remote_state *rs = get_remote_state ();
4729   char *next;
4730   int i;
4731   unsigned char seen [ARRAY_SIZE (remote_protocol_features)];
4732
4733   /* The packet support flags are handled differently for this packet
4734      than for most others.  We treat an error, a disabled packet, and
4735      an empty response identically: any features which must be reported
4736      to be used will be automatically disabled.  An empty buffer
4737      accomplishes this, since that is also the representation for a list
4738      containing no features.  */
4739
4740   rs->buf[0] = 0;
4741   if (packet_support (PACKET_qSupported) != PACKET_DISABLE)
4742     {
4743       char *q = NULL;
4744       struct cleanup *old_chain = make_cleanup (free_current_contents, &q);
4745
4746       if (packet_set_cmd_state (PACKET_multiprocess_feature) != AUTO_BOOLEAN_FALSE)
4747         q = remote_query_supported_append (q, "multiprocess+");
4748
4749       if (packet_set_cmd_state (PACKET_swbreak_feature) != AUTO_BOOLEAN_FALSE)
4750         q = remote_query_supported_append (q, "swbreak+");
4751       if (packet_set_cmd_state (PACKET_hwbreak_feature) != AUTO_BOOLEAN_FALSE)
4752         q = remote_query_supported_append (q, "hwbreak+");
4753
4754       q = remote_query_supported_append (q, "qRelocInsn+");
4755
4756       if (packet_set_cmd_state (PACKET_fork_event_feature)
4757           != AUTO_BOOLEAN_FALSE)
4758         q = remote_query_supported_append (q, "fork-events+");
4759       if (packet_set_cmd_state (PACKET_vfork_event_feature)
4760           != AUTO_BOOLEAN_FALSE)
4761         q = remote_query_supported_append (q, "vfork-events+");
4762       if (packet_set_cmd_state (PACKET_exec_event_feature)
4763           != AUTO_BOOLEAN_FALSE)
4764         q = remote_query_supported_append (q, "exec-events+");
4765
4766       if (packet_set_cmd_state (PACKET_vContSupported) != AUTO_BOOLEAN_FALSE)
4767         q = remote_query_supported_append (q, "vContSupported+");
4768
4769       if (packet_set_cmd_state (PACKET_QThreadEvents) != AUTO_BOOLEAN_FALSE)
4770         q = remote_query_supported_append (q, "QThreadEvents+");
4771
4772       if (packet_set_cmd_state (PACKET_no_resumed) != AUTO_BOOLEAN_FALSE)
4773         q = remote_query_supported_append (q, "no-resumed+");
4774
4775       /* Keep this one last to work around a gdbserver <= 7.10 bug in
4776          the qSupported:xmlRegisters=i386 handling.  */
4777       if (remote_support_xml != NULL)
4778         q = remote_query_supported_append (q, remote_support_xml);
4779
4780       q = reconcat (q, "qSupported:", q, (char *) NULL);
4781       putpkt (q);
4782
4783       do_cleanups (old_chain);
4784
4785       getpkt (&rs->buf, &rs->buf_size, 0);
4786
4787       /* If an error occured, warn, but do not return - just reset the
4788          buffer to empty and go on to disable features.  */
4789       if (packet_ok (rs->buf, &remote_protocol_packets[PACKET_qSupported])
4790           == PACKET_ERROR)
4791         {
4792           warning (_("Remote failure reply: %s"), rs->buf);
4793           rs->buf[0] = 0;
4794         }
4795     }
4796
4797   memset (seen, 0, sizeof (seen));
4798
4799   next = rs->buf;
4800   while (*next)
4801     {
4802       enum packet_support is_supported;
4803       char *p, *end, *name_end, *value;
4804
4805       /* First separate out this item from the rest of the packet.  If
4806          there's another item after this, we overwrite the separator
4807          (terminated strings are much easier to work with).  */
4808       p = next;
4809       end = strchr (p, ';');
4810       if (end == NULL)
4811         {
4812           end = p + strlen (p);
4813           next = end;
4814         }
4815       else
4816         {
4817           *end = '\0';
4818           next = end + 1;
4819
4820           if (end == p)
4821             {
4822               warning (_("empty item in \"qSupported\" response"));
4823               continue;
4824             }
4825         }
4826
4827       name_end = strchr (p, '=');
4828       if (name_end)
4829         {
4830           /* This is a name=value entry.  */
4831           is_supported = PACKET_ENABLE;
4832           value = name_end + 1;
4833           *name_end = '\0';
4834         }
4835       else
4836         {
4837           value = NULL;
4838           switch (end[-1])
4839             {
4840             case '+':
4841               is_supported = PACKET_ENABLE;
4842               break;
4843
4844             case '-':
4845               is_supported = PACKET_DISABLE;
4846               break;
4847
4848             case '?':
4849               is_supported = PACKET_SUPPORT_UNKNOWN;
4850               break;
4851
4852             default:
4853               warning (_("unrecognized item \"%s\" "
4854                          "in \"qSupported\" response"), p);
4855               continue;
4856             }
4857           end[-1] = '\0';
4858         }
4859
4860       for (i = 0; i < ARRAY_SIZE (remote_protocol_features); i++)
4861         if (strcmp (remote_protocol_features[i].name, p) == 0)
4862           {
4863             const struct protocol_feature *feature;
4864
4865             seen[i] = 1;
4866             feature = &remote_protocol_features[i];
4867             feature->func (feature, is_supported, value);
4868             break;
4869           }
4870     }
4871
4872   /* If we increased the packet size, make sure to increase the global
4873      buffer size also.  We delay this until after parsing the entire
4874      qSupported packet, because this is the same buffer we were
4875      parsing.  */
4876   if (rs->buf_size < rs->explicit_packet_size)
4877     {
4878       rs->buf_size = rs->explicit_packet_size;
4879       rs->buf = (char *) xrealloc (rs->buf, rs->buf_size);
4880     }
4881
4882   /* Handle the defaults for unmentioned features.  */
4883   for (i = 0; i < ARRAY_SIZE (remote_protocol_features); i++)
4884     if (!seen[i])
4885       {
4886         const struct protocol_feature *feature;
4887
4888         feature = &remote_protocol_features[i];
4889         feature->func (feature, feature->default_support, NULL);
4890       }
4891 }
4892
4893 /* Serial QUIT handler for the remote serial descriptor.
4894
4895    Defers handling a Ctrl-C until we're done with the current
4896    command/response packet sequence, unless:
4897
4898    - We're setting up the connection.  Don't send a remote interrupt
4899      request, as we're not fully synced yet.  Quit immediately
4900      instead.
4901
4902    - The target has been resumed in the foreground
4903      (target_terminal::is_ours is false) with a synchronous resume
4904      packet, and we're blocked waiting for the stop reply, thus a
4905      Ctrl-C should be immediately sent to the target.
4906
4907    - We get a second Ctrl-C while still within the same serial read or
4908      write.  In that case the serial is seemingly wedged --- offer to
4909      quit/disconnect.
4910
4911    - We see a second Ctrl-C without target response, after having
4912      previously interrupted the target.  In that case the target/stub
4913      is probably wedged --- offer to quit/disconnect.
4914 */
4915
4916 static void
4917 remote_serial_quit_handler (void)
4918 {
4919   struct remote_state *rs = get_remote_state ();
4920
4921   if (check_quit_flag ())
4922     {
4923       /* If we're starting up, we're not fully synced yet.  Quit
4924          immediately.  */
4925       if (rs->starting_up)
4926         quit ();
4927       else if (rs->got_ctrlc_during_io)
4928         {
4929           if (query (_("The target is not responding to GDB commands.\n"
4930                        "Stop debugging it? ")))
4931             remote_unpush_and_throw ();
4932         }
4933       /* If ^C has already been sent once, offer to disconnect.  */
4934       else if (!target_terminal::is_ours () && rs->ctrlc_pending_p)
4935         interrupt_query ();
4936       /* All-stop protocol, and blocked waiting for stop reply.  Send
4937          an interrupt request.  */
4938       else if (!target_terminal::is_ours () && rs->waiting_for_stop_reply)
4939         target_interrupt (inferior_ptid);
4940       else
4941         rs->got_ctrlc_during_io = 1;
4942     }
4943 }
4944
4945 /* Remove any of the remote.c targets from target stack.  Upper targets depend
4946    on it so remove them first.  */
4947
4948 static void
4949 remote_unpush_target (void)
4950 {
4951   pop_all_targets_at_and_above (process_stratum);
4952 }
4953
4954 static void
4955 remote_unpush_and_throw (void)
4956 {
4957   remote_unpush_target ();
4958   throw_error (TARGET_CLOSE_ERROR, _("Disconnected from target."));
4959 }
4960
4961 static void
4962 remote_open_1 (const char *name, int from_tty,
4963                struct target_ops *target, int extended_p)
4964 {
4965   struct remote_state *rs = get_remote_state ();
4966
4967   if (name == 0)
4968     error (_("To open a remote debug connection, you need to specify what\n"
4969            "serial device is attached to the remote system\n"
4970            "(e.g. /dev/ttyS0, /dev/ttya, COM1, etc.)."));
4971
4972   /* See FIXME above.  */
4973   if (!target_async_permitted)
4974     wait_forever_enabled_p = 1;
4975
4976   /* If we're connected to a running target, target_preopen will kill it.
4977      Ask this question first, before target_preopen has a chance to kill
4978      anything.  */
4979   if (rs->remote_desc != NULL && !have_inferiors ())
4980     {
4981       if (from_tty
4982           && !query (_("Already connected to a remote target.  Disconnect? ")))
4983         error (_("Still connected."));
4984     }
4985
4986   /* Here the possibly existing remote target gets unpushed.  */
4987   target_preopen (from_tty);
4988
4989   /* Make sure we send the passed signals list the next time we resume.  */
4990   xfree (rs->last_pass_packet);
4991   rs->last_pass_packet = NULL;
4992
4993   /* Make sure we send the program signals list the next time we
4994      resume.  */
4995   xfree (rs->last_program_signals_packet);
4996   rs->last_program_signals_packet = NULL;
4997
4998   remote_fileio_reset ();
4999   reopen_exec_file ();
5000   reread_symbols ();
5001
5002   rs->remote_desc = remote_serial_open (name);
5003   if (!rs->remote_desc)
5004     perror_with_name (name);
5005
5006   if (baud_rate != -1)
5007     {
5008       if (serial_setbaudrate (rs->remote_desc, baud_rate))
5009         {
5010           /* The requested speed could not be set.  Error out to
5011              top level after closing remote_desc.  Take care to
5012              set remote_desc to NULL to avoid closing remote_desc
5013              more than once.  */
5014           serial_close (rs->remote_desc);
5015           rs->remote_desc = NULL;
5016           perror_with_name (name);
5017         }
5018     }
5019
5020   serial_setparity (rs->remote_desc, serial_parity);
5021   serial_raw (rs->remote_desc);
5022
5023   /* If there is something sitting in the buffer we might take it as a
5024      response to a command, which would be bad.  */
5025   serial_flush_input (rs->remote_desc);
5026
5027   if (from_tty)
5028     {
5029       puts_filtered ("Remote debugging using ");
5030       puts_filtered (name);
5031       puts_filtered ("\n");
5032     }
5033   push_target (target);         /* Switch to using remote target now.  */
5034
5035   /* Register extra event sources in the event loop.  */
5036   remote_async_inferior_event_token
5037     = create_async_event_handler (remote_async_inferior_event_handler,
5038                                   NULL);
5039   rs->notif_state = remote_notif_state_allocate ();
5040
5041   /* Reset the target state; these things will be queried either by
5042      remote_query_supported or as they are needed.  */
5043   reset_all_packet_configs_support ();
5044   rs->cached_wait_status = 0;
5045   rs->explicit_packet_size = 0;
5046   rs->noack_mode = 0;
5047   rs->extended = extended_p;
5048   rs->waiting_for_stop_reply = 0;
5049   rs->ctrlc_pending_p = 0;
5050   rs->got_ctrlc_during_io = 0;
5051
5052   rs->general_thread = not_sent_ptid;
5053   rs->continue_thread = not_sent_ptid;
5054   rs->remote_traceframe_number = -1;
5055
5056   rs->last_resume_exec_dir = EXEC_FORWARD;
5057
5058   /* Probe for ability to use "ThreadInfo" query, as required.  */
5059   rs->use_threadinfo_query = 1;
5060   rs->use_threadextra_query = 1;
5061
5062   readahead_cache_invalidate ();
5063
5064   if (target_async_permitted)
5065     {
5066       /* FIXME: cagney/1999-09-23: During the initial connection it is
5067          assumed that the target is already ready and able to respond to
5068          requests.  Unfortunately remote_start_remote() eventually calls
5069          wait_for_inferior() with no timeout.  wait_forever_enabled_p gets
5070          around this.  Eventually a mechanism that allows
5071          wait_for_inferior() to expect/get timeouts will be
5072          implemented.  */
5073       wait_forever_enabled_p = 0;
5074     }
5075
5076   /* First delete any symbols previously loaded from shared libraries.  */
5077   no_shared_libraries (NULL, 0);
5078
5079   /* Start afresh.  */
5080   init_thread_list ();
5081
5082   /* Start the remote connection.  If error() or QUIT, discard this
5083      target (we'd otherwise be in an inconsistent state) and then
5084      propogate the error on up the exception chain.  This ensures that
5085      the caller doesn't stumble along blindly assuming that the
5086      function succeeded.  The CLI doesn't have this problem but other
5087      UI's, such as MI do.
5088
5089      FIXME: cagney/2002-05-19: Instead of re-throwing the exception,
5090      this function should return an error indication letting the
5091      caller restore the previous state.  Unfortunately the command
5092      ``target remote'' is directly wired to this function making that
5093      impossible.  On a positive note, the CLI side of this problem has
5094      been fixed - the function set_cmd_context() makes it possible for
5095      all the ``target ....'' commands to share a common callback
5096      function.  See cli-dump.c.  */
5097   {
5098
5099     TRY
5100       {
5101         remote_start_remote (from_tty, target, extended_p);
5102       }
5103     CATCH (ex, RETURN_MASK_ALL)
5104       {
5105         /* Pop the partially set up target - unless something else did
5106            already before throwing the exception.  */
5107         if (rs->remote_desc != NULL)
5108           remote_unpush_target ();
5109         if (target_async_permitted)
5110           wait_forever_enabled_p = 1;
5111         throw_exception (ex);
5112       }
5113     END_CATCH
5114   }
5115
5116   remote_btrace_reset ();
5117
5118   if (target_async_permitted)
5119     wait_forever_enabled_p = 1;
5120 }
5121
5122 /* Detach the specified process.  */
5123
5124 static void
5125 remote_detach_pid (int pid)
5126 {
5127   struct remote_state *rs = get_remote_state ();
5128
5129   if (remote_multi_process_p (rs))
5130     xsnprintf (rs->buf, get_remote_packet_size (), "D;%x", pid);
5131   else
5132     strcpy (rs->buf, "D");
5133
5134   putpkt (rs->buf);
5135   getpkt (&rs->buf, &rs->buf_size, 0);
5136
5137   if (rs->buf[0] == 'O' && rs->buf[1] == 'K')
5138     ;
5139   else if (rs->buf[0] == '\0')
5140     error (_("Remote doesn't know how to detach"));
5141   else
5142     error (_("Can't detach process."));
5143 }
5144
5145 /* This detaches a program to which we previously attached, using
5146    inferior_ptid to identify the process.  After this is done, GDB
5147    can be used to debug some other program.  We better not have left
5148    any breakpoints in the target program or it'll die when it hits
5149    one.  */
5150
5151 static void
5152 remote_detach_1 (const char *args, int from_tty)
5153 {
5154   int pid = ptid_get_pid (inferior_ptid);
5155   struct remote_state *rs = get_remote_state ();
5156   struct thread_info *tp = find_thread_ptid (inferior_ptid);
5157   int is_fork_parent;
5158
5159   if (args)
5160     error (_("Argument given to \"detach\" when remotely debugging."));
5161
5162   if (!target_has_execution)
5163     error (_("No process to detach from."));
5164
5165   target_announce_detach (from_tty);
5166
5167   /* Tell the remote target to detach.  */
5168   remote_detach_pid (pid);
5169
5170   /* Exit only if this is the only active inferior.  */
5171   if (from_tty && !rs->extended && number_of_live_inferiors () == 1)
5172     puts_filtered (_("Ending remote debugging.\n"));
5173
5174   /* Check to see if we are detaching a fork parent.  Note that if we
5175      are detaching a fork child, tp == NULL.  */
5176   is_fork_parent = (tp != NULL
5177                     && tp->pending_follow.kind == TARGET_WAITKIND_FORKED);
5178
5179   /* If doing detach-on-fork, we don't mourn, because that will delete
5180      breakpoints that should be available for the followed inferior.  */
5181   if (!is_fork_parent)
5182     target_mourn_inferior (inferior_ptid);
5183   else
5184     {
5185       inferior_ptid = null_ptid;
5186       detach_inferior (pid);
5187     }
5188 }
5189
5190 static void
5191 remote_detach (struct target_ops *ops, const char *args, int from_tty)
5192 {
5193   remote_detach_1 (args, from_tty);
5194 }
5195
5196 static void
5197 extended_remote_detach (struct target_ops *ops, const char *args, int from_tty)
5198 {
5199   remote_detach_1 (args, from_tty);
5200 }
5201
5202 /* Target follow-fork function for remote targets.  On entry, and
5203    at return, the current inferior is the fork parent.
5204
5205    Note that although this is currently only used for extended-remote,
5206    it is named remote_follow_fork in anticipation of using it for the
5207    remote target as well.  */
5208
5209 static int
5210 remote_follow_fork (struct target_ops *ops, int follow_child,
5211                     int detach_fork)
5212 {
5213   struct remote_state *rs = get_remote_state ();
5214   enum target_waitkind kind = inferior_thread ()->pending_follow.kind;
5215
5216   if ((kind == TARGET_WAITKIND_FORKED && remote_fork_event_p (rs))
5217       || (kind == TARGET_WAITKIND_VFORKED && remote_vfork_event_p (rs)))
5218     {
5219       /* When following the parent and detaching the child, we detach
5220          the child here.  For the case of following the child and
5221          detaching the parent, the detach is done in the target-
5222          independent follow fork code in infrun.c.  We can't use
5223          target_detach when detaching an unfollowed child because
5224          the client side doesn't know anything about the child.  */
5225       if (detach_fork && !follow_child)
5226         {
5227           /* Detach the fork child.  */
5228           ptid_t child_ptid;
5229           pid_t child_pid;
5230
5231           child_ptid = inferior_thread ()->pending_follow.value.related_pid;
5232           child_pid = ptid_get_pid (child_ptid);
5233
5234           remote_detach_pid (child_pid);
5235           detach_inferior (child_pid);
5236         }
5237     }
5238   return 0;
5239 }
5240
5241 /* Target follow-exec function for remote targets.  Save EXECD_PATHNAME
5242    in the program space of the new inferior.  On entry and at return the
5243    current inferior is the exec'ing inferior.  INF is the new exec'd
5244    inferior, which may be the same as the exec'ing inferior unless
5245    follow-exec-mode is "new".  */
5246
5247 static void
5248 remote_follow_exec (struct target_ops *ops,
5249                     struct inferior *inf, char *execd_pathname)
5250 {
5251   /* We know that this is a target file name, so if it has the "target:"
5252      prefix we strip it off before saving it in the program space.  */
5253   if (is_target_filename (execd_pathname))
5254     execd_pathname += strlen (TARGET_SYSROOT_PREFIX);
5255
5256   set_pspace_remote_exec_file (inf->pspace, execd_pathname);
5257 }
5258
5259 /* Same as remote_detach, but don't send the "D" packet; just disconnect.  */
5260
5261 static void
5262 remote_disconnect (struct target_ops *target, const char *args, int from_tty)
5263 {
5264   if (args)
5265     error (_("Argument given to \"disconnect\" when remotely debugging."));
5266
5267   /* Make sure we unpush even the extended remote targets.  Calling
5268      target_mourn_inferior won't unpush, and remote_mourn won't
5269      unpush if there is more than one inferior left.  */
5270   unpush_target (target);
5271   generic_mourn_inferior ();
5272
5273   if (from_tty)
5274     puts_filtered ("Ending remote debugging.\n");
5275 }
5276
5277 /* Attach to the process specified by ARGS.  If FROM_TTY is non-zero,
5278    be chatty about it.  */
5279
5280 static void
5281 extended_remote_attach (struct target_ops *target, const char *args,
5282                         int from_tty)
5283 {
5284   struct remote_state *rs = get_remote_state ();
5285   int pid;
5286   char *wait_status = NULL;
5287
5288   pid = parse_pid_to_attach (args);
5289
5290   /* Remote PID can be freely equal to getpid, do not check it here the same
5291      way as in other targets.  */
5292
5293   if (packet_support (PACKET_vAttach) == PACKET_DISABLE)
5294     error (_("This target does not support attaching to a process"));
5295
5296   if (from_tty)
5297     {
5298       char *exec_file = get_exec_file (0);
5299
5300       if (exec_file)
5301         printf_unfiltered (_("Attaching to program: %s, %s\n"), exec_file,
5302                            target_pid_to_str (pid_to_ptid (pid)));
5303       else
5304         printf_unfiltered (_("Attaching to %s\n"),
5305                            target_pid_to_str (pid_to_ptid (pid)));
5306
5307       gdb_flush (gdb_stdout);
5308     }
5309
5310   xsnprintf (rs->buf, get_remote_packet_size (), "vAttach;%x", pid);
5311   putpkt (rs->buf);
5312   getpkt (&rs->buf, &rs->buf_size, 0);
5313
5314   switch (packet_ok (rs->buf,
5315                      &remote_protocol_packets[PACKET_vAttach]))
5316     {
5317     case PACKET_OK:
5318       if (!target_is_non_stop_p ())
5319         {
5320           /* Save the reply for later.  */
5321           wait_status = (char *) alloca (strlen (rs->buf) + 1);
5322           strcpy (wait_status, rs->buf);
5323         }
5324       else if (strcmp (rs->buf, "OK") != 0)
5325         error (_("Attaching to %s failed with: %s"),
5326                target_pid_to_str (pid_to_ptid (pid)),
5327                rs->buf);
5328       break;
5329     case PACKET_UNKNOWN:
5330       error (_("This target does not support attaching to a process"));
5331     default:
5332       error (_("Attaching to %s failed"),
5333              target_pid_to_str (pid_to_ptid (pid)));
5334     }
5335
5336   set_current_inferior (remote_add_inferior (0, pid, 1, 0));
5337
5338   inferior_ptid = pid_to_ptid (pid);
5339
5340   if (target_is_non_stop_p ())
5341     {
5342       struct thread_info *thread;
5343
5344       /* Get list of threads.  */
5345       remote_update_thread_list (target);
5346
5347       thread = first_thread_of_process (pid);
5348       if (thread)
5349         inferior_ptid = thread->ptid;
5350       else
5351         inferior_ptid = pid_to_ptid (pid);
5352
5353       /* Invalidate our notion of the remote current thread.  */
5354       record_currthread (rs, minus_one_ptid);
5355     }
5356   else
5357     {
5358       /* Now, if we have thread information, update inferior_ptid.  */
5359       inferior_ptid = remote_current_thread (inferior_ptid);
5360
5361       /* Add the main thread to the thread list.  */
5362       add_thread_silent (inferior_ptid);
5363     }
5364
5365   /* Next, if the target can specify a description, read it.  We do
5366      this before anything involving memory or registers.  */
5367   target_find_description ();
5368
5369   if (!target_is_non_stop_p ())
5370     {
5371       /* Use the previously fetched status.  */
5372       gdb_assert (wait_status != NULL);
5373
5374       if (target_can_async_p ())
5375         {
5376           struct notif_event *reply
5377             =  remote_notif_parse (&notif_client_stop, wait_status);
5378
5379           push_stop_reply ((struct stop_reply *) reply);
5380
5381           target_async (1);
5382         }
5383       else
5384         {
5385           gdb_assert (wait_status != NULL);
5386           strcpy (rs->buf, wait_status);
5387           rs->cached_wait_status = 1;
5388         }
5389     }
5390   else
5391     gdb_assert (wait_status == NULL);
5392 }
5393
5394 /* Implementation of the to_post_attach method.  */
5395
5396 static void
5397 extended_remote_post_attach (struct target_ops *ops, int pid)
5398 {
5399   /* Get text, data & bss offsets.  */
5400   get_offsets ();
5401
5402   /* In certain cases GDB might not have had the chance to start
5403      symbol lookup up until now.  This could happen if the debugged
5404      binary is not using shared libraries, the vsyscall page is not
5405      present (on Linux) and the binary itself hadn't changed since the
5406      debugging process was started.  */
5407   if (symfile_objfile != NULL)
5408     remote_check_symbols();
5409 }
5410
5411 \f
5412 /* Check for the availability of vCont.  This function should also check
5413    the response.  */
5414
5415 static void
5416 remote_vcont_probe (struct remote_state *rs)
5417 {
5418   char *buf;
5419
5420   strcpy (rs->buf, "vCont?");
5421   putpkt (rs->buf);
5422   getpkt (&rs->buf, &rs->buf_size, 0);
5423   buf = rs->buf;
5424
5425   /* Make sure that the features we assume are supported.  */
5426   if (startswith (buf, "vCont"))
5427     {
5428       char *p = &buf[5];
5429       int support_c, support_C;
5430
5431       rs->supports_vCont.s = 0;
5432       rs->supports_vCont.S = 0;
5433       support_c = 0;
5434       support_C = 0;
5435       rs->supports_vCont.t = 0;
5436       rs->supports_vCont.r = 0;
5437       while (p && *p == ';')
5438         {
5439           p++;
5440           if (*p == 's' && (*(p + 1) == ';' || *(p + 1) == 0))
5441             rs->supports_vCont.s = 1;
5442           else if (*p == 'S' && (*(p + 1) == ';' || *(p + 1) == 0))
5443             rs->supports_vCont.S = 1;
5444           else if (*p == 'c' && (*(p + 1) == ';' || *(p + 1) == 0))
5445             support_c = 1;
5446           else if (*p == 'C' && (*(p + 1) == ';' || *(p + 1) == 0))
5447             support_C = 1;
5448           else if (*p == 't' && (*(p + 1) == ';' || *(p + 1) == 0))
5449             rs->supports_vCont.t = 1;
5450           else if (*p == 'r' && (*(p + 1) == ';' || *(p + 1) == 0))
5451             rs->supports_vCont.r = 1;
5452
5453           p = strchr (p, ';');
5454         }
5455
5456       /* If c, and C are not all supported, we can't use vCont.  Clearing
5457          BUF will make packet_ok disable the packet.  */
5458       if (!support_c || !support_C)
5459         buf[0] = 0;
5460     }
5461
5462   packet_ok (buf, &remote_protocol_packets[PACKET_vCont]);
5463 }
5464
5465 /* Helper function for building "vCont" resumptions.  Write a
5466    resumption to P.  ENDP points to one-passed-the-end of the buffer
5467    we're allowed to write to.  Returns BUF+CHARACTERS_WRITTEN.  The
5468    thread to be resumed is PTID; STEP and SIGGNAL indicate whether the
5469    resumed thread should be single-stepped and/or signalled.  If PTID
5470    equals minus_one_ptid, then all threads are resumed; if PTID
5471    represents a process, then all threads of the process are resumed;
5472    the thread to be stepped and/or signalled is given in the global
5473    INFERIOR_PTID.  */
5474
5475 static char *
5476 append_resumption (char *p, char *endp,
5477                    ptid_t ptid, int step, enum gdb_signal siggnal)
5478 {
5479   struct remote_state *rs = get_remote_state ();
5480
5481   if (step && siggnal != GDB_SIGNAL_0)
5482     p += xsnprintf (p, endp - p, ";S%02x", siggnal);
5483   else if (step
5484            /* GDB is willing to range step.  */
5485            && use_range_stepping
5486            /* Target supports range stepping.  */
5487            && rs->supports_vCont.r
5488            /* We don't currently support range stepping multiple
5489               threads with a wildcard (though the protocol allows it,
5490               so stubs shouldn't make an active effort to forbid
5491               it).  */
5492            && !(remote_multi_process_p (rs) && ptid_is_pid (ptid)))
5493     {
5494       struct thread_info *tp;
5495
5496       if (ptid_equal (ptid, minus_one_ptid))
5497         {
5498           /* If we don't know about the target thread's tid, then
5499              we're resuming magic_null_ptid (see caller).  */
5500           tp = find_thread_ptid (magic_null_ptid);
5501         }
5502       else
5503         tp = find_thread_ptid (ptid);
5504       gdb_assert (tp != NULL);
5505
5506       if (tp->control.may_range_step)
5507         {
5508           int addr_size = gdbarch_addr_bit (target_gdbarch ()) / 8;
5509
5510           p += xsnprintf (p, endp - p, ";r%s,%s",
5511                           phex_nz (tp->control.step_range_start,
5512                                    addr_size),
5513                           phex_nz (tp->control.step_range_end,
5514                                    addr_size));
5515         }
5516       else
5517         p += xsnprintf (p, endp - p, ";s");
5518     }
5519   else if (step)
5520     p += xsnprintf (p, endp - p, ";s");
5521   else if (siggnal != GDB_SIGNAL_0)
5522     p += xsnprintf (p, endp - p, ";C%02x", siggnal);
5523   else
5524     p += xsnprintf (p, endp - p, ";c");
5525
5526   if (remote_multi_process_p (rs) && ptid_is_pid (ptid))
5527     {
5528       ptid_t nptid;
5529
5530       /* All (-1) threads of process.  */
5531       nptid = ptid_build (ptid_get_pid (ptid), -1, 0);
5532
5533       p += xsnprintf (p, endp - p, ":");
5534       p = write_ptid (p, endp, nptid);
5535     }
5536   else if (!ptid_equal (ptid, minus_one_ptid))
5537     {
5538       p += xsnprintf (p, endp - p, ":");
5539       p = write_ptid (p, endp, ptid);
5540     }
5541
5542   return p;
5543 }
5544
5545 /* Clear the thread's private info on resume.  */
5546
5547 static void
5548 resume_clear_thread_private_info (struct thread_info *thread)
5549 {
5550   if (thread->priv != NULL)
5551     {
5552       thread->priv->stop_reason = TARGET_STOPPED_BY_NO_REASON;
5553       thread->priv->watch_data_address = 0;
5554     }
5555 }
5556
5557 /* Append a vCont continue-with-signal action for threads that have a
5558    non-zero stop signal.  */
5559
5560 static char *
5561 append_pending_thread_resumptions (char *p, char *endp, ptid_t ptid)
5562 {
5563   struct thread_info *thread;
5564
5565   ALL_NON_EXITED_THREADS (thread)
5566     if (ptid_match (thread->ptid, ptid)
5567         && !ptid_equal (inferior_ptid, thread->ptid)
5568         && thread->suspend.stop_signal != GDB_SIGNAL_0)
5569       {
5570         p = append_resumption (p, endp, thread->ptid,
5571                                0, thread->suspend.stop_signal);
5572         thread->suspend.stop_signal = GDB_SIGNAL_0;
5573         resume_clear_thread_private_info (thread);
5574       }
5575
5576   return p;
5577 }
5578
5579 /* Set the target running, using the packets that use Hc
5580    (c/s/C/S).  */
5581
5582 static void
5583 remote_resume_with_hc (struct target_ops *ops,
5584                        ptid_t ptid, int step, enum gdb_signal siggnal)
5585 {
5586   struct remote_state *rs = get_remote_state ();
5587   struct thread_info *thread;
5588   char *buf;
5589
5590   rs->last_sent_signal = siggnal;
5591   rs->last_sent_step = step;
5592
5593   /* The c/s/C/S resume packets use Hc, so set the continue
5594      thread.  */
5595   if (ptid_equal (ptid, minus_one_ptid))
5596     set_continue_thread (any_thread_ptid);
5597   else
5598     set_continue_thread (ptid);
5599
5600   ALL_NON_EXITED_THREADS (thread)
5601     resume_clear_thread_private_info (thread);
5602
5603   buf = rs->buf;
5604   if (execution_direction == EXEC_REVERSE)
5605     {
5606       /* We don't pass signals to the target in reverse exec mode.  */
5607       if (info_verbose && siggnal != GDB_SIGNAL_0)
5608         warning (_(" - Can't pass signal %d to target in reverse: ignored."),
5609                  siggnal);
5610
5611       if (step && packet_support (PACKET_bs) == PACKET_DISABLE)
5612         error (_("Remote reverse-step not supported."));
5613       if (!step && packet_support (PACKET_bc) == PACKET_DISABLE)
5614         error (_("Remote reverse-continue not supported."));
5615
5616       strcpy (buf, step ? "bs" : "bc");
5617     }
5618   else if (siggnal != GDB_SIGNAL_0)
5619     {
5620       buf[0] = step ? 'S' : 'C';
5621       buf[1] = tohex (((int) siggnal >> 4) & 0xf);
5622       buf[2] = tohex (((int) siggnal) & 0xf);
5623       buf[3] = '\0';
5624     }
5625   else
5626     strcpy (buf, step ? "s" : "c");
5627
5628   putpkt (buf);
5629 }
5630
5631 /* Resume the remote inferior by using a "vCont" packet.  The thread
5632    to be resumed is PTID; STEP and SIGGNAL indicate whether the
5633    resumed thread should be single-stepped and/or signalled.  If PTID
5634    equals minus_one_ptid, then all threads are resumed; the thread to
5635    be stepped and/or signalled is given in the global INFERIOR_PTID.
5636    This function returns non-zero iff it resumes the inferior.
5637
5638    This function issues a strict subset of all possible vCont commands
5639    at the moment.  */
5640
5641 static int
5642 remote_resume_with_vcont (ptid_t ptid, int step, enum gdb_signal siggnal)
5643 {
5644   struct remote_state *rs = get_remote_state ();
5645   char *p;
5646   char *endp;
5647
5648   /* No reverse execution actions defined for vCont.  */
5649   if (execution_direction == EXEC_REVERSE)
5650     return 0;
5651
5652   if (packet_support (PACKET_vCont) == PACKET_SUPPORT_UNKNOWN)
5653     remote_vcont_probe (rs);
5654
5655   if (packet_support (PACKET_vCont) == PACKET_DISABLE)
5656     return 0;
5657
5658   p = rs->buf;
5659   endp = rs->buf + get_remote_packet_size ();
5660
5661   /* If we could generate a wider range of packets, we'd have to worry
5662      about overflowing BUF.  Should there be a generic
5663      "multi-part-packet" packet?  */
5664
5665   p += xsnprintf (p, endp - p, "vCont");
5666
5667   if (ptid_equal (ptid, magic_null_ptid))
5668     {
5669       /* MAGIC_NULL_PTID means that we don't have any active threads,
5670          so we don't have any TID numbers the inferior will
5671          understand.  Make sure to only send forms that do not specify
5672          a TID.  */
5673       append_resumption (p, endp, minus_one_ptid, step, siggnal);
5674     }
5675   else if (ptid_equal (ptid, minus_one_ptid) || ptid_is_pid (ptid))
5676     {
5677       /* Resume all threads (of all processes, or of a single
5678          process), with preference for INFERIOR_PTID.  This assumes
5679          inferior_ptid belongs to the set of all threads we are about
5680          to resume.  */
5681       if (step || siggnal != GDB_SIGNAL_0)
5682         {
5683           /* Step inferior_ptid, with or without signal.  */
5684           p = append_resumption (p, endp, inferior_ptid, step, siggnal);
5685         }
5686
5687       /* Also pass down any pending signaled resumption for other
5688          threads not the current.  */
5689       p = append_pending_thread_resumptions (p, endp, ptid);
5690
5691       /* And continue others without a signal.  */
5692       append_resumption (p, endp, ptid, /*step=*/ 0, GDB_SIGNAL_0);
5693     }
5694   else
5695     {
5696       /* Scheduler locking; resume only PTID.  */
5697       append_resumption (p, endp, ptid, step, siggnal);
5698     }
5699
5700   gdb_assert (strlen (rs->buf) < get_remote_packet_size ());
5701   putpkt (rs->buf);
5702
5703   if (target_is_non_stop_p ())
5704     {
5705       /* In non-stop, the stub replies to vCont with "OK".  The stop
5706          reply will be reported asynchronously by means of a `%Stop'
5707          notification.  */
5708       getpkt (&rs->buf, &rs->buf_size, 0);
5709       if (strcmp (rs->buf, "OK") != 0)
5710         error (_("Unexpected vCont reply in non-stop mode: %s"), rs->buf);
5711     }
5712
5713   return 1;
5714 }
5715
5716 /* Tell the remote machine to resume.  */
5717
5718 static void
5719 remote_resume (struct target_ops *ops,
5720                ptid_t ptid, int step, enum gdb_signal siggnal)
5721 {
5722   struct remote_state *rs = get_remote_state ();
5723
5724   /* When connected in non-stop mode, the core resumes threads
5725      individually.  Resuming remote threads directly in target_resume
5726      would thus result in sending one packet per thread.  Instead, to
5727      minimize roundtrip latency, here we just store the resume
5728      request; the actual remote resumption will be done in
5729      target_commit_resume / remote_commit_resume, where we'll be able
5730      to do vCont action coalescing.  */
5731   if (target_is_non_stop_p () && execution_direction != EXEC_REVERSE)
5732     {
5733       struct private_thread_info *remote_thr;
5734
5735       if (ptid_equal (minus_one_ptid, ptid) || ptid_is_pid (ptid))
5736         remote_thr = get_private_info_ptid (inferior_ptid);
5737       else
5738         remote_thr = get_private_info_ptid (ptid);
5739       remote_thr->last_resume_step = step;
5740       remote_thr->last_resume_sig = siggnal;
5741       return;
5742     }
5743
5744   /* In all-stop, we can't mark REMOTE_ASYNC_GET_PENDING_EVENTS_TOKEN
5745      (explained in remote-notif.c:handle_notification) so
5746      remote_notif_process is not called.  We need find a place where
5747      it is safe to start a 'vNotif' sequence.  It is good to do it
5748      before resuming inferior, because inferior was stopped and no RSP
5749      traffic at that moment.  */
5750   if (!target_is_non_stop_p ())
5751     remote_notif_process (rs->notif_state, &notif_client_stop);
5752
5753   rs->last_resume_exec_dir = execution_direction;
5754
5755   /* Prefer vCont, and fallback to s/c/S/C, which use Hc.  */
5756   if (!remote_resume_with_vcont (ptid, step, siggnal))
5757     remote_resume_with_hc (ops, ptid, step, siggnal);
5758
5759   /* We are about to start executing the inferior, let's register it
5760      with the event loop.  NOTE: this is the one place where all the
5761      execution commands end up.  We could alternatively do this in each
5762      of the execution commands in infcmd.c.  */
5763   /* FIXME: ezannoni 1999-09-28: We may need to move this out of here
5764      into infcmd.c in order to allow inferior function calls to work
5765      NOT asynchronously.  */
5766   if (target_can_async_p ())
5767     target_async (1);
5768
5769   /* We've just told the target to resume.  The remote server will
5770      wait for the inferior to stop, and then send a stop reply.  In
5771      the mean time, we can't start another command/query ourselves
5772      because the stub wouldn't be ready to process it.  This applies
5773      only to the base all-stop protocol, however.  In non-stop (which
5774      only supports vCont), the stub replies with an "OK", and is
5775      immediate able to process further serial input.  */
5776   if (!target_is_non_stop_p ())
5777     rs->waiting_for_stop_reply = 1;
5778 }
5779
5780 static void check_pending_events_prevent_wildcard_vcont
5781   (int *may_global_wildcard_vcont);
5782 static int is_pending_fork_parent_thread (struct thread_info *thread);
5783
5784 /* Private per-inferior info for target remote processes.  */
5785
5786 struct remote_inferior : public private_inferior
5787 {
5788   /* Whether we can send a wildcard vCont for this process.  */
5789   bool may_wildcard_vcont = true;
5790 };
5791
5792 /* Get the remote private inferior data associated to INF.  */
5793
5794 static remote_inferior *
5795 get_remote_inferior (inferior *inf)
5796 {
5797   if (inf->priv == NULL)
5798     inf->priv.reset (new remote_inferior);
5799
5800   return static_cast<remote_inferior *> (inf->priv.get ());
5801 }
5802
5803 /* Structure used to track the construction of a vCont packet in the
5804    outgoing packet buffer.  This is used to send multiple vCont
5805    packets if we have more actions than would fit a single packet.  */
5806
5807 struct vcont_builder
5808 {
5809   /* Pointer to the first action.  P points here if no action has been
5810      appended yet.  */
5811   char *first_action;
5812
5813   /* Where the next action will be appended.  */
5814   char *p;
5815
5816   /* The end of the buffer.  Must never write past this.  */
5817   char *endp;
5818 };
5819
5820 /* Prepare the outgoing buffer for a new vCont packet.  */
5821
5822 static void
5823 vcont_builder_restart (struct vcont_builder *builder)
5824 {
5825   struct remote_state *rs = get_remote_state ();
5826
5827   builder->p = rs->buf;
5828   builder->endp = rs->buf + get_remote_packet_size ();
5829   builder->p += xsnprintf (builder->p, builder->endp - builder->p, "vCont");
5830   builder->first_action = builder->p;
5831 }
5832
5833 /* If the vCont packet being built has any action, send it to the
5834    remote end.  */
5835
5836 static void
5837 vcont_builder_flush (struct vcont_builder *builder)
5838 {
5839   struct remote_state *rs;
5840
5841   if (builder->p == builder->first_action)
5842     return;
5843
5844   rs = get_remote_state ();
5845   putpkt (rs->buf);
5846   getpkt (&rs->buf, &rs->buf_size, 0);
5847   if (strcmp (rs->buf, "OK") != 0)
5848     error (_("Unexpected vCont reply in non-stop mode: %s"), rs->buf);
5849 }
5850
5851 /* The largest action is range-stepping, with its two addresses.  This
5852    is more than sufficient.  If a new, bigger action is created, it'll
5853    quickly trigger a failed assertion in append_resumption (and we'll
5854    just bump this).  */
5855 #define MAX_ACTION_SIZE 200
5856
5857 /* Append a new vCont action in the outgoing packet being built.  If
5858    the action doesn't fit the packet along with previous actions, push
5859    what we've got so far to the remote end and start over a new vCont
5860    packet (with the new action).  */
5861
5862 static void
5863 vcont_builder_push_action (struct vcont_builder *builder,
5864                            ptid_t ptid, int step, enum gdb_signal siggnal)
5865 {
5866   char buf[MAX_ACTION_SIZE + 1];
5867   char *endp;
5868   size_t rsize;
5869
5870   endp = append_resumption (buf, buf + sizeof (buf),
5871                             ptid, step, siggnal);
5872
5873   /* Check whether this new action would fit in the vCont packet along
5874      with previous actions.  If not, send what we've got so far and
5875      start a new vCont packet.  */
5876   rsize = endp - buf;
5877   if (rsize > builder->endp - builder->p)
5878     {
5879       vcont_builder_flush (builder);
5880       vcont_builder_restart (builder);
5881
5882       /* Should now fit.  */
5883       gdb_assert (rsize <= builder->endp - builder->p);
5884     }
5885
5886   memcpy (builder->p, buf, rsize);
5887   builder->p += rsize;
5888   *builder->p = '\0';
5889 }
5890
5891 /* to_commit_resume implementation.  */
5892
5893 static void
5894 remote_commit_resume (struct target_ops *ops)
5895 {
5896   struct remote_state *rs = get_remote_state ();
5897   struct inferior *inf;
5898   struct thread_info *tp;
5899   int any_process_wildcard;
5900   int may_global_wildcard_vcont;
5901   struct vcont_builder vcont_builder;
5902
5903   /* If connected in all-stop mode, we'd send the remote resume
5904      request directly from remote_resume.  Likewise if
5905      reverse-debugging, as there are no defined vCont actions for
5906      reverse execution.  */
5907   if (!target_is_non_stop_p () || execution_direction == EXEC_REVERSE)
5908     return;
5909
5910   /* Try to send wildcard actions ("vCont;c" or "vCont;c:pPID.-1")
5911      instead of resuming all threads of each process individually.
5912      However, if any thread of a process must remain halted, we can't
5913      send wildcard resumes and must send one action per thread.
5914
5915      Care must be taken to not resume threads/processes the server
5916      side already told us are stopped, but the core doesn't know about
5917      yet, because the events are still in the vStopped notification
5918      queue.  For example:
5919
5920        #1 => vCont s:p1.1;c
5921        #2 <= OK
5922        #3 <= %Stopped T05 p1.1
5923        #4 => vStopped
5924        #5 <= T05 p1.2
5925        #6 => vStopped
5926        #7 <= OK
5927        #8 (infrun handles the stop for p1.1 and continues stepping)
5928        #9 => vCont s:p1.1;c
5929
5930      The last vCont above would resume thread p1.2 by mistake, because
5931      the server has no idea that the event for p1.2 had not been
5932      handled yet.
5933
5934      The server side must similarly ignore resume actions for the
5935      thread that has a pending %Stopped notification (and any other
5936      threads with events pending), until GDB acks the notification
5937      with vStopped.  Otherwise, e.g., the following case is
5938      mishandled:
5939
5940        #1 => g  (or any other packet)
5941        #2 <= [registers]
5942        #3 <= %Stopped T05 p1.2
5943        #4 => vCont s:p1.1;c
5944        #5 <= OK
5945
5946      Above, the server must not resume thread p1.2.  GDB can't know
5947      that p1.2 stopped until it acks the %Stopped notification, and
5948      since from GDB's perspective all threads should be running, it
5949      sends a "c" action.
5950
5951      Finally, special care must also be given to handling fork/vfork
5952      events.  A (v)fork event actually tells us that two processes
5953      stopped -- the parent and the child.  Until we follow the fork,
5954      we must not resume the child.  Therefore, if we have a pending
5955      fork follow, we must not send a global wildcard resume action
5956      (vCont;c).  We can still send process-wide wildcards though.  */
5957
5958   /* Start by assuming a global wildcard (vCont;c) is possible.  */
5959   may_global_wildcard_vcont = 1;
5960
5961   /* And assume every process is individually wildcard-able too.  */
5962   ALL_NON_EXITED_INFERIORS (inf)
5963     {
5964       remote_inferior *priv = get_remote_inferior (inf);
5965
5966       priv->may_wildcard_vcont = true;
5967     }
5968
5969   /* Check for any pending events (not reported or processed yet) and
5970      disable process and global wildcard resumes appropriately.  */
5971   check_pending_events_prevent_wildcard_vcont (&may_global_wildcard_vcont);
5972
5973   ALL_NON_EXITED_THREADS (tp)
5974     {
5975       /* If a thread of a process is not meant to be resumed, then we
5976          can't wildcard that process.  */
5977       if (!tp->executing)
5978         {
5979           get_remote_inferior (tp->inf)->may_wildcard_vcont = false;
5980
5981           /* And if we can't wildcard a process, we can't wildcard
5982              everything either.  */
5983           may_global_wildcard_vcont = 0;
5984           continue;
5985         }
5986
5987       /* If a thread is the parent of an unfollowed fork, then we
5988          can't do a global wildcard, as that would resume the fork
5989          child.  */
5990       if (is_pending_fork_parent_thread (tp))
5991         may_global_wildcard_vcont = 0;
5992     }
5993
5994   /* Now let's build the vCont packet(s).  Actions must be appended
5995      from narrower to wider scopes (thread -> process -> global).  If
5996      we end up with too many actions for a single packet vcont_builder
5997      flushes the current vCont packet to the remote side and starts a
5998      new one.  */
5999   vcont_builder_restart (&vcont_builder);
6000
6001   /* Threads first.  */
6002   ALL_NON_EXITED_THREADS (tp)
6003     {
6004       struct private_thread_info *remote_thr = tp->priv;
6005
6006       if (!tp->executing || remote_thr->vcont_resumed)
6007         continue;
6008
6009       gdb_assert (!thread_is_in_step_over_chain (tp));
6010
6011       if (!remote_thr->last_resume_step
6012           && remote_thr->last_resume_sig == GDB_SIGNAL_0
6013           && get_remote_inferior (tp->inf)->may_wildcard_vcont)
6014         {
6015           /* We'll send a wildcard resume instead.  */
6016           remote_thr->vcont_resumed = 1;
6017           continue;
6018         }
6019
6020       vcont_builder_push_action (&vcont_builder, tp->ptid,
6021                                  remote_thr->last_resume_step,
6022                                  remote_thr->last_resume_sig);
6023       remote_thr->vcont_resumed = 1;
6024     }
6025
6026   /* Now check whether we can send any process-wide wildcard.  This is
6027      to avoid sending a global wildcard in the case nothing is
6028      supposed to be resumed.  */
6029   any_process_wildcard = 0;
6030
6031   ALL_NON_EXITED_INFERIORS (inf)
6032     {
6033       if (get_remote_inferior (inf)->may_wildcard_vcont)
6034         {
6035           any_process_wildcard = 1;
6036           break;
6037         }
6038     }
6039
6040   if (any_process_wildcard)
6041     {
6042       /* If all processes are wildcard-able, then send a single "c"
6043          action, otherwise, send an "all (-1) threads of process"
6044          continue action for each running process, if any.  */
6045       if (may_global_wildcard_vcont)
6046         {
6047           vcont_builder_push_action (&vcont_builder, minus_one_ptid,
6048                                      0, GDB_SIGNAL_0);
6049         }
6050       else
6051         {
6052           ALL_NON_EXITED_INFERIORS (inf)
6053             {
6054               if (get_remote_inferior (inf)->may_wildcard_vcont)
6055                 {
6056                   vcont_builder_push_action (&vcont_builder,
6057                                              pid_to_ptid (inf->pid),
6058                                              0, GDB_SIGNAL_0);
6059                 }
6060             }
6061         }
6062     }
6063
6064   vcont_builder_flush (&vcont_builder);
6065 }
6066
6067 \f
6068
6069 /* Non-stop version of target_stop.  Uses `vCont;t' to stop a remote
6070    thread, all threads of a remote process, or all threads of all
6071    processes.  */
6072
6073 static void
6074 remote_stop_ns (ptid_t ptid)
6075 {
6076   struct remote_state *rs = get_remote_state ();
6077   char *p = rs->buf;
6078   char *endp = rs->buf + get_remote_packet_size ();
6079
6080   if (packet_support (PACKET_vCont) == PACKET_SUPPORT_UNKNOWN)
6081     remote_vcont_probe (rs);
6082
6083   if (!rs->supports_vCont.t)
6084     error (_("Remote server does not support stopping threads"));
6085
6086   if (ptid_equal (ptid, minus_one_ptid)
6087       || (!remote_multi_process_p (rs) && ptid_is_pid (ptid)))
6088     p += xsnprintf (p, endp - p, "vCont;t");
6089   else
6090     {
6091       ptid_t nptid;
6092
6093       p += xsnprintf (p, endp - p, "vCont;t:");
6094
6095       if (ptid_is_pid (ptid))
6096           /* All (-1) threads of process.  */
6097         nptid = ptid_build (ptid_get_pid (ptid), -1, 0);
6098       else
6099         {
6100           /* Small optimization: if we already have a stop reply for
6101              this thread, no use in telling the stub we want this
6102              stopped.  */
6103           if (peek_stop_reply (ptid))
6104             return;
6105
6106           nptid = ptid;
6107         }
6108
6109       write_ptid (p, endp, nptid);
6110     }
6111
6112   /* In non-stop, we get an immediate OK reply.  The stop reply will
6113      come in asynchronously by notification.  */
6114   putpkt (rs->buf);
6115   getpkt (&rs->buf, &rs->buf_size, 0);
6116   if (strcmp (rs->buf, "OK") != 0)
6117     error (_("Stopping %s failed: %s"), target_pid_to_str (ptid), rs->buf);
6118 }
6119
6120 /* All-stop version of target_interrupt.  Sends a break or a ^C to
6121    interrupt the remote target.  It is undefined which thread of which
6122    process reports the interrupt.  */
6123
6124 static void
6125 remote_interrupt_as (void)
6126 {
6127   struct remote_state *rs = get_remote_state ();
6128
6129   rs->ctrlc_pending_p = 1;
6130
6131   /* If the inferior is stopped already, but the core didn't know
6132      about it yet, just ignore the request.  The cached wait status
6133      will be collected in remote_wait.  */
6134   if (rs->cached_wait_status)
6135     return;
6136
6137   /* Send interrupt_sequence to remote target.  */
6138   send_interrupt_sequence ();
6139 }
6140
6141 /* Non-stop version of target_interrupt.  Uses `vCtrlC' to interrupt
6142    the remote target.  It is undefined which thread of which process
6143    reports the interrupt.  Throws an error if the packet is not
6144    supported by the server.  */
6145
6146 static void
6147 remote_interrupt_ns (void)
6148 {
6149   struct remote_state *rs = get_remote_state ();
6150   char *p = rs->buf;
6151   char *endp = rs->buf + get_remote_packet_size ();
6152
6153   xsnprintf (p, endp - p, "vCtrlC");
6154
6155   /* In non-stop, we get an immediate OK reply.  The stop reply will
6156      come in asynchronously by notification.  */
6157   putpkt (rs->buf);
6158   getpkt (&rs->buf, &rs->buf_size, 0);
6159
6160   switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_vCtrlC]))
6161     {
6162     case PACKET_OK:
6163       break;
6164     case PACKET_UNKNOWN:
6165       error (_("No support for interrupting the remote target."));
6166     case PACKET_ERROR:
6167       error (_("Interrupting target failed: %s"), rs->buf);
6168     }
6169 }
6170
6171 /* Implement the to_stop function for the remote targets.  */
6172
6173 static void
6174 remote_stop (struct target_ops *self, ptid_t ptid)
6175 {
6176   if (remote_debug)
6177     fprintf_unfiltered (gdb_stdlog, "remote_stop called\n");
6178
6179   if (target_is_non_stop_p ())
6180     remote_stop_ns (ptid);
6181   else
6182     {
6183       /* We don't currently have a way to transparently pause the
6184          remote target in all-stop mode.  Interrupt it instead.  */
6185       remote_interrupt_as ();
6186     }
6187 }
6188
6189 /* Implement the to_interrupt function for the remote targets.  */
6190
6191 static void
6192 remote_interrupt (struct target_ops *self, ptid_t ptid)
6193 {
6194   struct remote_state *rs = get_remote_state ();
6195
6196   if (remote_debug)
6197     fprintf_unfiltered (gdb_stdlog, "remote_interrupt called\n");
6198
6199   if (target_is_non_stop_p ())
6200     remote_interrupt_ns ();
6201   else
6202     remote_interrupt_as ();
6203 }
6204
6205 /* Implement the to_pass_ctrlc function for the remote targets.  */
6206
6207 static void
6208 remote_pass_ctrlc (struct target_ops *self)
6209 {
6210   struct remote_state *rs = get_remote_state ();
6211
6212   if (remote_debug)
6213     fprintf_unfiltered (gdb_stdlog, "remote_pass_ctrlc called\n");
6214
6215   /* If we're starting up, we're not fully synced yet.  Quit
6216      immediately.  */
6217   if (rs->starting_up)
6218     quit ();
6219   /* If ^C has already been sent once, offer to disconnect.  */
6220   else if (rs->ctrlc_pending_p)
6221     interrupt_query ();
6222   else
6223     target_interrupt (inferior_ptid);
6224 }
6225
6226 /* Ask the user what to do when an interrupt is received.  */
6227
6228 static void
6229 interrupt_query (void)
6230 {
6231   struct remote_state *rs = get_remote_state ();
6232
6233   if (rs->waiting_for_stop_reply && rs->ctrlc_pending_p)
6234     {
6235       if (query (_("The target is not responding to interrupt requests.\n"
6236                    "Stop debugging it? ")))
6237         {
6238           remote_unpush_target ();
6239           throw_error (TARGET_CLOSE_ERROR, _("Disconnected from target."));
6240         }
6241     }
6242   else
6243     {
6244       if (query (_("Interrupted while waiting for the program.\n"
6245                    "Give up waiting? ")))
6246         quit ();
6247     }
6248 }
6249
6250 /* Enable/disable target terminal ownership.  Most targets can use
6251    terminal groups to control terminal ownership.  Remote targets are
6252    different in that explicit transfer of ownership to/from GDB/target
6253    is required.  */
6254
6255 static void
6256 remote_terminal_inferior (struct target_ops *self)
6257 {
6258   /* NOTE: At this point we could also register our selves as the
6259      recipient of all input.  Any characters typed could then be
6260      passed on down to the target.  */
6261 }
6262
6263 static void
6264 remote_terminal_ours (struct target_ops *self)
6265 {
6266 }
6267
6268 static void
6269 remote_console_output (char *msg)
6270 {
6271   char *p;
6272
6273   for (p = msg; p[0] && p[1]; p += 2)
6274     {
6275       char tb[2];
6276       char c = fromhex (p[0]) * 16 + fromhex (p[1]);
6277
6278       tb[0] = c;
6279       tb[1] = 0;
6280       fputs_unfiltered (tb, gdb_stdtarg);
6281     }
6282   gdb_flush (gdb_stdtarg);
6283 }
6284
6285 DEF_VEC_O(cached_reg_t);
6286
6287 typedef struct stop_reply
6288 {
6289   struct notif_event base;
6290
6291   /* The identifier of the thread about this event  */
6292   ptid_t ptid;
6293
6294   /* The remote state this event is associated with.  When the remote
6295      connection, represented by a remote_state object, is closed,
6296      all the associated stop_reply events should be released.  */
6297   struct remote_state *rs;
6298
6299   struct target_waitstatus ws;
6300
6301   /* The architecture associated with the expedited registers.  */
6302   gdbarch *arch;
6303
6304   /* Expedited registers.  This makes remote debugging a bit more
6305      efficient for those targets that provide critical registers as
6306      part of their normal status mechanism (as another roundtrip to
6307      fetch them is avoided).  */
6308   VEC(cached_reg_t) *regcache;
6309
6310   enum target_stop_reason stop_reason;
6311
6312   CORE_ADDR watch_data_address;
6313
6314   int core;
6315 } *stop_reply_p;
6316
6317 DECLARE_QUEUE_P (stop_reply_p);
6318 DEFINE_QUEUE_P (stop_reply_p);
6319 /* The list of already fetched and acknowledged stop events.  This
6320    queue is used for notification Stop, and other notifications
6321    don't need queue for their events, because the notification events
6322    of Stop can't be consumed immediately, so that events should be
6323    queued first, and be consumed by remote_wait_{ns,as} one per
6324    time.  Other notifications can consume their events immediately,
6325    so queue is not needed for them.  */
6326 static QUEUE (stop_reply_p) *stop_reply_queue;
6327
6328 static void
6329 stop_reply_xfree (struct stop_reply *r)
6330 {
6331   notif_event_xfree ((struct notif_event *) r);
6332 }
6333
6334 /* Return the length of the stop reply queue.  */
6335
6336 static int
6337 stop_reply_queue_length (void)
6338 {
6339   return QUEUE_length (stop_reply_p, stop_reply_queue);
6340 }
6341
6342 static void
6343 remote_notif_stop_parse (struct notif_client *self, char *buf,
6344                          struct notif_event *event)
6345 {
6346   remote_parse_stop_reply (buf, (struct stop_reply *) event);
6347 }
6348
6349 static void
6350 remote_notif_stop_ack (struct notif_client *self, char *buf,
6351                        struct notif_event *event)
6352 {
6353   struct stop_reply *stop_reply = (struct stop_reply *) event;
6354
6355   /* acknowledge */
6356   putpkt (self->ack_command);
6357
6358   if (stop_reply->ws.kind == TARGET_WAITKIND_IGNORE)
6359       /* We got an unknown stop reply.  */
6360       error (_("Unknown stop reply"));
6361
6362   push_stop_reply (stop_reply);
6363 }
6364
6365 static int
6366 remote_notif_stop_can_get_pending_events (struct notif_client *self)
6367 {
6368   /* We can't get pending events in remote_notif_process for
6369      notification stop, and we have to do this in remote_wait_ns
6370      instead.  If we fetch all queued events from stub, remote stub
6371      may exit and we have no chance to process them back in
6372      remote_wait_ns.  */
6373   mark_async_event_handler (remote_async_inferior_event_token);
6374   return 0;
6375 }
6376
6377 static void
6378 stop_reply_dtr (struct notif_event *event)
6379 {
6380   struct stop_reply *r = (struct stop_reply *) event;
6381   cached_reg_t *reg;
6382   int ix;
6383
6384   for (ix = 0;
6385        VEC_iterate (cached_reg_t, r->regcache, ix, reg);
6386        ix++)
6387     xfree (reg->data);
6388
6389   VEC_free (cached_reg_t, r->regcache);
6390 }
6391
6392 static struct notif_event *
6393 remote_notif_stop_alloc_reply (void)
6394 {
6395   /* We cast to a pointer to the "base class".  */
6396   struct notif_event *r = (struct notif_event *) XNEW (struct stop_reply);
6397
6398   r->dtr = stop_reply_dtr;
6399
6400   return r;
6401 }
6402
6403 /* A client of notification Stop.  */
6404
6405 struct notif_client notif_client_stop =
6406 {
6407   "Stop",
6408   "vStopped",
6409   remote_notif_stop_parse,
6410   remote_notif_stop_ack,
6411   remote_notif_stop_can_get_pending_events,
6412   remote_notif_stop_alloc_reply,
6413   REMOTE_NOTIF_STOP,
6414 };
6415
6416 /* A parameter to pass data in and out.  */
6417
6418 struct queue_iter_param
6419 {
6420   void *input;
6421   struct stop_reply *output;
6422 };
6423
6424 /* Determine if THREAD_PTID is a pending fork parent thread.  ARG contains
6425    the pid of the process that owns the threads we want to check, or
6426    -1 if we want to check all threads.  */
6427
6428 static int
6429 is_pending_fork_parent (struct target_waitstatus *ws, int event_pid,
6430                         ptid_t thread_ptid)
6431 {
6432   if (ws->kind == TARGET_WAITKIND_FORKED
6433       || ws->kind == TARGET_WAITKIND_VFORKED)
6434     {
6435       if (event_pid == -1 || event_pid == ptid_get_pid (thread_ptid))
6436         return 1;
6437     }
6438
6439   return 0;
6440 }
6441
6442 /* Return the thread's pending status used to determine whether the
6443    thread is a fork parent stopped at a fork event.  */
6444
6445 static struct target_waitstatus *
6446 thread_pending_fork_status (struct thread_info *thread)
6447 {
6448   if (thread->suspend.waitstatus_pending_p)
6449     return &thread->suspend.waitstatus;
6450   else
6451     return &thread->pending_follow;
6452 }
6453
6454 /* Determine if THREAD is a pending fork parent thread.  */
6455
6456 static int
6457 is_pending_fork_parent_thread (struct thread_info *thread)
6458 {
6459   struct target_waitstatus *ws = thread_pending_fork_status (thread);
6460   int pid = -1;
6461
6462   return is_pending_fork_parent (ws, pid, thread->ptid);
6463 }
6464
6465 /* Check whether EVENT is a fork event, and if it is, remove the
6466    fork child from the context list passed in DATA.  */
6467
6468 static int
6469 remove_child_of_pending_fork (QUEUE (stop_reply_p) *q,
6470                               QUEUE_ITER (stop_reply_p) *iter,
6471                               stop_reply_p event,
6472                               void *data)
6473 {
6474   struct queue_iter_param *param = (struct queue_iter_param *) data;
6475   struct threads_listing_context *context
6476     = (struct threads_listing_context *) param->input;
6477
6478   if (event->ws.kind == TARGET_WAITKIND_FORKED
6479       || event->ws.kind == TARGET_WAITKIND_VFORKED
6480       || event->ws.kind == TARGET_WAITKIND_THREAD_EXITED)
6481     context->remove_thread (event->ws.value.related_pid);
6482
6483   return 1;
6484 }
6485
6486 /* If CONTEXT contains any fork child threads that have not been
6487    reported yet, remove them from the CONTEXT list.  If such a
6488    thread exists it is because we are stopped at a fork catchpoint
6489    and have not yet called follow_fork, which will set up the
6490    host-side data structures for the new process.  */
6491
6492 static void
6493 remove_new_fork_children (struct threads_listing_context *context)
6494 {
6495   struct thread_info * thread;
6496   int pid = -1;
6497   struct notif_client *notif = &notif_client_stop;
6498   struct queue_iter_param param;
6499
6500   /* For any threads stopped at a fork event, remove the corresponding
6501      fork child threads from the CONTEXT list.  */
6502   ALL_NON_EXITED_THREADS (thread)
6503     {
6504       struct target_waitstatus *ws = thread_pending_fork_status (thread);
6505
6506       if (is_pending_fork_parent (ws, pid, thread->ptid))
6507         context->remove_thread (ws->value.related_pid);
6508     }
6509
6510   /* Check for any pending fork events (not reported or processed yet)
6511      in process PID and remove those fork child threads from the
6512      CONTEXT list as well.  */
6513   remote_notif_get_pending_events (notif);
6514   param.input = context;
6515   param.output = NULL;
6516   QUEUE_iterate (stop_reply_p, stop_reply_queue,
6517                  remove_child_of_pending_fork, &param);
6518 }
6519
6520 /* Check whether EVENT would prevent a global or process wildcard
6521    vCont action.  */
6522
6523 static int
6524 check_pending_event_prevents_wildcard_vcont_callback
6525   (QUEUE (stop_reply_p) *q,
6526    QUEUE_ITER (stop_reply_p) *iter,
6527    stop_reply_p event,
6528    void *data)
6529 {
6530   struct inferior *inf;
6531   int *may_global_wildcard_vcont = (int *) data;
6532
6533   if (event->ws.kind == TARGET_WAITKIND_NO_RESUMED
6534       || event->ws.kind == TARGET_WAITKIND_NO_HISTORY)
6535     return 1;
6536
6537   if (event->ws.kind == TARGET_WAITKIND_FORKED
6538       || event->ws.kind == TARGET_WAITKIND_VFORKED)
6539     *may_global_wildcard_vcont = 0;
6540
6541   inf = find_inferior_ptid (event->ptid);
6542
6543   /* This may be the first time we heard about this process.
6544      Regardless, we must not do a global wildcard resume, otherwise
6545      we'd resume this process too.  */
6546   *may_global_wildcard_vcont = 0;
6547   if (inf != NULL)
6548     get_remote_inferior (inf)->may_wildcard_vcont = false;
6549
6550   return 1;
6551 }
6552
6553 /* Check whether any event pending in the vStopped queue would prevent
6554    a global or process wildcard vCont action.  Clear
6555    *may_global_wildcard if we can't do a global wildcard (vCont;c),
6556    and clear the event inferior's may_wildcard_vcont flag if we can't
6557    do a process-wide wildcard resume (vCont;c:pPID.-1).  */
6558
6559 static void
6560 check_pending_events_prevent_wildcard_vcont (int *may_global_wildcard)
6561 {
6562   struct notif_client *notif = &notif_client_stop;
6563
6564   remote_notif_get_pending_events (notif);
6565   QUEUE_iterate (stop_reply_p, stop_reply_queue,
6566                  check_pending_event_prevents_wildcard_vcont_callback,
6567                  may_global_wildcard);
6568 }
6569
6570 /* Remove stop replies in the queue if its pid is equal to the given
6571    inferior's pid.  */
6572
6573 static int
6574 remove_stop_reply_for_inferior (QUEUE (stop_reply_p) *q,
6575                                 QUEUE_ITER (stop_reply_p) *iter,
6576                                 stop_reply_p event,
6577                                 void *data)
6578 {
6579   struct queue_iter_param *param = (struct queue_iter_param *) data;
6580   struct inferior *inf = (struct inferior *) param->input;
6581
6582   if (ptid_get_pid (event->ptid) == inf->pid)
6583     {
6584       stop_reply_xfree (event);
6585       QUEUE_remove_elem (stop_reply_p, q, iter);
6586     }
6587
6588   return 1;
6589 }
6590
6591 /* Discard all pending stop replies of inferior INF.  */
6592
6593 static void
6594 discard_pending_stop_replies (struct inferior *inf)
6595 {
6596   struct queue_iter_param param;
6597   struct stop_reply *reply;
6598   struct remote_state *rs = get_remote_state ();
6599   struct remote_notif_state *rns = rs->notif_state;
6600
6601   /* This function can be notified when an inferior exists.  When the
6602      target is not remote, the notification state is NULL.  */
6603   if (rs->remote_desc == NULL)
6604     return;
6605
6606   reply = (struct stop_reply *) rns->pending_event[notif_client_stop.id];
6607
6608   /* Discard the in-flight notification.  */
6609   if (reply != NULL && ptid_get_pid (reply->ptid) == inf->pid)
6610     {
6611       stop_reply_xfree (reply);
6612       rns->pending_event[notif_client_stop.id] = NULL;
6613     }
6614
6615   param.input = inf;
6616   param.output = NULL;
6617   /* Discard the stop replies we have already pulled with
6618      vStopped.  */
6619   QUEUE_iterate (stop_reply_p, stop_reply_queue,
6620                  remove_stop_reply_for_inferior, &param);
6621 }
6622
6623 /* If its remote state is equal to the given remote state,
6624    remove EVENT from the stop reply queue.  */
6625
6626 static int
6627 remove_stop_reply_of_remote_state (QUEUE (stop_reply_p) *q,
6628                                    QUEUE_ITER (stop_reply_p) *iter,
6629                                    stop_reply_p event,
6630                                    void *data)
6631 {
6632   struct queue_iter_param *param = (struct queue_iter_param *) data;
6633   struct remote_state *rs = (struct remote_state *) param->input;
6634
6635   if (event->rs == rs)
6636     {
6637       stop_reply_xfree (event);
6638       QUEUE_remove_elem (stop_reply_p, q, iter);
6639     }
6640
6641   return 1;
6642 }
6643
6644 /* Discard the stop replies for RS in stop_reply_queue.  */
6645
6646 static void
6647 discard_pending_stop_replies_in_queue (struct remote_state *rs)
6648 {
6649   struct queue_iter_param param;
6650
6651   param.input = rs;
6652   param.output = NULL;
6653   /* Discard the stop replies we have already pulled with
6654      vStopped.  */
6655   QUEUE_iterate (stop_reply_p, stop_reply_queue,
6656                  remove_stop_reply_of_remote_state, &param);
6657 }
6658
6659 /* A parameter to pass data in and out.  */
6660
6661 static int
6662 remote_notif_remove_once_on_match (QUEUE (stop_reply_p) *q,
6663                                    QUEUE_ITER (stop_reply_p) *iter,
6664                                    stop_reply_p event,
6665                                    void *data)
6666 {
6667   struct queue_iter_param *param = (struct queue_iter_param *) data;
6668   ptid_t *ptid = (ptid_t *) param->input;
6669
6670   if (ptid_match (event->ptid, *ptid))
6671     {
6672       param->output = event;
6673       QUEUE_remove_elem (stop_reply_p, q, iter);
6674       return 0;
6675     }
6676
6677   return 1;
6678 }
6679
6680 /* Remove the first reply in 'stop_reply_queue' which matches
6681    PTID.  */
6682
6683 static struct stop_reply *
6684 remote_notif_remove_queued_reply (ptid_t ptid)
6685 {
6686   struct queue_iter_param param;
6687
6688   param.input = &ptid;
6689   param.output = NULL;
6690
6691   QUEUE_iterate (stop_reply_p, stop_reply_queue,
6692                  remote_notif_remove_once_on_match, &param);
6693   if (notif_debug)
6694     fprintf_unfiltered (gdb_stdlog,
6695                         "notif: discard queued event: 'Stop' in %s\n",
6696                         target_pid_to_str (ptid));
6697
6698   return param.output;
6699 }
6700
6701 /* Look for a queued stop reply belonging to PTID.  If one is found,
6702    remove it from the queue, and return it.  Returns NULL if none is
6703    found.  If there are still queued events left to process, tell the
6704    event loop to get back to target_wait soon.  */
6705
6706 static struct stop_reply *
6707 queued_stop_reply (ptid_t ptid)
6708 {
6709   struct stop_reply *r = remote_notif_remove_queued_reply (ptid);
6710
6711   if (!QUEUE_is_empty (stop_reply_p, stop_reply_queue))
6712     /* There's still at least an event left.  */
6713     mark_async_event_handler (remote_async_inferior_event_token);
6714
6715   return r;
6716 }
6717
6718 /* Push a fully parsed stop reply in the stop reply queue.  Since we
6719    know that we now have at least one queued event left to pass to the
6720    core side, tell the event loop to get back to target_wait soon.  */
6721
6722 static void
6723 push_stop_reply (struct stop_reply *new_event)
6724 {
6725   QUEUE_enque (stop_reply_p, stop_reply_queue, new_event);
6726
6727   if (notif_debug)
6728     fprintf_unfiltered (gdb_stdlog,
6729                         "notif: push 'Stop' %s to queue %d\n",
6730                         target_pid_to_str (new_event->ptid),
6731                         QUEUE_length (stop_reply_p,
6732                                       stop_reply_queue));
6733
6734   mark_async_event_handler (remote_async_inferior_event_token);
6735 }
6736
6737 static int
6738 stop_reply_match_ptid_and_ws (QUEUE (stop_reply_p) *q,
6739                               QUEUE_ITER (stop_reply_p) *iter,
6740                               struct stop_reply *event,
6741                               void *data)
6742 {
6743   ptid_t *ptid = (ptid_t *) data;
6744
6745   return !(ptid_equal (*ptid, event->ptid)
6746            && event->ws.kind == TARGET_WAITKIND_STOPPED);
6747 }
6748
6749 /* Returns true if we have a stop reply for PTID.  */
6750
6751 static int
6752 peek_stop_reply (ptid_t ptid)
6753 {
6754   return !QUEUE_iterate (stop_reply_p, stop_reply_queue,
6755                          stop_reply_match_ptid_and_ws, &ptid);
6756 }
6757
6758 /* Helper for remote_parse_stop_reply.  Return nonzero if the substring
6759    starting with P and ending with PEND matches PREFIX.  */
6760
6761 static int
6762 strprefix (const char *p, const char *pend, const char *prefix)
6763 {
6764   for ( ; p < pend; p++, prefix++)
6765     if (*p != *prefix)
6766       return 0;
6767   return *prefix == '\0';
6768 }
6769
6770 /* Parse the stop reply in BUF.  Either the function succeeds, and the
6771    result is stored in EVENT, or throws an error.  */
6772
6773 static void
6774 remote_parse_stop_reply (char *buf, struct stop_reply *event)
6775 {
6776   remote_arch_state *rsa = NULL;
6777   ULONGEST addr;
6778   const char *p;
6779   int skipregs = 0;
6780
6781   event->ptid = null_ptid;
6782   event->rs = get_remote_state ();
6783   event->ws.kind = TARGET_WAITKIND_IGNORE;
6784   event->ws.value.integer = 0;
6785   event->stop_reason = TARGET_STOPPED_BY_NO_REASON;
6786   event->regcache = NULL;
6787   event->core = -1;
6788
6789   switch (buf[0])
6790     {
6791     case 'T':           /* Status with PC, SP, FP, ...  */
6792       /* Expedited reply, containing Signal, {regno, reg} repeat.  */
6793       /*  format is:  'Tssn...:r...;n...:r...;n...:r...;#cc', where
6794             ss = signal number
6795             n... = register number
6796             r... = register contents
6797       */
6798
6799       p = &buf[3];      /* after Txx */
6800       while (*p)
6801         {
6802           const char *p1;
6803           int fieldsize;
6804
6805           p1 = strchr (p, ':');
6806           if (p1 == NULL)
6807             error (_("Malformed packet(a) (missing colon): %s\n\
6808 Packet: '%s'\n"),
6809                    p, buf);
6810           if (p == p1)
6811             error (_("Malformed packet(a) (missing register number): %s\n\
6812 Packet: '%s'\n"),
6813                    p, buf);
6814
6815           /* Some "registers" are actually extended stop information.
6816              Note if you're adding a new entry here: GDB 7.9 and
6817              earlier assume that all register "numbers" that start
6818              with an hex digit are real register numbers.  Make sure
6819              the server only sends such a packet if it knows the
6820              client understands it.  */
6821
6822           if (strprefix (p, p1, "thread"))
6823             event->ptid = read_ptid (++p1, &p);
6824           else if (strprefix (p, p1, "syscall_entry"))
6825             {
6826               ULONGEST sysno;
6827
6828               event->ws.kind = TARGET_WAITKIND_SYSCALL_ENTRY;
6829               p = unpack_varlen_hex (++p1, &sysno);
6830               event->ws.value.syscall_number = (int) sysno;
6831             }
6832           else if (strprefix (p, p1, "syscall_return"))
6833             {
6834               ULONGEST sysno;
6835
6836               event->ws.kind = TARGET_WAITKIND_SYSCALL_RETURN;
6837               p = unpack_varlen_hex (++p1, &sysno);
6838               event->ws.value.syscall_number = (int) sysno;
6839             }
6840           else if (strprefix (p, p1, "watch")
6841                    || strprefix (p, p1, "rwatch")
6842                    || strprefix (p, p1, "awatch"))
6843             {
6844               event->stop_reason = TARGET_STOPPED_BY_WATCHPOINT;
6845               p = unpack_varlen_hex (++p1, &addr);
6846               event->watch_data_address = (CORE_ADDR) addr;
6847             }
6848           else if (strprefix (p, p1, "swbreak"))
6849             {
6850               event->stop_reason = TARGET_STOPPED_BY_SW_BREAKPOINT;
6851
6852               /* Make sure the stub doesn't forget to indicate support
6853                  with qSupported.  */
6854               if (packet_support (PACKET_swbreak_feature) != PACKET_ENABLE)
6855                 error (_("Unexpected swbreak stop reason"));
6856
6857               /* The value part is documented as "must be empty",
6858                  though we ignore it, in case we ever decide to make
6859                  use of it in a backward compatible way.  */
6860               p = strchrnul (p1 + 1, ';');
6861             }
6862           else if (strprefix (p, p1, "hwbreak"))
6863             {
6864               event->stop_reason = TARGET_STOPPED_BY_HW_BREAKPOINT;
6865
6866               /* Make sure the stub doesn't forget to indicate support
6867                  with qSupported.  */
6868               if (packet_support (PACKET_hwbreak_feature) != PACKET_ENABLE)
6869                 error (_("Unexpected hwbreak stop reason"));
6870
6871               /* See above.  */
6872               p = strchrnul (p1 + 1, ';');
6873             }
6874           else if (strprefix (p, p1, "library"))
6875             {
6876               event->ws.kind = TARGET_WAITKIND_LOADED;
6877               p = strchrnul (p1 + 1, ';');
6878             }
6879           else if (strprefix (p, p1, "replaylog"))
6880             {
6881               event->ws.kind = TARGET_WAITKIND_NO_HISTORY;
6882               /* p1 will indicate "begin" or "end", but it makes
6883                  no difference for now, so ignore it.  */
6884               p = strchrnul (p1 + 1, ';');
6885             }
6886           else if (strprefix (p, p1, "core"))
6887             {
6888               ULONGEST c;
6889
6890               p = unpack_varlen_hex (++p1, &c);
6891               event->core = c;
6892             }
6893           else if (strprefix (p, p1, "fork"))
6894             {
6895               event->ws.value.related_pid = read_ptid (++p1, &p);
6896               event->ws.kind = TARGET_WAITKIND_FORKED;
6897             }
6898           else if (strprefix (p, p1, "vfork"))
6899             {
6900               event->ws.value.related_pid = read_ptid (++p1, &p);
6901               event->ws.kind = TARGET_WAITKIND_VFORKED;
6902             }
6903           else if (strprefix (p, p1, "vforkdone"))
6904             {
6905               event->ws.kind = TARGET_WAITKIND_VFORK_DONE;
6906               p = strchrnul (p1 + 1, ';');
6907             }
6908           else if (strprefix (p, p1, "exec"))
6909             {
6910               ULONGEST ignored;
6911               char pathname[PATH_MAX];
6912               int pathlen;
6913
6914               /* Determine the length of the execd pathname.  */
6915               p = unpack_varlen_hex (++p1, &ignored);
6916               pathlen = (p - p1) / 2;
6917
6918               /* Save the pathname for event reporting and for
6919                  the next run command.  */
6920               hex2bin (p1, (gdb_byte *) pathname, pathlen);
6921               pathname[pathlen] = '\0';
6922
6923               /* This is freed during event handling.  */
6924               event->ws.value.execd_pathname = xstrdup (pathname);
6925               event->ws.kind = TARGET_WAITKIND_EXECD;
6926
6927               /* Skip the registers included in this packet, since
6928                  they may be for an architecture different from the
6929                  one used by the original program.  */
6930               skipregs = 1;
6931             }
6932           else if (strprefix (p, p1, "create"))
6933             {
6934               event->ws.kind = TARGET_WAITKIND_THREAD_CREATED;
6935               p = strchrnul (p1 + 1, ';');
6936             }
6937           else
6938             {
6939               ULONGEST pnum;
6940               const char *p_temp;
6941
6942               if (skipregs)
6943                 {
6944                   p = strchrnul (p1 + 1, ';');
6945                   p++;
6946                   continue;
6947                 }
6948
6949               /* Maybe a real ``P'' register number.  */
6950               p_temp = unpack_varlen_hex (p, &pnum);
6951               /* If the first invalid character is the colon, we got a
6952                  register number.  Otherwise, it's an unknown stop
6953                  reason.  */
6954               if (p_temp == p1)
6955                 {
6956                   /* If we haven't parsed the event's thread yet, find
6957                      it now, in order to find the architecture of the
6958                      reported expedited registers.  */
6959                   if (event->ptid == null_ptid)
6960                     {
6961                       const char *thr = strstr (p1 + 1, ";thread:");
6962                       if (thr != NULL)
6963                         event->ptid = read_ptid (thr + strlen (";thread:"),
6964                                                  NULL);
6965                       else
6966                         event->ptid = magic_null_ptid;
6967                     }
6968
6969                   if (rsa == NULL)
6970                     {
6971                       inferior *inf = (event->ptid == null_ptid
6972                                        ? NULL
6973                                        : find_inferior_ptid (event->ptid));
6974                       /* If this is the first time we learn anything
6975                          about this process, skip the registers
6976                          included in this packet, since we don't yet
6977                          know which architecture to use to parse them.
6978                          We'll determine the architecture later when
6979                          we process the stop reply and retrieve the
6980                          target description, via
6981                          remote_notice_new_inferior ->
6982                          post_create_inferior.  */
6983                       if (inf == NULL)
6984                         {
6985                           p = strchrnul (p1 + 1, ';');
6986                           p++;
6987                           continue;
6988                         }
6989
6990                       event->arch = inf->gdbarch;
6991                       rsa = get_remote_arch_state (event->arch);
6992                     }
6993
6994                   packet_reg *reg
6995                     = packet_reg_from_pnum (event->arch, rsa, pnum);
6996                   cached_reg_t cached_reg;
6997
6998                   if (reg == NULL)
6999                     error (_("Remote sent bad register number %s: %s\n\
7000 Packet: '%s'\n"),
7001                            hex_string (pnum), p, buf);
7002
7003                   cached_reg.num = reg->regnum;
7004                   cached_reg.data = (gdb_byte *)
7005                     xmalloc (register_size (event->arch, reg->regnum));
7006
7007                   p = p1 + 1;
7008                   fieldsize = hex2bin (p, cached_reg.data,
7009                                        register_size (event->arch, reg->regnum));
7010                   p += 2 * fieldsize;
7011                   if (fieldsize < register_size (event->arch, reg->regnum))
7012                     warning (_("Remote reply is too short: %s"), buf);
7013
7014                   VEC_safe_push (cached_reg_t, event->regcache, &cached_reg);
7015                 }
7016               else
7017                 {
7018                   /* Not a number.  Silently skip unknown optional
7019                      info.  */
7020                   p = strchrnul (p1 + 1, ';');
7021                 }
7022             }
7023
7024           if (*p != ';')
7025             error (_("Remote register badly formatted: %s\nhere: %s"),
7026                    buf, p);
7027           ++p;
7028         }
7029
7030       if (event->ws.kind != TARGET_WAITKIND_IGNORE)
7031         break;
7032
7033       /* fall through */
7034     case 'S':           /* Old style status, just signal only.  */
7035       {
7036         int sig;
7037
7038         event->ws.kind = TARGET_WAITKIND_STOPPED;
7039         sig = (fromhex (buf[1]) << 4) + fromhex (buf[2]);
7040         if (GDB_SIGNAL_FIRST <= sig && sig < GDB_SIGNAL_LAST)
7041           event->ws.value.sig = (enum gdb_signal) sig;
7042         else
7043           event->ws.value.sig = GDB_SIGNAL_UNKNOWN;
7044       }
7045       break;
7046     case 'w':           /* Thread exited.  */
7047       {
7048         const char *p;
7049         ULONGEST value;
7050
7051         event->ws.kind = TARGET_WAITKIND_THREAD_EXITED;
7052         p = unpack_varlen_hex (&buf[1], &value);
7053         event->ws.value.integer = value;
7054         if (*p != ';')
7055           error (_("stop reply packet badly formatted: %s"), buf);
7056         event->ptid = read_ptid (++p, NULL);
7057         break;
7058       }
7059     case 'W':           /* Target exited.  */
7060     case 'X':
7061       {
7062         const char *p;
7063         int pid;
7064         ULONGEST value;
7065
7066         /* GDB used to accept only 2 hex chars here.  Stubs should
7067            only send more if they detect GDB supports multi-process
7068            support.  */
7069         p = unpack_varlen_hex (&buf[1], &value);
7070
7071         if (buf[0] == 'W')
7072           {
7073             /* The remote process exited.  */
7074             event->ws.kind = TARGET_WAITKIND_EXITED;
7075             event->ws.value.integer = value;
7076           }
7077         else
7078           {
7079             /* The remote process exited with a signal.  */
7080             event->ws.kind = TARGET_WAITKIND_SIGNALLED;
7081             if (GDB_SIGNAL_FIRST <= value && value < GDB_SIGNAL_LAST)
7082               event->ws.value.sig = (enum gdb_signal) value;
7083             else
7084               event->ws.value.sig = GDB_SIGNAL_UNKNOWN;
7085           }
7086
7087         /* If no process is specified, assume inferior_ptid.  */
7088         pid = ptid_get_pid (inferior_ptid);
7089         if (*p == '\0')
7090           ;
7091         else if (*p == ';')
7092           {
7093             p++;
7094
7095             if (*p == '\0')
7096               ;
7097             else if (startswith (p, "process:"))
7098               {
7099                 ULONGEST upid;
7100
7101                 p += sizeof ("process:") - 1;
7102                 unpack_varlen_hex (p, &upid);
7103                 pid = upid;
7104               }
7105             else
7106               error (_("unknown stop reply packet: %s"), buf);
7107           }
7108         else
7109           error (_("unknown stop reply packet: %s"), buf);
7110         event->ptid = pid_to_ptid (pid);
7111       }
7112       break;
7113     case 'N':
7114       event->ws.kind = TARGET_WAITKIND_NO_RESUMED;
7115       event->ptid = minus_one_ptid;
7116       break;
7117     }
7118
7119   if (target_is_non_stop_p () && ptid_equal (event->ptid, null_ptid))
7120     error (_("No process or thread specified in stop reply: %s"), buf);
7121 }
7122
7123 /* When the stub wants to tell GDB about a new notification reply, it
7124    sends a notification (%Stop, for example).  Those can come it at
7125    any time, hence, we have to make sure that any pending
7126    putpkt/getpkt sequence we're making is finished, before querying
7127    the stub for more events with the corresponding ack command
7128    (vStopped, for example).  E.g., if we started a vStopped sequence
7129    immediately upon receiving the notification, something like this
7130    could happen:
7131
7132     1.1) --> Hg 1
7133     1.2) <-- OK
7134     1.3) --> g
7135     1.4) <-- %Stop
7136     1.5) --> vStopped
7137     1.6) <-- (registers reply to step #1.3)
7138
7139    Obviously, the reply in step #1.6 would be unexpected to a vStopped
7140    query.
7141
7142    To solve this, whenever we parse a %Stop notification successfully,
7143    we mark the REMOTE_ASYNC_GET_PENDING_EVENTS_TOKEN, and carry on
7144    doing whatever we were doing:
7145
7146     2.1) --> Hg 1
7147     2.2) <-- OK
7148     2.3) --> g
7149     2.4) <-- %Stop
7150       <GDB marks the REMOTE_ASYNC_GET_PENDING_EVENTS_TOKEN>
7151     2.5) <-- (registers reply to step #2.3)
7152
7153    Eventualy after step #2.5, we return to the event loop, which
7154    notices there's an event on the
7155    REMOTE_ASYNC_GET_PENDING_EVENTS_TOKEN event and calls the
7156    associated callback --- the function below.  At this point, we're
7157    always safe to start a vStopped sequence. :
7158
7159     2.6) --> vStopped
7160     2.7) <-- T05 thread:2
7161     2.8) --> vStopped
7162     2.9) --> OK
7163 */
7164
7165 void
7166 remote_notif_get_pending_events (struct notif_client *nc)
7167 {
7168   struct remote_state *rs = get_remote_state ();
7169
7170   if (rs->notif_state->pending_event[nc->id] != NULL)
7171     {
7172       if (notif_debug)
7173         fprintf_unfiltered (gdb_stdlog,
7174                             "notif: process: '%s' ack pending event\n",
7175                             nc->name);
7176
7177       /* acknowledge */
7178       nc->ack (nc, rs->buf, rs->notif_state->pending_event[nc->id]);
7179       rs->notif_state->pending_event[nc->id] = NULL;
7180
7181       while (1)
7182         {
7183           getpkt (&rs->buf, &rs->buf_size, 0);
7184           if (strcmp (rs->buf, "OK") == 0)
7185             break;
7186           else
7187             remote_notif_ack (nc, rs->buf);
7188         }
7189     }
7190   else
7191     {
7192       if (notif_debug)
7193         fprintf_unfiltered (gdb_stdlog,
7194                             "notif: process: '%s' no pending reply\n",
7195                             nc->name);
7196     }
7197 }
7198
7199 /* Called when it is decided that STOP_REPLY holds the info of the
7200    event that is to be returned to the core.  This function always
7201    destroys STOP_REPLY.  */
7202
7203 static ptid_t
7204 process_stop_reply (struct stop_reply *stop_reply,
7205                     struct target_waitstatus *status)
7206 {
7207   ptid_t ptid;
7208
7209   *status = stop_reply->ws;
7210   ptid = stop_reply->ptid;
7211
7212   /* If no thread/process was reported by the stub, assume the current
7213      inferior.  */
7214   if (ptid_equal (ptid, null_ptid))
7215     ptid = inferior_ptid;
7216
7217   if (status->kind != TARGET_WAITKIND_EXITED
7218       && status->kind != TARGET_WAITKIND_SIGNALLED
7219       && status->kind != TARGET_WAITKIND_NO_RESUMED)
7220     {
7221       struct private_thread_info *remote_thr;
7222
7223       /* Expedited registers.  */
7224       if (stop_reply->regcache)
7225         {
7226           struct regcache *regcache
7227             = get_thread_arch_regcache (ptid, stop_reply->arch);
7228           cached_reg_t *reg;
7229           int ix;
7230
7231           for (ix = 0;
7232                VEC_iterate (cached_reg_t, stop_reply->regcache, ix, reg);
7233                ix++)
7234           {
7235             regcache_raw_supply (regcache, reg->num, reg->data);
7236             xfree (reg->data);
7237           }
7238
7239           VEC_free (cached_reg_t, stop_reply->regcache);
7240         }
7241
7242       remote_notice_new_inferior (ptid, 0);
7243       remote_thr = get_private_info_ptid (ptid);
7244       remote_thr->core = stop_reply->core;
7245       remote_thr->stop_reason = stop_reply->stop_reason;
7246       remote_thr->watch_data_address = stop_reply->watch_data_address;
7247       remote_thr->vcont_resumed = 0;
7248     }
7249
7250   stop_reply_xfree (stop_reply);
7251   return ptid;
7252 }
7253
7254 /* The non-stop mode version of target_wait.  */
7255
7256 static ptid_t
7257 remote_wait_ns (ptid_t ptid, struct target_waitstatus *status, int options)
7258 {
7259   struct remote_state *rs = get_remote_state ();
7260   struct stop_reply *stop_reply;
7261   int ret;
7262   int is_notif = 0;
7263
7264   /* If in non-stop mode, get out of getpkt even if a
7265      notification is received.  */
7266
7267   ret = getpkt_or_notif_sane (&rs->buf, &rs->buf_size,
7268                               0 /* forever */, &is_notif);
7269   while (1)
7270     {
7271       if (ret != -1 && !is_notif)
7272         switch (rs->buf[0])
7273           {
7274           case 'E':             /* Error of some sort.  */
7275             /* We're out of sync with the target now.  Did it continue
7276                or not?  We can't tell which thread it was in non-stop,
7277                so just ignore this.  */
7278             warning (_("Remote failure reply: %s"), rs->buf);
7279             break;
7280           case 'O':             /* Console output.  */
7281             remote_console_output (rs->buf + 1);
7282             break;
7283           default:
7284             warning (_("Invalid remote reply: %s"), rs->buf);
7285             break;
7286           }
7287
7288       /* Acknowledge a pending stop reply that may have arrived in the
7289          mean time.  */
7290       if (rs->notif_state->pending_event[notif_client_stop.id] != NULL)
7291         remote_notif_get_pending_events (&notif_client_stop);
7292
7293       /* If indeed we noticed a stop reply, we're done.  */
7294       stop_reply = queued_stop_reply (ptid);
7295       if (stop_reply != NULL)
7296         return process_stop_reply (stop_reply, status);
7297
7298       /* Still no event.  If we're just polling for an event, then
7299          return to the event loop.  */
7300       if (options & TARGET_WNOHANG)
7301         {
7302           status->kind = TARGET_WAITKIND_IGNORE;
7303           return minus_one_ptid;
7304         }
7305
7306       /* Otherwise do a blocking wait.  */
7307       ret = getpkt_or_notif_sane (&rs->buf, &rs->buf_size,
7308                                   1 /* forever */, &is_notif);
7309     }
7310 }
7311
7312 /* Wait until the remote machine stops, then return, storing status in
7313    STATUS just as `wait' would.  */
7314
7315 static ptid_t
7316 remote_wait_as (ptid_t ptid, struct target_waitstatus *status, int options)
7317 {
7318   struct remote_state *rs = get_remote_state ();
7319   ptid_t event_ptid = null_ptid;
7320   char *buf;
7321   struct stop_reply *stop_reply;
7322
7323  again:
7324
7325   status->kind = TARGET_WAITKIND_IGNORE;
7326   status->value.integer = 0;
7327
7328   stop_reply = queued_stop_reply (ptid);
7329   if (stop_reply != NULL)
7330     return process_stop_reply (stop_reply, status);
7331
7332   if (rs->cached_wait_status)
7333     /* Use the cached wait status, but only once.  */
7334     rs->cached_wait_status = 0;
7335   else
7336     {
7337       int ret;
7338       int is_notif;
7339       int forever = ((options & TARGET_WNOHANG) == 0
7340                      && wait_forever_enabled_p);
7341
7342       if (!rs->waiting_for_stop_reply)
7343         {
7344           status->kind = TARGET_WAITKIND_NO_RESUMED;
7345           return minus_one_ptid;
7346         }
7347
7348       /* FIXME: cagney/1999-09-27: If we're in async mode we should
7349          _never_ wait for ever -> test on target_is_async_p().
7350          However, before we do that we need to ensure that the caller
7351          knows how to take the target into/out of async mode.  */
7352       ret = getpkt_or_notif_sane (&rs->buf, &rs->buf_size,
7353                                   forever, &is_notif);
7354
7355       /* GDB gets a notification.  Return to core as this event is
7356          not interesting.  */
7357       if (ret != -1 && is_notif)
7358         return minus_one_ptid;
7359
7360       if (ret == -1 && (options & TARGET_WNOHANG) != 0)
7361         return minus_one_ptid;
7362     }
7363
7364   buf = rs->buf;
7365
7366   /* Assume that the target has acknowledged Ctrl-C unless we receive
7367      an 'F' or 'O' packet.  */
7368   if (buf[0] != 'F' && buf[0] != 'O')
7369     rs->ctrlc_pending_p = 0;
7370
7371   switch (buf[0])
7372     {
7373     case 'E':           /* Error of some sort.  */
7374       /* We're out of sync with the target now.  Did it continue or
7375          not?  Not is more likely, so report a stop.  */
7376       rs->waiting_for_stop_reply = 0;
7377
7378       warning (_("Remote failure reply: %s"), buf);
7379       status->kind = TARGET_WAITKIND_STOPPED;
7380       status->value.sig = GDB_SIGNAL_0;
7381       break;
7382     case 'F':           /* File-I/O request.  */
7383       /* GDB may access the inferior memory while handling the File-I/O
7384          request, but we don't want GDB accessing memory while waiting
7385          for a stop reply.  See the comments in putpkt_binary.  Set
7386          waiting_for_stop_reply to 0 temporarily.  */
7387       rs->waiting_for_stop_reply = 0;
7388       remote_fileio_request (buf, rs->ctrlc_pending_p);
7389       rs->ctrlc_pending_p = 0;
7390       /* GDB handled the File-I/O request, and the target is running
7391          again.  Keep waiting for events.  */
7392       rs->waiting_for_stop_reply = 1;
7393       break;
7394     case 'N': case 'T': case 'S': case 'X': case 'W':
7395       {
7396         struct stop_reply *stop_reply;
7397
7398         /* There is a stop reply to handle.  */
7399         rs->waiting_for_stop_reply = 0;
7400
7401         stop_reply
7402           = (struct stop_reply *) remote_notif_parse (&notif_client_stop,
7403                                                       rs->buf);
7404
7405         event_ptid = process_stop_reply (stop_reply, status);
7406         break;
7407       }
7408     case 'O':           /* Console output.  */
7409       remote_console_output (buf + 1);
7410       break;
7411     case '\0':
7412       if (rs->last_sent_signal != GDB_SIGNAL_0)
7413         {
7414           /* Zero length reply means that we tried 'S' or 'C' and the
7415              remote system doesn't support it.  */
7416           target_terminal::ours_for_output ();
7417           printf_filtered
7418             ("Can't send signals to this remote system.  %s not sent.\n",
7419              gdb_signal_to_name (rs->last_sent_signal));
7420           rs->last_sent_signal = GDB_SIGNAL_0;
7421           target_terminal::inferior ();
7422
7423           strcpy (buf, rs->last_sent_step ? "s" : "c");
7424           putpkt (buf);
7425           break;
7426         }
7427       /* else fallthrough */
7428     default:
7429       warning (_("Invalid remote reply: %s"), buf);
7430       break;
7431     }
7432
7433   if (status->kind == TARGET_WAITKIND_NO_RESUMED)
7434     return minus_one_ptid;
7435   else if (status->kind == TARGET_WAITKIND_IGNORE)
7436     {
7437       /* Nothing interesting happened.  If we're doing a non-blocking
7438          poll, we're done.  Otherwise, go back to waiting.  */
7439       if (options & TARGET_WNOHANG)
7440         return minus_one_ptid;
7441       else
7442         goto again;
7443     }
7444   else if (status->kind != TARGET_WAITKIND_EXITED
7445            && status->kind != TARGET_WAITKIND_SIGNALLED)
7446     {
7447       if (!ptid_equal (event_ptid, null_ptid))
7448         record_currthread (rs, event_ptid);
7449       else
7450         event_ptid = inferior_ptid;
7451     }
7452   else
7453     /* A process exit.  Invalidate our notion of current thread.  */
7454     record_currthread (rs, minus_one_ptid);
7455
7456   return event_ptid;
7457 }
7458
7459 /* Wait until the remote machine stops, then return, storing status in
7460    STATUS just as `wait' would.  */
7461
7462 static ptid_t
7463 remote_wait (struct target_ops *ops,
7464              ptid_t ptid, struct target_waitstatus *status, int options)
7465 {
7466   ptid_t event_ptid;
7467
7468   if (target_is_non_stop_p ())
7469     event_ptid = remote_wait_ns (ptid, status, options);
7470   else
7471     event_ptid = remote_wait_as (ptid, status, options);
7472
7473   if (target_is_async_p ())
7474     {
7475       /* If there are are events left in the queue tell the event loop
7476          to return here.  */
7477       if (!QUEUE_is_empty (stop_reply_p, stop_reply_queue))
7478         mark_async_event_handler (remote_async_inferior_event_token);
7479     }
7480
7481   return event_ptid;
7482 }
7483
7484 /* Fetch a single register using a 'p' packet.  */
7485
7486 static int
7487 fetch_register_using_p (struct regcache *regcache, struct packet_reg *reg)
7488 {
7489   struct gdbarch *gdbarch = regcache->arch ();
7490   struct remote_state *rs = get_remote_state ();
7491   char *buf, *p;
7492   gdb_byte *regp = (gdb_byte *) alloca (register_size (gdbarch, reg->regnum));
7493   int i;
7494
7495   if (packet_support (PACKET_p) == PACKET_DISABLE)
7496     return 0;
7497
7498   if (reg->pnum == -1)
7499     return 0;
7500
7501   p = rs->buf;
7502   *p++ = 'p';
7503   p += hexnumstr (p, reg->pnum);
7504   *p++ = '\0';
7505   putpkt (rs->buf);
7506   getpkt (&rs->buf, &rs->buf_size, 0);
7507
7508   buf = rs->buf;
7509
7510   switch (packet_ok (buf, &remote_protocol_packets[PACKET_p]))
7511     {
7512     case PACKET_OK:
7513       break;
7514     case PACKET_UNKNOWN:
7515       return 0;
7516     case PACKET_ERROR:
7517       error (_("Could not fetch register \"%s\"; remote failure reply '%s'"),
7518              gdbarch_register_name (regcache->arch (), 
7519                                     reg->regnum), 
7520              buf);
7521     }
7522
7523   /* If this register is unfetchable, tell the regcache.  */
7524   if (buf[0] == 'x')
7525     {
7526       regcache_raw_supply (regcache, reg->regnum, NULL);
7527       return 1;
7528     }
7529
7530   /* Otherwise, parse and supply the value.  */
7531   p = buf;
7532   i = 0;
7533   while (p[0] != 0)
7534     {
7535       if (p[1] == 0)
7536         error (_("fetch_register_using_p: early buf termination"));
7537
7538       regp[i++] = fromhex (p[0]) * 16 + fromhex (p[1]);
7539       p += 2;
7540     }
7541   regcache_raw_supply (regcache, reg->regnum, regp);
7542   return 1;
7543 }
7544
7545 /* Fetch the registers included in the target's 'g' packet.  */
7546
7547 static int
7548 send_g_packet (void)
7549 {
7550   struct remote_state *rs = get_remote_state ();
7551   int buf_len;
7552
7553   xsnprintf (rs->buf, get_remote_packet_size (), "g");
7554   remote_send (&rs->buf, &rs->buf_size);
7555
7556   /* We can get out of synch in various cases.  If the first character
7557      in the buffer is not a hex character, assume that has happened
7558      and try to fetch another packet to read.  */
7559   while ((rs->buf[0] < '0' || rs->buf[0] > '9')
7560          && (rs->buf[0] < 'A' || rs->buf[0] > 'F')
7561          && (rs->buf[0] < 'a' || rs->buf[0] > 'f')
7562          && rs->buf[0] != 'x')  /* New: unavailable register value.  */
7563     {
7564       if (remote_debug)
7565         fprintf_unfiltered (gdb_stdlog,
7566                             "Bad register packet; fetching a new packet\n");
7567       getpkt (&rs->buf, &rs->buf_size, 0);
7568     }
7569
7570   buf_len = strlen (rs->buf);
7571
7572   /* Sanity check the received packet.  */
7573   if (buf_len % 2 != 0)
7574     error (_("Remote 'g' packet reply is of odd length: %s"), rs->buf);
7575
7576   return buf_len / 2;
7577 }
7578
7579 static void
7580 process_g_packet (struct regcache *regcache)
7581 {
7582   struct gdbarch *gdbarch = regcache->arch ();
7583   struct remote_state *rs = get_remote_state ();
7584   remote_arch_state *rsa = get_remote_arch_state (gdbarch);
7585   int i, buf_len;
7586   char *p;
7587   char *regs;
7588
7589   buf_len = strlen (rs->buf);
7590
7591   /* Further sanity checks, with knowledge of the architecture.  */
7592   if (buf_len > 2 * rsa->sizeof_g_packet)
7593     error (_("Remote 'g' packet reply is too long (expected %ld bytes, got %d "
7594              "bytes): %s"), rsa->sizeof_g_packet, buf_len / 2, rs->buf);
7595
7596   /* Save the size of the packet sent to us by the target.  It is used
7597      as a heuristic when determining the max size of packets that the
7598      target can safely receive.  */
7599   if (rsa->actual_register_packet_size == 0)
7600     rsa->actual_register_packet_size = buf_len;
7601
7602   /* If this is smaller than we guessed the 'g' packet would be,
7603      update our records.  A 'g' reply that doesn't include a register's
7604      value implies either that the register is not available, or that
7605      the 'p' packet must be used.  */
7606   if (buf_len < 2 * rsa->sizeof_g_packet)
7607     {
7608       long sizeof_g_packet = buf_len / 2;
7609
7610       for (i = 0; i < gdbarch_num_regs (gdbarch); i++)
7611         {
7612           long offset = rsa->regs[i].offset;
7613           long reg_size = register_size (gdbarch, i);
7614
7615           if (rsa->regs[i].pnum == -1)
7616             continue;
7617
7618           if (offset >= sizeof_g_packet)
7619             rsa->regs[i].in_g_packet = 0;
7620           else if (offset + reg_size > sizeof_g_packet)
7621             error (_("Truncated register %d in remote 'g' packet"), i);
7622           else
7623             rsa->regs[i].in_g_packet = 1;
7624         }
7625
7626       /* Looks valid enough, we can assume this is the correct length
7627          for a 'g' packet.  It's important not to adjust
7628          rsa->sizeof_g_packet if we have truncated registers otherwise
7629          this "if" won't be run the next time the method is called
7630          with a packet of the same size and one of the internal errors
7631          below will trigger instead.  */
7632       rsa->sizeof_g_packet = sizeof_g_packet;
7633     }
7634
7635   regs = (char *) alloca (rsa->sizeof_g_packet);
7636
7637   /* Unimplemented registers read as all bits zero.  */
7638   memset (regs, 0, rsa->sizeof_g_packet);
7639
7640   /* Reply describes registers byte by byte, each byte encoded as two
7641      hex characters.  Suck them all up, then supply them to the
7642      register cacheing/storage mechanism.  */
7643
7644   p = rs->buf;
7645   for (i = 0; i < rsa->sizeof_g_packet; i++)
7646     {
7647       if (p[0] == 0 || p[1] == 0)
7648         /* This shouldn't happen - we adjusted sizeof_g_packet above.  */
7649         internal_error (__FILE__, __LINE__,
7650                         _("unexpected end of 'g' packet reply"));
7651
7652       if (p[0] == 'x' && p[1] == 'x')
7653         regs[i] = 0;            /* 'x' */
7654       else
7655         regs[i] = fromhex (p[0]) * 16 + fromhex (p[1]);
7656       p += 2;
7657     }
7658
7659   for (i = 0; i < gdbarch_num_regs (gdbarch); i++)
7660     {
7661       struct packet_reg *r = &rsa->regs[i];
7662       long reg_size = register_size (gdbarch, i);
7663
7664       if (r->in_g_packet)
7665         {
7666           if ((r->offset + reg_size) * 2 > strlen (rs->buf))
7667             /* This shouldn't happen - we adjusted in_g_packet above.  */
7668             internal_error (__FILE__, __LINE__,
7669                             _("unexpected end of 'g' packet reply"));
7670           else if (rs->buf[r->offset * 2] == 'x')
7671             {
7672               gdb_assert (r->offset * 2 < strlen (rs->buf));
7673               /* The register isn't available, mark it as such (at
7674                  the same time setting the value to zero).  */
7675               regcache_raw_supply (regcache, r->regnum, NULL);
7676             }
7677           else
7678             regcache_raw_supply (regcache, r->regnum,
7679                                  regs + r->offset);
7680         }
7681     }
7682 }
7683
7684 static void
7685 fetch_registers_using_g (struct regcache *regcache)
7686 {
7687   send_g_packet ();
7688   process_g_packet (regcache);
7689 }
7690
7691 /* Make the remote selected traceframe match GDB's selected
7692    traceframe.  */
7693
7694 static void
7695 set_remote_traceframe (void)
7696 {
7697   int newnum;
7698   struct remote_state *rs = get_remote_state ();
7699
7700   if (rs->remote_traceframe_number == get_traceframe_number ())
7701     return;
7702
7703   /* Avoid recursion, remote_trace_find calls us again.  */
7704   rs->remote_traceframe_number = get_traceframe_number ();
7705
7706   newnum = target_trace_find (tfind_number,
7707                               get_traceframe_number (), 0, 0, NULL);
7708
7709   /* Should not happen.  If it does, all bets are off.  */
7710   if (newnum != get_traceframe_number ())
7711     warning (_("could not set remote traceframe"));
7712 }
7713
7714 static void
7715 remote_fetch_registers (struct target_ops *ops,
7716                         struct regcache *regcache, int regnum)
7717 {
7718   struct gdbarch *gdbarch = regcache->arch ();
7719   remote_arch_state *rsa = get_remote_arch_state (gdbarch);
7720   int i;
7721
7722   set_remote_traceframe ();
7723   set_general_thread (regcache_get_ptid (regcache));
7724
7725   if (regnum >= 0)
7726     {
7727       packet_reg *reg = packet_reg_from_regnum (gdbarch, rsa, regnum);
7728
7729       gdb_assert (reg != NULL);
7730
7731       /* If this register might be in the 'g' packet, try that first -
7732          we are likely to read more than one register.  If this is the
7733          first 'g' packet, we might be overly optimistic about its
7734          contents, so fall back to 'p'.  */
7735       if (reg->in_g_packet)
7736         {
7737           fetch_registers_using_g (regcache);
7738           if (reg->in_g_packet)
7739             return;
7740         }
7741
7742       if (fetch_register_using_p (regcache, reg))
7743         return;
7744
7745       /* This register is not available.  */
7746       regcache_raw_supply (regcache, reg->regnum, NULL);
7747
7748       return;
7749     }
7750
7751   fetch_registers_using_g (regcache);
7752
7753   for (i = 0; i < gdbarch_num_regs (gdbarch); i++)
7754     if (!rsa->regs[i].in_g_packet)
7755       if (!fetch_register_using_p (regcache, &rsa->regs[i]))
7756         {
7757           /* This register is not available.  */
7758           regcache_raw_supply (regcache, i, NULL);
7759         }
7760 }
7761
7762 /* Prepare to store registers.  Since we may send them all (using a
7763    'G' request), we have to read out the ones we don't want to change
7764    first.  */
7765
7766 static void
7767 remote_prepare_to_store (struct target_ops *self, struct regcache *regcache)
7768 {
7769   remote_arch_state *rsa = get_remote_arch_state (regcache->arch ());
7770   int i;
7771
7772   /* Make sure the entire registers array is valid.  */
7773   switch (packet_support (PACKET_P))
7774     {
7775     case PACKET_DISABLE:
7776     case PACKET_SUPPORT_UNKNOWN:
7777       /* Make sure all the necessary registers are cached.  */
7778       for (i = 0; i < gdbarch_num_regs (regcache->arch ()); i++)
7779         if (rsa->regs[i].in_g_packet)
7780           regcache_raw_update (regcache, rsa->regs[i].regnum);
7781       break;
7782     case PACKET_ENABLE:
7783       break;
7784     }
7785 }
7786
7787 /* Helper: Attempt to store REGNUM using the P packet.  Return fail IFF
7788    packet was not recognized.  */
7789
7790 static int
7791 store_register_using_P (const struct regcache *regcache, 
7792                         struct packet_reg *reg)
7793 {
7794   struct gdbarch *gdbarch = regcache->arch ();
7795   struct remote_state *rs = get_remote_state ();
7796   /* Try storing a single register.  */
7797   char *buf = rs->buf;
7798   gdb_byte *regp = (gdb_byte *) alloca (register_size (gdbarch, reg->regnum));
7799   char *p;
7800
7801   if (packet_support (PACKET_P) == PACKET_DISABLE)
7802     return 0;
7803
7804   if (reg->pnum == -1)
7805     return 0;
7806
7807   xsnprintf (buf, get_remote_packet_size (), "P%s=", phex_nz (reg->pnum, 0));
7808   p = buf + strlen (buf);
7809   regcache_raw_collect (regcache, reg->regnum, regp);
7810   bin2hex (regp, p, register_size (gdbarch, reg->regnum));
7811   putpkt (rs->buf);
7812   getpkt (&rs->buf, &rs->buf_size, 0);
7813
7814   switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_P]))
7815     {
7816     case PACKET_OK:
7817       return 1;
7818     case PACKET_ERROR:
7819       error (_("Could not write register \"%s\"; remote failure reply '%s'"),
7820              gdbarch_register_name (gdbarch, reg->regnum), rs->buf);
7821     case PACKET_UNKNOWN:
7822       return 0;
7823     default:
7824       internal_error (__FILE__, __LINE__, _("Bad result from packet_ok"));
7825     }
7826 }
7827
7828 /* Store register REGNUM, or all registers if REGNUM == -1, from the
7829    contents of the register cache buffer.  FIXME: ignores errors.  */
7830
7831 static void
7832 store_registers_using_G (const struct regcache *regcache)
7833 {
7834   struct remote_state *rs = get_remote_state ();
7835   remote_arch_state *rsa = get_remote_arch_state (regcache->arch ());
7836   gdb_byte *regs;
7837   char *p;
7838
7839   /* Extract all the registers in the regcache copying them into a
7840      local buffer.  */
7841   {
7842     int i;
7843
7844     regs = (gdb_byte *) alloca (rsa->sizeof_g_packet);
7845     memset (regs, 0, rsa->sizeof_g_packet);
7846     for (i = 0; i < gdbarch_num_regs (regcache->arch ()); i++)
7847       {
7848         struct packet_reg *r = &rsa->regs[i];
7849
7850         if (r->in_g_packet)
7851           regcache_raw_collect (regcache, r->regnum, regs + r->offset);
7852       }
7853   }
7854
7855   /* Command describes registers byte by byte,
7856      each byte encoded as two hex characters.  */
7857   p = rs->buf;
7858   *p++ = 'G';
7859   bin2hex (regs, p, rsa->sizeof_g_packet);
7860   putpkt (rs->buf);
7861   getpkt (&rs->buf, &rs->buf_size, 0);
7862   if (packet_check_result (rs->buf) == PACKET_ERROR)
7863     error (_("Could not write registers; remote failure reply '%s'"), 
7864            rs->buf);
7865 }
7866
7867 /* Store register REGNUM, or all registers if REGNUM == -1, from the contents
7868    of the register cache buffer.  FIXME: ignores errors.  */
7869
7870 static void
7871 remote_store_registers (struct target_ops *ops,
7872                         struct regcache *regcache, int regnum)
7873 {
7874   struct gdbarch *gdbarch = regcache->arch ();
7875   remote_arch_state *rsa = get_remote_arch_state (gdbarch);
7876   int i;
7877
7878   set_remote_traceframe ();
7879   set_general_thread (regcache_get_ptid (regcache));
7880
7881   if (regnum >= 0)
7882     {
7883       packet_reg *reg = packet_reg_from_regnum (gdbarch, rsa, regnum);
7884
7885       gdb_assert (reg != NULL);
7886
7887       /* Always prefer to store registers using the 'P' packet if
7888          possible; we often change only a small number of registers.
7889          Sometimes we change a larger number; we'd need help from a
7890          higher layer to know to use 'G'.  */
7891       if (store_register_using_P (regcache, reg))
7892         return;
7893
7894       /* For now, don't complain if we have no way to write the
7895          register.  GDB loses track of unavailable registers too
7896          easily.  Some day, this may be an error.  We don't have
7897          any way to read the register, either...  */
7898       if (!reg->in_g_packet)
7899         return;
7900
7901       store_registers_using_G (regcache);
7902       return;
7903     }
7904
7905   store_registers_using_G (regcache);
7906
7907   for (i = 0; i < gdbarch_num_regs (gdbarch); i++)
7908     if (!rsa->regs[i].in_g_packet)
7909       if (!store_register_using_P (regcache, &rsa->regs[i]))
7910         /* See above for why we do not issue an error here.  */
7911         continue;
7912 }
7913 \f
7914
7915 /* Return the number of hex digits in num.  */
7916
7917 static int
7918 hexnumlen (ULONGEST num)
7919 {
7920   int i;
7921
7922   for (i = 0; num != 0; i++)
7923     num >>= 4;
7924
7925   return std::max (i, 1);
7926 }
7927
7928 /* Set BUF to the minimum number of hex digits representing NUM.  */
7929
7930 static int
7931 hexnumstr (char *buf, ULONGEST num)
7932 {
7933   int len = hexnumlen (num);
7934
7935   return hexnumnstr (buf, num, len);
7936 }
7937
7938
7939 /* Set BUF to the hex digits representing NUM, padded to WIDTH characters.  */
7940
7941 static int
7942 hexnumnstr (char *buf, ULONGEST num, int width)
7943 {
7944   int i;
7945
7946   buf[width] = '\0';
7947
7948   for (i = width - 1; i >= 0; i--)
7949     {
7950       buf[i] = "0123456789abcdef"[(num & 0xf)];
7951       num >>= 4;
7952     }
7953
7954   return width;
7955 }
7956
7957 /* Mask all but the least significant REMOTE_ADDRESS_SIZE bits.  */
7958
7959 static CORE_ADDR
7960 remote_address_masked (CORE_ADDR addr)
7961 {
7962   unsigned int address_size = remote_address_size;
7963
7964   /* If "remoteaddresssize" was not set, default to target address size.  */
7965   if (!address_size)
7966     address_size = gdbarch_addr_bit (target_gdbarch ());
7967
7968   if (address_size > 0
7969       && address_size < (sizeof (ULONGEST) * 8))
7970     {
7971       /* Only create a mask when that mask can safely be constructed
7972          in a ULONGEST variable.  */
7973       ULONGEST mask = 1;
7974
7975       mask = (mask << address_size) - 1;
7976       addr &= mask;
7977     }
7978   return addr;
7979 }
7980
7981 /* Determine whether the remote target supports binary downloading.
7982    This is accomplished by sending a no-op memory write of zero length
7983    to the target at the specified address. It does not suffice to send
7984    the whole packet, since many stubs strip the eighth bit and
7985    subsequently compute a wrong checksum, which causes real havoc with
7986    remote_write_bytes.
7987
7988    NOTE: This can still lose if the serial line is not eight-bit
7989    clean.  In cases like this, the user should clear "remote
7990    X-packet".  */
7991
7992 static void
7993 check_binary_download (CORE_ADDR addr)
7994 {
7995   struct remote_state *rs = get_remote_state ();
7996
7997   switch (packet_support (PACKET_X))
7998     {
7999     case PACKET_DISABLE:
8000       break;
8001     case PACKET_ENABLE:
8002       break;
8003     case PACKET_SUPPORT_UNKNOWN:
8004       {
8005         char *p;
8006
8007         p = rs->buf;
8008         *p++ = 'X';
8009         p += hexnumstr (p, (ULONGEST) addr);
8010         *p++ = ',';
8011         p += hexnumstr (p, (ULONGEST) 0);
8012         *p++ = ':';
8013         *p = '\0';
8014
8015         putpkt_binary (rs->buf, (int) (p - rs->buf));
8016         getpkt (&rs->buf, &rs->buf_size, 0);
8017
8018         if (rs->buf[0] == '\0')
8019           {
8020             if (remote_debug)
8021               fprintf_unfiltered (gdb_stdlog,
8022                                   "binary downloading NOT "
8023                                   "supported by target\n");
8024             remote_protocol_packets[PACKET_X].support = PACKET_DISABLE;
8025           }
8026         else
8027           {
8028             if (remote_debug)
8029               fprintf_unfiltered (gdb_stdlog,
8030                                   "binary downloading supported by target\n");
8031             remote_protocol_packets[PACKET_X].support = PACKET_ENABLE;
8032           }
8033         break;
8034       }
8035     }
8036 }
8037
8038 /* Helper function to resize the payload in order to try to get a good
8039    alignment.  We try to write an amount of data such that the next write will
8040    start on an address aligned on REMOTE_ALIGN_WRITES.  */
8041
8042 static int
8043 align_for_efficient_write (int todo, CORE_ADDR memaddr)
8044 {
8045   return ((memaddr + todo) & ~(REMOTE_ALIGN_WRITES - 1)) - memaddr;
8046 }
8047
8048 /* Write memory data directly to the remote machine.
8049    This does not inform the data cache; the data cache uses this.
8050    HEADER is the starting part of the packet.
8051    MEMADDR is the address in the remote memory space.
8052    MYADDR is the address of the buffer in our space.
8053    LEN_UNITS is the number of addressable units to write.
8054    UNIT_SIZE is the length in bytes of an addressable unit.
8055    PACKET_FORMAT should be either 'X' or 'M', and indicates if we
8056    should send data as binary ('X'), or hex-encoded ('M').
8057
8058    The function creates packet of the form
8059        <HEADER><ADDRESS>,<LENGTH>:<DATA>
8060
8061    where encoding of <DATA> is terminated by PACKET_FORMAT.
8062
8063    If USE_LENGTH is 0, then the <LENGTH> field and the preceding comma
8064    are omitted.
8065
8066    Return the transferred status, error or OK (an
8067    'enum target_xfer_status' value).  Save the number of addressable units
8068    transferred in *XFERED_LEN_UNITS.  Only transfer a single packet.
8069
8070    On a platform with an addressable memory size of 2 bytes (UNIT_SIZE == 2), an
8071    exchange between gdb and the stub could look like (?? in place of the
8072    checksum):
8073
8074    -> $m1000,4#??
8075    <- aaaabbbbccccdddd
8076
8077    -> $M1000,3:eeeeffffeeee#??
8078    <- OK
8079
8080    -> $m1000,4#??
8081    <- eeeeffffeeeedddd  */
8082
8083 static enum target_xfer_status
8084 remote_write_bytes_aux (const char *header, CORE_ADDR memaddr,
8085                         const gdb_byte *myaddr, ULONGEST len_units,
8086                         int unit_size, ULONGEST *xfered_len_units,
8087                         char packet_format, int use_length)
8088 {
8089   struct remote_state *rs = get_remote_state ();
8090   char *p;
8091   char *plen = NULL;
8092   int plenlen = 0;
8093   int todo_units;
8094   int units_written;
8095   int payload_capacity_bytes;
8096   int payload_length_bytes;
8097
8098   if (packet_format != 'X' && packet_format != 'M')
8099     internal_error (__FILE__, __LINE__,
8100                     _("remote_write_bytes_aux: bad packet format"));
8101
8102   if (len_units == 0)
8103     return TARGET_XFER_EOF;
8104
8105   payload_capacity_bytes = get_memory_write_packet_size ();
8106
8107   /* The packet buffer will be large enough for the payload;
8108      get_memory_packet_size ensures this.  */
8109   rs->buf[0] = '\0';
8110
8111   /* Compute the size of the actual payload by subtracting out the
8112      packet header and footer overhead: "$M<memaddr>,<len>:...#nn".  */
8113
8114   payload_capacity_bytes -= strlen ("$,:#NN");
8115   if (!use_length)
8116     /* The comma won't be used.  */
8117     payload_capacity_bytes += 1;
8118   payload_capacity_bytes -= strlen (header);
8119   payload_capacity_bytes -= hexnumlen (memaddr);
8120
8121   /* Construct the packet excluding the data: "<header><memaddr>,<len>:".  */
8122
8123   strcat (rs->buf, header);
8124   p = rs->buf + strlen (header);
8125
8126   /* Compute a best guess of the number of bytes actually transfered.  */
8127   if (packet_format == 'X')
8128     {
8129       /* Best guess at number of bytes that will fit.  */
8130       todo_units = std::min (len_units,
8131                              (ULONGEST) payload_capacity_bytes / unit_size);
8132       if (use_length)
8133         payload_capacity_bytes -= hexnumlen (todo_units);
8134       todo_units = std::min (todo_units, payload_capacity_bytes / unit_size);
8135     }
8136   else
8137     {
8138       /* Number of bytes that will fit.  */
8139       todo_units
8140         = std::min (len_units,
8141                     (ULONGEST) (payload_capacity_bytes / unit_size) / 2);
8142       if (use_length)
8143         payload_capacity_bytes -= hexnumlen (todo_units);
8144       todo_units = std::min (todo_units,
8145                              (payload_capacity_bytes / unit_size) / 2);
8146     }
8147
8148   if (todo_units <= 0)
8149     internal_error (__FILE__, __LINE__,
8150                     _("minimum packet size too small to write data"));
8151
8152   /* If we already need another packet, then try to align the end
8153      of this packet to a useful boundary.  */
8154   if (todo_units > 2 * REMOTE_ALIGN_WRITES && todo_units < len_units)
8155     todo_units = align_for_efficient_write (todo_units, memaddr);
8156
8157   /* Append "<memaddr>".  */
8158   memaddr = remote_address_masked (memaddr);
8159   p += hexnumstr (p, (ULONGEST) memaddr);
8160
8161   if (use_length)
8162     {
8163       /* Append ",".  */
8164       *p++ = ',';
8165
8166       /* Append the length and retain its location and size.  It may need to be
8167          adjusted once the packet body has been created.  */
8168       plen = p;
8169       plenlen = hexnumstr (p, (ULONGEST) todo_units);
8170       p += plenlen;
8171     }
8172
8173   /* Append ":".  */
8174   *p++ = ':';
8175   *p = '\0';
8176
8177   /* Append the packet body.  */
8178   if (packet_format == 'X')
8179     {
8180       /* Binary mode.  Send target system values byte by byte, in
8181          increasing byte addresses.  Only escape certain critical
8182          characters.  */
8183       payload_length_bytes =
8184           remote_escape_output (myaddr, todo_units, unit_size, (gdb_byte *) p,
8185                                 &units_written, payload_capacity_bytes);
8186
8187       /* If not all TODO units fit, then we'll need another packet.  Make
8188          a second try to keep the end of the packet aligned.  Don't do
8189          this if the packet is tiny.  */
8190       if (units_written < todo_units && units_written > 2 * REMOTE_ALIGN_WRITES)
8191         {
8192           int new_todo_units;
8193
8194           new_todo_units = align_for_efficient_write (units_written, memaddr);
8195
8196           if (new_todo_units != units_written)
8197             payload_length_bytes =
8198                 remote_escape_output (myaddr, new_todo_units, unit_size,
8199                                       (gdb_byte *) p, &units_written,
8200                                       payload_capacity_bytes);
8201         }
8202
8203       p += payload_length_bytes;
8204       if (use_length && units_written < todo_units)
8205         {
8206           /* Escape chars have filled up the buffer prematurely,
8207              and we have actually sent fewer units than planned.
8208              Fix-up the length field of the packet.  Use the same
8209              number of characters as before.  */
8210           plen += hexnumnstr (plen, (ULONGEST) units_written,
8211                               plenlen);
8212           *plen = ':';  /* overwrite \0 from hexnumnstr() */
8213         }
8214     }
8215   else
8216     {
8217       /* Normal mode: Send target system values byte by byte, in
8218          increasing byte addresses.  Each byte is encoded as a two hex
8219          value.  */
8220       p += 2 * bin2hex (myaddr, p, todo_units * unit_size);
8221       units_written = todo_units;
8222     }
8223
8224   putpkt_binary (rs->buf, (int) (p - rs->buf));
8225   getpkt (&rs->buf, &rs->buf_size, 0);
8226
8227   if (rs->buf[0] == 'E')
8228     return TARGET_XFER_E_IO;
8229
8230   /* Return UNITS_WRITTEN, not TODO_UNITS, in case escape chars caused us to
8231      send fewer units than we'd planned.  */
8232   *xfered_len_units = (ULONGEST) units_written;
8233   return (*xfered_len_units != 0) ? TARGET_XFER_OK : TARGET_XFER_EOF;
8234 }
8235
8236 /* Write memory data directly to the remote machine.
8237    This does not inform the data cache; the data cache uses this.
8238    MEMADDR is the address in the remote memory space.
8239    MYADDR is the address of the buffer in our space.
8240    LEN is the number of bytes.
8241
8242    Return the transferred status, error or OK (an
8243    'enum target_xfer_status' value).  Save the number of bytes
8244    transferred in *XFERED_LEN.  Only transfer a single packet.  */
8245
8246 static enum target_xfer_status
8247 remote_write_bytes (CORE_ADDR memaddr, const gdb_byte *myaddr, ULONGEST len,
8248                     int unit_size, ULONGEST *xfered_len)
8249 {
8250   const char *packet_format = NULL;
8251
8252   /* Check whether the target supports binary download.  */
8253   check_binary_download (memaddr);
8254
8255   switch (packet_support (PACKET_X))
8256     {
8257     case PACKET_ENABLE:
8258       packet_format = "X";
8259       break;
8260     case PACKET_DISABLE:
8261       packet_format = "M";
8262       break;
8263     case PACKET_SUPPORT_UNKNOWN:
8264       internal_error (__FILE__, __LINE__,
8265                       _("remote_write_bytes: bad internal state"));
8266     default:
8267       internal_error (__FILE__, __LINE__, _("bad switch"));
8268     }
8269
8270   return remote_write_bytes_aux (packet_format,
8271                                  memaddr, myaddr, len, unit_size, xfered_len,
8272                                  packet_format[0], 1);
8273 }
8274
8275 /* Read memory data directly from the remote machine.
8276    This does not use the data cache; the data cache uses this.
8277    MEMADDR is the address in the remote memory space.
8278    MYADDR is the address of the buffer in our space.
8279    LEN_UNITS is the number of addressable memory units to read..
8280    UNIT_SIZE is the length in bytes of an addressable unit.
8281
8282    Return the transferred status, error or OK (an
8283    'enum target_xfer_status' value).  Save the number of bytes
8284    transferred in *XFERED_LEN_UNITS.
8285
8286    See the comment of remote_write_bytes_aux for an example of
8287    memory read/write exchange between gdb and the stub.  */
8288
8289 static enum target_xfer_status
8290 remote_read_bytes_1 (CORE_ADDR memaddr, gdb_byte *myaddr, ULONGEST len_units,
8291                      int unit_size, ULONGEST *xfered_len_units)
8292 {
8293   struct remote_state *rs = get_remote_state ();
8294   int buf_size_bytes;           /* Max size of packet output buffer.  */
8295   char *p;
8296   int todo_units;
8297   int decoded_bytes;
8298
8299   buf_size_bytes = get_memory_read_packet_size ();
8300   /* The packet buffer will be large enough for the payload;
8301      get_memory_packet_size ensures this.  */
8302
8303   /* Number of units that will fit.  */
8304   todo_units = std::min (len_units,
8305                          (ULONGEST) (buf_size_bytes / unit_size) / 2);
8306
8307   /* Construct "m"<memaddr>","<len>".  */
8308   memaddr = remote_address_masked (memaddr);
8309   p = rs->buf;
8310   *p++ = 'm';
8311   p += hexnumstr (p, (ULONGEST) memaddr);
8312   *p++ = ',';
8313   p += hexnumstr (p, (ULONGEST) todo_units);
8314   *p = '\0';
8315   putpkt (rs->buf);
8316   getpkt (&rs->buf, &rs->buf_size, 0);
8317   if (rs->buf[0] == 'E'
8318       && isxdigit (rs->buf[1]) && isxdigit (rs->buf[2])
8319       && rs->buf[3] == '\0')
8320     return TARGET_XFER_E_IO;
8321   /* Reply describes memory byte by byte, each byte encoded as two hex
8322      characters.  */
8323   p = rs->buf;
8324   decoded_bytes = hex2bin (p, myaddr, todo_units * unit_size);
8325   /* Return what we have.  Let higher layers handle partial reads.  */
8326   *xfered_len_units = (ULONGEST) (decoded_bytes / unit_size);
8327   return (*xfered_len_units != 0) ? TARGET_XFER_OK : TARGET_XFER_EOF;
8328 }
8329
8330 /* Using the set of read-only target sections of remote, read live
8331    read-only memory.
8332
8333    For interface/parameters/return description see target.h,
8334    to_xfer_partial.  */
8335
8336 static enum target_xfer_status
8337 remote_xfer_live_readonly_partial (struct target_ops *ops, gdb_byte *readbuf,
8338                                    ULONGEST memaddr, ULONGEST len,
8339                                    int unit_size, ULONGEST *xfered_len)
8340 {
8341   struct target_section *secp;
8342   struct target_section_table *table;
8343
8344   secp = target_section_by_addr (ops, memaddr);
8345   if (secp != NULL
8346       && (bfd_get_section_flags (secp->the_bfd_section->owner,
8347                                  secp->the_bfd_section)
8348           & SEC_READONLY))
8349     {
8350       struct target_section *p;
8351       ULONGEST memend = memaddr + len;
8352
8353       table = target_get_section_table (ops);
8354
8355       for (p = table->sections; p < table->sections_end; p++)
8356         {
8357           if (memaddr >= p->addr)
8358             {
8359               if (memend <= p->endaddr)
8360                 {
8361                   /* Entire transfer is within this section.  */
8362                   return remote_read_bytes_1 (memaddr, readbuf, len, unit_size,
8363                                               xfered_len);
8364                 }
8365               else if (memaddr >= p->endaddr)
8366                 {
8367                   /* This section ends before the transfer starts.  */
8368                   continue;
8369                 }
8370               else
8371                 {
8372                   /* This section overlaps the transfer.  Just do half.  */
8373                   len = p->endaddr - memaddr;
8374                   return remote_read_bytes_1 (memaddr, readbuf, len, unit_size,
8375                                               xfered_len);
8376                 }
8377             }
8378         }
8379     }
8380
8381   return TARGET_XFER_EOF;
8382 }
8383
8384 /* Similar to remote_read_bytes_1, but it reads from the remote stub
8385    first if the requested memory is unavailable in traceframe.
8386    Otherwise, fall back to remote_read_bytes_1.  */
8387
8388 static enum target_xfer_status
8389 remote_read_bytes (struct target_ops *ops, CORE_ADDR memaddr,
8390                    gdb_byte *myaddr, ULONGEST len, int unit_size,
8391                    ULONGEST *xfered_len)
8392 {
8393   if (len == 0)
8394     return TARGET_XFER_EOF;
8395
8396   if (get_traceframe_number () != -1)
8397     {
8398       std::vector<mem_range> available;
8399
8400       /* If we fail to get the set of available memory, then the
8401          target does not support querying traceframe info, and so we
8402          attempt reading from the traceframe anyway (assuming the
8403          target implements the old QTro packet then).  */
8404       if (traceframe_available_memory (&available, memaddr, len))
8405         {
8406           if (available.empty () || available[0].start != memaddr)
8407             {
8408               enum target_xfer_status res;
8409
8410               /* Don't read into the traceframe's available
8411                  memory.  */
8412               if (!available.empty ())
8413                 {
8414                   LONGEST oldlen = len;
8415
8416                   len = available[0].start - memaddr;
8417                   gdb_assert (len <= oldlen);
8418                 }
8419
8420               /* This goes through the topmost target again.  */
8421               res = remote_xfer_live_readonly_partial (ops, myaddr, memaddr,
8422                                                        len, unit_size, xfered_len);
8423               if (res == TARGET_XFER_OK)
8424                 return TARGET_XFER_OK;
8425               else
8426                 {
8427                   /* No use trying further, we know some memory starting
8428                      at MEMADDR isn't available.  */
8429                   *xfered_len = len;
8430                   return (*xfered_len != 0) ?
8431                     TARGET_XFER_UNAVAILABLE : TARGET_XFER_EOF;
8432                 }
8433             }
8434
8435           /* Don't try to read more than how much is available, in
8436              case the target implements the deprecated QTro packet to
8437              cater for older GDBs (the target's knowledge of read-only
8438              sections may be outdated by now).  */
8439           len = available[0].length;
8440         }
8441     }
8442
8443   return remote_read_bytes_1 (memaddr, myaddr, len, unit_size, xfered_len);
8444 }
8445
8446 \f
8447
8448 /* Sends a packet with content determined by the printf format string
8449    FORMAT and the remaining arguments, then gets the reply.  Returns
8450    whether the packet was a success, a failure, or unknown.  */
8451
8452 static enum packet_result remote_send_printf (const char *format, ...)
8453   ATTRIBUTE_PRINTF (1, 2);
8454
8455 static enum packet_result
8456 remote_send_printf (const char *format, ...)
8457 {
8458   struct remote_state *rs = get_remote_state ();
8459   int max_size = get_remote_packet_size ();
8460   va_list ap;
8461
8462   va_start (ap, format);
8463
8464   rs->buf[0] = '\0';
8465   if (vsnprintf (rs->buf, max_size, format, ap) >= max_size)
8466     internal_error (__FILE__, __LINE__, _("Too long remote packet."));
8467
8468   if (putpkt (rs->buf) < 0)
8469     error (_("Communication problem with target."));
8470
8471   rs->buf[0] = '\0';
8472   getpkt (&rs->buf, &rs->buf_size, 0);
8473
8474   return packet_check_result (rs->buf);
8475 }
8476
8477 /* Flash writing can take quite some time.  We'll set
8478    effectively infinite timeout for flash operations.
8479    In future, we'll need to decide on a better approach.  */
8480 static const int remote_flash_timeout = 1000;
8481
8482 static void
8483 remote_flash_erase (struct target_ops *ops,
8484                     ULONGEST address, LONGEST length)
8485 {
8486   int addr_size = gdbarch_addr_bit (target_gdbarch ()) / 8;
8487   enum packet_result ret;
8488   scoped_restore restore_timeout
8489     = make_scoped_restore (&remote_timeout, remote_flash_timeout);
8490
8491   ret = remote_send_printf ("vFlashErase:%s,%s",
8492                             phex (address, addr_size),
8493                             phex (length, 4));
8494   switch (ret)
8495     {
8496     case PACKET_UNKNOWN:
8497       error (_("Remote target does not support flash erase"));
8498     case PACKET_ERROR:
8499       error (_("Error erasing flash with vFlashErase packet"));
8500     default:
8501       break;
8502     }
8503 }
8504
8505 static enum target_xfer_status
8506 remote_flash_write (struct target_ops *ops, ULONGEST address,
8507                     ULONGEST length, ULONGEST *xfered_len,
8508                     const gdb_byte *data)
8509 {
8510   scoped_restore restore_timeout
8511     = make_scoped_restore (&remote_timeout, remote_flash_timeout);
8512   return remote_write_bytes_aux ("vFlashWrite:", address, data, length, 1,
8513                                  xfered_len,'X', 0);
8514 }
8515
8516 static void
8517 remote_flash_done (struct target_ops *ops)
8518 {
8519   int ret;
8520
8521   scoped_restore restore_timeout
8522     = make_scoped_restore (&remote_timeout, remote_flash_timeout);
8523
8524   ret = remote_send_printf ("vFlashDone");
8525
8526   switch (ret)
8527     {
8528     case PACKET_UNKNOWN:
8529       error (_("Remote target does not support vFlashDone"));
8530     case PACKET_ERROR:
8531       error (_("Error finishing flash operation"));
8532     default:
8533       break;
8534     }
8535 }
8536
8537 static void
8538 remote_files_info (struct target_ops *ignore)
8539 {
8540   puts_filtered ("Debugging a target over a serial line.\n");
8541 }
8542 \f
8543 /* Stuff for dealing with the packets which are part of this protocol.
8544    See comment at top of file for details.  */
8545
8546 /* Close/unpush the remote target, and throw a TARGET_CLOSE_ERROR
8547    error to higher layers.  Called when a serial error is detected.
8548    The exception message is STRING, followed by a colon and a blank,
8549    the system error message for errno at function entry and final dot
8550    for output compatibility with throw_perror_with_name.  */
8551
8552 static void
8553 unpush_and_perror (const char *string)
8554 {
8555   int saved_errno = errno;
8556
8557   remote_unpush_target ();
8558   throw_error (TARGET_CLOSE_ERROR, "%s: %s.", string,
8559                safe_strerror (saved_errno));
8560 }
8561
8562 /* Read a single character from the remote end.  The current quit
8563    handler is overridden to avoid quitting in the middle of packet
8564    sequence, as that would break communication with the remote server.
8565    See remote_serial_quit_handler for more detail.  */
8566
8567 static int
8568 readchar (int timeout)
8569 {
8570   int ch;
8571   struct remote_state *rs = get_remote_state ();
8572
8573   {
8574     scoped_restore restore_quit
8575       = make_scoped_restore (&quit_handler, remote_serial_quit_handler);
8576
8577     rs->got_ctrlc_during_io = 0;
8578
8579     ch = serial_readchar (rs->remote_desc, timeout);
8580
8581     if (rs->got_ctrlc_during_io)
8582       set_quit_flag ();
8583   }
8584
8585   if (ch >= 0)
8586     return ch;
8587
8588   switch ((enum serial_rc) ch)
8589     {
8590     case SERIAL_EOF:
8591       remote_unpush_target ();
8592       throw_error (TARGET_CLOSE_ERROR, _("Remote connection closed"));
8593       /* no return */
8594     case SERIAL_ERROR:
8595       unpush_and_perror (_("Remote communication error.  "
8596                            "Target disconnected."));
8597       /* no return */
8598     case SERIAL_TIMEOUT:
8599       break;
8600     }
8601   return ch;
8602 }
8603
8604 /* Wrapper for serial_write that closes the target and throws if
8605    writing fails.  The current quit handler is overridden to avoid
8606    quitting in the middle of packet sequence, as that would break
8607    communication with the remote server.  See
8608    remote_serial_quit_handler for more detail.  */
8609
8610 static void
8611 remote_serial_write (const char *str, int len)
8612 {
8613   struct remote_state *rs = get_remote_state ();
8614
8615   scoped_restore restore_quit
8616     = make_scoped_restore (&quit_handler, remote_serial_quit_handler);
8617
8618   rs->got_ctrlc_during_io = 0;
8619
8620   if (serial_write (rs->remote_desc, str, len))
8621     {
8622       unpush_and_perror (_("Remote communication error.  "
8623                            "Target disconnected."));
8624     }
8625
8626   if (rs->got_ctrlc_during_io)
8627     set_quit_flag ();
8628 }
8629
8630 /* Send the command in *BUF to the remote machine, and read the reply
8631    into *BUF.  Report an error if we get an error reply.  Resize
8632    *BUF using xrealloc if necessary to hold the result, and update
8633    *SIZEOF_BUF.  */
8634
8635 static void
8636 remote_send (char **buf,
8637              long *sizeof_buf)
8638 {
8639   putpkt (*buf);
8640   getpkt (buf, sizeof_buf, 0);
8641
8642   if ((*buf)[0] == 'E')
8643     error (_("Remote failure reply: %s"), *buf);
8644 }
8645
8646 /* Return a string representing an escaped version of BUF, of len N.
8647    E.g. \n is converted to \\n, \t to \\t, etc.  */
8648
8649 static std::string
8650 escape_buffer (const char *buf, int n)
8651 {
8652   string_file stb;
8653
8654   stb.putstrn (buf, n, '\\');
8655   return std::move (stb.string ());
8656 }
8657
8658 /* Display a null-terminated packet on stdout, for debugging, using C
8659    string notation.  */
8660
8661 static void
8662 print_packet (const char *buf)
8663 {
8664   puts_filtered ("\"");
8665   fputstr_filtered (buf, '"', gdb_stdout);
8666   puts_filtered ("\"");
8667 }
8668
8669 int
8670 putpkt (const char *buf)
8671 {
8672   return putpkt_binary (buf, strlen (buf));
8673 }
8674
8675 /* Send a packet to the remote machine, with error checking.  The data
8676    of the packet is in BUF.  The string in BUF can be at most
8677    get_remote_packet_size () - 5 to account for the $, # and checksum,
8678    and for a possible /0 if we are debugging (remote_debug) and want
8679    to print the sent packet as a string.  */
8680
8681 static int
8682 putpkt_binary (const char *buf, int cnt)
8683 {
8684   struct remote_state *rs = get_remote_state ();
8685   int i;
8686   unsigned char csum = 0;
8687   gdb::def_vector<char> data (cnt + 6);
8688   char *buf2 = data.data ();
8689
8690   int ch;
8691   int tcount = 0;
8692   char *p;
8693
8694   /* Catch cases like trying to read memory or listing threads while
8695      we're waiting for a stop reply.  The remote server wouldn't be
8696      ready to handle this request, so we'd hang and timeout.  We don't
8697      have to worry about this in synchronous mode, because in that
8698      case it's not possible to issue a command while the target is
8699      running.  This is not a problem in non-stop mode, because in that
8700      case, the stub is always ready to process serial input.  */
8701   if (!target_is_non_stop_p ()
8702       && target_is_async_p ()
8703       && rs->waiting_for_stop_reply)
8704     {
8705       error (_("Cannot execute this command while the target is running.\n"
8706                "Use the \"interrupt\" command to stop the target\n"
8707                "and then try again."));
8708     }
8709
8710   /* We're sending out a new packet.  Make sure we don't look at a
8711      stale cached response.  */
8712   rs->cached_wait_status = 0;
8713
8714   /* Copy the packet into buffer BUF2, encapsulating it
8715      and giving it a checksum.  */
8716
8717   p = buf2;
8718   *p++ = '$';
8719
8720   for (i = 0; i < cnt; i++)
8721     {
8722       csum += buf[i];
8723       *p++ = buf[i];
8724     }
8725   *p++ = '#';
8726   *p++ = tohex ((csum >> 4) & 0xf);
8727   *p++ = tohex (csum & 0xf);
8728
8729   /* Send it over and over until we get a positive ack.  */
8730
8731   while (1)
8732     {
8733       int started_error_output = 0;
8734
8735       if (remote_debug)
8736         {
8737           *p = '\0';
8738
8739           int len = (int) (p - buf2);
8740
8741           std::string str
8742             = escape_buffer (buf2, std::min (len, REMOTE_DEBUG_MAX_CHAR));
8743
8744           fprintf_unfiltered (gdb_stdlog, "Sending packet: %s", str.c_str ());
8745
8746           if (str.length () > REMOTE_DEBUG_MAX_CHAR)
8747             {
8748               fprintf_unfiltered (gdb_stdlog, "[%zu bytes omitted]",
8749                                   str.length () - REMOTE_DEBUG_MAX_CHAR);
8750             }
8751
8752           fprintf_unfiltered (gdb_stdlog, "...");
8753
8754           gdb_flush (gdb_stdlog);
8755         }
8756       remote_serial_write (buf2, p - buf2);
8757
8758       /* If this is a no acks version of the remote protocol, send the
8759          packet and move on.  */
8760       if (rs->noack_mode)
8761         break;
8762
8763       /* Read until either a timeout occurs (-2) or '+' is read.
8764          Handle any notification that arrives in the mean time.  */
8765       while (1)
8766         {
8767           ch = readchar (remote_timeout);
8768
8769           if (remote_debug)
8770             {
8771               switch (ch)
8772                 {
8773                 case '+':
8774                 case '-':
8775                 case SERIAL_TIMEOUT:
8776                 case '$':
8777                 case '%':
8778                   if (started_error_output)
8779                     {
8780                       putchar_unfiltered ('\n');
8781                       started_error_output = 0;
8782                     }
8783                 }
8784             }
8785
8786           switch (ch)
8787             {
8788             case '+':
8789               if (remote_debug)
8790                 fprintf_unfiltered (gdb_stdlog, "Ack\n");
8791               return 1;
8792             case '-':
8793               if (remote_debug)
8794                 fprintf_unfiltered (gdb_stdlog, "Nak\n");
8795               /* FALLTHROUGH */
8796             case SERIAL_TIMEOUT:
8797               tcount++;
8798               if (tcount > 3)
8799                 return 0;
8800               break;            /* Retransmit buffer.  */
8801             case '$':
8802               {
8803                 if (remote_debug)
8804                   fprintf_unfiltered (gdb_stdlog,
8805                                       "Packet instead of Ack, ignoring it\n");
8806                 /* It's probably an old response sent because an ACK
8807                    was lost.  Gobble up the packet and ack it so it
8808                    doesn't get retransmitted when we resend this
8809                    packet.  */
8810                 skip_frame ();
8811                 remote_serial_write ("+", 1);
8812                 continue;       /* Now, go look for +.  */
8813               }
8814
8815             case '%':
8816               {
8817                 int val;
8818
8819                 /* If we got a notification, handle it, and go back to looking
8820                    for an ack.  */
8821                 /* We've found the start of a notification.  Now
8822                    collect the data.  */
8823                 val = read_frame (&rs->buf, &rs->buf_size);
8824                 if (val >= 0)
8825                   {
8826                     if (remote_debug)
8827                       {
8828                         std::string str = escape_buffer (rs->buf, val);
8829
8830                         fprintf_unfiltered (gdb_stdlog,
8831                                             "  Notification received: %s\n",
8832                                             str.c_str ());
8833                       }
8834                     handle_notification (rs->notif_state, rs->buf);
8835                     /* We're in sync now, rewait for the ack.  */
8836                     tcount = 0;
8837                   }
8838                 else
8839                   {
8840                     if (remote_debug)
8841                       {
8842                         if (!started_error_output)
8843                           {
8844                             started_error_output = 1;
8845                             fprintf_unfiltered (gdb_stdlog, "putpkt: Junk: ");
8846                           }
8847                         fputc_unfiltered (ch & 0177, gdb_stdlog);
8848                         fprintf_unfiltered (gdb_stdlog, "%s", rs->buf);
8849                       }
8850                   }
8851                 continue;
8852               }
8853               /* fall-through */
8854             default:
8855               if (remote_debug)
8856                 {
8857                   if (!started_error_output)
8858                     {
8859                       started_error_output = 1;
8860                       fprintf_unfiltered (gdb_stdlog, "putpkt: Junk: ");
8861                     }
8862                   fputc_unfiltered (ch & 0177, gdb_stdlog);
8863                 }
8864               continue;
8865             }
8866           break;                /* Here to retransmit.  */
8867         }
8868
8869 #if 0
8870       /* This is wrong.  If doing a long backtrace, the user should be
8871          able to get out next time we call QUIT, without anything as
8872          violent as interrupt_query.  If we want to provide a way out of
8873          here without getting to the next QUIT, it should be based on
8874          hitting ^C twice as in remote_wait.  */
8875       if (quit_flag)
8876         {
8877           quit_flag = 0;
8878           interrupt_query ();
8879         }
8880 #endif
8881     }
8882
8883   return 0;
8884 }
8885
8886 /* Come here after finding the start of a frame when we expected an
8887    ack.  Do our best to discard the rest of this packet.  */
8888
8889 static void
8890 skip_frame (void)
8891 {
8892   int c;
8893
8894   while (1)
8895     {
8896       c = readchar (remote_timeout);
8897       switch (c)
8898         {
8899         case SERIAL_TIMEOUT:
8900           /* Nothing we can do.  */
8901           return;
8902         case '#':
8903           /* Discard the two bytes of checksum and stop.  */
8904           c = readchar (remote_timeout);
8905           if (c >= 0)
8906             c = readchar (remote_timeout);
8907
8908           return;
8909         case '*':               /* Run length encoding.  */
8910           /* Discard the repeat count.  */
8911           c = readchar (remote_timeout);
8912           if (c < 0)
8913             return;
8914           break;
8915         default:
8916           /* A regular character.  */
8917           break;
8918         }
8919     }
8920 }
8921
8922 /* Come here after finding the start of the frame.  Collect the rest
8923    into *BUF, verifying the checksum, length, and handling run-length
8924    compression.  NUL terminate the buffer.  If there is not enough room,
8925    expand *BUF using xrealloc.
8926
8927    Returns -1 on error, number of characters in buffer (ignoring the
8928    trailing NULL) on success. (could be extended to return one of the
8929    SERIAL status indications).  */
8930
8931 static long
8932 read_frame (char **buf_p,
8933             long *sizeof_buf)
8934 {
8935   unsigned char csum;
8936   long bc;
8937   int c;
8938   char *buf = *buf_p;
8939   struct remote_state *rs = get_remote_state ();
8940
8941   csum = 0;
8942   bc = 0;
8943
8944   while (1)
8945     {
8946       c = readchar (remote_timeout);
8947       switch (c)
8948         {
8949         case SERIAL_TIMEOUT:
8950           if (remote_debug)
8951             fputs_filtered ("Timeout in mid-packet, retrying\n", gdb_stdlog);
8952           return -1;
8953         case '$':
8954           if (remote_debug)
8955             fputs_filtered ("Saw new packet start in middle of old one\n",
8956                             gdb_stdlog);
8957           return -1;            /* Start a new packet, count retries.  */
8958         case '#':
8959           {
8960             unsigned char pktcsum;
8961             int check_0 = 0;
8962             int check_1 = 0;
8963
8964             buf[bc] = '\0';
8965
8966             check_0 = readchar (remote_timeout);
8967             if (check_0 >= 0)
8968               check_1 = readchar (remote_timeout);
8969
8970             if (check_0 == SERIAL_TIMEOUT || check_1 == SERIAL_TIMEOUT)
8971               {
8972                 if (remote_debug)
8973                   fputs_filtered ("Timeout in checksum, retrying\n",
8974                                   gdb_stdlog);
8975                 return -1;
8976               }
8977             else if (check_0 < 0 || check_1 < 0)
8978               {
8979                 if (remote_debug)
8980                   fputs_filtered ("Communication error in checksum\n",
8981                                   gdb_stdlog);
8982                 return -1;
8983               }
8984
8985             /* Don't recompute the checksum; with no ack packets we
8986                don't have any way to indicate a packet retransmission
8987                is necessary.  */
8988             if (rs->noack_mode)
8989               return bc;
8990
8991             pktcsum = (fromhex (check_0) << 4) | fromhex (check_1);
8992             if (csum == pktcsum)
8993               return bc;
8994
8995             if (remote_debug)
8996               {
8997                 std::string str = escape_buffer (buf, bc);
8998
8999                 fprintf_unfiltered (gdb_stdlog,
9000                                     "Bad checksum, sentsum=0x%x, "
9001                                     "csum=0x%x, buf=%s\n",
9002                                     pktcsum, csum, str.c_str ());
9003               }
9004             /* Number of characters in buffer ignoring trailing
9005                NULL.  */
9006             return -1;
9007           }
9008         case '*':               /* Run length encoding.  */
9009           {
9010             int repeat;
9011
9012             csum += c;
9013             c = readchar (remote_timeout);
9014             csum += c;
9015             repeat = c - ' ' + 3;       /* Compute repeat count.  */
9016
9017             /* The character before ``*'' is repeated.  */
9018
9019             if (repeat > 0 && repeat <= 255 && bc > 0)
9020               {
9021                 if (bc + repeat - 1 >= *sizeof_buf - 1)
9022                   {
9023                     /* Make some more room in the buffer.  */
9024                     *sizeof_buf += repeat;
9025                     *buf_p = (char *) xrealloc (*buf_p, *sizeof_buf);
9026                     buf = *buf_p;
9027                   }
9028
9029                 memset (&buf[bc], buf[bc - 1], repeat);
9030                 bc += repeat;
9031                 continue;
9032               }
9033
9034             buf[bc] = '\0';
9035             printf_filtered (_("Invalid run length encoding: %s\n"), buf);
9036             return -1;
9037           }
9038         default:
9039           if (bc >= *sizeof_buf - 1)
9040             {
9041               /* Make some more room in the buffer.  */
9042               *sizeof_buf *= 2;
9043               *buf_p = (char *) xrealloc (*buf_p, *sizeof_buf);
9044               buf = *buf_p;
9045             }
9046
9047           buf[bc++] = c;
9048           csum += c;
9049           continue;
9050         }
9051     }
9052 }
9053
9054 /* Read a packet from the remote machine, with error checking, and
9055    store it in *BUF.  Resize *BUF using xrealloc if necessary to hold
9056    the result, and update *SIZEOF_BUF.  If FOREVER, wait forever
9057    rather than timing out; this is used (in synchronous mode) to wait
9058    for a target that is is executing user code to stop.  */
9059 /* FIXME: ezannoni 2000-02-01 this wrapper is necessary so that we
9060    don't have to change all the calls to getpkt to deal with the
9061    return value, because at the moment I don't know what the right
9062    thing to do it for those.  */
9063 void
9064 getpkt (char **buf,
9065         long *sizeof_buf,
9066         int forever)
9067 {
9068   getpkt_sane (buf, sizeof_buf, forever);
9069 }
9070
9071
9072 /* Read a packet from the remote machine, with error checking, and
9073    store it in *BUF.  Resize *BUF using xrealloc if necessary to hold
9074    the result, and update *SIZEOF_BUF.  If FOREVER, wait forever
9075    rather than timing out; this is used (in synchronous mode) to wait
9076    for a target that is is executing user code to stop.  If FOREVER ==
9077    0, this function is allowed to time out gracefully and return an
9078    indication of this to the caller.  Otherwise return the number of
9079    bytes read.  If EXPECTING_NOTIF, consider receiving a notification
9080    enough reason to return to the caller.  *IS_NOTIF is an output
9081    boolean that indicates whether *BUF holds a notification or not
9082    (a regular packet).  */
9083
9084 static int
9085 getpkt_or_notif_sane_1 (char **buf, long *sizeof_buf, int forever,
9086                         int expecting_notif, int *is_notif)
9087 {
9088   struct remote_state *rs = get_remote_state ();
9089   int c;
9090   int tries;
9091   int timeout;
9092   int val = -1;
9093
9094   /* We're reading a new response.  Make sure we don't look at a
9095      previously cached response.  */
9096   rs->cached_wait_status = 0;
9097
9098   strcpy (*buf, "timeout");
9099
9100   if (forever)
9101     timeout = watchdog > 0 ? watchdog : -1;
9102   else if (expecting_notif)
9103     timeout = 0; /* There should already be a char in the buffer.  If
9104                     not, bail out.  */
9105   else
9106     timeout = remote_timeout;
9107
9108 #define MAX_TRIES 3
9109
9110   /* Process any number of notifications, and then return when
9111      we get a packet.  */
9112   for (;;)
9113     {
9114       /* If we get a timeout or bad checksum, retry up to MAX_TRIES
9115          times.  */
9116       for (tries = 1; tries <= MAX_TRIES; tries++)
9117         {
9118           /* This can loop forever if the remote side sends us
9119              characters continuously, but if it pauses, we'll get
9120              SERIAL_TIMEOUT from readchar because of timeout.  Then
9121              we'll count that as a retry.
9122
9123              Note that even when forever is set, we will only wait
9124              forever prior to the start of a packet.  After that, we
9125              expect characters to arrive at a brisk pace.  They should
9126              show up within remote_timeout intervals.  */
9127           do
9128             c = readchar (timeout);
9129           while (c != SERIAL_TIMEOUT && c != '$' && c != '%');
9130
9131           if (c == SERIAL_TIMEOUT)
9132             {
9133               if (expecting_notif)
9134                 return -1; /* Don't complain, it's normal to not get
9135                               anything in this case.  */
9136
9137               if (forever)      /* Watchdog went off?  Kill the target.  */
9138                 {
9139                   remote_unpush_target ();
9140                   throw_error (TARGET_CLOSE_ERROR,
9141                                _("Watchdog timeout has expired.  "
9142                                  "Target detached."));
9143                 }
9144               if (remote_debug)
9145                 fputs_filtered ("Timed out.\n", gdb_stdlog);
9146             }
9147           else
9148             {
9149               /* We've found the start of a packet or notification.
9150                  Now collect the data.  */
9151               val = read_frame (buf, sizeof_buf);
9152               if (val >= 0)
9153                 break;
9154             }
9155
9156           remote_serial_write ("-", 1);
9157         }
9158
9159       if (tries > MAX_TRIES)
9160         {
9161           /* We have tried hard enough, and just can't receive the
9162              packet/notification.  Give up.  */
9163           printf_unfiltered (_("Ignoring packet error, continuing...\n"));
9164
9165           /* Skip the ack char if we're in no-ack mode.  */
9166           if (!rs->noack_mode)
9167             remote_serial_write ("+", 1);
9168           return -1;
9169         }
9170
9171       /* If we got an ordinary packet, return that to our caller.  */
9172       if (c == '$')
9173         {
9174           if (remote_debug)
9175             {
9176               std::string str
9177                 = escape_buffer (*buf,
9178                                  std::min (val, REMOTE_DEBUG_MAX_CHAR));
9179
9180               fprintf_unfiltered (gdb_stdlog, "Packet received: %s",
9181                                   str.c_str ());
9182
9183               if (str.length () >  REMOTE_DEBUG_MAX_CHAR)
9184                 {
9185                   fprintf_unfiltered (gdb_stdlog, "[%zu bytes omitted]",
9186                                       str.length () - REMOTE_DEBUG_MAX_CHAR);
9187                 }
9188
9189               fprintf_unfiltered (gdb_stdlog, "\n");
9190             }
9191
9192           /* Skip the ack char if we're in no-ack mode.  */
9193           if (!rs->noack_mode)
9194             remote_serial_write ("+", 1);
9195           if (is_notif != NULL)
9196             *is_notif = 0;
9197           return val;
9198         }
9199
9200        /* If we got a notification, handle it, and go back to looking
9201          for a packet.  */
9202       else
9203         {
9204           gdb_assert (c == '%');
9205
9206           if (remote_debug)
9207             {
9208               std::string str = escape_buffer (*buf, val);
9209
9210               fprintf_unfiltered (gdb_stdlog,
9211                                   "  Notification received: %s\n",
9212                                   str.c_str ());
9213             }
9214           if (is_notif != NULL)
9215             *is_notif = 1;
9216
9217           handle_notification (rs->notif_state, *buf);
9218
9219           /* Notifications require no acknowledgement.  */
9220
9221           if (expecting_notif)
9222             return val;
9223         }
9224     }
9225 }
9226
9227 static int
9228 getpkt_sane (char **buf, long *sizeof_buf, int forever)
9229 {
9230   return getpkt_or_notif_sane_1 (buf, sizeof_buf, forever, 0, NULL);
9231 }
9232
9233 static int
9234 getpkt_or_notif_sane (char **buf, long *sizeof_buf, int forever,
9235                       int *is_notif)
9236 {
9237   return getpkt_or_notif_sane_1 (buf, sizeof_buf, forever, 1,
9238                                  is_notif);
9239 }
9240
9241 /* Check whether EVENT is a fork event for the process specified
9242    by the pid passed in DATA, and if it is, kill the fork child.  */
9243
9244 static int
9245 kill_child_of_pending_fork (QUEUE (stop_reply_p) *q,
9246                             QUEUE_ITER (stop_reply_p) *iter,
9247                             stop_reply_p event,
9248                             void *data)
9249 {
9250   struct queue_iter_param *param = (struct queue_iter_param *) data;
9251   int parent_pid = *(int *) param->input;
9252
9253   if (is_pending_fork_parent (&event->ws, parent_pid, event->ptid))
9254     {
9255       struct remote_state *rs = get_remote_state ();
9256       int child_pid = ptid_get_pid (event->ws.value.related_pid);
9257       int res;
9258
9259       res = remote_vkill (child_pid, rs);
9260       if (res != 0)
9261         error (_("Can't kill fork child process %d"), child_pid);
9262     }
9263
9264   return 1;
9265 }
9266
9267 /* Kill any new fork children of process PID that haven't been
9268    processed by follow_fork.  */
9269
9270 static void
9271 kill_new_fork_children (int pid, struct remote_state *rs)
9272 {
9273   struct thread_info *thread;
9274   struct notif_client *notif = &notif_client_stop;
9275   struct queue_iter_param param;
9276
9277   /* Kill the fork child threads of any threads in process PID
9278      that are stopped at a fork event.  */
9279   ALL_NON_EXITED_THREADS (thread)
9280     {
9281       struct target_waitstatus *ws = &thread->pending_follow;
9282
9283       if (is_pending_fork_parent (ws, pid, thread->ptid))
9284         {
9285           struct remote_state *rs = get_remote_state ();
9286           int child_pid = ptid_get_pid (ws->value.related_pid);
9287           int res;
9288
9289           res = remote_vkill (child_pid, rs);
9290           if (res != 0)
9291             error (_("Can't kill fork child process %d"), child_pid);
9292         }
9293     }
9294
9295   /* Check for any pending fork events (not reported or processed yet)
9296      in process PID and kill those fork child threads as well.  */
9297   remote_notif_get_pending_events (notif);
9298   param.input = &pid;
9299   param.output = NULL;
9300   QUEUE_iterate (stop_reply_p, stop_reply_queue,
9301                  kill_child_of_pending_fork, &param);
9302 }
9303
9304 \f
9305 /* Target hook to kill the current inferior.  */
9306
9307 static void
9308 remote_kill (struct target_ops *ops)
9309 {
9310   int res = -1;
9311   int pid = ptid_get_pid (inferior_ptid);
9312   struct remote_state *rs = get_remote_state ();
9313
9314   if (packet_support (PACKET_vKill) != PACKET_DISABLE)
9315     {
9316       /* If we're stopped while forking and we haven't followed yet,
9317          kill the child task.  We need to do this before killing the
9318          parent task because if this is a vfork then the parent will
9319          be sleeping.  */
9320       kill_new_fork_children (pid, rs);
9321
9322       res = remote_vkill (pid, rs);
9323       if (res == 0)
9324         {
9325           target_mourn_inferior (inferior_ptid);
9326           return;
9327         }
9328     }
9329
9330   /* If we are in 'target remote' mode and we are killing the only
9331      inferior, then we will tell gdbserver to exit and unpush the
9332      target.  */
9333   if (res == -1 && !remote_multi_process_p (rs)
9334       && number_of_live_inferiors () == 1)
9335     {
9336       remote_kill_k ();
9337
9338       /* We've killed the remote end, we get to mourn it.  If we are
9339          not in extended mode, mourning the inferior also unpushes
9340          remote_ops from the target stack, which closes the remote
9341          connection.  */
9342       target_mourn_inferior (inferior_ptid);
9343
9344       return;
9345     }
9346
9347   error (_("Can't kill process"));
9348 }
9349
9350 /* Send a kill request to the target using the 'vKill' packet.  */
9351
9352 static int
9353 remote_vkill (int pid, struct remote_state *rs)
9354 {
9355   if (packet_support (PACKET_vKill) == PACKET_DISABLE)
9356     return -1;
9357
9358   /* Tell the remote target to detach.  */
9359   xsnprintf (rs->buf, get_remote_packet_size (), "vKill;%x", pid);
9360   putpkt (rs->buf);
9361   getpkt (&rs->buf, &rs->buf_size, 0);
9362
9363   switch (packet_ok (rs->buf,
9364                      &remote_protocol_packets[PACKET_vKill]))
9365     {
9366     case PACKET_OK:
9367       return 0;
9368     case PACKET_ERROR:
9369       return 1;
9370     case PACKET_UNKNOWN:
9371       return -1;
9372     default:
9373       internal_error (__FILE__, __LINE__, _("Bad result from packet_ok"));
9374     }
9375 }
9376
9377 /* Send a kill request to the target using the 'k' packet.  */
9378
9379 static void
9380 remote_kill_k (void)
9381 {
9382   /* Catch errors so the user can quit from gdb even when we
9383      aren't on speaking terms with the remote system.  */
9384   TRY
9385     {
9386       putpkt ("k");
9387     }
9388   CATCH (ex, RETURN_MASK_ERROR)
9389     {
9390       if (ex.error == TARGET_CLOSE_ERROR)
9391         {
9392           /* If we got an (EOF) error that caused the target
9393              to go away, then we're done, that's what we wanted.
9394              "k" is susceptible to cause a premature EOF, given
9395              that the remote server isn't actually required to
9396              reply to "k", and it can happen that it doesn't
9397              even get to reply ACK to the "k".  */
9398           return;
9399         }
9400
9401       /* Otherwise, something went wrong.  We didn't actually kill
9402          the target.  Just propagate the exception, and let the
9403          user or higher layers decide what to do.  */
9404       throw_exception (ex);
9405     }
9406   END_CATCH
9407 }
9408
9409 static void
9410 remote_mourn (struct target_ops *target)
9411 {
9412   struct remote_state *rs = get_remote_state ();
9413
9414   /* In 'target remote' mode with one inferior, we close the connection.  */
9415   if (!rs->extended && number_of_live_inferiors () <= 1)
9416     {
9417       unpush_target (target);
9418
9419       /* remote_close takes care of doing most of the clean up.  */
9420       generic_mourn_inferior ();
9421       return;
9422     }
9423
9424   /* In case we got here due to an error, but we're going to stay
9425      connected.  */
9426   rs->waiting_for_stop_reply = 0;
9427
9428   /* If the current general thread belonged to the process we just
9429      detached from or has exited, the remote side current general
9430      thread becomes undefined.  Considering a case like this:
9431
9432      - We just got here due to a detach.
9433      - The process that we're detaching from happens to immediately
9434        report a global breakpoint being hit in non-stop mode, in the
9435        same thread we had selected before.
9436      - GDB attaches to this process again.
9437      - This event happens to be the next event we handle.
9438
9439      GDB would consider that the current general thread didn't need to
9440      be set on the stub side (with Hg), since for all it knew,
9441      GENERAL_THREAD hadn't changed.
9442
9443      Notice that although in all-stop mode, the remote server always
9444      sets the current thread to the thread reporting the stop event,
9445      that doesn't happen in non-stop mode; in non-stop, the stub *must
9446      not* change the current thread when reporting a breakpoint hit,
9447      due to the decoupling of event reporting and event handling.
9448
9449      To keep things simple, we always invalidate our notion of the
9450      current thread.  */
9451   record_currthread (rs, minus_one_ptid);
9452
9453   /* Call common code to mark the inferior as not running.  */
9454   generic_mourn_inferior ();
9455
9456   if (!have_inferiors ())
9457     {
9458       if (!remote_multi_process_p (rs))
9459         {
9460           /* Check whether the target is running now - some remote stubs
9461              automatically restart after kill.  */
9462           putpkt ("?");
9463           getpkt (&rs->buf, &rs->buf_size, 0);
9464
9465           if (rs->buf[0] == 'S' || rs->buf[0] == 'T')
9466             {
9467               /* Assume that the target has been restarted.  Set
9468                  inferior_ptid so that bits of core GDB realizes
9469                  there's something here, e.g., so that the user can
9470                  say "kill" again.  */
9471               inferior_ptid = magic_null_ptid;
9472             }
9473         }
9474     }
9475 }
9476
9477 static int
9478 extended_remote_supports_disable_randomization (struct target_ops *self)
9479 {
9480   return packet_support (PACKET_QDisableRandomization) == PACKET_ENABLE;
9481 }
9482
9483 static void
9484 extended_remote_disable_randomization (int val)
9485 {
9486   struct remote_state *rs = get_remote_state ();
9487   char *reply;
9488
9489   xsnprintf (rs->buf, get_remote_packet_size (), "QDisableRandomization:%x",
9490              val);
9491   putpkt (rs->buf);
9492   reply = remote_get_noisy_reply ();
9493   if (*reply == '\0')
9494     error (_("Target does not support QDisableRandomization."));
9495   if (strcmp (reply, "OK") != 0)
9496     error (_("Bogus QDisableRandomization reply from target: %s"), reply);
9497 }
9498
9499 static int
9500 extended_remote_run (const std::string &args)
9501 {
9502   struct remote_state *rs = get_remote_state ();
9503   int len;
9504   const char *remote_exec_file = get_remote_exec_file ();
9505
9506   /* If the user has disabled vRun support, or we have detected that
9507      support is not available, do not try it.  */
9508   if (packet_support (PACKET_vRun) == PACKET_DISABLE)
9509     return -1;
9510
9511   strcpy (rs->buf, "vRun;");
9512   len = strlen (rs->buf);
9513
9514   if (strlen (remote_exec_file) * 2 + len >= get_remote_packet_size ())
9515     error (_("Remote file name too long for run packet"));
9516   len += 2 * bin2hex ((gdb_byte *) remote_exec_file, rs->buf + len,
9517                       strlen (remote_exec_file));
9518
9519   if (!args.empty ())
9520     {
9521       int i;
9522
9523       gdb_argv argv (args.c_str ());
9524       for (i = 0; argv[i] != NULL; i++)
9525         {
9526           if (strlen (argv[i]) * 2 + 1 + len >= get_remote_packet_size ())
9527             error (_("Argument list too long for run packet"));
9528           rs->buf[len++] = ';';
9529           len += 2 * bin2hex ((gdb_byte *) argv[i], rs->buf + len,
9530                               strlen (argv[i]));
9531         }
9532     }
9533
9534   rs->buf[len++] = '\0';
9535
9536   putpkt (rs->buf);
9537   getpkt (&rs->buf, &rs->buf_size, 0);
9538
9539   switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_vRun]))
9540     {
9541     case PACKET_OK:
9542       /* We have a wait response.  All is well.  */
9543       return 0;
9544     case PACKET_UNKNOWN:
9545       return -1;
9546     case PACKET_ERROR:
9547       if (remote_exec_file[0] == '\0')
9548         error (_("Running the default executable on the remote target failed; "
9549                  "try \"set remote exec-file\"?"));
9550       else
9551         error (_("Running \"%s\" on the remote target failed"),
9552                remote_exec_file);
9553     default:
9554       gdb_assert_not_reached (_("bad switch"));
9555     }
9556 }
9557
9558 /* Helper function to send set/unset environment packets.  ACTION is
9559    either "set" or "unset".  PACKET is either "QEnvironmentHexEncoded"
9560    or "QEnvironmentUnsetVariable".  VALUE is the variable to be
9561    sent.  */
9562
9563 static void
9564 send_environment_packet (struct remote_state *rs,
9565                          const char *action,
9566                          const char *packet,
9567                          const char *value)
9568 {
9569   /* Convert the environment variable to an hex string, which
9570      is the best format to be transmitted over the wire.  */
9571   std::string encoded_value = bin2hex ((const gdb_byte *) value,
9572                                          strlen (value));
9573
9574   xsnprintf (rs->buf, get_remote_packet_size (),
9575              "%s:%s", packet, encoded_value.c_str ());
9576
9577   putpkt (rs->buf);
9578   getpkt (&rs->buf, &rs->buf_size, 0);
9579   if (strcmp (rs->buf, "OK") != 0)
9580     warning (_("Unable to %s environment variable '%s' on remote."),
9581              action, value);
9582 }
9583
9584 /* Helper function to handle the QEnvironment* packets.  */
9585
9586 static void
9587 extended_remote_environment_support (struct remote_state *rs)
9588 {
9589   if (packet_support (PACKET_QEnvironmentReset) != PACKET_DISABLE)
9590     {
9591       putpkt ("QEnvironmentReset");
9592       getpkt (&rs->buf, &rs->buf_size, 0);
9593       if (strcmp (rs->buf, "OK") != 0)
9594         warning (_("Unable to reset environment on remote."));
9595     }
9596
9597   gdb_environ *e = &current_inferior ()->environment;
9598
9599   if (packet_support (PACKET_QEnvironmentHexEncoded) != PACKET_DISABLE)
9600     for (const std::string &el : e->user_set_env ())
9601       send_environment_packet (rs, "set", "QEnvironmentHexEncoded",
9602                                el.c_str ());
9603
9604   if (packet_support (PACKET_QEnvironmentUnset) != PACKET_DISABLE)
9605     for (const std::string &el : e->user_unset_env ())
9606       send_environment_packet (rs, "unset", "QEnvironmentUnset", el.c_str ());
9607 }
9608
9609 /* Helper function to set the current working directory for the
9610    inferior in the remote target.  */
9611
9612 static void
9613 extended_remote_set_inferior_cwd (struct remote_state *rs)
9614 {
9615   if (packet_support (PACKET_QSetWorkingDir) != PACKET_DISABLE)
9616     {
9617       const char *inferior_cwd = get_inferior_cwd ();
9618
9619       if (inferior_cwd != NULL)
9620         {
9621           std::string hexpath = bin2hex ((const gdb_byte *) inferior_cwd,
9622                                          strlen (inferior_cwd));
9623
9624           xsnprintf (rs->buf, get_remote_packet_size (),
9625                      "QSetWorkingDir:%s", hexpath.c_str ());
9626         }
9627       else
9628         {
9629           /* An empty inferior_cwd means that the user wants us to
9630              reset the remote server's inferior's cwd.  */
9631           xsnprintf (rs->buf, get_remote_packet_size (),
9632                      "QSetWorkingDir:");
9633         }
9634
9635       putpkt (rs->buf);
9636       getpkt (&rs->buf, &rs->buf_size, 0);
9637       if (packet_ok (rs->buf,
9638                      &remote_protocol_packets[PACKET_QSetWorkingDir])
9639           != PACKET_OK)
9640         error (_("\
9641 Remote replied unexpectedly while setting the inferior's working\n\
9642 directory: %s"),
9643                rs->buf);
9644
9645     }
9646 }
9647
9648 /* In the extended protocol we want to be able to do things like
9649    "run" and have them basically work as expected.  So we need
9650    a special create_inferior function.  We support changing the
9651    executable file and the command line arguments, but not the
9652    environment.  */
9653
9654 static void
9655 extended_remote_create_inferior (struct target_ops *ops,
9656                                  const char *exec_file,
9657                                  const std::string &args,
9658                                  char **env, int from_tty)
9659 {
9660   int run_worked;
9661   char *stop_reply;
9662   struct remote_state *rs = get_remote_state ();
9663   const char *remote_exec_file = get_remote_exec_file ();
9664
9665   /* If running asynchronously, register the target file descriptor
9666      with the event loop.  */
9667   if (target_can_async_p ())
9668     target_async (1);
9669
9670   /* Disable address space randomization if requested (and supported).  */
9671   if (extended_remote_supports_disable_randomization (ops))
9672     extended_remote_disable_randomization (disable_randomization);
9673
9674   /* If startup-with-shell is on, we inform gdbserver to start the
9675      remote inferior using a shell.  */
9676   if (packet_support (PACKET_QStartupWithShell) != PACKET_DISABLE)
9677     {
9678       xsnprintf (rs->buf, get_remote_packet_size (),
9679                  "QStartupWithShell:%d", startup_with_shell ? 1 : 0);
9680       putpkt (rs->buf);
9681       getpkt (&rs->buf, &rs->buf_size, 0);
9682       if (strcmp (rs->buf, "OK") != 0)
9683         error (_("\
9684 Remote replied unexpectedly while setting startup-with-shell: %s"),
9685                rs->buf);
9686     }
9687
9688   extended_remote_environment_support (rs);
9689
9690   extended_remote_set_inferior_cwd (rs);
9691
9692   /* Now restart the remote server.  */
9693   run_worked = extended_remote_run (args) != -1;
9694   if (!run_worked)
9695     {
9696       /* vRun was not supported.  Fail if we need it to do what the
9697          user requested.  */
9698       if (remote_exec_file[0])
9699         error (_("Remote target does not support \"set remote exec-file\""));
9700       if (!args.empty ())
9701         error (_("Remote target does not support \"set args\" or run <ARGS>"));
9702
9703       /* Fall back to "R".  */
9704       extended_remote_restart ();
9705     }
9706
9707   if (!have_inferiors ())
9708     {
9709       /* Clean up from the last time we ran, before we mark the target
9710          running again.  This will mark breakpoints uninserted, and
9711          get_offsets may insert breakpoints.  */
9712       init_thread_list ();
9713       init_wait_for_inferior ();
9714     }
9715
9716   /* vRun's success return is a stop reply.  */
9717   stop_reply = run_worked ? rs->buf : NULL;
9718   add_current_inferior_and_thread (stop_reply);
9719
9720   /* Get updated offsets, if the stub uses qOffsets.  */
9721   get_offsets ();
9722 }
9723 \f
9724
9725 /* Given a location's target info BP_TGT and the packet buffer BUF,  output
9726    the list of conditions (in agent expression bytecode format), if any, the
9727    target needs to evaluate.  The output is placed into the packet buffer
9728    started from BUF and ended at BUF_END.  */
9729
9730 static int
9731 remote_add_target_side_condition (struct gdbarch *gdbarch,
9732                                   struct bp_target_info *bp_tgt, char *buf,
9733                                   char *buf_end)
9734 {
9735   if (bp_tgt->conditions.empty ())
9736     return 0;
9737
9738   buf += strlen (buf);
9739   xsnprintf (buf, buf_end - buf, "%s", ";");
9740   buf++;
9741
9742   /* Send conditions to the target.  */
9743   for (agent_expr *aexpr : bp_tgt->conditions)
9744     {
9745       xsnprintf (buf, buf_end - buf, "X%x,", aexpr->len);
9746       buf += strlen (buf);
9747       for (int i = 0; i < aexpr->len; ++i)
9748         buf = pack_hex_byte (buf, aexpr->buf[i]);
9749       *buf = '\0';
9750     }
9751   return 0;
9752 }
9753
9754 static void
9755 remote_add_target_side_commands (struct gdbarch *gdbarch,
9756                                  struct bp_target_info *bp_tgt, char *buf)
9757 {
9758   if (bp_tgt->tcommands.empty ())
9759     return;
9760
9761   buf += strlen (buf);
9762
9763   sprintf (buf, ";cmds:%x,", bp_tgt->persist);
9764   buf += strlen (buf);
9765
9766   /* Concatenate all the agent expressions that are commands into the
9767      cmds parameter.  */
9768   for (agent_expr *aexpr : bp_tgt->tcommands)
9769     {
9770       sprintf (buf, "X%x,", aexpr->len);
9771       buf += strlen (buf);
9772       for (int i = 0; i < aexpr->len; ++i)
9773         buf = pack_hex_byte (buf, aexpr->buf[i]);
9774       *buf = '\0';
9775     }
9776 }
9777
9778 /* Insert a breakpoint.  On targets that have software breakpoint
9779    support, we ask the remote target to do the work; on targets
9780    which don't, we insert a traditional memory breakpoint.  */
9781
9782 static int
9783 remote_insert_breakpoint (struct target_ops *ops,
9784                           struct gdbarch *gdbarch,
9785                           struct bp_target_info *bp_tgt)
9786 {
9787   /* Try the "Z" s/w breakpoint packet if it is not already disabled.
9788      If it succeeds, then set the support to PACKET_ENABLE.  If it
9789      fails, and the user has explicitly requested the Z support then
9790      report an error, otherwise, mark it disabled and go on.  */
9791
9792   if (packet_support (PACKET_Z0) != PACKET_DISABLE)
9793     {
9794       CORE_ADDR addr = bp_tgt->reqstd_address;
9795       struct remote_state *rs;
9796       char *p, *endbuf;
9797       int bpsize;
9798
9799       /* Make sure the remote is pointing at the right process, if
9800          necessary.  */
9801       if (!gdbarch_has_global_breakpoints (target_gdbarch ()))
9802         set_general_process ();
9803
9804       rs = get_remote_state ();
9805       p = rs->buf;
9806       endbuf = rs->buf + get_remote_packet_size ();
9807
9808       *(p++) = 'Z';
9809       *(p++) = '0';
9810       *(p++) = ',';
9811       addr = (ULONGEST) remote_address_masked (addr);
9812       p += hexnumstr (p, addr);
9813       xsnprintf (p, endbuf - p, ",%d", bp_tgt->kind);
9814
9815       if (remote_supports_cond_breakpoints (ops))
9816         remote_add_target_side_condition (gdbarch, bp_tgt, p, endbuf);
9817
9818       if (remote_can_run_breakpoint_commands (ops))
9819         remote_add_target_side_commands (gdbarch, bp_tgt, p);
9820
9821       putpkt (rs->buf);
9822       getpkt (&rs->buf, &rs->buf_size, 0);
9823
9824       switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_Z0]))
9825         {
9826         case PACKET_ERROR:
9827           return -1;
9828         case PACKET_OK:
9829           return 0;
9830         case PACKET_UNKNOWN:
9831           break;
9832         }
9833     }
9834
9835   /* If this breakpoint has target-side commands but this stub doesn't
9836      support Z0 packets, throw error.  */
9837   if (!bp_tgt->tcommands.empty ())
9838     throw_error (NOT_SUPPORTED_ERROR, _("\
9839 Target doesn't support breakpoints that have target side commands."));
9840
9841   return memory_insert_breakpoint (ops, gdbarch, bp_tgt);
9842 }
9843
9844 static int
9845 remote_remove_breakpoint (struct target_ops *ops,
9846                           struct gdbarch *gdbarch,
9847                           struct bp_target_info *bp_tgt,
9848                           enum remove_bp_reason reason)
9849 {
9850   CORE_ADDR addr = bp_tgt->placed_address;
9851   struct remote_state *rs = get_remote_state ();
9852
9853   if (packet_support (PACKET_Z0) != PACKET_DISABLE)
9854     {
9855       char *p = rs->buf;
9856       char *endbuf = rs->buf + get_remote_packet_size ();
9857
9858       /* Make sure the remote is pointing at the right process, if
9859          necessary.  */
9860       if (!gdbarch_has_global_breakpoints (target_gdbarch ()))
9861         set_general_process ();
9862
9863       *(p++) = 'z';
9864       *(p++) = '0';
9865       *(p++) = ',';
9866
9867       addr = (ULONGEST) remote_address_masked (bp_tgt->placed_address);
9868       p += hexnumstr (p, addr);
9869       xsnprintf (p, endbuf - p, ",%d", bp_tgt->kind);
9870
9871       putpkt (rs->buf);
9872       getpkt (&rs->buf, &rs->buf_size, 0);
9873
9874       return (rs->buf[0] == 'E');
9875     }
9876
9877   return memory_remove_breakpoint (ops, gdbarch, bp_tgt, reason);
9878 }
9879
9880 static enum Z_packet_type
9881 watchpoint_to_Z_packet (int type)
9882 {
9883   switch (type)
9884     {
9885     case hw_write:
9886       return Z_PACKET_WRITE_WP;
9887       break;
9888     case hw_read:
9889       return Z_PACKET_READ_WP;
9890       break;
9891     case hw_access:
9892       return Z_PACKET_ACCESS_WP;
9893       break;
9894     default:
9895       internal_error (__FILE__, __LINE__,
9896                       _("hw_bp_to_z: bad watchpoint type %d"), type);
9897     }
9898 }
9899
9900 static int
9901 remote_insert_watchpoint (struct target_ops *self, CORE_ADDR addr, int len,
9902                           enum target_hw_bp_type type, struct expression *cond)
9903 {
9904   struct remote_state *rs = get_remote_state ();
9905   char *endbuf = rs->buf + get_remote_packet_size ();
9906   char *p;
9907   enum Z_packet_type packet = watchpoint_to_Z_packet (type);
9908
9909   if (packet_support (PACKET_Z0 + packet) == PACKET_DISABLE)
9910     return 1;
9911
9912   /* Make sure the remote is pointing at the right process, if
9913      necessary.  */
9914   if (!gdbarch_has_global_breakpoints (target_gdbarch ()))
9915     set_general_process ();
9916
9917   xsnprintf (rs->buf, endbuf - rs->buf, "Z%x,", packet);
9918   p = strchr (rs->buf, '\0');
9919   addr = remote_address_masked (addr);
9920   p += hexnumstr (p, (ULONGEST) addr);
9921   xsnprintf (p, endbuf - p, ",%x", len);
9922
9923   putpkt (rs->buf);
9924   getpkt (&rs->buf, &rs->buf_size, 0);
9925
9926   switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_Z0 + packet]))
9927     {
9928     case PACKET_ERROR:
9929       return -1;
9930     case PACKET_UNKNOWN:
9931       return 1;
9932     case PACKET_OK:
9933       return 0;
9934     }
9935   internal_error (__FILE__, __LINE__,
9936                   _("remote_insert_watchpoint: reached end of function"));
9937 }
9938
9939 static int
9940 remote_watchpoint_addr_within_range (struct target_ops *target, CORE_ADDR addr,
9941                                      CORE_ADDR start, int length)
9942 {
9943   CORE_ADDR diff = remote_address_masked (addr - start);
9944
9945   return diff < length;
9946 }
9947
9948
9949 static int
9950 remote_remove_watchpoint (struct target_ops *self, CORE_ADDR addr, int len,
9951                           enum target_hw_bp_type type, struct expression *cond)
9952 {
9953   struct remote_state *rs = get_remote_state ();
9954   char *endbuf = rs->buf + get_remote_packet_size ();
9955   char *p;
9956   enum Z_packet_type packet = watchpoint_to_Z_packet (type);
9957
9958   if (packet_support (PACKET_Z0 + packet) == PACKET_DISABLE)
9959     return -1;
9960
9961   /* Make sure the remote is pointing at the right process, if
9962      necessary.  */
9963   if (!gdbarch_has_global_breakpoints (target_gdbarch ()))
9964     set_general_process ();
9965
9966   xsnprintf (rs->buf, endbuf - rs->buf, "z%x,", packet);
9967   p = strchr (rs->buf, '\0');
9968   addr = remote_address_masked (addr);
9969   p += hexnumstr (p, (ULONGEST) addr);
9970   xsnprintf (p, endbuf - p, ",%x", len);
9971   putpkt (rs->buf);
9972   getpkt (&rs->buf, &rs->buf_size, 0);
9973
9974   switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_Z0 + packet]))
9975     {
9976     case PACKET_ERROR:
9977     case PACKET_UNKNOWN:
9978       return -1;
9979     case PACKET_OK:
9980       return 0;
9981     }
9982   internal_error (__FILE__, __LINE__,
9983                   _("remote_remove_watchpoint: reached end of function"));
9984 }
9985
9986
9987 int remote_hw_watchpoint_limit = -1;
9988 int remote_hw_watchpoint_length_limit = -1;
9989 int remote_hw_breakpoint_limit = -1;
9990
9991 static int
9992 remote_region_ok_for_hw_watchpoint (struct target_ops *self,
9993                                     CORE_ADDR addr, int len)
9994 {
9995   if (remote_hw_watchpoint_length_limit == 0)
9996     return 0;
9997   else if (remote_hw_watchpoint_length_limit < 0)
9998     return 1;
9999   else if (len <= remote_hw_watchpoint_length_limit)
10000     return 1;
10001   else
10002     return 0;
10003 }
10004
10005 static int
10006 remote_check_watch_resources (struct target_ops *self,
10007                               enum bptype type, int cnt, int ot)
10008 {
10009   if (type == bp_hardware_breakpoint)
10010     {
10011       if (remote_hw_breakpoint_limit == 0)
10012         return 0;
10013       else if (remote_hw_breakpoint_limit < 0)
10014         return 1;
10015       else if (cnt <= remote_hw_breakpoint_limit)
10016         return 1;
10017     }
10018   else
10019     {
10020       if (remote_hw_watchpoint_limit == 0)
10021         return 0;
10022       else if (remote_hw_watchpoint_limit < 0)
10023         return 1;
10024       else if (ot)
10025         return -1;
10026       else if (cnt <= remote_hw_watchpoint_limit)
10027         return 1;
10028     }
10029   return -1;
10030 }
10031
10032 /* The to_stopped_by_sw_breakpoint method of target remote.  */
10033
10034 static int
10035 remote_stopped_by_sw_breakpoint (struct target_ops *ops)
10036 {
10037   struct thread_info *thread = inferior_thread ();
10038
10039   return (thread->priv != NULL
10040           && thread->priv->stop_reason == TARGET_STOPPED_BY_SW_BREAKPOINT);
10041 }
10042
10043 /* The to_supports_stopped_by_sw_breakpoint method of target
10044    remote.  */
10045
10046 static int
10047 remote_supports_stopped_by_sw_breakpoint (struct target_ops *ops)
10048 {
10049   return (packet_support (PACKET_swbreak_feature) == PACKET_ENABLE);
10050 }
10051
10052 /* The to_stopped_by_hw_breakpoint method of target remote.  */
10053
10054 static int
10055 remote_stopped_by_hw_breakpoint (struct target_ops *ops)
10056 {
10057   struct thread_info *thread = inferior_thread ();
10058
10059   return (thread->priv != NULL
10060           && thread->priv->stop_reason == TARGET_STOPPED_BY_HW_BREAKPOINT);
10061 }
10062
10063 /* The to_supports_stopped_by_hw_breakpoint method of target
10064    remote.  */
10065
10066 static int
10067 remote_supports_stopped_by_hw_breakpoint (struct target_ops *ops)
10068 {
10069   return (packet_support (PACKET_hwbreak_feature) == PACKET_ENABLE);
10070 }
10071
10072 static int
10073 remote_stopped_by_watchpoint (struct target_ops *ops)
10074 {
10075   struct thread_info *thread = inferior_thread ();
10076
10077   return (thread->priv != NULL
10078           && thread->priv->stop_reason == TARGET_STOPPED_BY_WATCHPOINT);
10079 }
10080
10081 static int
10082 remote_stopped_data_address (struct target_ops *target, CORE_ADDR *addr_p)
10083 {
10084   struct thread_info *thread = inferior_thread ();
10085
10086   if (thread->priv != NULL
10087       && thread->priv->stop_reason == TARGET_STOPPED_BY_WATCHPOINT)
10088     {
10089       *addr_p = thread->priv->watch_data_address;
10090       return 1;
10091     }
10092
10093   return 0;
10094 }
10095
10096
10097 static int
10098 remote_insert_hw_breakpoint (struct target_ops *self, struct gdbarch *gdbarch,
10099                              struct bp_target_info *bp_tgt)
10100 {
10101   CORE_ADDR addr = bp_tgt->reqstd_address;
10102   struct remote_state *rs;
10103   char *p, *endbuf;
10104   char *message;
10105
10106   if (packet_support (PACKET_Z1) == PACKET_DISABLE)
10107     return -1;
10108
10109   /* Make sure the remote is pointing at the right process, if
10110      necessary.  */
10111   if (!gdbarch_has_global_breakpoints (target_gdbarch ()))
10112     set_general_process ();
10113
10114   rs = get_remote_state ();
10115   p = rs->buf;
10116   endbuf = rs->buf + get_remote_packet_size ();
10117
10118   *(p++) = 'Z';
10119   *(p++) = '1';
10120   *(p++) = ',';
10121
10122   addr = remote_address_masked (addr);
10123   p += hexnumstr (p, (ULONGEST) addr);
10124   xsnprintf (p, endbuf - p, ",%x", bp_tgt->kind);
10125
10126   if (remote_supports_cond_breakpoints (self))
10127     remote_add_target_side_condition (gdbarch, bp_tgt, p, endbuf);
10128
10129   if (remote_can_run_breakpoint_commands (self))
10130     remote_add_target_side_commands (gdbarch, bp_tgt, p);
10131
10132   putpkt (rs->buf);
10133   getpkt (&rs->buf, &rs->buf_size, 0);
10134
10135   switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_Z1]))
10136     {
10137     case PACKET_ERROR:
10138       if (rs->buf[1] == '.')
10139         {
10140           message = strchr (rs->buf + 2, '.');
10141           if (message)
10142             error (_("Remote failure reply: %s"), message + 1);
10143         }
10144       return -1;
10145     case PACKET_UNKNOWN:
10146       return -1;
10147     case PACKET_OK:
10148       return 0;
10149     }
10150   internal_error (__FILE__, __LINE__,
10151                   _("remote_insert_hw_breakpoint: reached end of function"));
10152 }
10153
10154
10155 static int
10156 remote_remove_hw_breakpoint (struct target_ops *self, struct gdbarch *gdbarch,
10157                              struct bp_target_info *bp_tgt)
10158 {
10159   CORE_ADDR addr;
10160   struct remote_state *rs = get_remote_state ();
10161   char *p = rs->buf;
10162   char *endbuf = rs->buf + get_remote_packet_size ();
10163
10164   if (packet_support (PACKET_Z1) == PACKET_DISABLE)
10165     return -1;
10166
10167   /* Make sure the remote is pointing at the right process, if
10168      necessary.  */
10169   if (!gdbarch_has_global_breakpoints (target_gdbarch ()))
10170     set_general_process ();
10171
10172   *(p++) = 'z';
10173   *(p++) = '1';
10174   *(p++) = ',';
10175
10176   addr = remote_address_masked (bp_tgt->placed_address);
10177   p += hexnumstr (p, (ULONGEST) addr);
10178   xsnprintf (p, endbuf  - p, ",%x", bp_tgt->kind);
10179
10180   putpkt (rs->buf);
10181   getpkt (&rs->buf, &rs->buf_size, 0);
10182
10183   switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_Z1]))
10184     {
10185     case PACKET_ERROR:
10186     case PACKET_UNKNOWN:
10187       return -1;
10188     case PACKET_OK:
10189       return 0;
10190     }
10191   internal_error (__FILE__, __LINE__,
10192                   _("remote_remove_hw_breakpoint: reached end of function"));
10193 }
10194
10195 /* Verify memory using the "qCRC:" request.  */
10196
10197 static int
10198 remote_verify_memory (struct target_ops *ops,
10199                       const gdb_byte *data, CORE_ADDR lma, ULONGEST size)
10200 {
10201   struct remote_state *rs = get_remote_state ();
10202   unsigned long host_crc, target_crc;
10203   char *tmp;
10204
10205   /* It doesn't make sense to use qCRC if the remote target is
10206      connected but not running.  */
10207   if (target_has_execution && packet_support (PACKET_qCRC) != PACKET_DISABLE)
10208     {
10209       enum packet_result result;
10210
10211       /* Make sure the remote is pointing at the right process.  */
10212       set_general_process ();
10213
10214       /* FIXME: assumes lma can fit into long.  */
10215       xsnprintf (rs->buf, get_remote_packet_size (), "qCRC:%lx,%lx",
10216                  (long) lma, (long) size);
10217       putpkt (rs->buf);
10218
10219       /* Be clever; compute the host_crc before waiting for target
10220          reply.  */
10221       host_crc = xcrc32 (data, size, 0xffffffff);
10222
10223       getpkt (&rs->buf, &rs->buf_size, 0);
10224
10225       result = packet_ok (rs->buf,
10226                           &remote_protocol_packets[PACKET_qCRC]);
10227       if (result == PACKET_ERROR)
10228         return -1;
10229       else if (result == PACKET_OK)
10230         {
10231           for (target_crc = 0, tmp = &rs->buf[1]; *tmp; tmp++)
10232             target_crc = target_crc * 16 + fromhex (*tmp);
10233
10234           return (host_crc == target_crc);
10235         }
10236     }
10237
10238   return simple_verify_memory (ops, data, lma, size);
10239 }
10240
10241 /* compare-sections command
10242
10243    With no arguments, compares each loadable section in the exec bfd
10244    with the same memory range on the target, and reports mismatches.
10245    Useful for verifying the image on the target against the exec file.  */
10246
10247 static void
10248 compare_sections_command (const char *args, int from_tty)
10249 {
10250   asection *s;
10251   gdb_byte *sectdata;
10252   const char *sectname;
10253   bfd_size_type size;
10254   bfd_vma lma;
10255   int matched = 0;
10256   int mismatched = 0;
10257   int res;
10258   int read_only = 0;
10259
10260   if (!exec_bfd)
10261     error (_("command cannot be used without an exec file"));
10262
10263   /* Make sure the remote is pointing at the right process.  */
10264   set_general_process ();
10265
10266   if (args != NULL && strcmp (args, "-r") == 0)
10267     {
10268       read_only = 1;
10269       args = NULL;
10270     }
10271
10272   for (s = exec_bfd->sections; s; s = s->next)
10273     {
10274       if (!(s->flags & SEC_LOAD))
10275         continue;               /* Skip non-loadable section.  */
10276
10277       if (read_only && (s->flags & SEC_READONLY) == 0)
10278         continue;               /* Skip writeable sections */
10279
10280       size = bfd_get_section_size (s);
10281       if (size == 0)
10282         continue;               /* Skip zero-length section.  */
10283
10284       sectname = bfd_get_section_name (exec_bfd, s);
10285       if (args && strcmp (args, sectname) != 0)
10286         continue;               /* Not the section selected by user.  */
10287
10288       matched = 1;              /* Do this section.  */
10289       lma = s->lma;
10290
10291       gdb::byte_vector sectdata (size);
10292       bfd_get_section_contents (exec_bfd, s, sectdata.data (), 0, size);
10293
10294       res = target_verify_memory (sectdata.data (), lma, size);
10295
10296       if (res == -1)
10297         error (_("target memory fault, section %s, range %s -- %s"), sectname,
10298                paddress (target_gdbarch (), lma),
10299                paddress (target_gdbarch (), lma + size));
10300
10301       printf_filtered ("Section %s, range %s -- %s: ", sectname,
10302                        paddress (target_gdbarch (), lma),
10303                        paddress (target_gdbarch (), lma + size));
10304       if (res)
10305         printf_filtered ("matched.\n");
10306       else
10307         {
10308           printf_filtered ("MIS-MATCHED!\n");
10309           mismatched++;
10310         }
10311     }
10312   if (mismatched > 0)
10313     warning (_("One or more sections of the target image does not match\n\
10314 the loaded file\n"));
10315   if (args && !matched)
10316     printf_filtered (_("No loaded section named '%s'.\n"), args);
10317 }
10318
10319 /* Write LEN bytes from WRITEBUF into OBJECT_NAME/ANNEX at OFFSET
10320    into remote target.  The number of bytes written to the remote
10321    target is returned, or -1 for error.  */
10322
10323 static enum target_xfer_status
10324 remote_write_qxfer (struct target_ops *ops, const char *object_name,
10325                     const char *annex, const gdb_byte *writebuf, 
10326                     ULONGEST offset, LONGEST len, ULONGEST *xfered_len,
10327                     struct packet_config *packet)
10328 {
10329   int i, buf_len;
10330   ULONGEST n;
10331   struct remote_state *rs = get_remote_state ();
10332   int max_size = get_memory_write_packet_size (); 
10333
10334   if (packet->support == PACKET_DISABLE)
10335     return TARGET_XFER_E_IO;
10336
10337   /* Insert header.  */
10338   i = snprintf (rs->buf, max_size, 
10339                 "qXfer:%s:write:%s:%s:",
10340                 object_name, annex ? annex : "",
10341                 phex_nz (offset, sizeof offset));
10342   max_size -= (i + 1);
10343
10344   /* Escape as much data as fits into rs->buf.  */
10345   buf_len = remote_escape_output 
10346     (writebuf, len, 1, (gdb_byte *) rs->buf + i, &max_size, max_size);
10347
10348   if (putpkt_binary (rs->buf, i + buf_len) < 0
10349       || getpkt_sane (&rs->buf, &rs->buf_size, 0) < 0
10350       || packet_ok (rs->buf, packet) != PACKET_OK)
10351     return TARGET_XFER_E_IO;
10352
10353   unpack_varlen_hex (rs->buf, &n);
10354
10355   *xfered_len = n;
10356   return (*xfered_len != 0) ? TARGET_XFER_OK : TARGET_XFER_EOF;
10357 }
10358
10359 /* Read OBJECT_NAME/ANNEX from the remote target using a qXfer packet.
10360    Data at OFFSET, of up to LEN bytes, is read into READBUF; the
10361    number of bytes read is returned, or 0 for EOF, or -1 for error.
10362    The number of bytes read may be less than LEN without indicating an
10363    EOF.  PACKET is checked and updated to indicate whether the remote
10364    target supports this object.  */
10365
10366 static enum target_xfer_status
10367 remote_read_qxfer (struct target_ops *ops, const char *object_name,
10368                    const char *annex,
10369                    gdb_byte *readbuf, ULONGEST offset, LONGEST len,
10370                    ULONGEST *xfered_len,
10371                    struct packet_config *packet)
10372 {
10373   struct remote_state *rs = get_remote_state ();
10374   LONGEST i, n, packet_len;
10375
10376   if (packet->support == PACKET_DISABLE)
10377     return TARGET_XFER_E_IO;
10378
10379   /* Check whether we've cached an end-of-object packet that matches
10380      this request.  */
10381   if (rs->finished_object)
10382     {
10383       if (strcmp (object_name, rs->finished_object) == 0
10384           && strcmp (annex ? annex : "", rs->finished_annex) == 0
10385           && offset == rs->finished_offset)
10386         return TARGET_XFER_EOF;
10387
10388
10389       /* Otherwise, we're now reading something different.  Discard
10390          the cache.  */
10391       xfree (rs->finished_object);
10392       xfree (rs->finished_annex);
10393       rs->finished_object = NULL;
10394       rs->finished_annex = NULL;
10395     }
10396
10397   /* Request only enough to fit in a single packet.  The actual data
10398      may not, since we don't know how much of it will need to be escaped;
10399      the target is free to respond with slightly less data.  We subtract
10400      five to account for the response type and the protocol frame.  */
10401   n = std::min<LONGEST> (get_remote_packet_size () - 5, len);
10402   snprintf (rs->buf, get_remote_packet_size () - 4, "qXfer:%s:read:%s:%s,%s",
10403             object_name, annex ? annex : "",
10404             phex_nz (offset, sizeof offset),
10405             phex_nz (n, sizeof n));
10406   i = putpkt (rs->buf);
10407   if (i < 0)
10408     return TARGET_XFER_E_IO;
10409
10410   rs->buf[0] = '\0';
10411   packet_len = getpkt_sane (&rs->buf, &rs->buf_size, 0);
10412   if (packet_len < 0 || packet_ok (rs->buf, packet) != PACKET_OK)
10413     return TARGET_XFER_E_IO;
10414
10415   if (rs->buf[0] != 'l' && rs->buf[0] != 'm')
10416     error (_("Unknown remote qXfer reply: %s"), rs->buf);
10417
10418   /* 'm' means there is (or at least might be) more data after this
10419      batch.  That does not make sense unless there's at least one byte
10420      of data in this reply.  */
10421   if (rs->buf[0] == 'm' && packet_len == 1)
10422     error (_("Remote qXfer reply contained no data."));
10423
10424   /* Got some data.  */
10425   i = remote_unescape_input ((gdb_byte *) rs->buf + 1,
10426                              packet_len - 1, readbuf, n);
10427
10428   /* 'l' is an EOF marker, possibly including a final block of data,
10429      or possibly empty.  If we have the final block of a non-empty
10430      object, record this fact to bypass a subsequent partial read.  */
10431   if (rs->buf[0] == 'l' && offset + i > 0)
10432     {
10433       rs->finished_object = xstrdup (object_name);
10434       rs->finished_annex = xstrdup (annex ? annex : "");
10435       rs->finished_offset = offset + i;
10436     }
10437
10438   if (i == 0)
10439     return TARGET_XFER_EOF;
10440   else
10441     {
10442       *xfered_len = i;
10443       return TARGET_XFER_OK;
10444     }
10445 }
10446
10447 static enum target_xfer_status
10448 remote_xfer_partial (struct target_ops *ops, enum target_object object,
10449                      const char *annex, gdb_byte *readbuf,
10450                      const gdb_byte *writebuf, ULONGEST offset, ULONGEST len,
10451                      ULONGEST *xfered_len)
10452 {
10453   struct remote_state *rs;
10454   int i;
10455   char *p2;
10456   char query_type;
10457   int unit_size = gdbarch_addressable_memory_unit_size (target_gdbarch ());
10458
10459   set_remote_traceframe ();
10460   set_general_thread (inferior_ptid);
10461
10462   rs = get_remote_state ();
10463
10464   /* Handle memory using the standard memory routines.  */
10465   if (object == TARGET_OBJECT_MEMORY)
10466     {
10467       /* If the remote target is connected but not running, we should
10468          pass this request down to a lower stratum (e.g. the executable
10469          file).  */
10470       if (!target_has_execution)
10471         return TARGET_XFER_EOF;
10472
10473       if (writebuf != NULL)
10474         return remote_write_bytes (offset, writebuf, len, unit_size,
10475                                    xfered_len);
10476       else
10477         return remote_read_bytes (ops, offset, readbuf, len, unit_size,
10478                                   xfered_len);
10479     }
10480
10481   /* Handle SPU memory using qxfer packets.  */
10482   if (object == TARGET_OBJECT_SPU)
10483     {
10484       if (readbuf)
10485         return remote_read_qxfer (ops, "spu", annex, readbuf, offset, len,
10486                                   xfered_len, &remote_protocol_packets
10487                                   [PACKET_qXfer_spu_read]);
10488       else
10489         return remote_write_qxfer (ops, "spu", annex, writebuf, offset, len,
10490                                    xfered_len, &remote_protocol_packets
10491                                    [PACKET_qXfer_spu_write]);
10492     }
10493
10494   /* Handle extra signal info using qxfer packets.  */
10495   if (object == TARGET_OBJECT_SIGNAL_INFO)
10496     {
10497       if (readbuf)
10498         return remote_read_qxfer (ops, "siginfo", annex, readbuf, offset, len,
10499                                   xfered_len, &remote_protocol_packets
10500                                   [PACKET_qXfer_siginfo_read]);
10501       else
10502         return remote_write_qxfer (ops, "siginfo", annex,
10503                                    writebuf, offset, len, xfered_len,
10504                                    &remote_protocol_packets
10505                                    [PACKET_qXfer_siginfo_write]);
10506     }
10507
10508   if (object == TARGET_OBJECT_STATIC_TRACE_DATA)
10509     {
10510       if (readbuf)
10511         return remote_read_qxfer (ops, "statictrace", annex,
10512                                   readbuf, offset, len, xfered_len,
10513                                   &remote_protocol_packets
10514                                   [PACKET_qXfer_statictrace_read]);
10515       else
10516         return TARGET_XFER_E_IO;
10517     }
10518
10519   /* Only handle flash writes.  */
10520   if (writebuf != NULL)
10521     {
10522       switch (object)
10523         {
10524         case TARGET_OBJECT_FLASH:
10525           return remote_flash_write (ops, offset, len, xfered_len,
10526                                      writebuf);
10527
10528         default:
10529           return TARGET_XFER_E_IO;
10530         }
10531     }
10532
10533   /* Map pre-existing objects onto letters.  DO NOT do this for new
10534      objects!!!  Instead specify new query packets.  */
10535   switch (object)
10536     {
10537     case TARGET_OBJECT_AVR:
10538       query_type = 'R';
10539       break;
10540
10541     case TARGET_OBJECT_AUXV:
10542       gdb_assert (annex == NULL);
10543       return remote_read_qxfer (ops, "auxv", annex, readbuf, offset, len,
10544                                 xfered_len,
10545                                 &remote_protocol_packets[PACKET_qXfer_auxv]);
10546
10547     case TARGET_OBJECT_AVAILABLE_FEATURES:
10548       return remote_read_qxfer
10549         (ops, "features", annex, readbuf, offset, len, xfered_len,
10550          &remote_protocol_packets[PACKET_qXfer_features]);
10551
10552     case TARGET_OBJECT_LIBRARIES:
10553       return remote_read_qxfer
10554         (ops, "libraries", annex, readbuf, offset, len, xfered_len,
10555          &remote_protocol_packets[PACKET_qXfer_libraries]);
10556
10557     case TARGET_OBJECT_LIBRARIES_SVR4:
10558       return remote_read_qxfer
10559         (ops, "libraries-svr4", annex, readbuf, offset, len, xfered_len,
10560          &remote_protocol_packets[PACKET_qXfer_libraries_svr4]);
10561
10562     case TARGET_OBJECT_MEMORY_MAP:
10563       gdb_assert (annex == NULL);
10564       return remote_read_qxfer (ops, "memory-map", annex, readbuf, offset, len,
10565                                  xfered_len,
10566                                 &remote_protocol_packets[PACKET_qXfer_memory_map]);
10567
10568     case TARGET_OBJECT_OSDATA:
10569       /* Should only get here if we're connected.  */
10570       gdb_assert (rs->remote_desc);
10571       return remote_read_qxfer
10572         (ops, "osdata", annex, readbuf, offset, len, xfered_len,
10573         &remote_protocol_packets[PACKET_qXfer_osdata]);
10574
10575     case TARGET_OBJECT_THREADS:
10576       gdb_assert (annex == NULL);
10577       return remote_read_qxfer (ops, "threads", annex, readbuf, offset, len,
10578                                 xfered_len,
10579                                 &remote_protocol_packets[PACKET_qXfer_threads]);
10580
10581     case TARGET_OBJECT_TRACEFRAME_INFO:
10582       gdb_assert (annex == NULL);
10583       return remote_read_qxfer
10584         (ops, "traceframe-info", annex, readbuf, offset, len, xfered_len,
10585          &remote_protocol_packets[PACKET_qXfer_traceframe_info]);
10586
10587     case TARGET_OBJECT_FDPIC:
10588       return remote_read_qxfer (ops, "fdpic", annex, readbuf, offset, len,
10589                                 xfered_len,
10590                                 &remote_protocol_packets[PACKET_qXfer_fdpic]);
10591
10592     case TARGET_OBJECT_OPENVMS_UIB:
10593       return remote_read_qxfer (ops, "uib", annex, readbuf, offset, len,
10594                                 xfered_len,
10595                                 &remote_protocol_packets[PACKET_qXfer_uib]);
10596
10597     case TARGET_OBJECT_BTRACE:
10598       return remote_read_qxfer (ops, "btrace", annex, readbuf, offset, len,
10599                                 xfered_len,
10600         &remote_protocol_packets[PACKET_qXfer_btrace]);
10601
10602     case TARGET_OBJECT_BTRACE_CONF:
10603       return remote_read_qxfer (ops, "btrace-conf", annex, readbuf, offset,
10604                                 len, xfered_len,
10605         &remote_protocol_packets[PACKET_qXfer_btrace_conf]);
10606
10607     case TARGET_OBJECT_EXEC_FILE:
10608       return remote_read_qxfer (ops, "exec-file", annex, readbuf, offset,
10609                                 len, xfered_len,
10610         &remote_protocol_packets[PACKET_qXfer_exec_file]);
10611
10612     default:
10613       return TARGET_XFER_E_IO;
10614     }
10615
10616   /* Minimum outbuf size is get_remote_packet_size ().  If LEN is not
10617      large enough let the caller deal with it.  */
10618   if (len < get_remote_packet_size ())
10619     return TARGET_XFER_E_IO;
10620   len = get_remote_packet_size ();
10621
10622   /* Except for querying the minimum buffer size, target must be open.  */
10623   if (!rs->remote_desc)
10624     error (_("remote query is only available after target open"));
10625
10626   gdb_assert (annex != NULL);
10627   gdb_assert (readbuf != NULL);
10628
10629   p2 = rs->buf;
10630   *p2++ = 'q';
10631   *p2++ = query_type;
10632
10633   /* We used one buffer char for the remote protocol q command and
10634      another for the query type.  As the remote protocol encapsulation
10635      uses 4 chars plus one extra in case we are debugging
10636      (remote_debug), we have PBUFZIZ - 7 left to pack the query
10637      string.  */
10638   i = 0;
10639   while (annex[i] && (i < (get_remote_packet_size () - 8)))
10640     {
10641       /* Bad caller may have sent forbidden characters.  */
10642       gdb_assert (isprint (annex[i]) && annex[i] != '$' && annex[i] != '#');
10643       *p2++ = annex[i];
10644       i++;
10645     }
10646   *p2 = '\0';
10647   gdb_assert (annex[i] == '\0');
10648
10649   i = putpkt (rs->buf);
10650   if (i < 0)
10651     return TARGET_XFER_E_IO;
10652
10653   getpkt (&rs->buf, &rs->buf_size, 0);
10654   strcpy ((char *) readbuf, rs->buf);
10655
10656   *xfered_len = strlen ((char *) readbuf);
10657   return (*xfered_len != 0) ? TARGET_XFER_OK : TARGET_XFER_EOF;
10658 }
10659
10660 /* Implementation of to_get_memory_xfer_limit.  */
10661
10662 static ULONGEST
10663 remote_get_memory_xfer_limit (struct target_ops *ops)
10664 {
10665   return get_memory_write_packet_size ();
10666 }
10667
10668 static int
10669 remote_search_memory (struct target_ops* ops,
10670                       CORE_ADDR start_addr, ULONGEST search_space_len,
10671                       const gdb_byte *pattern, ULONGEST pattern_len,
10672                       CORE_ADDR *found_addrp)
10673 {
10674   int addr_size = gdbarch_addr_bit (target_gdbarch ()) / 8;
10675   struct remote_state *rs = get_remote_state ();
10676   int max_size = get_memory_write_packet_size ();
10677   struct packet_config *packet =
10678     &remote_protocol_packets[PACKET_qSearch_memory];
10679   /* Number of packet bytes used to encode the pattern;
10680      this could be more than PATTERN_LEN due to escape characters.  */
10681   int escaped_pattern_len;
10682   /* Amount of pattern that was encodable in the packet.  */
10683   int used_pattern_len;
10684   int i;
10685   int found;
10686   ULONGEST found_addr;
10687
10688   /* Don't go to the target if we don't have to.
10689      This is done before checking packet->support to avoid the possibility that
10690      a success for this edge case means the facility works in general.  */
10691   if (pattern_len > search_space_len)
10692     return 0;
10693   if (pattern_len == 0)
10694     {
10695       *found_addrp = start_addr;
10696       return 1;
10697     }
10698
10699   /* If we already know the packet isn't supported, fall back to the simple
10700      way of searching memory.  */
10701
10702   if (packet_config_support (packet) == PACKET_DISABLE)
10703     {
10704       /* Target doesn't provided special support, fall back and use the
10705          standard support (copy memory and do the search here).  */
10706       return simple_search_memory (ops, start_addr, search_space_len,
10707                                    pattern, pattern_len, found_addrp);
10708     }
10709
10710   /* Make sure the remote is pointing at the right process.  */
10711   set_general_process ();
10712
10713   /* Insert header.  */
10714   i = snprintf (rs->buf, max_size, 
10715                 "qSearch:memory:%s;%s;",
10716                 phex_nz (start_addr, addr_size),
10717                 phex_nz (search_space_len, sizeof (search_space_len)));
10718   max_size -= (i + 1);
10719
10720   /* Escape as much data as fits into rs->buf.  */
10721   escaped_pattern_len =
10722     remote_escape_output (pattern, pattern_len, 1, (gdb_byte *) rs->buf + i,
10723                           &used_pattern_len, max_size);
10724
10725   /* Bail if the pattern is too large.  */
10726   if (used_pattern_len != pattern_len)
10727     error (_("Pattern is too large to transmit to remote target."));
10728
10729   if (putpkt_binary (rs->buf, i + escaped_pattern_len) < 0
10730       || getpkt_sane (&rs->buf, &rs->buf_size, 0) < 0
10731       || packet_ok (rs->buf, packet) != PACKET_OK)
10732     {
10733       /* The request may not have worked because the command is not
10734          supported.  If so, fall back to the simple way.  */
10735       if (packet->support == PACKET_DISABLE)
10736         {
10737           return simple_search_memory (ops, start_addr, search_space_len,
10738                                        pattern, pattern_len, found_addrp);
10739         }
10740       return -1;
10741     }
10742
10743   if (rs->buf[0] == '0')
10744     found = 0;
10745   else if (rs->buf[0] == '1')
10746     {
10747       found = 1;
10748       if (rs->buf[1] != ',')
10749         error (_("Unknown qSearch:memory reply: %s"), rs->buf);
10750       unpack_varlen_hex (rs->buf + 2, &found_addr);
10751       *found_addrp = found_addr;
10752     }
10753   else
10754     error (_("Unknown qSearch:memory reply: %s"), rs->buf);
10755
10756   return found;
10757 }
10758
10759 static void
10760 remote_rcmd (struct target_ops *self, const char *command,
10761              struct ui_file *outbuf)
10762 {
10763   struct remote_state *rs = get_remote_state ();
10764   char *p = rs->buf;
10765
10766   if (!rs->remote_desc)
10767     error (_("remote rcmd is only available after target open"));
10768
10769   /* Send a NULL command across as an empty command.  */
10770   if (command == NULL)
10771     command = "";
10772
10773   /* The query prefix.  */
10774   strcpy (rs->buf, "qRcmd,");
10775   p = strchr (rs->buf, '\0');
10776
10777   if ((strlen (rs->buf) + strlen (command) * 2 + 8/*misc*/)
10778       > get_remote_packet_size ())
10779     error (_("\"monitor\" command ``%s'' is too long."), command);
10780
10781   /* Encode the actual command.  */
10782   bin2hex ((const gdb_byte *) command, p, strlen (command));
10783
10784   if (putpkt (rs->buf) < 0)
10785     error (_("Communication problem with target."));
10786
10787   /* get/display the response */
10788   while (1)
10789     {
10790       char *buf;
10791
10792       /* XXX - see also remote_get_noisy_reply().  */
10793       QUIT;                     /* Allow user to bail out with ^C.  */
10794       rs->buf[0] = '\0';
10795       if (getpkt_sane (&rs->buf, &rs->buf_size, 0) == -1)
10796         { 
10797           /* Timeout.  Continue to (try to) read responses.
10798              This is better than stopping with an error, assuming the stub
10799              is still executing the (long) monitor command.
10800              If needed, the user can interrupt gdb using C-c, obtaining
10801              an effect similar to stop on timeout.  */
10802           continue;
10803         }
10804       buf = rs->buf;
10805       if (buf[0] == '\0')
10806         error (_("Target does not support this command."));
10807       if (buf[0] == 'O' && buf[1] != 'K')
10808         {
10809           remote_console_output (buf + 1); /* 'O' message from stub.  */
10810           continue;
10811         }
10812       if (strcmp (buf, "OK") == 0)
10813         break;
10814       if (strlen (buf) == 3 && buf[0] == 'E'
10815           && isdigit (buf[1]) && isdigit (buf[2]))
10816         {
10817           error (_("Protocol error with Rcmd"));
10818         }
10819       for (p = buf; p[0] != '\0' && p[1] != '\0'; p += 2)
10820         {
10821           char c = (fromhex (p[0]) << 4) + fromhex (p[1]);
10822
10823           fputc_unfiltered (c, outbuf);
10824         }
10825       break;
10826     }
10827 }
10828
10829 static std::vector<mem_region>
10830 remote_memory_map (struct target_ops *ops)
10831 {
10832   std::vector<mem_region> result;
10833   gdb::unique_xmalloc_ptr<char> text
10834     = target_read_stralloc (&current_target, TARGET_OBJECT_MEMORY_MAP, NULL);
10835
10836   if (text)
10837     result = parse_memory_map (text.get ());
10838
10839   return result;
10840 }
10841
10842 static void
10843 packet_command (const char *args, int from_tty)
10844 {
10845   struct remote_state *rs = get_remote_state ();
10846
10847   if (!rs->remote_desc)
10848     error (_("command can only be used with remote target"));
10849
10850   if (!args)
10851     error (_("remote-packet command requires packet text as argument"));
10852
10853   puts_filtered ("sending: ");
10854   print_packet (args);
10855   puts_filtered ("\n");
10856   putpkt (args);
10857
10858   getpkt (&rs->buf, &rs->buf_size, 0);
10859   puts_filtered ("received: ");
10860   print_packet (rs->buf);
10861   puts_filtered ("\n");
10862 }
10863
10864 #if 0
10865 /* --------- UNIT_TEST for THREAD oriented PACKETS ------------------- */
10866
10867 static void display_thread_info (struct gdb_ext_thread_info *info);
10868
10869 static void threadset_test_cmd (char *cmd, int tty);
10870
10871 static void threadalive_test (char *cmd, int tty);
10872
10873 static void threadlist_test_cmd (char *cmd, int tty);
10874
10875 int get_and_display_threadinfo (threadref *ref);
10876
10877 static void threadinfo_test_cmd (char *cmd, int tty);
10878
10879 static int thread_display_step (threadref *ref, void *context);
10880
10881 static void threadlist_update_test_cmd (char *cmd, int tty);
10882
10883 static void init_remote_threadtests (void);
10884
10885 #define SAMPLE_THREAD  0x05060708       /* Truncated 64 bit threadid.  */
10886
10887 static void
10888 threadset_test_cmd (const char *cmd, int tty)
10889 {
10890   int sample_thread = SAMPLE_THREAD;
10891
10892   printf_filtered (_("Remote threadset test\n"));
10893   set_general_thread (sample_thread);
10894 }
10895
10896
10897 static void
10898 threadalive_test (const char *cmd, int tty)
10899 {
10900   int sample_thread = SAMPLE_THREAD;
10901   int pid = ptid_get_pid (inferior_ptid);
10902   ptid_t ptid = ptid_build (pid, sample_thread, 0);
10903
10904   if (remote_thread_alive (ptid))
10905     printf_filtered ("PASS: Thread alive test\n");
10906   else
10907     printf_filtered ("FAIL: Thread alive test\n");
10908 }
10909
10910 void output_threadid (char *title, threadref *ref);
10911
10912 void
10913 output_threadid (char *title, threadref *ref)
10914 {
10915   char hexid[20];
10916
10917   pack_threadid (&hexid[0], ref);       /* Convert threead id into hex.  */
10918   hexid[16] = 0;
10919   printf_filtered ("%s  %s\n", title, (&hexid[0]));
10920 }
10921
10922 static void
10923 threadlist_test_cmd (const char *cmd, int tty)
10924 {
10925   int startflag = 1;
10926   threadref nextthread;
10927   int done, result_count;
10928   threadref threadlist[3];
10929
10930   printf_filtered ("Remote Threadlist test\n");
10931   if (!remote_get_threadlist (startflag, &nextthread, 3, &done,
10932                               &result_count, &threadlist[0]))
10933     printf_filtered ("FAIL: threadlist test\n");
10934   else
10935     {
10936       threadref *scan = threadlist;
10937       threadref *limit = scan + result_count;
10938
10939       while (scan < limit)
10940         output_threadid (" thread ", scan++);
10941     }
10942 }
10943
10944 void
10945 display_thread_info (struct gdb_ext_thread_info *info)
10946 {
10947   output_threadid ("Threadid: ", &info->threadid);
10948   printf_filtered ("Name: %s\n ", info->shortname);
10949   printf_filtered ("State: %s\n", info->display);
10950   printf_filtered ("other: %s\n\n", info->more_display);
10951 }
10952
10953 int
10954 get_and_display_threadinfo (threadref *ref)
10955 {
10956   int result;
10957   int set;
10958   struct gdb_ext_thread_info threadinfo;
10959
10960   set = TAG_THREADID | TAG_EXISTS | TAG_THREADNAME
10961     | TAG_MOREDISPLAY | TAG_DISPLAY;
10962   if (0 != (result = remote_get_threadinfo (ref, set, &threadinfo)))
10963     display_thread_info (&threadinfo);
10964   return result;
10965 }
10966
10967 static void
10968 threadinfo_test_cmd (const char *cmd, int tty)
10969 {
10970   int athread = SAMPLE_THREAD;
10971   threadref thread;
10972   int set;
10973
10974   int_to_threadref (&thread, athread);
10975   printf_filtered ("Remote Threadinfo test\n");
10976   if (!get_and_display_threadinfo (&thread))
10977     printf_filtered ("FAIL cannot get thread info\n");
10978 }
10979
10980 static int
10981 thread_display_step (threadref *ref, void *context)
10982 {
10983   /* output_threadid(" threadstep ",ref); *//* simple test */
10984   return get_and_display_threadinfo (ref);
10985 }
10986
10987 static void
10988 threadlist_update_test_cmd (const char *cmd, int tty)
10989 {
10990   printf_filtered ("Remote Threadlist update test\n");
10991   remote_threadlist_iterator (thread_display_step, 0, CRAZY_MAX_THREADS);
10992 }
10993
10994 static void
10995 init_remote_threadtests (void)
10996 {
10997   add_com ("tlist", class_obscure, threadlist_test_cmd,
10998            _("Fetch and print the remote list of "
10999              "thread identifiers, one pkt only"));
11000   add_com ("tinfo", class_obscure, threadinfo_test_cmd,
11001            _("Fetch and display info about one thread"));
11002   add_com ("tset", class_obscure, threadset_test_cmd,
11003            _("Test setting to a different thread"));
11004   add_com ("tupd", class_obscure, threadlist_update_test_cmd,
11005            _("Iterate through updating all remote thread info"));
11006   add_com ("talive", class_obscure, threadalive_test,
11007            _(" Remote thread alive test "));
11008 }
11009
11010 #endif /* 0 */
11011
11012 /* Convert a thread ID to a string.  Returns the string in a static
11013    buffer.  */
11014
11015 static const char *
11016 remote_pid_to_str (struct target_ops *ops, ptid_t ptid)
11017 {
11018   static char buf[64];
11019   struct remote_state *rs = get_remote_state ();
11020
11021   if (ptid_equal (ptid, null_ptid))
11022     return normal_pid_to_str (ptid);
11023   else if (ptid_is_pid (ptid))
11024     {
11025       /* Printing an inferior target id.  */
11026
11027       /* When multi-process extensions are off, there's no way in the
11028          remote protocol to know the remote process id, if there's any
11029          at all.  There's one exception --- when we're connected with
11030          target extended-remote, and we manually attached to a process
11031          with "attach PID".  We don't record anywhere a flag that
11032          allows us to distinguish that case from the case of
11033          connecting with extended-remote and the stub already being
11034          attached to a process, and reporting yes to qAttached, hence
11035          no smart special casing here.  */
11036       if (!remote_multi_process_p (rs))
11037         {
11038           xsnprintf (buf, sizeof buf, "Remote target");
11039           return buf;
11040         }
11041
11042       return normal_pid_to_str (ptid);
11043     }
11044   else
11045     {
11046       if (ptid_equal (magic_null_ptid, ptid))
11047         xsnprintf (buf, sizeof buf, "Thread <main>");
11048       else if (remote_multi_process_p (rs))
11049         if (ptid_get_lwp (ptid) == 0)
11050           return normal_pid_to_str (ptid);
11051         else
11052           xsnprintf (buf, sizeof buf, "Thread %d.%ld",
11053                      ptid_get_pid (ptid), ptid_get_lwp (ptid));
11054       else
11055         xsnprintf (buf, sizeof buf, "Thread %ld",
11056                    ptid_get_lwp (ptid));
11057       return buf;
11058     }
11059 }
11060
11061 /* Get the address of the thread local variable in OBJFILE which is
11062    stored at OFFSET within the thread local storage for thread PTID.  */
11063
11064 static CORE_ADDR
11065 remote_get_thread_local_address (struct target_ops *ops,
11066                                  ptid_t ptid, CORE_ADDR lm, CORE_ADDR offset)
11067 {
11068   if (packet_support (PACKET_qGetTLSAddr) != PACKET_DISABLE)
11069     {
11070       struct remote_state *rs = get_remote_state ();
11071       char *p = rs->buf;
11072       char *endp = rs->buf + get_remote_packet_size ();
11073       enum packet_result result;
11074
11075       strcpy (p, "qGetTLSAddr:");
11076       p += strlen (p);
11077       p = write_ptid (p, endp, ptid);
11078       *p++ = ',';
11079       p += hexnumstr (p, offset);
11080       *p++ = ',';
11081       p += hexnumstr (p, lm);
11082       *p++ = '\0';
11083
11084       putpkt (rs->buf);
11085       getpkt (&rs->buf, &rs->buf_size, 0);
11086       result = packet_ok (rs->buf,
11087                           &remote_protocol_packets[PACKET_qGetTLSAddr]);
11088       if (result == PACKET_OK)
11089         {
11090           ULONGEST result;
11091
11092           unpack_varlen_hex (rs->buf, &result);
11093           return result;
11094         }
11095       else if (result == PACKET_UNKNOWN)
11096         throw_error (TLS_GENERIC_ERROR,
11097                      _("Remote target doesn't support qGetTLSAddr packet"));
11098       else
11099         throw_error (TLS_GENERIC_ERROR,
11100                      _("Remote target failed to process qGetTLSAddr request"));
11101     }
11102   else
11103     throw_error (TLS_GENERIC_ERROR,
11104                  _("TLS not supported or disabled on this target"));
11105   /* Not reached.  */
11106   return 0;
11107 }
11108
11109 /* Provide thread local base, i.e. Thread Information Block address.
11110    Returns 1 if ptid is found and thread_local_base is non zero.  */
11111
11112 static int
11113 remote_get_tib_address (struct target_ops *self, ptid_t ptid, CORE_ADDR *addr)
11114 {
11115   if (packet_support (PACKET_qGetTIBAddr) != PACKET_DISABLE)
11116     {
11117       struct remote_state *rs = get_remote_state ();
11118       char *p = rs->buf;
11119       char *endp = rs->buf + get_remote_packet_size ();
11120       enum packet_result result;
11121
11122       strcpy (p, "qGetTIBAddr:");
11123       p += strlen (p);
11124       p = write_ptid (p, endp, ptid);
11125       *p++ = '\0';
11126
11127       putpkt (rs->buf);
11128       getpkt (&rs->buf, &rs->buf_size, 0);
11129       result = packet_ok (rs->buf,
11130                           &remote_protocol_packets[PACKET_qGetTIBAddr]);
11131       if (result == PACKET_OK)
11132         {
11133           ULONGEST result;
11134
11135           unpack_varlen_hex (rs->buf, &result);
11136           if (addr)
11137             *addr = (CORE_ADDR) result;
11138           return 1;
11139         }
11140       else if (result == PACKET_UNKNOWN)
11141         error (_("Remote target doesn't support qGetTIBAddr packet"));
11142       else
11143         error (_("Remote target failed to process qGetTIBAddr request"));
11144     }
11145   else
11146     error (_("qGetTIBAddr not supported or disabled on this target"));
11147   /* Not reached.  */
11148   return 0;
11149 }
11150
11151 /* Support for inferring a target description based on the current
11152    architecture and the size of a 'g' packet.  While the 'g' packet
11153    can have any size (since optional registers can be left off the
11154    end), some sizes are easily recognizable given knowledge of the
11155    approximate architecture.  */
11156
11157 struct remote_g_packet_guess
11158 {
11159   int bytes;
11160   const struct target_desc *tdesc;
11161 };
11162 typedef struct remote_g_packet_guess remote_g_packet_guess_s;
11163 DEF_VEC_O(remote_g_packet_guess_s);
11164
11165 struct remote_g_packet_data
11166 {
11167   VEC(remote_g_packet_guess_s) *guesses;
11168 };
11169
11170 static struct gdbarch_data *remote_g_packet_data_handle;
11171
11172 static void *
11173 remote_g_packet_data_init (struct obstack *obstack)
11174 {
11175   return OBSTACK_ZALLOC (obstack, struct remote_g_packet_data);
11176 }
11177
11178 void
11179 register_remote_g_packet_guess (struct gdbarch *gdbarch, int bytes,
11180                                 const struct target_desc *tdesc)
11181 {
11182   struct remote_g_packet_data *data
11183     = ((struct remote_g_packet_data *)
11184        gdbarch_data (gdbarch, remote_g_packet_data_handle));
11185   struct remote_g_packet_guess new_guess, *guess;
11186   int ix;
11187
11188   gdb_assert (tdesc != NULL);
11189
11190   for (ix = 0;
11191        VEC_iterate (remote_g_packet_guess_s, data->guesses, ix, guess);
11192        ix++)
11193     if (guess->bytes == bytes)
11194       internal_error (__FILE__, __LINE__,
11195                       _("Duplicate g packet description added for size %d"),
11196                       bytes);
11197
11198   new_guess.bytes = bytes;
11199   new_guess.tdesc = tdesc;
11200   VEC_safe_push (remote_g_packet_guess_s, data->guesses, &new_guess);
11201 }
11202
11203 /* Return 1 if remote_read_description would do anything on this target
11204    and architecture, 0 otherwise.  */
11205
11206 static int
11207 remote_read_description_p (struct target_ops *target)
11208 {
11209   struct remote_g_packet_data *data
11210     = ((struct remote_g_packet_data *)
11211        gdbarch_data (target_gdbarch (), remote_g_packet_data_handle));
11212
11213   if (!VEC_empty (remote_g_packet_guess_s, data->guesses))
11214     return 1;
11215
11216   return 0;
11217 }
11218
11219 static const struct target_desc *
11220 remote_read_description (struct target_ops *target)
11221 {
11222   struct remote_g_packet_data *data
11223     = ((struct remote_g_packet_data *)
11224        gdbarch_data (target_gdbarch (), remote_g_packet_data_handle));
11225
11226   /* Do not try this during initial connection, when we do not know
11227      whether there is a running but stopped thread.  */
11228   if (!target_has_execution || ptid_equal (inferior_ptid, null_ptid))
11229     return target->beneath->to_read_description (target->beneath);
11230
11231   if (!VEC_empty (remote_g_packet_guess_s, data->guesses))
11232     {
11233       struct remote_g_packet_guess *guess;
11234       int ix;
11235       int bytes = send_g_packet ();
11236
11237       for (ix = 0;
11238            VEC_iterate (remote_g_packet_guess_s, data->guesses, ix, guess);
11239            ix++)
11240         if (guess->bytes == bytes)
11241           return guess->tdesc;
11242
11243       /* We discard the g packet.  A minor optimization would be to
11244          hold on to it, and fill the register cache once we have selected
11245          an architecture, but it's too tricky to do safely.  */
11246     }
11247
11248   return target->beneath->to_read_description (target->beneath);
11249 }
11250
11251 /* Remote file transfer support.  This is host-initiated I/O, not
11252    target-initiated; for target-initiated, see remote-fileio.c.  */
11253
11254 /* If *LEFT is at least the length of STRING, copy STRING to
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_string (char **buffer, int *left, const char *string)
11260 {
11261   int len = strlen (string);
11262
11263   if (len > *left)
11264     error (_("Packet too long for target."));
11265
11266   memcpy (*buffer, string, len);
11267   *buffer += len;
11268   *left -= len;
11269
11270   /* NUL-terminate the buffer as a convenience, if there is
11271      room.  */
11272   if (*left)
11273     **buffer = '\0';
11274 }
11275
11276 /* If *LEFT is large enough, hex encode LEN bytes from BYTES into
11277    *BUFFER, update *BUFFER to point to the new end of the buffer, and
11278    decrease *LEFT.  Otherwise raise an error.  */
11279
11280 static void
11281 remote_buffer_add_bytes (char **buffer, int *left, const gdb_byte *bytes,
11282                          int len)
11283 {
11284   if (2 * len > *left)
11285     error (_("Packet too long for target."));
11286
11287   bin2hex (bytes, *buffer, len);
11288   *buffer += 2 * len;
11289   *left -= 2 * len;
11290
11291   /* NUL-terminate the buffer as a convenience, if there is
11292      room.  */
11293   if (*left)
11294     **buffer = '\0';
11295 }
11296
11297 /* If *LEFT is large enough, convert VALUE to hex and add it to
11298    *BUFFER, update *BUFFER to point to the new end of the buffer, and
11299    decrease *LEFT.  Otherwise raise an error.  */
11300
11301 static void
11302 remote_buffer_add_int (char **buffer, int *left, ULONGEST value)
11303 {
11304   int len = hexnumlen (value);
11305
11306   if (len > *left)
11307     error (_("Packet too long for target."));
11308
11309   hexnumstr (*buffer, value);
11310   *buffer += len;
11311   *left -= len;
11312
11313   /* NUL-terminate the buffer as a convenience, if there is
11314      room.  */
11315   if (*left)
11316     **buffer = '\0';
11317 }
11318
11319 /* Parse an I/O result packet from BUFFER.  Set RETCODE to the return
11320    value, *REMOTE_ERRNO to the remote error number or zero if none
11321    was included, and *ATTACHMENT to point to the start of the annex
11322    if any.  The length of the packet isn't needed here; there may
11323    be NUL bytes in BUFFER, but they will be after *ATTACHMENT.
11324
11325    Return 0 if the packet could be parsed, -1 if it could not.  If
11326    -1 is returned, the other variables may not be initialized.  */
11327
11328 static int
11329 remote_hostio_parse_result (char *buffer, int *retcode,
11330                             int *remote_errno, char **attachment)
11331 {
11332   char *p, *p2;
11333
11334   *remote_errno = 0;
11335   *attachment = NULL;
11336
11337   if (buffer[0] != 'F')
11338     return -1;
11339
11340   errno = 0;
11341   *retcode = strtol (&buffer[1], &p, 16);
11342   if (errno != 0 || p == &buffer[1])
11343     return -1;
11344
11345   /* Check for ",errno".  */
11346   if (*p == ',')
11347     {
11348       errno = 0;
11349       *remote_errno = strtol (p + 1, &p2, 16);
11350       if (errno != 0 || p + 1 == p2)
11351         return -1;
11352       p = p2;
11353     }
11354
11355   /* Check for ";attachment".  If there is no attachment, the
11356      packet should end here.  */
11357   if (*p == ';')
11358     {
11359       *attachment = p + 1;
11360       return 0;
11361     }
11362   else if (*p == '\0')
11363     return 0;
11364   else
11365     return -1;
11366 }
11367
11368 /* Send a prepared I/O packet to the target and read its response.
11369    The prepared packet is in the global RS->BUF before this function
11370    is called, and the answer is there when we return.
11371
11372    COMMAND_BYTES is the length of the request to send, which may include
11373    binary data.  WHICH_PACKET is the packet configuration to check
11374    before attempting a packet.  If an error occurs, *REMOTE_ERRNO
11375    is set to the error number and -1 is returned.  Otherwise the value
11376    returned by the function is returned.
11377
11378    ATTACHMENT and ATTACHMENT_LEN should be non-NULL if and only if an
11379    attachment is expected; an error will be reported if there's a
11380    mismatch.  If one is found, *ATTACHMENT will be set to point into
11381    the packet buffer and *ATTACHMENT_LEN will be set to the
11382    attachment's length.  */
11383
11384 static int
11385 remote_hostio_send_command (int command_bytes, int which_packet,
11386                             int *remote_errno, char **attachment,
11387                             int *attachment_len)
11388 {
11389   struct remote_state *rs = get_remote_state ();
11390   int ret, bytes_read;
11391   char *attachment_tmp;
11392
11393   if (!rs->remote_desc
11394       || packet_support (which_packet) == PACKET_DISABLE)
11395     {
11396       *remote_errno = FILEIO_ENOSYS;
11397       return -1;
11398     }
11399
11400   putpkt_binary (rs->buf, command_bytes);
11401   bytes_read = getpkt_sane (&rs->buf, &rs->buf_size, 0);
11402
11403   /* If it timed out, something is wrong.  Don't try to parse the
11404      buffer.  */
11405   if (bytes_read < 0)
11406     {
11407       *remote_errno = FILEIO_EINVAL;
11408       return -1;
11409     }
11410
11411   switch (packet_ok (rs->buf, &remote_protocol_packets[which_packet]))
11412     {
11413     case PACKET_ERROR:
11414       *remote_errno = FILEIO_EINVAL;
11415       return -1;
11416     case PACKET_UNKNOWN:
11417       *remote_errno = FILEIO_ENOSYS;
11418       return -1;
11419     case PACKET_OK:
11420       break;
11421     }
11422
11423   if (remote_hostio_parse_result (rs->buf, &ret, remote_errno,
11424                                   &attachment_tmp))
11425     {
11426       *remote_errno = FILEIO_EINVAL;
11427       return -1;
11428     }
11429
11430   /* Make sure we saw an attachment if and only if we expected one.  */
11431   if ((attachment_tmp == NULL && attachment != NULL)
11432       || (attachment_tmp != NULL && attachment == NULL))
11433     {
11434       *remote_errno = FILEIO_EINVAL;
11435       return -1;
11436     }
11437
11438   /* If an attachment was found, it must point into the packet buffer;
11439      work out how many bytes there were.  */
11440   if (attachment_tmp != NULL)
11441     {
11442       *attachment = attachment_tmp;
11443       *attachment_len = bytes_read - (*attachment - rs->buf);
11444     }
11445
11446   return ret;
11447 }
11448
11449 /* Invalidate the readahead cache.  */
11450
11451 static void
11452 readahead_cache_invalidate (void)
11453 {
11454   struct remote_state *rs = get_remote_state ();
11455
11456   rs->readahead_cache.fd = -1;
11457 }
11458
11459 /* Invalidate the readahead cache if it is holding data for FD.  */
11460
11461 static void
11462 readahead_cache_invalidate_fd (int fd)
11463 {
11464   struct remote_state *rs = get_remote_state ();
11465
11466   if (rs->readahead_cache.fd == fd)
11467     rs->readahead_cache.fd = -1;
11468 }
11469
11470 /* Set the filesystem remote_hostio functions that take FILENAME
11471    arguments will use.  Return 0 on success, or -1 if an error
11472    occurs (and set *REMOTE_ERRNO).  */
11473
11474 static int
11475 remote_hostio_set_filesystem (struct inferior *inf, int *remote_errno)
11476 {
11477   struct remote_state *rs = get_remote_state ();
11478   int required_pid = (inf == NULL || inf->fake_pid_p) ? 0 : inf->pid;
11479   char *p = rs->buf;
11480   int left = get_remote_packet_size () - 1;
11481   char arg[9];
11482   int ret;
11483
11484   if (packet_support (PACKET_vFile_setfs) == PACKET_DISABLE)
11485     return 0;
11486
11487   if (rs->fs_pid != -1 && required_pid == rs->fs_pid)
11488     return 0;
11489
11490   remote_buffer_add_string (&p, &left, "vFile:setfs:");
11491
11492   xsnprintf (arg, sizeof (arg), "%x", required_pid);
11493   remote_buffer_add_string (&p, &left, arg);
11494
11495   ret = remote_hostio_send_command (p - rs->buf, PACKET_vFile_setfs,
11496                                     remote_errno, NULL, NULL);
11497
11498   if (packet_support (PACKET_vFile_setfs) == PACKET_DISABLE)
11499     return 0;
11500
11501   if (ret == 0)
11502     rs->fs_pid = required_pid;
11503
11504   return ret;
11505 }
11506
11507 /* Implementation of to_fileio_open.  */
11508
11509 static int
11510 remote_hostio_open (struct target_ops *self,
11511                     struct inferior *inf, const char *filename,
11512                     int flags, int mode, int warn_if_slow,
11513                     int *remote_errno)
11514 {
11515   struct remote_state *rs = get_remote_state ();
11516   char *p = rs->buf;
11517   int left = get_remote_packet_size () - 1;
11518
11519   if (warn_if_slow)
11520     {
11521       static int warning_issued = 0;
11522
11523       printf_unfiltered (_("Reading %s from remote target...\n"),
11524                          filename);
11525
11526       if (!warning_issued)
11527         {
11528           warning (_("File transfers from remote targets can be slow."
11529                      " Use \"set sysroot\" to access files locally"
11530                      " instead."));
11531           warning_issued = 1;
11532         }
11533     }
11534
11535   if (remote_hostio_set_filesystem (inf, remote_errno) != 0)
11536     return -1;
11537
11538   remote_buffer_add_string (&p, &left, "vFile:open:");
11539
11540   remote_buffer_add_bytes (&p, &left, (const gdb_byte *) filename,
11541                            strlen (filename));
11542   remote_buffer_add_string (&p, &left, ",");
11543
11544   remote_buffer_add_int (&p, &left, flags);
11545   remote_buffer_add_string (&p, &left, ",");
11546
11547   remote_buffer_add_int (&p, &left, mode);
11548
11549   return remote_hostio_send_command (p - rs->buf, PACKET_vFile_open,
11550                                      remote_errno, NULL, NULL);
11551 }
11552
11553 /* Implementation of to_fileio_pwrite.  */
11554
11555 static int
11556 remote_hostio_pwrite (struct target_ops *self,
11557                       int fd, const gdb_byte *write_buf, int len,
11558                       ULONGEST offset, int *remote_errno)
11559 {
11560   struct remote_state *rs = get_remote_state ();
11561   char *p = rs->buf;
11562   int left = get_remote_packet_size ();
11563   int out_len;
11564
11565   readahead_cache_invalidate_fd (fd);
11566
11567   remote_buffer_add_string (&p, &left, "vFile:pwrite:");
11568
11569   remote_buffer_add_int (&p, &left, fd);
11570   remote_buffer_add_string (&p, &left, ",");
11571
11572   remote_buffer_add_int (&p, &left, offset);
11573   remote_buffer_add_string (&p, &left, ",");
11574
11575   p += remote_escape_output (write_buf, len, 1, (gdb_byte *) p, &out_len,
11576                              get_remote_packet_size () - (p - rs->buf));
11577
11578   return remote_hostio_send_command (p - rs->buf, PACKET_vFile_pwrite,
11579                                      remote_errno, NULL, NULL);
11580 }
11581
11582 /* Helper for the implementation of to_fileio_pread.  Read the file
11583    from the remote side with vFile:pread.  */
11584
11585 static int
11586 remote_hostio_pread_vFile (struct target_ops *self,
11587                            int fd, gdb_byte *read_buf, int len,
11588                            ULONGEST offset, int *remote_errno)
11589 {
11590   struct remote_state *rs = get_remote_state ();
11591   char *p = rs->buf;
11592   char *attachment;
11593   int left = get_remote_packet_size ();
11594   int ret, attachment_len;
11595   int read_len;
11596
11597   remote_buffer_add_string (&p, &left, "vFile:pread:");
11598
11599   remote_buffer_add_int (&p, &left, fd);
11600   remote_buffer_add_string (&p, &left, ",");
11601
11602   remote_buffer_add_int (&p, &left, len);
11603   remote_buffer_add_string (&p, &left, ",");
11604
11605   remote_buffer_add_int (&p, &left, offset);
11606
11607   ret = remote_hostio_send_command (p - rs->buf, PACKET_vFile_pread,
11608                                     remote_errno, &attachment,
11609                                     &attachment_len);
11610
11611   if (ret < 0)
11612     return ret;
11613
11614   read_len = remote_unescape_input ((gdb_byte *) attachment, attachment_len,
11615                                     read_buf, len);
11616   if (read_len != ret)
11617     error (_("Read returned %d, but %d bytes."), ret, (int) read_len);
11618
11619   return ret;
11620 }
11621
11622 /* Serve pread from the readahead cache.  Returns number of bytes
11623    read, or 0 if the request can't be served from the cache.  */
11624
11625 static int
11626 remote_hostio_pread_from_cache (struct remote_state *rs,
11627                                 int fd, gdb_byte *read_buf, size_t len,
11628                                 ULONGEST offset)
11629 {
11630   struct readahead_cache *cache = &rs->readahead_cache;
11631
11632   if (cache->fd == fd
11633       && cache->offset <= offset
11634       && offset < cache->offset + cache->bufsize)
11635     {
11636       ULONGEST max = cache->offset + cache->bufsize;
11637
11638       if (offset + len > max)
11639         len = max - offset;
11640
11641       memcpy (read_buf, cache->buf + offset - cache->offset, len);
11642       return len;
11643     }
11644
11645   return 0;
11646 }
11647
11648 /* Implementation of to_fileio_pread.  */
11649
11650 static int
11651 remote_hostio_pread (struct target_ops *self,
11652                      int fd, gdb_byte *read_buf, int len,
11653                      ULONGEST offset, int *remote_errno)
11654 {
11655   int ret;
11656   struct remote_state *rs = get_remote_state ();
11657   struct readahead_cache *cache = &rs->readahead_cache;
11658
11659   ret = remote_hostio_pread_from_cache (rs, fd, read_buf, len, offset);
11660   if (ret > 0)
11661     {
11662       cache->hit_count++;
11663
11664       if (remote_debug)
11665         fprintf_unfiltered (gdb_stdlog, "readahead cache hit %s\n",
11666                             pulongest (cache->hit_count));
11667       return ret;
11668     }
11669
11670   cache->miss_count++;
11671   if (remote_debug)
11672     fprintf_unfiltered (gdb_stdlog, "readahead cache miss %s\n",
11673                         pulongest (cache->miss_count));
11674
11675   cache->fd = fd;
11676   cache->offset = offset;
11677   cache->bufsize = get_remote_packet_size ();
11678   cache->buf = (gdb_byte *) xrealloc (cache->buf, cache->bufsize);
11679
11680   ret = remote_hostio_pread_vFile (self, cache->fd, cache->buf, cache->bufsize,
11681                                    cache->offset, remote_errno);
11682   if (ret <= 0)
11683     {
11684       readahead_cache_invalidate_fd (fd);
11685       return ret;
11686     }
11687
11688   cache->bufsize = ret;
11689   return remote_hostio_pread_from_cache (rs, fd, read_buf, len, offset);
11690 }
11691
11692 /* Implementation of to_fileio_close.  */
11693
11694 static int
11695 remote_hostio_close (struct target_ops *self, int fd, int *remote_errno)
11696 {
11697   struct remote_state *rs = get_remote_state ();
11698   char *p = rs->buf;
11699   int left = get_remote_packet_size () - 1;
11700
11701   readahead_cache_invalidate_fd (fd);
11702
11703   remote_buffer_add_string (&p, &left, "vFile:close:");
11704
11705   remote_buffer_add_int (&p, &left, fd);
11706
11707   return remote_hostio_send_command (p - rs->buf, PACKET_vFile_close,
11708                                      remote_errno, NULL, NULL);
11709 }
11710
11711 /* Implementation of to_fileio_unlink.  */
11712
11713 static int
11714 remote_hostio_unlink (struct target_ops *self,
11715                       struct inferior *inf, const char *filename,
11716                       int *remote_errno)
11717 {
11718   struct remote_state *rs = get_remote_state ();
11719   char *p = rs->buf;
11720   int left = get_remote_packet_size () - 1;
11721
11722   if (remote_hostio_set_filesystem (inf, remote_errno) != 0)
11723     return -1;
11724
11725   remote_buffer_add_string (&p, &left, "vFile:unlink:");
11726
11727   remote_buffer_add_bytes (&p, &left, (const gdb_byte *) filename,
11728                            strlen (filename));
11729
11730   return remote_hostio_send_command (p - rs->buf, PACKET_vFile_unlink,
11731                                      remote_errno, NULL, NULL);
11732 }
11733
11734 /* Implementation of to_fileio_readlink.  */
11735
11736 static char *
11737 remote_hostio_readlink (struct target_ops *self,
11738                         struct inferior *inf, const char *filename,
11739                         int *remote_errno)
11740 {
11741   struct remote_state *rs = get_remote_state ();
11742   char *p = rs->buf;
11743   char *attachment;
11744   int left = get_remote_packet_size ();
11745   int len, attachment_len;
11746   int read_len;
11747   char *ret;
11748
11749   if (remote_hostio_set_filesystem (inf, remote_errno) != 0)
11750     return NULL;
11751
11752   remote_buffer_add_string (&p, &left, "vFile:readlink:");
11753
11754   remote_buffer_add_bytes (&p, &left, (const gdb_byte *) filename,
11755                            strlen (filename));
11756
11757   len = remote_hostio_send_command (p - rs->buf, PACKET_vFile_readlink,
11758                                     remote_errno, &attachment,
11759                                     &attachment_len);
11760
11761   if (len < 0)
11762     return NULL;
11763
11764   ret = (char *) xmalloc (len + 1);
11765
11766   read_len = remote_unescape_input ((gdb_byte *) attachment, attachment_len,
11767                                     (gdb_byte *) ret, len);
11768   if (read_len != len)
11769     error (_("Readlink returned %d, but %d bytes."), len, read_len);
11770
11771   ret[len] = '\0';
11772   return ret;
11773 }
11774
11775 /* Implementation of to_fileio_fstat.  */
11776
11777 static int
11778 remote_hostio_fstat (struct target_ops *self,
11779                      int fd, struct stat *st,
11780                      int *remote_errno)
11781 {
11782   struct remote_state *rs = get_remote_state ();
11783   char *p = rs->buf;
11784   int left = get_remote_packet_size ();
11785   int attachment_len, ret;
11786   char *attachment;
11787   struct fio_stat fst;
11788   int read_len;
11789
11790   remote_buffer_add_string (&p, &left, "vFile:fstat:");
11791
11792   remote_buffer_add_int (&p, &left, fd);
11793
11794   ret = remote_hostio_send_command (p - rs->buf, PACKET_vFile_fstat,
11795                                     remote_errno, &attachment,
11796                                     &attachment_len);
11797   if (ret < 0)
11798     {
11799       if (*remote_errno != FILEIO_ENOSYS)
11800         return ret;
11801
11802       /* Strictly we should return -1, ENOSYS here, but when
11803          "set sysroot remote:" was implemented in August 2008
11804          BFD's need for a stat function was sidestepped with
11805          this hack.  This was not remedied until March 2015
11806          so we retain the previous behavior to avoid breaking
11807          compatibility.
11808
11809          Note that the memset is a March 2015 addition; older
11810          GDBs set st_size *and nothing else* so the structure
11811          would have garbage in all other fields.  This might
11812          break something but retaining the previous behavior
11813          here would be just too wrong.  */
11814
11815       memset (st, 0, sizeof (struct stat));
11816       st->st_size = INT_MAX;
11817       return 0;
11818     }
11819
11820   read_len = remote_unescape_input ((gdb_byte *) attachment, attachment_len,
11821                                     (gdb_byte *) &fst, sizeof (fst));
11822
11823   if (read_len != ret)
11824     error (_("vFile:fstat returned %d, but %d bytes."), ret, read_len);
11825
11826   if (read_len != sizeof (fst))
11827     error (_("vFile:fstat returned %d bytes, but expecting %d."),
11828            read_len, (int) sizeof (fst));
11829
11830   remote_fileio_to_host_stat (&fst, st);
11831
11832   return 0;
11833 }
11834
11835 /* Implementation of to_filesystem_is_local.  */
11836
11837 static int
11838 remote_filesystem_is_local (struct target_ops *self)
11839 {
11840   /* Valgrind GDB presents itself as a remote target but works
11841      on the local filesystem: it does not implement remote get
11842      and users are not expected to set a sysroot.  To handle
11843      this case we treat the remote filesystem as local if the
11844      sysroot is exactly TARGET_SYSROOT_PREFIX and if the stub
11845      does not support vFile:open.  */
11846   if (strcmp (gdb_sysroot, TARGET_SYSROOT_PREFIX) == 0)
11847     {
11848       enum packet_support ps = packet_support (PACKET_vFile_open);
11849
11850       if (ps == PACKET_SUPPORT_UNKNOWN)
11851         {
11852           int fd, remote_errno;
11853
11854           /* Try opening a file to probe support.  The supplied
11855              filename is irrelevant, we only care about whether
11856              the stub recognizes the packet or not.  */
11857           fd = remote_hostio_open (self, NULL, "just probing",
11858                                    FILEIO_O_RDONLY, 0700, 0,
11859                                    &remote_errno);
11860
11861           if (fd >= 0)
11862             remote_hostio_close (self, fd, &remote_errno);
11863
11864           ps = packet_support (PACKET_vFile_open);
11865         }
11866
11867       if (ps == PACKET_DISABLE)
11868         {
11869           static int warning_issued = 0;
11870
11871           if (!warning_issued)
11872             {
11873               warning (_("remote target does not support file"
11874                          " transfer, attempting to access files"
11875                          " from local filesystem."));
11876               warning_issued = 1;
11877             }
11878
11879           return 1;
11880         }
11881     }
11882
11883   return 0;
11884 }
11885
11886 static int
11887 remote_fileio_errno_to_host (int errnum)
11888 {
11889   switch (errnum)
11890     {
11891       case FILEIO_EPERM:
11892         return EPERM;
11893       case FILEIO_ENOENT:
11894         return ENOENT;
11895       case FILEIO_EINTR:
11896         return EINTR;
11897       case FILEIO_EIO:
11898         return EIO;
11899       case FILEIO_EBADF:
11900         return EBADF;
11901       case FILEIO_EACCES:
11902         return EACCES;
11903       case FILEIO_EFAULT:
11904         return EFAULT;
11905       case FILEIO_EBUSY:
11906         return EBUSY;
11907       case FILEIO_EEXIST:
11908         return EEXIST;
11909       case FILEIO_ENODEV:
11910         return ENODEV;
11911       case FILEIO_ENOTDIR:
11912         return ENOTDIR;
11913       case FILEIO_EISDIR:
11914         return EISDIR;
11915       case FILEIO_EINVAL:
11916         return EINVAL;
11917       case FILEIO_ENFILE:
11918         return ENFILE;
11919       case FILEIO_EMFILE:
11920         return EMFILE;
11921       case FILEIO_EFBIG:
11922         return EFBIG;
11923       case FILEIO_ENOSPC:
11924         return ENOSPC;
11925       case FILEIO_ESPIPE:
11926         return ESPIPE;
11927       case FILEIO_EROFS:
11928         return EROFS;
11929       case FILEIO_ENOSYS:
11930         return ENOSYS;
11931       case FILEIO_ENAMETOOLONG:
11932         return ENAMETOOLONG;
11933     }
11934   return -1;
11935 }
11936
11937 static char *
11938 remote_hostio_error (int errnum)
11939 {
11940   int host_error = remote_fileio_errno_to_host (errnum);
11941
11942   if (host_error == -1)
11943     error (_("Unknown remote I/O error %d"), errnum);
11944   else
11945     error (_("Remote I/O error: %s"), safe_strerror (host_error));
11946 }
11947
11948 static void
11949 remote_hostio_close_cleanup (void *opaque)
11950 {
11951   int fd = *(int *) opaque;
11952   int remote_errno;
11953
11954   remote_hostio_close (find_target_at (process_stratum), fd, &remote_errno);
11955 }
11956
11957 void
11958 remote_file_put (const char *local_file, const char *remote_file, int from_tty)
11959 {
11960   struct cleanup *back_to, *close_cleanup;
11961   int retcode, fd, remote_errno, bytes, io_size;
11962   gdb_byte *buffer;
11963   int bytes_in_buffer;
11964   int saw_eof;
11965   ULONGEST offset;
11966   struct remote_state *rs = get_remote_state ();
11967
11968   if (!rs->remote_desc)
11969     error (_("command can only be used with remote target"));
11970
11971   gdb_file_up file = gdb_fopen_cloexec (local_file, "rb");
11972   if (file == NULL)
11973     perror_with_name (local_file);
11974
11975   fd = remote_hostio_open (find_target_at (process_stratum), NULL,
11976                            remote_file, (FILEIO_O_WRONLY | FILEIO_O_CREAT
11977                                          | FILEIO_O_TRUNC),
11978                            0700, 0, &remote_errno);
11979   if (fd == -1)
11980     remote_hostio_error (remote_errno);
11981
11982   /* Send up to this many bytes at once.  They won't all fit in the
11983      remote packet limit, so we'll transfer slightly fewer.  */
11984   io_size = get_remote_packet_size ();
11985   buffer = (gdb_byte *) xmalloc (io_size);
11986   back_to = make_cleanup (xfree, buffer);
11987
11988   close_cleanup = make_cleanup (remote_hostio_close_cleanup, &fd);
11989
11990   bytes_in_buffer = 0;
11991   saw_eof = 0;
11992   offset = 0;
11993   while (bytes_in_buffer || !saw_eof)
11994     {
11995       if (!saw_eof)
11996         {
11997           bytes = fread (buffer + bytes_in_buffer, 1,
11998                          io_size - bytes_in_buffer,
11999                          file.get ());
12000           if (bytes == 0)
12001             {
12002               if (ferror (file.get ()))
12003                 error (_("Error reading %s."), local_file);
12004               else
12005                 {
12006                   /* EOF.  Unless there is something still in the
12007                      buffer from the last iteration, we are done.  */
12008                   saw_eof = 1;
12009                   if (bytes_in_buffer == 0)
12010                     break;
12011                 }
12012             }
12013         }
12014       else
12015         bytes = 0;
12016
12017       bytes += bytes_in_buffer;
12018       bytes_in_buffer = 0;
12019
12020       retcode = remote_hostio_pwrite (find_target_at (process_stratum),
12021                                       fd, buffer, bytes,
12022                                       offset, &remote_errno);
12023
12024       if (retcode < 0)
12025         remote_hostio_error (remote_errno);
12026       else if (retcode == 0)
12027         error (_("Remote write of %d bytes returned 0!"), bytes);
12028       else if (retcode < bytes)
12029         {
12030           /* Short write.  Save the rest of the read data for the next
12031              write.  */
12032           bytes_in_buffer = bytes - retcode;
12033           memmove (buffer, buffer + retcode, bytes_in_buffer);
12034         }
12035
12036       offset += retcode;
12037     }
12038
12039   discard_cleanups (close_cleanup);
12040   if (remote_hostio_close (find_target_at (process_stratum), fd, &remote_errno))
12041     remote_hostio_error (remote_errno);
12042
12043   if (from_tty)
12044     printf_filtered (_("Successfully sent file \"%s\".\n"), local_file);
12045   do_cleanups (back_to);
12046 }
12047
12048 void
12049 remote_file_get (const char *remote_file, const char *local_file, int from_tty)
12050 {
12051   struct cleanup *back_to, *close_cleanup;
12052   int fd, remote_errno, bytes, io_size;
12053   gdb_byte *buffer;
12054   ULONGEST offset;
12055   struct remote_state *rs = get_remote_state ();
12056
12057   if (!rs->remote_desc)
12058     error (_("command can only be used with remote target"));
12059
12060   fd = remote_hostio_open (find_target_at (process_stratum), NULL,
12061                            remote_file, FILEIO_O_RDONLY, 0, 0,
12062                            &remote_errno);
12063   if (fd == -1)
12064     remote_hostio_error (remote_errno);
12065
12066   gdb_file_up file = gdb_fopen_cloexec (local_file, "wb");
12067   if (file == NULL)
12068     perror_with_name (local_file);
12069
12070   /* Send up to this many bytes at once.  They won't all fit in the
12071      remote packet limit, so we'll transfer slightly fewer.  */
12072   io_size = get_remote_packet_size ();
12073   buffer = (gdb_byte *) xmalloc (io_size);
12074   back_to = make_cleanup (xfree, buffer);
12075
12076   close_cleanup = make_cleanup (remote_hostio_close_cleanup, &fd);
12077
12078   offset = 0;
12079   while (1)
12080     {
12081       bytes = remote_hostio_pread (find_target_at (process_stratum),
12082                                    fd, buffer, io_size, offset, &remote_errno);
12083       if (bytes == 0)
12084         /* Success, but no bytes, means end-of-file.  */
12085         break;
12086       if (bytes == -1)
12087         remote_hostio_error (remote_errno);
12088
12089       offset += bytes;
12090
12091       bytes = fwrite (buffer, 1, bytes, file.get ());
12092       if (bytes == 0)
12093         perror_with_name (local_file);
12094     }
12095
12096   discard_cleanups (close_cleanup);
12097   if (remote_hostio_close (find_target_at (process_stratum), fd, &remote_errno))
12098     remote_hostio_error (remote_errno);
12099
12100   if (from_tty)
12101     printf_filtered (_("Successfully fetched file \"%s\".\n"), remote_file);
12102   do_cleanups (back_to);
12103 }
12104
12105 void
12106 remote_file_delete (const char *remote_file, int from_tty)
12107 {
12108   int retcode, remote_errno;
12109   struct remote_state *rs = get_remote_state ();
12110
12111   if (!rs->remote_desc)
12112     error (_("command can only be used with remote target"));
12113
12114   retcode = remote_hostio_unlink (find_target_at (process_stratum),
12115                                   NULL, remote_file, &remote_errno);
12116   if (retcode == -1)
12117     remote_hostio_error (remote_errno);
12118
12119   if (from_tty)
12120     printf_filtered (_("Successfully deleted file \"%s\".\n"), remote_file);
12121 }
12122
12123 static void
12124 remote_put_command (const char *args, int from_tty)
12125 {
12126   if (args == NULL)
12127     error_no_arg (_("file to put"));
12128
12129   gdb_argv argv (args);
12130   if (argv[0] == NULL || argv[1] == NULL || argv[2] != NULL)
12131     error (_("Invalid parameters to remote put"));
12132
12133   remote_file_put (argv[0], argv[1], from_tty);
12134 }
12135
12136 static void
12137 remote_get_command (const char *args, int from_tty)
12138 {
12139   if (args == NULL)
12140     error_no_arg (_("file to get"));
12141
12142   gdb_argv argv (args);
12143   if (argv[0] == NULL || argv[1] == NULL || argv[2] != NULL)
12144     error (_("Invalid parameters to remote get"));
12145
12146   remote_file_get (argv[0], argv[1], from_tty);
12147 }
12148
12149 static void
12150 remote_delete_command (const char *args, int from_tty)
12151 {
12152   if (args == NULL)
12153     error_no_arg (_("file to delete"));
12154
12155   gdb_argv argv (args);
12156   if (argv[0] == NULL || argv[1] != NULL)
12157     error (_("Invalid parameters to remote delete"));
12158
12159   remote_file_delete (argv[0], from_tty);
12160 }
12161
12162 static void
12163 remote_command (const char *args, int from_tty)
12164 {
12165   help_list (remote_cmdlist, "remote ", all_commands, gdb_stdout);
12166 }
12167
12168 static int
12169 remote_can_execute_reverse (struct target_ops *self)
12170 {
12171   if (packet_support (PACKET_bs) == PACKET_ENABLE
12172       || packet_support (PACKET_bc) == PACKET_ENABLE)
12173     return 1;
12174   else
12175     return 0;
12176 }
12177
12178 static int
12179 remote_supports_non_stop (struct target_ops *self)
12180 {
12181   return 1;
12182 }
12183
12184 static int
12185 remote_supports_disable_randomization (struct target_ops *self)
12186 {
12187   /* Only supported in extended mode.  */
12188   return 0;
12189 }
12190
12191 static int
12192 remote_supports_multi_process (struct target_ops *self)
12193 {
12194   struct remote_state *rs = get_remote_state ();
12195
12196   return remote_multi_process_p (rs);
12197 }
12198
12199 static int
12200 remote_supports_cond_tracepoints (void)
12201 {
12202   return packet_support (PACKET_ConditionalTracepoints) == PACKET_ENABLE;
12203 }
12204
12205 static int
12206 remote_supports_cond_breakpoints (struct target_ops *self)
12207 {
12208   return packet_support (PACKET_ConditionalBreakpoints) == PACKET_ENABLE;
12209 }
12210
12211 static int
12212 remote_supports_fast_tracepoints (void)
12213 {
12214   return packet_support (PACKET_FastTracepoints) == PACKET_ENABLE;
12215 }
12216
12217 static int
12218 remote_supports_static_tracepoints (void)
12219 {
12220   return packet_support (PACKET_StaticTracepoints) == PACKET_ENABLE;
12221 }
12222
12223 static int
12224 remote_supports_install_in_trace (void)
12225 {
12226   return packet_support (PACKET_InstallInTrace) == PACKET_ENABLE;
12227 }
12228
12229 static int
12230 remote_supports_enable_disable_tracepoint (struct target_ops *self)
12231 {
12232   return (packet_support (PACKET_EnableDisableTracepoints_feature)
12233           == PACKET_ENABLE);
12234 }
12235
12236 static int
12237 remote_supports_string_tracing (struct target_ops *self)
12238 {
12239   return packet_support (PACKET_tracenz_feature) == PACKET_ENABLE;
12240 }
12241
12242 static int
12243 remote_can_run_breakpoint_commands (struct target_ops *self)
12244 {
12245   return packet_support (PACKET_BreakpointCommands) == PACKET_ENABLE;
12246 }
12247
12248 static void
12249 remote_trace_init (struct target_ops *self)
12250 {
12251   struct remote_state *rs = get_remote_state ();
12252
12253   putpkt ("QTinit");
12254   remote_get_noisy_reply ();
12255   if (strcmp (rs->buf, "OK") != 0)
12256     error (_("Target does not support this command."));
12257 }
12258
12259 /* Recursive routine to walk through command list including loops, and
12260    download packets for each command.  */
12261
12262 static void
12263 remote_download_command_source (int num, ULONGEST addr,
12264                                 struct command_line *cmds)
12265 {
12266   struct remote_state *rs = get_remote_state ();
12267   struct command_line *cmd;
12268
12269   for (cmd = cmds; cmd; cmd = cmd->next)
12270     {
12271       QUIT;     /* Allow user to bail out with ^C.  */
12272       strcpy (rs->buf, "QTDPsrc:");
12273       encode_source_string (num, addr, "cmd", cmd->line,
12274                             rs->buf + strlen (rs->buf),
12275                             rs->buf_size - strlen (rs->buf));
12276       putpkt (rs->buf);
12277       remote_get_noisy_reply ();
12278       if (strcmp (rs->buf, "OK"))
12279         warning (_("Target does not support source download."));
12280
12281       if (cmd->control_type == while_control
12282           || cmd->control_type == while_stepping_control)
12283         {
12284           remote_download_command_source (num, addr, *cmd->body_list);
12285
12286           QUIT; /* Allow user to bail out with ^C.  */
12287           strcpy (rs->buf, "QTDPsrc:");
12288           encode_source_string (num, addr, "cmd", "end",
12289                                 rs->buf + strlen (rs->buf),
12290                                 rs->buf_size - strlen (rs->buf));
12291           putpkt (rs->buf);
12292           remote_get_noisy_reply ();
12293           if (strcmp (rs->buf, "OK"))
12294             warning (_("Target does not support source download."));
12295         }
12296     }
12297 }
12298
12299 static void
12300 remote_download_tracepoint (struct target_ops *self, struct bp_location *loc)
12301 {
12302 #define BUF_SIZE 2048
12303
12304   CORE_ADDR tpaddr;
12305   char addrbuf[40];
12306   char buf[BUF_SIZE];
12307   std::vector<std::string> tdp_actions;
12308   std::vector<std::string> stepping_actions;
12309   char *pkt;
12310   struct breakpoint *b = loc->owner;
12311   struct tracepoint *t = (struct tracepoint *) b;
12312   struct remote_state *rs = get_remote_state ();
12313
12314   encode_actions_rsp (loc, &tdp_actions, &stepping_actions);
12315
12316   tpaddr = loc->address;
12317   sprintf_vma (addrbuf, tpaddr);
12318   xsnprintf (buf, BUF_SIZE, "QTDP:%x:%s:%c:%lx:%x", b->number,
12319              addrbuf, /* address */
12320              (b->enable_state == bp_enabled ? 'E' : 'D'),
12321              t->step_count, t->pass_count);
12322   /* Fast tracepoints are mostly handled by the target, but we can
12323      tell the target how big of an instruction block should be moved
12324      around.  */
12325   if (b->type == bp_fast_tracepoint)
12326     {
12327       /* Only test for support at download time; we may not know
12328          target capabilities at definition time.  */
12329       if (remote_supports_fast_tracepoints ())
12330         {
12331           if (gdbarch_fast_tracepoint_valid_at (loc->gdbarch, tpaddr,
12332                                                 NULL))
12333             xsnprintf (buf + strlen (buf), BUF_SIZE - strlen (buf), ":F%x",
12334                        gdb_insn_length (loc->gdbarch, tpaddr));
12335           else
12336             /* If it passed validation at definition but fails now,
12337                something is very wrong.  */
12338             internal_error (__FILE__, __LINE__,
12339                             _("Fast tracepoint not "
12340                               "valid during download"));
12341         }
12342       else
12343         /* Fast tracepoints are functionally identical to regular
12344            tracepoints, so don't take lack of support as a reason to
12345            give up on the trace run.  */
12346         warning (_("Target does not support fast tracepoints, "
12347                    "downloading %d as regular tracepoint"), b->number);
12348     }
12349   else if (b->type == bp_static_tracepoint)
12350     {
12351       /* Only test for support at download time; we may not know
12352          target capabilities at definition time.  */
12353       if (remote_supports_static_tracepoints ())
12354         {
12355           struct static_tracepoint_marker marker;
12356
12357           if (target_static_tracepoint_marker_at (tpaddr, &marker))
12358             strcat (buf, ":S");
12359           else
12360             error (_("Static tracepoint not valid during download"));
12361         }
12362       else
12363         /* Fast tracepoints are functionally identical to regular
12364            tracepoints, so don't take lack of support as a reason
12365            to give up on the trace run.  */
12366         error (_("Target does not support static tracepoints"));
12367     }
12368   /* If the tracepoint has a conditional, make it into an agent
12369      expression and append to the definition.  */
12370   if (loc->cond)
12371     {
12372       /* Only test support at download time, we may not know target
12373          capabilities at definition time.  */
12374       if (remote_supports_cond_tracepoints ())
12375         {
12376           agent_expr_up aexpr = gen_eval_for_expr (tpaddr, loc->cond.get ());
12377           xsnprintf (buf + strlen (buf), BUF_SIZE - strlen (buf), ":X%x,",
12378                      aexpr->len);
12379           pkt = buf + strlen (buf);
12380           for (int ndx = 0; ndx < aexpr->len; ++ndx)
12381             pkt = pack_hex_byte (pkt, aexpr->buf[ndx]);
12382           *pkt = '\0';
12383         }
12384       else
12385         warning (_("Target does not support conditional tracepoints, "
12386                    "ignoring tp %d cond"), b->number);
12387     }
12388
12389   if (b->commands || *default_collect)
12390     strcat (buf, "-");
12391   putpkt (buf);
12392   remote_get_noisy_reply ();
12393   if (strcmp (rs->buf, "OK"))
12394     error (_("Target does not support tracepoints."));
12395
12396   /* do_single_steps (t); */
12397   for (auto action_it = tdp_actions.begin ();
12398        action_it != tdp_actions.end (); action_it++)
12399     {
12400       QUIT;     /* Allow user to bail out with ^C.  */
12401
12402       bool has_more = (action_it != tdp_actions.end ()
12403                        || !stepping_actions.empty ());
12404
12405       xsnprintf (buf, BUF_SIZE, "QTDP:-%x:%s:%s%c",
12406                  b->number, addrbuf, /* address */
12407                  action_it->c_str (),
12408                  has_more ? '-' : 0);
12409       putpkt (buf);
12410       remote_get_noisy_reply ();
12411       if (strcmp (rs->buf, "OK"))
12412         error (_("Error on target while setting tracepoints."));
12413     }
12414
12415     for (auto action_it = stepping_actions.begin ();
12416          action_it != stepping_actions.end (); action_it++)
12417       {
12418         QUIT;   /* Allow user to bail out with ^C.  */
12419
12420         bool is_first = action_it == stepping_actions.begin ();
12421         bool has_more = action_it != stepping_actions.end ();
12422
12423         xsnprintf (buf, BUF_SIZE, "QTDP:-%x:%s:%s%s%s",
12424                    b->number, addrbuf, /* address */
12425                    is_first ? "S" : "",
12426                    action_it->c_str (),
12427                    has_more ? "-" : "");
12428         putpkt (buf);
12429         remote_get_noisy_reply ();
12430         if (strcmp (rs->buf, "OK"))
12431           error (_("Error on target while setting tracepoints."));
12432       }
12433
12434   if (packet_support (PACKET_TracepointSource) == PACKET_ENABLE)
12435     {
12436       if (b->location != NULL)
12437         {
12438           strcpy (buf, "QTDPsrc:");
12439           encode_source_string (b->number, loc->address, "at",
12440                                 event_location_to_string (b->location.get ()),
12441                                 buf + strlen (buf), 2048 - strlen (buf));
12442           putpkt (buf);
12443           remote_get_noisy_reply ();
12444           if (strcmp (rs->buf, "OK"))
12445             warning (_("Target does not support source download."));
12446         }
12447       if (b->cond_string)
12448         {
12449           strcpy (buf, "QTDPsrc:");
12450           encode_source_string (b->number, loc->address,
12451                                 "cond", b->cond_string, buf + strlen (buf),
12452                                 2048 - strlen (buf));
12453           putpkt (buf);
12454           remote_get_noisy_reply ();
12455           if (strcmp (rs->buf, "OK"))
12456             warning (_("Target does not support source download."));
12457         }
12458       remote_download_command_source (b->number, loc->address,
12459                                       breakpoint_commands (b));
12460     }
12461 }
12462
12463 static int
12464 remote_can_download_tracepoint (struct target_ops *self)
12465 {
12466   struct remote_state *rs = get_remote_state ();
12467   struct trace_status *ts;
12468   int status;
12469
12470   /* Don't try to install tracepoints until we've relocated our
12471      symbols, and fetched and merged the target's tracepoint list with
12472      ours.  */
12473   if (rs->starting_up)
12474     return 0;
12475
12476   ts = current_trace_status ();
12477   status = remote_get_trace_status (self, ts);
12478
12479   if (status == -1 || !ts->running_known || !ts->running)
12480     return 0;
12481
12482   /* If we are in a tracing experiment, but remote stub doesn't support
12483      installing tracepoint in trace, we have to return.  */
12484   if (!remote_supports_install_in_trace ())
12485     return 0;
12486
12487   return 1;
12488 }
12489
12490
12491 static void
12492 remote_download_trace_state_variable (struct target_ops *self,
12493                                       struct trace_state_variable *tsv)
12494 {
12495   struct remote_state *rs = get_remote_state ();
12496   char *p;
12497
12498   xsnprintf (rs->buf, get_remote_packet_size (), "QTDV:%x:%s:%x:",
12499              tsv->number, phex ((ULONGEST) tsv->initial_value, 8),
12500              tsv->builtin);
12501   p = rs->buf + strlen (rs->buf);
12502   if ((p - rs->buf) + strlen (tsv->name) * 2 >= get_remote_packet_size ())
12503     error (_("Trace state variable name too long for tsv definition packet"));
12504   p += 2 * bin2hex ((gdb_byte *) (tsv->name), p, strlen (tsv->name));
12505   *p++ = '\0';
12506   putpkt (rs->buf);
12507   remote_get_noisy_reply ();
12508   if (*rs->buf == '\0')
12509     error (_("Target does not support this command."));
12510   if (strcmp (rs->buf, "OK") != 0)
12511     error (_("Error on target while downloading trace state variable."));
12512 }
12513
12514 static void
12515 remote_enable_tracepoint (struct target_ops *self,
12516                           struct bp_location *location)
12517 {
12518   struct remote_state *rs = get_remote_state ();
12519   char addr_buf[40];
12520
12521   sprintf_vma (addr_buf, location->address);
12522   xsnprintf (rs->buf, get_remote_packet_size (), "QTEnable:%x:%s",
12523              location->owner->number, addr_buf);
12524   putpkt (rs->buf);
12525   remote_get_noisy_reply ();
12526   if (*rs->buf == '\0')
12527     error (_("Target does not support enabling tracepoints while a trace run is ongoing."));
12528   if (strcmp (rs->buf, "OK") != 0)
12529     error (_("Error on target while enabling tracepoint."));
12530 }
12531
12532 static void
12533 remote_disable_tracepoint (struct target_ops *self,
12534                            struct bp_location *location)
12535 {
12536   struct remote_state *rs = get_remote_state ();
12537   char addr_buf[40];
12538
12539   sprintf_vma (addr_buf, location->address);
12540   xsnprintf (rs->buf, get_remote_packet_size (), "QTDisable:%x:%s",
12541              location->owner->number, addr_buf);
12542   putpkt (rs->buf);
12543   remote_get_noisy_reply ();
12544   if (*rs->buf == '\0')
12545     error (_("Target does not support disabling tracepoints while a trace run is ongoing."));
12546   if (strcmp (rs->buf, "OK") != 0)
12547     error (_("Error on target while disabling tracepoint."));
12548 }
12549
12550 static void
12551 remote_trace_set_readonly_regions (struct target_ops *self)
12552 {
12553   asection *s;
12554   bfd *abfd = NULL;
12555   bfd_size_type size;
12556   bfd_vma vma;
12557   int anysecs = 0;
12558   int offset = 0;
12559
12560   if (!exec_bfd)
12561     return;                     /* No information to give.  */
12562
12563   struct remote_state *rs = get_remote_state ();
12564
12565   strcpy (rs->buf, "QTro");
12566   offset = strlen (rs->buf);
12567   for (s = exec_bfd->sections; s; s = s->next)
12568     {
12569       char tmp1[40], tmp2[40];
12570       int sec_length;
12571
12572       if ((s->flags & SEC_LOAD) == 0 ||
12573       /*  (s->flags & SEC_CODE) == 0 || */
12574           (s->flags & SEC_READONLY) == 0)
12575         continue;
12576
12577       anysecs = 1;
12578       vma = bfd_get_section_vma (abfd, s);
12579       size = bfd_get_section_size (s);
12580       sprintf_vma (tmp1, vma);
12581       sprintf_vma (tmp2, vma + size);
12582       sec_length = 1 + strlen (tmp1) + 1 + strlen (tmp2);
12583       if (offset + sec_length + 1 > rs->buf_size)
12584         {
12585           if (packet_support (PACKET_qXfer_traceframe_info) != PACKET_ENABLE)
12586             warning (_("\
12587 Too many sections for read-only sections definition packet."));
12588           break;
12589         }
12590       xsnprintf (rs->buf + offset, rs->buf_size - offset, ":%s,%s",
12591                  tmp1, tmp2);
12592       offset += sec_length;
12593     }
12594   if (anysecs)
12595     {
12596       putpkt (rs->buf);
12597       getpkt (&rs->buf, &rs->buf_size, 0);
12598     }
12599 }
12600
12601 static void
12602 remote_trace_start (struct target_ops *self)
12603 {
12604   struct remote_state *rs = get_remote_state ();
12605
12606   putpkt ("QTStart");
12607   remote_get_noisy_reply ();
12608   if (*rs->buf == '\0')
12609     error (_("Target does not support this command."));
12610   if (strcmp (rs->buf, "OK") != 0)
12611     error (_("Bogus reply from target: %s"), rs->buf);
12612 }
12613
12614 static int
12615 remote_get_trace_status (struct target_ops *self, struct trace_status *ts)
12616 {
12617   /* Initialize it just to avoid a GCC false warning.  */
12618   char *p = NULL;
12619   /* FIXME we need to get register block size some other way.  */
12620   extern int trace_regblock_size;
12621   enum packet_result result;
12622   struct remote_state *rs = get_remote_state ();
12623
12624   if (packet_support (PACKET_qTStatus) == PACKET_DISABLE)
12625     return -1;
12626
12627   trace_regblock_size
12628     = get_remote_arch_state (target_gdbarch ())->sizeof_g_packet;
12629
12630   putpkt ("qTStatus");
12631
12632   TRY
12633     {
12634       p = remote_get_noisy_reply ();
12635     }
12636   CATCH (ex, RETURN_MASK_ERROR)
12637     {
12638       if (ex.error != TARGET_CLOSE_ERROR)
12639         {
12640           exception_fprintf (gdb_stderr, ex, "qTStatus: ");
12641           return -1;
12642         }
12643       throw_exception (ex);
12644     }
12645   END_CATCH
12646
12647   result = packet_ok (p, &remote_protocol_packets[PACKET_qTStatus]);
12648
12649   /* If the remote target doesn't do tracing, flag it.  */
12650   if (result == PACKET_UNKNOWN)
12651     return -1;
12652
12653   /* We're working with a live target.  */
12654   ts->filename = NULL;
12655
12656   if (*p++ != 'T')
12657     error (_("Bogus trace status reply from target: %s"), rs->buf);
12658
12659   /* Function 'parse_trace_status' sets default value of each field of
12660      'ts' at first, so we don't have to do it here.  */
12661   parse_trace_status (p, ts);
12662
12663   return ts->running;
12664 }
12665
12666 static void
12667 remote_get_tracepoint_status (struct target_ops *self, struct breakpoint *bp,
12668                               struct uploaded_tp *utp)
12669 {
12670   struct remote_state *rs = get_remote_state ();
12671   char *reply;
12672   struct bp_location *loc;
12673   struct tracepoint *tp = (struct tracepoint *) bp;
12674   size_t size = get_remote_packet_size ();
12675
12676   if (tp)
12677     {
12678       tp->hit_count = 0;
12679       tp->traceframe_usage = 0;
12680       for (loc = tp->loc; loc; loc = loc->next)
12681         {
12682           /* If the tracepoint was never downloaded, don't go asking for
12683              any status.  */
12684           if (tp->number_on_target == 0)
12685             continue;
12686           xsnprintf (rs->buf, size, "qTP:%x:%s", tp->number_on_target,
12687                      phex_nz (loc->address, 0));
12688           putpkt (rs->buf);
12689           reply = remote_get_noisy_reply ();
12690           if (reply && *reply)
12691             {
12692               if (*reply == 'V')
12693                 parse_tracepoint_status (reply + 1, bp, utp);
12694             }
12695         }
12696     }
12697   else if (utp)
12698     {
12699       utp->hit_count = 0;
12700       utp->traceframe_usage = 0;
12701       xsnprintf (rs->buf, size, "qTP:%x:%s", utp->number,
12702                  phex_nz (utp->addr, 0));
12703       putpkt (rs->buf);
12704       reply = remote_get_noisy_reply ();
12705       if (reply && *reply)
12706         {
12707           if (*reply == 'V')
12708             parse_tracepoint_status (reply + 1, bp, utp);
12709         }
12710     }
12711 }
12712
12713 static void
12714 remote_trace_stop (struct target_ops *self)
12715 {
12716   struct remote_state *rs = get_remote_state ();
12717
12718   putpkt ("QTStop");
12719   remote_get_noisy_reply ();
12720   if (*rs->buf == '\0')
12721     error (_("Target does not support this command."));
12722   if (strcmp (rs->buf, "OK") != 0)
12723     error (_("Bogus reply from target: %s"), rs->buf);
12724 }
12725
12726 static int
12727 remote_trace_find (struct target_ops *self,
12728                    enum trace_find_type type, int num,
12729                    CORE_ADDR addr1, CORE_ADDR addr2,
12730                    int *tpp)
12731 {
12732   struct remote_state *rs = get_remote_state ();
12733   char *endbuf = rs->buf + get_remote_packet_size ();
12734   char *p, *reply;
12735   int target_frameno = -1, target_tracept = -1;
12736
12737   /* Lookups other than by absolute frame number depend on the current
12738      trace selected, so make sure it is correct on the remote end
12739      first.  */
12740   if (type != tfind_number)
12741     set_remote_traceframe ();
12742
12743   p = rs->buf;
12744   strcpy (p, "QTFrame:");
12745   p = strchr (p, '\0');
12746   switch (type)
12747     {
12748     case tfind_number:
12749       xsnprintf (p, endbuf - p, "%x", num);
12750       break;
12751     case tfind_pc:
12752       xsnprintf (p, endbuf - p, "pc:%s", phex_nz (addr1, 0));
12753       break;
12754     case tfind_tp:
12755       xsnprintf (p, endbuf - p, "tdp:%x", num);
12756       break;
12757     case tfind_range:
12758       xsnprintf (p, endbuf - p, "range:%s:%s", phex_nz (addr1, 0),
12759                  phex_nz (addr2, 0));
12760       break;
12761     case tfind_outside:
12762       xsnprintf (p, endbuf - p, "outside:%s:%s", phex_nz (addr1, 0),
12763                  phex_nz (addr2, 0));
12764       break;
12765     default:
12766       error (_("Unknown trace find type %d"), type);
12767     }
12768
12769   putpkt (rs->buf);
12770   reply = remote_get_noisy_reply ();
12771   if (*reply == '\0')
12772     error (_("Target does not support this command."));
12773
12774   while (reply && *reply)
12775     switch (*reply)
12776       {
12777       case 'F':
12778         p = ++reply;
12779         target_frameno = (int) strtol (p, &reply, 16);
12780         if (reply == p)
12781           error (_("Unable to parse trace frame number"));
12782         /* Don't update our remote traceframe number cache on failure
12783            to select a remote traceframe.  */
12784         if (target_frameno == -1)
12785           return -1;
12786         break;
12787       case 'T':
12788         p = ++reply;
12789         target_tracept = (int) strtol (p, &reply, 16);
12790         if (reply == p)
12791           error (_("Unable to parse tracepoint number"));
12792         break;
12793       case 'O':         /* "OK"? */
12794         if (reply[1] == 'K' && reply[2] == '\0')
12795           reply += 2;
12796         else
12797           error (_("Bogus reply from target: %s"), reply);
12798         break;
12799       default:
12800         error (_("Bogus reply from target: %s"), reply);
12801       }
12802   if (tpp)
12803     *tpp = target_tracept;
12804
12805   rs->remote_traceframe_number = target_frameno;
12806   return target_frameno;
12807 }
12808
12809 static int
12810 remote_get_trace_state_variable_value (struct target_ops *self,
12811                                        int tsvnum, LONGEST *val)
12812 {
12813   struct remote_state *rs = get_remote_state ();
12814   char *reply;
12815   ULONGEST uval;
12816
12817   set_remote_traceframe ();
12818
12819   xsnprintf (rs->buf, get_remote_packet_size (), "qTV:%x", tsvnum);
12820   putpkt (rs->buf);
12821   reply = remote_get_noisy_reply ();
12822   if (reply && *reply)
12823     {
12824       if (*reply == 'V')
12825         {
12826           unpack_varlen_hex (reply + 1, &uval);
12827           *val = (LONGEST) uval;
12828           return 1;
12829         }
12830     }
12831   return 0;
12832 }
12833
12834 static int
12835 remote_save_trace_data (struct target_ops *self, const char *filename)
12836 {
12837   struct remote_state *rs = get_remote_state ();
12838   char *p, *reply;
12839
12840   p = rs->buf;
12841   strcpy (p, "QTSave:");
12842   p += strlen (p);
12843   if ((p - rs->buf) + strlen (filename) * 2 >= get_remote_packet_size ())
12844     error (_("Remote file name too long for trace save packet"));
12845   p += 2 * bin2hex ((gdb_byte *) filename, p, strlen (filename));
12846   *p++ = '\0';
12847   putpkt (rs->buf);
12848   reply = remote_get_noisy_reply ();
12849   if (*reply == '\0')
12850     error (_("Target does not support this command."));
12851   if (strcmp (reply, "OK") != 0)
12852     error (_("Bogus reply from target: %s"), reply);
12853   return 0;
12854 }
12855
12856 /* This is basically a memory transfer, but needs to be its own packet
12857    because we don't know how the target actually organizes its trace
12858    memory, plus we want to be able to ask for as much as possible, but
12859    not be unhappy if we don't get as much as we ask for.  */
12860
12861 static LONGEST
12862 remote_get_raw_trace_data (struct target_ops *self,
12863                            gdb_byte *buf, ULONGEST offset, LONGEST len)
12864 {
12865   struct remote_state *rs = get_remote_state ();
12866   char *reply;
12867   char *p;
12868   int rslt;
12869
12870   p = rs->buf;
12871   strcpy (p, "qTBuffer:");
12872   p += strlen (p);
12873   p += hexnumstr (p, offset);
12874   *p++ = ',';
12875   p += hexnumstr (p, len);
12876   *p++ = '\0';
12877
12878   putpkt (rs->buf);
12879   reply = remote_get_noisy_reply ();
12880   if (reply && *reply)
12881     {
12882       /* 'l' by itself means we're at the end of the buffer and
12883          there is nothing more to get.  */
12884       if (*reply == 'l')
12885         return 0;
12886
12887       /* Convert the reply into binary.  Limit the number of bytes to
12888          convert according to our passed-in buffer size, rather than
12889          what was returned in the packet; if the target is
12890          unexpectedly generous and gives us a bigger reply than we
12891          asked for, we don't want to crash.  */
12892       rslt = hex2bin (reply, buf, len);
12893       return rslt;
12894     }
12895
12896   /* Something went wrong, flag as an error.  */
12897   return -1;
12898 }
12899
12900 static void
12901 remote_set_disconnected_tracing (struct target_ops *self, int val)
12902 {
12903   struct remote_state *rs = get_remote_state ();
12904
12905   if (packet_support (PACKET_DisconnectedTracing_feature) == PACKET_ENABLE)
12906     {
12907       char *reply;
12908
12909       xsnprintf (rs->buf, get_remote_packet_size (), "QTDisconnected:%x", val);
12910       putpkt (rs->buf);
12911       reply = remote_get_noisy_reply ();
12912       if (*reply == '\0')
12913         error (_("Target does not support this command."));
12914       if (strcmp (reply, "OK") != 0)
12915         error (_("Bogus reply from target: %s"), reply);
12916     }
12917   else if (val)
12918     warning (_("Target does not support disconnected tracing."));
12919 }
12920
12921 static int
12922 remote_core_of_thread (struct target_ops *ops, ptid_t ptid)
12923 {
12924   struct thread_info *info = find_thread_ptid (ptid);
12925
12926   if (info && info->priv)
12927     return info->priv->core;
12928   return -1;
12929 }
12930
12931 static void
12932 remote_set_circular_trace_buffer (struct target_ops *self, int val)
12933 {
12934   struct remote_state *rs = get_remote_state ();
12935   char *reply;
12936
12937   xsnprintf (rs->buf, get_remote_packet_size (), "QTBuffer:circular:%x", val);
12938   putpkt (rs->buf);
12939   reply = remote_get_noisy_reply ();
12940   if (*reply == '\0')
12941     error (_("Target does not support this command."));
12942   if (strcmp (reply, "OK") != 0)
12943     error (_("Bogus reply from target: %s"), reply);
12944 }
12945
12946 static traceframe_info_up
12947 remote_traceframe_info (struct target_ops *self)
12948 {
12949   gdb::unique_xmalloc_ptr<char> text
12950     = target_read_stralloc (&current_target, TARGET_OBJECT_TRACEFRAME_INFO,
12951                             NULL);
12952   if (text != NULL)
12953     return parse_traceframe_info (text.get ());
12954
12955   return NULL;
12956 }
12957
12958 /* Handle the qTMinFTPILen packet.  Returns the minimum length of
12959    instruction on which a fast tracepoint may be placed.  Returns -1
12960    if the packet is not supported, and 0 if the minimum instruction
12961    length is unknown.  */
12962
12963 static int
12964 remote_get_min_fast_tracepoint_insn_len (struct target_ops *self)
12965 {
12966   struct remote_state *rs = get_remote_state ();
12967   char *reply;
12968
12969   /* If we're not debugging a process yet, the IPA can't be
12970      loaded.  */
12971   if (!target_has_execution)
12972     return 0;
12973
12974   /* Make sure the remote is pointing at the right process.  */
12975   set_general_process ();
12976
12977   xsnprintf (rs->buf, get_remote_packet_size (), "qTMinFTPILen");
12978   putpkt (rs->buf);
12979   reply = remote_get_noisy_reply ();
12980   if (*reply == '\0')
12981     return -1;
12982   else
12983     {
12984       ULONGEST min_insn_len;
12985
12986       unpack_varlen_hex (reply, &min_insn_len);
12987
12988       return (int) min_insn_len;
12989     }
12990 }
12991
12992 static void
12993 remote_set_trace_buffer_size (struct target_ops *self, LONGEST val)
12994 {
12995   if (packet_support (PACKET_QTBuffer_size) != PACKET_DISABLE)
12996     {
12997       struct remote_state *rs = get_remote_state ();
12998       char *buf = rs->buf;
12999       char *endbuf = rs->buf + get_remote_packet_size ();
13000       enum packet_result result;
13001
13002       gdb_assert (val >= 0 || val == -1);
13003       buf += xsnprintf (buf, endbuf - buf, "QTBuffer:size:");
13004       /* Send -1 as literal "-1" to avoid host size dependency.  */
13005       if (val < 0)
13006         {
13007           *buf++ = '-';
13008           buf += hexnumstr (buf, (ULONGEST) -val);
13009         }
13010       else
13011         buf += hexnumstr (buf, (ULONGEST) val);
13012
13013       putpkt (rs->buf);
13014       remote_get_noisy_reply ();
13015       result = packet_ok (rs->buf,
13016                   &remote_protocol_packets[PACKET_QTBuffer_size]);
13017
13018       if (result != PACKET_OK)
13019         warning (_("Bogus reply from target: %s"), rs->buf);
13020     }
13021 }
13022
13023 static int
13024 remote_set_trace_notes (struct target_ops *self,
13025                         const char *user, const char *notes,
13026                         const char *stop_notes)
13027 {
13028   struct remote_state *rs = get_remote_state ();
13029   char *reply;
13030   char *buf = rs->buf;
13031   char *endbuf = rs->buf + get_remote_packet_size ();
13032   int nbytes;
13033
13034   buf += xsnprintf (buf, endbuf - buf, "QTNotes:");
13035   if (user)
13036     {
13037       buf += xsnprintf (buf, endbuf - buf, "user:");
13038       nbytes = bin2hex ((gdb_byte *) user, buf, strlen (user));
13039       buf += 2 * nbytes;
13040       *buf++ = ';';
13041     }
13042   if (notes)
13043     {
13044       buf += xsnprintf (buf, endbuf - buf, "notes:");
13045       nbytes = bin2hex ((gdb_byte *) notes, buf, strlen (notes));
13046       buf += 2 * nbytes;
13047       *buf++ = ';';
13048     }
13049   if (stop_notes)
13050     {
13051       buf += xsnprintf (buf, endbuf - buf, "tstop:");
13052       nbytes = bin2hex ((gdb_byte *) stop_notes, buf, strlen (stop_notes));
13053       buf += 2 * nbytes;
13054       *buf++ = ';';
13055     }
13056   /* Ensure the buffer is terminated.  */
13057   *buf = '\0';
13058
13059   putpkt (rs->buf);
13060   reply = remote_get_noisy_reply ();
13061   if (*reply == '\0')
13062     return 0;
13063
13064   if (strcmp (reply, "OK") != 0)
13065     error (_("Bogus reply from target: %s"), reply);
13066
13067   return 1;
13068 }
13069
13070 static int
13071 remote_use_agent (struct target_ops *self, int use)
13072 {
13073   if (packet_support (PACKET_QAgent) != PACKET_DISABLE)
13074     {
13075       struct remote_state *rs = get_remote_state ();
13076
13077       /* If the stub supports QAgent.  */
13078       xsnprintf (rs->buf, get_remote_packet_size (), "QAgent:%d", use);
13079       putpkt (rs->buf);
13080       getpkt (&rs->buf, &rs->buf_size, 0);
13081
13082       if (strcmp (rs->buf, "OK") == 0)
13083         {
13084           use_agent = use;
13085           return 1;
13086         }
13087     }
13088
13089   return 0;
13090 }
13091
13092 static int
13093 remote_can_use_agent (struct target_ops *self)
13094 {
13095   return (packet_support (PACKET_QAgent) != PACKET_DISABLE);
13096 }
13097
13098 struct btrace_target_info
13099 {
13100   /* The ptid of the traced thread.  */
13101   ptid_t ptid;
13102
13103   /* The obtained branch trace configuration.  */
13104   struct btrace_config conf;
13105 };
13106
13107 /* Reset our idea of our target's btrace configuration.  */
13108
13109 static void
13110 remote_btrace_reset (void)
13111 {
13112   struct remote_state *rs = get_remote_state ();
13113
13114   memset (&rs->btrace_config, 0, sizeof (rs->btrace_config));
13115 }
13116
13117 /* Check whether the target supports branch tracing.  */
13118
13119 static int
13120 remote_supports_btrace (struct target_ops *self, enum btrace_format format)
13121 {
13122   if (packet_support (PACKET_Qbtrace_off) != PACKET_ENABLE)
13123     return 0;
13124   if (packet_support (PACKET_qXfer_btrace) != PACKET_ENABLE)
13125     return 0;
13126
13127   switch (format)
13128     {
13129       case BTRACE_FORMAT_NONE:
13130         return 0;
13131
13132       case BTRACE_FORMAT_BTS:
13133         return (packet_support (PACKET_Qbtrace_bts) == PACKET_ENABLE);
13134
13135       case BTRACE_FORMAT_PT:
13136         /* The trace is decoded on the host.  Even if our target supports it,
13137            we still need to have libipt to decode the trace.  */
13138 #if defined (HAVE_LIBIPT)
13139         return (packet_support (PACKET_Qbtrace_pt) == PACKET_ENABLE);
13140 #else /* !defined (HAVE_LIBIPT)  */
13141         return 0;
13142 #endif /* !defined (HAVE_LIBIPT)  */
13143     }
13144
13145   internal_error (__FILE__, __LINE__, _("Unknown branch trace format"));
13146 }
13147
13148 /* Synchronize the configuration with the target.  */
13149
13150 static void
13151 btrace_sync_conf (const struct btrace_config *conf)
13152 {
13153   struct packet_config *packet;
13154   struct remote_state *rs;
13155   char *buf, *pos, *endbuf;
13156
13157   rs = get_remote_state ();
13158   buf = rs->buf;
13159   endbuf = buf + get_remote_packet_size ();
13160
13161   packet = &remote_protocol_packets[PACKET_Qbtrace_conf_bts_size];
13162   if (packet_config_support (packet) == PACKET_ENABLE
13163       && conf->bts.size != rs->btrace_config.bts.size)
13164     {
13165       pos = buf;
13166       pos += xsnprintf (pos, endbuf - pos, "%s=0x%x", packet->name,
13167                         conf->bts.size);
13168
13169       putpkt (buf);
13170       getpkt (&buf, &rs->buf_size, 0);
13171
13172       if (packet_ok (buf, packet) == PACKET_ERROR)
13173         {
13174           if (buf[0] == 'E' && buf[1] == '.')
13175             error (_("Failed to configure the BTS buffer size: %s"), buf + 2);
13176           else
13177             error (_("Failed to configure the BTS buffer size."));
13178         }
13179
13180       rs->btrace_config.bts.size = conf->bts.size;
13181     }
13182
13183   packet = &remote_protocol_packets[PACKET_Qbtrace_conf_pt_size];
13184   if (packet_config_support (packet) == PACKET_ENABLE
13185       && conf->pt.size != rs->btrace_config.pt.size)
13186     {
13187       pos = buf;
13188       pos += xsnprintf (pos, endbuf - pos, "%s=0x%x", packet->name,
13189                         conf->pt.size);
13190
13191       putpkt (buf);
13192       getpkt (&buf, &rs->buf_size, 0);
13193
13194       if (packet_ok (buf, packet) == PACKET_ERROR)
13195         {
13196           if (buf[0] == 'E' && buf[1] == '.')
13197             error (_("Failed to configure the trace buffer size: %s"), buf + 2);
13198           else
13199             error (_("Failed to configure the trace buffer size."));
13200         }
13201
13202       rs->btrace_config.pt.size = conf->pt.size;
13203     }
13204 }
13205
13206 /* Read the current thread's btrace configuration from the target and
13207    store it into CONF.  */
13208
13209 static void
13210 btrace_read_config (struct btrace_config *conf)
13211 {
13212   gdb::unique_xmalloc_ptr<char> xml
13213     = target_read_stralloc (&current_target, TARGET_OBJECT_BTRACE_CONF, "");
13214   if (xml != NULL)
13215     parse_xml_btrace_conf (conf, xml.get ());
13216 }
13217
13218 /* Maybe reopen target btrace.  */
13219
13220 static void
13221 remote_btrace_maybe_reopen (void)
13222 {
13223   struct remote_state *rs = get_remote_state ();
13224   struct thread_info *tp;
13225   int btrace_target_pushed = 0;
13226   int warned = 0;
13227
13228   scoped_restore_current_thread restore_thread;
13229
13230   ALL_NON_EXITED_THREADS (tp)
13231     {
13232       set_general_thread (tp->ptid);
13233
13234       memset (&rs->btrace_config, 0x00, sizeof (struct btrace_config));
13235       btrace_read_config (&rs->btrace_config);
13236
13237       if (rs->btrace_config.format == BTRACE_FORMAT_NONE)
13238         continue;
13239
13240 #if !defined (HAVE_LIBIPT)
13241       if (rs->btrace_config.format == BTRACE_FORMAT_PT)
13242         {
13243           if (!warned)
13244             {
13245               warned = 1;
13246               warning (_("GDB does not support Intel Processor Trace. "
13247                          "\"record\" will not work in this session."));
13248             }
13249
13250           continue;
13251         }
13252 #endif /* !defined (HAVE_LIBIPT) */
13253
13254       /* Push target, once, but before anything else happens.  This way our
13255          changes to the threads will be cleaned up by unpushing the target
13256          in case btrace_read_config () throws.  */
13257       if (!btrace_target_pushed)
13258         {
13259           btrace_target_pushed = 1;
13260           record_btrace_push_target ();
13261           printf_filtered (_("Target is recording using %s.\n"),
13262                            btrace_format_string (rs->btrace_config.format));
13263         }
13264
13265       tp->btrace.target = XCNEW (struct btrace_target_info);
13266       tp->btrace.target->ptid = tp->ptid;
13267       tp->btrace.target->conf = rs->btrace_config;
13268     }
13269 }
13270
13271 /* Enable branch tracing.  */
13272
13273 static struct btrace_target_info *
13274 remote_enable_btrace (struct target_ops *self, ptid_t ptid,
13275                       const struct btrace_config *conf)
13276 {
13277   struct btrace_target_info *tinfo = NULL;
13278   struct packet_config *packet = NULL;
13279   struct remote_state *rs = get_remote_state ();
13280   char *buf = rs->buf;
13281   char *endbuf = rs->buf + get_remote_packet_size ();
13282
13283   switch (conf->format)
13284     {
13285       case BTRACE_FORMAT_BTS:
13286         packet = &remote_protocol_packets[PACKET_Qbtrace_bts];
13287         break;
13288
13289       case BTRACE_FORMAT_PT:
13290         packet = &remote_protocol_packets[PACKET_Qbtrace_pt];
13291         break;
13292     }
13293
13294   if (packet == NULL || packet_config_support (packet) != PACKET_ENABLE)
13295     error (_("Target does not support branch tracing."));
13296
13297   btrace_sync_conf (conf);
13298
13299   set_general_thread (ptid);
13300
13301   buf += xsnprintf (buf, endbuf - buf, "%s", packet->name);
13302   putpkt (rs->buf);
13303   getpkt (&rs->buf, &rs->buf_size, 0);
13304
13305   if (packet_ok (rs->buf, packet) == PACKET_ERROR)
13306     {
13307       if (rs->buf[0] == 'E' && rs->buf[1] == '.')
13308         error (_("Could not enable branch tracing for %s: %s"),
13309                target_pid_to_str (ptid), rs->buf + 2);
13310       else
13311         error (_("Could not enable branch tracing for %s."),
13312                target_pid_to_str (ptid));
13313     }
13314
13315   tinfo = XCNEW (struct btrace_target_info);
13316   tinfo->ptid = ptid;
13317
13318   /* If we fail to read the configuration, we lose some information, but the
13319      tracing itself is not impacted.  */
13320   TRY
13321     {
13322       btrace_read_config (&tinfo->conf);
13323     }
13324   CATCH (err, RETURN_MASK_ERROR)
13325     {
13326       if (err.message != NULL)
13327         warning ("%s", err.message);
13328     }
13329   END_CATCH
13330
13331   return tinfo;
13332 }
13333
13334 /* Disable branch tracing.  */
13335
13336 static void
13337 remote_disable_btrace (struct target_ops *self,
13338                        struct btrace_target_info *tinfo)
13339 {
13340   struct packet_config *packet = &remote_protocol_packets[PACKET_Qbtrace_off];
13341   struct remote_state *rs = get_remote_state ();
13342   char *buf = rs->buf;
13343   char *endbuf = rs->buf + get_remote_packet_size ();
13344
13345   if (packet_config_support (packet) != PACKET_ENABLE)
13346     error (_("Target does not support branch tracing."));
13347
13348   set_general_thread (tinfo->ptid);
13349
13350   buf += xsnprintf (buf, endbuf - buf, "%s", packet->name);
13351   putpkt (rs->buf);
13352   getpkt (&rs->buf, &rs->buf_size, 0);
13353
13354   if (packet_ok (rs->buf, packet) == PACKET_ERROR)
13355     {
13356       if (rs->buf[0] == 'E' && rs->buf[1] == '.')
13357         error (_("Could not disable branch tracing for %s: %s"),
13358                target_pid_to_str (tinfo->ptid), rs->buf + 2);
13359       else
13360         error (_("Could not disable branch tracing for %s."),
13361                target_pid_to_str (tinfo->ptid));
13362     }
13363
13364   xfree (tinfo);
13365 }
13366
13367 /* Teardown branch tracing.  */
13368
13369 static void
13370 remote_teardown_btrace (struct target_ops *self,
13371                         struct btrace_target_info *tinfo)
13372 {
13373   /* We must not talk to the target during teardown.  */
13374   xfree (tinfo);
13375 }
13376
13377 /* Read the branch trace.  */
13378
13379 static enum btrace_error
13380 remote_read_btrace (struct target_ops *self,
13381                     struct btrace_data *btrace,
13382                     struct btrace_target_info *tinfo,
13383                     enum btrace_read_type type)
13384 {
13385   struct packet_config *packet = &remote_protocol_packets[PACKET_qXfer_btrace];
13386   const char *annex;
13387
13388   if (packet_config_support (packet) != PACKET_ENABLE)
13389     error (_("Target does not support branch tracing."));
13390
13391 #if !defined(HAVE_LIBEXPAT)
13392   error (_("Cannot process branch tracing result. XML parsing not supported."));
13393 #endif
13394
13395   switch (type)
13396     {
13397     case BTRACE_READ_ALL:
13398       annex = "all";
13399       break;
13400     case BTRACE_READ_NEW:
13401       annex = "new";
13402       break;
13403     case BTRACE_READ_DELTA:
13404       annex = "delta";
13405       break;
13406     default:
13407       internal_error (__FILE__, __LINE__,
13408                       _("Bad branch tracing read type: %u."),
13409                       (unsigned int) type);
13410     }
13411
13412   gdb::unique_xmalloc_ptr<char> xml
13413     = target_read_stralloc (&current_target, TARGET_OBJECT_BTRACE, annex);
13414   if (xml == NULL)
13415     return BTRACE_ERR_UNKNOWN;
13416
13417   parse_xml_btrace (btrace, xml.get ());
13418
13419   return BTRACE_ERR_NONE;
13420 }
13421
13422 static const struct btrace_config *
13423 remote_btrace_conf (struct target_ops *self,
13424                     const struct btrace_target_info *tinfo)
13425 {
13426   return &tinfo->conf;
13427 }
13428
13429 static int
13430 remote_augmented_libraries_svr4_read (struct target_ops *self)
13431 {
13432   return (packet_support (PACKET_augmented_libraries_svr4_read_feature)
13433           == PACKET_ENABLE);
13434 }
13435
13436 /* Implementation of to_load.  */
13437
13438 static void
13439 remote_load (struct target_ops *self, const char *name, int from_tty)
13440 {
13441   generic_load (name, from_tty);
13442 }
13443
13444 /* Accepts an integer PID; returns a string representing a file that
13445    can be opened on the remote side to get the symbols for the child
13446    process.  Returns NULL if the operation is not supported.  */
13447
13448 static char *
13449 remote_pid_to_exec_file (struct target_ops *self, int pid)
13450 {
13451   static gdb::unique_xmalloc_ptr<char> filename;
13452   struct inferior *inf;
13453   char *annex = NULL;
13454
13455   if (packet_support (PACKET_qXfer_exec_file) != PACKET_ENABLE)
13456     return NULL;
13457
13458   inf = find_inferior_pid (pid);
13459   if (inf == NULL)
13460     internal_error (__FILE__, __LINE__,
13461                     _("not currently attached to process %d"), pid);
13462
13463   if (!inf->fake_pid_p)
13464     {
13465       const int annex_size = 9;
13466
13467       annex = (char *) alloca (annex_size);
13468       xsnprintf (annex, annex_size, "%x", pid);
13469     }
13470
13471   filename = target_read_stralloc (&current_target,
13472                                    TARGET_OBJECT_EXEC_FILE, annex);
13473
13474   return filename.get ();
13475 }
13476
13477 /* Implement the to_can_do_single_step target_ops method.  */
13478
13479 static int
13480 remote_can_do_single_step (struct target_ops *ops)
13481 {
13482   /* We can only tell whether target supports single step or not by
13483      supported s and S vCont actions if the stub supports vContSupported
13484      feature.  If the stub doesn't support vContSupported feature,
13485      we have conservatively to think target doesn't supports single
13486      step.  */
13487   if (packet_support (PACKET_vContSupported) == PACKET_ENABLE)
13488     {
13489       struct remote_state *rs = get_remote_state ();
13490
13491       if (packet_support (PACKET_vCont) == PACKET_SUPPORT_UNKNOWN)
13492         remote_vcont_probe (rs);
13493
13494       return rs->supports_vCont.s && rs->supports_vCont.S;
13495     }
13496   else
13497     return 0;
13498 }
13499
13500 /* Implementation of the to_execution_direction method for the remote
13501    target.  */
13502
13503 static enum exec_direction_kind
13504 remote_execution_direction (struct target_ops *self)
13505 {
13506   struct remote_state *rs = get_remote_state ();
13507
13508   return rs->last_resume_exec_dir;
13509 }
13510
13511 /* Return pointer to the thread_info struct which corresponds to
13512    THREAD_HANDLE (having length HANDLE_LEN).  */
13513
13514 static struct thread_info *
13515 remote_thread_handle_to_thread_info (struct target_ops *ops,
13516                                      const gdb_byte *thread_handle,
13517                                      int handle_len,
13518                                      struct inferior *inf)
13519 {
13520   struct thread_info *tp;
13521
13522   ALL_NON_EXITED_THREADS (tp)
13523     {
13524       struct private_thread_info *priv = get_private_info_thread (tp);
13525
13526       if (tp->inf == inf && priv != NULL)
13527         {
13528           if (handle_len != priv->thread_handle->size ())
13529             error (_("Thread handle size mismatch: %d vs %zu (from remote)"),
13530                    handle_len, priv->thread_handle->size ());
13531           if (memcmp (thread_handle, priv->thread_handle->data (),
13532                       handle_len) == 0)
13533             return tp;
13534         }
13535     }
13536
13537   return NULL;
13538 }
13539
13540 static void
13541 init_remote_ops (void)
13542 {
13543   remote_ops.to_shortname = "remote";
13544   remote_ops.to_longname = "Remote serial target in gdb-specific protocol";
13545   remote_ops.to_doc =
13546     "Use a remote computer via a serial line, using a gdb-specific protocol.\n\
13547 Specify the serial device it is connected to\n\
13548 (e.g. /dev/ttyS0, /dev/ttya, COM1, etc.).";
13549   remote_ops.to_open = remote_open;
13550   remote_ops.to_close = remote_close;
13551   remote_ops.to_detach = remote_detach;
13552   remote_ops.to_disconnect = remote_disconnect;
13553   remote_ops.to_resume = remote_resume;
13554   remote_ops.to_commit_resume = remote_commit_resume;
13555   remote_ops.to_wait = remote_wait;
13556   remote_ops.to_fetch_registers = remote_fetch_registers;
13557   remote_ops.to_store_registers = remote_store_registers;
13558   remote_ops.to_prepare_to_store = remote_prepare_to_store;
13559   remote_ops.to_files_info = remote_files_info;
13560   remote_ops.to_insert_breakpoint = remote_insert_breakpoint;
13561   remote_ops.to_remove_breakpoint = remote_remove_breakpoint;
13562   remote_ops.to_stopped_by_sw_breakpoint = remote_stopped_by_sw_breakpoint;
13563   remote_ops.to_supports_stopped_by_sw_breakpoint = remote_supports_stopped_by_sw_breakpoint;
13564   remote_ops.to_stopped_by_hw_breakpoint = remote_stopped_by_hw_breakpoint;
13565   remote_ops.to_supports_stopped_by_hw_breakpoint = remote_supports_stopped_by_hw_breakpoint;
13566   remote_ops.to_stopped_by_watchpoint = remote_stopped_by_watchpoint;
13567   remote_ops.to_stopped_data_address = remote_stopped_data_address;
13568   remote_ops.to_watchpoint_addr_within_range =
13569     remote_watchpoint_addr_within_range;
13570   remote_ops.to_can_use_hw_breakpoint = remote_check_watch_resources;
13571   remote_ops.to_insert_hw_breakpoint = remote_insert_hw_breakpoint;
13572   remote_ops.to_remove_hw_breakpoint = remote_remove_hw_breakpoint;
13573   remote_ops.to_region_ok_for_hw_watchpoint
13574      = remote_region_ok_for_hw_watchpoint;
13575   remote_ops.to_insert_watchpoint = remote_insert_watchpoint;
13576   remote_ops.to_remove_watchpoint = remote_remove_watchpoint;
13577   remote_ops.to_kill = remote_kill;
13578   remote_ops.to_load = remote_load;
13579   remote_ops.to_mourn_inferior = remote_mourn;
13580   remote_ops.to_pass_signals = remote_pass_signals;
13581   remote_ops.to_set_syscall_catchpoint = remote_set_syscall_catchpoint;
13582   remote_ops.to_program_signals = remote_program_signals;
13583   remote_ops.to_thread_alive = remote_thread_alive;
13584   remote_ops.to_thread_name = remote_thread_name;
13585   remote_ops.to_update_thread_list = remote_update_thread_list;
13586   remote_ops.to_pid_to_str = remote_pid_to_str;
13587   remote_ops.to_extra_thread_info = remote_threads_extra_info;
13588   remote_ops.to_get_ada_task_ptid = remote_get_ada_task_ptid;
13589   remote_ops.to_stop = remote_stop;
13590   remote_ops.to_interrupt = remote_interrupt;
13591   remote_ops.to_pass_ctrlc = remote_pass_ctrlc;
13592   remote_ops.to_xfer_partial = remote_xfer_partial;
13593   remote_ops.to_get_memory_xfer_limit = remote_get_memory_xfer_limit;
13594   remote_ops.to_rcmd = remote_rcmd;
13595   remote_ops.to_pid_to_exec_file = remote_pid_to_exec_file;
13596   remote_ops.to_log_command = serial_log_command;
13597   remote_ops.to_get_thread_local_address = remote_get_thread_local_address;
13598   remote_ops.to_stratum = process_stratum;
13599   remote_ops.to_has_all_memory = default_child_has_all_memory;
13600   remote_ops.to_has_memory = default_child_has_memory;
13601   remote_ops.to_has_stack = default_child_has_stack;
13602   remote_ops.to_has_registers = default_child_has_registers;
13603   remote_ops.to_has_execution = default_child_has_execution;
13604   remote_ops.to_has_thread_control = tc_schedlock;    /* can lock scheduler */
13605   remote_ops.to_can_execute_reverse = remote_can_execute_reverse;
13606   remote_ops.to_magic = OPS_MAGIC;
13607   remote_ops.to_memory_map = remote_memory_map;
13608   remote_ops.to_flash_erase = remote_flash_erase;
13609   remote_ops.to_flash_done = remote_flash_done;
13610   remote_ops.to_read_description = remote_read_description;
13611   remote_ops.to_search_memory = remote_search_memory;
13612   remote_ops.to_can_async_p = remote_can_async_p;
13613   remote_ops.to_is_async_p = remote_is_async_p;
13614   remote_ops.to_async = remote_async;
13615   remote_ops.to_thread_events = remote_thread_events;
13616   remote_ops.to_can_do_single_step = remote_can_do_single_step;
13617   remote_ops.to_terminal_inferior = remote_terminal_inferior;
13618   remote_ops.to_terminal_ours = remote_terminal_ours;
13619   remote_ops.to_supports_non_stop = remote_supports_non_stop;
13620   remote_ops.to_supports_multi_process = remote_supports_multi_process;
13621   remote_ops.to_supports_disable_randomization
13622     = remote_supports_disable_randomization;
13623   remote_ops.to_filesystem_is_local = remote_filesystem_is_local;
13624   remote_ops.to_fileio_open = remote_hostio_open;
13625   remote_ops.to_fileio_pwrite = remote_hostio_pwrite;
13626   remote_ops.to_fileio_pread = remote_hostio_pread;
13627   remote_ops.to_fileio_fstat = remote_hostio_fstat;
13628   remote_ops.to_fileio_close = remote_hostio_close;
13629   remote_ops.to_fileio_unlink = remote_hostio_unlink;
13630   remote_ops.to_fileio_readlink = remote_hostio_readlink;
13631   remote_ops.to_supports_enable_disable_tracepoint = remote_supports_enable_disable_tracepoint;
13632   remote_ops.to_supports_string_tracing = remote_supports_string_tracing;
13633   remote_ops.to_supports_evaluation_of_breakpoint_conditions = remote_supports_cond_breakpoints;
13634   remote_ops.to_can_run_breakpoint_commands = remote_can_run_breakpoint_commands;
13635   remote_ops.to_trace_init = remote_trace_init;
13636   remote_ops.to_download_tracepoint = remote_download_tracepoint;
13637   remote_ops.to_can_download_tracepoint = remote_can_download_tracepoint;
13638   remote_ops.to_download_trace_state_variable
13639     = remote_download_trace_state_variable;
13640   remote_ops.to_enable_tracepoint = remote_enable_tracepoint;
13641   remote_ops.to_disable_tracepoint = remote_disable_tracepoint;
13642   remote_ops.to_trace_set_readonly_regions = remote_trace_set_readonly_regions;
13643   remote_ops.to_trace_start = remote_trace_start;
13644   remote_ops.to_get_trace_status = remote_get_trace_status;
13645   remote_ops.to_get_tracepoint_status = remote_get_tracepoint_status;
13646   remote_ops.to_trace_stop = remote_trace_stop;
13647   remote_ops.to_trace_find = remote_trace_find;
13648   remote_ops.to_get_trace_state_variable_value
13649     = remote_get_trace_state_variable_value;
13650   remote_ops.to_save_trace_data = remote_save_trace_data;
13651   remote_ops.to_upload_tracepoints = remote_upload_tracepoints;
13652   remote_ops.to_upload_trace_state_variables
13653     = remote_upload_trace_state_variables;
13654   remote_ops.to_get_raw_trace_data = remote_get_raw_trace_data;
13655   remote_ops.to_get_min_fast_tracepoint_insn_len = remote_get_min_fast_tracepoint_insn_len;
13656   remote_ops.to_set_disconnected_tracing = remote_set_disconnected_tracing;
13657   remote_ops.to_set_circular_trace_buffer = remote_set_circular_trace_buffer;
13658   remote_ops.to_set_trace_buffer_size = remote_set_trace_buffer_size;
13659   remote_ops.to_set_trace_notes = remote_set_trace_notes;
13660   remote_ops.to_core_of_thread = remote_core_of_thread;
13661   remote_ops.to_verify_memory = remote_verify_memory;
13662   remote_ops.to_get_tib_address = remote_get_tib_address;
13663   remote_ops.to_set_permissions = remote_set_permissions;
13664   remote_ops.to_static_tracepoint_marker_at
13665     = remote_static_tracepoint_marker_at;
13666   remote_ops.to_static_tracepoint_markers_by_strid
13667     = remote_static_tracepoint_markers_by_strid;
13668   remote_ops.to_traceframe_info = remote_traceframe_info;
13669   remote_ops.to_use_agent = remote_use_agent;
13670   remote_ops.to_can_use_agent = remote_can_use_agent;
13671   remote_ops.to_supports_btrace = remote_supports_btrace;
13672   remote_ops.to_enable_btrace = remote_enable_btrace;
13673   remote_ops.to_disable_btrace = remote_disable_btrace;
13674   remote_ops.to_teardown_btrace = remote_teardown_btrace;
13675   remote_ops.to_read_btrace = remote_read_btrace;
13676   remote_ops.to_btrace_conf = remote_btrace_conf;
13677   remote_ops.to_augmented_libraries_svr4_read =
13678     remote_augmented_libraries_svr4_read;
13679   remote_ops.to_follow_fork = remote_follow_fork;
13680   remote_ops.to_follow_exec = remote_follow_exec;
13681   remote_ops.to_insert_fork_catchpoint = remote_insert_fork_catchpoint;
13682   remote_ops.to_remove_fork_catchpoint = remote_remove_fork_catchpoint;
13683   remote_ops.to_insert_vfork_catchpoint = remote_insert_vfork_catchpoint;
13684   remote_ops.to_remove_vfork_catchpoint = remote_remove_vfork_catchpoint;
13685   remote_ops.to_insert_exec_catchpoint = remote_insert_exec_catchpoint;
13686   remote_ops.to_remove_exec_catchpoint = remote_remove_exec_catchpoint;
13687   remote_ops.to_execution_direction = remote_execution_direction;
13688   remote_ops.to_thread_handle_to_thread_info =
13689     remote_thread_handle_to_thread_info;
13690 }
13691
13692 /* Set up the extended remote vector by making a copy of the standard
13693    remote vector and adding to it.  */
13694
13695 static void
13696 init_extended_remote_ops (void)
13697 {
13698   extended_remote_ops = remote_ops;
13699
13700   extended_remote_ops.to_shortname = "extended-remote";
13701   extended_remote_ops.to_longname =
13702     "Extended remote serial target in gdb-specific protocol";
13703   extended_remote_ops.to_doc =
13704     "Use a remote computer via a serial line, using a gdb-specific protocol.\n\
13705 Specify the serial device it is connected to (e.g. /dev/ttya).";
13706   extended_remote_ops.to_open = extended_remote_open;
13707   extended_remote_ops.to_create_inferior = extended_remote_create_inferior;
13708   extended_remote_ops.to_detach = extended_remote_detach;
13709   extended_remote_ops.to_attach = extended_remote_attach;
13710   extended_remote_ops.to_post_attach = extended_remote_post_attach;
13711   extended_remote_ops.to_supports_disable_randomization
13712     = extended_remote_supports_disable_randomization;
13713 }
13714
13715 static int
13716 remote_can_async_p (struct target_ops *ops)
13717 {
13718   struct remote_state *rs = get_remote_state ();
13719
13720   /* We don't go async if the user has explicitly prevented it with the
13721      "maint set target-async" command.  */
13722   if (!target_async_permitted)
13723     return 0;
13724
13725   /* We're async whenever the serial device is.  */
13726   return serial_can_async_p (rs->remote_desc);
13727 }
13728
13729 static int
13730 remote_is_async_p (struct target_ops *ops)
13731 {
13732   struct remote_state *rs = get_remote_state ();
13733
13734   if (!target_async_permitted)
13735     /* We only enable async when the user specifically asks for it.  */
13736     return 0;
13737
13738   /* We're async whenever the serial device is.  */
13739   return serial_is_async_p (rs->remote_desc);
13740 }
13741
13742 /* Pass the SERIAL event on and up to the client.  One day this code
13743    will be able to delay notifying the client of an event until the
13744    point where an entire packet has been received.  */
13745
13746 static serial_event_ftype remote_async_serial_handler;
13747
13748 static void
13749 remote_async_serial_handler (struct serial *scb, void *context)
13750 {
13751   /* Don't propogate error information up to the client.  Instead let
13752      the client find out about the error by querying the target.  */
13753   inferior_event_handler (INF_REG_EVENT, NULL);
13754 }
13755
13756 static void
13757 remote_async_inferior_event_handler (gdb_client_data data)
13758 {
13759   inferior_event_handler (INF_REG_EVENT, NULL);
13760 }
13761
13762 static void
13763 remote_async (struct target_ops *ops, int enable)
13764 {
13765   struct remote_state *rs = get_remote_state ();
13766
13767   if (enable)
13768     {
13769       serial_async (rs->remote_desc, remote_async_serial_handler, rs);
13770
13771       /* If there are pending events in the stop reply queue tell the
13772          event loop to process them.  */
13773       if (!QUEUE_is_empty (stop_reply_p, stop_reply_queue))
13774         mark_async_event_handler (remote_async_inferior_event_token);
13775       /* For simplicity, below we clear the pending events token
13776          without remembering whether it is marked, so here we always
13777          mark it.  If there's actually no pending notification to
13778          process, this ends up being a no-op (other than a spurious
13779          event-loop wakeup).  */
13780       if (target_is_non_stop_p ())
13781         mark_async_event_handler (rs->notif_state->get_pending_events_token);
13782     }
13783   else
13784     {
13785       serial_async (rs->remote_desc, NULL, NULL);
13786       /* If the core is disabling async, it doesn't want to be
13787          disturbed with target events.  Clear all async event sources
13788          too.  */
13789       clear_async_event_handler (remote_async_inferior_event_token);
13790       if (target_is_non_stop_p ())
13791         clear_async_event_handler (rs->notif_state->get_pending_events_token);
13792     }
13793 }
13794
13795 /* Implementation of the to_thread_events method.  */
13796
13797 static void
13798 remote_thread_events (struct target_ops *ops, int enable)
13799 {
13800   struct remote_state *rs = get_remote_state ();
13801   size_t size = get_remote_packet_size ();
13802
13803   if (packet_support (PACKET_QThreadEvents) == PACKET_DISABLE)
13804     return;
13805
13806   xsnprintf (rs->buf, size, "QThreadEvents:%x", enable ? 1 : 0);
13807   putpkt (rs->buf);
13808   getpkt (&rs->buf, &rs->buf_size, 0);
13809
13810   switch (packet_ok (rs->buf,
13811                      &remote_protocol_packets[PACKET_QThreadEvents]))
13812     {
13813     case PACKET_OK:
13814       if (strcmp (rs->buf, "OK") != 0)
13815         error (_("Remote refused setting thread events: %s"), rs->buf);
13816       break;
13817     case PACKET_ERROR:
13818       warning (_("Remote failure reply: %s"), rs->buf);
13819       break;
13820     case PACKET_UNKNOWN:
13821       break;
13822     }
13823 }
13824
13825 static void
13826 set_remote_cmd (const char *args, int from_tty)
13827 {
13828   help_list (remote_set_cmdlist, "set remote ", all_commands, gdb_stdout);
13829 }
13830
13831 static void
13832 show_remote_cmd (const char *args, int from_tty)
13833 {
13834   /* We can't just use cmd_show_list here, because we want to skip
13835      the redundant "show remote Z-packet" and the legacy aliases.  */
13836   struct cmd_list_element *list = remote_show_cmdlist;
13837   struct ui_out *uiout = current_uiout;
13838
13839   ui_out_emit_tuple tuple_emitter (uiout, "showlist");
13840   for (; list != NULL; list = list->next)
13841     if (strcmp (list->name, "Z-packet") == 0)
13842       continue;
13843     else if (list->type == not_set_cmd)
13844       /* Alias commands are exactly like the original, except they
13845          don't have the normal type.  */
13846       continue;
13847     else
13848       {
13849         ui_out_emit_tuple option_emitter (uiout, "option");
13850
13851         uiout->field_string ("name", list->name);
13852         uiout->text (":  ");
13853         if (list->type == show_cmd)
13854           do_show_command (NULL, from_tty, list);
13855         else
13856           cmd_func (list, NULL, from_tty);
13857       }
13858 }
13859
13860
13861 /* Function to be called whenever a new objfile (shlib) is detected.  */
13862 static void
13863 remote_new_objfile (struct objfile *objfile)
13864 {
13865   struct remote_state *rs = get_remote_state ();
13866
13867   if (rs->remote_desc != 0)             /* Have a remote connection.  */
13868     remote_check_symbols ();
13869 }
13870
13871 /* Pull all the tracepoints defined on the target and create local
13872    data structures representing them.  We don't want to create real
13873    tracepoints yet, we don't want to mess up the user's existing
13874    collection.  */
13875   
13876 static int
13877 remote_upload_tracepoints (struct target_ops *self, struct uploaded_tp **utpp)
13878 {
13879   struct remote_state *rs = get_remote_state ();
13880   char *p;
13881
13882   /* Ask for a first packet of tracepoint definition.  */
13883   putpkt ("qTfP");
13884   getpkt (&rs->buf, &rs->buf_size, 0);
13885   p = rs->buf;
13886   while (*p && *p != 'l')
13887     {
13888       parse_tracepoint_definition (p, utpp);
13889       /* Ask for another packet of tracepoint definition.  */
13890       putpkt ("qTsP");
13891       getpkt (&rs->buf, &rs->buf_size, 0);
13892       p = rs->buf;
13893     }
13894   return 0;
13895 }
13896
13897 static int
13898 remote_upload_trace_state_variables (struct target_ops *self,
13899                                      struct uploaded_tsv **utsvp)
13900 {
13901   struct remote_state *rs = get_remote_state ();
13902   char *p;
13903
13904   /* Ask for a first packet of variable definition.  */
13905   putpkt ("qTfV");
13906   getpkt (&rs->buf, &rs->buf_size, 0);
13907   p = rs->buf;
13908   while (*p && *p != 'l')
13909     {
13910       parse_tsv_definition (p, utsvp);
13911       /* Ask for another packet of variable definition.  */
13912       putpkt ("qTsV");
13913       getpkt (&rs->buf, &rs->buf_size, 0);
13914       p = rs->buf;
13915     }
13916   return 0;
13917 }
13918
13919 /* The "set/show range-stepping" show hook.  */
13920
13921 static void
13922 show_range_stepping (struct ui_file *file, int from_tty,
13923                      struct cmd_list_element *c,
13924                      const char *value)
13925 {
13926   fprintf_filtered (file,
13927                     _("Debugger's willingness to use range stepping "
13928                       "is %s.\n"), value);
13929 }
13930
13931 /* The "set/show range-stepping" set hook.  */
13932
13933 static void
13934 set_range_stepping (const char *ignore_args, int from_tty,
13935                     struct cmd_list_element *c)
13936 {
13937   struct remote_state *rs = get_remote_state ();
13938
13939   /* Whene enabling, check whether range stepping is actually
13940      supported by the target, and warn if not.  */
13941   if (use_range_stepping)
13942     {
13943       if (rs->remote_desc != NULL)
13944         {
13945           if (packet_support (PACKET_vCont) == PACKET_SUPPORT_UNKNOWN)
13946             remote_vcont_probe (rs);
13947
13948           if (packet_support (PACKET_vCont) == PACKET_ENABLE
13949               && rs->supports_vCont.r)
13950             return;
13951         }
13952
13953       warning (_("Range stepping is not supported by the current target"));
13954     }
13955 }
13956
13957 void
13958 _initialize_remote (void)
13959 {
13960   struct cmd_list_element *cmd;
13961   const char *cmd_name;
13962
13963   /* architecture specific data */
13964   remote_gdbarch_data_handle =
13965     gdbarch_data_register_post_init (init_remote_state);
13966   remote_g_packet_data_handle =
13967     gdbarch_data_register_pre_init (remote_g_packet_data_init);
13968
13969   remote_pspace_data
13970     = register_program_space_data_with_cleanup (NULL,
13971                                                 remote_pspace_data_cleanup);
13972
13973   /* Initialize the per-target state.  At the moment there is only one
13974      of these, not one per target.  Only one target is active at a
13975      time.  */
13976   remote_state = new_remote_state ();
13977
13978   init_remote_ops ();
13979   add_target (&remote_ops);
13980
13981   init_extended_remote_ops ();
13982   add_target (&extended_remote_ops);
13983
13984   /* Hook into new objfile notification.  */
13985   observer_attach_new_objfile (remote_new_objfile);
13986   /* We're no longer interested in notification events of an inferior
13987      when it exits.  */
13988   observer_attach_inferior_exit (discard_pending_stop_replies);
13989
13990 #if 0
13991   init_remote_threadtests ();
13992 #endif
13993
13994   stop_reply_queue = QUEUE_alloc (stop_reply_p, stop_reply_xfree);
13995   /* set/show remote ...  */
13996
13997   add_prefix_cmd ("remote", class_maintenance, set_remote_cmd, _("\
13998 Remote protocol specific variables\n\
13999 Configure various remote-protocol specific variables such as\n\
14000 the packets being used"),
14001                   &remote_set_cmdlist, "set remote ",
14002                   0 /* allow-unknown */, &setlist);
14003   add_prefix_cmd ("remote", class_maintenance, show_remote_cmd, _("\
14004 Remote protocol specific variables\n\
14005 Configure various remote-protocol specific variables such as\n\
14006 the packets being used"),
14007                   &remote_show_cmdlist, "show remote ",
14008                   0 /* allow-unknown */, &showlist);
14009
14010   add_cmd ("compare-sections", class_obscure, compare_sections_command, _("\
14011 Compare section data on target to the exec file.\n\
14012 Argument is a single section name (default: all loaded sections).\n\
14013 To compare only read-only loaded sections, specify the -r option."),
14014            &cmdlist);
14015
14016   add_cmd ("packet", class_maintenance, packet_command, _("\
14017 Send an arbitrary packet to a remote target.\n\
14018    maintenance packet TEXT\n\
14019 If GDB is talking to an inferior via the GDB serial protocol, then\n\
14020 this command sends the string TEXT to the inferior, and displays the\n\
14021 response packet.  GDB supplies the initial `$' character, and the\n\
14022 terminating `#' character and checksum."),
14023            &maintenancelist);
14024
14025   add_setshow_boolean_cmd ("remotebreak", no_class, &remote_break, _("\
14026 Set whether to send break if interrupted."), _("\
14027 Show whether to send break if interrupted."), _("\
14028 If set, a break, instead of a cntrl-c, is sent to the remote target."),
14029                            set_remotebreak, show_remotebreak,
14030                            &setlist, &showlist);
14031   cmd_name = "remotebreak";
14032   cmd = lookup_cmd (&cmd_name, setlist, "", -1, 1);
14033   deprecate_cmd (cmd, "set remote interrupt-sequence");
14034   cmd_name = "remotebreak"; /* needed because lookup_cmd updates the pointer */
14035   cmd = lookup_cmd (&cmd_name, showlist, "", -1, 1);
14036   deprecate_cmd (cmd, "show remote interrupt-sequence");
14037
14038   add_setshow_enum_cmd ("interrupt-sequence", class_support,
14039                         interrupt_sequence_modes, &interrupt_sequence_mode,
14040                         _("\
14041 Set interrupt sequence to remote target."), _("\
14042 Show interrupt sequence to remote target."), _("\
14043 Valid value is \"Ctrl-C\", \"BREAK\" or \"BREAK-g\". The default is \"Ctrl-C\"."),
14044                         NULL, show_interrupt_sequence,
14045                         &remote_set_cmdlist,
14046                         &remote_show_cmdlist);
14047
14048   add_setshow_boolean_cmd ("interrupt-on-connect", class_support,
14049                            &interrupt_on_connect, _("\
14050 Set whether interrupt-sequence is sent to remote target when gdb connects to."), _("            \
14051 Show whether interrupt-sequence is sent to remote target when gdb connects to."), _("           \
14052 If set, interrupt sequence is sent to remote target."),
14053                            NULL, NULL,
14054                            &remote_set_cmdlist, &remote_show_cmdlist);
14055
14056   /* Install commands for configuring memory read/write packets.  */
14057
14058   add_cmd ("remotewritesize", no_class, set_memory_write_packet_size, _("\
14059 Set the maximum number of bytes per memory write packet (deprecated)."),
14060            &setlist);
14061   add_cmd ("remotewritesize", no_class, show_memory_write_packet_size, _("\
14062 Show the maximum number of bytes per memory write packet (deprecated)."),
14063            &showlist);
14064   add_cmd ("memory-write-packet-size", no_class,
14065            set_memory_write_packet_size, _("\
14066 Set the maximum number of bytes per memory-write packet.\n\
14067 Specify the number of bytes in a packet or 0 (zero) for the\n\
14068 default packet size.  The actual limit is further reduced\n\
14069 dependent on the target.  Specify ``fixed'' to disable the\n\
14070 further restriction and ``limit'' to enable that restriction."),
14071            &remote_set_cmdlist);
14072   add_cmd ("memory-read-packet-size", no_class,
14073            set_memory_read_packet_size, _("\
14074 Set the maximum number of bytes per memory-read packet.\n\
14075 Specify the number of bytes in a packet or 0 (zero) for the\n\
14076 default packet size.  The actual limit is further reduced\n\
14077 dependent on the target.  Specify ``fixed'' to disable the\n\
14078 further restriction and ``limit'' to enable that restriction."),
14079            &remote_set_cmdlist);
14080   add_cmd ("memory-write-packet-size", no_class,
14081            show_memory_write_packet_size,
14082            _("Show the maximum number of bytes per memory-write packet."),
14083            &remote_show_cmdlist);
14084   add_cmd ("memory-read-packet-size", no_class,
14085            show_memory_read_packet_size,
14086            _("Show the maximum number of bytes per memory-read packet."),
14087            &remote_show_cmdlist);
14088
14089   add_setshow_zinteger_cmd ("hardware-watchpoint-limit", no_class,
14090                             &remote_hw_watchpoint_limit, _("\
14091 Set the maximum number of target hardware watchpoints."), _("\
14092 Show the maximum number of target hardware watchpoints."), _("\
14093 Specify a negative limit for unlimited."),
14094                             NULL, NULL, /* FIXME: i18n: The maximum
14095                                            number of target hardware
14096                                            watchpoints is %s.  */
14097                             &remote_set_cmdlist, &remote_show_cmdlist);
14098   add_setshow_zinteger_cmd ("hardware-watchpoint-length-limit", no_class,
14099                             &remote_hw_watchpoint_length_limit, _("\
14100 Set the maximum length (in bytes) of a target hardware watchpoint."), _("\
14101 Show the maximum length (in bytes) of a target hardware watchpoint."), _("\
14102 Specify a negative limit for unlimited."),
14103                             NULL, NULL, /* FIXME: i18n: The maximum
14104                                            length (in bytes) of a target
14105                                            hardware watchpoint is %s.  */
14106                             &remote_set_cmdlist, &remote_show_cmdlist);
14107   add_setshow_zinteger_cmd ("hardware-breakpoint-limit", no_class,
14108                             &remote_hw_breakpoint_limit, _("\
14109 Set the maximum number of target hardware breakpoints."), _("\
14110 Show the maximum number of target hardware breakpoints."), _("\
14111 Specify a negative limit for unlimited."),
14112                             NULL, NULL, /* FIXME: i18n: The maximum
14113                                            number of target hardware
14114                                            breakpoints is %s.  */
14115                             &remote_set_cmdlist, &remote_show_cmdlist);
14116
14117   add_setshow_zuinteger_cmd ("remoteaddresssize", class_obscure,
14118                              &remote_address_size, _("\
14119 Set the maximum size of the address (in bits) in a memory packet."), _("\
14120 Show the maximum size of the address (in bits) in a memory packet."), NULL,
14121                              NULL,
14122                              NULL, /* FIXME: i18n: */
14123                              &setlist, &showlist);
14124
14125   init_all_packet_configs ();
14126
14127   add_packet_config_cmd (&remote_protocol_packets[PACKET_X],
14128                          "X", "binary-download", 1);
14129
14130   add_packet_config_cmd (&remote_protocol_packets[PACKET_vCont],
14131                          "vCont", "verbose-resume", 0);
14132
14133   add_packet_config_cmd (&remote_protocol_packets[PACKET_QPassSignals],
14134                          "QPassSignals", "pass-signals", 0);
14135
14136   add_packet_config_cmd (&remote_protocol_packets[PACKET_QCatchSyscalls],
14137                          "QCatchSyscalls", "catch-syscalls", 0);
14138
14139   add_packet_config_cmd (&remote_protocol_packets[PACKET_QProgramSignals],
14140                          "QProgramSignals", "program-signals", 0);
14141
14142   add_packet_config_cmd (&remote_protocol_packets[PACKET_QSetWorkingDir],
14143                          "QSetWorkingDir", "set-working-dir", 0);
14144
14145   add_packet_config_cmd (&remote_protocol_packets[PACKET_QStartupWithShell],
14146                          "QStartupWithShell", "startup-with-shell", 0);
14147
14148   add_packet_config_cmd (&remote_protocol_packets
14149                          [PACKET_QEnvironmentHexEncoded],
14150                          "QEnvironmentHexEncoded", "environment-hex-encoded",
14151                          0);
14152
14153   add_packet_config_cmd (&remote_protocol_packets[PACKET_QEnvironmentReset],
14154                          "QEnvironmentReset", "environment-reset",
14155                          0);
14156
14157   add_packet_config_cmd (&remote_protocol_packets[PACKET_QEnvironmentUnset],
14158                          "QEnvironmentUnset", "environment-unset",
14159                          0);
14160
14161   add_packet_config_cmd (&remote_protocol_packets[PACKET_qSymbol],
14162                          "qSymbol", "symbol-lookup", 0);
14163
14164   add_packet_config_cmd (&remote_protocol_packets[PACKET_P],
14165                          "P", "set-register", 1);
14166
14167   add_packet_config_cmd (&remote_protocol_packets[PACKET_p],
14168                          "p", "fetch-register", 1);
14169
14170   add_packet_config_cmd (&remote_protocol_packets[PACKET_Z0],
14171                          "Z0", "software-breakpoint", 0);
14172
14173   add_packet_config_cmd (&remote_protocol_packets[PACKET_Z1],
14174                          "Z1", "hardware-breakpoint", 0);
14175
14176   add_packet_config_cmd (&remote_protocol_packets[PACKET_Z2],
14177                          "Z2", "write-watchpoint", 0);
14178
14179   add_packet_config_cmd (&remote_protocol_packets[PACKET_Z3],
14180                          "Z3", "read-watchpoint", 0);
14181
14182   add_packet_config_cmd (&remote_protocol_packets[PACKET_Z4],
14183                          "Z4", "access-watchpoint", 0);
14184
14185   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_auxv],
14186                          "qXfer:auxv:read", "read-aux-vector", 0);
14187
14188   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_exec_file],
14189                          "qXfer:exec-file:read", "pid-to-exec-file", 0);
14190
14191   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_features],
14192                          "qXfer:features:read", "target-features", 0);
14193
14194   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_libraries],
14195                          "qXfer:libraries:read", "library-info", 0);
14196
14197   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_libraries_svr4],
14198                          "qXfer:libraries-svr4:read", "library-info-svr4", 0);
14199
14200   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_memory_map],
14201                          "qXfer:memory-map:read", "memory-map", 0);
14202
14203   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_spu_read],
14204                          "qXfer:spu:read", "read-spu-object", 0);
14205
14206   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_spu_write],
14207                          "qXfer:spu:write", "write-spu-object", 0);
14208
14209   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_osdata],
14210                         "qXfer:osdata:read", "osdata", 0);
14211
14212   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_threads],
14213                          "qXfer:threads:read", "threads", 0);
14214
14215   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_siginfo_read],
14216                          "qXfer:siginfo:read", "read-siginfo-object", 0);
14217
14218   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_siginfo_write],
14219                          "qXfer:siginfo:write", "write-siginfo-object", 0);
14220
14221   add_packet_config_cmd
14222     (&remote_protocol_packets[PACKET_qXfer_traceframe_info],
14223      "qXfer:traceframe-info:read", "traceframe-info", 0);
14224
14225   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_uib],
14226                          "qXfer:uib:read", "unwind-info-block", 0);
14227
14228   add_packet_config_cmd (&remote_protocol_packets[PACKET_qGetTLSAddr],
14229                          "qGetTLSAddr", "get-thread-local-storage-address",
14230                          0);
14231
14232   add_packet_config_cmd (&remote_protocol_packets[PACKET_qGetTIBAddr],
14233                          "qGetTIBAddr", "get-thread-information-block-address",
14234                          0);
14235
14236   add_packet_config_cmd (&remote_protocol_packets[PACKET_bc],
14237                          "bc", "reverse-continue", 0);
14238
14239   add_packet_config_cmd (&remote_protocol_packets[PACKET_bs],
14240                          "bs", "reverse-step", 0);
14241
14242   add_packet_config_cmd (&remote_protocol_packets[PACKET_qSupported],
14243                          "qSupported", "supported-packets", 0);
14244
14245   add_packet_config_cmd (&remote_protocol_packets[PACKET_qSearch_memory],
14246                          "qSearch:memory", "search-memory", 0);
14247
14248   add_packet_config_cmd (&remote_protocol_packets[PACKET_qTStatus],
14249                          "qTStatus", "trace-status", 0);
14250
14251   add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_setfs],
14252                          "vFile:setfs", "hostio-setfs", 0);
14253
14254   add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_open],
14255                          "vFile:open", "hostio-open", 0);
14256
14257   add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_pread],
14258                          "vFile:pread", "hostio-pread", 0);
14259
14260   add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_pwrite],
14261                          "vFile:pwrite", "hostio-pwrite", 0);
14262
14263   add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_close],
14264                          "vFile:close", "hostio-close", 0);
14265
14266   add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_unlink],
14267                          "vFile:unlink", "hostio-unlink", 0);
14268
14269   add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_readlink],
14270                          "vFile:readlink", "hostio-readlink", 0);
14271
14272   add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_fstat],
14273                          "vFile:fstat", "hostio-fstat", 0);
14274
14275   add_packet_config_cmd (&remote_protocol_packets[PACKET_vAttach],
14276                          "vAttach", "attach", 0);
14277
14278   add_packet_config_cmd (&remote_protocol_packets[PACKET_vRun],
14279                          "vRun", "run", 0);
14280
14281   add_packet_config_cmd (&remote_protocol_packets[PACKET_QStartNoAckMode],
14282                          "QStartNoAckMode", "noack", 0);
14283
14284   add_packet_config_cmd (&remote_protocol_packets[PACKET_vKill],
14285                          "vKill", "kill", 0);
14286
14287   add_packet_config_cmd (&remote_protocol_packets[PACKET_qAttached],
14288                          "qAttached", "query-attached", 0);
14289
14290   add_packet_config_cmd (&remote_protocol_packets[PACKET_ConditionalTracepoints],
14291                          "ConditionalTracepoints",
14292                          "conditional-tracepoints", 0);
14293
14294   add_packet_config_cmd (&remote_protocol_packets[PACKET_ConditionalBreakpoints],
14295                          "ConditionalBreakpoints",
14296                          "conditional-breakpoints", 0);
14297
14298   add_packet_config_cmd (&remote_protocol_packets[PACKET_BreakpointCommands],
14299                          "BreakpointCommands",
14300                          "breakpoint-commands", 0);
14301
14302   add_packet_config_cmd (&remote_protocol_packets[PACKET_FastTracepoints],
14303                          "FastTracepoints", "fast-tracepoints", 0);
14304
14305   add_packet_config_cmd (&remote_protocol_packets[PACKET_TracepointSource],
14306                          "TracepointSource", "TracepointSource", 0);
14307
14308   add_packet_config_cmd (&remote_protocol_packets[PACKET_QAllow],
14309                          "QAllow", "allow", 0);
14310
14311   add_packet_config_cmd (&remote_protocol_packets[PACKET_StaticTracepoints],
14312                          "StaticTracepoints", "static-tracepoints", 0);
14313
14314   add_packet_config_cmd (&remote_protocol_packets[PACKET_InstallInTrace],
14315                          "InstallInTrace", "install-in-trace", 0);
14316
14317   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_statictrace_read],
14318                          "qXfer:statictrace:read", "read-sdata-object", 0);
14319
14320   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_fdpic],
14321                          "qXfer:fdpic:read", "read-fdpic-loadmap", 0);
14322
14323   add_packet_config_cmd (&remote_protocol_packets[PACKET_QDisableRandomization],
14324                          "QDisableRandomization", "disable-randomization", 0);
14325
14326   add_packet_config_cmd (&remote_protocol_packets[PACKET_QAgent],
14327                          "QAgent", "agent", 0);
14328
14329   add_packet_config_cmd (&remote_protocol_packets[PACKET_QTBuffer_size],
14330                          "QTBuffer:size", "trace-buffer-size", 0);
14331
14332   add_packet_config_cmd (&remote_protocol_packets[PACKET_Qbtrace_off],
14333        "Qbtrace:off", "disable-btrace", 0);
14334
14335   add_packet_config_cmd (&remote_protocol_packets[PACKET_Qbtrace_bts],
14336        "Qbtrace:bts", "enable-btrace-bts", 0);
14337
14338   add_packet_config_cmd (&remote_protocol_packets[PACKET_Qbtrace_pt],
14339        "Qbtrace:pt", "enable-btrace-pt", 0);
14340
14341   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_btrace],
14342        "qXfer:btrace", "read-btrace", 0);
14343
14344   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_btrace_conf],
14345        "qXfer:btrace-conf", "read-btrace-conf", 0);
14346
14347   add_packet_config_cmd (&remote_protocol_packets[PACKET_Qbtrace_conf_bts_size],
14348        "Qbtrace-conf:bts:size", "btrace-conf-bts-size", 0);
14349
14350   add_packet_config_cmd (&remote_protocol_packets[PACKET_multiprocess_feature],
14351        "multiprocess-feature", "multiprocess-feature", 0);
14352
14353   add_packet_config_cmd (&remote_protocol_packets[PACKET_swbreak_feature],
14354                          "swbreak-feature", "swbreak-feature", 0);
14355
14356   add_packet_config_cmd (&remote_protocol_packets[PACKET_hwbreak_feature],
14357                          "hwbreak-feature", "hwbreak-feature", 0);
14358
14359   add_packet_config_cmd (&remote_protocol_packets[PACKET_fork_event_feature],
14360                          "fork-event-feature", "fork-event-feature", 0);
14361
14362   add_packet_config_cmd (&remote_protocol_packets[PACKET_vfork_event_feature],
14363                          "vfork-event-feature", "vfork-event-feature", 0);
14364
14365   add_packet_config_cmd (&remote_protocol_packets[PACKET_Qbtrace_conf_pt_size],
14366        "Qbtrace-conf:pt:size", "btrace-conf-pt-size", 0);
14367
14368   add_packet_config_cmd (&remote_protocol_packets[PACKET_vContSupported],
14369                          "vContSupported", "verbose-resume-supported", 0);
14370
14371   add_packet_config_cmd (&remote_protocol_packets[PACKET_exec_event_feature],
14372                          "exec-event-feature", "exec-event-feature", 0);
14373
14374   add_packet_config_cmd (&remote_protocol_packets[PACKET_vCtrlC],
14375                          "vCtrlC", "ctrl-c", 0);
14376
14377   add_packet_config_cmd (&remote_protocol_packets[PACKET_QThreadEvents],
14378                          "QThreadEvents", "thread-events", 0);
14379
14380   add_packet_config_cmd (&remote_protocol_packets[PACKET_no_resumed],
14381                          "N stop reply", "no-resumed-stop-reply", 0);
14382
14383   /* Assert that we've registered "set remote foo-packet" commands
14384      for all packet configs.  */
14385   {
14386     int i;
14387
14388     for (i = 0; i < PACKET_MAX; i++)
14389       {
14390         /* Ideally all configs would have a command associated.  Some
14391            still don't though.  */
14392         int excepted;
14393
14394         switch (i)
14395           {
14396           case PACKET_QNonStop:
14397           case PACKET_EnableDisableTracepoints_feature:
14398           case PACKET_tracenz_feature:
14399           case PACKET_DisconnectedTracing_feature:
14400           case PACKET_augmented_libraries_svr4_read_feature:
14401           case PACKET_qCRC:
14402             /* Additions to this list need to be well justified:
14403                pre-existing packets are OK; new packets are not.  */
14404             excepted = 1;
14405             break;
14406           default:
14407             excepted = 0;
14408             break;
14409           }
14410
14411         /* This catches both forgetting to add a config command, and
14412            forgetting to remove a packet from the exception list.  */
14413         gdb_assert (excepted == (remote_protocol_packets[i].name == NULL));
14414       }
14415   }
14416
14417   /* Keep the old ``set remote Z-packet ...'' working.  Each individual
14418      Z sub-packet has its own set and show commands, but users may
14419      have sets to this variable in their .gdbinit files (or in their
14420      documentation).  */
14421   add_setshow_auto_boolean_cmd ("Z-packet", class_obscure,
14422                                 &remote_Z_packet_detect, _("\
14423 Set use of remote protocol `Z' packets"), _("\
14424 Show use of remote protocol `Z' packets "), _("\
14425 When set, GDB will attempt to use the remote breakpoint and watchpoint\n\
14426 packets."),
14427                                 set_remote_protocol_Z_packet_cmd,
14428                                 show_remote_protocol_Z_packet_cmd,
14429                                 /* FIXME: i18n: Use of remote protocol
14430                                    `Z' packets is %s.  */
14431                                 &remote_set_cmdlist, &remote_show_cmdlist);
14432
14433   add_prefix_cmd ("remote", class_files, remote_command, _("\
14434 Manipulate files on the remote system\n\
14435 Transfer files to and from the remote target system."),
14436                   &remote_cmdlist, "remote ",
14437                   0 /* allow-unknown */, &cmdlist);
14438
14439   add_cmd ("put", class_files, remote_put_command,
14440            _("Copy a local file to the remote system."),
14441            &remote_cmdlist);
14442
14443   add_cmd ("get", class_files, remote_get_command,
14444            _("Copy a remote file to the local system."),
14445            &remote_cmdlist);
14446
14447   add_cmd ("delete", class_files, remote_delete_command,
14448            _("Delete a remote file."),
14449            &remote_cmdlist);
14450
14451   add_setshow_string_noescape_cmd ("exec-file", class_files,
14452                                    &remote_exec_file_var, _("\
14453 Set the remote pathname for \"run\""), _("\
14454 Show the remote pathname for \"run\""), NULL,
14455                                    set_remote_exec_file,
14456                                    show_remote_exec_file,
14457                                    &remote_set_cmdlist,
14458                                    &remote_show_cmdlist);
14459
14460   add_setshow_boolean_cmd ("range-stepping", class_run,
14461                            &use_range_stepping, _("\
14462 Enable or disable range stepping."), _("\
14463 Show whether target-assisted range stepping is enabled."), _("\
14464 If on, and the target supports it, when stepping a source line, GDB\n\
14465 tells the target to step the corresponding range of addresses itself instead\n\
14466 of issuing multiple single-steps.  This speeds up source level\n\
14467 stepping.  If off, GDB always issues single-steps, even if range\n\
14468 stepping is supported by the target.  The default is on."),
14469                            set_range_stepping,
14470                            show_range_stepping,
14471                            &setlist,
14472                            &showlist);
14473
14474   /* Eventually initialize fileio.  See fileio.c */
14475   initialize_remote_fileio (remote_set_cmdlist, remote_show_cmdlist);
14476
14477   /* Take advantage of the fact that the TID field is not used, to tag
14478      special ptids with it set to != 0.  */
14479   magic_null_ptid = ptid_build (42000, -1, 1);
14480   not_sent_ptid = ptid_build (42000, -2, 1);
14481   any_thread_ptid = ptid_build (42000, 0, 1);
14482 }