Extend "set cwd" to work on gdbserver
[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 (void)
658 {
659   gdb_assert (target_gdbarch () != NULL);
660   return ((struct remote_arch_state *)
661           gdbarch_data (target_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 ();
675
676   return get_remote_state_raw ();
677 }
678
679 /* Cleanup routine for the remote module's pspace data.  */
680
681 static void
682 remote_pspace_data_cleanup (struct program_space *pspace, void *arg)
683 {
684   char *remote_exec_file = (char *) arg;
685
686   xfree (remote_exec_file);
687 }
688
689 /* Fetch the remote exec-file from the current program space.  */
690
691 static const char *
692 get_remote_exec_file (void)
693 {
694   char *remote_exec_file;
695
696   remote_exec_file
697     = (char *) program_space_data (current_program_space,
698                                    remote_pspace_data);
699   if (remote_exec_file == NULL)
700     return "";
701
702   return remote_exec_file;
703 }
704
705 /* Set the remote exec file for PSPACE.  */
706
707 static void
708 set_pspace_remote_exec_file (struct program_space *pspace,
709                         char *remote_exec_file)
710 {
711   char *old_file = (char *) program_space_data (pspace, remote_pspace_data);
712
713   xfree (old_file);
714   set_program_space_data (pspace, remote_pspace_data,
715                           xstrdup (remote_exec_file));
716 }
717
718 /* The "set/show remote exec-file" set command hook.  */
719
720 static void
721 set_remote_exec_file (char *ignored, int from_tty,
722                       struct cmd_list_element *c)
723 {
724   gdb_assert (remote_exec_file_var != NULL);
725   set_pspace_remote_exec_file (current_program_space, remote_exec_file_var);
726 }
727
728 /* The "set/show remote exec-file" show command hook.  */
729
730 static void
731 show_remote_exec_file (struct ui_file *file, int from_tty,
732                        struct cmd_list_element *cmd, const char *value)
733 {
734   fprintf_filtered (file, "%s\n", remote_exec_file_var);
735 }
736
737 static int
738 compare_pnums (const void *lhs_, const void *rhs_)
739 {
740   const struct packet_reg * const *lhs
741     = (const struct packet_reg * const *) lhs_;
742   const struct packet_reg * const *rhs
743     = (const struct packet_reg * const *) rhs_;
744
745   if ((*lhs)->pnum < (*rhs)->pnum)
746     return -1;
747   else if ((*lhs)->pnum == (*rhs)->pnum)
748     return 0;
749   else
750     return 1;
751 }
752
753 static int
754 map_regcache_remote_table (struct gdbarch *gdbarch, struct packet_reg *regs)
755 {
756   int regnum, num_remote_regs, offset;
757   struct packet_reg **remote_regs;
758
759   for (regnum = 0; regnum < gdbarch_num_regs (gdbarch); regnum++)
760     {
761       struct packet_reg *r = &regs[regnum];
762
763       if (register_size (gdbarch, regnum) == 0)
764         /* Do not try to fetch zero-sized (placeholder) registers.  */
765         r->pnum = -1;
766       else
767         r->pnum = gdbarch_remote_register_number (gdbarch, regnum);
768
769       r->regnum = regnum;
770     }
771
772   /* Define the g/G packet format as the contents of each register
773      with a remote protocol number, in order of ascending protocol
774      number.  */
775
776   remote_regs = XALLOCAVEC (struct packet_reg *, gdbarch_num_regs (gdbarch));
777   for (num_remote_regs = 0, regnum = 0;
778        regnum < gdbarch_num_regs (gdbarch);
779        regnum++)
780     if (regs[regnum].pnum != -1)
781       remote_regs[num_remote_regs++] = &regs[regnum];
782
783   qsort (remote_regs, num_remote_regs, sizeof (struct packet_reg *),
784          compare_pnums);
785
786   for (regnum = 0, offset = 0; regnum < num_remote_regs; regnum++)
787     {
788       remote_regs[regnum]->in_g_packet = 1;
789       remote_regs[regnum]->offset = offset;
790       offset += register_size (gdbarch, remote_regs[regnum]->regnum);
791     }
792
793   return offset;
794 }
795
796 /* Given the architecture described by GDBARCH, return the remote
797    protocol register's number and the register's offset in the g/G
798    packets of GDB register REGNUM, in PNUM and POFFSET respectively.
799    If the target does not have a mapping for REGNUM, return false,
800    otherwise, return true.  */
801
802 int
803 remote_register_number_and_offset (struct gdbarch *gdbarch, int regnum,
804                                    int *pnum, int *poffset)
805 {
806   struct packet_reg *regs;
807   struct cleanup *old_chain;
808
809   gdb_assert (regnum < gdbarch_num_regs (gdbarch));
810
811   regs = XCNEWVEC (struct packet_reg, gdbarch_num_regs (gdbarch));
812   old_chain = make_cleanup (xfree, regs);
813
814   map_regcache_remote_table (gdbarch, regs);
815
816   *pnum = regs[regnum].pnum;
817   *poffset = regs[regnum].offset;
818
819   do_cleanups (old_chain);
820
821   return *pnum != -1;
822 }
823
824 static void *
825 init_remote_state (struct gdbarch *gdbarch)
826 {
827   struct remote_state *rs = get_remote_state_raw ();
828   struct remote_arch_state *rsa;
829
830   rsa = GDBARCH_OBSTACK_ZALLOC (gdbarch, struct remote_arch_state);
831
832   /* Use the architecture to build a regnum<->pnum table, which will be
833      1:1 unless a feature set specifies otherwise.  */
834   rsa->regs = GDBARCH_OBSTACK_CALLOC (gdbarch,
835                                       gdbarch_num_regs (gdbarch),
836                                       struct packet_reg);
837
838   /* Record the maximum possible size of the g packet - it may turn out
839      to be smaller.  */
840   rsa->sizeof_g_packet = map_regcache_remote_table (gdbarch, rsa->regs);
841
842   /* Default maximum number of characters in a packet body.  Many
843      remote stubs have a hardwired buffer size of 400 bytes
844      (c.f. BUFMAX in m68k-stub.c and i386-stub.c).  BUFMAX-1 is used
845      as the maximum packet-size to ensure that the packet and an extra
846      NUL character can always fit in the buffer.  This stops GDB
847      trashing stubs that try to squeeze an extra NUL into what is
848      already a full buffer (As of 1999-12-04 that was most stubs).  */
849   rsa->remote_packet_size = 400 - 1;
850
851   /* This one is filled in when a ``g'' packet is received.  */
852   rsa->actual_register_packet_size = 0;
853
854   /* Should rsa->sizeof_g_packet needs more space than the
855      default, adjust the size accordingly.  Remember that each byte is
856      encoded as two characters.  32 is the overhead for the packet
857      header / footer.  NOTE: cagney/1999-10-26: I suspect that 8
858      (``$NN:G...#NN'') is a better guess, the below has been padded a
859      little.  */
860   if (rsa->sizeof_g_packet > ((rsa->remote_packet_size - 32) / 2))
861     rsa->remote_packet_size = (rsa->sizeof_g_packet * 2 + 32);
862
863   /* Make sure that the packet buffer is plenty big enough for
864      this architecture.  */
865   if (rs->buf_size < rsa->remote_packet_size)
866     {
867       rs->buf_size = 2 * rsa->remote_packet_size;
868       rs->buf = (char *) xrealloc (rs->buf, rs->buf_size);
869     }
870
871   return rsa;
872 }
873
874 /* Return the current allowed size of a remote packet.  This is
875    inferred from the current architecture, and should be used to
876    limit the length of outgoing packets.  */
877 static long
878 get_remote_packet_size (void)
879 {
880   struct remote_state *rs = get_remote_state ();
881   struct remote_arch_state *rsa = get_remote_arch_state ();
882
883   if (rs->explicit_packet_size)
884     return rs->explicit_packet_size;
885
886   return rsa->remote_packet_size;
887 }
888
889 static struct packet_reg *
890 packet_reg_from_regnum (struct remote_arch_state *rsa, long regnum)
891 {
892   if (regnum < 0 && regnum >= gdbarch_num_regs (target_gdbarch ()))
893     return NULL;
894   else
895     {
896       struct packet_reg *r = &rsa->regs[regnum];
897
898       gdb_assert (r->regnum == regnum);
899       return r;
900     }
901 }
902
903 static struct packet_reg *
904 packet_reg_from_pnum (struct remote_arch_state *rsa, LONGEST pnum)
905 {
906   int i;
907
908   for (i = 0; i < gdbarch_num_regs (target_gdbarch ()); i++)
909     {
910       struct packet_reg *r = &rsa->regs[i];
911
912       if (r->pnum == pnum)
913         return r;
914     }
915   return NULL;
916 }
917
918 static struct target_ops remote_ops;
919
920 static struct target_ops extended_remote_ops;
921
922 /* FIXME: cagney/1999-09-23: Even though getpkt was called with
923    ``forever'' still use the normal timeout mechanism.  This is
924    currently used by the ASYNC code to guarentee that target reads
925    during the initial connect always time-out.  Once getpkt has been
926    modified to return a timeout indication and, in turn
927    remote_wait()/wait_for_inferior() have gained a timeout parameter
928    this can go away.  */
929 static int wait_forever_enabled_p = 1;
930
931 /* Allow the user to specify what sequence to send to the remote
932    when he requests a program interruption: Although ^C is usually
933    what remote systems expect (this is the default, here), it is
934    sometimes preferable to send a break.  On other systems such
935    as the Linux kernel, a break followed by g, which is Magic SysRq g
936    is required in order to interrupt the execution.  */
937 const char interrupt_sequence_control_c[] = "Ctrl-C";
938 const char interrupt_sequence_break[] = "BREAK";
939 const char interrupt_sequence_break_g[] = "BREAK-g";
940 static const char *const interrupt_sequence_modes[] =
941   {
942     interrupt_sequence_control_c,
943     interrupt_sequence_break,
944     interrupt_sequence_break_g,
945     NULL
946   };
947 static const char *interrupt_sequence_mode = interrupt_sequence_control_c;
948
949 static void
950 show_interrupt_sequence (struct ui_file *file, int from_tty,
951                          struct cmd_list_element *c,
952                          const char *value)
953 {
954   if (interrupt_sequence_mode == interrupt_sequence_control_c)
955     fprintf_filtered (file,
956                       _("Send the ASCII ETX character (Ctrl-c) "
957                         "to the remote target to interrupt the "
958                         "execution of the program.\n"));
959   else if (interrupt_sequence_mode == interrupt_sequence_break)
960     fprintf_filtered (file,
961                       _("send a break signal to the remote target "
962                         "to interrupt the execution of the program.\n"));
963   else if (interrupt_sequence_mode == interrupt_sequence_break_g)
964     fprintf_filtered (file,
965                       _("Send a break signal and 'g' a.k.a. Magic SysRq g to "
966                         "the remote target to interrupt the execution "
967                         "of Linux kernel.\n"));
968   else
969     internal_error (__FILE__, __LINE__,
970                     _("Invalid value for interrupt_sequence_mode: %s."),
971                     interrupt_sequence_mode);
972 }
973
974 /* This boolean variable specifies whether interrupt_sequence is sent
975    to the remote target when gdb connects to it.
976    This is mostly needed when you debug the Linux kernel: The Linux kernel
977    expects BREAK g which is Magic SysRq g for connecting gdb.  */
978 static int interrupt_on_connect = 0;
979
980 /* This variable is used to implement the "set/show remotebreak" commands.
981    Since these commands are now deprecated in favor of "set/show remote
982    interrupt-sequence", it no longer has any effect on the code.  */
983 static int remote_break;
984
985 static void
986 set_remotebreak (char *args, int from_tty, struct cmd_list_element *c)
987 {
988   if (remote_break)
989     interrupt_sequence_mode = interrupt_sequence_break;
990   else
991     interrupt_sequence_mode = interrupt_sequence_control_c;
992 }
993
994 static void
995 show_remotebreak (struct ui_file *file, int from_tty,
996                   struct cmd_list_element *c,
997                   const char *value)
998 {
999 }
1000
1001 /* This variable sets the number of bits in an address that are to be
1002    sent in a memory ("M" or "m") packet.  Normally, after stripping
1003    leading zeros, the entire address would be sent.  This variable
1004    restricts the address to REMOTE_ADDRESS_SIZE bits.  HISTORY: The
1005    initial implementation of remote.c restricted the address sent in
1006    memory packets to ``host::sizeof long'' bytes - (typically 32
1007    bits).  Consequently, for 64 bit targets, the upper 32 bits of an
1008    address was never sent.  Since fixing this bug may cause a break in
1009    some remote targets this variable is principly provided to
1010    facilitate backward compatibility.  */
1011
1012 static unsigned int remote_address_size;
1013
1014 /* Temporary to track who currently owns the terminal.  See
1015    remote_terminal_* for more details.  */
1016
1017 static int remote_async_terminal_ours_p;
1018
1019 \f
1020 /* User configurable variables for the number of characters in a
1021    memory read/write packet.  MIN (rsa->remote_packet_size,
1022    rsa->sizeof_g_packet) is the default.  Some targets need smaller
1023    values (fifo overruns, et.al.) and some users need larger values
1024    (speed up transfers).  The variables ``preferred_*'' (the user
1025    request), ``current_*'' (what was actually set) and ``forced_*''
1026    (Positive - a soft limit, negative - a hard limit).  */
1027
1028 struct memory_packet_config
1029 {
1030   const char *name;
1031   long size;
1032   int fixed_p;
1033 };
1034
1035 /* The default max memory-write-packet-size.  The 16k is historical.
1036    (It came from older GDB's using alloca for buffers and the
1037    knowledge (folklore?) that some hosts don't cope very well with
1038    large alloca calls.)  */
1039 #define DEFAULT_MAX_MEMORY_PACKET_SIZE 16384
1040
1041 /* The minimum remote packet size for memory transfers.  Ensures we
1042    can write at least one byte.  */
1043 #define MIN_MEMORY_PACKET_SIZE 20
1044
1045 /* Compute the current size of a read/write packet.  Since this makes
1046    use of ``actual_register_packet_size'' the computation is dynamic.  */
1047
1048 static long
1049 get_memory_packet_size (struct memory_packet_config *config)
1050 {
1051   struct remote_state *rs = get_remote_state ();
1052   struct remote_arch_state *rsa = get_remote_arch_state ();
1053
1054   long what_they_get;
1055   if (config->fixed_p)
1056     {
1057       if (config->size <= 0)
1058         what_they_get = DEFAULT_MAX_MEMORY_PACKET_SIZE;
1059       else
1060         what_they_get = config->size;
1061     }
1062   else
1063     {
1064       what_they_get = get_remote_packet_size ();
1065       /* Limit the packet to the size specified by the user.  */
1066       if (config->size > 0
1067           && what_they_get > config->size)
1068         what_they_get = config->size;
1069
1070       /* Limit it to the size of the targets ``g'' response unless we have
1071          permission from the stub to use a larger packet size.  */
1072       if (rs->explicit_packet_size == 0
1073           && rsa->actual_register_packet_size > 0
1074           && what_they_get > rsa->actual_register_packet_size)
1075         what_they_get = rsa->actual_register_packet_size;
1076     }
1077   if (what_they_get < MIN_MEMORY_PACKET_SIZE)
1078     what_they_get = MIN_MEMORY_PACKET_SIZE;
1079
1080   /* Make sure there is room in the global buffer for this packet
1081      (including its trailing NUL byte).  */
1082   if (rs->buf_size < what_they_get + 1)
1083     {
1084       rs->buf_size = 2 * what_they_get;
1085       rs->buf = (char *) xrealloc (rs->buf, 2 * what_they_get);
1086     }
1087
1088   return what_they_get;
1089 }
1090
1091 /* Update the size of a read/write packet.  If they user wants
1092    something really big then do a sanity check.  */
1093
1094 static void
1095 set_memory_packet_size (const char *args, struct memory_packet_config *config)
1096 {
1097   int fixed_p = config->fixed_p;
1098   long size = config->size;
1099
1100   if (args == NULL)
1101     error (_("Argument required (integer, `fixed' or `limited')."));
1102   else if (strcmp (args, "hard") == 0
1103       || strcmp (args, "fixed") == 0)
1104     fixed_p = 1;
1105   else if (strcmp (args, "soft") == 0
1106            || strcmp (args, "limit") == 0)
1107     fixed_p = 0;
1108   else
1109     {
1110       char *end;
1111
1112       size = strtoul (args, &end, 0);
1113       if (args == end)
1114         error (_("Invalid %s (bad syntax)."), config->name);
1115
1116       /* Instead of explicitly capping the size of a packet to or
1117          disallowing it, the user is allowed to set the size to
1118          something arbitrarily large.  */
1119     }
1120
1121   /* So that the query shows the correct value.  */
1122   if (size <= 0)
1123     size = DEFAULT_MAX_MEMORY_PACKET_SIZE;
1124
1125   /* Extra checks?  */
1126   if (fixed_p && !config->fixed_p)
1127     {
1128       if (! query (_("The target may not be able to correctly handle a %s\n"
1129                    "of %ld bytes. Change the packet size? "),
1130                    config->name, size))
1131         error (_("Packet size not changed."));
1132     }
1133   /* Update the config.  */
1134   config->fixed_p = fixed_p;
1135   config->size = size;
1136 }
1137
1138 static void
1139 show_memory_packet_size (struct memory_packet_config *config)
1140 {
1141   printf_filtered (_("The %s is %ld. "), config->name, config->size);
1142   if (config->fixed_p)
1143     printf_filtered (_("Packets are fixed at %ld bytes.\n"),
1144                      get_memory_packet_size (config));
1145   else
1146     printf_filtered (_("Packets are limited to %ld bytes.\n"),
1147                      get_memory_packet_size (config));
1148 }
1149
1150 static struct memory_packet_config memory_write_packet_config =
1151 {
1152   "memory-write-packet-size",
1153 };
1154
1155 static void
1156 set_memory_write_packet_size (const char *args, int from_tty)
1157 {
1158   set_memory_packet_size (args, &memory_write_packet_config);
1159 }
1160
1161 static void
1162 show_memory_write_packet_size (const char *args, int from_tty)
1163 {
1164   show_memory_packet_size (&memory_write_packet_config);
1165 }
1166
1167 static long
1168 get_memory_write_packet_size (void)
1169 {
1170   return get_memory_packet_size (&memory_write_packet_config);
1171 }
1172
1173 static struct memory_packet_config memory_read_packet_config =
1174 {
1175   "memory-read-packet-size",
1176 };
1177
1178 static void
1179 set_memory_read_packet_size (const char *args, int from_tty)
1180 {
1181   set_memory_packet_size (args, &memory_read_packet_config);
1182 }
1183
1184 static void
1185 show_memory_read_packet_size (const char *args, int from_tty)
1186 {
1187   show_memory_packet_size (&memory_read_packet_config);
1188 }
1189
1190 static long
1191 get_memory_read_packet_size (void)
1192 {
1193   long size = get_memory_packet_size (&memory_read_packet_config);
1194
1195   /* FIXME: cagney/1999-11-07: Functions like getpkt() need to get an
1196      extra buffer size argument before the memory read size can be
1197      increased beyond this.  */
1198   if (size > get_remote_packet_size ())
1199     size = get_remote_packet_size ();
1200   return size;
1201 }
1202
1203 \f
1204 /* Generic configuration support for packets the stub optionally
1205    supports.  Allows the user to specify the use of the packet as well
1206    as allowing GDB to auto-detect support in the remote stub.  */
1207
1208 enum packet_support
1209   {
1210     PACKET_SUPPORT_UNKNOWN = 0,
1211     PACKET_ENABLE,
1212     PACKET_DISABLE
1213   };
1214
1215 struct packet_config
1216   {
1217     const char *name;
1218     const char *title;
1219
1220     /* If auto, GDB auto-detects support for this packet or feature,
1221        either through qSupported, or by trying the packet and looking
1222        at the response.  If true, GDB assumes the target supports this
1223        packet.  If false, the packet is disabled.  Configs that don't
1224        have an associated command always have this set to auto.  */
1225     enum auto_boolean detect;
1226
1227     /* Does the target support this packet?  */
1228     enum packet_support support;
1229   };
1230
1231 /* Analyze a packet's return value and update the packet config
1232    accordingly.  */
1233
1234 enum packet_result
1235 {
1236   PACKET_ERROR,
1237   PACKET_OK,
1238   PACKET_UNKNOWN
1239 };
1240
1241 static enum packet_support packet_config_support (struct packet_config *config);
1242 static enum packet_support packet_support (int packet);
1243
1244 static void
1245 show_packet_config_cmd (struct packet_config *config)
1246 {
1247   const char *support = "internal-error";
1248
1249   switch (packet_config_support (config))
1250     {
1251     case PACKET_ENABLE:
1252       support = "enabled";
1253       break;
1254     case PACKET_DISABLE:
1255       support = "disabled";
1256       break;
1257     case PACKET_SUPPORT_UNKNOWN:
1258       support = "unknown";
1259       break;
1260     }
1261   switch (config->detect)
1262     {
1263     case AUTO_BOOLEAN_AUTO:
1264       printf_filtered (_("Support for the `%s' packet "
1265                          "is auto-detected, currently %s.\n"),
1266                        config->name, support);
1267       break;
1268     case AUTO_BOOLEAN_TRUE:
1269     case AUTO_BOOLEAN_FALSE:
1270       printf_filtered (_("Support for the `%s' packet is currently %s.\n"),
1271                        config->name, support);
1272       break;
1273     }
1274 }
1275
1276 static void
1277 add_packet_config_cmd (struct packet_config *config, const char *name,
1278                        const char *title, int legacy)
1279 {
1280   char *set_doc;
1281   char *show_doc;
1282   char *cmd_name;
1283
1284   config->name = name;
1285   config->title = title;
1286   set_doc = xstrprintf ("Set use of remote protocol `%s' (%s) packet",
1287                         name, title);
1288   show_doc = xstrprintf ("Show current use of remote "
1289                          "protocol `%s' (%s) packet",
1290                          name, title);
1291   /* set/show TITLE-packet {auto,on,off} */
1292   cmd_name = xstrprintf ("%s-packet", title);
1293   add_setshow_auto_boolean_cmd (cmd_name, class_obscure,
1294                                 &config->detect, set_doc,
1295                                 show_doc, NULL, /* help_doc */
1296                                 NULL,
1297                                 show_remote_protocol_packet_cmd,
1298                                 &remote_set_cmdlist, &remote_show_cmdlist);
1299   /* The command code copies the documentation strings.  */
1300   xfree (set_doc);
1301   xfree (show_doc);
1302   /* set/show remote NAME-packet {auto,on,off} -- legacy.  */
1303   if (legacy)
1304     {
1305       char *legacy_name;
1306
1307       legacy_name = xstrprintf ("%s-packet", name);
1308       add_alias_cmd (legacy_name, cmd_name, class_obscure, 0,
1309                      &remote_set_cmdlist);
1310       add_alias_cmd (legacy_name, cmd_name, class_obscure, 0,
1311                      &remote_show_cmdlist);
1312     }
1313 }
1314
1315 static enum packet_result
1316 packet_check_result (const char *buf)
1317 {
1318   if (buf[0] != '\0')
1319     {
1320       /* The stub recognized the packet request.  Check that the
1321          operation succeeded.  */
1322       if (buf[0] == 'E'
1323           && isxdigit (buf[1]) && isxdigit (buf[2])
1324           && buf[3] == '\0')
1325         /* "Enn"  - definitly an error.  */
1326         return PACKET_ERROR;
1327
1328       /* Always treat "E." as an error.  This will be used for
1329          more verbose error messages, such as E.memtypes.  */
1330       if (buf[0] == 'E' && buf[1] == '.')
1331         return PACKET_ERROR;
1332
1333       /* The packet may or may not be OK.  Just assume it is.  */
1334       return PACKET_OK;
1335     }
1336   else
1337     /* The stub does not support the packet.  */
1338     return PACKET_UNKNOWN;
1339 }
1340
1341 static enum packet_result
1342 packet_ok (const char *buf, struct packet_config *config)
1343 {
1344   enum packet_result result;
1345
1346   if (config->detect != AUTO_BOOLEAN_TRUE
1347       && config->support == PACKET_DISABLE)
1348     internal_error (__FILE__, __LINE__,
1349                     _("packet_ok: attempt to use a disabled packet"));
1350
1351   result = packet_check_result (buf);
1352   switch (result)
1353     {
1354     case PACKET_OK:
1355     case PACKET_ERROR:
1356       /* The stub recognized the packet request.  */
1357       if (config->support == PACKET_SUPPORT_UNKNOWN)
1358         {
1359           if (remote_debug)
1360             fprintf_unfiltered (gdb_stdlog,
1361                                 "Packet %s (%s) is supported\n",
1362                                 config->name, config->title);
1363           config->support = PACKET_ENABLE;
1364         }
1365       break;
1366     case PACKET_UNKNOWN:
1367       /* The stub does not support the packet.  */
1368       if (config->detect == AUTO_BOOLEAN_AUTO
1369           && config->support == PACKET_ENABLE)
1370         {
1371           /* If the stub previously indicated that the packet was
1372              supported then there is a protocol error.  */
1373           error (_("Protocol error: %s (%s) conflicting enabled responses."),
1374                  config->name, config->title);
1375         }
1376       else if (config->detect == AUTO_BOOLEAN_TRUE)
1377         {
1378           /* The user set it wrong.  */
1379           error (_("Enabled packet %s (%s) not recognized by stub"),
1380                  config->name, config->title);
1381         }
1382
1383       if (remote_debug)
1384         fprintf_unfiltered (gdb_stdlog,
1385                             "Packet %s (%s) is NOT supported\n",
1386                             config->name, config->title);
1387       config->support = PACKET_DISABLE;
1388       break;
1389     }
1390
1391   return result;
1392 }
1393
1394 enum {
1395   PACKET_vCont = 0,
1396   PACKET_X,
1397   PACKET_qSymbol,
1398   PACKET_P,
1399   PACKET_p,
1400   PACKET_Z0,
1401   PACKET_Z1,
1402   PACKET_Z2,
1403   PACKET_Z3,
1404   PACKET_Z4,
1405   PACKET_vFile_setfs,
1406   PACKET_vFile_open,
1407   PACKET_vFile_pread,
1408   PACKET_vFile_pwrite,
1409   PACKET_vFile_close,
1410   PACKET_vFile_unlink,
1411   PACKET_vFile_readlink,
1412   PACKET_vFile_fstat,
1413   PACKET_qXfer_auxv,
1414   PACKET_qXfer_features,
1415   PACKET_qXfer_exec_file,
1416   PACKET_qXfer_libraries,
1417   PACKET_qXfer_libraries_svr4,
1418   PACKET_qXfer_memory_map,
1419   PACKET_qXfer_spu_read,
1420   PACKET_qXfer_spu_write,
1421   PACKET_qXfer_osdata,
1422   PACKET_qXfer_threads,
1423   PACKET_qXfer_statictrace_read,
1424   PACKET_qXfer_traceframe_info,
1425   PACKET_qXfer_uib,
1426   PACKET_qGetTIBAddr,
1427   PACKET_qGetTLSAddr,
1428   PACKET_qSupported,
1429   PACKET_qTStatus,
1430   PACKET_QPassSignals,
1431   PACKET_QCatchSyscalls,
1432   PACKET_QProgramSignals,
1433   PACKET_QSetWorkingDir,
1434   PACKET_QStartupWithShell,
1435   PACKET_QEnvironmentHexEncoded,
1436   PACKET_QEnvironmentReset,
1437   PACKET_QEnvironmentUnset,
1438   PACKET_qCRC,
1439   PACKET_qSearch_memory,
1440   PACKET_vAttach,
1441   PACKET_vRun,
1442   PACKET_QStartNoAckMode,
1443   PACKET_vKill,
1444   PACKET_qXfer_siginfo_read,
1445   PACKET_qXfer_siginfo_write,
1446   PACKET_qAttached,
1447
1448   /* Support for conditional tracepoints.  */
1449   PACKET_ConditionalTracepoints,
1450
1451   /* Support for target-side breakpoint conditions.  */
1452   PACKET_ConditionalBreakpoints,
1453
1454   /* Support for target-side breakpoint commands.  */
1455   PACKET_BreakpointCommands,
1456
1457   /* Support for fast tracepoints.  */
1458   PACKET_FastTracepoints,
1459
1460   /* Support for static tracepoints.  */
1461   PACKET_StaticTracepoints,
1462
1463   /* Support for installing tracepoints while a trace experiment is
1464      running.  */
1465   PACKET_InstallInTrace,
1466
1467   PACKET_bc,
1468   PACKET_bs,
1469   PACKET_TracepointSource,
1470   PACKET_QAllow,
1471   PACKET_qXfer_fdpic,
1472   PACKET_QDisableRandomization,
1473   PACKET_QAgent,
1474   PACKET_QTBuffer_size,
1475   PACKET_Qbtrace_off,
1476   PACKET_Qbtrace_bts,
1477   PACKET_Qbtrace_pt,
1478   PACKET_qXfer_btrace,
1479
1480   /* Support for the QNonStop packet.  */
1481   PACKET_QNonStop,
1482
1483   /* Support for the QThreadEvents packet.  */
1484   PACKET_QThreadEvents,
1485
1486   /* Support for multi-process extensions.  */
1487   PACKET_multiprocess_feature,
1488
1489   /* Support for enabling and disabling tracepoints while a trace
1490      experiment is running.  */
1491   PACKET_EnableDisableTracepoints_feature,
1492
1493   /* Support for collecting strings using the tracenz bytecode.  */
1494   PACKET_tracenz_feature,
1495
1496   /* Support for continuing to run a trace experiment while GDB is
1497      disconnected.  */
1498   PACKET_DisconnectedTracing_feature,
1499
1500   /* Support for qXfer:libraries-svr4:read with a non-empty annex.  */
1501   PACKET_augmented_libraries_svr4_read_feature,
1502
1503   /* Support for the qXfer:btrace-conf:read packet.  */
1504   PACKET_qXfer_btrace_conf,
1505
1506   /* Support for the Qbtrace-conf:bts:size packet.  */
1507   PACKET_Qbtrace_conf_bts_size,
1508
1509   /* Support for swbreak+ feature.  */
1510   PACKET_swbreak_feature,
1511
1512   /* Support for hwbreak+ feature.  */
1513   PACKET_hwbreak_feature,
1514
1515   /* Support for fork events.  */
1516   PACKET_fork_event_feature,
1517
1518   /* Support for vfork events.  */
1519   PACKET_vfork_event_feature,
1520
1521   /* Support for the Qbtrace-conf:pt:size packet.  */
1522   PACKET_Qbtrace_conf_pt_size,
1523
1524   /* Support for exec events.  */
1525   PACKET_exec_event_feature,
1526
1527   /* Support for query supported vCont actions.  */
1528   PACKET_vContSupported,
1529
1530   /* Support remote CTRL-C.  */
1531   PACKET_vCtrlC,
1532
1533   /* Support TARGET_WAITKIND_NO_RESUMED.  */
1534   PACKET_no_resumed,
1535
1536   PACKET_MAX
1537 };
1538
1539 static struct packet_config remote_protocol_packets[PACKET_MAX];
1540
1541 /* Returns the packet's corresponding "set remote foo-packet" command
1542    state.  See struct packet_config for more details.  */
1543
1544 static enum auto_boolean
1545 packet_set_cmd_state (int packet)
1546 {
1547   return remote_protocol_packets[packet].detect;
1548 }
1549
1550 /* Returns whether a given packet or feature is supported.  This takes
1551    into account the state of the corresponding "set remote foo-packet"
1552    command, which may be used to bypass auto-detection.  */
1553
1554 static enum packet_support
1555 packet_config_support (struct packet_config *config)
1556 {
1557   switch (config->detect)
1558     {
1559     case AUTO_BOOLEAN_TRUE:
1560       return PACKET_ENABLE;
1561     case AUTO_BOOLEAN_FALSE:
1562       return PACKET_DISABLE;
1563     case AUTO_BOOLEAN_AUTO:
1564       return config->support;
1565     default:
1566       gdb_assert_not_reached (_("bad switch"));
1567     }
1568 }
1569
1570 /* Same as packet_config_support, but takes the packet's enum value as
1571    argument.  */
1572
1573 static enum packet_support
1574 packet_support (int packet)
1575 {
1576   struct packet_config *config = &remote_protocol_packets[packet];
1577
1578   return packet_config_support (config);
1579 }
1580
1581 static void
1582 show_remote_protocol_packet_cmd (struct ui_file *file, int from_tty,
1583                                  struct cmd_list_element *c,
1584                                  const char *value)
1585 {
1586   struct packet_config *packet;
1587
1588   for (packet = remote_protocol_packets;
1589        packet < &remote_protocol_packets[PACKET_MAX];
1590        packet++)
1591     {
1592       if (&packet->detect == c->var)
1593         {
1594           show_packet_config_cmd (packet);
1595           return;
1596         }
1597     }
1598   internal_error (__FILE__, __LINE__, _("Could not find config for %s"),
1599                   c->name);
1600 }
1601
1602 /* Should we try one of the 'Z' requests?  */
1603
1604 enum Z_packet_type
1605 {
1606   Z_PACKET_SOFTWARE_BP,
1607   Z_PACKET_HARDWARE_BP,
1608   Z_PACKET_WRITE_WP,
1609   Z_PACKET_READ_WP,
1610   Z_PACKET_ACCESS_WP,
1611   NR_Z_PACKET_TYPES
1612 };
1613
1614 /* For compatibility with older distributions.  Provide a ``set remote
1615    Z-packet ...'' command that updates all the Z packet types.  */
1616
1617 static enum auto_boolean remote_Z_packet_detect;
1618
1619 static void
1620 set_remote_protocol_Z_packet_cmd (char *args, int from_tty,
1621                                   struct cmd_list_element *c)
1622 {
1623   int i;
1624
1625   for (i = 0; i < NR_Z_PACKET_TYPES; i++)
1626     remote_protocol_packets[PACKET_Z0 + i].detect = remote_Z_packet_detect;
1627 }
1628
1629 static void
1630 show_remote_protocol_Z_packet_cmd (struct ui_file *file, int from_tty,
1631                                    struct cmd_list_element *c,
1632                                    const char *value)
1633 {
1634   int i;
1635
1636   for (i = 0; i < NR_Z_PACKET_TYPES; i++)
1637     {
1638       show_packet_config_cmd (&remote_protocol_packets[PACKET_Z0 + i]);
1639     }
1640 }
1641
1642 /* Returns true if the multi-process extensions are in effect.  */
1643
1644 static int
1645 remote_multi_process_p (struct remote_state *rs)
1646 {
1647   return packet_support (PACKET_multiprocess_feature) == PACKET_ENABLE;
1648 }
1649
1650 /* Returns true if fork events are supported.  */
1651
1652 static int
1653 remote_fork_event_p (struct remote_state *rs)
1654 {
1655   return packet_support (PACKET_fork_event_feature) == PACKET_ENABLE;
1656 }
1657
1658 /* Returns true if vfork events are supported.  */
1659
1660 static int
1661 remote_vfork_event_p (struct remote_state *rs)
1662 {
1663   return packet_support (PACKET_vfork_event_feature) == PACKET_ENABLE;
1664 }
1665
1666 /* Returns true if exec events are supported.  */
1667
1668 static int
1669 remote_exec_event_p (struct remote_state *rs)
1670 {
1671   return packet_support (PACKET_exec_event_feature) == PACKET_ENABLE;
1672 }
1673
1674 /* Insert fork catchpoint target routine.  If fork events are enabled
1675    then return success, nothing more to do.  */
1676
1677 static int
1678 remote_insert_fork_catchpoint (struct target_ops *ops, int pid)
1679 {
1680   struct remote_state *rs = get_remote_state ();
1681
1682   return !remote_fork_event_p (rs);
1683 }
1684
1685 /* Remove fork catchpoint target routine.  Nothing to do, just
1686    return success.  */
1687
1688 static int
1689 remote_remove_fork_catchpoint (struct target_ops *ops, int pid)
1690 {
1691   return 0;
1692 }
1693
1694 /* Insert vfork catchpoint target routine.  If vfork events are enabled
1695    then return success, nothing more to do.  */
1696
1697 static int
1698 remote_insert_vfork_catchpoint (struct target_ops *ops, int pid)
1699 {
1700   struct remote_state *rs = get_remote_state ();
1701
1702   return !remote_vfork_event_p (rs);
1703 }
1704
1705 /* Remove vfork catchpoint target routine.  Nothing to do, just
1706    return success.  */
1707
1708 static int
1709 remote_remove_vfork_catchpoint (struct target_ops *ops, int pid)
1710 {
1711   return 0;
1712 }
1713
1714 /* Insert exec catchpoint target routine.  If exec events are
1715    enabled, just return success.  */
1716
1717 static int
1718 remote_insert_exec_catchpoint (struct target_ops *ops, int pid)
1719 {
1720   struct remote_state *rs = get_remote_state ();
1721
1722   return !remote_exec_event_p (rs);
1723 }
1724
1725 /* Remove exec catchpoint target routine.  Nothing to do, just
1726    return success.  */
1727
1728 static int
1729 remote_remove_exec_catchpoint (struct target_ops *ops, int pid)
1730 {
1731   return 0;
1732 }
1733
1734 \f
1735 /* Asynchronous signal handle registered as event loop source for
1736    when we have pending events ready to be passed to the core.  */
1737
1738 static struct async_event_handler *remote_async_inferior_event_token;
1739
1740 \f
1741
1742 static ptid_t magic_null_ptid;
1743 static ptid_t not_sent_ptid;
1744 static ptid_t any_thread_ptid;
1745
1746 /* Find out if the stub attached to PID (and hence GDB should offer to
1747    detach instead of killing it when bailing out).  */
1748
1749 static int
1750 remote_query_attached (int pid)
1751 {
1752   struct remote_state *rs = get_remote_state ();
1753   size_t size = get_remote_packet_size ();
1754
1755   if (packet_support (PACKET_qAttached) == PACKET_DISABLE)
1756     return 0;
1757
1758   if (remote_multi_process_p (rs))
1759     xsnprintf (rs->buf, size, "qAttached:%x", pid);
1760   else
1761     xsnprintf (rs->buf, size, "qAttached");
1762
1763   putpkt (rs->buf);
1764   getpkt (&rs->buf, &rs->buf_size, 0);
1765
1766   switch (packet_ok (rs->buf,
1767                      &remote_protocol_packets[PACKET_qAttached]))
1768     {
1769     case PACKET_OK:
1770       if (strcmp (rs->buf, "1") == 0)
1771         return 1;
1772       break;
1773     case PACKET_ERROR:
1774       warning (_("Remote failure reply: %s"), rs->buf);
1775       break;
1776     case PACKET_UNKNOWN:
1777       break;
1778     }
1779
1780   return 0;
1781 }
1782
1783 /* Add PID to GDB's inferior table.  If FAKE_PID_P is true, then PID
1784    has been invented by GDB, instead of reported by the target.  Since
1785    we can be connected to a remote system before before knowing about
1786    any inferior, mark the target with execution when we find the first
1787    inferior.  If ATTACHED is 1, then we had just attached to this
1788    inferior.  If it is 0, then we just created this inferior.  If it
1789    is -1, then try querying the remote stub to find out if it had
1790    attached to the inferior or not.  If TRY_OPEN_EXEC is true then
1791    attempt to open this inferior's executable as the main executable
1792    if no main executable is open already.  */
1793
1794 static struct inferior *
1795 remote_add_inferior (int fake_pid_p, int pid, int attached,
1796                      int try_open_exec)
1797 {
1798   struct inferior *inf;
1799
1800   /* Check whether this process we're learning about is to be
1801      considered attached, or if is to be considered to have been
1802      spawned by the stub.  */
1803   if (attached == -1)
1804     attached = remote_query_attached (pid);
1805
1806   if (gdbarch_has_global_solist (target_gdbarch ()))
1807     {
1808       /* If the target shares code across all inferiors, then every
1809          attach adds a new inferior.  */
1810       inf = add_inferior (pid);
1811
1812       /* ... and every inferior is bound to the same program space.
1813          However, each inferior may still have its own address
1814          space.  */
1815       inf->aspace = maybe_new_address_space ();
1816       inf->pspace = current_program_space;
1817     }
1818   else
1819     {
1820       /* In the traditional debugging scenario, there's a 1-1 match
1821          between program/address spaces.  We simply bind the inferior
1822          to the program space's address space.  */
1823       inf = current_inferior ();
1824       inferior_appeared (inf, pid);
1825     }
1826
1827   inf->attach_flag = attached;
1828   inf->fake_pid_p = fake_pid_p;
1829
1830   /* If no main executable is currently open then attempt to
1831      open the file that was executed to create this inferior.  */
1832   if (try_open_exec && get_exec_file (0) == NULL)
1833     exec_file_locate_attach (pid, 0, 1);
1834
1835   return inf;
1836 }
1837
1838 static struct private_thread_info *
1839   get_private_info_thread (struct thread_info *info);
1840
1841 /* Add thread PTID to GDB's thread list.  Tag it as executing/running
1842    according to RUNNING.  */
1843
1844 static void
1845 remote_add_thread (ptid_t ptid, int running, int executing)
1846 {
1847   struct remote_state *rs = get_remote_state ();
1848   struct thread_info *thread;
1849
1850   /* GDB historically didn't pull threads in the initial connection
1851      setup.  If the remote target doesn't even have a concept of
1852      threads (e.g., a bare-metal target), even if internally we
1853      consider that a single-threaded target, mentioning a new thread
1854      might be confusing to the user.  Be silent then, preserving the
1855      age old behavior.  */
1856   if (rs->starting_up)
1857     thread = add_thread_silent (ptid);
1858   else
1859     thread = add_thread (ptid);
1860
1861   get_private_info_thread (thread)->vcont_resumed = executing;
1862   set_executing (ptid, executing);
1863   set_running (ptid, running);
1864 }
1865
1866 /* Come here when we learn about a thread id from the remote target.
1867    It may be the first time we hear about such thread, so take the
1868    opportunity to add it to GDB's thread list.  In case this is the
1869    first time we're noticing its corresponding inferior, add it to
1870    GDB's inferior list as well.  EXECUTING indicates whether the
1871    thread is (internally) executing or stopped.  */
1872
1873 static void
1874 remote_notice_new_inferior (ptid_t currthread, int executing)
1875 {
1876   /* In non-stop mode, we assume new found threads are (externally)
1877      running until proven otherwise with a stop reply.  In all-stop,
1878      we can only get here if all threads are stopped.  */
1879   int running = target_is_non_stop_p () ? 1 : 0;
1880
1881   /* If this is a new thread, add it to GDB's thread list.
1882      If we leave it up to WFI to do this, bad things will happen.  */
1883
1884   if (in_thread_list (currthread) && is_exited (currthread))
1885     {
1886       /* We're seeing an event on a thread id we knew had exited.
1887          This has to be a new thread reusing the old id.  Add it.  */
1888       remote_add_thread (currthread, running, executing);
1889       return;
1890     }
1891
1892   if (!in_thread_list (currthread))
1893     {
1894       struct inferior *inf = NULL;
1895       int pid = ptid_get_pid (currthread);
1896
1897       if (ptid_is_pid (inferior_ptid)
1898           && pid == ptid_get_pid (inferior_ptid))
1899         {
1900           /* inferior_ptid has no thread member yet.  This can happen
1901              with the vAttach -> remote_wait,"TAAthread:" path if the
1902              stub doesn't support qC.  This is the first stop reported
1903              after an attach, so this is the main thread.  Update the
1904              ptid in the thread list.  */
1905           if (in_thread_list (pid_to_ptid (pid)))
1906             thread_change_ptid (inferior_ptid, currthread);
1907           else
1908             {
1909               remote_add_thread (currthread, running, executing);
1910               inferior_ptid = currthread;
1911             }
1912           return;
1913         }
1914
1915       if (ptid_equal (magic_null_ptid, inferior_ptid))
1916         {
1917           /* inferior_ptid is not set yet.  This can happen with the
1918              vRun -> remote_wait,"TAAthread:" path if the stub
1919              doesn't support qC.  This is the first stop reported
1920              after an attach, so this is the main thread.  Update the
1921              ptid in the thread list.  */
1922           thread_change_ptid (inferior_ptid, currthread);
1923           return;
1924         }
1925
1926       /* When connecting to a target remote, or to a target
1927          extended-remote which already was debugging an inferior, we
1928          may not know about it yet.  Add it before adding its child
1929          thread, so notifications are emitted in a sensible order.  */
1930       if (!in_inferior_list (ptid_get_pid (currthread)))
1931         {
1932           struct remote_state *rs = get_remote_state ();
1933           int fake_pid_p = !remote_multi_process_p (rs);
1934
1935           inf = remote_add_inferior (fake_pid_p,
1936                                      ptid_get_pid (currthread), -1, 1);
1937         }
1938
1939       /* This is really a new thread.  Add it.  */
1940       remote_add_thread (currthread, running, executing);
1941
1942       /* If we found a new inferior, let the common code do whatever
1943          it needs to with it (e.g., read shared libraries, insert
1944          breakpoints), unless we're just setting up an all-stop
1945          connection.  */
1946       if (inf != NULL)
1947         {
1948           struct remote_state *rs = get_remote_state ();
1949
1950           if (!rs->starting_up)
1951             notice_new_inferior (currthread, executing, 0);
1952         }
1953     }
1954 }
1955
1956 /* Return THREAD's private thread data, creating it if necessary.  */
1957
1958 static struct private_thread_info *
1959 get_private_info_thread (struct thread_info *thread)
1960 {
1961   gdb_assert (thread != NULL);
1962
1963   if (thread->priv == NULL)
1964     {
1965       struct private_thread_info *priv = XNEW (struct private_thread_info);
1966
1967       thread->private_dtor = free_private_thread_info;
1968       thread->priv = priv;
1969
1970       priv->core = -1;
1971       priv->extra = NULL;
1972       priv->name = NULL;
1973       priv->name = NULL;
1974       priv->last_resume_step = 0;
1975       priv->last_resume_sig = GDB_SIGNAL_0;
1976       priv->vcont_resumed = 0;
1977       priv->thread_handle = nullptr;
1978     }
1979
1980   return thread->priv;
1981 }
1982
1983 /* Return PTID's private thread data, creating it if necessary.  */
1984
1985 static struct private_thread_info *
1986 get_private_info_ptid (ptid_t ptid)
1987 {
1988   struct thread_info *info = find_thread_ptid (ptid);
1989
1990   return get_private_info_thread (info);
1991 }
1992
1993 /* Call this function as a result of
1994    1) A halt indication (T packet) containing a thread id
1995    2) A direct query of currthread
1996    3) Successful execution of set thread */
1997
1998 static void
1999 record_currthread (struct remote_state *rs, ptid_t currthread)
2000 {
2001   rs->general_thread = currthread;
2002 }
2003
2004 /* If 'QPassSignals' is supported, tell the remote stub what signals
2005    it can simply pass through to the inferior without reporting.  */
2006
2007 static void
2008 remote_pass_signals (struct target_ops *self,
2009                      int numsigs, unsigned char *pass_signals)
2010 {
2011   if (packet_support (PACKET_QPassSignals) != PACKET_DISABLE)
2012     {
2013       char *pass_packet, *p;
2014       int count = 0, i;
2015       struct remote_state *rs = get_remote_state ();
2016
2017       gdb_assert (numsigs < 256);
2018       for (i = 0; i < numsigs; i++)
2019         {
2020           if (pass_signals[i])
2021             count++;
2022         }
2023       pass_packet = (char *) xmalloc (count * 3 + strlen ("QPassSignals:") + 1);
2024       strcpy (pass_packet, "QPassSignals:");
2025       p = pass_packet + strlen (pass_packet);
2026       for (i = 0; i < numsigs; i++)
2027         {
2028           if (pass_signals[i])
2029             {
2030               if (i >= 16)
2031                 *p++ = tohex (i >> 4);
2032               *p++ = tohex (i & 15);
2033               if (count)
2034                 *p++ = ';';
2035               else
2036                 break;
2037               count--;
2038             }
2039         }
2040       *p = 0;
2041       if (!rs->last_pass_packet || strcmp (rs->last_pass_packet, pass_packet))
2042         {
2043           putpkt (pass_packet);
2044           getpkt (&rs->buf, &rs->buf_size, 0);
2045           packet_ok (rs->buf, &remote_protocol_packets[PACKET_QPassSignals]);
2046           if (rs->last_pass_packet)
2047             xfree (rs->last_pass_packet);
2048           rs->last_pass_packet = pass_packet;
2049         }
2050       else
2051         xfree (pass_packet);
2052     }
2053 }
2054
2055 /* If 'QCatchSyscalls' is supported, tell the remote stub
2056    to report syscalls to GDB.  */
2057
2058 static int
2059 remote_set_syscall_catchpoint (struct target_ops *self,
2060                                int pid, int needed, int any_count,
2061                                int table_size, int *table)
2062 {
2063   char *catch_packet;
2064   enum packet_result result;
2065   int n_sysno = 0;
2066
2067   if (packet_support (PACKET_QCatchSyscalls) == PACKET_DISABLE)
2068     {
2069       /* Not supported.  */
2070       return 1;
2071     }
2072
2073   if (needed && !any_count)
2074     {
2075       int i;
2076
2077       /* Count how many syscalls are to be caught (table[sysno] != 0).  */
2078       for (i = 0; i < table_size; i++)
2079         {
2080           if (table[i] != 0)
2081             n_sysno++;
2082         }
2083     }
2084
2085   if (remote_debug)
2086     {
2087       fprintf_unfiltered (gdb_stdlog,
2088                           "remote_set_syscall_catchpoint "
2089                           "pid %d needed %d any_count %d n_sysno %d\n",
2090                           pid, needed, any_count, n_sysno);
2091     }
2092
2093   if (needed)
2094     {
2095       /* Prepare a packet with the sysno list, assuming max 8+1
2096          characters for a sysno.  If the resulting packet size is too
2097          big, fallback on the non-selective packet.  */
2098       const int maxpktsz = strlen ("QCatchSyscalls:1") + n_sysno * 9 + 1;
2099
2100       catch_packet = (char *) xmalloc (maxpktsz);
2101       strcpy (catch_packet, "QCatchSyscalls:1");
2102       if (!any_count)
2103         {
2104           int i;
2105           char *p;
2106
2107           p = catch_packet;
2108           p += strlen (p);
2109
2110           /* Add in catch_packet each syscall to be caught (table[i] != 0).  */
2111           for (i = 0; i < table_size; i++)
2112             {
2113               if (table[i] != 0)
2114                 p += xsnprintf (p, catch_packet + maxpktsz - p, ";%x", i);
2115             }
2116         }
2117       if (strlen (catch_packet) > get_remote_packet_size ())
2118         {
2119           /* catch_packet too big.  Fallback to less efficient
2120              non selective mode, with GDB doing the filtering.  */
2121           catch_packet[sizeof ("QCatchSyscalls:1") - 1] = 0;
2122         }
2123     }
2124   else
2125     catch_packet = xstrdup ("QCatchSyscalls:0");
2126
2127   {
2128     struct cleanup *old_chain = make_cleanup (xfree, catch_packet);
2129     struct remote_state *rs = get_remote_state ();
2130
2131     putpkt (catch_packet);
2132     getpkt (&rs->buf, &rs->buf_size, 0);
2133     result = packet_ok (rs->buf, &remote_protocol_packets[PACKET_QCatchSyscalls]);
2134     do_cleanups (old_chain);
2135     if (result == PACKET_OK)
2136       return 0;
2137     else
2138       return -1;
2139   }
2140 }
2141
2142 /* If 'QProgramSignals' is supported, tell the remote stub what
2143    signals it should pass through to the inferior when detaching.  */
2144
2145 static void
2146 remote_program_signals (struct target_ops *self,
2147                         int numsigs, unsigned char *signals)
2148 {
2149   if (packet_support (PACKET_QProgramSignals) != PACKET_DISABLE)
2150     {
2151       char *packet, *p;
2152       int count = 0, i;
2153       struct remote_state *rs = get_remote_state ();
2154
2155       gdb_assert (numsigs < 256);
2156       for (i = 0; i < numsigs; i++)
2157         {
2158           if (signals[i])
2159             count++;
2160         }
2161       packet = (char *) xmalloc (count * 3 + strlen ("QProgramSignals:") + 1);
2162       strcpy (packet, "QProgramSignals:");
2163       p = packet + strlen (packet);
2164       for (i = 0; i < numsigs; i++)
2165         {
2166           if (signal_pass_state (i))
2167             {
2168               if (i >= 16)
2169                 *p++ = tohex (i >> 4);
2170               *p++ = tohex (i & 15);
2171               if (count)
2172                 *p++ = ';';
2173               else
2174                 break;
2175               count--;
2176             }
2177         }
2178       *p = 0;
2179       if (!rs->last_program_signals_packet
2180           || strcmp (rs->last_program_signals_packet, packet) != 0)
2181         {
2182           putpkt (packet);
2183           getpkt (&rs->buf, &rs->buf_size, 0);
2184           packet_ok (rs->buf, &remote_protocol_packets[PACKET_QProgramSignals]);
2185           xfree (rs->last_program_signals_packet);
2186           rs->last_program_signals_packet = packet;
2187         }
2188       else
2189         xfree (packet);
2190     }
2191 }
2192
2193 /* If PTID is MAGIC_NULL_PTID, don't set any thread.  If PTID is
2194    MINUS_ONE_PTID, set the thread to -1, so the stub returns the
2195    thread.  If GEN is set, set the general thread, if not, then set
2196    the step/continue thread.  */
2197 static void
2198 set_thread (ptid_t ptid, int gen)
2199 {
2200   struct remote_state *rs = get_remote_state ();
2201   ptid_t state = gen ? rs->general_thread : rs->continue_thread;
2202   char *buf = rs->buf;
2203   char *endbuf = rs->buf + get_remote_packet_size ();
2204
2205   if (ptid_equal (state, ptid))
2206     return;
2207
2208   *buf++ = 'H';
2209   *buf++ = gen ? 'g' : 'c';
2210   if (ptid_equal (ptid, magic_null_ptid))
2211     xsnprintf (buf, endbuf - buf, "0");
2212   else if (ptid_equal (ptid, any_thread_ptid))
2213     xsnprintf (buf, endbuf - buf, "0");
2214   else if (ptid_equal (ptid, minus_one_ptid))
2215     xsnprintf (buf, endbuf - buf, "-1");
2216   else
2217     write_ptid (buf, endbuf, ptid);
2218   putpkt (rs->buf);
2219   getpkt (&rs->buf, &rs->buf_size, 0);
2220   if (gen)
2221     rs->general_thread = ptid;
2222   else
2223     rs->continue_thread = ptid;
2224 }
2225
2226 static void
2227 set_general_thread (ptid_t ptid)
2228 {
2229   set_thread (ptid, 1);
2230 }
2231
2232 static void
2233 set_continue_thread (ptid_t ptid)
2234 {
2235   set_thread (ptid, 0);
2236 }
2237
2238 /* Change the remote current process.  Which thread within the process
2239    ends up selected isn't important, as long as it is the same process
2240    as what INFERIOR_PTID points to.
2241
2242    This comes from that fact that there is no explicit notion of
2243    "selected process" in the protocol.  The selected process for
2244    general operations is the process the selected general thread
2245    belongs to.  */
2246
2247 static void
2248 set_general_process (void)
2249 {
2250   struct remote_state *rs = get_remote_state ();
2251
2252   /* If the remote can't handle multiple processes, don't bother.  */
2253   if (!remote_multi_process_p (rs))
2254     return;
2255
2256   /* We only need to change the remote current thread if it's pointing
2257      at some other process.  */
2258   if (ptid_get_pid (rs->general_thread) != ptid_get_pid (inferior_ptid))
2259     set_general_thread (inferior_ptid);
2260 }
2261
2262 \f
2263 /* Return nonzero if this is the main thread that we made up ourselves
2264    to model non-threaded targets as single-threaded.  */
2265
2266 static int
2267 remote_thread_always_alive (struct target_ops *ops, ptid_t ptid)
2268 {
2269   if (ptid_equal (ptid, magic_null_ptid))
2270     /* The main thread is always alive.  */
2271     return 1;
2272
2273   if (ptid_get_pid (ptid) != 0 && ptid_get_lwp (ptid) == 0)
2274     /* The main thread is always alive.  This can happen after a
2275        vAttach, if the remote side doesn't support
2276        multi-threading.  */
2277     return 1;
2278
2279   return 0;
2280 }
2281
2282 /* Return nonzero if the thread PTID is still alive on the remote
2283    system.  */
2284
2285 static int
2286 remote_thread_alive (struct target_ops *ops, ptid_t ptid)
2287 {
2288   struct remote_state *rs = get_remote_state ();
2289   char *p, *endp;
2290
2291   /* Check if this is a thread that we made up ourselves to model
2292      non-threaded targets as single-threaded.  */
2293   if (remote_thread_always_alive (ops, ptid))
2294     return 1;
2295
2296   p = rs->buf;
2297   endp = rs->buf + get_remote_packet_size ();
2298
2299   *p++ = 'T';
2300   write_ptid (p, endp, ptid);
2301
2302   putpkt (rs->buf);
2303   getpkt (&rs->buf, &rs->buf_size, 0);
2304   return (rs->buf[0] == 'O' && rs->buf[1] == 'K');
2305 }
2306
2307 /* Return a pointer to a thread name if we know it and NULL otherwise.
2308    The thread_info object owns the memory for the name.  */
2309
2310 static const char *
2311 remote_thread_name (struct target_ops *ops, struct thread_info *info)
2312 {
2313   if (info->priv != NULL)
2314     return info->priv->name;
2315
2316   return NULL;
2317 }
2318
2319 /* About these extended threadlist and threadinfo packets.  They are
2320    variable length packets but, the fields within them are often fixed
2321    length.  They are redundent enough to send over UDP as is the
2322    remote protocol in general.  There is a matching unit test module
2323    in libstub.  */
2324
2325 /* WARNING: This threadref data structure comes from the remote O.S.,
2326    libstub protocol encoding, and remote.c.  It is not particularly
2327    changable.  */
2328
2329 /* Right now, the internal structure is int. We want it to be bigger.
2330    Plan to fix this.  */
2331
2332 typedef int gdb_threadref;      /* Internal GDB thread reference.  */
2333
2334 /* gdb_ext_thread_info is an internal GDB data structure which is
2335    equivalent to the reply of the remote threadinfo packet.  */
2336
2337 struct gdb_ext_thread_info
2338   {
2339     threadref threadid;         /* External form of thread reference.  */
2340     int active;                 /* Has state interesting to GDB?
2341                                    regs, stack.  */
2342     char display[256];          /* Brief state display, name,
2343                                    blocked/suspended.  */
2344     char shortname[32];         /* To be used to name threads.  */
2345     char more_display[256];     /* Long info, statistics, queue depth,
2346                                    whatever.  */
2347   };
2348
2349 /* The volume of remote transfers can be limited by submitting
2350    a mask containing bits specifying the desired information.
2351    Use a union of these values as the 'selection' parameter to
2352    get_thread_info.  FIXME: Make these TAG names more thread specific.  */
2353
2354 #define TAG_THREADID 1
2355 #define TAG_EXISTS 2
2356 #define TAG_DISPLAY 4
2357 #define TAG_THREADNAME 8
2358 #define TAG_MOREDISPLAY 16
2359
2360 #define BUF_THREAD_ID_SIZE (OPAQUETHREADBYTES * 2)
2361
2362 static char *unpack_nibble (char *buf, int *val);
2363
2364 static char *unpack_byte (char *buf, int *value);
2365
2366 static char *pack_int (char *buf, int value);
2367
2368 static char *unpack_int (char *buf, int *value);
2369
2370 static char *unpack_string (char *src, char *dest, int length);
2371
2372 static char *pack_threadid (char *pkt, threadref *id);
2373
2374 static char *unpack_threadid (char *inbuf, threadref *id);
2375
2376 void int_to_threadref (threadref *id, int value);
2377
2378 static int threadref_to_int (threadref *ref);
2379
2380 static void copy_threadref (threadref *dest, threadref *src);
2381
2382 static int threadmatch (threadref *dest, threadref *src);
2383
2384 static char *pack_threadinfo_request (char *pkt, int mode,
2385                                       threadref *id);
2386
2387 static int remote_unpack_thread_info_response (char *pkt,
2388                                                threadref *expectedref,
2389                                                struct gdb_ext_thread_info
2390                                                *info);
2391
2392
2393 static int remote_get_threadinfo (threadref *threadid,
2394                                   int fieldset, /*TAG mask */
2395                                   struct gdb_ext_thread_info *info);
2396
2397 static char *pack_threadlist_request (char *pkt, int startflag,
2398                                       int threadcount,
2399                                       threadref *nextthread);
2400
2401 static int parse_threadlist_response (char *pkt,
2402                                       int result_limit,
2403                                       threadref *original_echo,
2404                                       threadref *resultlist,
2405                                       int *doneflag);
2406
2407 static int remote_get_threadlist (int startflag,
2408                                   threadref *nextthread,
2409                                   int result_limit,
2410                                   int *done,
2411                                   int *result_count,
2412                                   threadref *threadlist);
2413
2414 typedef int (*rmt_thread_action) (threadref *ref, void *context);
2415
2416 static int remote_threadlist_iterator (rmt_thread_action stepfunction,
2417                                        void *context, int looplimit);
2418
2419 static int remote_newthread_step (threadref *ref, void *context);
2420
2421
2422 /* Write a PTID to BUF.  ENDBUF points to one-passed-the-end of the
2423    buffer we're allowed to write to.  Returns
2424    BUF+CHARACTERS_WRITTEN.  */
2425
2426 static char *
2427 write_ptid (char *buf, const char *endbuf, ptid_t ptid)
2428 {
2429   int pid, tid;
2430   struct remote_state *rs = get_remote_state ();
2431
2432   if (remote_multi_process_p (rs))
2433     {
2434       pid = ptid_get_pid (ptid);
2435       if (pid < 0)
2436         buf += xsnprintf (buf, endbuf - buf, "p-%x.", -pid);
2437       else
2438         buf += xsnprintf (buf, endbuf - buf, "p%x.", pid);
2439     }
2440   tid = ptid_get_lwp (ptid);
2441   if (tid < 0)
2442     buf += xsnprintf (buf, endbuf - buf, "-%x", -tid);
2443   else
2444     buf += xsnprintf (buf, endbuf - buf, "%x", tid);
2445
2446   return buf;
2447 }
2448
2449 /* Extract a PTID from BUF.  If non-null, OBUF is set to one past the
2450    last parsed char.  Returns null_ptid if no thread id is found, and
2451    throws an error if the thread id has an invalid format.  */
2452
2453 static ptid_t
2454 read_ptid (const char *buf, const char **obuf)
2455 {
2456   const char *p = buf;
2457   const char *pp;
2458   ULONGEST pid = 0, tid = 0;
2459
2460   if (*p == 'p')
2461     {
2462       /* Multi-process ptid.  */
2463       pp = unpack_varlen_hex (p + 1, &pid);
2464       if (*pp != '.')
2465         error (_("invalid remote ptid: %s"), p);
2466
2467       p = pp;
2468       pp = unpack_varlen_hex (p + 1, &tid);
2469       if (obuf)
2470         *obuf = pp;
2471       return ptid_build (pid, tid, 0);
2472     }
2473
2474   /* No multi-process.  Just a tid.  */
2475   pp = unpack_varlen_hex (p, &tid);
2476
2477   /* Return null_ptid when no thread id is found.  */
2478   if (p == pp)
2479     {
2480       if (obuf)
2481         *obuf = pp;
2482       return null_ptid;
2483     }
2484
2485   /* Since the stub is not sending a process id, then default to
2486      what's in inferior_ptid, unless it's null at this point.  If so,
2487      then since there's no way to know the pid of the reported
2488      threads, use the magic number.  */
2489   if (ptid_equal (inferior_ptid, null_ptid))
2490     pid = ptid_get_pid (magic_null_ptid);
2491   else
2492     pid = ptid_get_pid (inferior_ptid);
2493
2494   if (obuf)
2495     *obuf = pp;
2496   return ptid_build (pid, tid, 0);
2497 }
2498
2499 static int
2500 stubhex (int ch)
2501 {
2502   if (ch >= 'a' && ch <= 'f')
2503     return ch - 'a' + 10;
2504   if (ch >= '0' && ch <= '9')
2505     return ch - '0';
2506   if (ch >= 'A' && ch <= 'F')
2507     return ch - 'A' + 10;
2508   return -1;
2509 }
2510
2511 static int
2512 stub_unpack_int (char *buff, int fieldlength)
2513 {
2514   int nibble;
2515   int retval = 0;
2516
2517   while (fieldlength)
2518     {
2519       nibble = stubhex (*buff++);
2520       retval |= nibble;
2521       fieldlength--;
2522       if (fieldlength)
2523         retval = retval << 4;
2524     }
2525   return retval;
2526 }
2527
2528 static char *
2529 unpack_nibble (char *buf, int *val)
2530 {
2531   *val = fromhex (*buf++);
2532   return buf;
2533 }
2534
2535 static char *
2536 unpack_byte (char *buf, int *value)
2537 {
2538   *value = stub_unpack_int (buf, 2);
2539   return buf + 2;
2540 }
2541
2542 static char *
2543 pack_int (char *buf, int value)
2544 {
2545   buf = pack_hex_byte (buf, (value >> 24) & 0xff);
2546   buf = pack_hex_byte (buf, (value >> 16) & 0xff);
2547   buf = pack_hex_byte (buf, (value >> 8) & 0x0ff);
2548   buf = pack_hex_byte (buf, (value & 0xff));
2549   return buf;
2550 }
2551
2552 static char *
2553 unpack_int (char *buf, int *value)
2554 {
2555   *value = stub_unpack_int (buf, 8);
2556   return buf + 8;
2557 }
2558
2559 #if 0                   /* Currently unused, uncomment when needed.  */
2560 static char *pack_string (char *pkt, char *string);
2561
2562 static char *
2563 pack_string (char *pkt, char *string)
2564 {
2565   char ch;
2566   int len;
2567
2568   len = strlen (string);
2569   if (len > 200)
2570     len = 200;          /* Bigger than most GDB packets, junk???  */
2571   pkt = pack_hex_byte (pkt, len);
2572   while (len-- > 0)
2573     {
2574       ch = *string++;
2575       if ((ch == '\0') || (ch == '#'))
2576         ch = '*';               /* Protect encapsulation.  */
2577       *pkt++ = ch;
2578     }
2579   return pkt;
2580 }
2581 #endif /* 0 (unused) */
2582
2583 static char *
2584 unpack_string (char *src, char *dest, int length)
2585 {
2586   while (length--)
2587     *dest++ = *src++;
2588   *dest = '\0';
2589   return src;
2590 }
2591
2592 static char *
2593 pack_threadid (char *pkt, threadref *id)
2594 {
2595   char *limit;
2596   unsigned char *altid;
2597
2598   altid = (unsigned char *) id;
2599   limit = pkt + BUF_THREAD_ID_SIZE;
2600   while (pkt < limit)
2601     pkt = pack_hex_byte (pkt, *altid++);
2602   return pkt;
2603 }
2604
2605
2606 static char *
2607 unpack_threadid (char *inbuf, threadref *id)
2608 {
2609   char *altref;
2610   char *limit = inbuf + BUF_THREAD_ID_SIZE;
2611   int x, y;
2612
2613   altref = (char *) id;
2614
2615   while (inbuf < limit)
2616     {
2617       x = stubhex (*inbuf++);
2618       y = stubhex (*inbuf++);
2619       *altref++ = (x << 4) | y;
2620     }
2621   return inbuf;
2622 }
2623
2624 /* Externally, threadrefs are 64 bits but internally, they are still
2625    ints.  This is due to a mismatch of specifications.  We would like
2626    to use 64bit thread references internally.  This is an adapter
2627    function.  */
2628
2629 void
2630 int_to_threadref (threadref *id, int value)
2631 {
2632   unsigned char *scan;
2633
2634   scan = (unsigned char *) id;
2635   {
2636     int i = 4;
2637     while (i--)
2638       *scan++ = 0;
2639   }
2640   *scan++ = (value >> 24) & 0xff;
2641   *scan++ = (value >> 16) & 0xff;
2642   *scan++ = (value >> 8) & 0xff;
2643   *scan++ = (value & 0xff);
2644 }
2645
2646 static int
2647 threadref_to_int (threadref *ref)
2648 {
2649   int i, value = 0;
2650   unsigned char *scan;
2651
2652   scan = *ref;
2653   scan += 4;
2654   i = 4;
2655   while (i-- > 0)
2656     value = (value << 8) | ((*scan++) & 0xff);
2657   return value;
2658 }
2659
2660 static void
2661 copy_threadref (threadref *dest, threadref *src)
2662 {
2663   int i;
2664   unsigned char *csrc, *cdest;
2665
2666   csrc = (unsigned char *) src;
2667   cdest = (unsigned char *) dest;
2668   i = 8;
2669   while (i--)
2670     *cdest++ = *csrc++;
2671 }
2672
2673 static int
2674 threadmatch (threadref *dest, threadref *src)
2675 {
2676   /* Things are broken right now, so just assume we got a match.  */
2677 #if 0
2678   unsigned char *srcp, *destp;
2679   int i, result;
2680   srcp = (char *) src;
2681   destp = (char *) dest;
2682
2683   result = 1;
2684   while (i-- > 0)
2685     result &= (*srcp++ == *destp++) ? 1 : 0;
2686   return result;
2687 #endif
2688   return 1;
2689 }
2690
2691 /*
2692    threadid:1,        # always request threadid
2693    context_exists:2,
2694    display:4,
2695    unique_name:8,
2696    more_display:16
2697  */
2698
2699 /* Encoding:  'Q':8,'P':8,mask:32,threadid:64 */
2700
2701 static char *
2702 pack_threadinfo_request (char *pkt, int mode, threadref *id)
2703 {
2704   *pkt++ = 'q';                         /* Info Query */
2705   *pkt++ = 'P';                         /* process or thread info */
2706   pkt = pack_int (pkt, mode);           /* mode */
2707   pkt = pack_threadid (pkt, id);        /* threadid */
2708   *pkt = '\0';                          /* terminate */
2709   return pkt;
2710 }
2711
2712 /* These values tag the fields in a thread info response packet.  */
2713 /* Tagging the fields allows us to request specific fields and to
2714    add more fields as time goes by.  */
2715
2716 #define TAG_THREADID 1          /* Echo the thread identifier.  */
2717 #define TAG_EXISTS 2            /* Is this process defined enough to
2718                                    fetch registers and its stack?  */
2719 #define TAG_DISPLAY 4           /* A short thing maybe to put on a window */
2720 #define TAG_THREADNAME 8        /* string, maps 1-to-1 with a thread is.  */
2721 #define TAG_MOREDISPLAY 16      /* Whatever the kernel wants to say about
2722                                    the process.  */
2723
2724 static int
2725 remote_unpack_thread_info_response (char *pkt, threadref *expectedref,
2726                                     struct gdb_ext_thread_info *info)
2727 {
2728   struct remote_state *rs = get_remote_state ();
2729   int mask, length;
2730   int tag;
2731   threadref ref;
2732   char *limit = pkt + rs->buf_size; /* Plausible parsing limit.  */
2733   int retval = 1;
2734
2735   /* info->threadid = 0; FIXME: implement zero_threadref.  */
2736   info->active = 0;
2737   info->display[0] = '\0';
2738   info->shortname[0] = '\0';
2739   info->more_display[0] = '\0';
2740
2741   /* Assume the characters indicating the packet type have been
2742      stripped.  */
2743   pkt = unpack_int (pkt, &mask);        /* arg mask */
2744   pkt = unpack_threadid (pkt, &ref);
2745
2746   if (mask == 0)
2747     warning (_("Incomplete response to threadinfo request."));
2748   if (!threadmatch (&ref, expectedref))
2749     {                   /* This is an answer to a different request.  */
2750       warning (_("ERROR RMT Thread info mismatch."));
2751       return 0;
2752     }
2753   copy_threadref (&info->threadid, &ref);
2754
2755   /* Loop on tagged fields , try to bail if somthing goes wrong.  */
2756
2757   /* Packets are terminated with nulls.  */
2758   while ((pkt < limit) && mask && *pkt)
2759     {
2760       pkt = unpack_int (pkt, &tag);     /* tag */
2761       pkt = unpack_byte (pkt, &length); /* length */
2762       if (!(tag & mask))                /* Tags out of synch with mask.  */
2763         {
2764           warning (_("ERROR RMT: threadinfo tag mismatch."));
2765           retval = 0;
2766           break;
2767         }
2768       if (tag == TAG_THREADID)
2769         {
2770           if (length != 16)
2771             {
2772               warning (_("ERROR RMT: length of threadid is not 16."));
2773               retval = 0;
2774               break;
2775             }
2776           pkt = unpack_threadid (pkt, &ref);
2777           mask = mask & ~TAG_THREADID;
2778           continue;
2779         }
2780       if (tag == TAG_EXISTS)
2781         {
2782           info->active = stub_unpack_int (pkt, length);
2783           pkt += length;
2784           mask = mask & ~(TAG_EXISTS);
2785           if (length > 8)
2786             {
2787               warning (_("ERROR RMT: 'exists' length too long."));
2788               retval = 0;
2789               break;
2790             }
2791           continue;
2792         }
2793       if (tag == TAG_THREADNAME)
2794         {
2795           pkt = unpack_string (pkt, &info->shortname[0], length);
2796           mask = mask & ~TAG_THREADNAME;
2797           continue;
2798         }
2799       if (tag == TAG_DISPLAY)
2800         {
2801           pkt = unpack_string (pkt, &info->display[0], length);
2802           mask = mask & ~TAG_DISPLAY;
2803           continue;
2804         }
2805       if (tag == TAG_MOREDISPLAY)
2806         {
2807           pkt = unpack_string (pkt, &info->more_display[0], length);
2808           mask = mask & ~TAG_MOREDISPLAY;
2809           continue;
2810         }
2811       warning (_("ERROR RMT: unknown thread info tag."));
2812       break;                    /* Not a tag we know about.  */
2813     }
2814   return retval;
2815 }
2816
2817 static int
2818 remote_get_threadinfo (threadref *threadid, int fieldset,       /* TAG mask */
2819                        struct gdb_ext_thread_info *info)
2820 {
2821   struct remote_state *rs = get_remote_state ();
2822   int result;
2823
2824   pack_threadinfo_request (rs->buf, fieldset, threadid);
2825   putpkt (rs->buf);
2826   getpkt (&rs->buf, &rs->buf_size, 0);
2827
2828   if (rs->buf[0] == '\0')
2829     return 0;
2830
2831   result = remote_unpack_thread_info_response (rs->buf + 2,
2832                                                threadid, info);
2833   return result;
2834 }
2835
2836 /*    Format: i'Q':8,i"L":8,initflag:8,batchsize:16,lastthreadid:32   */
2837
2838 static char *
2839 pack_threadlist_request (char *pkt, int startflag, int threadcount,
2840                          threadref *nextthread)
2841 {
2842   *pkt++ = 'q';                 /* info query packet */
2843   *pkt++ = 'L';                 /* Process LIST or threadLIST request */
2844   pkt = pack_nibble (pkt, startflag);           /* initflag 1 bytes */
2845   pkt = pack_hex_byte (pkt, threadcount);       /* threadcount 2 bytes */
2846   pkt = pack_threadid (pkt, nextthread);        /* 64 bit thread identifier */
2847   *pkt = '\0';
2848   return pkt;
2849 }
2850
2851 /* Encoding:   'q':8,'M':8,count:16,done:8,argthreadid:64,(threadid:64)* */
2852
2853 static int
2854 parse_threadlist_response (char *pkt, int result_limit,
2855                            threadref *original_echo, threadref *resultlist,
2856                            int *doneflag)
2857 {
2858   struct remote_state *rs = get_remote_state ();
2859   char *limit;
2860   int count, resultcount, done;
2861
2862   resultcount = 0;
2863   /* Assume the 'q' and 'M chars have been stripped.  */
2864   limit = pkt + (rs->buf_size - BUF_THREAD_ID_SIZE);
2865   /* done parse past here */
2866   pkt = unpack_byte (pkt, &count);      /* count field */
2867   pkt = unpack_nibble (pkt, &done);
2868   /* The first threadid is the argument threadid.  */
2869   pkt = unpack_threadid (pkt, original_echo);   /* should match query packet */
2870   while ((count-- > 0) && (pkt < limit))
2871     {
2872       pkt = unpack_threadid (pkt, resultlist++);
2873       if (resultcount++ >= result_limit)
2874         break;
2875     }
2876   if (doneflag)
2877     *doneflag = done;
2878   return resultcount;
2879 }
2880
2881 /* Fetch the next batch of threads from the remote.  Returns -1 if the
2882    qL packet is not supported, 0 on error and 1 on success.  */
2883
2884 static int
2885 remote_get_threadlist (int startflag, threadref *nextthread, int result_limit,
2886                        int *done, int *result_count, threadref *threadlist)
2887 {
2888   struct remote_state *rs = get_remote_state ();
2889   int result = 1;
2890
2891   /* Trancate result limit to be smaller than the packet size.  */
2892   if ((((result_limit + 1) * BUF_THREAD_ID_SIZE) + 10)
2893       >= get_remote_packet_size ())
2894     result_limit = (get_remote_packet_size () / BUF_THREAD_ID_SIZE) - 2;
2895
2896   pack_threadlist_request (rs->buf, startflag, result_limit, nextthread);
2897   putpkt (rs->buf);
2898   getpkt (&rs->buf, &rs->buf_size, 0);
2899   if (*rs->buf == '\0')
2900     {
2901       /* Packet not supported.  */
2902       return -1;
2903     }
2904
2905   *result_count =
2906     parse_threadlist_response (rs->buf + 2, result_limit,
2907                                &rs->echo_nextthread, threadlist, done);
2908
2909   if (!threadmatch (&rs->echo_nextthread, nextthread))
2910     {
2911       /* FIXME: This is a good reason to drop the packet.  */
2912       /* Possably, there is a duplicate response.  */
2913       /* Possabilities :
2914          retransmit immediatly - race conditions
2915          retransmit after timeout - yes
2916          exit
2917          wait for packet, then exit
2918        */
2919       warning (_("HMM: threadlist did not echo arg thread, dropping it."));
2920       return 0;                 /* I choose simply exiting.  */
2921     }
2922   if (*result_count <= 0)
2923     {
2924       if (*done != 1)
2925         {
2926           warning (_("RMT ERROR : failed to get remote thread list."));
2927           result = 0;
2928         }
2929       return result;            /* break; */
2930     }
2931   if (*result_count > result_limit)
2932     {
2933       *result_count = 0;
2934       warning (_("RMT ERROR: threadlist response longer than requested."));
2935       return 0;
2936     }
2937   return result;
2938 }
2939
2940 /* Fetch the list of remote threads, with the qL packet, and call
2941    STEPFUNCTION for each thread found.  Stops iterating and returns 1
2942    if STEPFUNCTION returns true.  Stops iterating and returns 0 if the
2943    STEPFUNCTION returns false.  If the packet is not supported,
2944    returns -1.  */
2945
2946 static int
2947 remote_threadlist_iterator (rmt_thread_action stepfunction, void *context,
2948                             int looplimit)
2949 {
2950   struct remote_state *rs = get_remote_state ();
2951   int done, i, result_count;
2952   int startflag = 1;
2953   int result = 1;
2954   int loopcount = 0;
2955
2956   done = 0;
2957   while (!done)
2958     {
2959       if (loopcount++ > looplimit)
2960         {
2961           result = 0;
2962           warning (_("Remote fetch threadlist -infinite loop-."));
2963           break;
2964         }
2965       result = remote_get_threadlist (startflag, &rs->nextthread,
2966                                       MAXTHREADLISTRESULTS,
2967                                       &done, &result_count,
2968                                       rs->resultthreadlist);
2969       if (result <= 0)
2970         break;
2971       /* Clear for later iterations.  */
2972       startflag = 0;
2973       /* Setup to resume next batch of thread references, set nextthread.  */
2974       if (result_count >= 1)
2975         copy_threadref (&rs->nextthread,
2976                         &rs->resultthreadlist[result_count - 1]);
2977       i = 0;
2978       while (result_count--)
2979         {
2980           if (!(*stepfunction) (&rs->resultthreadlist[i++], context))
2981             {
2982               result = 0;
2983               break;
2984             }
2985         }
2986     }
2987   return result;
2988 }
2989
2990 /* A thread found on the remote target.  */
2991
2992 typedef struct thread_item
2993 {
2994   /* The thread's PTID.  */
2995   ptid_t ptid;
2996
2997   /* The thread's extra info.  May be NULL.  */
2998   char *extra;
2999
3000   /* The thread's name.  May be NULL.  */
3001   char *name;
3002
3003   /* The core the thread was running on.  -1 if not known.  */
3004   int core;
3005
3006   /* The thread handle associated with the thread.  */
3007   gdb::byte_vector *thread_handle;
3008
3009 } thread_item_t;
3010 DEF_VEC_O(thread_item_t);
3011
3012 /* Context passed around to the various methods listing remote
3013    threads.  As new threads are found, they're added to the ITEMS
3014    vector.  */
3015
3016 struct threads_listing_context
3017 {
3018   /* The threads found on the remote target.  */
3019   VEC (thread_item_t) *items;
3020 };
3021
3022 /* Discard the contents of the constructed thread listing context.  */
3023
3024 static void
3025 clear_threads_listing_context (void *p)
3026 {
3027   struct threads_listing_context *context
3028     = (struct threads_listing_context *) p;
3029   int i;
3030   struct thread_item *item;
3031
3032   for (i = 0; VEC_iterate (thread_item_t, context->items, i, item); ++i)
3033     {
3034       xfree (item->extra);
3035       xfree (item->name);
3036       delete item->thread_handle;
3037     }
3038
3039   VEC_free (thread_item_t, context->items);
3040 }
3041
3042 /* Remove the thread specified as the related_pid field of WS
3043    from the CONTEXT list.  */
3044
3045 static void
3046 threads_listing_context_remove (struct target_waitstatus *ws,
3047                                 struct threads_listing_context *context)
3048 {
3049   struct thread_item *item;
3050   int i;
3051   ptid_t child_ptid = ws->value.related_pid;
3052
3053   for (i = 0; VEC_iterate (thread_item_t, context->items, i, item); ++i)
3054     {
3055       if (ptid_equal (item->ptid, child_ptid))
3056         {
3057           VEC_ordered_remove (thread_item_t, context->items, i);
3058           break;
3059         }
3060     }
3061 }
3062
3063 static int
3064 remote_newthread_step (threadref *ref, void *data)
3065 {
3066   struct threads_listing_context *context
3067     = (struct threads_listing_context *) data;
3068   struct thread_item item;
3069   int pid = ptid_get_pid (inferior_ptid);
3070
3071   item.ptid = ptid_build (pid, threadref_to_int (ref), 0);
3072   item.core = -1;
3073   item.name = NULL;
3074   item.extra = NULL;
3075   item.thread_handle = nullptr;
3076
3077   VEC_safe_push (thread_item_t, context->items, &item);
3078
3079   return 1;                     /* continue iterator */
3080 }
3081
3082 #define CRAZY_MAX_THREADS 1000
3083
3084 static ptid_t
3085 remote_current_thread (ptid_t oldpid)
3086 {
3087   struct remote_state *rs = get_remote_state ();
3088
3089   putpkt ("qC");
3090   getpkt (&rs->buf, &rs->buf_size, 0);
3091   if (rs->buf[0] == 'Q' && rs->buf[1] == 'C')
3092     {
3093       const char *obuf;
3094       ptid_t result;
3095
3096       result = read_ptid (&rs->buf[2], &obuf);
3097       if (*obuf != '\0' && remote_debug)
3098         fprintf_unfiltered (gdb_stdlog,
3099                             "warning: garbage in qC reply\n");
3100
3101       return result;
3102     }
3103   else
3104     return oldpid;
3105 }
3106
3107 /* List remote threads using the deprecated qL packet.  */
3108
3109 static int
3110 remote_get_threads_with_ql (struct target_ops *ops,
3111                             struct threads_listing_context *context)
3112 {
3113   if (remote_threadlist_iterator (remote_newthread_step, context,
3114                                   CRAZY_MAX_THREADS) >= 0)
3115     return 1;
3116
3117   return 0;
3118 }
3119
3120 #if defined(HAVE_LIBEXPAT)
3121
3122 static void
3123 start_thread (struct gdb_xml_parser *parser,
3124               const struct gdb_xml_element *element,
3125               void *user_data, VEC(gdb_xml_value_s) *attributes)
3126 {
3127   struct threads_listing_context *data
3128     = (struct threads_listing_context *) user_data;
3129
3130   struct thread_item item;
3131   char *id;
3132   struct gdb_xml_value *attr;
3133
3134   id = (char *) xml_find_attribute (attributes, "id")->value;
3135   item.ptid = read_ptid (id, NULL);
3136
3137   attr = xml_find_attribute (attributes, "core");
3138   if (attr != NULL)
3139     item.core = *(ULONGEST *) attr->value;
3140   else
3141     item.core = -1;
3142
3143   attr = xml_find_attribute (attributes, "name");
3144   item.name = attr != NULL ? xstrdup ((const char *) attr->value) : NULL;
3145
3146   attr = xml_find_attribute (attributes, "handle");
3147   if (attr != NULL)
3148     {
3149       item.thread_handle = new gdb::byte_vector
3150                              (strlen ((const char *) attr->value) / 2);
3151       hex2bin ((const char *) attr->value, item.thread_handle->data (),
3152                item.thread_handle->size ());
3153     }
3154   else
3155     item.thread_handle = nullptr;
3156
3157   item.extra = 0;
3158
3159   VEC_safe_push (thread_item_t, data->items, &item);
3160 }
3161
3162 static void
3163 end_thread (struct gdb_xml_parser *parser,
3164             const struct gdb_xml_element *element,
3165             void *user_data, const char *body_text)
3166 {
3167   struct threads_listing_context *data
3168     = (struct threads_listing_context *) user_data;
3169
3170   if (body_text && *body_text)
3171     VEC_last (thread_item_t, data->items)->extra = xstrdup (body_text);
3172 }
3173
3174 const struct gdb_xml_attribute thread_attributes[] = {
3175   { "id", GDB_XML_AF_NONE, NULL, NULL },
3176   { "core", GDB_XML_AF_OPTIONAL, gdb_xml_parse_attr_ulongest, NULL },
3177   { "name", GDB_XML_AF_OPTIONAL, NULL, NULL },
3178   { "handle", GDB_XML_AF_OPTIONAL, NULL, NULL },
3179   { NULL, GDB_XML_AF_NONE, NULL, NULL }
3180 };
3181
3182 const struct gdb_xml_element thread_children[] = {
3183   { NULL, NULL, NULL, GDB_XML_EF_NONE, NULL, NULL }
3184 };
3185
3186 const struct gdb_xml_element threads_children[] = {
3187   { "thread", thread_attributes, thread_children,
3188     GDB_XML_EF_REPEATABLE | GDB_XML_EF_OPTIONAL,
3189     start_thread, end_thread },
3190   { NULL, NULL, NULL, GDB_XML_EF_NONE, NULL, NULL }
3191 };
3192
3193 const struct gdb_xml_element threads_elements[] = {
3194   { "threads", NULL, threads_children,
3195     GDB_XML_EF_NONE, NULL, NULL },
3196   { NULL, NULL, NULL, GDB_XML_EF_NONE, NULL, NULL }
3197 };
3198
3199 #endif
3200
3201 /* List remote threads using qXfer:threads:read.  */
3202
3203 static int
3204 remote_get_threads_with_qxfer (struct target_ops *ops,
3205                                struct threads_listing_context *context)
3206 {
3207 #if defined(HAVE_LIBEXPAT)
3208   if (packet_support (PACKET_qXfer_threads) == PACKET_ENABLE)
3209     {
3210       char *xml = target_read_stralloc (ops, TARGET_OBJECT_THREADS, NULL);
3211       struct cleanup *back_to = make_cleanup (xfree, xml);
3212
3213       if (xml != NULL && *xml != '\0')
3214         {
3215           gdb_xml_parse_quick (_("threads"), "threads.dtd",
3216                                threads_elements, xml, context);
3217         }
3218
3219       do_cleanups (back_to);
3220       return 1;
3221     }
3222 #endif
3223
3224   return 0;
3225 }
3226
3227 /* List remote threads using qfThreadInfo/qsThreadInfo.  */
3228
3229 static int
3230 remote_get_threads_with_qthreadinfo (struct target_ops *ops,
3231                                      struct threads_listing_context *context)
3232 {
3233   struct remote_state *rs = get_remote_state ();
3234
3235   if (rs->use_threadinfo_query)
3236     {
3237       const char *bufp;
3238
3239       putpkt ("qfThreadInfo");
3240       getpkt (&rs->buf, &rs->buf_size, 0);
3241       bufp = rs->buf;
3242       if (bufp[0] != '\0')              /* q packet recognized */
3243         {
3244           while (*bufp++ == 'm')        /* reply contains one or more TID */
3245             {
3246               do
3247                 {
3248                   struct thread_item item;
3249
3250                   item.ptid = read_ptid (bufp, &bufp);
3251                   item.core = -1;
3252                   item.name = NULL;
3253                   item.extra = NULL;
3254                   item.thread_handle = nullptr;
3255
3256                   VEC_safe_push (thread_item_t, context->items, &item);
3257                 }
3258               while (*bufp++ == ',');   /* comma-separated list */
3259               putpkt ("qsThreadInfo");
3260               getpkt (&rs->buf, &rs->buf_size, 0);
3261               bufp = rs->buf;
3262             }
3263           return 1;
3264         }
3265       else
3266         {
3267           /* Packet not recognized.  */
3268           rs->use_threadinfo_query = 0;
3269         }
3270     }
3271
3272   return 0;
3273 }
3274
3275 /* Implement the to_update_thread_list function for the remote
3276    targets.  */
3277
3278 static void
3279 remote_update_thread_list (struct target_ops *ops)
3280 {
3281   struct threads_listing_context context;
3282   struct cleanup *old_chain;
3283   int got_list = 0;
3284
3285   context.items = NULL;
3286   old_chain = make_cleanup (clear_threads_listing_context, &context);
3287
3288   /* We have a few different mechanisms to fetch the thread list.  Try
3289      them all, starting with the most preferred one first, falling
3290      back to older methods.  */
3291   if (remote_get_threads_with_qxfer (ops, &context)
3292       || remote_get_threads_with_qthreadinfo (ops, &context)
3293       || remote_get_threads_with_ql (ops, &context))
3294     {
3295       int i;
3296       struct thread_item *item;
3297       struct thread_info *tp, *tmp;
3298
3299       got_list = 1;
3300
3301       if (VEC_empty (thread_item_t, context.items)
3302           && remote_thread_always_alive (ops, inferior_ptid))
3303         {
3304           /* Some targets don't really support threads, but still
3305              reply an (empty) thread list in response to the thread
3306              listing packets, instead of replying "packet not
3307              supported".  Exit early so we don't delete the main
3308              thread.  */
3309           do_cleanups (old_chain);
3310           return;
3311         }
3312
3313       /* CONTEXT now holds the current thread list on the remote
3314          target end.  Delete GDB-side threads no longer found on the
3315          target.  */
3316       ALL_THREADS_SAFE (tp, tmp)
3317         {
3318           for (i = 0;
3319                VEC_iterate (thread_item_t, context.items, i, item);
3320                ++i)
3321             {
3322               if (ptid_equal (item->ptid, tp->ptid))
3323                 break;
3324             }
3325
3326           if (i == VEC_length (thread_item_t, context.items))
3327             {
3328               /* Not found.  */
3329               delete_thread (tp->ptid);
3330             }
3331         }
3332
3333       /* Remove any unreported fork child threads from CONTEXT so
3334          that we don't interfere with follow fork, which is where
3335          creation of such threads is handled.  */
3336       remove_new_fork_children (&context);
3337
3338       /* And now add threads we don't know about yet to our list.  */
3339       for (i = 0;
3340            VEC_iterate (thread_item_t, context.items, i, item);
3341            ++i)
3342         {
3343           if (!ptid_equal (item->ptid, null_ptid))
3344             {
3345               struct private_thread_info *info;
3346               /* In non-stop mode, we assume new found threads are
3347                  executing until proven otherwise with a stop reply.
3348                  In all-stop, we can only get here if all threads are
3349                  stopped.  */
3350               int executing = target_is_non_stop_p () ? 1 : 0;
3351
3352               remote_notice_new_inferior (item->ptid, executing);
3353
3354               info = get_private_info_ptid (item->ptid);
3355               info->core = item->core;
3356               info->extra = item->extra;
3357               item->extra = NULL;
3358               info->name = item->name;
3359               item->name = NULL;
3360               info->thread_handle = item->thread_handle;
3361               item->thread_handle = nullptr;
3362             }
3363         }
3364     }
3365
3366   if (!got_list)
3367     {
3368       /* If no thread listing method is supported, then query whether
3369          each known thread is alive, one by one, with the T packet.
3370          If the target doesn't support threads at all, then this is a
3371          no-op.  See remote_thread_alive.  */
3372       prune_threads ();
3373     }
3374
3375   do_cleanups (old_chain);
3376 }
3377
3378 /*
3379  * Collect a descriptive string about the given thread.
3380  * The target may say anything it wants to about the thread
3381  * (typically info about its blocked / runnable state, name, etc.).
3382  * This string will appear in the info threads display.
3383  *
3384  * Optional: targets are not required to implement this function.
3385  */
3386
3387 static const char *
3388 remote_threads_extra_info (struct target_ops *self, struct thread_info *tp)
3389 {
3390   struct remote_state *rs = get_remote_state ();
3391   int result;
3392   int set;
3393   threadref id;
3394   struct gdb_ext_thread_info threadinfo;
3395   static char display_buf[100]; /* arbitrary...  */
3396   int n = 0;                    /* position in display_buf */
3397
3398   if (rs->remote_desc == 0)             /* paranoia */
3399     internal_error (__FILE__, __LINE__,
3400                     _("remote_threads_extra_info"));
3401
3402   if (ptid_equal (tp->ptid, magic_null_ptid)
3403       || (ptid_get_pid (tp->ptid) != 0 && ptid_get_lwp (tp->ptid) == 0))
3404     /* This is the main thread which was added by GDB.  The remote
3405        server doesn't know about it.  */
3406     return NULL;
3407
3408   if (packet_support (PACKET_qXfer_threads) == PACKET_ENABLE)
3409     {
3410       struct thread_info *info = find_thread_ptid (tp->ptid);
3411
3412       if (info && info->priv)
3413         return info->priv->extra;
3414       else
3415         return NULL;
3416     }
3417
3418   if (rs->use_threadextra_query)
3419     {
3420       char *b = rs->buf;
3421       char *endb = rs->buf + get_remote_packet_size ();
3422
3423       xsnprintf (b, endb - b, "qThreadExtraInfo,");
3424       b += strlen (b);
3425       write_ptid (b, endb, tp->ptid);
3426
3427       putpkt (rs->buf);
3428       getpkt (&rs->buf, &rs->buf_size, 0);
3429       if (rs->buf[0] != 0)
3430         {
3431           n = std::min (strlen (rs->buf) / 2, sizeof (display_buf));
3432           result = hex2bin (rs->buf, (gdb_byte *) display_buf, n);
3433           display_buf [result] = '\0';
3434           return display_buf;
3435         }
3436     }
3437
3438   /* If the above query fails, fall back to the old method.  */
3439   rs->use_threadextra_query = 0;
3440   set = TAG_THREADID | TAG_EXISTS | TAG_THREADNAME
3441     | TAG_MOREDISPLAY | TAG_DISPLAY;
3442   int_to_threadref (&id, ptid_get_lwp (tp->ptid));
3443   if (remote_get_threadinfo (&id, set, &threadinfo))
3444     if (threadinfo.active)
3445       {
3446         if (*threadinfo.shortname)
3447           n += xsnprintf (&display_buf[0], sizeof (display_buf) - n,
3448                           " Name: %s,", threadinfo.shortname);
3449         if (*threadinfo.display)
3450           n += xsnprintf (&display_buf[n], sizeof (display_buf) - n,
3451                           " State: %s,", threadinfo.display);
3452         if (*threadinfo.more_display)
3453           n += xsnprintf (&display_buf[n], sizeof (display_buf) - n,
3454                           " Priority: %s", threadinfo.more_display);
3455
3456         if (n > 0)
3457           {
3458             /* For purely cosmetic reasons, clear up trailing commas.  */
3459             if (',' == display_buf[n-1])
3460               display_buf[n-1] = ' ';
3461             return display_buf;
3462           }
3463       }
3464   return NULL;
3465 }
3466 \f
3467
3468 static int
3469 remote_static_tracepoint_marker_at (struct target_ops *self, CORE_ADDR addr,
3470                                     struct static_tracepoint_marker *marker)
3471 {
3472   struct remote_state *rs = get_remote_state ();
3473   char *p = rs->buf;
3474
3475   xsnprintf (p, get_remote_packet_size (), "qTSTMat:");
3476   p += strlen (p);
3477   p += hexnumstr (p, addr);
3478   putpkt (rs->buf);
3479   getpkt (&rs->buf, &rs->buf_size, 0);
3480   p = rs->buf;
3481
3482   if (*p == 'E')
3483     error (_("Remote failure reply: %s"), p);
3484
3485   if (*p++ == 'm')
3486     {
3487       parse_static_tracepoint_marker_definition (p, NULL, marker);
3488       return 1;
3489     }
3490
3491   return 0;
3492 }
3493
3494 static VEC(static_tracepoint_marker_p) *
3495 remote_static_tracepoint_markers_by_strid (struct target_ops *self,
3496                                            const char *strid)
3497 {
3498   struct remote_state *rs = get_remote_state ();
3499   VEC(static_tracepoint_marker_p) *markers = NULL;
3500   struct static_tracepoint_marker *marker = NULL;
3501   struct cleanup *old_chain;
3502   const char *p;
3503
3504   /* Ask for a first packet of static tracepoint marker
3505      definition.  */
3506   putpkt ("qTfSTM");
3507   getpkt (&rs->buf, &rs->buf_size, 0);
3508   p = rs->buf;
3509   if (*p == 'E')
3510     error (_("Remote failure reply: %s"), p);
3511
3512   old_chain = make_cleanup (free_current_marker, &marker);
3513
3514   while (*p++ == 'm')
3515     {
3516       if (marker == NULL)
3517         marker = XCNEW (struct static_tracepoint_marker);
3518
3519       do
3520         {
3521           parse_static_tracepoint_marker_definition (p, &p, marker);
3522
3523           if (strid == NULL || strcmp (strid, marker->str_id) == 0)
3524             {
3525               VEC_safe_push (static_tracepoint_marker_p,
3526                              markers, marker);
3527               marker = NULL;
3528             }
3529           else
3530             {
3531               release_static_tracepoint_marker (marker);
3532               memset (marker, 0, sizeof (*marker));
3533             }
3534         }
3535       while (*p++ == ',');      /* comma-separated list */
3536       /* Ask for another packet of static tracepoint definition.  */
3537       putpkt ("qTsSTM");
3538       getpkt (&rs->buf, &rs->buf_size, 0);
3539       p = rs->buf;
3540     }
3541
3542   do_cleanups (old_chain);
3543   return markers;
3544 }
3545
3546 \f
3547 /* Implement the to_get_ada_task_ptid function for the remote targets.  */
3548
3549 static ptid_t
3550 remote_get_ada_task_ptid (struct target_ops *self, long lwp, long thread)
3551 {
3552   return ptid_build (ptid_get_pid (inferior_ptid), lwp, 0);
3553 }
3554 \f
3555
3556 /* Restart the remote side; this is an extended protocol operation.  */
3557
3558 static void
3559 extended_remote_restart (void)
3560 {
3561   struct remote_state *rs = get_remote_state ();
3562
3563   /* Send the restart command; for reasons I don't understand the
3564      remote side really expects a number after the "R".  */
3565   xsnprintf (rs->buf, get_remote_packet_size (), "R%x", 0);
3566   putpkt (rs->buf);
3567
3568   remote_fileio_reset ();
3569 }
3570 \f
3571 /* Clean up connection to a remote debugger.  */
3572
3573 static void
3574 remote_close (struct target_ops *self)
3575 {
3576   struct remote_state *rs = get_remote_state ();
3577
3578   if (rs->remote_desc == NULL)
3579     return; /* already closed */
3580
3581   /* Make sure we leave stdin registered in the event loop.  */
3582   remote_terminal_ours (self);
3583
3584   serial_close (rs->remote_desc);
3585   rs->remote_desc = NULL;
3586
3587   /* We don't have a connection to the remote stub anymore.  Get rid
3588      of all the inferiors and their threads we were controlling.
3589      Reset inferior_ptid to null_ptid first, as otherwise has_stack_frame
3590      will be unable to find the thread corresponding to (pid, 0, 0).  */
3591   inferior_ptid = null_ptid;
3592   discard_all_inferiors ();
3593
3594   /* We are closing the remote target, so we should discard
3595      everything of this target.  */
3596   discard_pending_stop_replies_in_queue (rs);
3597
3598   if (remote_async_inferior_event_token)
3599     delete_async_event_handler (&remote_async_inferior_event_token);
3600
3601   remote_notif_state_xfree (rs->notif_state);
3602
3603   trace_reset_local_state ();
3604 }
3605
3606 /* Query the remote side for the text, data and bss offsets.  */
3607
3608 static void
3609 get_offsets (void)
3610 {
3611   struct remote_state *rs = get_remote_state ();
3612   char *buf;
3613   char *ptr;
3614   int lose, num_segments = 0, do_sections, do_segments;
3615   CORE_ADDR text_addr, data_addr, bss_addr, segments[2];
3616   struct section_offsets *offs;
3617   struct symfile_segment_data *data;
3618
3619   if (symfile_objfile == NULL)
3620     return;
3621
3622   putpkt ("qOffsets");
3623   getpkt (&rs->buf, &rs->buf_size, 0);
3624   buf = rs->buf;
3625
3626   if (buf[0] == '\000')
3627     return;                     /* Return silently.  Stub doesn't support
3628                                    this command.  */
3629   if (buf[0] == 'E')
3630     {
3631       warning (_("Remote failure reply: %s"), buf);
3632       return;
3633     }
3634
3635   /* Pick up each field in turn.  This used to be done with scanf, but
3636      scanf will make trouble if CORE_ADDR size doesn't match
3637      conversion directives correctly.  The following code will work
3638      with any size of CORE_ADDR.  */
3639   text_addr = data_addr = bss_addr = 0;
3640   ptr = buf;
3641   lose = 0;
3642
3643   if (startswith (ptr, "Text="))
3644     {
3645       ptr += 5;
3646       /* Don't use strtol, could lose on big values.  */
3647       while (*ptr && *ptr != ';')
3648         text_addr = (text_addr << 4) + fromhex (*ptr++);
3649
3650       if (startswith (ptr, ";Data="))
3651         {
3652           ptr += 6;
3653           while (*ptr && *ptr != ';')
3654             data_addr = (data_addr << 4) + fromhex (*ptr++);
3655         }
3656       else
3657         lose = 1;
3658
3659       if (!lose && startswith (ptr, ";Bss="))
3660         {
3661           ptr += 5;
3662           while (*ptr && *ptr != ';')
3663             bss_addr = (bss_addr << 4) + fromhex (*ptr++);
3664
3665           if (bss_addr != data_addr)
3666             warning (_("Target reported unsupported offsets: %s"), buf);
3667         }
3668       else
3669         lose = 1;
3670     }
3671   else if (startswith (ptr, "TextSeg="))
3672     {
3673       ptr += 8;
3674       /* Don't use strtol, could lose on big values.  */
3675       while (*ptr && *ptr != ';')
3676         text_addr = (text_addr << 4) + fromhex (*ptr++);
3677       num_segments = 1;
3678
3679       if (startswith (ptr, ";DataSeg="))
3680         {
3681           ptr += 9;
3682           while (*ptr && *ptr != ';')
3683             data_addr = (data_addr << 4) + fromhex (*ptr++);
3684           num_segments++;
3685         }
3686     }
3687   else
3688     lose = 1;
3689
3690   if (lose)
3691     error (_("Malformed response to offset query, %s"), buf);
3692   else if (*ptr != '\0')
3693     warning (_("Target reported unsupported offsets: %s"), buf);
3694
3695   offs = ((struct section_offsets *)
3696           alloca (SIZEOF_N_SECTION_OFFSETS (symfile_objfile->num_sections)));
3697   memcpy (offs, symfile_objfile->section_offsets,
3698           SIZEOF_N_SECTION_OFFSETS (symfile_objfile->num_sections));
3699
3700   data = get_symfile_segment_data (symfile_objfile->obfd);
3701   do_segments = (data != NULL);
3702   do_sections = num_segments == 0;
3703
3704   if (num_segments > 0)
3705     {
3706       segments[0] = text_addr;
3707       segments[1] = data_addr;
3708     }
3709   /* If we have two segments, we can still try to relocate everything
3710      by assuming that the .text and .data offsets apply to the whole
3711      text and data segments.  Convert the offsets given in the packet
3712      to base addresses for symfile_map_offsets_to_segments.  */
3713   else if (data && data->num_segments == 2)
3714     {
3715       segments[0] = data->segment_bases[0] + text_addr;
3716       segments[1] = data->segment_bases[1] + data_addr;
3717       num_segments = 2;
3718     }
3719   /* If the object file has only one segment, assume that it is text
3720      rather than data; main programs with no writable data are rare,
3721      but programs with no code are useless.  Of course the code might
3722      have ended up in the data segment... to detect that we would need
3723      the permissions here.  */
3724   else if (data && data->num_segments == 1)
3725     {
3726       segments[0] = data->segment_bases[0] + text_addr;
3727       num_segments = 1;
3728     }
3729   /* There's no way to relocate by segment.  */
3730   else
3731     do_segments = 0;
3732
3733   if (do_segments)
3734     {
3735       int ret = symfile_map_offsets_to_segments (symfile_objfile->obfd, data,
3736                                                  offs, num_segments, segments);
3737
3738       if (ret == 0 && !do_sections)
3739         error (_("Can not handle qOffsets TextSeg "
3740                  "response with this symbol file"));
3741
3742       if (ret > 0)
3743         do_sections = 0;
3744     }
3745
3746   if (data)
3747     free_symfile_segment_data (data);
3748
3749   if (do_sections)
3750     {
3751       offs->offsets[SECT_OFF_TEXT (symfile_objfile)] = text_addr;
3752
3753       /* This is a temporary kludge to force data and bss to use the
3754          same offsets because that's what nlmconv does now.  The real
3755          solution requires changes to the stub and remote.c that I
3756          don't have time to do right now.  */
3757
3758       offs->offsets[SECT_OFF_DATA (symfile_objfile)] = data_addr;
3759       offs->offsets[SECT_OFF_BSS (symfile_objfile)] = data_addr;
3760     }
3761
3762   objfile_relocate (symfile_objfile, offs);
3763 }
3764
3765 /* Send interrupt_sequence to remote target.  */
3766 static void
3767 send_interrupt_sequence (void)
3768 {
3769   struct remote_state *rs = get_remote_state ();
3770
3771   if (interrupt_sequence_mode == interrupt_sequence_control_c)
3772     remote_serial_write ("\x03", 1);
3773   else if (interrupt_sequence_mode == interrupt_sequence_break)
3774     serial_send_break (rs->remote_desc);
3775   else if (interrupt_sequence_mode == interrupt_sequence_break_g)
3776     {
3777       serial_send_break (rs->remote_desc);
3778       remote_serial_write ("g", 1);
3779     }
3780   else
3781     internal_error (__FILE__, __LINE__,
3782                     _("Invalid value for interrupt_sequence_mode: %s."),
3783                     interrupt_sequence_mode);
3784 }
3785
3786
3787 /* If STOP_REPLY is a T stop reply, look for the "thread" register,
3788    and extract the PTID.  Returns NULL_PTID if not found.  */
3789
3790 static ptid_t
3791 stop_reply_extract_thread (char *stop_reply)
3792 {
3793   if (stop_reply[0] == 'T' && strlen (stop_reply) > 3)
3794     {
3795       const char *p;
3796
3797       /* Txx r:val ; r:val (...)  */
3798       p = &stop_reply[3];
3799
3800       /* Look for "register" named "thread".  */
3801       while (*p != '\0')
3802         {
3803           const char *p1;
3804
3805           p1 = strchr (p, ':');
3806           if (p1 == NULL)
3807             return null_ptid;
3808
3809           if (strncmp (p, "thread", p1 - p) == 0)
3810             return read_ptid (++p1, &p);
3811
3812           p1 = strchr (p, ';');
3813           if (p1 == NULL)
3814             return null_ptid;
3815           p1++;
3816
3817           p = p1;
3818         }
3819     }
3820
3821   return null_ptid;
3822 }
3823
3824 /* Determine the remote side's current thread.  If we have a stop
3825    reply handy (in WAIT_STATUS), maybe it's a T stop reply with a
3826    "thread" register we can extract the current thread from.  If not,
3827    ask the remote which is the current thread with qC.  The former
3828    method avoids a roundtrip.  */
3829
3830 static ptid_t
3831 get_current_thread (char *wait_status)
3832 {
3833   ptid_t ptid = null_ptid;
3834
3835   /* Note we don't use remote_parse_stop_reply as that makes use of
3836      the target architecture, which we haven't yet fully determined at
3837      this point.  */
3838   if (wait_status != NULL)
3839     ptid = stop_reply_extract_thread (wait_status);
3840   if (ptid_equal (ptid, null_ptid))
3841     ptid = remote_current_thread (inferior_ptid);
3842
3843   return ptid;
3844 }
3845
3846 /* Query the remote target for which is the current thread/process,
3847    add it to our tables, and update INFERIOR_PTID.  The caller is
3848    responsible for setting the state such that the remote end is ready
3849    to return the current thread.
3850
3851    This function is called after handling the '?' or 'vRun' packets,
3852    whose response is a stop reply from which we can also try
3853    extracting the thread.  If the target doesn't support the explicit
3854    qC query, we infer the current thread from that stop reply, passed
3855    in in WAIT_STATUS, which may be NULL.  */
3856
3857 static void
3858 add_current_inferior_and_thread (char *wait_status)
3859 {
3860   struct remote_state *rs = get_remote_state ();
3861   int fake_pid_p = 0;
3862
3863   inferior_ptid = null_ptid;
3864
3865   /* Now, if we have thread information, update inferior_ptid.  */
3866   ptid_t curr_ptid = get_current_thread (wait_status);
3867
3868   if (curr_ptid != null_ptid)
3869     {
3870       if (!remote_multi_process_p (rs))
3871         fake_pid_p = 1;
3872     }
3873   else
3874     {
3875       /* Without this, some commands which require an active target
3876          (such as kill) won't work.  This variable serves (at least)
3877          double duty as both the pid of the target process (if it has
3878          such), and as a flag indicating that a target is active.  */
3879       curr_ptid = magic_null_ptid;
3880       fake_pid_p = 1;
3881     }
3882
3883   remote_add_inferior (fake_pid_p, ptid_get_pid (curr_ptid), -1, 1);
3884
3885   /* Add the main thread and switch to it.  Don't try reading
3886      registers yet, since we haven't fetched the target description
3887      yet.  */
3888   thread_info *tp = add_thread_silent (curr_ptid);
3889   switch_to_thread_no_regs (tp);
3890 }
3891
3892 /* Print info about a thread that was found already stopped on
3893    connection.  */
3894
3895 static void
3896 print_one_stopped_thread (struct thread_info *thread)
3897 {
3898   struct target_waitstatus *ws = &thread->suspend.waitstatus;
3899
3900   switch_to_thread (thread->ptid);
3901   stop_pc = get_frame_pc (get_current_frame ());
3902   set_current_sal_from_frame (get_current_frame ());
3903
3904   thread->suspend.waitstatus_pending_p = 0;
3905
3906   if (ws->kind == TARGET_WAITKIND_STOPPED)
3907     {
3908       enum gdb_signal sig = ws->value.sig;
3909
3910       if (signal_print_state (sig))
3911         observer_notify_signal_received (sig);
3912     }
3913   observer_notify_normal_stop (NULL, 1);
3914 }
3915
3916 /* Process all initial stop replies the remote side sent in response
3917    to the ? packet.  These indicate threads that were already stopped
3918    on initial connection.  We mark these threads as stopped and print
3919    their current frame before giving the user the prompt.  */
3920
3921 static void
3922 process_initial_stop_replies (int from_tty)
3923 {
3924   int pending_stop_replies = stop_reply_queue_length ();
3925   struct inferior *inf;
3926   struct thread_info *thread;
3927   struct thread_info *selected = NULL;
3928   struct thread_info *lowest_stopped = NULL;
3929   struct thread_info *first = NULL;
3930
3931   /* Consume the initial pending events.  */
3932   while (pending_stop_replies-- > 0)
3933     {
3934       ptid_t waiton_ptid = minus_one_ptid;
3935       ptid_t event_ptid;
3936       struct target_waitstatus ws;
3937       int ignore_event = 0;
3938       struct thread_info *thread;
3939
3940       memset (&ws, 0, sizeof (ws));
3941       event_ptid = target_wait (waiton_ptid, &ws, TARGET_WNOHANG);
3942       if (remote_debug)
3943         print_target_wait_results (waiton_ptid, event_ptid, &ws);
3944
3945       switch (ws.kind)
3946         {
3947         case TARGET_WAITKIND_IGNORE:
3948         case TARGET_WAITKIND_NO_RESUMED:
3949         case TARGET_WAITKIND_SIGNALLED:
3950         case TARGET_WAITKIND_EXITED:
3951           /* We shouldn't see these, but if we do, just ignore.  */
3952           if (remote_debug)
3953             fprintf_unfiltered (gdb_stdlog, "remote: event ignored\n");
3954           ignore_event = 1;
3955           break;
3956
3957         case TARGET_WAITKIND_EXECD:
3958           xfree (ws.value.execd_pathname);
3959           break;
3960         default:
3961           break;
3962         }
3963
3964       if (ignore_event)
3965         continue;
3966
3967       thread = find_thread_ptid (event_ptid);
3968
3969       if (ws.kind == TARGET_WAITKIND_STOPPED)
3970         {
3971           enum gdb_signal sig = ws.value.sig;
3972
3973           /* Stubs traditionally report SIGTRAP as initial signal,
3974              instead of signal 0.  Suppress it.  */
3975           if (sig == GDB_SIGNAL_TRAP)
3976             sig = GDB_SIGNAL_0;
3977           thread->suspend.stop_signal = sig;
3978           ws.value.sig = sig;
3979         }
3980
3981       thread->suspend.waitstatus = ws;
3982
3983       if (ws.kind != TARGET_WAITKIND_STOPPED
3984           || ws.value.sig != GDB_SIGNAL_0)
3985         thread->suspend.waitstatus_pending_p = 1;
3986
3987       set_executing (event_ptid, 0);
3988       set_running (event_ptid, 0);
3989       thread->priv->vcont_resumed = 0;
3990     }
3991
3992   /* "Notice" the new inferiors before anything related to
3993      registers/memory.  */
3994   ALL_INFERIORS (inf)
3995     {
3996       if (inf->pid == 0)
3997         continue;
3998
3999       inf->needs_setup = 1;
4000
4001       if (non_stop)
4002         {
4003           thread = any_live_thread_of_process (inf->pid);
4004           notice_new_inferior (thread->ptid,
4005                                thread->state == THREAD_RUNNING,
4006                                from_tty);
4007         }
4008     }
4009
4010   /* If all-stop on top of non-stop, pause all threads.  Note this
4011      records the threads' stop pc, so must be done after "noticing"
4012      the inferiors.  */
4013   if (!non_stop)
4014     {
4015       stop_all_threads ();
4016
4017       /* If all threads of an inferior were already stopped, we
4018          haven't setup the inferior yet.  */
4019       ALL_INFERIORS (inf)
4020         {
4021           if (inf->pid == 0)
4022             continue;
4023
4024           if (inf->needs_setup)
4025             {
4026               thread = any_live_thread_of_process (inf->pid);
4027               switch_to_thread_no_regs (thread);
4028               setup_inferior (0);
4029             }
4030         }
4031     }
4032
4033   /* Now go over all threads that are stopped, and print their current
4034      frame.  If all-stop, then if there's a signalled thread, pick
4035      that as current.  */
4036   ALL_NON_EXITED_THREADS (thread)
4037     {
4038       if (first == NULL)
4039         first = thread;
4040
4041       if (!non_stop)
4042         set_running (thread->ptid, 0);
4043       else if (thread->state != THREAD_STOPPED)
4044         continue;
4045
4046       if (selected == NULL
4047           && thread->suspend.waitstatus_pending_p)
4048         selected = thread;
4049
4050       if (lowest_stopped == NULL
4051           || thread->inf->num < lowest_stopped->inf->num
4052           || thread->per_inf_num < lowest_stopped->per_inf_num)
4053         lowest_stopped = thread;
4054
4055       if (non_stop)
4056         print_one_stopped_thread (thread);
4057     }
4058
4059   /* In all-stop, we only print the status of one thread, and leave
4060      others with their status pending.  */
4061   if (!non_stop)
4062     {
4063       thread = selected;
4064       if (thread == NULL)
4065         thread = lowest_stopped;
4066       if (thread == NULL)
4067         thread = first;
4068
4069       print_one_stopped_thread (thread);
4070     }
4071
4072   /* For "info program".  */
4073   thread = inferior_thread ();
4074   if (thread->state == THREAD_STOPPED)
4075     set_last_target_status (inferior_ptid, thread->suspend.waitstatus);
4076 }
4077
4078 /* Start the remote connection and sync state.  */
4079
4080 static void
4081 remote_start_remote (int from_tty, struct target_ops *target, int extended_p)
4082 {
4083   struct remote_state *rs = get_remote_state ();
4084   struct packet_config *noack_config;
4085   char *wait_status = NULL;
4086
4087   /* Signal other parts that we're going through the initial setup,
4088      and so things may not be stable yet.  E.g., we don't try to
4089      install tracepoints until we've relocated symbols.  Also, a
4090      Ctrl-C before we're connected and synced up can't interrupt the
4091      target.  Instead, it offers to drop the (potentially wedged)
4092      connection.  */
4093   rs->starting_up = 1;
4094
4095   QUIT;
4096
4097   if (interrupt_on_connect)
4098     send_interrupt_sequence ();
4099
4100   /* Ack any packet which the remote side has already sent.  */
4101   remote_serial_write ("+", 1);
4102
4103   /* The first packet we send to the target is the optional "supported
4104      packets" request.  If the target can answer this, it will tell us
4105      which later probes to skip.  */
4106   remote_query_supported ();
4107
4108   /* If the stub wants to get a QAllow, compose one and send it.  */
4109   if (packet_support (PACKET_QAllow) != PACKET_DISABLE)
4110     remote_set_permissions (target);
4111
4112   /* gdbserver < 7.7 (before its fix from 2013-12-11) did reply to any
4113      unknown 'v' packet with string "OK".  "OK" gets interpreted by GDB
4114      as a reply to known packet.  For packet "vFile:setfs:" it is an
4115      invalid reply and GDB would return error in
4116      remote_hostio_set_filesystem, making remote files access impossible.
4117      Disable "vFile:setfs:" in such case.  Do not disable other 'v' packets as
4118      other "vFile" packets get correctly detected even on gdbserver < 7.7.  */
4119   {
4120     const char v_mustreplyempty[] = "vMustReplyEmpty";
4121
4122     putpkt (v_mustreplyempty);
4123     getpkt (&rs->buf, &rs->buf_size, 0);
4124     if (strcmp (rs->buf, "OK") == 0)
4125       remote_protocol_packets[PACKET_vFile_setfs].support = PACKET_DISABLE;
4126     else if (strcmp (rs->buf, "") != 0)
4127       error (_("Remote replied unexpectedly to '%s': %s"), v_mustreplyempty,
4128              rs->buf);
4129   }
4130
4131   /* Next, we possibly activate noack mode.
4132
4133      If the QStartNoAckMode packet configuration is set to AUTO,
4134      enable noack mode if the stub reported a wish for it with
4135      qSupported.
4136
4137      If set to TRUE, then enable noack mode even if the stub didn't
4138      report it in qSupported.  If the stub doesn't reply OK, the
4139      session ends with an error.
4140
4141      If FALSE, then don't activate noack mode, regardless of what the
4142      stub claimed should be the default with qSupported.  */
4143
4144   noack_config = &remote_protocol_packets[PACKET_QStartNoAckMode];
4145   if (packet_config_support (noack_config) != PACKET_DISABLE)
4146     {
4147       putpkt ("QStartNoAckMode");
4148       getpkt (&rs->buf, &rs->buf_size, 0);
4149       if (packet_ok (rs->buf, noack_config) == PACKET_OK)
4150         rs->noack_mode = 1;
4151     }
4152
4153   if (extended_p)
4154     {
4155       /* Tell the remote that we are using the extended protocol.  */
4156       putpkt ("!");
4157       getpkt (&rs->buf, &rs->buf_size, 0);
4158     }
4159
4160   /* Let the target know which signals it is allowed to pass down to
4161      the program.  */
4162   update_signals_program_target ();
4163
4164   /* Next, if the target can specify a description, read it.  We do
4165      this before anything involving memory or registers.  */
4166   target_find_description ();
4167
4168   /* Next, now that we know something about the target, update the
4169      address spaces in the program spaces.  */
4170   update_address_spaces ();
4171
4172   /* On OSs where the list of libraries is global to all
4173      processes, we fetch them early.  */
4174   if (gdbarch_has_global_solist (target_gdbarch ()))
4175     solib_add (NULL, from_tty, auto_solib_add);
4176
4177   if (target_is_non_stop_p ())
4178     {
4179       if (packet_support (PACKET_QNonStop) != PACKET_ENABLE)
4180         error (_("Non-stop mode requested, but remote "
4181                  "does not support non-stop"));
4182
4183       putpkt ("QNonStop:1");
4184       getpkt (&rs->buf, &rs->buf_size, 0);
4185
4186       if (strcmp (rs->buf, "OK") != 0)
4187         error (_("Remote refused setting non-stop mode with: %s"), rs->buf);
4188
4189       /* Find about threads and processes the stub is already
4190          controlling.  We default to adding them in the running state.
4191          The '?' query below will then tell us about which threads are
4192          stopped.  */
4193       remote_update_thread_list (target);
4194     }
4195   else if (packet_support (PACKET_QNonStop) == PACKET_ENABLE)
4196     {
4197       /* Don't assume that the stub can operate in all-stop mode.
4198          Request it explicitly.  */
4199       putpkt ("QNonStop:0");
4200       getpkt (&rs->buf, &rs->buf_size, 0);
4201
4202       if (strcmp (rs->buf, "OK") != 0)
4203         error (_("Remote refused setting all-stop mode with: %s"), rs->buf);
4204     }
4205
4206   /* Upload TSVs regardless of whether the target is running or not.  The
4207      remote stub, such as GDBserver, may have some predefined or builtin
4208      TSVs, even if the target is not running.  */
4209   if (remote_get_trace_status (target, current_trace_status ()) != -1)
4210     {
4211       struct uploaded_tsv *uploaded_tsvs = NULL;
4212
4213       remote_upload_trace_state_variables (target, &uploaded_tsvs);
4214       merge_uploaded_trace_state_variables (&uploaded_tsvs);
4215     }
4216
4217   /* Check whether the target is running now.  */
4218   putpkt ("?");
4219   getpkt (&rs->buf, &rs->buf_size, 0);
4220
4221   if (!target_is_non_stop_p ())
4222     {
4223       if (rs->buf[0] == 'W' || rs->buf[0] == 'X')
4224         {
4225           if (!extended_p)
4226             error (_("The target is not running (try extended-remote?)"));
4227
4228           /* We're connected, but not running.  Drop out before we
4229              call start_remote.  */
4230           rs->starting_up = 0;
4231           return;
4232         }
4233       else
4234         {
4235           /* Save the reply for later.  */
4236           wait_status = (char *) alloca (strlen (rs->buf) + 1);
4237           strcpy (wait_status, rs->buf);
4238         }
4239
4240       /* Fetch thread list.  */
4241       target_update_thread_list ();
4242
4243       /* Let the stub know that we want it to return the thread.  */
4244       set_continue_thread (minus_one_ptid);
4245
4246       if (thread_count () == 0)
4247         {
4248           /* Target has no concept of threads at all.  GDB treats
4249              non-threaded target as single-threaded; add a main
4250              thread.  */
4251           add_current_inferior_and_thread (wait_status);
4252         }
4253       else
4254         {
4255           /* We have thread information; select the thread the target
4256              says should be current.  If we're reconnecting to a
4257              multi-threaded program, this will ideally be the thread
4258              that last reported an event before GDB disconnected.  */
4259           inferior_ptid = get_current_thread (wait_status);
4260           if (ptid_equal (inferior_ptid, null_ptid))
4261             {
4262               /* Odd... The target was able to list threads, but not
4263                  tell us which thread was current (no "thread"
4264                  register in T stop reply?).  Just pick the first
4265                  thread in the thread list then.  */
4266               
4267               if (remote_debug)
4268                 fprintf_unfiltered (gdb_stdlog,
4269                                     "warning: couldn't determine remote "
4270                                     "current thread; picking first in list.\n");
4271
4272               inferior_ptid = thread_list->ptid;
4273             }
4274         }
4275
4276       /* init_wait_for_inferior should be called before get_offsets in order
4277          to manage `inserted' flag in bp loc in a correct state.
4278          breakpoint_init_inferior, called from init_wait_for_inferior, set
4279          `inserted' flag to 0, while before breakpoint_re_set, called from
4280          start_remote, set `inserted' flag to 1.  In the initialization of
4281          inferior, breakpoint_init_inferior should be called first, and then
4282          breakpoint_re_set can be called.  If this order is broken, state of
4283          `inserted' flag is wrong, and cause some problems on breakpoint
4284          manipulation.  */
4285       init_wait_for_inferior ();
4286
4287       get_offsets ();           /* Get text, data & bss offsets.  */
4288
4289       /* If we could not find a description using qXfer, and we know
4290          how to do it some other way, try again.  This is not
4291          supported for non-stop; it could be, but it is tricky if
4292          there are no stopped threads when we connect.  */
4293       if (remote_read_description_p (target)
4294           && gdbarch_target_desc (target_gdbarch ()) == NULL)
4295         {
4296           target_clear_description ();
4297           target_find_description ();
4298         }
4299
4300       /* Use the previously fetched status.  */
4301       gdb_assert (wait_status != NULL);
4302       strcpy (rs->buf, wait_status);
4303       rs->cached_wait_status = 1;
4304
4305       start_remote (from_tty); /* Initialize gdb process mechanisms.  */
4306     }
4307   else
4308     {
4309       /* Clear WFI global state.  Do this before finding about new
4310          threads and inferiors, and setting the current inferior.
4311          Otherwise we would clear the proceed status of the current
4312          inferior when we want its stop_soon state to be preserved
4313          (see notice_new_inferior).  */
4314       init_wait_for_inferior ();
4315
4316       /* In non-stop, we will either get an "OK", meaning that there
4317          are no stopped threads at this time; or, a regular stop
4318          reply.  In the latter case, there may be more than one thread
4319          stopped --- we pull them all out using the vStopped
4320          mechanism.  */
4321       if (strcmp (rs->buf, "OK") != 0)
4322         {
4323           struct notif_client *notif = &notif_client_stop;
4324
4325           /* remote_notif_get_pending_replies acks this one, and gets
4326              the rest out.  */
4327           rs->notif_state->pending_event[notif_client_stop.id]
4328             = remote_notif_parse (notif, rs->buf);
4329           remote_notif_get_pending_events (notif);
4330         }
4331
4332       if (thread_count () == 0)
4333         {
4334           if (!extended_p)
4335             error (_("The target is not running (try extended-remote?)"));
4336
4337           /* We're connected, but not running.  Drop out before we
4338              call start_remote.  */
4339           rs->starting_up = 0;
4340           return;
4341         }
4342
4343       /* In non-stop mode, any cached wait status will be stored in
4344          the stop reply queue.  */
4345       gdb_assert (wait_status == NULL);
4346
4347       /* Report all signals during attach/startup.  */
4348       remote_pass_signals (target, 0, NULL);
4349
4350       /* If there are already stopped threads, mark them stopped and
4351          report their stops before giving the prompt to the user.  */
4352       process_initial_stop_replies (from_tty);
4353
4354       if (target_can_async_p ())
4355         target_async (1);
4356     }
4357
4358   /* If we connected to a live target, do some additional setup.  */
4359   if (target_has_execution)
4360     {
4361       if (symfile_objfile)      /* No use without a symbol-file.  */
4362         remote_check_symbols ();
4363     }
4364
4365   /* Possibly the target has been engaged in a trace run started
4366      previously; find out where things are at.  */
4367   if (remote_get_trace_status (target, current_trace_status ()) != -1)
4368     {
4369       struct uploaded_tp *uploaded_tps = NULL;
4370
4371       if (current_trace_status ()->running)
4372         printf_filtered (_("Trace is already running on the target.\n"));
4373
4374       remote_upload_tracepoints (target, &uploaded_tps);
4375
4376       merge_uploaded_tracepoints (&uploaded_tps);
4377     }
4378
4379   /* Possibly the target has been engaged in a btrace record started
4380      previously; find out where things are at.  */
4381   remote_btrace_maybe_reopen ();
4382
4383   /* The thread and inferior lists are now synchronized with the
4384      target, our symbols have been relocated, and we're merged the
4385      target's tracepoints with ours.  We're done with basic start
4386      up.  */
4387   rs->starting_up = 0;
4388
4389   /* Maybe breakpoints are global and need to be inserted now.  */
4390   if (breakpoints_should_be_inserted_now ())
4391     insert_breakpoints ();
4392 }
4393
4394 /* Open a connection to a remote debugger.
4395    NAME is the filename used for communication.  */
4396
4397 static void
4398 remote_open (const char *name, int from_tty)
4399 {
4400   remote_open_1 (name, from_tty, &remote_ops, 0);
4401 }
4402
4403 /* Open a connection to a remote debugger using the extended
4404    remote gdb protocol.  NAME is the filename used for communication.  */
4405
4406 static void
4407 extended_remote_open (const char *name, int from_tty)
4408 {
4409   remote_open_1 (name, from_tty, &extended_remote_ops, 1 /*extended_p */);
4410 }
4411
4412 /* Reset all packets back to "unknown support".  Called when opening a
4413    new connection to a remote target.  */
4414
4415 static void
4416 reset_all_packet_configs_support (void)
4417 {
4418   int i;
4419
4420   for (i = 0; i < PACKET_MAX; i++)
4421     remote_protocol_packets[i].support = PACKET_SUPPORT_UNKNOWN;
4422 }
4423
4424 /* Initialize all packet configs.  */
4425
4426 static void
4427 init_all_packet_configs (void)
4428 {
4429   int i;
4430
4431   for (i = 0; i < PACKET_MAX; i++)
4432     {
4433       remote_protocol_packets[i].detect = AUTO_BOOLEAN_AUTO;
4434       remote_protocol_packets[i].support = PACKET_SUPPORT_UNKNOWN;
4435     }
4436 }
4437
4438 /* Symbol look-up.  */
4439
4440 static void
4441 remote_check_symbols (void)
4442 {
4443   struct remote_state *rs = get_remote_state ();
4444   char *msg, *reply, *tmp;
4445   int end;
4446   long reply_size;
4447   struct cleanup *old_chain;
4448
4449   /* The remote side has no concept of inferiors that aren't running
4450      yet, it only knows about running processes.  If we're connected
4451      but our current inferior is not running, we should not invite the
4452      remote target to request symbol lookups related to its
4453      (unrelated) current process.  */
4454   if (!target_has_execution)
4455     return;
4456
4457   if (packet_support (PACKET_qSymbol) == PACKET_DISABLE)
4458     return;
4459
4460   /* Make sure the remote is pointing at the right process.  Note
4461      there's no way to select "no process".  */
4462   set_general_process ();
4463
4464   /* Allocate a message buffer.  We can't reuse the input buffer in RS,
4465      because we need both at the same time.  */
4466   msg = (char *) xmalloc (get_remote_packet_size ());
4467   old_chain = make_cleanup (xfree, msg);
4468   reply = (char *) xmalloc (get_remote_packet_size ());
4469   make_cleanup (free_current_contents, &reply);
4470   reply_size = get_remote_packet_size ();
4471
4472   /* Invite target to request symbol lookups.  */
4473
4474   putpkt ("qSymbol::");
4475   getpkt (&reply, &reply_size, 0);
4476   packet_ok (reply, &remote_protocol_packets[PACKET_qSymbol]);
4477
4478   while (startswith (reply, "qSymbol:"))
4479     {
4480       struct bound_minimal_symbol sym;
4481
4482       tmp = &reply[8];
4483       end = hex2bin (tmp, (gdb_byte *) msg, strlen (tmp) / 2);
4484       msg[end] = '\0';
4485       sym = lookup_minimal_symbol (msg, NULL, NULL);
4486       if (sym.minsym == NULL)
4487         xsnprintf (msg, get_remote_packet_size (), "qSymbol::%s", &reply[8]);
4488       else
4489         {
4490           int addr_size = gdbarch_addr_bit (target_gdbarch ()) / 8;
4491           CORE_ADDR sym_addr = BMSYMBOL_VALUE_ADDRESS (sym);
4492
4493           /* If this is a function address, return the start of code
4494              instead of any data function descriptor.  */
4495           sym_addr = gdbarch_convert_from_func_ptr_addr (target_gdbarch (),
4496                                                          sym_addr,
4497                                                          &current_target);
4498
4499           xsnprintf (msg, get_remote_packet_size (), "qSymbol:%s:%s",
4500                      phex_nz (sym_addr, addr_size), &reply[8]);
4501         }
4502   
4503       putpkt (msg);
4504       getpkt (&reply, &reply_size, 0);
4505     }
4506
4507   do_cleanups (old_chain);
4508 }
4509
4510 static struct serial *
4511 remote_serial_open (const char *name)
4512 {
4513   static int udp_warning = 0;
4514
4515   /* FIXME: Parsing NAME here is a hack.  But we want to warn here instead
4516      of in ser-tcp.c, because it is the remote protocol assuming that the
4517      serial connection is reliable and not the serial connection promising
4518      to be.  */
4519   if (!udp_warning && startswith (name, "udp:"))
4520     {
4521       warning (_("The remote protocol may be unreliable over UDP.\n"
4522                  "Some events may be lost, rendering further debugging "
4523                  "impossible."));
4524       udp_warning = 1;
4525     }
4526
4527   return serial_open (name);
4528 }
4529
4530 /* Inform the target of our permission settings.  The permission flags
4531    work without this, but if the target knows the settings, it can do
4532    a couple things.  First, it can add its own check, to catch cases
4533    that somehow manage to get by the permissions checks in target
4534    methods.  Second, if the target is wired to disallow particular
4535    settings (for instance, a system in the field that is not set up to
4536    be able to stop at a breakpoint), it can object to any unavailable
4537    permissions.  */
4538
4539 void
4540 remote_set_permissions (struct target_ops *self)
4541 {
4542   struct remote_state *rs = get_remote_state ();
4543
4544   xsnprintf (rs->buf, get_remote_packet_size (), "QAllow:"
4545              "WriteReg:%x;WriteMem:%x;"
4546              "InsertBreak:%x;InsertTrace:%x;"
4547              "InsertFastTrace:%x;Stop:%x",
4548              may_write_registers, may_write_memory,
4549              may_insert_breakpoints, may_insert_tracepoints,
4550              may_insert_fast_tracepoints, may_stop);
4551   putpkt (rs->buf);
4552   getpkt (&rs->buf, &rs->buf_size, 0);
4553
4554   /* If the target didn't like the packet, warn the user.  Do not try
4555      to undo the user's settings, that would just be maddening.  */
4556   if (strcmp (rs->buf, "OK") != 0)
4557     warning (_("Remote refused setting permissions with: %s"), rs->buf);
4558 }
4559
4560 /* This type describes each known response to the qSupported
4561    packet.  */
4562 struct protocol_feature
4563 {
4564   /* The name of this protocol feature.  */
4565   const char *name;
4566
4567   /* The default for this protocol feature.  */
4568   enum packet_support default_support;
4569
4570   /* The function to call when this feature is reported, or after
4571      qSupported processing if the feature is not supported.
4572      The first argument points to this structure.  The second
4573      argument indicates whether the packet requested support be
4574      enabled, disabled, or probed (or the default, if this function
4575      is being called at the end of processing and this feature was
4576      not reported).  The third argument may be NULL; if not NULL, it
4577      is a NUL-terminated string taken from the packet following
4578      this feature's name and an equals sign.  */
4579   void (*func) (const struct protocol_feature *, enum packet_support,
4580                 const char *);
4581
4582   /* The corresponding packet for this feature.  Only used if
4583      FUNC is remote_supported_packet.  */
4584   int packet;
4585 };
4586
4587 static void
4588 remote_supported_packet (const struct protocol_feature *feature,
4589                          enum packet_support support,
4590                          const char *argument)
4591 {
4592   if (argument)
4593     {
4594       warning (_("Remote qSupported response supplied an unexpected value for"
4595                  " \"%s\"."), feature->name);
4596       return;
4597     }
4598
4599   remote_protocol_packets[feature->packet].support = support;
4600 }
4601
4602 static void
4603 remote_packet_size (const struct protocol_feature *feature,
4604                     enum packet_support support, const char *value)
4605 {
4606   struct remote_state *rs = get_remote_state ();
4607
4608   int packet_size;
4609   char *value_end;
4610
4611   if (support != PACKET_ENABLE)
4612     return;
4613
4614   if (value == NULL || *value == '\0')
4615     {
4616       warning (_("Remote target reported \"%s\" without a size."),
4617                feature->name);
4618       return;
4619     }
4620
4621   errno = 0;
4622   packet_size = strtol (value, &value_end, 16);
4623   if (errno != 0 || *value_end != '\0' || packet_size < 0)
4624     {
4625       warning (_("Remote target reported \"%s\" with a bad size: \"%s\"."),
4626                feature->name, value);
4627       return;
4628     }
4629
4630   /* Record the new maximum packet size.  */
4631   rs->explicit_packet_size = packet_size;
4632 }
4633
4634 static const struct protocol_feature remote_protocol_features[] = {
4635   { "PacketSize", PACKET_DISABLE, remote_packet_size, -1 },
4636   { "qXfer:auxv:read", PACKET_DISABLE, remote_supported_packet,
4637     PACKET_qXfer_auxv },
4638   { "qXfer:exec-file:read", PACKET_DISABLE, remote_supported_packet,
4639     PACKET_qXfer_exec_file },
4640   { "qXfer:features:read", PACKET_DISABLE, remote_supported_packet,
4641     PACKET_qXfer_features },
4642   { "qXfer:libraries:read", PACKET_DISABLE, remote_supported_packet,
4643     PACKET_qXfer_libraries },
4644   { "qXfer:libraries-svr4:read", PACKET_DISABLE, remote_supported_packet,
4645     PACKET_qXfer_libraries_svr4 },
4646   { "augmented-libraries-svr4-read", PACKET_DISABLE,
4647     remote_supported_packet, PACKET_augmented_libraries_svr4_read_feature },
4648   { "qXfer:memory-map:read", PACKET_DISABLE, remote_supported_packet,
4649     PACKET_qXfer_memory_map },
4650   { "qXfer:spu:read", PACKET_DISABLE, remote_supported_packet,
4651     PACKET_qXfer_spu_read },
4652   { "qXfer:spu:write", PACKET_DISABLE, remote_supported_packet,
4653     PACKET_qXfer_spu_write },
4654   { "qXfer:osdata:read", PACKET_DISABLE, remote_supported_packet,
4655     PACKET_qXfer_osdata },
4656   { "qXfer:threads:read", PACKET_DISABLE, remote_supported_packet,
4657     PACKET_qXfer_threads },
4658   { "qXfer:traceframe-info:read", PACKET_DISABLE, remote_supported_packet,
4659     PACKET_qXfer_traceframe_info },
4660   { "QPassSignals", PACKET_DISABLE, remote_supported_packet,
4661     PACKET_QPassSignals },
4662   { "QCatchSyscalls", PACKET_DISABLE, remote_supported_packet,
4663     PACKET_QCatchSyscalls },
4664   { "QProgramSignals", PACKET_DISABLE, remote_supported_packet,
4665     PACKET_QProgramSignals },
4666   { "QSetWorkingDir", PACKET_DISABLE, remote_supported_packet,
4667     PACKET_QSetWorkingDir },
4668   { "QStartupWithShell", PACKET_DISABLE, remote_supported_packet,
4669     PACKET_QStartupWithShell },
4670   { "QEnvironmentHexEncoded", PACKET_DISABLE, remote_supported_packet,
4671     PACKET_QEnvironmentHexEncoded },
4672   { "QEnvironmentReset", PACKET_DISABLE, remote_supported_packet,
4673     PACKET_QEnvironmentReset },
4674   { "QEnvironmentUnset", PACKET_DISABLE, remote_supported_packet,
4675     PACKET_QEnvironmentUnset },
4676   { "QStartNoAckMode", PACKET_DISABLE, remote_supported_packet,
4677     PACKET_QStartNoAckMode },
4678   { "multiprocess", PACKET_DISABLE, remote_supported_packet,
4679     PACKET_multiprocess_feature },
4680   { "QNonStop", PACKET_DISABLE, remote_supported_packet, PACKET_QNonStop },
4681   { "qXfer:siginfo:read", PACKET_DISABLE, remote_supported_packet,
4682     PACKET_qXfer_siginfo_read },
4683   { "qXfer:siginfo:write", PACKET_DISABLE, remote_supported_packet,
4684     PACKET_qXfer_siginfo_write },
4685   { "ConditionalTracepoints", PACKET_DISABLE, remote_supported_packet,
4686     PACKET_ConditionalTracepoints },
4687   { "ConditionalBreakpoints", PACKET_DISABLE, remote_supported_packet,
4688     PACKET_ConditionalBreakpoints },
4689   { "BreakpointCommands", PACKET_DISABLE, remote_supported_packet,
4690     PACKET_BreakpointCommands },
4691   { "FastTracepoints", PACKET_DISABLE, remote_supported_packet,
4692     PACKET_FastTracepoints },
4693   { "StaticTracepoints", PACKET_DISABLE, remote_supported_packet,
4694     PACKET_StaticTracepoints },
4695   {"InstallInTrace", PACKET_DISABLE, remote_supported_packet,
4696    PACKET_InstallInTrace},
4697   { "DisconnectedTracing", PACKET_DISABLE, remote_supported_packet,
4698     PACKET_DisconnectedTracing_feature },
4699   { "ReverseContinue", PACKET_DISABLE, remote_supported_packet,
4700     PACKET_bc },
4701   { "ReverseStep", PACKET_DISABLE, remote_supported_packet,
4702     PACKET_bs },
4703   { "TracepointSource", PACKET_DISABLE, remote_supported_packet,
4704     PACKET_TracepointSource },
4705   { "QAllow", PACKET_DISABLE, remote_supported_packet,
4706     PACKET_QAllow },
4707   { "EnableDisableTracepoints", PACKET_DISABLE, remote_supported_packet,
4708     PACKET_EnableDisableTracepoints_feature },
4709   { "qXfer:fdpic:read", PACKET_DISABLE, remote_supported_packet,
4710     PACKET_qXfer_fdpic },
4711   { "qXfer:uib:read", PACKET_DISABLE, remote_supported_packet,
4712     PACKET_qXfer_uib },
4713   { "QDisableRandomization", PACKET_DISABLE, remote_supported_packet,
4714     PACKET_QDisableRandomization },
4715   { "QAgent", PACKET_DISABLE, remote_supported_packet, PACKET_QAgent},
4716   { "QTBuffer:size", PACKET_DISABLE,
4717     remote_supported_packet, PACKET_QTBuffer_size},
4718   { "tracenz", PACKET_DISABLE, remote_supported_packet, PACKET_tracenz_feature },
4719   { "Qbtrace:off", PACKET_DISABLE, remote_supported_packet, PACKET_Qbtrace_off },
4720   { "Qbtrace:bts", PACKET_DISABLE, remote_supported_packet, PACKET_Qbtrace_bts },
4721   { "Qbtrace:pt", PACKET_DISABLE, remote_supported_packet, PACKET_Qbtrace_pt },
4722   { "qXfer:btrace:read", PACKET_DISABLE, remote_supported_packet,
4723     PACKET_qXfer_btrace },
4724   { "qXfer:btrace-conf:read", PACKET_DISABLE, remote_supported_packet,
4725     PACKET_qXfer_btrace_conf },
4726   { "Qbtrace-conf:bts:size", PACKET_DISABLE, remote_supported_packet,
4727     PACKET_Qbtrace_conf_bts_size },
4728   { "swbreak", PACKET_DISABLE, remote_supported_packet, PACKET_swbreak_feature },
4729   { "hwbreak", PACKET_DISABLE, remote_supported_packet, PACKET_hwbreak_feature },
4730   { "fork-events", PACKET_DISABLE, remote_supported_packet,
4731     PACKET_fork_event_feature },
4732   { "vfork-events", PACKET_DISABLE, remote_supported_packet,
4733     PACKET_vfork_event_feature },
4734   { "exec-events", PACKET_DISABLE, remote_supported_packet,
4735     PACKET_exec_event_feature },
4736   { "Qbtrace-conf:pt:size", PACKET_DISABLE, remote_supported_packet,
4737     PACKET_Qbtrace_conf_pt_size },
4738   { "vContSupported", PACKET_DISABLE, remote_supported_packet, PACKET_vContSupported },
4739   { "QThreadEvents", PACKET_DISABLE, remote_supported_packet, PACKET_QThreadEvents },
4740   { "no-resumed", PACKET_DISABLE, remote_supported_packet, PACKET_no_resumed },
4741 };
4742
4743 static char *remote_support_xml;
4744
4745 /* Register string appended to "xmlRegisters=" in qSupported query.  */
4746
4747 void
4748 register_remote_support_xml (const char *xml)
4749 {
4750 #if defined(HAVE_LIBEXPAT)
4751   if (remote_support_xml == NULL)
4752     remote_support_xml = concat ("xmlRegisters=", xml, (char *) NULL);
4753   else
4754     {
4755       char *copy = xstrdup (remote_support_xml + 13);
4756       char *p = strtok (copy, ",");
4757
4758       do
4759         {
4760           if (strcmp (p, xml) == 0)
4761             {
4762               /* already there */
4763               xfree (copy);
4764               return;
4765             }
4766         }
4767       while ((p = strtok (NULL, ",")) != NULL);
4768       xfree (copy);
4769
4770       remote_support_xml = reconcat (remote_support_xml,
4771                                      remote_support_xml, ",", xml,
4772                                      (char *) NULL);
4773     }
4774 #endif
4775 }
4776
4777 static char *
4778 remote_query_supported_append (char *msg, const char *append)
4779 {
4780   if (msg)
4781     return reconcat (msg, msg, ";", append, (char *) NULL);
4782   else
4783     return xstrdup (append);
4784 }
4785
4786 static void
4787 remote_query_supported (void)
4788 {
4789   struct remote_state *rs = get_remote_state ();
4790   char *next;
4791   int i;
4792   unsigned char seen [ARRAY_SIZE (remote_protocol_features)];
4793
4794   /* The packet support flags are handled differently for this packet
4795      than for most others.  We treat an error, a disabled packet, and
4796      an empty response identically: any features which must be reported
4797      to be used will be automatically disabled.  An empty buffer
4798      accomplishes this, since that is also the representation for a list
4799      containing no features.  */
4800
4801   rs->buf[0] = 0;
4802   if (packet_support (PACKET_qSupported) != PACKET_DISABLE)
4803     {
4804       char *q = NULL;
4805       struct cleanup *old_chain = make_cleanup (free_current_contents, &q);
4806
4807       if (packet_set_cmd_state (PACKET_multiprocess_feature) != AUTO_BOOLEAN_FALSE)
4808         q = remote_query_supported_append (q, "multiprocess+");
4809
4810       if (packet_set_cmd_state (PACKET_swbreak_feature) != AUTO_BOOLEAN_FALSE)
4811         q = remote_query_supported_append (q, "swbreak+");
4812       if (packet_set_cmd_state (PACKET_hwbreak_feature) != AUTO_BOOLEAN_FALSE)
4813         q = remote_query_supported_append (q, "hwbreak+");
4814
4815       q = remote_query_supported_append (q, "qRelocInsn+");
4816
4817       if (packet_set_cmd_state (PACKET_fork_event_feature)
4818           != AUTO_BOOLEAN_FALSE)
4819         q = remote_query_supported_append (q, "fork-events+");
4820       if (packet_set_cmd_state (PACKET_vfork_event_feature)
4821           != AUTO_BOOLEAN_FALSE)
4822         q = remote_query_supported_append (q, "vfork-events+");
4823       if (packet_set_cmd_state (PACKET_exec_event_feature)
4824           != AUTO_BOOLEAN_FALSE)
4825         q = remote_query_supported_append (q, "exec-events+");
4826
4827       if (packet_set_cmd_state (PACKET_vContSupported) != AUTO_BOOLEAN_FALSE)
4828         q = remote_query_supported_append (q, "vContSupported+");
4829
4830       if (packet_set_cmd_state (PACKET_QThreadEvents) != AUTO_BOOLEAN_FALSE)
4831         q = remote_query_supported_append (q, "QThreadEvents+");
4832
4833       if (packet_set_cmd_state (PACKET_no_resumed) != AUTO_BOOLEAN_FALSE)
4834         q = remote_query_supported_append (q, "no-resumed+");
4835
4836       /* Keep this one last to work around a gdbserver <= 7.10 bug in
4837          the qSupported:xmlRegisters=i386 handling.  */
4838       if (remote_support_xml != NULL)
4839         q = remote_query_supported_append (q, remote_support_xml);
4840
4841       q = reconcat (q, "qSupported:", q, (char *) NULL);
4842       putpkt (q);
4843
4844       do_cleanups (old_chain);
4845
4846       getpkt (&rs->buf, &rs->buf_size, 0);
4847
4848       /* If an error occured, warn, but do not return - just reset the
4849          buffer to empty and go on to disable features.  */
4850       if (packet_ok (rs->buf, &remote_protocol_packets[PACKET_qSupported])
4851           == PACKET_ERROR)
4852         {
4853           warning (_("Remote failure reply: %s"), rs->buf);
4854           rs->buf[0] = 0;
4855         }
4856     }
4857
4858   memset (seen, 0, sizeof (seen));
4859
4860   next = rs->buf;
4861   while (*next)
4862     {
4863       enum packet_support is_supported;
4864       char *p, *end, *name_end, *value;
4865
4866       /* First separate out this item from the rest of the packet.  If
4867          there's another item after this, we overwrite the separator
4868          (terminated strings are much easier to work with).  */
4869       p = next;
4870       end = strchr (p, ';');
4871       if (end == NULL)
4872         {
4873           end = p + strlen (p);
4874           next = end;
4875         }
4876       else
4877         {
4878           *end = '\0';
4879           next = end + 1;
4880
4881           if (end == p)
4882             {
4883               warning (_("empty item in \"qSupported\" response"));
4884               continue;
4885             }
4886         }
4887
4888       name_end = strchr (p, '=');
4889       if (name_end)
4890         {
4891           /* This is a name=value entry.  */
4892           is_supported = PACKET_ENABLE;
4893           value = name_end + 1;
4894           *name_end = '\0';
4895         }
4896       else
4897         {
4898           value = NULL;
4899           switch (end[-1])
4900             {
4901             case '+':
4902               is_supported = PACKET_ENABLE;
4903               break;
4904
4905             case '-':
4906               is_supported = PACKET_DISABLE;
4907               break;
4908
4909             case '?':
4910               is_supported = PACKET_SUPPORT_UNKNOWN;
4911               break;
4912
4913             default:
4914               warning (_("unrecognized item \"%s\" "
4915                          "in \"qSupported\" response"), p);
4916               continue;
4917             }
4918           end[-1] = '\0';
4919         }
4920
4921       for (i = 0; i < ARRAY_SIZE (remote_protocol_features); i++)
4922         if (strcmp (remote_protocol_features[i].name, p) == 0)
4923           {
4924             const struct protocol_feature *feature;
4925
4926             seen[i] = 1;
4927             feature = &remote_protocol_features[i];
4928             feature->func (feature, is_supported, value);
4929             break;
4930           }
4931     }
4932
4933   /* If we increased the packet size, make sure to increase the global
4934      buffer size also.  We delay this until after parsing the entire
4935      qSupported packet, because this is the same buffer we were
4936      parsing.  */
4937   if (rs->buf_size < rs->explicit_packet_size)
4938     {
4939       rs->buf_size = rs->explicit_packet_size;
4940       rs->buf = (char *) xrealloc (rs->buf, rs->buf_size);
4941     }
4942
4943   /* Handle the defaults for unmentioned features.  */
4944   for (i = 0; i < ARRAY_SIZE (remote_protocol_features); i++)
4945     if (!seen[i])
4946       {
4947         const struct protocol_feature *feature;
4948
4949         feature = &remote_protocol_features[i];
4950         feature->func (feature, feature->default_support, NULL);
4951       }
4952 }
4953
4954 /* Serial QUIT handler for the remote serial descriptor.
4955
4956    Defers handling a Ctrl-C until we're done with the current
4957    command/response packet sequence, unless:
4958
4959    - We're setting up the connection.  Don't send a remote interrupt
4960      request, as we're not fully synced yet.  Quit immediately
4961      instead.
4962
4963    - The target has been resumed in the foreground
4964      (target_terminal::is_ours is false) with a synchronous resume
4965      packet, and we're blocked waiting for the stop reply, thus a
4966      Ctrl-C should be immediately sent to the target.
4967
4968    - We get a second Ctrl-C while still within the same serial read or
4969      write.  In that case the serial is seemingly wedged --- offer to
4970      quit/disconnect.
4971
4972    - We see a second Ctrl-C without target response, after having
4973      previously interrupted the target.  In that case the target/stub
4974      is probably wedged --- offer to quit/disconnect.
4975 */
4976
4977 static void
4978 remote_serial_quit_handler (void)
4979 {
4980   struct remote_state *rs = get_remote_state ();
4981
4982   if (check_quit_flag ())
4983     {
4984       /* If we're starting up, we're not fully synced yet.  Quit
4985          immediately.  */
4986       if (rs->starting_up)
4987         quit ();
4988       else if (rs->got_ctrlc_during_io)
4989         {
4990           if (query (_("The target is not responding to GDB commands.\n"
4991                        "Stop debugging it? ")))
4992             remote_unpush_and_throw ();
4993         }
4994       /* If ^C has already been sent once, offer to disconnect.  */
4995       else if (!target_terminal::is_ours () && rs->ctrlc_pending_p)
4996         interrupt_query ();
4997       /* All-stop protocol, and blocked waiting for stop reply.  Send
4998          an interrupt request.  */
4999       else if (!target_terminal::is_ours () && rs->waiting_for_stop_reply)
5000         target_interrupt (inferior_ptid);
5001       else
5002         rs->got_ctrlc_during_io = 1;
5003     }
5004 }
5005
5006 /* Remove any of the remote.c targets from target stack.  Upper targets depend
5007    on it so remove them first.  */
5008
5009 static void
5010 remote_unpush_target (void)
5011 {
5012   pop_all_targets_at_and_above (process_stratum);
5013 }
5014
5015 static void
5016 remote_unpush_and_throw (void)
5017 {
5018   remote_unpush_target ();
5019   throw_error (TARGET_CLOSE_ERROR, _("Disconnected from target."));
5020 }
5021
5022 static void
5023 remote_open_1 (const char *name, int from_tty,
5024                struct target_ops *target, int extended_p)
5025 {
5026   struct remote_state *rs = get_remote_state ();
5027
5028   if (name == 0)
5029     error (_("To open a remote debug connection, you need to specify what\n"
5030            "serial device is attached to the remote system\n"
5031            "(e.g. /dev/ttyS0, /dev/ttya, COM1, etc.)."));
5032
5033   /* See FIXME above.  */
5034   if (!target_async_permitted)
5035     wait_forever_enabled_p = 1;
5036
5037   /* If we're connected to a running target, target_preopen will kill it.
5038      Ask this question first, before target_preopen has a chance to kill
5039      anything.  */
5040   if (rs->remote_desc != NULL && !have_inferiors ())
5041     {
5042       if (from_tty
5043           && !query (_("Already connected to a remote target.  Disconnect? ")))
5044         error (_("Still connected."));
5045     }
5046
5047   /* Here the possibly existing remote target gets unpushed.  */
5048   target_preopen (from_tty);
5049
5050   /* Make sure we send the passed signals list the next time we resume.  */
5051   xfree (rs->last_pass_packet);
5052   rs->last_pass_packet = NULL;
5053
5054   /* Make sure we send the program signals list the next time we
5055      resume.  */
5056   xfree (rs->last_program_signals_packet);
5057   rs->last_program_signals_packet = NULL;
5058
5059   remote_fileio_reset ();
5060   reopen_exec_file ();
5061   reread_symbols ();
5062
5063   rs->remote_desc = remote_serial_open (name);
5064   if (!rs->remote_desc)
5065     perror_with_name (name);
5066
5067   if (baud_rate != -1)
5068     {
5069       if (serial_setbaudrate (rs->remote_desc, baud_rate))
5070         {
5071           /* The requested speed could not be set.  Error out to
5072              top level after closing remote_desc.  Take care to
5073              set remote_desc to NULL to avoid closing remote_desc
5074              more than once.  */
5075           serial_close (rs->remote_desc);
5076           rs->remote_desc = NULL;
5077           perror_with_name (name);
5078         }
5079     }
5080
5081   serial_setparity (rs->remote_desc, serial_parity);
5082   serial_raw (rs->remote_desc);
5083
5084   /* If there is something sitting in the buffer we might take it as a
5085      response to a command, which would be bad.  */
5086   serial_flush_input (rs->remote_desc);
5087
5088   if (from_tty)
5089     {
5090       puts_filtered ("Remote debugging using ");
5091       puts_filtered (name);
5092       puts_filtered ("\n");
5093     }
5094   push_target (target);         /* Switch to using remote target now.  */
5095
5096   /* Register extra event sources in the event loop.  */
5097   remote_async_inferior_event_token
5098     = create_async_event_handler (remote_async_inferior_event_handler,
5099                                   NULL);
5100   rs->notif_state = remote_notif_state_allocate ();
5101
5102   /* Reset the target state; these things will be queried either by
5103      remote_query_supported or as they are needed.  */
5104   reset_all_packet_configs_support ();
5105   rs->cached_wait_status = 0;
5106   rs->explicit_packet_size = 0;
5107   rs->noack_mode = 0;
5108   rs->extended = extended_p;
5109   rs->waiting_for_stop_reply = 0;
5110   rs->ctrlc_pending_p = 0;
5111   rs->got_ctrlc_during_io = 0;
5112
5113   rs->general_thread = not_sent_ptid;
5114   rs->continue_thread = not_sent_ptid;
5115   rs->remote_traceframe_number = -1;
5116
5117   rs->last_resume_exec_dir = EXEC_FORWARD;
5118
5119   /* Probe for ability to use "ThreadInfo" query, as required.  */
5120   rs->use_threadinfo_query = 1;
5121   rs->use_threadextra_query = 1;
5122
5123   readahead_cache_invalidate ();
5124
5125   /* Start out by owning the terminal.  */
5126   remote_async_terminal_ours_p = 1;
5127
5128   if (target_async_permitted)
5129     {
5130       /* FIXME: cagney/1999-09-23: During the initial connection it is
5131          assumed that the target is already ready and able to respond to
5132          requests.  Unfortunately remote_start_remote() eventually calls
5133          wait_for_inferior() with no timeout.  wait_forever_enabled_p gets
5134          around this.  Eventually a mechanism that allows
5135          wait_for_inferior() to expect/get timeouts will be
5136          implemented.  */
5137       wait_forever_enabled_p = 0;
5138     }
5139
5140   /* First delete any symbols previously loaded from shared libraries.  */
5141   no_shared_libraries (NULL, 0);
5142
5143   /* Start afresh.  */
5144   init_thread_list ();
5145
5146   /* Start the remote connection.  If error() or QUIT, discard this
5147      target (we'd otherwise be in an inconsistent state) and then
5148      propogate the error on up the exception chain.  This ensures that
5149      the caller doesn't stumble along blindly assuming that the
5150      function succeeded.  The CLI doesn't have this problem but other
5151      UI's, such as MI do.
5152
5153      FIXME: cagney/2002-05-19: Instead of re-throwing the exception,
5154      this function should return an error indication letting the
5155      caller restore the previous state.  Unfortunately the command
5156      ``target remote'' is directly wired to this function making that
5157      impossible.  On a positive note, the CLI side of this problem has
5158      been fixed - the function set_cmd_context() makes it possible for
5159      all the ``target ....'' commands to share a common callback
5160      function.  See cli-dump.c.  */
5161   {
5162
5163     TRY
5164       {
5165         remote_start_remote (from_tty, target, extended_p);
5166       }
5167     CATCH (ex, RETURN_MASK_ALL)
5168       {
5169         /* Pop the partially set up target - unless something else did
5170            already before throwing the exception.  */
5171         if (rs->remote_desc != NULL)
5172           remote_unpush_target ();
5173         if (target_async_permitted)
5174           wait_forever_enabled_p = 1;
5175         throw_exception (ex);
5176       }
5177     END_CATCH
5178   }
5179
5180   remote_btrace_reset ();
5181
5182   if (target_async_permitted)
5183     wait_forever_enabled_p = 1;
5184 }
5185
5186 /* Detach the specified process.  */
5187
5188 static void
5189 remote_detach_pid (int pid)
5190 {
5191   struct remote_state *rs = get_remote_state ();
5192
5193   if (remote_multi_process_p (rs))
5194     xsnprintf (rs->buf, get_remote_packet_size (), "D;%x", pid);
5195   else
5196     strcpy (rs->buf, "D");
5197
5198   putpkt (rs->buf);
5199   getpkt (&rs->buf, &rs->buf_size, 0);
5200
5201   if (rs->buf[0] == 'O' && rs->buf[1] == 'K')
5202     ;
5203   else if (rs->buf[0] == '\0')
5204     error (_("Remote doesn't know how to detach"));
5205   else
5206     error (_("Can't detach process."));
5207 }
5208
5209 /* This detaches a program to which we previously attached, using
5210    inferior_ptid to identify the process.  After this is done, GDB
5211    can be used to debug some other program.  We better not have left
5212    any breakpoints in the target program or it'll die when it hits
5213    one.  */
5214
5215 static void
5216 remote_detach_1 (const char *args, int from_tty)
5217 {
5218   int pid = ptid_get_pid (inferior_ptid);
5219   struct remote_state *rs = get_remote_state ();
5220   struct thread_info *tp = find_thread_ptid (inferior_ptid);
5221   int is_fork_parent;
5222
5223   if (args)
5224     error (_("Argument given to \"detach\" when remotely debugging."));
5225
5226   if (!target_has_execution)
5227     error (_("No process to detach from."));
5228
5229   target_announce_detach (from_tty);
5230
5231   /* Tell the remote target to detach.  */
5232   remote_detach_pid (pid);
5233
5234   /* Exit only if this is the only active inferior.  */
5235   if (from_tty && !rs->extended && number_of_live_inferiors () == 1)
5236     puts_filtered (_("Ending remote debugging.\n"));
5237
5238   /* Check to see if we are detaching a fork parent.  Note that if we
5239      are detaching a fork child, tp == NULL.  */
5240   is_fork_parent = (tp != NULL
5241                     && tp->pending_follow.kind == TARGET_WAITKIND_FORKED);
5242
5243   /* If doing detach-on-fork, we don't mourn, because that will delete
5244      breakpoints that should be available for the followed inferior.  */
5245   if (!is_fork_parent)
5246     target_mourn_inferior (inferior_ptid);
5247   else
5248     {
5249       inferior_ptid = null_ptid;
5250       detach_inferior (pid);
5251     }
5252 }
5253
5254 static void
5255 remote_detach (struct target_ops *ops, const char *args, int from_tty)
5256 {
5257   remote_detach_1 (args, from_tty);
5258 }
5259
5260 static void
5261 extended_remote_detach (struct target_ops *ops, const char *args, int from_tty)
5262 {
5263   remote_detach_1 (args, from_tty);
5264 }
5265
5266 /* Target follow-fork function for remote targets.  On entry, and
5267    at return, the current inferior is the fork parent.
5268
5269    Note that although this is currently only used for extended-remote,
5270    it is named remote_follow_fork in anticipation of using it for the
5271    remote target as well.  */
5272
5273 static int
5274 remote_follow_fork (struct target_ops *ops, int follow_child,
5275                     int detach_fork)
5276 {
5277   struct remote_state *rs = get_remote_state ();
5278   enum target_waitkind kind = inferior_thread ()->pending_follow.kind;
5279
5280   if ((kind == TARGET_WAITKIND_FORKED && remote_fork_event_p (rs))
5281       || (kind == TARGET_WAITKIND_VFORKED && remote_vfork_event_p (rs)))
5282     {
5283       /* When following the parent and detaching the child, we detach
5284          the child here.  For the case of following the child and
5285          detaching the parent, the detach is done in the target-
5286          independent follow fork code in infrun.c.  We can't use
5287          target_detach when detaching an unfollowed child because
5288          the client side doesn't know anything about the child.  */
5289       if (detach_fork && !follow_child)
5290         {
5291           /* Detach the fork child.  */
5292           ptid_t child_ptid;
5293           pid_t child_pid;
5294
5295           child_ptid = inferior_thread ()->pending_follow.value.related_pid;
5296           child_pid = ptid_get_pid (child_ptid);
5297
5298           remote_detach_pid (child_pid);
5299           detach_inferior (child_pid);
5300         }
5301     }
5302   return 0;
5303 }
5304
5305 /* Target follow-exec function for remote targets.  Save EXECD_PATHNAME
5306    in the program space of the new inferior.  On entry and at return the
5307    current inferior is the exec'ing inferior.  INF is the new exec'd
5308    inferior, which may be the same as the exec'ing inferior unless
5309    follow-exec-mode is "new".  */
5310
5311 static void
5312 remote_follow_exec (struct target_ops *ops,
5313                     struct inferior *inf, char *execd_pathname)
5314 {
5315   /* We know that this is a target file name, so if it has the "target:"
5316      prefix we strip it off before saving it in the program space.  */
5317   if (is_target_filename (execd_pathname))
5318     execd_pathname += strlen (TARGET_SYSROOT_PREFIX);
5319
5320   set_pspace_remote_exec_file (inf->pspace, execd_pathname);
5321 }
5322
5323 /* Same as remote_detach, but don't send the "D" packet; just disconnect.  */
5324
5325 static void
5326 remote_disconnect (struct target_ops *target, const char *args, int from_tty)
5327 {
5328   if (args)
5329     error (_("Argument given to \"disconnect\" when remotely debugging."));
5330
5331   /* Make sure we unpush even the extended remote targets.  Calling
5332      target_mourn_inferior won't unpush, and remote_mourn won't
5333      unpush if there is more than one inferior left.  */
5334   unpush_target (target);
5335   generic_mourn_inferior ();
5336
5337   if (from_tty)
5338     puts_filtered ("Ending remote debugging.\n");
5339 }
5340
5341 /* Attach to the process specified by ARGS.  If FROM_TTY is non-zero,
5342    be chatty about it.  */
5343
5344 static void
5345 extended_remote_attach (struct target_ops *target, const char *args,
5346                         int from_tty)
5347 {
5348   struct remote_state *rs = get_remote_state ();
5349   int pid;
5350   char *wait_status = NULL;
5351
5352   pid = parse_pid_to_attach (args);
5353
5354   /* Remote PID can be freely equal to getpid, do not check it here the same
5355      way as in other targets.  */
5356
5357   if (packet_support (PACKET_vAttach) == PACKET_DISABLE)
5358     error (_("This target does not support attaching to a process"));
5359
5360   if (from_tty)
5361     {
5362       char *exec_file = get_exec_file (0);
5363
5364       if (exec_file)
5365         printf_unfiltered (_("Attaching to program: %s, %s\n"), exec_file,
5366                            target_pid_to_str (pid_to_ptid (pid)));
5367       else
5368         printf_unfiltered (_("Attaching to %s\n"),
5369                            target_pid_to_str (pid_to_ptid (pid)));
5370
5371       gdb_flush (gdb_stdout);
5372     }
5373
5374   xsnprintf (rs->buf, get_remote_packet_size (), "vAttach;%x", pid);
5375   putpkt (rs->buf);
5376   getpkt (&rs->buf, &rs->buf_size, 0);
5377
5378   switch (packet_ok (rs->buf,
5379                      &remote_protocol_packets[PACKET_vAttach]))
5380     {
5381     case PACKET_OK:
5382       if (!target_is_non_stop_p ())
5383         {
5384           /* Save the reply for later.  */
5385           wait_status = (char *) alloca (strlen (rs->buf) + 1);
5386           strcpy (wait_status, rs->buf);
5387         }
5388       else if (strcmp (rs->buf, "OK") != 0)
5389         error (_("Attaching to %s failed with: %s"),
5390                target_pid_to_str (pid_to_ptid (pid)),
5391                rs->buf);
5392       break;
5393     case PACKET_UNKNOWN:
5394       error (_("This target does not support attaching to a process"));
5395     default:
5396       error (_("Attaching to %s failed"),
5397              target_pid_to_str (pid_to_ptid (pid)));
5398     }
5399
5400   set_current_inferior (remote_add_inferior (0, pid, 1, 0));
5401
5402   inferior_ptid = pid_to_ptid (pid);
5403
5404   if (target_is_non_stop_p ())
5405     {
5406       struct thread_info *thread;
5407
5408       /* Get list of threads.  */
5409       remote_update_thread_list (target);
5410
5411       thread = first_thread_of_process (pid);
5412       if (thread)
5413         inferior_ptid = thread->ptid;
5414       else
5415         inferior_ptid = pid_to_ptid (pid);
5416
5417       /* Invalidate our notion of the remote current thread.  */
5418       record_currthread (rs, minus_one_ptid);
5419     }
5420   else
5421     {
5422       /* Now, if we have thread information, update inferior_ptid.  */
5423       inferior_ptid = remote_current_thread (inferior_ptid);
5424
5425       /* Add the main thread to the thread list.  */
5426       add_thread_silent (inferior_ptid);
5427     }
5428
5429   /* Next, if the target can specify a description, read it.  We do
5430      this before anything involving memory or registers.  */
5431   target_find_description ();
5432
5433   if (!target_is_non_stop_p ())
5434     {
5435       /* Use the previously fetched status.  */
5436       gdb_assert (wait_status != NULL);
5437
5438       if (target_can_async_p ())
5439         {
5440           struct notif_event *reply
5441             =  remote_notif_parse (&notif_client_stop, wait_status);
5442
5443           push_stop_reply ((struct stop_reply *) reply);
5444
5445           target_async (1);
5446         }
5447       else
5448         {
5449           gdb_assert (wait_status != NULL);
5450           strcpy (rs->buf, wait_status);
5451           rs->cached_wait_status = 1;
5452         }
5453     }
5454   else
5455     gdb_assert (wait_status == NULL);
5456 }
5457
5458 /* Implementation of the to_post_attach method.  */
5459
5460 static void
5461 extended_remote_post_attach (struct target_ops *ops, int pid)
5462 {
5463   /* Get text, data & bss offsets.  */
5464   get_offsets ();
5465
5466   /* In certain cases GDB might not have had the chance to start
5467      symbol lookup up until now.  This could happen if the debugged
5468      binary is not using shared libraries, the vsyscall page is not
5469      present (on Linux) and the binary itself hadn't changed since the
5470      debugging process was started.  */
5471   if (symfile_objfile != NULL)
5472     remote_check_symbols();
5473 }
5474
5475 \f
5476 /* Check for the availability of vCont.  This function should also check
5477    the response.  */
5478
5479 static void
5480 remote_vcont_probe (struct remote_state *rs)
5481 {
5482   char *buf;
5483
5484   strcpy (rs->buf, "vCont?");
5485   putpkt (rs->buf);
5486   getpkt (&rs->buf, &rs->buf_size, 0);
5487   buf = rs->buf;
5488
5489   /* Make sure that the features we assume are supported.  */
5490   if (startswith (buf, "vCont"))
5491     {
5492       char *p = &buf[5];
5493       int support_c, support_C;
5494
5495       rs->supports_vCont.s = 0;
5496       rs->supports_vCont.S = 0;
5497       support_c = 0;
5498       support_C = 0;
5499       rs->supports_vCont.t = 0;
5500       rs->supports_vCont.r = 0;
5501       while (p && *p == ';')
5502         {
5503           p++;
5504           if (*p == 's' && (*(p + 1) == ';' || *(p + 1) == 0))
5505             rs->supports_vCont.s = 1;
5506           else if (*p == 'S' && (*(p + 1) == ';' || *(p + 1) == 0))
5507             rs->supports_vCont.S = 1;
5508           else if (*p == 'c' && (*(p + 1) == ';' || *(p + 1) == 0))
5509             support_c = 1;
5510           else if (*p == 'C' && (*(p + 1) == ';' || *(p + 1) == 0))
5511             support_C = 1;
5512           else if (*p == 't' && (*(p + 1) == ';' || *(p + 1) == 0))
5513             rs->supports_vCont.t = 1;
5514           else if (*p == 'r' && (*(p + 1) == ';' || *(p + 1) == 0))
5515             rs->supports_vCont.r = 1;
5516
5517           p = strchr (p, ';');
5518         }
5519
5520       /* If c, and C are not all supported, we can't use vCont.  Clearing
5521          BUF will make packet_ok disable the packet.  */
5522       if (!support_c || !support_C)
5523         buf[0] = 0;
5524     }
5525
5526   packet_ok (buf, &remote_protocol_packets[PACKET_vCont]);
5527 }
5528
5529 /* Helper function for building "vCont" resumptions.  Write a
5530    resumption to P.  ENDP points to one-passed-the-end of the buffer
5531    we're allowed to write to.  Returns BUF+CHARACTERS_WRITTEN.  The
5532    thread to be resumed is PTID; STEP and SIGGNAL indicate whether the
5533    resumed thread should be single-stepped and/or signalled.  If PTID
5534    equals minus_one_ptid, then all threads are resumed; if PTID
5535    represents a process, then all threads of the process are resumed;
5536    the thread to be stepped and/or signalled is given in the global
5537    INFERIOR_PTID.  */
5538
5539 static char *
5540 append_resumption (char *p, char *endp,
5541                    ptid_t ptid, int step, enum gdb_signal siggnal)
5542 {
5543   struct remote_state *rs = get_remote_state ();
5544
5545   if (step && siggnal != GDB_SIGNAL_0)
5546     p += xsnprintf (p, endp - p, ";S%02x", siggnal);
5547   else if (step
5548            /* GDB is willing to range step.  */
5549            && use_range_stepping
5550            /* Target supports range stepping.  */
5551            && rs->supports_vCont.r
5552            /* We don't currently support range stepping multiple
5553               threads with a wildcard (though the protocol allows it,
5554               so stubs shouldn't make an active effort to forbid
5555               it).  */
5556            && !(remote_multi_process_p (rs) && ptid_is_pid (ptid)))
5557     {
5558       struct thread_info *tp;
5559
5560       if (ptid_equal (ptid, minus_one_ptid))
5561         {
5562           /* If we don't know about the target thread's tid, then
5563              we're resuming magic_null_ptid (see caller).  */
5564           tp = find_thread_ptid (magic_null_ptid);
5565         }
5566       else
5567         tp = find_thread_ptid (ptid);
5568       gdb_assert (tp != NULL);
5569
5570       if (tp->control.may_range_step)
5571         {
5572           int addr_size = gdbarch_addr_bit (target_gdbarch ()) / 8;
5573
5574           p += xsnprintf (p, endp - p, ";r%s,%s",
5575                           phex_nz (tp->control.step_range_start,
5576                                    addr_size),
5577                           phex_nz (tp->control.step_range_end,
5578                                    addr_size));
5579         }
5580       else
5581         p += xsnprintf (p, endp - p, ";s");
5582     }
5583   else if (step)
5584     p += xsnprintf (p, endp - p, ";s");
5585   else if (siggnal != GDB_SIGNAL_0)
5586     p += xsnprintf (p, endp - p, ";C%02x", siggnal);
5587   else
5588     p += xsnprintf (p, endp - p, ";c");
5589
5590   if (remote_multi_process_p (rs) && ptid_is_pid (ptid))
5591     {
5592       ptid_t nptid;
5593
5594       /* All (-1) threads of process.  */
5595       nptid = ptid_build (ptid_get_pid (ptid), -1, 0);
5596
5597       p += xsnprintf (p, endp - p, ":");
5598       p = write_ptid (p, endp, nptid);
5599     }
5600   else if (!ptid_equal (ptid, minus_one_ptid))
5601     {
5602       p += xsnprintf (p, endp - p, ":");
5603       p = write_ptid (p, endp, ptid);
5604     }
5605
5606   return p;
5607 }
5608
5609 /* Clear the thread's private info on resume.  */
5610
5611 static void
5612 resume_clear_thread_private_info (struct thread_info *thread)
5613 {
5614   if (thread->priv != NULL)
5615     {
5616       thread->priv->stop_reason = TARGET_STOPPED_BY_NO_REASON;
5617       thread->priv->watch_data_address = 0;
5618     }
5619 }
5620
5621 /* Append a vCont continue-with-signal action for threads that have a
5622    non-zero stop signal.  */
5623
5624 static char *
5625 append_pending_thread_resumptions (char *p, char *endp, ptid_t ptid)
5626 {
5627   struct thread_info *thread;
5628
5629   ALL_NON_EXITED_THREADS (thread)
5630     if (ptid_match (thread->ptid, ptid)
5631         && !ptid_equal (inferior_ptid, thread->ptid)
5632         && thread->suspend.stop_signal != GDB_SIGNAL_0)
5633       {
5634         p = append_resumption (p, endp, thread->ptid,
5635                                0, thread->suspend.stop_signal);
5636         thread->suspend.stop_signal = GDB_SIGNAL_0;
5637         resume_clear_thread_private_info (thread);
5638       }
5639
5640   return p;
5641 }
5642
5643 /* Set the target running, using the packets that use Hc
5644    (c/s/C/S).  */
5645
5646 static void
5647 remote_resume_with_hc (struct target_ops *ops,
5648                        ptid_t ptid, int step, enum gdb_signal siggnal)
5649 {
5650   struct remote_state *rs = get_remote_state ();
5651   struct thread_info *thread;
5652   char *buf;
5653
5654   rs->last_sent_signal = siggnal;
5655   rs->last_sent_step = step;
5656
5657   /* The c/s/C/S resume packets use Hc, so set the continue
5658      thread.  */
5659   if (ptid_equal (ptid, minus_one_ptid))
5660     set_continue_thread (any_thread_ptid);
5661   else
5662     set_continue_thread (ptid);
5663
5664   ALL_NON_EXITED_THREADS (thread)
5665     resume_clear_thread_private_info (thread);
5666
5667   buf = rs->buf;
5668   if (execution_direction == EXEC_REVERSE)
5669     {
5670       /* We don't pass signals to the target in reverse exec mode.  */
5671       if (info_verbose && siggnal != GDB_SIGNAL_0)
5672         warning (_(" - Can't pass signal %d to target in reverse: ignored."),
5673                  siggnal);
5674
5675       if (step && packet_support (PACKET_bs) == PACKET_DISABLE)
5676         error (_("Remote reverse-step not supported."));
5677       if (!step && packet_support (PACKET_bc) == PACKET_DISABLE)
5678         error (_("Remote reverse-continue not supported."));
5679
5680       strcpy (buf, step ? "bs" : "bc");
5681     }
5682   else if (siggnal != GDB_SIGNAL_0)
5683     {
5684       buf[0] = step ? 'S' : 'C';
5685       buf[1] = tohex (((int) siggnal >> 4) & 0xf);
5686       buf[2] = tohex (((int) siggnal) & 0xf);
5687       buf[3] = '\0';
5688     }
5689   else
5690     strcpy (buf, step ? "s" : "c");
5691
5692   putpkt (buf);
5693 }
5694
5695 /* Resume the remote inferior by using a "vCont" packet.  The thread
5696    to be resumed is PTID; STEP and SIGGNAL indicate whether the
5697    resumed thread should be single-stepped and/or signalled.  If PTID
5698    equals minus_one_ptid, then all threads are resumed; the thread to
5699    be stepped and/or signalled is given in the global INFERIOR_PTID.
5700    This function returns non-zero iff it resumes the inferior.
5701
5702    This function issues a strict subset of all possible vCont commands
5703    at the moment.  */
5704
5705 static int
5706 remote_resume_with_vcont (ptid_t ptid, int step, enum gdb_signal siggnal)
5707 {
5708   struct remote_state *rs = get_remote_state ();
5709   char *p;
5710   char *endp;
5711
5712   /* No reverse execution actions defined for vCont.  */
5713   if (execution_direction == EXEC_REVERSE)
5714     return 0;
5715
5716   if (packet_support (PACKET_vCont) == PACKET_SUPPORT_UNKNOWN)
5717     remote_vcont_probe (rs);
5718
5719   if (packet_support (PACKET_vCont) == PACKET_DISABLE)
5720     return 0;
5721
5722   p = rs->buf;
5723   endp = rs->buf + get_remote_packet_size ();
5724
5725   /* If we could generate a wider range of packets, we'd have to worry
5726      about overflowing BUF.  Should there be a generic
5727      "multi-part-packet" packet?  */
5728
5729   p += xsnprintf (p, endp - p, "vCont");
5730
5731   if (ptid_equal (ptid, magic_null_ptid))
5732     {
5733       /* MAGIC_NULL_PTID means that we don't have any active threads,
5734          so we don't have any TID numbers the inferior will
5735          understand.  Make sure to only send forms that do not specify
5736          a TID.  */
5737       append_resumption (p, endp, minus_one_ptid, step, siggnal);
5738     }
5739   else if (ptid_equal (ptid, minus_one_ptid) || ptid_is_pid (ptid))
5740     {
5741       /* Resume all threads (of all processes, or of a single
5742          process), with preference for INFERIOR_PTID.  This assumes
5743          inferior_ptid belongs to the set of all threads we are about
5744          to resume.  */
5745       if (step || siggnal != GDB_SIGNAL_0)
5746         {
5747           /* Step inferior_ptid, with or without signal.  */
5748           p = append_resumption (p, endp, inferior_ptid, step, siggnal);
5749         }
5750
5751       /* Also pass down any pending signaled resumption for other
5752          threads not the current.  */
5753       p = append_pending_thread_resumptions (p, endp, ptid);
5754
5755       /* And continue others without a signal.  */
5756       append_resumption (p, endp, ptid, /*step=*/ 0, GDB_SIGNAL_0);
5757     }
5758   else
5759     {
5760       /* Scheduler locking; resume only PTID.  */
5761       append_resumption (p, endp, ptid, step, siggnal);
5762     }
5763
5764   gdb_assert (strlen (rs->buf) < get_remote_packet_size ());
5765   putpkt (rs->buf);
5766
5767   if (target_is_non_stop_p ())
5768     {
5769       /* In non-stop, the stub replies to vCont with "OK".  The stop
5770          reply will be reported asynchronously by means of a `%Stop'
5771          notification.  */
5772       getpkt (&rs->buf, &rs->buf_size, 0);
5773       if (strcmp (rs->buf, "OK") != 0)
5774         error (_("Unexpected vCont reply in non-stop mode: %s"), rs->buf);
5775     }
5776
5777   return 1;
5778 }
5779
5780 /* Tell the remote machine to resume.  */
5781
5782 static void
5783 remote_resume (struct target_ops *ops,
5784                ptid_t ptid, int step, enum gdb_signal siggnal)
5785 {
5786   struct remote_state *rs = get_remote_state ();
5787
5788   /* When connected in non-stop mode, the core resumes threads
5789      individually.  Resuming remote threads directly in target_resume
5790      would thus result in sending one packet per thread.  Instead, to
5791      minimize roundtrip latency, here we just store the resume
5792      request; the actual remote resumption will be done in
5793      target_commit_resume / remote_commit_resume, where we'll be able
5794      to do vCont action coalescing.  */
5795   if (target_is_non_stop_p () && execution_direction != EXEC_REVERSE)
5796     {
5797       struct private_thread_info *remote_thr;
5798
5799       if (ptid_equal (minus_one_ptid, ptid) || ptid_is_pid (ptid))
5800         remote_thr = get_private_info_ptid (inferior_ptid);
5801       else
5802         remote_thr = get_private_info_ptid (ptid);
5803       remote_thr->last_resume_step = step;
5804       remote_thr->last_resume_sig = siggnal;
5805       return;
5806     }
5807
5808   /* In all-stop, we can't mark REMOTE_ASYNC_GET_PENDING_EVENTS_TOKEN
5809      (explained in remote-notif.c:handle_notification) so
5810      remote_notif_process is not called.  We need find a place where
5811      it is safe to start a 'vNotif' sequence.  It is good to do it
5812      before resuming inferior, because inferior was stopped and no RSP
5813      traffic at that moment.  */
5814   if (!target_is_non_stop_p ())
5815     remote_notif_process (rs->notif_state, &notif_client_stop);
5816
5817   rs->last_resume_exec_dir = execution_direction;
5818
5819   /* Prefer vCont, and fallback to s/c/S/C, which use Hc.  */
5820   if (!remote_resume_with_vcont (ptid, step, siggnal))
5821     remote_resume_with_hc (ops, ptid, step, siggnal);
5822
5823   /* We are about to start executing the inferior, let's register it
5824      with the event loop.  NOTE: this is the one place where all the
5825      execution commands end up.  We could alternatively do this in each
5826      of the execution commands in infcmd.c.  */
5827   /* FIXME: ezannoni 1999-09-28: We may need to move this out of here
5828      into infcmd.c in order to allow inferior function calls to work
5829      NOT asynchronously.  */
5830   if (target_can_async_p ())
5831     target_async (1);
5832
5833   /* We've just told the target to resume.  The remote server will
5834      wait for the inferior to stop, and then send a stop reply.  In
5835      the mean time, we can't start another command/query ourselves
5836      because the stub wouldn't be ready to process it.  This applies
5837      only to the base all-stop protocol, however.  In non-stop (which
5838      only supports vCont), the stub replies with an "OK", and is
5839      immediate able to process further serial input.  */
5840   if (!target_is_non_stop_p ())
5841     rs->waiting_for_stop_reply = 1;
5842 }
5843
5844 static void check_pending_events_prevent_wildcard_vcont
5845   (int *may_global_wildcard_vcont);
5846 static int is_pending_fork_parent_thread (struct thread_info *thread);
5847
5848 /* Private per-inferior info for target remote processes.  */
5849
5850 struct private_inferior
5851 {
5852   /* Whether we can send a wildcard vCont for this process.  */
5853   int may_wildcard_vcont;
5854 };
5855
5856 /* Structure used to track the construction of a vCont packet in the
5857    outgoing packet buffer.  This is used to send multiple vCont
5858    packets if we have more actions than would fit a single packet.  */
5859
5860 struct vcont_builder
5861 {
5862   /* Pointer to the first action.  P points here if no action has been
5863      appended yet.  */
5864   char *first_action;
5865
5866   /* Where the next action will be appended.  */
5867   char *p;
5868
5869   /* The end of the buffer.  Must never write past this.  */
5870   char *endp;
5871 };
5872
5873 /* Prepare the outgoing buffer for a new vCont packet.  */
5874
5875 static void
5876 vcont_builder_restart (struct vcont_builder *builder)
5877 {
5878   struct remote_state *rs = get_remote_state ();
5879
5880   builder->p = rs->buf;
5881   builder->endp = rs->buf + get_remote_packet_size ();
5882   builder->p += xsnprintf (builder->p, builder->endp - builder->p, "vCont");
5883   builder->first_action = builder->p;
5884 }
5885
5886 /* If the vCont packet being built has any action, send it to the
5887    remote end.  */
5888
5889 static void
5890 vcont_builder_flush (struct vcont_builder *builder)
5891 {
5892   struct remote_state *rs;
5893
5894   if (builder->p == builder->first_action)
5895     return;
5896
5897   rs = get_remote_state ();
5898   putpkt (rs->buf);
5899   getpkt (&rs->buf, &rs->buf_size, 0);
5900   if (strcmp (rs->buf, "OK") != 0)
5901     error (_("Unexpected vCont reply in non-stop mode: %s"), rs->buf);
5902 }
5903
5904 /* The largest action is range-stepping, with its two addresses.  This
5905    is more than sufficient.  If a new, bigger action is created, it'll
5906    quickly trigger a failed assertion in append_resumption (and we'll
5907    just bump this).  */
5908 #define MAX_ACTION_SIZE 200
5909
5910 /* Append a new vCont action in the outgoing packet being built.  If
5911    the action doesn't fit the packet along with previous actions, push
5912    what we've got so far to the remote end and start over a new vCont
5913    packet (with the new action).  */
5914
5915 static void
5916 vcont_builder_push_action (struct vcont_builder *builder,
5917                            ptid_t ptid, int step, enum gdb_signal siggnal)
5918 {
5919   char buf[MAX_ACTION_SIZE + 1];
5920   char *endp;
5921   size_t rsize;
5922
5923   endp = append_resumption (buf, buf + sizeof (buf),
5924                             ptid, step, siggnal);
5925
5926   /* Check whether this new action would fit in the vCont packet along
5927      with previous actions.  If not, send what we've got so far and
5928      start a new vCont packet.  */
5929   rsize = endp - buf;
5930   if (rsize > builder->endp - builder->p)
5931     {
5932       vcont_builder_flush (builder);
5933       vcont_builder_restart (builder);
5934
5935       /* Should now fit.  */
5936       gdb_assert (rsize <= builder->endp - builder->p);
5937     }
5938
5939   memcpy (builder->p, buf, rsize);
5940   builder->p += rsize;
5941   *builder->p = '\0';
5942 }
5943
5944 /* to_commit_resume implementation.  */
5945
5946 static void
5947 remote_commit_resume (struct target_ops *ops)
5948 {
5949   struct remote_state *rs = get_remote_state ();
5950   struct inferior *inf;
5951   struct thread_info *tp;
5952   int any_process_wildcard;
5953   int may_global_wildcard_vcont;
5954   struct vcont_builder vcont_builder;
5955
5956   /* If connected in all-stop mode, we'd send the remote resume
5957      request directly from remote_resume.  Likewise if
5958      reverse-debugging, as there are no defined vCont actions for
5959      reverse execution.  */
5960   if (!target_is_non_stop_p () || execution_direction == EXEC_REVERSE)
5961     return;
5962
5963   /* Try to send wildcard actions ("vCont;c" or "vCont;c:pPID.-1")
5964      instead of resuming all threads of each process individually.
5965      However, if any thread of a process must remain halted, we can't
5966      send wildcard resumes and must send one action per thread.
5967
5968      Care must be taken to not resume threads/processes the server
5969      side already told us are stopped, but the core doesn't know about
5970      yet, because the events are still in the vStopped notification
5971      queue.  For example:
5972
5973        #1 => vCont s:p1.1;c
5974        #2 <= OK
5975        #3 <= %Stopped T05 p1.1
5976        #4 => vStopped
5977        #5 <= T05 p1.2
5978        #6 => vStopped
5979        #7 <= OK
5980        #8 (infrun handles the stop for p1.1 and continues stepping)
5981        #9 => vCont s:p1.1;c
5982
5983      The last vCont above would resume thread p1.2 by mistake, because
5984      the server has no idea that the event for p1.2 had not been
5985      handled yet.
5986
5987      The server side must similarly ignore resume actions for the
5988      thread that has a pending %Stopped notification (and any other
5989      threads with events pending), until GDB acks the notification
5990      with vStopped.  Otherwise, e.g., the following case is
5991      mishandled:
5992
5993        #1 => g  (or any other packet)
5994        #2 <= [registers]
5995        #3 <= %Stopped T05 p1.2
5996        #4 => vCont s:p1.1;c
5997        #5 <= OK
5998
5999      Above, the server must not resume thread p1.2.  GDB can't know
6000      that p1.2 stopped until it acks the %Stopped notification, and
6001      since from GDB's perspective all threads should be running, it
6002      sends a "c" action.
6003
6004      Finally, special care must also be given to handling fork/vfork
6005      events.  A (v)fork event actually tells us that two processes
6006      stopped -- the parent and the child.  Until we follow the fork,
6007      we must not resume the child.  Therefore, if we have a pending
6008      fork follow, we must not send a global wildcard resume action
6009      (vCont;c).  We can still send process-wide wildcards though.  */
6010
6011   /* Start by assuming a global wildcard (vCont;c) is possible.  */
6012   may_global_wildcard_vcont = 1;
6013
6014   /* And assume every process is individually wildcard-able too.  */
6015   ALL_NON_EXITED_INFERIORS (inf)
6016     {
6017       if (inf->priv == NULL)
6018         inf->priv = XNEW (struct private_inferior);
6019       inf->priv->may_wildcard_vcont = 1;
6020     }
6021
6022   /* Check for any pending events (not reported or processed yet) and
6023      disable process and global wildcard resumes appropriately.  */
6024   check_pending_events_prevent_wildcard_vcont (&may_global_wildcard_vcont);
6025
6026   ALL_NON_EXITED_THREADS (tp)
6027     {
6028       /* If a thread of a process is not meant to be resumed, then we
6029          can't wildcard that process.  */
6030       if (!tp->executing)
6031         {
6032           tp->inf->priv->may_wildcard_vcont = 0;
6033
6034           /* And if we can't wildcard a process, we can't wildcard
6035              everything either.  */
6036           may_global_wildcard_vcont = 0;
6037           continue;
6038         }
6039
6040       /* If a thread is the parent of an unfollowed fork, then we
6041          can't do a global wildcard, as that would resume the fork
6042          child.  */
6043       if (is_pending_fork_parent_thread (tp))
6044         may_global_wildcard_vcont = 0;
6045     }
6046
6047   /* Now let's build the vCont packet(s).  Actions must be appended
6048      from narrower to wider scopes (thread -> process -> global).  If
6049      we end up with too many actions for a single packet vcont_builder
6050      flushes the current vCont packet to the remote side and starts a
6051      new one.  */
6052   vcont_builder_restart (&vcont_builder);
6053
6054   /* Threads first.  */
6055   ALL_NON_EXITED_THREADS (tp)
6056     {
6057       struct private_thread_info *remote_thr = tp->priv;
6058
6059       if (!tp->executing || remote_thr->vcont_resumed)
6060         continue;
6061
6062       gdb_assert (!thread_is_in_step_over_chain (tp));
6063
6064       if (!remote_thr->last_resume_step
6065           && remote_thr->last_resume_sig == GDB_SIGNAL_0
6066           && tp->inf->priv->may_wildcard_vcont)
6067         {
6068           /* We'll send a wildcard resume instead.  */
6069           remote_thr->vcont_resumed = 1;
6070           continue;
6071         }
6072
6073       vcont_builder_push_action (&vcont_builder, tp->ptid,
6074                                  remote_thr->last_resume_step,
6075                                  remote_thr->last_resume_sig);
6076       remote_thr->vcont_resumed = 1;
6077     }
6078
6079   /* Now check whether we can send any process-wide wildcard.  This is
6080      to avoid sending a global wildcard in the case nothing is
6081      supposed to be resumed.  */
6082   any_process_wildcard = 0;
6083
6084   ALL_NON_EXITED_INFERIORS (inf)
6085     {
6086       if (inf->priv->may_wildcard_vcont)
6087         {
6088           any_process_wildcard = 1;
6089           break;
6090         }
6091     }
6092
6093   if (any_process_wildcard)
6094     {
6095       /* If all processes are wildcard-able, then send a single "c"
6096          action, otherwise, send an "all (-1) threads of process"
6097          continue action for each running process, if any.  */
6098       if (may_global_wildcard_vcont)
6099         {
6100           vcont_builder_push_action (&vcont_builder, minus_one_ptid,
6101                                      0, GDB_SIGNAL_0);
6102         }
6103       else
6104         {
6105           ALL_NON_EXITED_INFERIORS (inf)
6106             {
6107               if (inf->priv->may_wildcard_vcont)
6108                 {
6109                   vcont_builder_push_action (&vcont_builder,
6110                                              pid_to_ptid (inf->pid),
6111                                              0, GDB_SIGNAL_0);
6112                 }
6113             }
6114         }
6115     }
6116
6117   vcont_builder_flush (&vcont_builder);
6118 }
6119
6120 \f
6121
6122 /* Non-stop version of target_stop.  Uses `vCont;t' to stop a remote
6123    thread, all threads of a remote process, or all threads of all
6124    processes.  */
6125
6126 static void
6127 remote_stop_ns (ptid_t ptid)
6128 {
6129   struct remote_state *rs = get_remote_state ();
6130   char *p = rs->buf;
6131   char *endp = rs->buf + get_remote_packet_size ();
6132
6133   if (packet_support (PACKET_vCont) == PACKET_SUPPORT_UNKNOWN)
6134     remote_vcont_probe (rs);
6135
6136   if (!rs->supports_vCont.t)
6137     error (_("Remote server does not support stopping threads"));
6138
6139   if (ptid_equal (ptid, minus_one_ptid)
6140       || (!remote_multi_process_p (rs) && ptid_is_pid (ptid)))
6141     p += xsnprintf (p, endp - p, "vCont;t");
6142   else
6143     {
6144       ptid_t nptid;
6145
6146       p += xsnprintf (p, endp - p, "vCont;t:");
6147
6148       if (ptid_is_pid (ptid))
6149           /* All (-1) threads of process.  */
6150         nptid = ptid_build (ptid_get_pid (ptid), -1, 0);
6151       else
6152         {
6153           /* Small optimization: if we already have a stop reply for
6154              this thread, no use in telling the stub we want this
6155              stopped.  */
6156           if (peek_stop_reply (ptid))
6157             return;
6158
6159           nptid = ptid;
6160         }
6161
6162       write_ptid (p, endp, nptid);
6163     }
6164
6165   /* In non-stop, we get an immediate OK reply.  The stop reply will
6166      come in asynchronously by notification.  */
6167   putpkt (rs->buf);
6168   getpkt (&rs->buf, &rs->buf_size, 0);
6169   if (strcmp (rs->buf, "OK") != 0)
6170     error (_("Stopping %s failed: %s"), target_pid_to_str (ptid), rs->buf);
6171 }
6172
6173 /* All-stop version of target_interrupt.  Sends a break or a ^C to
6174    interrupt the remote target.  It is undefined which thread of which
6175    process reports the interrupt.  */
6176
6177 static void
6178 remote_interrupt_as (void)
6179 {
6180   struct remote_state *rs = get_remote_state ();
6181
6182   rs->ctrlc_pending_p = 1;
6183
6184   /* If the inferior is stopped already, but the core didn't know
6185      about it yet, just ignore the request.  The cached wait status
6186      will be collected in remote_wait.  */
6187   if (rs->cached_wait_status)
6188     return;
6189
6190   /* Send interrupt_sequence to remote target.  */
6191   send_interrupt_sequence ();
6192 }
6193
6194 /* Non-stop version of target_interrupt.  Uses `vCtrlC' to interrupt
6195    the remote target.  It is undefined which thread of which process
6196    reports the interrupt.  Throws an error if the packet is not
6197    supported by the server.  */
6198
6199 static void
6200 remote_interrupt_ns (void)
6201 {
6202   struct remote_state *rs = get_remote_state ();
6203   char *p = rs->buf;
6204   char *endp = rs->buf + get_remote_packet_size ();
6205
6206   xsnprintf (p, endp - p, "vCtrlC");
6207
6208   /* In non-stop, we get an immediate OK reply.  The stop reply will
6209      come in asynchronously by notification.  */
6210   putpkt (rs->buf);
6211   getpkt (&rs->buf, &rs->buf_size, 0);
6212
6213   switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_vCtrlC]))
6214     {
6215     case PACKET_OK:
6216       break;
6217     case PACKET_UNKNOWN:
6218       error (_("No support for interrupting the remote target."));
6219     case PACKET_ERROR:
6220       error (_("Interrupting target failed: %s"), rs->buf);
6221     }
6222 }
6223
6224 /* Implement the to_stop function for the remote targets.  */
6225
6226 static void
6227 remote_stop (struct target_ops *self, ptid_t ptid)
6228 {
6229   if (remote_debug)
6230     fprintf_unfiltered (gdb_stdlog, "remote_stop called\n");
6231
6232   if (target_is_non_stop_p ())
6233     remote_stop_ns (ptid);
6234   else
6235     {
6236       /* We don't currently have a way to transparently pause the
6237          remote target in all-stop mode.  Interrupt it instead.  */
6238       remote_interrupt_as ();
6239     }
6240 }
6241
6242 /* Implement the to_interrupt function for the remote targets.  */
6243
6244 static void
6245 remote_interrupt (struct target_ops *self, ptid_t ptid)
6246 {
6247   struct remote_state *rs = get_remote_state ();
6248
6249   if (remote_debug)
6250     fprintf_unfiltered (gdb_stdlog, "remote_interrupt called\n");
6251
6252   if (target_is_non_stop_p ())
6253     remote_interrupt_ns ();
6254   else
6255     remote_interrupt_as ();
6256 }
6257
6258 /* Implement the to_pass_ctrlc function for the remote targets.  */
6259
6260 static void
6261 remote_pass_ctrlc (struct target_ops *self)
6262 {
6263   struct remote_state *rs = get_remote_state ();
6264
6265   if (remote_debug)
6266     fprintf_unfiltered (gdb_stdlog, "remote_pass_ctrlc called\n");
6267
6268   /* If we're starting up, we're not fully synced yet.  Quit
6269      immediately.  */
6270   if (rs->starting_up)
6271     quit ();
6272   /* If ^C has already been sent once, offer to disconnect.  */
6273   else if (rs->ctrlc_pending_p)
6274     interrupt_query ();
6275   else
6276     target_interrupt (inferior_ptid);
6277 }
6278
6279 /* Ask the user what to do when an interrupt is received.  */
6280
6281 static void
6282 interrupt_query (void)
6283 {
6284   struct remote_state *rs = get_remote_state ();
6285
6286   if (rs->waiting_for_stop_reply && rs->ctrlc_pending_p)
6287     {
6288       if (query (_("The target is not responding to interrupt requests.\n"
6289                    "Stop debugging it? ")))
6290         {
6291           remote_unpush_target ();
6292           throw_error (TARGET_CLOSE_ERROR, _("Disconnected from target."));
6293         }
6294     }
6295   else
6296     {
6297       if (query (_("Interrupted while waiting for the program.\n"
6298                    "Give up waiting? ")))
6299         quit ();
6300     }
6301 }
6302
6303 /* Enable/disable target terminal ownership.  Most targets can use
6304    terminal groups to control terminal ownership.  Remote targets are
6305    different in that explicit transfer of ownership to/from GDB/target
6306    is required.  */
6307
6308 static void
6309 remote_terminal_inferior (struct target_ops *self)
6310 {
6311   /* FIXME: cagney/1999-09-27: Make calls to target_terminal::*()
6312      idempotent.  The event-loop GDB talking to an asynchronous target
6313      with a synchronous command calls this function from both
6314      event-top.c and infrun.c/infcmd.c.  Once GDB stops trying to
6315      transfer the terminal to the target when it shouldn't this guard
6316      can go away.  */
6317   if (!remote_async_terminal_ours_p)
6318     return;
6319   remote_async_terminal_ours_p = 0;
6320   /* NOTE: At this point we could also register our selves as the
6321      recipient of all input.  Any characters typed could then be
6322      passed on down to the target.  */
6323 }
6324
6325 static void
6326 remote_terminal_ours (struct target_ops *self)
6327 {
6328   /* See FIXME in remote_terminal_inferior.  */
6329   if (remote_async_terminal_ours_p)
6330     return;
6331   remote_async_terminal_ours_p = 1;
6332 }
6333
6334 static void
6335 remote_console_output (char *msg)
6336 {
6337   char *p;
6338
6339   for (p = msg; p[0] && p[1]; p += 2)
6340     {
6341       char tb[2];
6342       char c = fromhex (p[0]) * 16 + fromhex (p[1]);
6343
6344       tb[0] = c;
6345       tb[1] = 0;
6346       fputs_unfiltered (tb, gdb_stdtarg);
6347     }
6348   gdb_flush (gdb_stdtarg);
6349 }
6350
6351 DEF_VEC_O(cached_reg_t);
6352
6353 typedef struct stop_reply
6354 {
6355   struct notif_event base;
6356
6357   /* The identifier of the thread about this event  */
6358   ptid_t ptid;
6359
6360   /* The remote state this event is associated with.  When the remote
6361      connection, represented by a remote_state object, is closed,
6362      all the associated stop_reply events should be released.  */
6363   struct remote_state *rs;
6364
6365   struct target_waitstatus ws;
6366
6367   /* Expedited registers.  This makes remote debugging a bit more
6368      efficient for those targets that provide critical registers as
6369      part of their normal status mechanism (as another roundtrip to
6370      fetch them is avoided).  */
6371   VEC(cached_reg_t) *regcache;
6372
6373   enum target_stop_reason stop_reason;
6374
6375   CORE_ADDR watch_data_address;
6376
6377   int core;
6378 } *stop_reply_p;
6379
6380 DECLARE_QUEUE_P (stop_reply_p);
6381 DEFINE_QUEUE_P (stop_reply_p);
6382 /* The list of already fetched and acknowledged stop events.  This
6383    queue is used for notification Stop, and other notifications
6384    don't need queue for their events, because the notification events
6385    of Stop can't be consumed immediately, so that events should be
6386    queued first, and be consumed by remote_wait_{ns,as} one per
6387    time.  Other notifications can consume their events immediately,
6388    so queue is not needed for them.  */
6389 static QUEUE (stop_reply_p) *stop_reply_queue;
6390
6391 static void
6392 stop_reply_xfree (struct stop_reply *r)
6393 {
6394   notif_event_xfree ((struct notif_event *) r);
6395 }
6396
6397 /* Return the length of the stop reply queue.  */
6398
6399 static int
6400 stop_reply_queue_length (void)
6401 {
6402   return QUEUE_length (stop_reply_p, stop_reply_queue);
6403 }
6404
6405 static void
6406 remote_notif_stop_parse (struct notif_client *self, char *buf,
6407                          struct notif_event *event)
6408 {
6409   remote_parse_stop_reply (buf, (struct stop_reply *) event);
6410 }
6411
6412 static void
6413 remote_notif_stop_ack (struct notif_client *self, char *buf,
6414                        struct notif_event *event)
6415 {
6416   struct stop_reply *stop_reply = (struct stop_reply *) event;
6417
6418   /* acknowledge */
6419   putpkt (self->ack_command);
6420
6421   if (stop_reply->ws.kind == TARGET_WAITKIND_IGNORE)
6422       /* We got an unknown stop reply.  */
6423       error (_("Unknown stop reply"));
6424
6425   push_stop_reply (stop_reply);
6426 }
6427
6428 static int
6429 remote_notif_stop_can_get_pending_events (struct notif_client *self)
6430 {
6431   /* We can't get pending events in remote_notif_process for
6432      notification stop, and we have to do this in remote_wait_ns
6433      instead.  If we fetch all queued events from stub, remote stub
6434      may exit and we have no chance to process them back in
6435      remote_wait_ns.  */
6436   mark_async_event_handler (remote_async_inferior_event_token);
6437   return 0;
6438 }
6439
6440 static void
6441 stop_reply_dtr (struct notif_event *event)
6442 {
6443   struct stop_reply *r = (struct stop_reply *) event;
6444   cached_reg_t *reg;
6445   int ix;
6446
6447   for (ix = 0;
6448        VEC_iterate (cached_reg_t, r->regcache, ix, reg);
6449        ix++)
6450     xfree (reg->data);
6451
6452   VEC_free (cached_reg_t, r->regcache);
6453 }
6454
6455 static struct notif_event *
6456 remote_notif_stop_alloc_reply (void)
6457 {
6458   /* We cast to a pointer to the "base class".  */
6459   struct notif_event *r = (struct notif_event *) XNEW (struct stop_reply);
6460
6461   r->dtr = stop_reply_dtr;
6462
6463   return r;
6464 }
6465
6466 /* A client of notification Stop.  */
6467
6468 struct notif_client notif_client_stop =
6469 {
6470   "Stop",
6471   "vStopped",
6472   remote_notif_stop_parse,
6473   remote_notif_stop_ack,
6474   remote_notif_stop_can_get_pending_events,
6475   remote_notif_stop_alloc_reply,
6476   REMOTE_NOTIF_STOP,
6477 };
6478
6479 /* A parameter to pass data in and out.  */
6480
6481 struct queue_iter_param
6482 {
6483   void *input;
6484   struct stop_reply *output;
6485 };
6486
6487 /* Determine if THREAD_PTID is a pending fork parent thread.  ARG contains
6488    the pid of the process that owns the threads we want to check, or
6489    -1 if we want to check all threads.  */
6490
6491 static int
6492 is_pending_fork_parent (struct target_waitstatus *ws, int event_pid,
6493                         ptid_t thread_ptid)
6494 {
6495   if (ws->kind == TARGET_WAITKIND_FORKED
6496       || ws->kind == TARGET_WAITKIND_VFORKED)
6497     {
6498       if (event_pid == -1 || event_pid == ptid_get_pid (thread_ptid))
6499         return 1;
6500     }
6501
6502   return 0;
6503 }
6504
6505 /* Return the thread's pending status used to determine whether the
6506    thread is a fork parent stopped at a fork event.  */
6507
6508 static struct target_waitstatus *
6509 thread_pending_fork_status (struct thread_info *thread)
6510 {
6511   if (thread->suspend.waitstatus_pending_p)
6512     return &thread->suspend.waitstatus;
6513   else
6514     return &thread->pending_follow;
6515 }
6516
6517 /* Determine if THREAD is a pending fork parent thread.  */
6518
6519 static int
6520 is_pending_fork_parent_thread (struct thread_info *thread)
6521 {
6522   struct target_waitstatus *ws = thread_pending_fork_status (thread);
6523   int pid = -1;
6524
6525   return is_pending_fork_parent (ws, pid, thread->ptid);
6526 }
6527
6528 /* Check whether EVENT is a fork event, and if it is, remove the
6529    fork child from the context list passed in DATA.  */
6530
6531 static int
6532 remove_child_of_pending_fork (QUEUE (stop_reply_p) *q,
6533                               QUEUE_ITER (stop_reply_p) *iter,
6534                               stop_reply_p event,
6535                               void *data)
6536 {
6537   struct queue_iter_param *param = (struct queue_iter_param *) data;
6538   struct threads_listing_context *context
6539     = (struct threads_listing_context *) param->input;
6540
6541   if (event->ws.kind == TARGET_WAITKIND_FORKED
6542       || event->ws.kind == TARGET_WAITKIND_VFORKED
6543       || event->ws.kind == TARGET_WAITKIND_THREAD_EXITED)
6544     threads_listing_context_remove (&event->ws, context);
6545
6546   return 1;
6547 }
6548
6549 /* If CONTEXT contains any fork child threads that have not been
6550    reported yet, remove them from the CONTEXT list.  If such a
6551    thread exists it is because we are stopped at a fork catchpoint
6552    and have not yet called follow_fork, which will set up the
6553    host-side data structures for the new process.  */
6554
6555 static void
6556 remove_new_fork_children (struct threads_listing_context *context)
6557 {
6558   struct thread_info * thread;
6559   int pid = -1;
6560   struct notif_client *notif = &notif_client_stop;
6561   struct queue_iter_param param;
6562
6563   /* For any threads stopped at a fork event, remove the corresponding
6564      fork child threads from the CONTEXT list.  */
6565   ALL_NON_EXITED_THREADS (thread)
6566     {
6567       struct target_waitstatus *ws = thread_pending_fork_status (thread);
6568
6569       if (is_pending_fork_parent (ws, pid, thread->ptid))
6570         {
6571           threads_listing_context_remove (ws, context);
6572         }
6573     }
6574
6575   /* Check for any pending fork events (not reported or processed yet)
6576      in process PID and remove those fork child threads from the
6577      CONTEXT list as well.  */
6578   remote_notif_get_pending_events (notif);
6579   param.input = context;
6580   param.output = NULL;
6581   QUEUE_iterate (stop_reply_p, stop_reply_queue,
6582                  remove_child_of_pending_fork, &param);
6583 }
6584
6585 /* Check whether EVENT would prevent a global or process wildcard
6586    vCont action.  */
6587
6588 static int
6589 check_pending_event_prevents_wildcard_vcont_callback
6590   (QUEUE (stop_reply_p) *q,
6591    QUEUE_ITER (stop_reply_p) *iter,
6592    stop_reply_p event,
6593    void *data)
6594 {
6595   struct inferior *inf;
6596   int *may_global_wildcard_vcont = (int *) data;
6597
6598   if (event->ws.kind == TARGET_WAITKIND_NO_RESUMED
6599       || event->ws.kind == TARGET_WAITKIND_NO_HISTORY)
6600     return 1;
6601
6602   if (event->ws.kind == TARGET_WAITKIND_FORKED
6603       || event->ws.kind == TARGET_WAITKIND_VFORKED)
6604     *may_global_wildcard_vcont = 0;
6605
6606   inf = find_inferior_ptid (event->ptid);
6607
6608   /* This may be the first time we heard about this process.
6609      Regardless, we must not do a global wildcard resume, otherwise
6610      we'd resume this process too.  */
6611   *may_global_wildcard_vcont = 0;
6612   if (inf != NULL)
6613     inf->priv->may_wildcard_vcont = 0;
6614
6615   return 1;
6616 }
6617
6618 /* Check whether any event pending in the vStopped queue would prevent
6619    a global or process wildcard vCont action.  Clear
6620    *may_global_wildcard if we can't do a global wildcard (vCont;c),
6621    and clear the event inferior's may_wildcard_vcont flag if we can't
6622    do a process-wide wildcard resume (vCont;c:pPID.-1).  */
6623
6624 static void
6625 check_pending_events_prevent_wildcard_vcont (int *may_global_wildcard)
6626 {
6627   struct notif_client *notif = &notif_client_stop;
6628
6629   remote_notif_get_pending_events (notif);
6630   QUEUE_iterate (stop_reply_p, stop_reply_queue,
6631                  check_pending_event_prevents_wildcard_vcont_callback,
6632                  may_global_wildcard);
6633 }
6634
6635 /* Remove stop replies in the queue if its pid is equal to the given
6636    inferior's pid.  */
6637
6638 static int
6639 remove_stop_reply_for_inferior (QUEUE (stop_reply_p) *q,
6640                                 QUEUE_ITER (stop_reply_p) *iter,
6641                                 stop_reply_p event,
6642                                 void *data)
6643 {
6644   struct queue_iter_param *param = (struct queue_iter_param *) data;
6645   struct inferior *inf = (struct inferior *) param->input;
6646
6647   if (ptid_get_pid (event->ptid) == inf->pid)
6648     {
6649       stop_reply_xfree (event);
6650       QUEUE_remove_elem (stop_reply_p, q, iter);
6651     }
6652
6653   return 1;
6654 }
6655
6656 /* Discard all pending stop replies of inferior INF.  */
6657
6658 static void
6659 discard_pending_stop_replies (struct inferior *inf)
6660 {
6661   struct queue_iter_param param;
6662   struct stop_reply *reply;
6663   struct remote_state *rs = get_remote_state ();
6664   struct remote_notif_state *rns = rs->notif_state;
6665
6666   /* This function can be notified when an inferior exists.  When the
6667      target is not remote, the notification state is NULL.  */
6668   if (rs->remote_desc == NULL)
6669     return;
6670
6671   reply = (struct stop_reply *) rns->pending_event[notif_client_stop.id];
6672
6673   /* Discard the in-flight notification.  */
6674   if (reply != NULL && ptid_get_pid (reply->ptid) == inf->pid)
6675     {
6676       stop_reply_xfree (reply);
6677       rns->pending_event[notif_client_stop.id] = NULL;
6678     }
6679
6680   param.input = inf;
6681   param.output = NULL;
6682   /* Discard the stop replies we have already pulled with
6683      vStopped.  */
6684   QUEUE_iterate (stop_reply_p, stop_reply_queue,
6685                  remove_stop_reply_for_inferior, &param);
6686 }
6687
6688 /* If its remote state is equal to the given remote state,
6689    remove EVENT from the stop reply queue.  */
6690
6691 static int
6692 remove_stop_reply_of_remote_state (QUEUE (stop_reply_p) *q,
6693                                    QUEUE_ITER (stop_reply_p) *iter,
6694                                    stop_reply_p event,
6695                                    void *data)
6696 {
6697   struct queue_iter_param *param = (struct queue_iter_param *) data;
6698   struct remote_state *rs = (struct remote_state *) param->input;
6699
6700   if (event->rs == rs)
6701     {
6702       stop_reply_xfree (event);
6703       QUEUE_remove_elem (stop_reply_p, q, iter);
6704     }
6705
6706   return 1;
6707 }
6708
6709 /* Discard the stop replies for RS in stop_reply_queue.  */
6710
6711 static void
6712 discard_pending_stop_replies_in_queue (struct remote_state *rs)
6713 {
6714   struct queue_iter_param param;
6715
6716   param.input = rs;
6717   param.output = NULL;
6718   /* Discard the stop replies we have already pulled with
6719      vStopped.  */
6720   QUEUE_iterate (stop_reply_p, stop_reply_queue,
6721                  remove_stop_reply_of_remote_state, &param);
6722 }
6723
6724 /* A parameter to pass data in and out.  */
6725
6726 static int
6727 remote_notif_remove_once_on_match (QUEUE (stop_reply_p) *q,
6728                                    QUEUE_ITER (stop_reply_p) *iter,
6729                                    stop_reply_p event,
6730                                    void *data)
6731 {
6732   struct queue_iter_param *param = (struct queue_iter_param *) data;
6733   ptid_t *ptid = (ptid_t *) param->input;
6734
6735   if (ptid_match (event->ptid, *ptid))
6736     {
6737       param->output = event;
6738       QUEUE_remove_elem (stop_reply_p, q, iter);
6739       return 0;
6740     }
6741
6742   return 1;
6743 }
6744
6745 /* Remove the first reply in 'stop_reply_queue' which matches
6746    PTID.  */
6747
6748 static struct stop_reply *
6749 remote_notif_remove_queued_reply (ptid_t ptid)
6750 {
6751   struct queue_iter_param param;
6752
6753   param.input = &ptid;
6754   param.output = NULL;
6755
6756   QUEUE_iterate (stop_reply_p, stop_reply_queue,
6757                  remote_notif_remove_once_on_match, &param);
6758   if (notif_debug)
6759     fprintf_unfiltered (gdb_stdlog,
6760                         "notif: discard queued event: 'Stop' in %s\n",
6761                         target_pid_to_str (ptid));
6762
6763   return param.output;
6764 }
6765
6766 /* Look for a queued stop reply belonging to PTID.  If one is found,
6767    remove it from the queue, and return it.  Returns NULL if none is
6768    found.  If there are still queued events left to process, tell the
6769    event loop to get back to target_wait soon.  */
6770
6771 static struct stop_reply *
6772 queued_stop_reply (ptid_t ptid)
6773 {
6774   struct stop_reply *r = remote_notif_remove_queued_reply (ptid);
6775
6776   if (!QUEUE_is_empty (stop_reply_p, stop_reply_queue))
6777     /* There's still at least an event left.  */
6778     mark_async_event_handler (remote_async_inferior_event_token);
6779
6780   return r;
6781 }
6782
6783 /* Push a fully parsed stop reply in the stop reply queue.  Since we
6784    know that we now have at least one queued event left to pass to the
6785    core side, tell the event loop to get back to target_wait soon.  */
6786
6787 static void
6788 push_stop_reply (struct stop_reply *new_event)
6789 {
6790   QUEUE_enque (stop_reply_p, stop_reply_queue, new_event);
6791
6792   if (notif_debug)
6793     fprintf_unfiltered (gdb_stdlog,
6794                         "notif: push 'Stop' %s to queue %d\n",
6795                         target_pid_to_str (new_event->ptid),
6796                         QUEUE_length (stop_reply_p,
6797                                       stop_reply_queue));
6798
6799   mark_async_event_handler (remote_async_inferior_event_token);
6800 }
6801
6802 static int
6803 stop_reply_match_ptid_and_ws (QUEUE (stop_reply_p) *q,
6804                               QUEUE_ITER (stop_reply_p) *iter,
6805                               struct stop_reply *event,
6806                               void *data)
6807 {
6808   ptid_t *ptid = (ptid_t *) data;
6809
6810   return !(ptid_equal (*ptid, event->ptid)
6811            && event->ws.kind == TARGET_WAITKIND_STOPPED);
6812 }
6813
6814 /* Returns true if we have a stop reply for PTID.  */
6815
6816 static int
6817 peek_stop_reply (ptid_t ptid)
6818 {
6819   return !QUEUE_iterate (stop_reply_p, stop_reply_queue,
6820                          stop_reply_match_ptid_and_ws, &ptid);
6821 }
6822
6823 /* Helper for remote_parse_stop_reply.  Return nonzero if the substring
6824    starting with P and ending with PEND matches PREFIX.  */
6825
6826 static int
6827 strprefix (const char *p, const char *pend, const char *prefix)
6828 {
6829   for ( ; p < pend; p++, prefix++)
6830     if (*p != *prefix)
6831       return 0;
6832   return *prefix == '\0';
6833 }
6834
6835 /* Parse the stop reply in BUF.  Either the function succeeds, and the
6836    result is stored in EVENT, or throws an error.  */
6837
6838 static void
6839 remote_parse_stop_reply (char *buf, struct stop_reply *event)
6840 {
6841   struct remote_arch_state *rsa = get_remote_arch_state ();
6842   ULONGEST addr;
6843   const char *p;
6844   int skipregs = 0;
6845
6846   event->ptid = null_ptid;
6847   event->rs = get_remote_state ();
6848   event->ws.kind = TARGET_WAITKIND_IGNORE;
6849   event->ws.value.integer = 0;
6850   event->stop_reason = TARGET_STOPPED_BY_NO_REASON;
6851   event->regcache = NULL;
6852   event->core = -1;
6853
6854   switch (buf[0])
6855     {
6856     case 'T':           /* Status with PC, SP, FP, ...  */
6857       /* Expedited reply, containing Signal, {regno, reg} repeat.  */
6858       /*  format is:  'Tssn...:r...;n...:r...;n...:r...;#cc', where
6859             ss = signal number
6860             n... = register number
6861             r... = register contents
6862       */
6863
6864       p = &buf[3];      /* after Txx */
6865       while (*p)
6866         {
6867           const char *p1;
6868           int fieldsize;
6869
6870           p1 = strchr (p, ':');
6871           if (p1 == NULL)
6872             error (_("Malformed packet(a) (missing colon): %s\n\
6873 Packet: '%s'\n"),
6874                    p, buf);
6875           if (p == p1)
6876             error (_("Malformed packet(a) (missing register number): %s\n\
6877 Packet: '%s'\n"),
6878                    p, buf);
6879
6880           /* Some "registers" are actually extended stop information.
6881              Note if you're adding a new entry here: GDB 7.9 and
6882              earlier assume that all register "numbers" that start
6883              with an hex digit are real register numbers.  Make sure
6884              the server only sends such a packet if it knows the
6885              client understands it.  */
6886
6887           if (strprefix (p, p1, "thread"))
6888             event->ptid = read_ptid (++p1, &p);
6889           else if (strprefix (p, p1, "syscall_entry"))
6890             {
6891               ULONGEST sysno;
6892
6893               event->ws.kind = TARGET_WAITKIND_SYSCALL_ENTRY;
6894               p = unpack_varlen_hex (++p1, &sysno);
6895               event->ws.value.syscall_number = (int) sysno;
6896             }
6897           else if (strprefix (p, p1, "syscall_return"))
6898             {
6899               ULONGEST sysno;
6900
6901               event->ws.kind = TARGET_WAITKIND_SYSCALL_RETURN;
6902               p = unpack_varlen_hex (++p1, &sysno);
6903               event->ws.value.syscall_number = (int) sysno;
6904             }
6905           else if (strprefix (p, p1, "watch")
6906                    || strprefix (p, p1, "rwatch")
6907                    || strprefix (p, p1, "awatch"))
6908             {
6909               event->stop_reason = TARGET_STOPPED_BY_WATCHPOINT;
6910               p = unpack_varlen_hex (++p1, &addr);
6911               event->watch_data_address = (CORE_ADDR) addr;
6912             }
6913           else if (strprefix (p, p1, "swbreak"))
6914             {
6915               event->stop_reason = TARGET_STOPPED_BY_SW_BREAKPOINT;
6916
6917               /* Make sure the stub doesn't forget to indicate support
6918                  with qSupported.  */
6919               if (packet_support (PACKET_swbreak_feature) != PACKET_ENABLE)
6920                 error (_("Unexpected swbreak stop reason"));
6921
6922               /* The value part is documented as "must be empty",
6923                  though we ignore it, in case we ever decide to make
6924                  use of it in a backward compatible way.  */
6925               p = strchrnul (p1 + 1, ';');
6926             }
6927           else if (strprefix (p, p1, "hwbreak"))
6928             {
6929               event->stop_reason = TARGET_STOPPED_BY_HW_BREAKPOINT;
6930
6931               /* Make sure the stub doesn't forget to indicate support
6932                  with qSupported.  */
6933               if (packet_support (PACKET_hwbreak_feature) != PACKET_ENABLE)
6934                 error (_("Unexpected hwbreak stop reason"));
6935
6936               /* See above.  */
6937               p = strchrnul (p1 + 1, ';');
6938             }
6939           else if (strprefix (p, p1, "library"))
6940             {
6941               event->ws.kind = TARGET_WAITKIND_LOADED;
6942               p = strchrnul (p1 + 1, ';');
6943             }
6944           else if (strprefix (p, p1, "replaylog"))
6945             {
6946               event->ws.kind = TARGET_WAITKIND_NO_HISTORY;
6947               /* p1 will indicate "begin" or "end", but it makes
6948                  no difference for now, so ignore it.  */
6949               p = strchrnul (p1 + 1, ';');
6950             }
6951           else if (strprefix (p, p1, "core"))
6952             {
6953               ULONGEST c;
6954
6955               p = unpack_varlen_hex (++p1, &c);
6956               event->core = c;
6957             }
6958           else if (strprefix (p, p1, "fork"))
6959             {
6960               event->ws.value.related_pid = read_ptid (++p1, &p);
6961               event->ws.kind = TARGET_WAITKIND_FORKED;
6962             }
6963           else if (strprefix (p, p1, "vfork"))
6964             {
6965               event->ws.value.related_pid = read_ptid (++p1, &p);
6966               event->ws.kind = TARGET_WAITKIND_VFORKED;
6967             }
6968           else if (strprefix (p, p1, "vforkdone"))
6969             {
6970               event->ws.kind = TARGET_WAITKIND_VFORK_DONE;
6971               p = strchrnul (p1 + 1, ';');
6972             }
6973           else if (strprefix (p, p1, "exec"))
6974             {
6975               ULONGEST ignored;
6976               char pathname[PATH_MAX];
6977               int pathlen;
6978
6979               /* Determine the length of the execd pathname.  */
6980               p = unpack_varlen_hex (++p1, &ignored);
6981               pathlen = (p - p1) / 2;
6982
6983               /* Save the pathname for event reporting and for
6984                  the next run command.  */
6985               hex2bin (p1, (gdb_byte *) pathname, pathlen);
6986               pathname[pathlen] = '\0';
6987
6988               /* This is freed during event handling.  */
6989               event->ws.value.execd_pathname = xstrdup (pathname);
6990               event->ws.kind = TARGET_WAITKIND_EXECD;
6991
6992               /* Skip the registers included in this packet, since
6993                  they may be for an architecture different from the
6994                  one used by the original program.  */
6995               skipregs = 1;
6996             }
6997           else if (strprefix (p, p1, "create"))
6998             {
6999               event->ws.kind = TARGET_WAITKIND_THREAD_CREATED;
7000               p = strchrnul (p1 + 1, ';');
7001             }
7002           else
7003             {
7004               ULONGEST pnum;
7005               const char *p_temp;
7006
7007               if (skipregs)
7008                 {
7009                   p = strchrnul (p1 + 1, ';');
7010                   p++;
7011                   continue;
7012                 }
7013
7014               /* Maybe a real ``P'' register number.  */
7015               p_temp = unpack_varlen_hex (p, &pnum);
7016               /* If the first invalid character is the colon, we got a
7017                  register number.  Otherwise, it's an unknown stop
7018                  reason.  */
7019               if (p_temp == p1)
7020                 {
7021                   struct packet_reg *reg = packet_reg_from_pnum (rsa, pnum);
7022                   cached_reg_t cached_reg;
7023                   struct gdbarch *gdbarch = target_gdbarch ();
7024
7025                   if (reg == NULL)
7026                     error (_("Remote sent bad register number %s: %s\n\
7027 Packet: '%s'\n"),
7028                            hex_string (pnum), p, buf);
7029
7030                   cached_reg.num = reg->regnum;
7031                   cached_reg.data = (gdb_byte *)
7032                     xmalloc (register_size (gdbarch, reg->regnum));
7033
7034                   p = p1 + 1;
7035                   fieldsize = hex2bin (p, cached_reg.data,
7036                                        register_size (gdbarch, reg->regnum));
7037                   p += 2 * fieldsize;
7038                   if (fieldsize < register_size (gdbarch, reg->regnum))
7039                     warning (_("Remote reply is too short: %s"), buf);
7040
7041                   VEC_safe_push (cached_reg_t, event->regcache, &cached_reg);
7042                 }
7043               else
7044                 {
7045                   /* Not a number.  Silently skip unknown optional
7046                      info.  */
7047                   p = strchrnul (p1 + 1, ';');
7048                 }
7049             }
7050
7051           if (*p != ';')
7052             error (_("Remote register badly formatted: %s\nhere: %s"),
7053                    buf, p);
7054           ++p;
7055         }
7056
7057       if (event->ws.kind != TARGET_WAITKIND_IGNORE)
7058         break;
7059
7060       /* fall through */
7061     case 'S':           /* Old style status, just signal only.  */
7062       {
7063         int sig;
7064
7065         event->ws.kind = TARGET_WAITKIND_STOPPED;
7066         sig = (fromhex (buf[1]) << 4) + fromhex (buf[2]);
7067         if (GDB_SIGNAL_FIRST <= sig && sig < GDB_SIGNAL_LAST)
7068           event->ws.value.sig = (enum gdb_signal) sig;
7069         else
7070           event->ws.value.sig = GDB_SIGNAL_UNKNOWN;
7071       }
7072       break;
7073     case 'w':           /* Thread exited.  */
7074       {
7075         const char *p;
7076         ULONGEST value;
7077
7078         event->ws.kind = TARGET_WAITKIND_THREAD_EXITED;
7079         p = unpack_varlen_hex (&buf[1], &value);
7080         event->ws.value.integer = value;
7081         if (*p != ';')
7082           error (_("stop reply packet badly formatted: %s"), buf);
7083         event->ptid = read_ptid (++p, NULL);
7084         break;
7085       }
7086     case 'W':           /* Target exited.  */
7087     case 'X':
7088       {
7089         const char *p;
7090         int pid;
7091         ULONGEST value;
7092
7093         /* GDB used to accept only 2 hex chars here.  Stubs should
7094            only send more if they detect GDB supports multi-process
7095            support.  */
7096         p = unpack_varlen_hex (&buf[1], &value);
7097
7098         if (buf[0] == 'W')
7099           {
7100             /* The remote process exited.  */
7101             event->ws.kind = TARGET_WAITKIND_EXITED;
7102             event->ws.value.integer = value;
7103           }
7104         else
7105           {
7106             /* The remote process exited with a signal.  */
7107             event->ws.kind = TARGET_WAITKIND_SIGNALLED;
7108             if (GDB_SIGNAL_FIRST <= value && value < GDB_SIGNAL_LAST)
7109               event->ws.value.sig = (enum gdb_signal) value;
7110             else
7111               event->ws.value.sig = GDB_SIGNAL_UNKNOWN;
7112           }
7113
7114         /* If no process is specified, assume inferior_ptid.  */
7115         pid = ptid_get_pid (inferior_ptid);
7116         if (*p == '\0')
7117           ;
7118         else if (*p == ';')
7119           {
7120             p++;
7121
7122             if (*p == '\0')
7123               ;
7124             else if (startswith (p, "process:"))
7125               {
7126                 ULONGEST upid;
7127
7128                 p += sizeof ("process:") - 1;
7129                 unpack_varlen_hex (p, &upid);
7130                 pid = upid;
7131               }
7132             else
7133               error (_("unknown stop reply packet: %s"), buf);
7134           }
7135         else
7136           error (_("unknown stop reply packet: %s"), buf);
7137         event->ptid = pid_to_ptid (pid);
7138       }
7139       break;
7140     case 'N':
7141       event->ws.kind = TARGET_WAITKIND_NO_RESUMED;
7142       event->ptid = minus_one_ptid;
7143       break;
7144     }
7145
7146   if (target_is_non_stop_p () && ptid_equal (event->ptid, null_ptid))
7147     error (_("No process or thread specified in stop reply: %s"), buf);
7148 }
7149
7150 /* When the stub wants to tell GDB about a new notification reply, it
7151    sends a notification (%Stop, for example).  Those can come it at
7152    any time, hence, we have to make sure that any pending
7153    putpkt/getpkt sequence we're making is finished, before querying
7154    the stub for more events with the corresponding ack command
7155    (vStopped, for example).  E.g., if we started a vStopped sequence
7156    immediately upon receiving the notification, something like this
7157    could happen:
7158
7159     1.1) --> Hg 1
7160     1.2) <-- OK
7161     1.3) --> g
7162     1.4) <-- %Stop
7163     1.5) --> vStopped
7164     1.6) <-- (registers reply to step #1.3)
7165
7166    Obviously, the reply in step #1.6 would be unexpected to a vStopped
7167    query.
7168
7169    To solve this, whenever we parse a %Stop notification successfully,
7170    we mark the REMOTE_ASYNC_GET_PENDING_EVENTS_TOKEN, and carry on
7171    doing whatever we were doing:
7172
7173     2.1) --> Hg 1
7174     2.2) <-- OK
7175     2.3) --> g
7176     2.4) <-- %Stop
7177       <GDB marks the REMOTE_ASYNC_GET_PENDING_EVENTS_TOKEN>
7178     2.5) <-- (registers reply to step #2.3)
7179
7180    Eventualy after step #2.5, we return to the event loop, which
7181    notices there's an event on the
7182    REMOTE_ASYNC_GET_PENDING_EVENTS_TOKEN event and calls the
7183    associated callback --- the function below.  At this point, we're
7184    always safe to start a vStopped sequence. :
7185
7186     2.6) --> vStopped
7187     2.7) <-- T05 thread:2
7188     2.8) --> vStopped
7189     2.9) --> OK
7190 */
7191
7192 void
7193 remote_notif_get_pending_events (struct notif_client *nc)
7194 {
7195   struct remote_state *rs = get_remote_state ();
7196
7197   if (rs->notif_state->pending_event[nc->id] != NULL)
7198     {
7199       if (notif_debug)
7200         fprintf_unfiltered (gdb_stdlog,
7201                             "notif: process: '%s' ack pending event\n",
7202                             nc->name);
7203
7204       /* acknowledge */
7205       nc->ack (nc, rs->buf, rs->notif_state->pending_event[nc->id]);
7206       rs->notif_state->pending_event[nc->id] = NULL;
7207
7208       while (1)
7209         {
7210           getpkt (&rs->buf, &rs->buf_size, 0);
7211           if (strcmp (rs->buf, "OK") == 0)
7212             break;
7213           else
7214             remote_notif_ack (nc, rs->buf);
7215         }
7216     }
7217   else
7218     {
7219       if (notif_debug)
7220         fprintf_unfiltered (gdb_stdlog,
7221                             "notif: process: '%s' no pending reply\n",
7222                             nc->name);
7223     }
7224 }
7225
7226 /* Called when it is decided that STOP_REPLY holds the info of the
7227    event that is to be returned to the core.  This function always
7228    destroys STOP_REPLY.  */
7229
7230 static ptid_t
7231 process_stop_reply (struct stop_reply *stop_reply,
7232                     struct target_waitstatus *status)
7233 {
7234   ptid_t ptid;
7235
7236   *status = stop_reply->ws;
7237   ptid = stop_reply->ptid;
7238
7239   /* If no thread/process was reported by the stub, assume the current
7240      inferior.  */
7241   if (ptid_equal (ptid, null_ptid))
7242     ptid = inferior_ptid;
7243
7244   if (status->kind != TARGET_WAITKIND_EXITED
7245       && status->kind != TARGET_WAITKIND_SIGNALLED
7246       && status->kind != TARGET_WAITKIND_NO_RESUMED)
7247     {
7248       struct private_thread_info *remote_thr;
7249
7250       /* Expedited registers.  */
7251       if (stop_reply->regcache)
7252         {
7253           struct regcache *regcache
7254             = get_thread_arch_regcache (ptid, target_gdbarch ());
7255           cached_reg_t *reg;
7256           int ix;
7257
7258           for (ix = 0;
7259                VEC_iterate (cached_reg_t, stop_reply->regcache, ix, reg);
7260                ix++)
7261           {
7262             regcache_raw_supply (regcache, reg->num, reg->data);
7263             xfree (reg->data);
7264           }
7265
7266           VEC_free (cached_reg_t, stop_reply->regcache);
7267         }
7268
7269       remote_notice_new_inferior (ptid, 0);
7270       remote_thr = get_private_info_ptid (ptid);
7271       remote_thr->core = stop_reply->core;
7272       remote_thr->stop_reason = stop_reply->stop_reason;
7273       remote_thr->watch_data_address = stop_reply->watch_data_address;
7274       remote_thr->vcont_resumed = 0;
7275     }
7276
7277   stop_reply_xfree (stop_reply);
7278   return ptid;
7279 }
7280
7281 /* The non-stop mode version of target_wait.  */
7282
7283 static ptid_t
7284 remote_wait_ns (ptid_t ptid, struct target_waitstatus *status, int options)
7285 {
7286   struct remote_state *rs = get_remote_state ();
7287   struct stop_reply *stop_reply;
7288   int ret;
7289   int is_notif = 0;
7290
7291   /* If in non-stop mode, get out of getpkt even if a
7292      notification is received.  */
7293
7294   ret = getpkt_or_notif_sane (&rs->buf, &rs->buf_size,
7295                               0 /* forever */, &is_notif);
7296   while (1)
7297     {
7298       if (ret != -1 && !is_notif)
7299         switch (rs->buf[0])
7300           {
7301           case 'E':             /* Error of some sort.  */
7302             /* We're out of sync with the target now.  Did it continue
7303                or not?  We can't tell which thread it was in non-stop,
7304                so just ignore this.  */
7305             warning (_("Remote failure reply: %s"), rs->buf);
7306             break;
7307           case 'O':             /* Console output.  */
7308             remote_console_output (rs->buf + 1);
7309             break;
7310           default:
7311             warning (_("Invalid remote reply: %s"), rs->buf);
7312             break;
7313           }
7314
7315       /* Acknowledge a pending stop reply that may have arrived in the
7316          mean time.  */
7317       if (rs->notif_state->pending_event[notif_client_stop.id] != NULL)
7318         remote_notif_get_pending_events (&notif_client_stop);
7319
7320       /* If indeed we noticed a stop reply, we're done.  */
7321       stop_reply = queued_stop_reply (ptid);
7322       if (stop_reply != NULL)
7323         return process_stop_reply (stop_reply, status);
7324
7325       /* Still no event.  If we're just polling for an event, then
7326          return to the event loop.  */
7327       if (options & TARGET_WNOHANG)
7328         {
7329           status->kind = TARGET_WAITKIND_IGNORE;
7330           return minus_one_ptid;
7331         }
7332
7333       /* Otherwise do a blocking wait.  */
7334       ret = getpkt_or_notif_sane (&rs->buf, &rs->buf_size,
7335                                   1 /* forever */, &is_notif);
7336     }
7337 }
7338
7339 /* Wait until the remote machine stops, then return, storing status in
7340    STATUS just as `wait' would.  */
7341
7342 static ptid_t
7343 remote_wait_as (ptid_t ptid, struct target_waitstatus *status, int options)
7344 {
7345   struct remote_state *rs = get_remote_state ();
7346   ptid_t event_ptid = null_ptid;
7347   char *buf;
7348   struct stop_reply *stop_reply;
7349
7350  again:
7351
7352   status->kind = TARGET_WAITKIND_IGNORE;
7353   status->value.integer = 0;
7354
7355   stop_reply = queued_stop_reply (ptid);
7356   if (stop_reply != NULL)
7357     return process_stop_reply (stop_reply, status);
7358
7359   if (rs->cached_wait_status)
7360     /* Use the cached wait status, but only once.  */
7361     rs->cached_wait_status = 0;
7362   else
7363     {
7364       int ret;
7365       int is_notif;
7366       int forever = ((options & TARGET_WNOHANG) == 0
7367                      && wait_forever_enabled_p);
7368
7369       if (!rs->waiting_for_stop_reply)
7370         {
7371           status->kind = TARGET_WAITKIND_NO_RESUMED;
7372           return minus_one_ptid;
7373         }
7374
7375       /* FIXME: cagney/1999-09-27: If we're in async mode we should
7376          _never_ wait for ever -> test on target_is_async_p().
7377          However, before we do that we need to ensure that the caller
7378          knows how to take the target into/out of async mode.  */
7379       ret = getpkt_or_notif_sane (&rs->buf, &rs->buf_size,
7380                                   forever, &is_notif);
7381
7382       /* GDB gets a notification.  Return to core as this event is
7383          not interesting.  */
7384       if (ret != -1 && is_notif)
7385         return minus_one_ptid;
7386
7387       if (ret == -1 && (options & TARGET_WNOHANG) != 0)
7388         return minus_one_ptid;
7389     }
7390
7391   buf = rs->buf;
7392
7393   /* Assume that the target has acknowledged Ctrl-C unless we receive
7394      an 'F' or 'O' packet.  */
7395   if (buf[0] != 'F' && buf[0] != 'O')
7396     rs->ctrlc_pending_p = 0;
7397
7398   switch (buf[0])
7399     {
7400     case 'E':           /* Error of some sort.  */
7401       /* We're out of sync with the target now.  Did it continue or
7402          not?  Not is more likely, so report a stop.  */
7403       rs->waiting_for_stop_reply = 0;
7404
7405       warning (_("Remote failure reply: %s"), buf);
7406       status->kind = TARGET_WAITKIND_STOPPED;
7407       status->value.sig = GDB_SIGNAL_0;
7408       break;
7409     case 'F':           /* File-I/O request.  */
7410       /* GDB may access the inferior memory while handling the File-I/O
7411          request, but we don't want GDB accessing memory while waiting
7412          for a stop reply.  See the comments in putpkt_binary.  Set
7413          waiting_for_stop_reply to 0 temporarily.  */
7414       rs->waiting_for_stop_reply = 0;
7415       remote_fileio_request (buf, rs->ctrlc_pending_p);
7416       rs->ctrlc_pending_p = 0;
7417       /* GDB handled the File-I/O request, and the target is running
7418          again.  Keep waiting for events.  */
7419       rs->waiting_for_stop_reply = 1;
7420       break;
7421     case 'N': case 'T': case 'S': case 'X': case 'W':
7422       {
7423         struct stop_reply *stop_reply;
7424
7425         /* There is a stop reply to handle.  */
7426         rs->waiting_for_stop_reply = 0;
7427
7428         stop_reply
7429           = (struct stop_reply *) remote_notif_parse (&notif_client_stop,
7430                                                       rs->buf);
7431
7432         event_ptid = process_stop_reply (stop_reply, status);
7433         break;
7434       }
7435     case 'O':           /* Console output.  */
7436       remote_console_output (buf + 1);
7437       break;
7438     case '\0':
7439       if (rs->last_sent_signal != GDB_SIGNAL_0)
7440         {
7441           /* Zero length reply means that we tried 'S' or 'C' and the
7442              remote system doesn't support it.  */
7443           target_terminal::ours_for_output ();
7444           printf_filtered
7445             ("Can't send signals to this remote system.  %s not sent.\n",
7446              gdb_signal_to_name (rs->last_sent_signal));
7447           rs->last_sent_signal = GDB_SIGNAL_0;
7448           target_terminal::inferior ();
7449
7450           strcpy (buf, rs->last_sent_step ? "s" : "c");
7451           putpkt (buf);
7452           break;
7453         }
7454       /* else fallthrough */
7455     default:
7456       warning (_("Invalid remote reply: %s"), buf);
7457       break;
7458     }
7459
7460   if (status->kind == TARGET_WAITKIND_NO_RESUMED)
7461     return minus_one_ptid;
7462   else if (status->kind == TARGET_WAITKIND_IGNORE)
7463     {
7464       /* Nothing interesting happened.  If we're doing a non-blocking
7465          poll, we're done.  Otherwise, go back to waiting.  */
7466       if (options & TARGET_WNOHANG)
7467         return minus_one_ptid;
7468       else
7469         goto again;
7470     }
7471   else if (status->kind != TARGET_WAITKIND_EXITED
7472            && status->kind != TARGET_WAITKIND_SIGNALLED)
7473     {
7474       if (!ptid_equal (event_ptid, null_ptid))
7475         record_currthread (rs, event_ptid);
7476       else
7477         event_ptid = inferior_ptid;
7478     }
7479   else
7480     /* A process exit.  Invalidate our notion of current thread.  */
7481     record_currthread (rs, minus_one_ptid);
7482
7483   return event_ptid;
7484 }
7485
7486 /* Wait until the remote machine stops, then return, storing status in
7487    STATUS just as `wait' would.  */
7488
7489 static ptid_t
7490 remote_wait (struct target_ops *ops,
7491              ptid_t ptid, struct target_waitstatus *status, int options)
7492 {
7493   ptid_t event_ptid;
7494
7495   if (target_is_non_stop_p ())
7496     event_ptid = remote_wait_ns (ptid, status, options);
7497   else
7498     event_ptid = remote_wait_as (ptid, status, options);
7499
7500   if (target_is_async_p ())
7501     {
7502       /* If there are are events left in the queue tell the event loop
7503          to return here.  */
7504       if (!QUEUE_is_empty (stop_reply_p, stop_reply_queue))
7505         mark_async_event_handler (remote_async_inferior_event_token);
7506     }
7507
7508   return event_ptid;
7509 }
7510
7511 /* Fetch a single register using a 'p' packet.  */
7512
7513 static int
7514 fetch_register_using_p (struct regcache *regcache, struct packet_reg *reg)
7515 {
7516   struct gdbarch *gdbarch = get_regcache_arch (regcache);
7517   struct remote_state *rs = get_remote_state ();
7518   char *buf, *p;
7519   gdb_byte *regp = (gdb_byte *) alloca (register_size (gdbarch, reg->regnum));
7520   int i;
7521
7522   if (packet_support (PACKET_p) == PACKET_DISABLE)
7523     return 0;
7524
7525   if (reg->pnum == -1)
7526     return 0;
7527
7528   p = rs->buf;
7529   *p++ = 'p';
7530   p += hexnumstr (p, reg->pnum);
7531   *p++ = '\0';
7532   putpkt (rs->buf);
7533   getpkt (&rs->buf, &rs->buf_size, 0);
7534
7535   buf = rs->buf;
7536
7537   switch (packet_ok (buf, &remote_protocol_packets[PACKET_p]))
7538     {
7539     case PACKET_OK:
7540       break;
7541     case PACKET_UNKNOWN:
7542       return 0;
7543     case PACKET_ERROR:
7544       error (_("Could not fetch register \"%s\"; remote failure reply '%s'"),
7545              gdbarch_register_name (get_regcache_arch (regcache), 
7546                                     reg->regnum), 
7547              buf);
7548     }
7549
7550   /* If this register is unfetchable, tell the regcache.  */
7551   if (buf[0] == 'x')
7552     {
7553       regcache_raw_supply (regcache, reg->regnum, NULL);
7554       return 1;
7555     }
7556
7557   /* Otherwise, parse and supply the value.  */
7558   p = buf;
7559   i = 0;
7560   while (p[0] != 0)
7561     {
7562       if (p[1] == 0)
7563         error (_("fetch_register_using_p: early buf termination"));
7564
7565       regp[i++] = fromhex (p[0]) * 16 + fromhex (p[1]);
7566       p += 2;
7567     }
7568   regcache_raw_supply (regcache, reg->regnum, regp);
7569   return 1;
7570 }
7571
7572 /* Fetch the registers included in the target's 'g' packet.  */
7573
7574 static int
7575 send_g_packet (void)
7576 {
7577   struct remote_state *rs = get_remote_state ();
7578   int buf_len;
7579
7580   xsnprintf (rs->buf, get_remote_packet_size (), "g");
7581   remote_send (&rs->buf, &rs->buf_size);
7582
7583   /* We can get out of synch in various cases.  If the first character
7584      in the buffer is not a hex character, assume that has happened
7585      and try to fetch another packet to read.  */
7586   while ((rs->buf[0] < '0' || rs->buf[0] > '9')
7587          && (rs->buf[0] < 'A' || rs->buf[0] > 'F')
7588          && (rs->buf[0] < 'a' || rs->buf[0] > 'f')
7589          && rs->buf[0] != 'x')  /* New: unavailable register value.  */
7590     {
7591       if (remote_debug)
7592         fprintf_unfiltered (gdb_stdlog,
7593                             "Bad register packet; fetching a new packet\n");
7594       getpkt (&rs->buf, &rs->buf_size, 0);
7595     }
7596
7597   buf_len = strlen (rs->buf);
7598
7599   /* Sanity check the received packet.  */
7600   if (buf_len % 2 != 0)
7601     error (_("Remote 'g' packet reply is of odd length: %s"), rs->buf);
7602
7603   return buf_len / 2;
7604 }
7605
7606 static void
7607 process_g_packet (struct regcache *regcache)
7608 {
7609   struct gdbarch *gdbarch = get_regcache_arch (regcache);
7610   struct remote_state *rs = get_remote_state ();
7611   struct remote_arch_state *rsa = get_remote_arch_state ();
7612   int i, buf_len;
7613   char *p;
7614   char *regs;
7615
7616   buf_len = strlen (rs->buf);
7617
7618   /* Further sanity checks, with knowledge of the architecture.  */
7619   if (buf_len > 2 * rsa->sizeof_g_packet)
7620     error (_("Remote 'g' packet reply is too long (expected %ld bytes, got %d "
7621              "bytes): %s"), rsa->sizeof_g_packet, buf_len / 2, rs->buf);
7622
7623   /* Save the size of the packet sent to us by the target.  It is used
7624      as a heuristic when determining the max size of packets that the
7625      target can safely receive.  */
7626   if (rsa->actual_register_packet_size == 0)
7627     rsa->actual_register_packet_size = buf_len;
7628
7629   /* If this is smaller than we guessed the 'g' packet would be,
7630      update our records.  A 'g' reply that doesn't include a register's
7631      value implies either that the register is not available, or that
7632      the 'p' packet must be used.  */
7633   if (buf_len < 2 * rsa->sizeof_g_packet)
7634     {
7635       long sizeof_g_packet = buf_len / 2;
7636
7637       for (i = 0; i < gdbarch_num_regs (gdbarch); i++)
7638         {
7639           long offset = rsa->regs[i].offset;
7640           long reg_size = register_size (gdbarch, i);
7641
7642           if (rsa->regs[i].pnum == -1)
7643             continue;
7644
7645           if (offset >= sizeof_g_packet)
7646             rsa->regs[i].in_g_packet = 0;
7647           else if (offset + reg_size > sizeof_g_packet)
7648             error (_("Truncated register %d in remote 'g' packet"), i);
7649           else
7650             rsa->regs[i].in_g_packet = 1;
7651         }
7652
7653       /* Looks valid enough, we can assume this is the correct length
7654          for a 'g' packet.  It's important not to adjust
7655          rsa->sizeof_g_packet if we have truncated registers otherwise
7656          this "if" won't be run the next time the method is called
7657          with a packet of the same size and one of the internal errors
7658          below will trigger instead.  */
7659       rsa->sizeof_g_packet = sizeof_g_packet;
7660     }
7661
7662   regs = (char *) alloca (rsa->sizeof_g_packet);
7663
7664   /* Unimplemented registers read as all bits zero.  */
7665   memset (regs, 0, rsa->sizeof_g_packet);
7666
7667   /* Reply describes registers byte by byte, each byte encoded as two
7668      hex characters.  Suck them all up, then supply them to the
7669      register cacheing/storage mechanism.  */
7670
7671   p = rs->buf;
7672   for (i = 0; i < rsa->sizeof_g_packet; i++)
7673     {
7674       if (p[0] == 0 || p[1] == 0)
7675         /* This shouldn't happen - we adjusted sizeof_g_packet above.  */
7676         internal_error (__FILE__, __LINE__,
7677                         _("unexpected end of 'g' packet reply"));
7678
7679       if (p[0] == 'x' && p[1] == 'x')
7680         regs[i] = 0;            /* 'x' */
7681       else
7682         regs[i] = fromhex (p[0]) * 16 + fromhex (p[1]);
7683       p += 2;
7684     }
7685
7686   for (i = 0; i < gdbarch_num_regs (gdbarch); i++)
7687     {
7688       struct packet_reg *r = &rsa->regs[i];
7689       long reg_size = register_size (gdbarch, i);
7690
7691       if (r->in_g_packet)
7692         {
7693           if ((r->offset + reg_size) * 2 > strlen (rs->buf))
7694             /* This shouldn't happen - we adjusted in_g_packet above.  */
7695             internal_error (__FILE__, __LINE__,
7696                             _("unexpected end of 'g' packet reply"));
7697           else if (rs->buf[r->offset * 2] == 'x')
7698             {
7699               gdb_assert (r->offset * 2 < strlen (rs->buf));
7700               /* The register isn't available, mark it as such (at
7701                  the same time setting the value to zero).  */
7702               regcache_raw_supply (regcache, r->regnum, NULL);
7703             }
7704           else
7705             regcache_raw_supply (regcache, r->regnum,
7706                                  regs + r->offset);
7707         }
7708     }
7709 }
7710
7711 static void
7712 fetch_registers_using_g (struct regcache *regcache)
7713 {
7714   send_g_packet ();
7715   process_g_packet (regcache);
7716 }
7717
7718 /* Make the remote selected traceframe match GDB's selected
7719    traceframe.  */
7720
7721 static void
7722 set_remote_traceframe (void)
7723 {
7724   int newnum;
7725   struct remote_state *rs = get_remote_state ();
7726
7727   if (rs->remote_traceframe_number == get_traceframe_number ())
7728     return;
7729
7730   /* Avoid recursion, remote_trace_find calls us again.  */
7731   rs->remote_traceframe_number = get_traceframe_number ();
7732
7733   newnum = target_trace_find (tfind_number,
7734                               get_traceframe_number (), 0, 0, NULL);
7735
7736   /* Should not happen.  If it does, all bets are off.  */
7737   if (newnum != get_traceframe_number ())
7738     warning (_("could not set remote traceframe"));
7739 }
7740
7741 static void
7742 remote_fetch_registers (struct target_ops *ops,
7743                         struct regcache *regcache, int regnum)
7744 {
7745   struct remote_arch_state *rsa = get_remote_arch_state ();
7746   int i;
7747
7748   set_remote_traceframe ();
7749   set_general_thread (regcache_get_ptid (regcache));
7750
7751   if (regnum >= 0)
7752     {
7753       struct packet_reg *reg = packet_reg_from_regnum (rsa, regnum);
7754
7755       gdb_assert (reg != NULL);
7756
7757       /* If this register might be in the 'g' packet, try that first -
7758          we are likely to read more than one register.  If this is the
7759          first 'g' packet, we might be overly optimistic about its
7760          contents, so fall back to 'p'.  */
7761       if (reg->in_g_packet)
7762         {
7763           fetch_registers_using_g (regcache);
7764           if (reg->in_g_packet)
7765             return;
7766         }
7767
7768       if (fetch_register_using_p (regcache, reg))
7769         return;
7770
7771       /* This register is not available.  */
7772       regcache_raw_supply (regcache, reg->regnum, NULL);
7773
7774       return;
7775     }
7776
7777   fetch_registers_using_g (regcache);
7778
7779   for (i = 0; i < gdbarch_num_regs (get_regcache_arch (regcache)); i++)
7780     if (!rsa->regs[i].in_g_packet)
7781       if (!fetch_register_using_p (regcache, &rsa->regs[i]))
7782         {
7783           /* This register is not available.  */
7784           regcache_raw_supply (regcache, i, NULL);
7785         }
7786 }
7787
7788 /* Prepare to store registers.  Since we may send them all (using a
7789    'G' request), we have to read out the ones we don't want to change
7790    first.  */
7791
7792 static void
7793 remote_prepare_to_store (struct target_ops *self, struct regcache *regcache)
7794 {
7795   struct remote_arch_state *rsa = get_remote_arch_state ();
7796   int i;
7797
7798   /* Make sure the entire registers array is valid.  */
7799   switch (packet_support (PACKET_P))
7800     {
7801     case PACKET_DISABLE:
7802     case PACKET_SUPPORT_UNKNOWN:
7803       /* Make sure all the necessary registers are cached.  */
7804       for (i = 0; i < gdbarch_num_regs (get_regcache_arch (regcache)); i++)
7805         if (rsa->regs[i].in_g_packet)
7806           regcache_raw_update (regcache, rsa->regs[i].regnum);
7807       break;
7808     case PACKET_ENABLE:
7809       break;
7810     }
7811 }
7812
7813 /* Helper: Attempt to store REGNUM using the P packet.  Return fail IFF
7814    packet was not recognized.  */
7815
7816 static int
7817 store_register_using_P (const struct regcache *regcache, 
7818                         struct packet_reg *reg)
7819 {
7820   struct gdbarch *gdbarch = get_regcache_arch (regcache);
7821   struct remote_state *rs = get_remote_state ();
7822   /* Try storing a single register.  */
7823   char *buf = rs->buf;
7824   gdb_byte *regp = (gdb_byte *) alloca (register_size (gdbarch, reg->regnum));
7825   char *p;
7826
7827   if (packet_support (PACKET_P) == PACKET_DISABLE)
7828     return 0;
7829
7830   if (reg->pnum == -1)
7831     return 0;
7832
7833   xsnprintf (buf, get_remote_packet_size (), "P%s=", phex_nz (reg->pnum, 0));
7834   p = buf + strlen (buf);
7835   regcache_raw_collect (regcache, reg->regnum, regp);
7836   bin2hex (regp, p, register_size (gdbarch, reg->regnum));
7837   putpkt (rs->buf);
7838   getpkt (&rs->buf, &rs->buf_size, 0);
7839
7840   switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_P]))
7841     {
7842     case PACKET_OK:
7843       return 1;
7844     case PACKET_ERROR:
7845       error (_("Could not write register \"%s\"; remote failure reply '%s'"),
7846              gdbarch_register_name (gdbarch, reg->regnum), rs->buf);
7847     case PACKET_UNKNOWN:
7848       return 0;
7849     default:
7850       internal_error (__FILE__, __LINE__, _("Bad result from packet_ok"));
7851     }
7852 }
7853
7854 /* Store register REGNUM, or all registers if REGNUM == -1, from the
7855    contents of the register cache buffer.  FIXME: ignores errors.  */
7856
7857 static void
7858 store_registers_using_G (const struct regcache *regcache)
7859 {
7860   struct remote_state *rs = get_remote_state ();
7861   struct remote_arch_state *rsa = get_remote_arch_state ();
7862   gdb_byte *regs;
7863   char *p;
7864
7865   /* Extract all the registers in the regcache copying them into a
7866      local buffer.  */
7867   {
7868     int i;
7869
7870     regs = (gdb_byte *) alloca (rsa->sizeof_g_packet);
7871     memset (regs, 0, rsa->sizeof_g_packet);
7872     for (i = 0; i < gdbarch_num_regs (get_regcache_arch (regcache)); i++)
7873       {
7874         struct packet_reg *r = &rsa->regs[i];
7875
7876         if (r->in_g_packet)
7877           regcache_raw_collect (regcache, r->regnum, regs + r->offset);
7878       }
7879   }
7880
7881   /* Command describes registers byte by byte,
7882      each byte encoded as two hex characters.  */
7883   p = rs->buf;
7884   *p++ = 'G';
7885   bin2hex (regs, p, rsa->sizeof_g_packet);
7886   putpkt (rs->buf);
7887   getpkt (&rs->buf, &rs->buf_size, 0);
7888   if (packet_check_result (rs->buf) == PACKET_ERROR)
7889     error (_("Could not write registers; remote failure reply '%s'"), 
7890            rs->buf);
7891 }
7892
7893 /* Store register REGNUM, or all registers if REGNUM == -1, from the contents
7894    of the register cache buffer.  FIXME: ignores errors.  */
7895
7896 static void
7897 remote_store_registers (struct target_ops *ops,
7898                         struct regcache *regcache, int regnum)
7899 {
7900   struct remote_arch_state *rsa = get_remote_arch_state ();
7901   int i;
7902
7903   set_remote_traceframe ();
7904   set_general_thread (regcache_get_ptid (regcache));
7905
7906   if (regnum >= 0)
7907     {
7908       struct packet_reg *reg = packet_reg_from_regnum (rsa, regnum);
7909
7910       gdb_assert (reg != NULL);
7911
7912       /* Always prefer to store registers using the 'P' packet if
7913          possible; we often change only a small number of registers.
7914          Sometimes we change a larger number; we'd need help from a
7915          higher layer to know to use 'G'.  */
7916       if (store_register_using_P (regcache, reg))
7917         return;
7918
7919       /* For now, don't complain if we have no way to write the
7920          register.  GDB loses track of unavailable registers too
7921          easily.  Some day, this may be an error.  We don't have
7922          any way to read the register, either...  */
7923       if (!reg->in_g_packet)
7924         return;
7925
7926       store_registers_using_G (regcache);
7927       return;
7928     }
7929
7930   store_registers_using_G (regcache);
7931
7932   for (i = 0; i < gdbarch_num_regs (get_regcache_arch (regcache)); i++)
7933     if (!rsa->regs[i].in_g_packet)
7934       if (!store_register_using_P (regcache, &rsa->regs[i]))
7935         /* See above for why we do not issue an error here.  */
7936         continue;
7937 }
7938 \f
7939
7940 /* Return the number of hex digits in num.  */
7941
7942 static int
7943 hexnumlen (ULONGEST num)
7944 {
7945   int i;
7946
7947   for (i = 0; num != 0; i++)
7948     num >>= 4;
7949
7950   return std::max (i, 1);
7951 }
7952
7953 /* Set BUF to the minimum number of hex digits representing NUM.  */
7954
7955 static int
7956 hexnumstr (char *buf, ULONGEST num)
7957 {
7958   int len = hexnumlen (num);
7959
7960   return hexnumnstr (buf, num, len);
7961 }
7962
7963
7964 /* Set BUF to the hex digits representing NUM, padded to WIDTH characters.  */
7965
7966 static int
7967 hexnumnstr (char *buf, ULONGEST num, int width)
7968 {
7969   int i;
7970
7971   buf[width] = '\0';
7972
7973   for (i = width - 1; i >= 0; i--)
7974     {
7975       buf[i] = "0123456789abcdef"[(num & 0xf)];
7976       num >>= 4;
7977     }
7978
7979   return width;
7980 }
7981
7982 /* Mask all but the least significant REMOTE_ADDRESS_SIZE bits.  */
7983
7984 static CORE_ADDR
7985 remote_address_masked (CORE_ADDR addr)
7986 {
7987   unsigned int address_size = remote_address_size;
7988
7989   /* If "remoteaddresssize" was not set, default to target address size.  */
7990   if (!address_size)
7991     address_size = gdbarch_addr_bit (target_gdbarch ());
7992
7993   if (address_size > 0
7994       && address_size < (sizeof (ULONGEST) * 8))
7995     {
7996       /* Only create a mask when that mask can safely be constructed
7997          in a ULONGEST variable.  */
7998       ULONGEST mask = 1;
7999
8000       mask = (mask << address_size) - 1;
8001       addr &= mask;
8002     }
8003   return addr;
8004 }
8005
8006 /* Determine whether the remote target supports binary downloading.
8007    This is accomplished by sending a no-op memory write of zero length
8008    to the target at the specified address. It does not suffice to send
8009    the whole packet, since many stubs strip the eighth bit and
8010    subsequently compute a wrong checksum, which causes real havoc with
8011    remote_write_bytes.
8012
8013    NOTE: This can still lose if the serial line is not eight-bit
8014    clean.  In cases like this, the user should clear "remote
8015    X-packet".  */
8016
8017 static void
8018 check_binary_download (CORE_ADDR addr)
8019 {
8020   struct remote_state *rs = get_remote_state ();
8021
8022   switch (packet_support (PACKET_X))
8023     {
8024     case PACKET_DISABLE:
8025       break;
8026     case PACKET_ENABLE:
8027       break;
8028     case PACKET_SUPPORT_UNKNOWN:
8029       {
8030         char *p;
8031
8032         p = rs->buf;
8033         *p++ = 'X';
8034         p += hexnumstr (p, (ULONGEST) addr);
8035         *p++ = ',';
8036         p += hexnumstr (p, (ULONGEST) 0);
8037         *p++ = ':';
8038         *p = '\0';
8039
8040         putpkt_binary (rs->buf, (int) (p - rs->buf));
8041         getpkt (&rs->buf, &rs->buf_size, 0);
8042
8043         if (rs->buf[0] == '\0')
8044           {
8045             if (remote_debug)
8046               fprintf_unfiltered (gdb_stdlog,
8047                                   "binary downloading NOT "
8048                                   "supported by target\n");
8049             remote_protocol_packets[PACKET_X].support = PACKET_DISABLE;
8050           }
8051         else
8052           {
8053             if (remote_debug)
8054               fprintf_unfiltered (gdb_stdlog,
8055                                   "binary downloading supported by target\n");
8056             remote_protocol_packets[PACKET_X].support = PACKET_ENABLE;
8057           }
8058         break;
8059       }
8060     }
8061 }
8062
8063 /* Helper function to resize the payload in order to try to get a good
8064    alignment.  We try to write an amount of data such that the next write will
8065    start on an address aligned on REMOTE_ALIGN_WRITES.  */
8066
8067 static int
8068 align_for_efficient_write (int todo, CORE_ADDR memaddr)
8069 {
8070   return ((memaddr + todo) & ~(REMOTE_ALIGN_WRITES - 1)) - memaddr;
8071 }
8072
8073 /* Write memory data directly to the remote machine.
8074    This does not inform the data cache; the data cache uses this.
8075    HEADER is the starting part of the packet.
8076    MEMADDR is the address in the remote memory space.
8077    MYADDR is the address of the buffer in our space.
8078    LEN_UNITS is the number of addressable units to write.
8079    UNIT_SIZE is the length in bytes of an addressable unit.
8080    PACKET_FORMAT should be either 'X' or 'M', and indicates if we
8081    should send data as binary ('X'), or hex-encoded ('M').
8082
8083    The function creates packet of the form
8084        <HEADER><ADDRESS>,<LENGTH>:<DATA>
8085
8086    where encoding of <DATA> is terminated by PACKET_FORMAT.
8087
8088    If USE_LENGTH is 0, then the <LENGTH> field and the preceding comma
8089    are omitted.
8090
8091    Return the transferred status, error or OK (an
8092    'enum target_xfer_status' value).  Save the number of addressable units
8093    transferred in *XFERED_LEN_UNITS.  Only transfer a single packet.
8094
8095    On a platform with an addressable memory size of 2 bytes (UNIT_SIZE == 2), an
8096    exchange between gdb and the stub could look like (?? in place of the
8097    checksum):
8098
8099    -> $m1000,4#??
8100    <- aaaabbbbccccdddd
8101
8102    -> $M1000,3:eeeeffffeeee#??
8103    <- OK
8104
8105    -> $m1000,4#??
8106    <- eeeeffffeeeedddd  */
8107
8108 static enum target_xfer_status
8109 remote_write_bytes_aux (const char *header, CORE_ADDR memaddr,
8110                         const gdb_byte *myaddr, ULONGEST len_units,
8111                         int unit_size, ULONGEST *xfered_len_units,
8112                         char packet_format, int use_length)
8113 {
8114   struct remote_state *rs = get_remote_state ();
8115   char *p;
8116   char *plen = NULL;
8117   int plenlen = 0;
8118   int todo_units;
8119   int units_written;
8120   int payload_capacity_bytes;
8121   int payload_length_bytes;
8122
8123   if (packet_format != 'X' && packet_format != 'M')
8124     internal_error (__FILE__, __LINE__,
8125                     _("remote_write_bytes_aux: bad packet format"));
8126
8127   if (len_units == 0)
8128     return TARGET_XFER_EOF;
8129
8130   payload_capacity_bytes = get_memory_write_packet_size ();
8131
8132   /* The packet buffer will be large enough for the payload;
8133      get_memory_packet_size ensures this.  */
8134   rs->buf[0] = '\0';
8135
8136   /* Compute the size of the actual payload by subtracting out the
8137      packet header and footer overhead: "$M<memaddr>,<len>:...#nn".  */
8138
8139   payload_capacity_bytes -= strlen ("$,:#NN");
8140   if (!use_length)
8141     /* The comma won't be used.  */
8142     payload_capacity_bytes += 1;
8143   payload_capacity_bytes -= strlen (header);
8144   payload_capacity_bytes -= hexnumlen (memaddr);
8145
8146   /* Construct the packet excluding the data: "<header><memaddr>,<len>:".  */
8147
8148   strcat (rs->buf, header);
8149   p = rs->buf + strlen (header);
8150
8151   /* Compute a best guess of the number of bytes actually transfered.  */
8152   if (packet_format == 'X')
8153     {
8154       /* Best guess at number of bytes that will fit.  */
8155       todo_units = std::min (len_units,
8156                              (ULONGEST) payload_capacity_bytes / unit_size);
8157       if (use_length)
8158         payload_capacity_bytes -= hexnumlen (todo_units);
8159       todo_units = std::min (todo_units, payload_capacity_bytes / unit_size);
8160     }
8161   else
8162     {
8163       /* Number of bytes that will fit.  */
8164       todo_units
8165         = std::min (len_units,
8166                     (ULONGEST) (payload_capacity_bytes / unit_size) / 2);
8167       if (use_length)
8168         payload_capacity_bytes -= hexnumlen (todo_units);
8169       todo_units = std::min (todo_units,
8170                              (payload_capacity_bytes / unit_size) / 2);
8171     }
8172
8173   if (todo_units <= 0)
8174     internal_error (__FILE__, __LINE__,
8175                     _("minimum packet size too small to write data"));
8176
8177   /* If we already need another packet, then try to align the end
8178      of this packet to a useful boundary.  */
8179   if (todo_units > 2 * REMOTE_ALIGN_WRITES && todo_units < len_units)
8180     todo_units = align_for_efficient_write (todo_units, memaddr);
8181
8182   /* Append "<memaddr>".  */
8183   memaddr = remote_address_masked (memaddr);
8184   p += hexnumstr (p, (ULONGEST) memaddr);
8185
8186   if (use_length)
8187     {
8188       /* Append ",".  */
8189       *p++ = ',';
8190
8191       /* Append the length and retain its location and size.  It may need to be
8192          adjusted once the packet body has been created.  */
8193       plen = p;
8194       plenlen = hexnumstr (p, (ULONGEST) todo_units);
8195       p += plenlen;
8196     }
8197
8198   /* Append ":".  */
8199   *p++ = ':';
8200   *p = '\0';
8201
8202   /* Append the packet body.  */
8203   if (packet_format == 'X')
8204     {
8205       /* Binary mode.  Send target system values byte by byte, in
8206          increasing byte addresses.  Only escape certain critical
8207          characters.  */
8208       payload_length_bytes =
8209           remote_escape_output (myaddr, todo_units, unit_size, (gdb_byte *) p,
8210                                 &units_written, payload_capacity_bytes);
8211
8212       /* If not all TODO units fit, then we'll need another packet.  Make
8213          a second try to keep the end of the packet aligned.  Don't do
8214          this if the packet is tiny.  */
8215       if (units_written < todo_units && units_written > 2 * REMOTE_ALIGN_WRITES)
8216         {
8217           int new_todo_units;
8218
8219           new_todo_units = align_for_efficient_write (units_written, memaddr);
8220
8221           if (new_todo_units != units_written)
8222             payload_length_bytes =
8223                 remote_escape_output (myaddr, new_todo_units, unit_size,
8224                                       (gdb_byte *) p, &units_written,
8225                                       payload_capacity_bytes);
8226         }
8227
8228       p += payload_length_bytes;
8229       if (use_length && units_written < todo_units)
8230         {
8231           /* Escape chars have filled up the buffer prematurely,
8232              and we have actually sent fewer units than planned.
8233              Fix-up the length field of the packet.  Use the same
8234              number of characters as before.  */
8235           plen += hexnumnstr (plen, (ULONGEST) units_written,
8236                               plenlen);
8237           *plen = ':';  /* overwrite \0 from hexnumnstr() */
8238         }
8239     }
8240   else
8241     {
8242       /* Normal mode: Send target system values byte by byte, in
8243          increasing byte addresses.  Each byte is encoded as a two hex
8244          value.  */
8245       p += 2 * bin2hex (myaddr, p, todo_units * unit_size);
8246       units_written = todo_units;
8247     }
8248
8249   putpkt_binary (rs->buf, (int) (p - rs->buf));
8250   getpkt (&rs->buf, &rs->buf_size, 0);
8251
8252   if (rs->buf[0] == 'E')
8253     return TARGET_XFER_E_IO;
8254
8255   /* Return UNITS_WRITTEN, not TODO_UNITS, in case escape chars caused us to
8256      send fewer units than we'd planned.  */
8257   *xfered_len_units = (ULONGEST) units_written;
8258   return TARGET_XFER_OK;
8259 }
8260
8261 /* Write memory data directly to the remote machine.
8262    This does not inform the data cache; the data cache uses this.
8263    MEMADDR is the address in the remote memory space.
8264    MYADDR is the address of the buffer in our space.
8265    LEN is the number of bytes.
8266
8267    Return the transferred status, error or OK (an
8268    'enum target_xfer_status' value).  Save the number of bytes
8269    transferred in *XFERED_LEN.  Only transfer a single packet.  */
8270
8271 static enum target_xfer_status
8272 remote_write_bytes (CORE_ADDR memaddr, const gdb_byte *myaddr, ULONGEST len,
8273                     int unit_size, ULONGEST *xfered_len)
8274 {
8275   const char *packet_format = NULL;
8276
8277   /* Check whether the target supports binary download.  */
8278   check_binary_download (memaddr);
8279
8280   switch (packet_support (PACKET_X))
8281     {
8282     case PACKET_ENABLE:
8283       packet_format = "X";
8284       break;
8285     case PACKET_DISABLE:
8286       packet_format = "M";
8287       break;
8288     case PACKET_SUPPORT_UNKNOWN:
8289       internal_error (__FILE__, __LINE__,
8290                       _("remote_write_bytes: bad internal state"));
8291     default:
8292       internal_error (__FILE__, __LINE__, _("bad switch"));
8293     }
8294
8295   return remote_write_bytes_aux (packet_format,
8296                                  memaddr, myaddr, len, unit_size, xfered_len,
8297                                  packet_format[0], 1);
8298 }
8299
8300 /* Read memory data directly from the remote machine.
8301    This does not use the data cache; the data cache uses this.
8302    MEMADDR is the address in the remote memory space.
8303    MYADDR is the address of the buffer in our space.
8304    LEN_UNITS is the number of addressable memory units to read..
8305    UNIT_SIZE is the length in bytes of an addressable unit.
8306
8307    Return the transferred status, error or OK (an
8308    'enum target_xfer_status' value).  Save the number of bytes
8309    transferred in *XFERED_LEN_UNITS.
8310
8311    See the comment of remote_write_bytes_aux for an example of
8312    memory read/write exchange between gdb and the stub.  */
8313
8314 static enum target_xfer_status
8315 remote_read_bytes_1 (CORE_ADDR memaddr, gdb_byte *myaddr, ULONGEST len_units,
8316                      int unit_size, ULONGEST *xfered_len_units)
8317 {
8318   struct remote_state *rs = get_remote_state ();
8319   int buf_size_bytes;           /* Max size of packet output buffer.  */
8320   char *p;
8321   int todo_units;
8322   int decoded_bytes;
8323
8324   buf_size_bytes = get_memory_read_packet_size ();
8325   /* The packet buffer will be large enough for the payload;
8326      get_memory_packet_size ensures this.  */
8327
8328   /* Number of units that will fit.  */
8329   todo_units = std::min (len_units,
8330                          (ULONGEST) (buf_size_bytes / unit_size) / 2);
8331
8332   /* Construct "m"<memaddr>","<len>".  */
8333   memaddr = remote_address_masked (memaddr);
8334   p = rs->buf;
8335   *p++ = 'm';
8336   p += hexnumstr (p, (ULONGEST) memaddr);
8337   *p++ = ',';
8338   p += hexnumstr (p, (ULONGEST) todo_units);
8339   *p = '\0';
8340   putpkt (rs->buf);
8341   getpkt (&rs->buf, &rs->buf_size, 0);
8342   if (rs->buf[0] == 'E'
8343       && isxdigit (rs->buf[1]) && isxdigit (rs->buf[2])
8344       && rs->buf[3] == '\0')
8345     return TARGET_XFER_E_IO;
8346   /* Reply describes memory byte by byte, each byte encoded as two hex
8347      characters.  */
8348   p = rs->buf;
8349   decoded_bytes = hex2bin (p, myaddr, todo_units * unit_size);
8350   /* Return what we have.  Let higher layers handle partial reads.  */
8351   *xfered_len_units = (ULONGEST) (decoded_bytes / unit_size);
8352   return TARGET_XFER_OK;
8353 }
8354
8355 /* Using the set of read-only target sections of remote, read live
8356    read-only memory.
8357
8358    For interface/parameters/return description see target.h,
8359    to_xfer_partial.  */
8360
8361 static enum target_xfer_status
8362 remote_xfer_live_readonly_partial (struct target_ops *ops, gdb_byte *readbuf,
8363                                    ULONGEST memaddr, ULONGEST len,
8364                                    int unit_size, ULONGEST *xfered_len)
8365 {
8366   struct target_section *secp;
8367   struct target_section_table *table;
8368
8369   secp = target_section_by_addr (ops, memaddr);
8370   if (secp != NULL
8371       && (bfd_get_section_flags (secp->the_bfd_section->owner,
8372                                  secp->the_bfd_section)
8373           & SEC_READONLY))
8374     {
8375       struct target_section *p;
8376       ULONGEST memend = memaddr + len;
8377
8378       table = target_get_section_table (ops);
8379
8380       for (p = table->sections; p < table->sections_end; p++)
8381         {
8382           if (memaddr >= p->addr)
8383             {
8384               if (memend <= p->endaddr)
8385                 {
8386                   /* Entire transfer is within this section.  */
8387                   return remote_read_bytes_1 (memaddr, readbuf, len, unit_size,
8388                                               xfered_len);
8389                 }
8390               else if (memaddr >= p->endaddr)
8391                 {
8392                   /* This section ends before the transfer starts.  */
8393                   continue;
8394                 }
8395               else
8396                 {
8397                   /* This section overlaps the transfer.  Just do half.  */
8398                   len = p->endaddr - memaddr;
8399                   return remote_read_bytes_1 (memaddr, readbuf, len, unit_size,
8400                                               xfered_len);
8401                 }
8402             }
8403         }
8404     }
8405
8406   return TARGET_XFER_EOF;
8407 }
8408
8409 /* Similar to remote_read_bytes_1, but it reads from the remote stub
8410    first if the requested memory is unavailable in traceframe.
8411    Otherwise, fall back to remote_read_bytes_1.  */
8412
8413 static enum target_xfer_status
8414 remote_read_bytes (struct target_ops *ops, CORE_ADDR memaddr,
8415                    gdb_byte *myaddr, ULONGEST len, int unit_size,
8416                    ULONGEST *xfered_len)
8417 {
8418   if (len == 0)
8419     return TARGET_XFER_EOF;
8420
8421   if (get_traceframe_number () != -1)
8422     {
8423       VEC(mem_range_s) *available;
8424
8425       /* If we fail to get the set of available memory, then the
8426          target does not support querying traceframe info, and so we
8427          attempt reading from the traceframe anyway (assuming the
8428          target implements the old QTro packet then).  */
8429       if (traceframe_available_memory (&available, memaddr, len))
8430         {
8431           struct cleanup *old_chain;
8432
8433           old_chain = make_cleanup (VEC_cleanup(mem_range_s), &available);
8434
8435           if (VEC_empty (mem_range_s, available)
8436               || VEC_index (mem_range_s, available, 0)->start != memaddr)
8437             {
8438               enum target_xfer_status res;
8439
8440               /* Don't read into the traceframe's available
8441                  memory.  */
8442               if (!VEC_empty (mem_range_s, available))
8443                 {
8444                   LONGEST oldlen = len;
8445
8446                   len = VEC_index (mem_range_s, available, 0)->start - memaddr;
8447                   gdb_assert (len <= oldlen);
8448                 }
8449
8450               do_cleanups (old_chain);
8451
8452               /* This goes through the topmost target again.  */
8453               res = remote_xfer_live_readonly_partial (ops, myaddr, memaddr,
8454                                                        len, unit_size, xfered_len);
8455               if (res == TARGET_XFER_OK)
8456                 return TARGET_XFER_OK;
8457               else
8458                 {
8459                   /* No use trying further, we know some memory starting
8460                      at MEMADDR isn't available.  */
8461                   *xfered_len = len;
8462                   return TARGET_XFER_UNAVAILABLE;
8463                 }
8464             }
8465
8466           /* Don't try to read more than how much is available, in
8467              case the target implements the deprecated QTro packet to
8468              cater for older GDBs (the target's knowledge of read-only
8469              sections may be outdated by now).  */
8470           len = VEC_index (mem_range_s, available, 0)->length;
8471
8472           do_cleanups (old_chain);
8473         }
8474     }
8475
8476   return remote_read_bytes_1 (memaddr, myaddr, len, unit_size, xfered_len);
8477 }
8478
8479 \f
8480
8481 /* Sends a packet with content determined by the printf format string
8482    FORMAT and the remaining arguments, then gets the reply.  Returns
8483    whether the packet was a success, a failure, or unknown.  */
8484
8485 static enum packet_result remote_send_printf (const char *format, ...)
8486   ATTRIBUTE_PRINTF (1, 2);
8487
8488 static enum packet_result
8489 remote_send_printf (const char *format, ...)
8490 {
8491   struct remote_state *rs = get_remote_state ();
8492   int max_size = get_remote_packet_size ();
8493   va_list ap;
8494
8495   va_start (ap, format);
8496
8497   rs->buf[0] = '\0';
8498   if (vsnprintf (rs->buf, max_size, format, ap) >= max_size)
8499     internal_error (__FILE__, __LINE__, _("Too long remote packet."));
8500
8501   if (putpkt (rs->buf) < 0)
8502     error (_("Communication problem with target."));
8503
8504   rs->buf[0] = '\0';
8505   getpkt (&rs->buf, &rs->buf_size, 0);
8506
8507   return packet_check_result (rs->buf);
8508 }
8509
8510 /* Flash writing can take quite some time.  We'll set
8511    effectively infinite timeout for flash operations.
8512    In future, we'll need to decide on a better approach.  */
8513 static const int remote_flash_timeout = 1000;
8514
8515 static void
8516 remote_flash_erase (struct target_ops *ops,
8517                     ULONGEST address, LONGEST length)
8518 {
8519   int addr_size = gdbarch_addr_bit (target_gdbarch ()) / 8;
8520   enum packet_result ret;
8521   scoped_restore restore_timeout
8522     = make_scoped_restore (&remote_timeout, remote_flash_timeout);
8523
8524   ret = remote_send_printf ("vFlashErase:%s,%s",
8525                             phex (address, addr_size),
8526                             phex (length, 4));
8527   switch (ret)
8528     {
8529     case PACKET_UNKNOWN:
8530       error (_("Remote target does not support flash erase"));
8531     case PACKET_ERROR:
8532       error (_("Error erasing flash with vFlashErase packet"));
8533     default:
8534       break;
8535     }
8536 }
8537
8538 static enum target_xfer_status
8539 remote_flash_write (struct target_ops *ops, ULONGEST address,
8540                     ULONGEST length, ULONGEST *xfered_len,
8541                     const gdb_byte *data)
8542 {
8543   scoped_restore restore_timeout
8544     = make_scoped_restore (&remote_timeout, remote_flash_timeout);
8545   return remote_write_bytes_aux ("vFlashWrite:", address, data, length, 1,
8546                                  xfered_len,'X', 0);
8547 }
8548
8549 static void
8550 remote_flash_done (struct target_ops *ops)
8551 {
8552   int ret;
8553
8554   scoped_restore restore_timeout
8555     = make_scoped_restore (&remote_timeout, remote_flash_timeout);
8556
8557   ret = remote_send_printf ("vFlashDone");
8558
8559   switch (ret)
8560     {
8561     case PACKET_UNKNOWN:
8562       error (_("Remote target does not support vFlashDone"));
8563     case PACKET_ERROR:
8564       error (_("Error finishing flash operation"));
8565     default:
8566       break;
8567     }
8568 }
8569
8570 static void
8571 remote_files_info (struct target_ops *ignore)
8572 {
8573   puts_filtered ("Debugging a target over a serial line.\n");
8574 }
8575 \f
8576 /* Stuff for dealing with the packets which are part of this protocol.
8577    See comment at top of file for details.  */
8578
8579 /* Close/unpush the remote target, and throw a TARGET_CLOSE_ERROR
8580    error to higher layers.  Called when a serial error is detected.
8581    The exception message is STRING, followed by a colon and a blank,
8582    the system error message for errno at function entry and final dot
8583    for output compatibility with throw_perror_with_name.  */
8584
8585 static void
8586 unpush_and_perror (const char *string)
8587 {
8588   int saved_errno = errno;
8589
8590   remote_unpush_target ();
8591   throw_error (TARGET_CLOSE_ERROR, "%s: %s.", string,
8592                safe_strerror (saved_errno));
8593 }
8594
8595 /* Read a single character from the remote end.  The current quit
8596    handler is overridden to avoid quitting in the middle of packet
8597    sequence, as that would break communication with the remote server.
8598    See remote_serial_quit_handler for more detail.  */
8599
8600 static int
8601 readchar (int timeout)
8602 {
8603   int ch;
8604   struct remote_state *rs = get_remote_state ();
8605
8606   {
8607     scoped_restore restore_quit
8608       = make_scoped_restore (&quit_handler, remote_serial_quit_handler);
8609
8610     rs->got_ctrlc_during_io = 0;
8611
8612     ch = serial_readchar (rs->remote_desc, timeout);
8613
8614     if (rs->got_ctrlc_during_io)
8615       set_quit_flag ();
8616   }
8617
8618   if (ch >= 0)
8619     return ch;
8620
8621   switch ((enum serial_rc) ch)
8622     {
8623     case SERIAL_EOF:
8624       remote_unpush_target ();
8625       throw_error (TARGET_CLOSE_ERROR, _("Remote connection closed"));
8626       /* no return */
8627     case SERIAL_ERROR:
8628       unpush_and_perror (_("Remote communication error.  "
8629                            "Target disconnected."));
8630       /* no return */
8631     case SERIAL_TIMEOUT:
8632       break;
8633     }
8634   return ch;
8635 }
8636
8637 /* Wrapper for serial_write that closes the target and throws if
8638    writing fails.  The current quit handler is overridden to avoid
8639    quitting in the middle of packet sequence, as that would break
8640    communication with the remote server.  See
8641    remote_serial_quit_handler for more detail.  */
8642
8643 static void
8644 remote_serial_write (const char *str, int len)
8645 {
8646   struct remote_state *rs = get_remote_state ();
8647
8648   scoped_restore restore_quit
8649     = make_scoped_restore (&quit_handler, remote_serial_quit_handler);
8650
8651   rs->got_ctrlc_during_io = 0;
8652
8653   if (serial_write (rs->remote_desc, str, len))
8654     {
8655       unpush_and_perror (_("Remote communication error.  "
8656                            "Target disconnected."));
8657     }
8658
8659   if (rs->got_ctrlc_during_io)
8660     set_quit_flag ();
8661 }
8662
8663 /* Send the command in *BUF to the remote machine, and read the reply
8664    into *BUF.  Report an error if we get an error reply.  Resize
8665    *BUF using xrealloc if necessary to hold the result, and update
8666    *SIZEOF_BUF.  */
8667
8668 static void
8669 remote_send (char **buf,
8670              long *sizeof_buf)
8671 {
8672   putpkt (*buf);
8673   getpkt (buf, sizeof_buf, 0);
8674
8675   if ((*buf)[0] == 'E')
8676     error (_("Remote failure reply: %s"), *buf);
8677 }
8678
8679 /* Return a string representing an escaped version of BUF, of len N.
8680    E.g. \n is converted to \\n, \t to \\t, etc.  */
8681
8682 static std::string
8683 escape_buffer (const char *buf, int n)
8684 {
8685   string_file stb;
8686
8687   stb.putstrn (buf, n, '\\');
8688   return std::move (stb.string ());
8689 }
8690
8691 /* Display a null-terminated packet on stdout, for debugging, using C
8692    string notation.  */
8693
8694 static void
8695 print_packet (const char *buf)
8696 {
8697   puts_filtered ("\"");
8698   fputstr_filtered (buf, '"', gdb_stdout);
8699   puts_filtered ("\"");
8700 }
8701
8702 int
8703 putpkt (const char *buf)
8704 {
8705   return putpkt_binary (buf, strlen (buf));
8706 }
8707
8708 /* Send a packet to the remote machine, with error checking.  The data
8709    of the packet is in BUF.  The string in BUF can be at most
8710    get_remote_packet_size () - 5 to account for the $, # and checksum,
8711    and for a possible /0 if we are debugging (remote_debug) and want
8712    to print the sent packet as a string.  */
8713
8714 static int
8715 putpkt_binary (const char *buf, int cnt)
8716 {
8717   struct remote_state *rs = get_remote_state ();
8718   int i;
8719   unsigned char csum = 0;
8720   char *buf2 = (char *) xmalloc (cnt + 6);
8721   struct cleanup *old_chain = make_cleanup (xfree, buf2);
8722
8723   int ch;
8724   int tcount = 0;
8725   char *p;
8726
8727   /* Catch cases like trying to read memory or listing threads while
8728      we're waiting for a stop reply.  The remote server wouldn't be
8729      ready to handle this request, so we'd hang and timeout.  We don't
8730      have to worry about this in synchronous mode, because in that
8731      case it's not possible to issue a command while the target is
8732      running.  This is not a problem in non-stop mode, because in that
8733      case, the stub is always ready to process serial input.  */
8734   if (!target_is_non_stop_p ()
8735       && target_is_async_p ()
8736       && rs->waiting_for_stop_reply)
8737     {
8738       error (_("Cannot execute this command while the target is running.\n"
8739                "Use the \"interrupt\" command to stop the target\n"
8740                "and then try again."));
8741     }
8742
8743   /* We're sending out a new packet.  Make sure we don't look at a
8744      stale cached response.  */
8745   rs->cached_wait_status = 0;
8746
8747   /* Copy the packet into buffer BUF2, encapsulating it
8748      and giving it a checksum.  */
8749
8750   p = buf2;
8751   *p++ = '$';
8752
8753   for (i = 0; i < cnt; i++)
8754     {
8755       csum += buf[i];
8756       *p++ = buf[i];
8757     }
8758   *p++ = '#';
8759   *p++ = tohex ((csum >> 4) & 0xf);
8760   *p++ = tohex (csum & 0xf);
8761
8762   /* Send it over and over until we get a positive ack.  */
8763
8764   while (1)
8765     {
8766       int started_error_output = 0;
8767
8768       if (remote_debug)
8769         {
8770           *p = '\0';
8771
8772           int len = (int) (p - buf2);
8773
8774           std::string str
8775             = escape_buffer (buf2, std::min (len, REMOTE_DEBUG_MAX_CHAR));
8776
8777           fprintf_unfiltered (gdb_stdlog, "Sending packet: %s", str.c_str ());
8778
8779           if (str.length () > REMOTE_DEBUG_MAX_CHAR)
8780             {
8781               fprintf_unfiltered (gdb_stdlog, "[%zu bytes omitted]",
8782                                   str.length () - REMOTE_DEBUG_MAX_CHAR);
8783             }
8784
8785           fprintf_unfiltered (gdb_stdlog, "...");
8786
8787           gdb_flush (gdb_stdlog);
8788         }
8789       remote_serial_write (buf2, p - buf2);
8790
8791       /* If this is a no acks version of the remote protocol, send the
8792          packet and move on.  */
8793       if (rs->noack_mode)
8794         break;
8795
8796       /* Read until either a timeout occurs (-2) or '+' is read.
8797          Handle any notification that arrives in the mean time.  */
8798       while (1)
8799         {
8800           ch = readchar (remote_timeout);
8801
8802           if (remote_debug)
8803             {
8804               switch (ch)
8805                 {
8806                 case '+':
8807                 case '-':
8808                 case SERIAL_TIMEOUT:
8809                 case '$':
8810                 case '%':
8811                   if (started_error_output)
8812                     {
8813                       putchar_unfiltered ('\n');
8814                       started_error_output = 0;
8815                     }
8816                 }
8817             }
8818
8819           switch (ch)
8820             {
8821             case '+':
8822               if (remote_debug)
8823                 fprintf_unfiltered (gdb_stdlog, "Ack\n");
8824               do_cleanups (old_chain);
8825               return 1;
8826             case '-':
8827               if (remote_debug)
8828                 fprintf_unfiltered (gdb_stdlog, "Nak\n");
8829               /* FALLTHROUGH */
8830             case SERIAL_TIMEOUT:
8831               tcount++;
8832               if (tcount > 3)
8833                 {
8834                   do_cleanups (old_chain);
8835                   return 0;
8836                 }
8837               break;            /* Retransmit buffer.  */
8838             case '$':
8839               {
8840                 if (remote_debug)
8841                   fprintf_unfiltered (gdb_stdlog,
8842                                       "Packet instead of Ack, ignoring it\n");
8843                 /* It's probably an old response sent because an ACK
8844                    was lost.  Gobble up the packet and ack it so it
8845                    doesn't get retransmitted when we resend this
8846                    packet.  */
8847                 skip_frame ();
8848                 remote_serial_write ("+", 1);
8849                 continue;       /* Now, go look for +.  */
8850               }
8851
8852             case '%':
8853               {
8854                 int val;
8855
8856                 /* If we got a notification, handle it, and go back to looking
8857                    for an ack.  */
8858                 /* We've found the start of a notification.  Now
8859                    collect the data.  */
8860                 val = read_frame (&rs->buf, &rs->buf_size);
8861                 if (val >= 0)
8862                   {
8863                     if (remote_debug)
8864                       {
8865                         std::string str = escape_buffer (rs->buf, val);
8866
8867                         fprintf_unfiltered (gdb_stdlog,
8868                                             "  Notification received: %s\n",
8869                                             str.c_str ());
8870                       }
8871                     handle_notification (rs->notif_state, rs->buf);
8872                     /* We're in sync now, rewait for the ack.  */
8873                     tcount = 0;
8874                   }
8875                 else
8876                   {
8877                     if (remote_debug)
8878                       {
8879                         if (!started_error_output)
8880                           {
8881                             started_error_output = 1;
8882                             fprintf_unfiltered (gdb_stdlog, "putpkt: Junk: ");
8883                           }
8884                         fputc_unfiltered (ch & 0177, gdb_stdlog);
8885                         fprintf_unfiltered (gdb_stdlog, "%s", rs->buf);
8886                       }
8887                   }
8888                 continue;
8889               }
8890               /* fall-through */
8891             default:
8892               if (remote_debug)
8893                 {
8894                   if (!started_error_output)
8895                     {
8896                       started_error_output = 1;
8897                       fprintf_unfiltered (gdb_stdlog, "putpkt: Junk: ");
8898                     }
8899                   fputc_unfiltered (ch & 0177, gdb_stdlog);
8900                 }
8901               continue;
8902             }
8903           break;                /* Here to retransmit.  */
8904         }
8905
8906 #if 0
8907       /* This is wrong.  If doing a long backtrace, the user should be
8908          able to get out next time we call QUIT, without anything as
8909          violent as interrupt_query.  If we want to provide a way out of
8910          here without getting to the next QUIT, it should be based on
8911          hitting ^C twice as in remote_wait.  */
8912       if (quit_flag)
8913         {
8914           quit_flag = 0;
8915           interrupt_query ();
8916         }
8917 #endif
8918     }
8919
8920   do_cleanups (old_chain);
8921   return 0;
8922 }
8923
8924 /* Come here after finding the start of a frame when we expected an
8925    ack.  Do our best to discard the rest of this packet.  */
8926
8927 static void
8928 skip_frame (void)
8929 {
8930   int c;
8931
8932   while (1)
8933     {
8934       c = readchar (remote_timeout);
8935       switch (c)
8936         {
8937         case SERIAL_TIMEOUT:
8938           /* Nothing we can do.  */
8939           return;
8940         case '#':
8941           /* Discard the two bytes of checksum and stop.  */
8942           c = readchar (remote_timeout);
8943           if (c >= 0)
8944             c = readchar (remote_timeout);
8945
8946           return;
8947         case '*':               /* Run length encoding.  */
8948           /* Discard the repeat count.  */
8949           c = readchar (remote_timeout);
8950           if (c < 0)
8951             return;
8952           break;
8953         default:
8954           /* A regular character.  */
8955           break;
8956         }
8957     }
8958 }
8959
8960 /* Come here after finding the start of the frame.  Collect the rest
8961    into *BUF, verifying the checksum, length, and handling run-length
8962    compression.  NUL terminate the buffer.  If there is not enough room,
8963    expand *BUF using xrealloc.
8964
8965    Returns -1 on error, number of characters in buffer (ignoring the
8966    trailing NULL) on success. (could be extended to return one of the
8967    SERIAL status indications).  */
8968
8969 static long
8970 read_frame (char **buf_p,
8971             long *sizeof_buf)
8972 {
8973   unsigned char csum;
8974   long bc;
8975   int c;
8976   char *buf = *buf_p;
8977   struct remote_state *rs = get_remote_state ();
8978
8979   csum = 0;
8980   bc = 0;
8981
8982   while (1)
8983     {
8984       c = readchar (remote_timeout);
8985       switch (c)
8986         {
8987         case SERIAL_TIMEOUT:
8988           if (remote_debug)
8989             fputs_filtered ("Timeout in mid-packet, retrying\n", gdb_stdlog);
8990           return -1;
8991         case '$':
8992           if (remote_debug)
8993             fputs_filtered ("Saw new packet start in middle of old one\n",
8994                             gdb_stdlog);
8995           return -1;            /* Start a new packet, count retries.  */
8996         case '#':
8997           {
8998             unsigned char pktcsum;
8999             int check_0 = 0;
9000             int check_1 = 0;
9001
9002             buf[bc] = '\0';
9003
9004             check_0 = readchar (remote_timeout);
9005             if (check_0 >= 0)
9006               check_1 = readchar (remote_timeout);
9007
9008             if (check_0 == SERIAL_TIMEOUT || check_1 == SERIAL_TIMEOUT)
9009               {
9010                 if (remote_debug)
9011                   fputs_filtered ("Timeout in checksum, retrying\n",
9012                                   gdb_stdlog);
9013                 return -1;
9014               }
9015             else if (check_0 < 0 || check_1 < 0)
9016               {
9017                 if (remote_debug)
9018                   fputs_filtered ("Communication error in checksum\n",
9019                                   gdb_stdlog);
9020                 return -1;
9021               }
9022
9023             /* Don't recompute the checksum; with no ack packets we
9024                don't have any way to indicate a packet retransmission
9025                is necessary.  */
9026             if (rs->noack_mode)
9027               return bc;
9028
9029             pktcsum = (fromhex (check_0) << 4) | fromhex (check_1);
9030             if (csum == pktcsum)
9031               return bc;
9032
9033             if (remote_debug)
9034               {
9035                 std::string str = escape_buffer (buf, bc);
9036
9037                 fprintf_unfiltered (gdb_stdlog,
9038                                     "Bad checksum, sentsum=0x%x, "
9039                                     "csum=0x%x, buf=%s\n",
9040                                     pktcsum, csum, str.c_str ());
9041               }
9042             /* Number of characters in buffer ignoring trailing
9043                NULL.  */
9044             return -1;
9045           }
9046         case '*':               /* Run length encoding.  */
9047           {
9048             int repeat;
9049
9050             csum += c;
9051             c = readchar (remote_timeout);
9052             csum += c;
9053             repeat = c - ' ' + 3;       /* Compute repeat count.  */
9054
9055             /* The character before ``*'' is repeated.  */
9056
9057             if (repeat > 0 && repeat <= 255 && bc > 0)
9058               {
9059                 if (bc + repeat - 1 >= *sizeof_buf - 1)
9060                   {
9061                     /* Make some more room in the buffer.  */
9062                     *sizeof_buf += repeat;
9063                     *buf_p = (char *) xrealloc (*buf_p, *sizeof_buf);
9064                     buf = *buf_p;
9065                   }
9066
9067                 memset (&buf[bc], buf[bc - 1], repeat);
9068                 bc += repeat;
9069                 continue;
9070               }
9071
9072             buf[bc] = '\0';
9073             printf_filtered (_("Invalid run length encoding: %s\n"), buf);
9074             return -1;
9075           }
9076         default:
9077           if (bc >= *sizeof_buf - 1)
9078             {
9079               /* Make some more room in the buffer.  */
9080               *sizeof_buf *= 2;
9081               *buf_p = (char *) xrealloc (*buf_p, *sizeof_buf);
9082               buf = *buf_p;
9083             }
9084
9085           buf[bc++] = c;
9086           csum += c;
9087           continue;
9088         }
9089     }
9090 }
9091
9092 /* Read a packet from the remote machine, with error checking, and
9093    store it in *BUF.  Resize *BUF using xrealloc if necessary to hold
9094    the result, and update *SIZEOF_BUF.  If FOREVER, wait forever
9095    rather than timing out; this is used (in synchronous mode) to wait
9096    for a target that is is executing user code to stop.  */
9097 /* FIXME: ezannoni 2000-02-01 this wrapper is necessary so that we
9098    don't have to change all the calls to getpkt to deal with the
9099    return value, because at the moment I don't know what the right
9100    thing to do it for those.  */
9101 void
9102 getpkt (char **buf,
9103         long *sizeof_buf,
9104         int forever)
9105 {
9106   getpkt_sane (buf, sizeof_buf, forever);
9107 }
9108
9109
9110 /* Read a packet from the remote machine, with error checking, and
9111    store it in *BUF.  Resize *BUF using xrealloc if necessary to hold
9112    the result, and update *SIZEOF_BUF.  If FOREVER, wait forever
9113    rather than timing out; this is used (in synchronous mode) to wait
9114    for a target that is is executing user code to stop.  If FOREVER ==
9115    0, this function is allowed to time out gracefully and return an
9116    indication of this to the caller.  Otherwise return the number of
9117    bytes read.  If EXPECTING_NOTIF, consider receiving a notification
9118    enough reason to return to the caller.  *IS_NOTIF is an output
9119    boolean that indicates whether *BUF holds a notification or not
9120    (a regular packet).  */
9121
9122 static int
9123 getpkt_or_notif_sane_1 (char **buf, long *sizeof_buf, int forever,
9124                         int expecting_notif, int *is_notif)
9125 {
9126   struct remote_state *rs = get_remote_state ();
9127   int c;
9128   int tries;
9129   int timeout;
9130   int val = -1;
9131
9132   /* We're reading a new response.  Make sure we don't look at a
9133      previously cached response.  */
9134   rs->cached_wait_status = 0;
9135
9136   strcpy (*buf, "timeout");
9137
9138   if (forever)
9139     timeout = watchdog > 0 ? watchdog : -1;
9140   else if (expecting_notif)
9141     timeout = 0; /* There should already be a char in the buffer.  If
9142                     not, bail out.  */
9143   else
9144     timeout = remote_timeout;
9145
9146 #define MAX_TRIES 3
9147
9148   /* Process any number of notifications, and then return when
9149      we get a packet.  */
9150   for (;;)
9151     {
9152       /* If we get a timeout or bad checksum, retry up to MAX_TRIES
9153          times.  */
9154       for (tries = 1; tries <= MAX_TRIES; tries++)
9155         {
9156           /* This can loop forever if the remote side sends us
9157              characters continuously, but if it pauses, we'll get
9158              SERIAL_TIMEOUT from readchar because of timeout.  Then
9159              we'll count that as a retry.
9160
9161              Note that even when forever is set, we will only wait
9162              forever prior to the start of a packet.  After that, we
9163              expect characters to arrive at a brisk pace.  They should
9164              show up within remote_timeout intervals.  */
9165           do
9166             c = readchar (timeout);
9167           while (c != SERIAL_TIMEOUT && c != '$' && c != '%');
9168
9169           if (c == SERIAL_TIMEOUT)
9170             {
9171               if (expecting_notif)
9172                 return -1; /* Don't complain, it's normal to not get
9173                               anything in this case.  */
9174
9175               if (forever)      /* Watchdog went off?  Kill the target.  */
9176                 {
9177                   remote_unpush_target ();
9178                   throw_error (TARGET_CLOSE_ERROR,
9179                                _("Watchdog timeout has expired.  "
9180                                  "Target detached."));
9181                 }
9182               if (remote_debug)
9183                 fputs_filtered ("Timed out.\n", gdb_stdlog);
9184             }
9185           else
9186             {
9187               /* We've found the start of a packet or notification.
9188                  Now collect the data.  */
9189               val = read_frame (buf, sizeof_buf);
9190               if (val >= 0)
9191                 break;
9192             }
9193
9194           remote_serial_write ("-", 1);
9195         }
9196
9197       if (tries > MAX_TRIES)
9198         {
9199           /* We have tried hard enough, and just can't receive the
9200              packet/notification.  Give up.  */
9201           printf_unfiltered (_("Ignoring packet error, continuing...\n"));
9202
9203           /* Skip the ack char if we're in no-ack mode.  */
9204           if (!rs->noack_mode)
9205             remote_serial_write ("+", 1);
9206           return -1;
9207         }
9208
9209       /* If we got an ordinary packet, return that to our caller.  */
9210       if (c == '$')
9211         {
9212           if (remote_debug)
9213             {
9214               std::string str
9215                 = escape_buffer (*buf,
9216                                  std::min (val, REMOTE_DEBUG_MAX_CHAR));
9217
9218               fprintf_unfiltered (gdb_stdlog, "Packet received: %s",
9219                                   str.c_str ());
9220
9221               if (str.length () >  REMOTE_DEBUG_MAX_CHAR)
9222                 {
9223                   fprintf_unfiltered (gdb_stdlog, "[%zu bytes omitted]",
9224                                       str.length () - REMOTE_DEBUG_MAX_CHAR);
9225                 }
9226
9227               fprintf_unfiltered (gdb_stdlog, "\n");
9228             }
9229
9230           /* Skip the ack char if we're in no-ack mode.  */
9231           if (!rs->noack_mode)
9232             remote_serial_write ("+", 1);
9233           if (is_notif != NULL)
9234             *is_notif = 0;
9235           return val;
9236         }
9237
9238        /* If we got a notification, handle it, and go back to looking
9239          for a packet.  */
9240       else
9241         {
9242           gdb_assert (c == '%');
9243
9244           if (remote_debug)
9245             {
9246               std::string str = escape_buffer (*buf, val);
9247
9248               fprintf_unfiltered (gdb_stdlog,
9249                                   "  Notification received: %s\n",
9250                                   str.c_str ());
9251             }
9252           if (is_notif != NULL)
9253             *is_notif = 1;
9254
9255           handle_notification (rs->notif_state, *buf);
9256
9257           /* Notifications require no acknowledgement.  */
9258
9259           if (expecting_notif)
9260             return val;
9261         }
9262     }
9263 }
9264
9265 static int
9266 getpkt_sane (char **buf, long *sizeof_buf, int forever)
9267 {
9268   return getpkt_or_notif_sane_1 (buf, sizeof_buf, forever, 0, NULL);
9269 }
9270
9271 static int
9272 getpkt_or_notif_sane (char **buf, long *sizeof_buf, int forever,
9273                       int *is_notif)
9274 {
9275   return getpkt_or_notif_sane_1 (buf, sizeof_buf, forever, 1,
9276                                  is_notif);
9277 }
9278
9279 /* Check whether EVENT is a fork event for the process specified
9280    by the pid passed in DATA, and if it is, kill the fork child.  */
9281
9282 static int
9283 kill_child_of_pending_fork (QUEUE (stop_reply_p) *q,
9284                             QUEUE_ITER (stop_reply_p) *iter,
9285                             stop_reply_p event,
9286                             void *data)
9287 {
9288   struct queue_iter_param *param = (struct queue_iter_param *) data;
9289   int parent_pid = *(int *) param->input;
9290
9291   if (is_pending_fork_parent (&event->ws, parent_pid, event->ptid))
9292     {
9293       struct remote_state *rs = get_remote_state ();
9294       int child_pid = ptid_get_pid (event->ws.value.related_pid);
9295       int res;
9296
9297       res = remote_vkill (child_pid, rs);
9298       if (res != 0)
9299         error (_("Can't kill fork child process %d"), child_pid);
9300     }
9301
9302   return 1;
9303 }
9304
9305 /* Kill any new fork children of process PID that haven't been
9306    processed by follow_fork.  */
9307
9308 static void
9309 kill_new_fork_children (int pid, struct remote_state *rs)
9310 {
9311   struct thread_info *thread;
9312   struct notif_client *notif = &notif_client_stop;
9313   struct queue_iter_param param;
9314
9315   /* Kill the fork child threads of any threads in process PID
9316      that are stopped at a fork event.  */
9317   ALL_NON_EXITED_THREADS (thread)
9318     {
9319       struct target_waitstatus *ws = &thread->pending_follow;
9320
9321       if (is_pending_fork_parent (ws, pid, thread->ptid))
9322         {
9323           struct remote_state *rs = get_remote_state ();
9324           int child_pid = ptid_get_pid (ws->value.related_pid);
9325           int res;
9326
9327           res = remote_vkill (child_pid, rs);
9328           if (res != 0)
9329             error (_("Can't kill fork child process %d"), child_pid);
9330         }
9331     }
9332
9333   /* Check for any pending fork events (not reported or processed yet)
9334      in process PID and kill those fork child threads as well.  */
9335   remote_notif_get_pending_events (notif);
9336   param.input = &pid;
9337   param.output = NULL;
9338   QUEUE_iterate (stop_reply_p, stop_reply_queue,
9339                  kill_child_of_pending_fork, &param);
9340 }
9341
9342 \f
9343 /* Target hook to kill the current inferior.  */
9344
9345 static void
9346 remote_kill (struct target_ops *ops)
9347 {
9348   int res = -1;
9349   int pid = ptid_get_pid (inferior_ptid);
9350   struct remote_state *rs = get_remote_state ();
9351
9352   if (packet_support (PACKET_vKill) != PACKET_DISABLE)
9353     {
9354       /* If we're stopped while forking and we haven't followed yet,
9355          kill the child task.  We need to do this before killing the
9356          parent task because if this is a vfork then the parent will
9357          be sleeping.  */
9358       kill_new_fork_children (pid, rs);
9359
9360       res = remote_vkill (pid, rs);
9361       if (res == 0)
9362         {
9363           target_mourn_inferior (inferior_ptid);
9364           return;
9365         }
9366     }
9367
9368   /* If we are in 'target remote' mode and we are killing the only
9369      inferior, then we will tell gdbserver to exit and unpush the
9370      target.  */
9371   if (res == -1 && !remote_multi_process_p (rs)
9372       && number_of_live_inferiors () == 1)
9373     {
9374       remote_kill_k ();
9375
9376       /* We've killed the remote end, we get to mourn it.  If we are
9377          not in extended mode, mourning the inferior also unpushes
9378          remote_ops from the target stack, which closes the remote
9379          connection.  */
9380       target_mourn_inferior (inferior_ptid);
9381
9382       return;
9383     }
9384
9385   error (_("Can't kill process"));
9386 }
9387
9388 /* Send a kill request to the target using the 'vKill' packet.  */
9389
9390 static int
9391 remote_vkill (int pid, struct remote_state *rs)
9392 {
9393   if (packet_support (PACKET_vKill) == PACKET_DISABLE)
9394     return -1;
9395
9396   /* Tell the remote target to detach.  */
9397   xsnprintf (rs->buf, get_remote_packet_size (), "vKill;%x", pid);
9398   putpkt (rs->buf);
9399   getpkt (&rs->buf, &rs->buf_size, 0);
9400
9401   switch (packet_ok (rs->buf,
9402                      &remote_protocol_packets[PACKET_vKill]))
9403     {
9404     case PACKET_OK:
9405       return 0;
9406     case PACKET_ERROR:
9407       return 1;
9408     case PACKET_UNKNOWN:
9409       return -1;
9410     default:
9411       internal_error (__FILE__, __LINE__, _("Bad result from packet_ok"));
9412     }
9413 }
9414
9415 /* Send a kill request to the target using the 'k' packet.  */
9416
9417 static void
9418 remote_kill_k (void)
9419 {
9420   /* Catch errors so the user can quit from gdb even when we
9421      aren't on speaking terms with the remote system.  */
9422   TRY
9423     {
9424       putpkt ("k");
9425     }
9426   CATCH (ex, RETURN_MASK_ERROR)
9427     {
9428       if (ex.error == TARGET_CLOSE_ERROR)
9429         {
9430           /* If we got an (EOF) error that caused the target
9431              to go away, then we're done, that's what we wanted.
9432              "k" is susceptible to cause a premature EOF, given
9433              that the remote server isn't actually required to
9434              reply to "k", and it can happen that it doesn't
9435              even get to reply ACK to the "k".  */
9436           return;
9437         }
9438
9439       /* Otherwise, something went wrong.  We didn't actually kill
9440          the target.  Just propagate the exception, and let the
9441          user or higher layers decide what to do.  */
9442       throw_exception (ex);
9443     }
9444   END_CATCH
9445 }
9446
9447 static void
9448 remote_mourn (struct target_ops *target)
9449 {
9450   struct remote_state *rs = get_remote_state ();
9451
9452   /* In 'target remote' mode with one inferior, we close the connection.  */
9453   if (!rs->extended && number_of_live_inferiors () <= 1)
9454     {
9455       unpush_target (target);
9456
9457       /* remote_close takes care of doing most of the clean up.  */
9458       generic_mourn_inferior ();
9459       return;
9460     }
9461
9462   /* In case we got here due to an error, but we're going to stay
9463      connected.  */
9464   rs->waiting_for_stop_reply = 0;
9465
9466   /* If the current general thread belonged to the process we just
9467      detached from or has exited, the remote side current general
9468      thread becomes undefined.  Considering a case like this:
9469
9470      - We just got here due to a detach.
9471      - The process that we're detaching from happens to immediately
9472        report a global breakpoint being hit in non-stop mode, in the
9473        same thread we had selected before.
9474      - GDB attaches to this process again.
9475      - This event happens to be the next event we handle.
9476
9477      GDB would consider that the current general thread didn't need to
9478      be set on the stub side (with Hg), since for all it knew,
9479      GENERAL_THREAD hadn't changed.
9480
9481      Notice that although in all-stop mode, the remote server always
9482      sets the current thread to the thread reporting the stop event,
9483      that doesn't happen in non-stop mode; in non-stop, the stub *must
9484      not* change the current thread when reporting a breakpoint hit,
9485      due to the decoupling of event reporting and event handling.
9486
9487      To keep things simple, we always invalidate our notion of the
9488      current thread.  */
9489   record_currthread (rs, minus_one_ptid);
9490
9491   /* Call common code to mark the inferior as not running.  */
9492   generic_mourn_inferior ();
9493
9494   if (!have_inferiors ())
9495     {
9496       if (!remote_multi_process_p (rs))
9497         {
9498           /* Check whether the target is running now - some remote stubs
9499              automatically restart after kill.  */
9500           putpkt ("?");
9501           getpkt (&rs->buf, &rs->buf_size, 0);
9502
9503           if (rs->buf[0] == 'S' || rs->buf[0] == 'T')
9504             {
9505               /* Assume that the target has been restarted.  Set
9506                  inferior_ptid so that bits of core GDB realizes
9507                  there's something here, e.g., so that the user can
9508                  say "kill" again.  */
9509               inferior_ptid = magic_null_ptid;
9510             }
9511         }
9512     }
9513 }
9514
9515 static int
9516 extended_remote_supports_disable_randomization (struct target_ops *self)
9517 {
9518   return packet_support (PACKET_QDisableRandomization) == PACKET_ENABLE;
9519 }
9520
9521 static void
9522 extended_remote_disable_randomization (int val)
9523 {
9524   struct remote_state *rs = get_remote_state ();
9525   char *reply;
9526
9527   xsnprintf (rs->buf, get_remote_packet_size (), "QDisableRandomization:%x",
9528              val);
9529   putpkt (rs->buf);
9530   reply = remote_get_noisy_reply ();
9531   if (*reply == '\0')
9532     error (_("Target does not support QDisableRandomization."));
9533   if (strcmp (reply, "OK") != 0)
9534     error (_("Bogus QDisableRandomization reply from target: %s"), reply);
9535 }
9536
9537 static int
9538 extended_remote_run (const std::string &args)
9539 {
9540   struct remote_state *rs = get_remote_state ();
9541   int len;
9542   const char *remote_exec_file = get_remote_exec_file ();
9543
9544   /* If the user has disabled vRun support, or we have detected that
9545      support is not available, do not try it.  */
9546   if (packet_support (PACKET_vRun) == PACKET_DISABLE)
9547     return -1;
9548
9549   strcpy (rs->buf, "vRun;");
9550   len = strlen (rs->buf);
9551
9552   if (strlen (remote_exec_file) * 2 + len >= get_remote_packet_size ())
9553     error (_("Remote file name too long for run packet"));
9554   len += 2 * bin2hex ((gdb_byte *) remote_exec_file, rs->buf + len,
9555                       strlen (remote_exec_file));
9556
9557   if (!args.empty ())
9558     {
9559       int i;
9560
9561       gdb_argv argv (args.c_str ());
9562       for (i = 0; argv[i] != NULL; i++)
9563         {
9564           if (strlen (argv[i]) * 2 + 1 + len >= get_remote_packet_size ())
9565             error (_("Argument list too long for run packet"));
9566           rs->buf[len++] = ';';
9567           len += 2 * bin2hex ((gdb_byte *) argv[i], rs->buf + len,
9568                               strlen (argv[i]));
9569         }
9570     }
9571
9572   rs->buf[len++] = '\0';
9573
9574   putpkt (rs->buf);
9575   getpkt (&rs->buf, &rs->buf_size, 0);
9576
9577   switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_vRun]))
9578     {
9579     case PACKET_OK:
9580       /* We have a wait response.  All is well.  */
9581       return 0;
9582     case PACKET_UNKNOWN:
9583       return -1;
9584     case PACKET_ERROR:
9585       if (remote_exec_file[0] == '\0')
9586         error (_("Running the default executable on the remote target failed; "
9587                  "try \"set remote exec-file\"?"));
9588       else
9589         error (_("Running \"%s\" on the remote target failed"),
9590                remote_exec_file);
9591     default:
9592       gdb_assert_not_reached (_("bad switch"));
9593     }
9594 }
9595
9596 /* Helper function to send set/unset environment packets.  ACTION is
9597    either "set" or "unset".  PACKET is either "QEnvironmentHexEncoded"
9598    or "QEnvironmentUnsetVariable".  VALUE is the variable to be
9599    sent.  */
9600
9601 static void
9602 send_environment_packet (struct remote_state *rs,
9603                          const char *action,
9604                          const char *packet,
9605                          const char *value)
9606 {
9607   /* Convert the environment variable to an hex string, which
9608      is the best format to be transmitted over the wire.  */
9609   std::string encoded_value = bin2hex ((const gdb_byte *) value,
9610                                          strlen (value));
9611
9612   xsnprintf (rs->buf, get_remote_packet_size (),
9613              "%s:%s", packet, encoded_value.c_str ());
9614
9615   putpkt (rs->buf);
9616   getpkt (&rs->buf, &rs->buf_size, 0);
9617   if (strcmp (rs->buf, "OK") != 0)
9618     warning (_("Unable to %s environment variable '%s' on remote."),
9619              action, value);
9620 }
9621
9622 /* Helper function to handle the QEnvironment* packets.  */
9623
9624 static void
9625 extended_remote_environment_support (struct remote_state *rs)
9626 {
9627   if (packet_support (PACKET_QEnvironmentReset) != PACKET_DISABLE)
9628     {
9629       putpkt ("QEnvironmentReset");
9630       getpkt (&rs->buf, &rs->buf_size, 0);
9631       if (strcmp (rs->buf, "OK") != 0)
9632         warning (_("Unable to reset environment on remote."));
9633     }
9634
9635   gdb_environ *e = &current_inferior ()->environment;
9636
9637   if (packet_support (PACKET_QEnvironmentHexEncoded) != PACKET_DISABLE)
9638     for (const std::string &el : e->user_set_env ())
9639       send_environment_packet (rs, "set", "QEnvironmentHexEncoded",
9640                                el.c_str ());
9641
9642   if (packet_support (PACKET_QEnvironmentUnset) != PACKET_DISABLE)
9643     for (const std::string &el : e->user_unset_env ())
9644       send_environment_packet (rs, "unset", "QEnvironmentUnset", el.c_str ());
9645 }
9646
9647 /* Helper function to set the current working directory for the
9648    inferior in the remote target.  */
9649
9650 static void
9651 extended_remote_set_inferior_cwd (struct remote_state *rs)
9652 {
9653   if (packet_support (PACKET_QSetWorkingDir) != PACKET_DISABLE)
9654     {
9655       const char *inferior_cwd = get_inferior_cwd ();
9656
9657       if (inferior_cwd != NULL)
9658         {
9659           std::string hexpath = bin2hex ((const gdb_byte *) inferior_cwd,
9660                                          strlen (inferior_cwd));
9661
9662           xsnprintf (rs->buf, get_remote_packet_size (),
9663                      "QSetWorkingDir:%s", hexpath.c_str ());
9664         }
9665       else
9666         {
9667           /* An empty inferior_cwd means that the user wants us to
9668              reset the remote server's inferior's cwd.  */
9669           xsnprintf (rs->buf, get_remote_packet_size (),
9670                      "QSetWorkingDir:");
9671         }
9672
9673       putpkt (rs->buf);
9674       getpkt (&rs->buf, &rs->buf_size, 0);
9675       if (packet_ok (rs->buf,
9676                      &remote_protocol_packets[PACKET_QSetWorkingDir])
9677           != PACKET_OK)
9678         error (_("\
9679 Remote replied unexpectedly while setting the inferior's working\n\
9680 directory: %s"),
9681                rs->buf);
9682
9683     }
9684 }
9685
9686 /* In the extended protocol we want to be able to do things like
9687    "run" and have them basically work as expected.  So we need
9688    a special create_inferior function.  We support changing the
9689    executable file and the command line arguments, but not the
9690    environment.  */
9691
9692 static void
9693 extended_remote_create_inferior (struct target_ops *ops,
9694                                  const char *exec_file,
9695                                  const std::string &args,
9696                                  char **env, int from_tty)
9697 {
9698   int run_worked;
9699   char *stop_reply;
9700   struct remote_state *rs = get_remote_state ();
9701   const char *remote_exec_file = get_remote_exec_file ();
9702
9703   /* If running asynchronously, register the target file descriptor
9704      with the event loop.  */
9705   if (target_can_async_p ())
9706     target_async (1);
9707
9708   /* Disable address space randomization if requested (and supported).  */
9709   if (extended_remote_supports_disable_randomization (ops))
9710     extended_remote_disable_randomization (disable_randomization);
9711
9712   /* If startup-with-shell is on, we inform gdbserver to start the
9713      remote inferior using a shell.  */
9714   if (packet_support (PACKET_QStartupWithShell) != PACKET_DISABLE)
9715     {
9716       xsnprintf (rs->buf, get_remote_packet_size (),
9717                  "QStartupWithShell:%d", startup_with_shell ? 1 : 0);
9718       putpkt (rs->buf);
9719       getpkt (&rs->buf, &rs->buf_size, 0);
9720       if (strcmp (rs->buf, "OK") != 0)
9721         error (_("\
9722 Remote replied unexpectedly while setting startup-with-shell: %s"),
9723                rs->buf);
9724     }
9725
9726   extended_remote_environment_support (rs);
9727
9728   extended_remote_set_inferior_cwd (rs);
9729
9730   /* Now restart the remote server.  */
9731   run_worked = extended_remote_run (args) != -1;
9732   if (!run_worked)
9733     {
9734       /* vRun was not supported.  Fail if we need it to do what the
9735          user requested.  */
9736       if (remote_exec_file[0])
9737         error (_("Remote target does not support \"set remote exec-file\""));
9738       if (!args.empty ())
9739         error (_("Remote target does not support \"set args\" or run <ARGS>"));
9740
9741       /* Fall back to "R".  */
9742       extended_remote_restart ();
9743     }
9744
9745   if (!have_inferiors ())
9746     {
9747       /* Clean up from the last time we ran, before we mark the target
9748          running again.  This will mark breakpoints uninserted, and
9749          get_offsets may insert breakpoints.  */
9750       init_thread_list ();
9751       init_wait_for_inferior ();
9752     }
9753
9754   /* vRun's success return is a stop reply.  */
9755   stop_reply = run_worked ? rs->buf : NULL;
9756   add_current_inferior_and_thread (stop_reply);
9757
9758   /* Get updated offsets, if the stub uses qOffsets.  */
9759   get_offsets ();
9760 }
9761 \f
9762
9763 /* Given a location's target info BP_TGT and the packet buffer BUF,  output
9764    the list of conditions (in agent expression bytecode format), if any, the
9765    target needs to evaluate.  The output is placed into the packet buffer
9766    started from BUF and ended at BUF_END.  */
9767
9768 static int
9769 remote_add_target_side_condition (struct gdbarch *gdbarch,
9770                                   struct bp_target_info *bp_tgt, char *buf,
9771                                   char *buf_end)
9772 {
9773   if (bp_tgt->conditions.empty ())
9774     return 0;
9775
9776   buf += strlen (buf);
9777   xsnprintf (buf, buf_end - buf, "%s", ";");
9778   buf++;
9779
9780   /* Send conditions to the target.  */
9781   for (agent_expr *aexpr : bp_tgt->conditions)
9782     {
9783       xsnprintf (buf, buf_end - buf, "X%x,", aexpr->len);
9784       buf += strlen (buf);
9785       for (int i = 0; i < aexpr->len; ++i)
9786         buf = pack_hex_byte (buf, aexpr->buf[i]);
9787       *buf = '\0';
9788     }
9789   return 0;
9790 }
9791
9792 static void
9793 remote_add_target_side_commands (struct gdbarch *gdbarch,
9794                                  struct bp_target_info *bp_tgt, char *buf)
9795 {
9796   if (bp_tgt->tcommands.empty ())
9797     return;
9798
9799   buf += strlen (buf);
9800
9801   sprintf (buf, ";cmds:%x,", bp_tgt->persist);
9802   buf += strlen (buf);
9803
9804   /* Concatenate all the agent expressions that are commands into the
9805      cmds parameter.  */
9806   for (agent_expr *aexpr : bp_tgt->tcommands)
9807     {
9808       sprintf (buf, "X%x,", aexpr->len);
9809       buf += strlen (buf);
9810       for (int i = 0; i < aexpr->len; ++i)
9811         buf = pack_hex_byte (buf, aexpr->buf[i]);
9812       *buf = '\0';
9813     }
9814 }
9815
9816 /* Insert a breakpoint.  On targets that have software breakpoint
9817    support, we ask the remote target to do the work; on targets
9818    which don't, we insert a traditional memory breakpoint.  */
9819
9820 static int
9821 remote_insert_breakpoint (struct target_ops *ops,
9822                           struct gdbarch *gdbarch,
9823                           struct bp_target_info *bp_tgt)
9824 {
9825   /* Try the "Z" s/w breakpoint packet if it is not already disabled.
9826      If it succeeds, then set the support to PACKET_ENABLE.  If it
9827      fails, and the user has explicitly requested the Z support then
9828      report an error, otherwise, mark it disabled and go on.  */
9829
9830   if (packet_support (PACKET_Z0) != PACKET_DISABLE)
9831     {
9832       CORE_ADDR addr = bp_tgt->reqstd_address;
9833       struct remote_state *rs;
9834       char *p, *endbuf;
9835       int bpsize;
9836
9837       /* Make sure the remote is pointing at the right process, if
9838          necessary.  */
9839       if (!gdbarch_has_global_breakpoints (target_gdbarch ()))
9840         set_general_process ();
9841
9842       rs = get_remote_state ();
9843       p = rs->buf;
9844       endbuf = rs->buf + get_remote_packet_size ();
9845
9846       *(p++) = 'Z';
9847       *(p++) = '0';
9848       *(p++) = ',';
9849       addr = (ULONGEST) remote_address_masked (addr);
9850       p += hexnumstr (p, addr);
9851       xsnprintf (p, endbuf - p, ",%d", bp_tgt->kind);
9852
9853       if (remote_supports_cond_breakpoints (ops))
9854         remote_add_target_side_condition (gdbarch, bp_tgt, p, endbuf);
9855
9856       if (remote_can_run_breakpoint_commands (ops))
9857         remote_add_target_side_commands (gdbarch, bp_tgt, p);
9858
9859       putpkt (rs->buf);
9860       getpkt (&rs->buf, &rs->buf_size, 0);
9861
9862       switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_Z0]))
9863         {
9864         case PACKET_ERROR:
9865           return -1;
9866         case PACKET_OK:
9867           return 0;
9868         case PACKET_UNKNOWN:
9869           break;
9870         }
9871     }
9872
9873   /* If this breakpoint has target-side commands but this stub doesn't
9874      support Z0 packets, throw error.  */
9875   if (!bp_tgt->tcommands.empty ())
9876     throw_error (NOT_SUPPORTED_ERROR, _("\
9877 Target doesn't support breakpoints that have target side commands."));
9878
9879   return memory_insert_breakpoint (ops, gdbarch, bp_tgt);
9880 }
9881
9882 static int
9883 remote_remove_breakpoint (struct target_ops *ops,
9884                           struct gdbarch *gdbarch,
9885                           struct bp_target_info *bp_tgt,
9886                           enum remove_bp_reason reason)
9887 {
9888   CORE_ADDR addr = bp_tgt->placed_address;
9889   struct remote_state *rs = get_remote_state ();
9890
9891   if (packet_support (PACKET_Z0) != PACKET_DISABLE)
9892     {
9893       char *p = rs->buf;
9894       char *endbuf = rs->buf + get_remote_packet_size ();
9895
9896       /* Make sure the remote is pointing at the right process, if
9897          necessary.  */
9898       if (!gdbarch_has_global_breakpoints (target_gdbarch ()))
9899         set_general_process ();
9900
9901       *(p++) = 'z';
9902       *(p++) = '0';
9903       *(p++) = ',';
9904
9905       addr = (ULONGEST) remote_address_masked (bp_tgt->placed_address);
9906       p += hexnumstr (p, addr);
9907       xsnprintf (p, endbuf - p, ",%d", bp_tgt->kind);
9908
9909       putpkt (rs->buf);
9910       getpkt (&rs->buf, &rs->buf_size, 0);
9911
9912       return (rs->buf[0] == 'E');
9913     }
9914
9915   return memory_remove_breakpoint (ops, gdbarch, bp_tgt, reason);
9916 }
9917
9918 static enum Z_packet_type
9919 watchpoint_to_Z_packet (int type)
9920 {
9921   switch (type)
9922     {
9923     case hw_write:
9924       return Z_PACKET_WRITE_WP;
9925       break;
9926     case hw_read:
9927       return Z_PACKET_READ_WP;
9928       break;
9929     case hw_access:
9930       return Z_PACKET_ACCESS_WP;
9931       break;
9932     default:
9933       internal_error (__FILE__, __LINE__,
9934                       _("hw_bp_to_z: bad watchpoint type %d"), type);
9935     }
9936 }
9937
9938 static int
9939 remote_insert_watchpoint (struct target_ops *self, CORE_ADDR addr, int len,
9940                           enum target_hw_bp_type type, struct expression *cond)
9941 {
9942   struct remote_state *rs = get_remote_state ();
9943   char *endbuf = rs->buf + get_remote_packet_size ();
9944   char *p;
9945   enum Z_packet_type packet = watchpoint_to_Z_packet (type);
9946
9947   if (packet_support (PACKET_Z0 + packet) == PACKET_DISABLE)
9948     return 1;
9949
9950   /* Make sure the remote is pointing at the right process, if
9951      necessary.  */
9952   if (!gdbarch_has_global_breakpoints (target_gdbarch ()))
9953     set_general_process ();
9954
9955   xsnprintf (rs->buf, endbuf - rs->buf, "Z%x,", packet);
9956   p = strchr (rs->buf, '\0');
9957   addr = remote_address_masked (addr);
9958   p += hexnumstr (p, (ULONGEST) addr);
9959   xsnprintf (p, endbuf - p, ",%x", len);
9960
9961   putpkt (rs->buf);
9962   getpkt (&rs->buf, &rs->buf_size, 0);
9963
9964   switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_Z0 + packet]))
9965     {
9966     case PACKET_ERROR:
9967       return -1;
9968     case PACKET_UNKNOWN:
9969       return 1;
9970     case PACKET_OK:
9971       return 0;
9972     }
9973   internal_error (__FILE__, __LINE__,
9974                   _("remote_insert_watchpoint: reached end of function"));
9975 }
9976
9977 static int
9978 remote_watchpoint_addr_within_range (struct target_ops *target, CORE_ADDR addr,
9979                                      CORE_ADDR start, int length)
9980 {
9981   CORE_ADDR diff = remote_address_masked (addr - start);
9982
9983   return diff < length;
9984 }
9985
9986
9987 static int
9988 remote_remove_watchpoint (struct target_ops *self, CORE_ADDR addr, int len,
9989                           enum target_hw_bp_type type, struct expression *cond)
9990 {
9991   struct remote_state *rs = get_remote_state ();
9992   char *endbuf = rs->buf + get_remote_packet_size ();
9993   char *p;
9994   enum Z_packet_type packet = watchpoint_to_Z_packet (type);
9995
9996   if (packet_support (PACKET_Z0 + packet) == PACKET_DISABLE)
9997     return -1;
9998
9999   /* Make sure the remote is pointing at the right process, if
10000      necessary.  */
10001   if (!gdbarch_has_global_breakpoints (target_gdbarch ()))
10002     set_general_process ();
10003
10004   xsnprintf (rs->buf, endbuf - rs->buf, "z%x,", packet);
10005   p = strchr (rs->buf, '\0');
10006   addr = remote_address_masked (addr);
10007   p += hexnumstr (p, (ULONGEST) addr);
10008   xsnprintf (p, endbuf - p, ",%x", len);
10009   putpkt (rs->buf);
10010   getpkt (&rs->buf, &rs->buf_size, 0);
10011
10012   switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_Z0 + packet]))
10013     {
10014     case PACKET_ERROR:
10015     case PACKET_UNKNOWN:
10016       return -1;
10017     case PACKET_OK:
10018       return 0;
10019     }
10020   internal_error (__FILE__, __LINE__,
10021                   _("remote_remove_watchpoint: reached end of function"));
10022 }
10023
10024
10025 int remote_hw_watchpoint_limit = -1;
10026 int remote_hw_watchpoint_length_limit = -1;
10027 int remote_hw_breakpoint_limit = -1;
10028
10029 static int
10030 remote_region_ok_for_hw_watchpoint (struct target_ops *self,
10031                                     CORE_ADDR addr, int len)
10032 {
10033   if (remote_hw_watchpoint_length_limit == 0)
10034     return 0;
10035   else if (remote_hw_watchpoint_length_limit < 0)
10036     return 1;
10037   else if (len <= remote_hw_watchpoint_length_limit)
10038     return 1;
10039   else
10040     return 0;
10041 }
10042
10043 static int
10044 remote_check_watch_resources (struct target_ops *self,
10045                               enum bptype type, int cnt, int ot)
10046 {
10047   if (type == bp_hardware_breakpoint)
10048     {
10049       if (remote_hw_breakpoint_limit == 0)
10050         return 0;
10051       else if (remote_hw_breakpoint_limit < 0)
10052         return 1;
10053       else if (cnt <= remote_hw_breakpoint_limit)
10054         return 1;
10055     }
10056   else
10057     {
10058       if (remote_hw_watchpoint_limit == 0)
10059         return 0;
10060       else if (remote_hw_watchpoint_limit < 0)
10061         return 1;
10062       else if (ot)
10063         return -1;
10064       else if (cnt <= remote_hw_watchpoint_limit)
10065         return 1;
10066     }
10067   return -1;
10068 }
10069
10070 /* The to_stopped_by_sw_breakpoint method of target remote.  */
10071
10072 static int
10073 remote_stopped_by_sw_breakpoint (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_SW_BREAKPOINT);
10079 }
10080
10081 /* The to_supports_stopped_by_sw_breakpoint method of target
10082    remote.  */
10083
10084 static int
10085 remote_supports_stopped_by_sw_breakpoint (struct target_ops *ops)
10086 {
10087   return (packet_support (PACKET_swbreak_feature) == PACKET_ENABLE);
10088 }
10089
10090 /* The to_stopped_by_hw_breakpoint method of target remote.  */
10091
10092 static int
10093 remote_stopped_by_hw_breakpoint (struct target_ops *ops)
10094 {
10095   struct thread_info *thread = inferior_thread ();
10096
10097   return (thread->priv != NULL
10098           && thread->priv->stop_reason == TARGET_STOPPED_BY_HW_BREAKPOINT);
10099 }
10100
10101 /* The to_supports_stopped_by_hw_breakpoint method of target
10102    remote.  */
10103
10104 static int
10105 remote_supports_stopped_by_hw_breakpoint (struct target_ops *ops)
10106 {
10107   return (packet_support (PACKET_hwbreak_feature) == PACKET_ENABLE);
10108 }
10109
10110 static int
10111 remote_stopped_by_watchpoint (struct target_ops *ops)
10112 {
10113   struct thread_info *thread = inferior_thread ();
10114
10115   return (thread->priv != NULL
10116           && thread->priv->stop_reason == TARGET_STOPPED_BY_WATCHPOINT);
10117 }
10118
10119 static int
10120 remote_stopped_data_address (struct target_ops *target, CORE_ADDR *addr_p)
10121 {
10122   struct thread_info *thread = inferior_thread ();
10123
10124   if (thread->priv != NULL
10125       && thread->priv->stop_reason == TARGET_STOPPED_BY_WATCHPOINT)
10126     {
10127       *addr_p = thread->priv->watch_data_address;
10128       return 1;
10129     }
10130
10131   return 0;
10132 }
10133
10134
10135 static int
10136 remote_insert_hw_breakpoint (struct target_ops *self, struct gdbarch *gdbarch,
10137                              struct bp_target_info *bp_tgt)
10138 {
10139   CORE_ADDR addr = bp_tgt->reqstd_address;
10140   struct remote_state *rs;
10141   char *p, *endbuf;
10142   char *message;
10143
10144   if (packet_support (PACKET_Z1) == PACKET_DISABLE)
10145     return -1;
10146
10147   /* Make sure the remote is pointing at the right process, if
10148      necessary.  */
10149   if (!gdbarch_has_global_breakpoints (target_gdbarch ()))
10150     set_general_process ();
10151
10152   rs = get_remote_state ();
10153   p = rs->buf;
10154   endbuf = rs->buf + get_remote_packet_size ();
10155
10156   *(p++) = 'Z';
10157   *(p++) = '1';
10158   *(p++) = ',';
10159
10160   addr = remote_address_masked (addr);
10161   p += hexnumstr (p, (ULONGEST) addr);
10162   xsnprintf (p, endbuf - p, ",%x", bp_tgt->kind);
10163
10164   if (remote_supports_cond_breakpoints (self))
10165     remote_add_target_side_condition (gdbarch, bp_tgt, p, endbuf);
10166
10167   if (remote_can_run_breakpoint_commands (self))
10168     remote_add_target_side_commands (gdbarch, bp_tgt, p);
10169
10170   putpkt (rs->buf);
10171   getpkt (&rs->buf, &rs->buf_size, 0);
10172
10173   switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_Z1]))
10174     {
10175     case PACKET_ERROR:
10176       if (rs->buf[1] == '.')
10177         {
10178           message = strchr (rs->buf + 2, '.');
10179           if (message)
10180             error (_("Remote failure reply: %s"), message + 1);
10181         }
10182       return -1;
10183     case PACKET_UNKNOWN:
10184       return -1;
10185     case PACKET_OK:
10186       return 0;
10187     }
10188   internal_error (__FILE__, __LINE__,
10189                   _("remote_insert_hw_breakpoint: reached end of function"));
10190 }
10191
10192
10193 static int
10194 remote_remove_hw_breakpoint (struct target_ops *self, struct gdbarch *gdbarch,
10195                              struct bp_target_info *bp_tgt)
10196 {
10197   CORE_ADDR addr;
10198   struct remote_state *rs = get_remote_state ();
10199   char *p = rs->buf;
10200   char *endbuf = rs->buf + get_remote_packet_size ();
10201
10202   if (packet_support (PACKET_Z1) == PACKET_DISABLE)
10203     return -1;
10204
10205   /* Make sure the remote is pointing at the right process, if
10206      necessary.  */
10207   if (!gdbarch_has_global_breakpoints (target_gdbarch ()))
10208     set_general_process ();
10209
10210   *(p++) = 'z';
10211   *(p++) = '1';
10212   *(p++) = ',';
10213
10214   addr = remote_address_masked (bp_tgt->placed_address);
10215   p += hexnumstr (p, (ULONGEST) addr);
10216   xsnprintf (p, endbuf  - p, ",%x", bp_tgt->kind);
10217
10218   putpkt (rs->buf);
10219   getpkt (&rs->buf, &rs->buf_size, 0);
10220
10221   switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_Z1]))
10222     {
10223     case PACKET_ERROR:
10224     case PACKET_UNKNOWN:
10225       return -1;
10226     case PACKET_OK:
10227       return 0;
10228     }
10229   internal_error (__FILE__, __LINE__,
10230                   _("remote_remove_hw_breakpoint: reached end of function"));
10231 }
10232
10233 /* Verify memory using the "qCRC:" request.  */
10234
10235 static int
10236 remote_verify_memory (struct target_ops *ops,
10237                       const gdb_byte *data, CORE_ADDR lma, ULONGEST size)
10238 {
10239   struct remote_state *rs = get_remote_state ();
10240   unsigned long host_crc, target_crc;
10241   char *tmp;
10242
10243   /* It doesn't make sense to use qCRC if the remote target is
10244      connected but not running.  */
10245   if (target_has_execution && packet_support (PACKET_qCRC) != PACKET_DISABLE)
10246     {
10247       enum packet_result result;
10248
10249       /* Make sure the remote is pointing at the right process.  */
10250       set_general_process ();
10251
10252       /* FIXME: assumes lma can fit into long.  */
10253       xsnprintf (rs->buf, get_remote_packet_size (), "qCRC:%lx,%lx",
10254                  (long) lma, (long) size);
10255       putpkt (rs->buf);
10256
10257       /* Be clever; compute the host_crc before waiting for target
10258          reply.  */
10259       host_crc = xcrc32 (data, size, 0xffffffff);
10260
10261       getpkt (&rs->buf, &rs->buf_size, 0);
10262
10263       result = packet_ok (rs->buf,
10264                           &remote_protocol_packets[PACKET_qCRC]);
10265       if (result == PACKET_ERROR)
10266         return -1;
10267       else if (result == PACKET_OK)
10268         {
10269           for (target_crc = 0, tmp = &rs->buf[1]; *tmp; tmp++)
10270             target_crc = target_crc * 16 + fromhex (*tmp);
10271
10272           return (host_crc == target_crc);
10273         }
10274     }
10275
10276   return simple_verify_memory (ops, data, lma, size);
10277 }
10278
10279 /* compare-sections command
10280
10281    With no arguments, compares each loadable section in the exec bfd
10282    with the same memory range on the target, and reports mismatches.
10283    Useful for verifying the image on the target against the exec file.  */
10284
10285 static void
10286 compare_sections_command (const char *args, int from_tty)
10287 {
10288   asection *s;
10289   struct cleanup *old_chain;
10290   gdb_byte *sectdata;
10291   const char *sectname;
10292   bfd_size_type size;
10293   bfd_vma lma;
10294   int matched = 0;
10295   int mismatched = 0;
10296   int res;
10297   int read_only = 0;
10298
10299   if (!exec_bfd)
10300     error (_("command cannot be used without an exec file"));
10301
10302   /* Make sure the remote is pointing at the right process.  */
10303   set_general_process ();
10304
10305   if (args != NULL && strcmp (args, "-r") == 0)
10306     {
10307       read_only = 1;
10308       args = NULL;
10309     }
10310
10311   for (s = exec_bfd->sections; s; s = s->next)
10312     {
10313       if (!(s->flags & SEC_LOAD))
10314         continue;               /* Skip non-loadable section.  */
10315
10316       if (read_only && (s->flags & SEC_READONLY) == 0)
10317         continue;               /* Skip writeable sections */
10318
10319       size = bfd_get_section_size (s);
10320       if (size == 0)
10321         continue;               /* Skip zero-length section.  */
10322
10323       sectname = bfd_get_section_name (exec_bfd, s);
10324       if (args && strcmp (args, sectname) != 0)
10325         continue;               /* Not the section selected by user.  */
10326
10327       matched = 1;              /* Do this section.  */
10328       lma = s->lma;
10329
10330       sectdata = (gdb_byte *) xmalloc (size);
10331       old_chain = make_cleanup (xfree, sectdata);
10332       bfd_get_section_contents (exec_bfd, s, sectdata, 0, size);
10333
10334       res = target_verify_memory (sectdata, lma, size);
10335
10336       if (res == -1)
10337         error (_("target memory fault, section %s, range %s -- %s"), sectname,
10338                paddress (target_gdbarch (), lma),
10339                paddress (target_gdbarch (), lma + size));
10340
10341       printf_filtered ("Section %s, range %s -- %s: ", sectname,
10342                        paddress (target_gdbarch (), lma),
10343                        paddress (target_gdbarch (), lma + size));
10344       if (res)
10345         printf_filtered ("matched.\n");
10346       else
10347         {
10348           printf_filtered ("MIS-MATCHED!\n");
10349           mismatched++;
10350         }
10351
10352       do_cleanups (old_chain);
10353     }
10354   if (mismatched > 0)
10355     warning (_("One or more sections of the target image does not match\n\
10356 the loaded file\n"));
10357   if (args && !matched)
10358     printf_filtered (_("No loaded section named '%s'.\n"), args);
10359 }
10360
10361 /* Write LEN bytes from WRITEBUF into OBJECT_NAME/ANNEX at OFFSET
10362    into remote target.  The number of bytes written to the remote
10363    target is returned, or -1 for error.  */
10364
10365 static enum target_xfer_status
10366 remote_write_qxfer (struct target_ops *ops, const char *object_name,
10367                     const char *annex, const gdb_byte *writebuf, 
10368                     ULONGEST offset, LONGEST len, ULONGEST *xfered_len,
10369                     struct packet_config *packet)
10370 {
10371   int i, buf_len;
10372   ULONGEST n;
10373   struct remote_state *rs = get_remote_state ();
10374   int max_size = get_memory_write_packet_size (); 
10375
10376   if (packet->support == PACKET_DISABLE)
10377     return TARGET_XFER_E_IO;
10378
10379   /* Insert header.  */
10380   i = snprintf (rs->buf, max_size, 
10381                 "qXfer:%s:write:%s:%s:",
10382                 object_name, annex ? annex : "",
10383                 phex_nz (offset, sizeof offset));
10384   max_size -= (i + 1);
10385
10386   /* Escape as much data as fits into rs->buf.  */
10387   buf_len = remote_escape_output 
10388     (writebuf, len, 1, (gdb_byte *) rs->buf + i, &max_size, max_size);
10389
10390   if (putpkt_binary (rs->buf, i + buf_len) < 0
10391       || getpkt_sane (&rs->buf, &rs->buf_size, 0) < 0
10392       || packet_ok (rs->buf, packet) != PACKET_OK)
10393     return TARGET_XFER_E_IO;
10394
10395   unpack_varlen_hex (rs->buf, &n);
10396
10397   *xfered_len = n;
10398   return TARGET_XFER_OK;
10399 }
10400
10401 /* Read OBJECT_NAME/ANNEX from the remote target using a qXfer packet.
10402    Data at OFFSET, of up to LEN bytes, is read into READBUF; the
10403    number of bytes read is returned, or 0 for EOF, or -1 for error.
10404    The number of bytes read may be less than LEN without indicating an
10405    EOF.  PACKET is checked and updated to indicate whether the remote
10406    target supports this object.  */
10407
10408 static enum target_xfer_status
10409 remote_read_qxfer (struct target_ops *ops, const char *object_name,
10410                    const char *annex,
10411                    gdb_byte *readbuf, ULONGEST offset, LONGEST len,
10412                    ULONGEST *xfered_len,
10413                    struct packet_config *packet)
10414 {
10415   struct remote_state *rs = get_remote_state ();
10416   LONGEST i, n, packet_len;
10417
10418   if (packet->support == PACKET_DISABLE)
10419     return TARGET_XFER_E_IO;
10420
10421   /* Check whether we've cached an end-of-object packet that matches
10422      this request.  */
10423   if (rs->finished_object)
10424     {
10425       if (strcmp (object_name, rs->finished_object) == 0
10426           && strcmp (annex ? annex : "", rs->finished_annex) == 0
10427           && offset == rs->finished_offset)
10428         return TARGET_XFER_EOF;
10429
10430
10431       /* Otherwise, we're now reading something different.  Discard
10432          the cache.  */
10433       xfree (rs->finished_object);
10434       xfree (rs->finished_annex);
10435       rs->finished_object = NULL;
10436       rs->finished_annex = NULL;
10437     }
10438
10439   /* Request only enough to fit in a single packet.  The actual data
10440      may not, since we don't know how much of it will need to be escaped;
10441      the target is free to respond with slightly less data.  We subtract
10442      five to account for the response type and the protocol frame.  */
10443   n = std::min<LONGEST> (get_remote_packet_size () - 5, len);
10444   snprintf (rs->buf, get_remote_packet_size () - 4, "qXfer:%s:read:%s:%s,%s",
10445             object_name, annex ? annex : "",
10446             phex_nz (offset, sizeof offset),
10447             phex_nz (n, sizeof n));
10448   i = putpkt (rs->buf);
10449   if (i < 0)
10450     return TARGET_XFER_E_IO;
10451
10452   rs->buf[0] = '\0';
10453   packet_len = getpkt_sane (&rs->buf, &rs->buf_size, 0);
10454   if (packet_len < 0 || packet_ok (rs->buf, packet) != PACKET_OK)
10455     return TARGET_XFER_E_IO;
10456
10457   if (rs->buf[0] != 'l' && rs->buf[0] != 'm')
10458     error (_("Unknown remote qXfer reply: %s"), rs->buf);
10459
10460   /* 'm' means there is (or at least might be) more data after this
10461      batch.  That does not make sense unless there's at least one byte
10462      of data in this reply.  */
10463   if (rs->buf[0] == 'm' && packet_len == 1)
10464     error (_("Remote qXfer reply contained no data."));
10465
10466   /* Got some data.  */
10467   i = remote_unescape_input ((gdb_byte *) rs->buf + 1,
10468                              packet_len - 1, readbuf, n);
10469
10470   /* 'l' is an EOF marker, possibly including a final block of data,
10471      or possibly empty.  If we have the final block of a non-empty
10472      object, record this fact to bypass a subsequent partial read.  */
10473   if (rs->buf[0] == 'l' && offset + i > 0)
10474     {
10475       rs->finished_object = xstrdup (object_name);
10476       rs->finished_annex = xstrdup (annex ? annex : "");
10477       rs->finished_offset = offset + i;
10478     }
10479
10480   if (i == 0)
10481     return TARGET_XFER_EOF;
10482   else
10483     {
10484       *xfered_len = i;
10485       return TARGET_XFER_OK;
10486     }
10487 }
10488
10489 static enum target_xfer_status
10490 remote_xfer_partial (struct target_ops *ops, enum target_object object,
10491                      const char *annex, gdb_byte *readbuf,
10492                      const gdb_byte *writebuf, ULONGEST offset, ULONGEST len,
10493                      ULONGEST *xfered_len)
10494 {
10495   struct remote_state *rs;
10496   int i;
10497   char *p2;
10498   char query_type;
10499   int unit_size = gdbarch_addressable_memory_unit_size (target_gdbarch ());
10500
10501   set_remote_traceframe ();
10502   set_general_thread (inferior_ptid);
10503
10504   rs = get_remote_state ();
10505
10506   /* Handle memory using the standard memory routines.  */
10507   if (object == TARGET_OBJECT_MEMORY)
10508     {
10509       /* If the remote target is connected but not running, we should
10510          pass this request down to a lower stratum (e.g. the executable
10511          file).  */
10512       if (!target_has_execution)
10513         return TARGET_XFER_EOF;
10514
10515       if (writebuf != NULL)
10516         return remote_write_bytes (offset, writebuf, len, unit_size,
10517                                    xfered_len);
10518       else
10519         return remote_read_bytes (ops, offset, readbuf, len, unit_size,
10520                                   xfered_len);
10521     }
10522
10523   /* Handle SPU memory using qxfer packets.  */
10524   if (object == TARGET_OBJECT_SPU)
10525     {
10526       if (readbuf)
10527         return remote_read_qxfer (ops, "spu", annex, readbuf, offset, len,
10528                                   xfered_len, &remote_protocol_packets
10529                                   [PACKET_qXfer_spu_read]);
10530       else
10531         return remote_write_qxfer (ops, "spu", annex, writebuf, offset, len,
10532                                    xfered_len, &remote_protocol_packets
10533                                    [PACKET_qXfer_spu_write]);
10534     }
10535
10536   /* Handle extra signal info using qxfer packets.  */
10537   if (object == TARGET_OBJECT_SIGNAL_INFO)
10538     {
10539       if (readbuf)
10540         return remote_read_qxfer (ops, "siginfo", annex, readbuf, offset, len,
10541                                   xfered_len, &remote_protocol_packets
10542                                   [PACKET_qXfer_siginfo_read]);
10543       else
10544         return remote_write_qxfer (ops, "siginfo", annex,
10545                                    writebuf, offset, len, xfered_len,
10546                                    &remote_protocol_packets
10547                                    [PACKET_qXfer_siginfo_write]);
10548     }
10549
10550   if (object == TARGET_OBJECT_STATIC_TRACE_DATA)
10551     {
10552       if (readbuf)
10553         return remote_read_qxfer (ops, "statictrace", annex,
10554                                   readbuf, offset, len, xfered_len,
10555                                   &remote_protocol_packets
10556                                   [PACKET_qXfer_statictrace_read]);
10557       else
10558         return TARGET_XFER_E_IO;
10559     }
10560
10561   /* Only handle flash writes.  */
10562   if (writebuf != NULL)
10563     {
10564       switch (object)
10565         {
10566         case TARGET_OBJECT_FLASH:
10567           return remote_flash_write (ops, offset, len, xfered_len,
10568                                      writebuf);
10569
10570         default:
10571           return TARGET_XFER_E_IO;
10572         }
10573     }
10574
10575   /* Map pre-existing objects onto letters.  DO NOT do this for new
10576      objects!!!  Instead specify new query packets.  */
10577   switch (object)
10578     {
10579     case TARGET_OBJECT_AVR:
10580       query_type = 'R';
10581       break;
10582
10583     case TARGET_OBJECT_AUXV:
10584       gdb_assert (annex == NULL);
10585       return remote_read_qxfer (ops, "auxv", annex, readbuf, offset, len,
10586                                 xfered_len,
10587                                 &remote_protocol_packets[PACKET_qXfer_auxv]);
10588
10589     case TARGET_OBJECT_AVAILABLE_FEATURES:
10590       return remote_read_qxfer
10591         (ops, "features", annex, readbuf, offset, len, xfered_len,
10592          &remote_protocol_packets[PACKET_qXfer_features]);
10593
10594     case TARGET_OBJECT_LIBRARIES:
10595       return remote_read_qxfer
10596         (ops, "libraries", annex, readbuf, offset, len, xfered_len,
10597          &remote_protocol_packets[PACKET_qXfer_libraries]);
10598
10599     case TARGET_OBJECT_LIBRARIES_SVR4:
10600       return remote_read_qxfer
10601         (ops, "libraries-svr4", annex, readbuf, offset, len, xfered_len,
10602          &remote_protocol_packets[PACKET_qXfer_libraries_svr4]);
10603
10604     case TARGET_OBJECT_MEMORY_MAP:
10605       gdb_assert (annex == NULL);
10606       return remote_read_qxfer (ops, "memory-map", annex, readbuf, offset, len,
10607                                  xfered_len,
10608                                 &remote_protocol_packets[PACKET_qXfer_memory_map]);
10609
10610     case TARGET_OBJECT_OSDATA:
10611       /* Should only get here if we're connected.  */
10612       gdb_assert (rs->remote_desc);
10613       return remote_read_qxfer
10614         (ops, "osdata", annex, readbuf, offset, len, xfered_len,
10615         &remote_protocol_packets[PACKET_qXfer_osdata]);
10616
10617     case TARGET_OBJECT_THREADS:
10618       gdb_assert (annex == NULL);
10619       return remote_read_qxfer (ops, "threads", annex, readbuf, offset, len,
10620                                 xfered_len,
10621                                 &remote_protocol_packets[PACKET_qXfer_threads]);
10622
10623     case TARGET_OBJECT_TRACEFRAME_INFO:
10624       gdb_assert (annex == NULL);
10625       return remote_read_qxfer
10626         (ops, "traceframe-info", annex, readbuf, offset, len, xfered_len,
10627          &remote_protocol_packets[PACKET_qXfer_traceframe_info]);
10628
10629     case TARGET_OBJECT_FDPIC:
10630       return remote_read_qxfer (ops, "fdpic", annex, readbuf, offset, len,
10631                                 xfered_len,
10632                                 &remote_protocol_packets[PACKET_qXfer_fdpic]);
10633
10634     case TARGET_OBJECT_OPENVMS_UIB:
10635       return remote_read_qxfer (ops, "uib", annex, readbuf, offset, len,
10636                                 xfered_len,
10637                                 &remote_protocol_packets[PACKET_qXfer_uib]);
10638
10639     case TARGET_OBJECT_BTRACE:
10640       return remote_read_qxfer (ops, "btrace", annex, readbuf, offset, len,
10641                                 xfered_len,
10642         &remote_protocol_packets[PACKET_qXfer_btrace]);
10643
10644     case TARGET_OBJECT_BTRACE_CONF:
10645       return remote_read_qxfer (ops, "btrace-conf", annex, readbuf, offset,
10646                                 len, xfered_len,
10647         &remote_protocol_packets[PACKET_qXfer_btrace_conf]);
10648
10649     case TARGET_OBJECT_EXEC_FILE:
10650       return remote_read_qxfer (ops, "exec-file", annex, readbuf, offset,
10651                                 len, xfered_len,
10652         &remote_protocol_packets[PACKET_qXfer_exec_file]);
10653
10654     default:
10655       return TARGET_XFER_E_IO;
10656     }
10657
10658   /* Minimum outbuf size is get_remote_packet_size ().  If LEN is not
10659      large enough let the caller deal with it.  */
10660   if (len < get_remote_packet_size ())
10661     return TARGET_XFER_E_IO;
10662   len = get_remote_packet_size ();
10663
10664   /* Except for querying the minimum buffer size, target must be open.  */
10665   if (!rs->remote_desc)
10666     error (_("remote query is only available after target open"));
10667
10668   gdb_assert (annex != NULL);
10669   gdb_assert (readbuf != NULL);
10670
10671   p2 = rs->buf;
10672   *p2++ = 'q';
10673   *p2++ = query_type;
10674
10675   /* We used one buffer char for the remote protocol q command and
10676      another for the query type.  As the remote protocol encapsulation
10677      uses 4 chars plus one extra in case we are debugging
10678      (remote_debug), we have PBUFZIZ - 7 left to pack the query
10679      string.  */
10680   i = 0;
10681   while (annex[i] && (i < (get_remote_packet_size () - 8)))
10682     {
10683       /* Bad caller may have sent forbidden characters.  */
10684       gdb_assert (isprint (annex[i]) && annex[i] != '$' && annex[i] != '#');
10685       *p2++ = annex[i];
10686       i++;
10687     }
10688   *p2 = '\0';
10689   gdb_assert (annex[i] == '\0');
10690
10691   i = putpkt (rs->buf);
10692   if (i < 0)
10693     return TARGET_XFER_E_IO;
10694
10695   getpkt (&rs->buf, &rs->buf_size, 0);
10696   strcpy ((char *) readbuf, rs->buf);
10697
10698   *xfered_len = strlen ((char *) readbuf);
10699   return TARGET_XFER_OK;
10700 }
10701
10702 /* Implementation of to_get_memory_xfer_limit.  */
10703
10704 static ULONGEST
10705 remote_get_memory_xfer_limit (struct target_ops *ops)
10706 {
10707   return get_memory_write_packet_size ();
10708 }
10709
10710 static int
10711 remote_search_memory (struct target_ops* ops,
10712                       CORE_ADDR start_addr, ULONGEST search_space_len,
10713                       const gdb_byte *pattern, ULONGEST pattern_len,
10714                       CORE_ADDR *found_addrp)
10715 {
10716   int addr_size = gdbarch_addr_bit (target_gdbarch ()) / 8;
10717   struct remote_state *rs = get_remote_state ();
10718   int max_size = get_memory_write_packet_size ();
10719   struct packet_config *packet =
10720     &remote_protocol_packets[PACKET_qSearch_memory];
10721   /* Number of packet bytes used to encode the pattern;
10722      this could be more than PATTERN_LEN due to escape characters.  */
10723   int escaped_pattern_len;
10724   /* Amount of pattern that was encodable in the packet.  */
10725   int used_pattern_len;
10726   int i;
10727   int found;
10728   ULONGEST found_addr;
10729
10730   /* Don't go to the target if we don't have to.
10731      This is done before checking packet->support to avoid the possibility that
10732      a success for this edge case means the facility works in general.  */
10733   if (pattern_len > search_space_len)
10734     return 0;
10735   if (pattern_len == 0)
10736     {
10737       *found_addrp = start_addr;
10738       return 1;
10739     }
10740
10741   /* If we already know the packet isn't supported, fall back to the simple
10742      way of searching memory.  */
10743
10744   if (packet_config_support (packet) == PACKET_DISABLE)
10745     {
10746       /* Target doesn't provided special support, fall back and use the
10747          standard support (copy memory and do the search here).  */
10748       return simple_search_memory (ops, start_addr, search_space_len,
10749                                    pattern, pattern_len, found_addrp);
10750     }
10751
10752   /* Make sure the remote is pointing at the right process.  */
10753   set_general_process ();
10754
10755   /* Insert header.  */
10756   i = snprintf (rs->buf, max_size, 
10757                 "qSearch:memory:%s;%s;",
10758                 phex_nz (start_addr, addr_size),
10759                 phex_nz (search_space_len, sizeof (search_space_len)));
10760   max_size -= (i + 1);
10761
10762   /* Escape as much data as fits into rs->buf.  */
10763   escaped_pattern_len =
10764     remote_escape_output (pattern, pattern_len, 1, (gdb_byte *) rs->buf + i,
10765                           &used_pattern_len, max_size);
10766
10767   /* Bail if the pattern is too large.  */
10768   if (used_pattern_len != pattern_len)
10769     error (_("Pattern is too large to transmit to remote target."));
10770
10771   if (putpkt_binary (rs->buf, i + escaped_pattern_len) < 0
10772       || getpkt_sane (&rs->buf, &rs->buf_size, 0) < 0
10773       || packet_ok (rs->buf, packet) != PACKET_OK)
10774     {
10775       /* The request may not have worked because the command is not
10776          supported.  If so, fall back to the simple way.  */
10777       if (packet->support == PACKET_DISABLE)
10778         {
10779           return simple_search_memory (ops, start_addr, search_space_len,
10780                                        pattern, pattern_len, found_addrp);
10781         }
10782       return -1;
10783     }
10784
10785   if (rs->buf[0] == '0')
10786     found = 0;
10787   else if (rs->buf[0] == '1')
10788     {
10789       found = 1;
10790       if (rs->buf[1] != ',')
10791         error (_("Unknown qSearch:memory reply: %s"), rs->buf);
10792       unpack_varlen_hex (rs->buf + 2, &found_addr);
10793       *found_addrp = found_addr;
10794     }
10795   else
10796     error (_("Unknown qSearch:memory reply: %s"), rs->buf);
10797
10798   return found;
10799 }
10800
10801 static void
10802 remote_rcmd (struct target_ops *self, const char *command,
10803              struct ui_file *outbuf)
10804 {
10805   struct remote_state *rs = get_remote_state ();
10806   char *p = rs->buf;
10807
10808   if (!rs->remote_desc)
10809     error (_("remote rcmd is only available after target open"));
10810
10811   /* Send a NULL command across as an empty command.  */
10812   if (command == NULL)
10813     command = "";
10814
10815   /* The query prefix.  */
10816   strcpy (rs->buf, "qRcmd,");
10817   p = strchr (rs->buf, '\0');
10818
10819   if ((strlen (rs->buf) + strlen (command) * 2 + 8/*misc*/)
10820       > get_remote_packet_size ())
10821     error (_("\"monitor\" command ``%s'' is too long."), command);
10822
10823   /* Encode the actual command.  */
10824   bin2hex ((const gdb_byte *) command, p, strlen (command));
10825
10826   if (putpkt (rs->buf) < 0)
10827     error (_("Communication problem with target."));
10828
10829   /* get/display the response */
10830   while (1)
10831     {
10832       char *buf;
10833
10834       /* XXX - see also remote_get_noisy_reply().  */
10835       QUIT;                     /* Allow user to bail out with ^C.  */
10836       rs->buf[0] = '\0';
10837       if (getpkt_sane (&rs->buf, &rs->buf_size, 0) == -1)
10838         { 
10839           /* Timeout.  Continue to (try to) read responses.
10840              This is better than stopping with an error, assuming the stub
10841              is still executing the (long) monitor command.
10842              If needed, the user can interrupt gdb using C-c, obtaining
10843              an effect similar to stop on timeout.  */
10844           continue;
10845         }
10846       buf = rs->buf;
10847       if (buf[0] == '\0')
10848         error (_("Target does not support this command."));
10849       if (buf[0] == 'O' && buf[1] != 'K')
10850         {
10851           remote_console_output (buf + 1); /* 'O' message from stub.  */
10852           continue;
10853         }
10854       if (strcmp (buf, "OK") == 0)
10855         break;
10856       if (strlen (buf) == 3 && buf[0] == 'E'
10857           && isdigit (buf[1]) && isdigit (buf[2]))
10858         {
10859           error (_("Protocol error with Rcmd"));
10860         }
10861       for (p = buf; p[0] != '\0' && p[1] != '\0'; p += 2)
10862         {
10863           char c = (fromhex (p[0]) << 4) + fromhex (p[1]);
10864
10865           fputc_unfiltered (c, outbuf);
10866         }
10867       break;
10868     }
10869 }
10870
10871 static VEC(mem_region_s) *
10872 remote_memory_map (struct target_ops *ops)
10873 {
10874   VEC(mem_region_s) *result = NULL;
10875   char *text = target_read_stralloc (&current_target,
10876                                      TARGET_OBJECT_MEMORY_MAP, NULL);
10877
10878   if (text)
10879     {
10880       struct cleanup *back_to = make_cleanup (xfree, text);
10881
10882       result = parse_memory_map (text);
10883       do_cleanups (back_to);
10884     }
10885
10886   return result;
10887 }
10888
10889 static void
10890 packet_command (const char *args, int from_tty)
10891 {
10892   struct remote_state *rs = get_remote_state ();
10893
10894   if (!rs->remote_desc)
10895     error (_("command can only be used with remote target"));
10896
10897   if (!args)
10898     error (_("remote-packet command requires packet text as argument"));
10899
10900   puts_filtered ("sending: ");
10901   print_packet (args);
10902   puts_filtered ("\n");
10903   putpkt (args);
10904
10905   getpkt (&rs->buf, &rs->buf_size, 0);
10906   puts_filtered ("received: ");
10907   print_packet (rs->buf);
10908   puts_filtered ("\n");
10909 }
10910
10911 #if 0
10912 /* --------- UNIT_TEST for THREAD oriented PACKETS ------------------- */
10913
10914 static void display_thread_info (struct gdb_ext_thread_info *info);
10915
10916 static void threadset_test_cmd (char *cmd, int tty);
10917
10918 static void threadalive_test (char *cmd, int tty);
10919
10920 static void threadlist_test_cmd (char *cmd, int tty);
10921
10922 int get_and_display_threadinfo (threadref *ref);
10923
10924 static void threadinfo_test_cmd (char *cmd, int tty);
10925
10926 static int thread_display_step (threadref *ref, void *context);
10927
10928 static void threadlist_update_test_cmd (char *cmd, int tty);
10929
10930 static void init_remote_threadtests (void);
10931
10932 #define SAMPLE_THREAD  0x05060708       /* Truncated 64 bit threadid.  */
10933
10934 static void
10935 threadset_test_cmd (char *cmd, int tty)
10936 {
10937   int sample_thread = SAMPLE_THREAD;
10938
10939   printf_filtered (_("Remote threadset test\n"));
10940   set_general_thread (sample_thread);
10941 }
10942
10943
10944 static void
10945 threadalive_test (char *cmd, int tty)
10946 {
10947   int sample_thread = SAMPLE_THREAD;
10948   int pid = ptid_get_pid (inferior_ptid);
10949   ptid_t ptid = ptid_build (pid, sample_thread, 0);
10950
10951   if (remote_thread_alive (ptid))
10952     printf_filtered ("PASS: Thread alive test\n");
10953   else
10954     printf_filtered ("FAIL: Thread alive test\n");
10955 }
10956
10957 void output_threadid (char *title, threadref *ref);
10958
10959 void
10960 output_threadid (char *title, threadref *ref)
10961 {
10962   char hexid[20];
10963
10964   pack_threadid (&hexid[0], ref);       /* Convert threead id into hex.  */
10965   hexid[16] = 0;
10966   printf_filtered ("%s  %s\n", title, (&hexid[0]));
10967 }
10968
10969 static void
10970 threadlist_test_cmd (char *cmd, int tty)
10971 {
10972   int startflag = 1;
10973   threadref nextthread;
10974   int done, result_count;
10975   threadref threadlist[3];
10976
10977   printf_filtered ("Remote Threadlist test\n");
10978   if (!remote_get_threadlist (startflag, &nextthread, 3, &done,
10979                               &result_count, &threadlist[0]))
10980     printf_filtered ("FAIL: threadlist test\n");
10981   else
10982     {
10983       threadref *scan = threadlist;
10984       threadref *limit = scan + result_count;
10985
10986       while (scan < limit)
10987         output_threadid (" thread ", scan++);
10988     }
10989 }
10990
10991 void
10992 display_thread_info (struct gdb_ext_thread_info *info)
10993 {
10994   output_threadid ("Threadid: ", &info->threadid);
10995   printf_filtered ("Name: %s\n ", info->shortname);
10996   printf_filtered ("State: %s\n", info->display);
10997   printf_filtered ("other: %s\n\n", info->more_display);
10998 }
10999
11000 int
11001 get_and_display_threadinfo (threadref *ref)
11002 {
11003   int result;
11004   int set;
11005   struct gdb_ext_thread_info threadinfo;
11006
11007   set = TAG_THREADID | TAG_EXISTS | TAG_THREADNAME
11008     | TAG_MOREDISPLAY | TAG_DISPLAY;
11009   if (0 != (result = remote_get_threadinfo (ref, set, &threadinfo)))
11010     display_thread_info (&threadinfo);
11011   return result;
11012 }
11013
11014 static void
11015 threadinfo_test_cmd (char *cmd, int tty)
11016 {
11017   int athread = SAMPLE_THREAD;
11018   threadref thread;
11019   int set;
11020
11021   int_to_threadref (&thread, athread);
11022   printf_filtered ("Remote Threadinfo test\n");
11023   if (!get_and_display_threadinfo (&thread))
11024     printf_filtered ("FAIL cannot get thread info\n");
11025 }
11026
11027 static int
11028 thread_display_step (threadref *ref, void *context)
11029 {
11030   /* output_threadid(" threadstep ",ref); *//* simple test */
11031   return get_and_display_threadinfo (ref);
11032 }
11033
11034 static void
11035 threadlist_update_test_cmd (char *cmd, int tty)
11036 {
11037   printf_filtered ("Remote Threadlist update test\n");
11038   remote_threadlist_iterator (thread_display_step, 0, CRAZY_MAX_THREADS);
11039 }
11040
11041 static void
11042 init_remote_threadtests (void)
11043 {
11044   add_com ("tlist", class_obscure, threadlist_test_cmd,
11045            _("Fetch and print the remote list of "
11046              "thread identifiers, one pkt only"));
11047   add_com ("tinfo", class_obscure, threadinfo_test_cmd,
11048            _("Fetch and display info about one thread"));
11049   add_com ("tset", class_obscure, threadset_test_cmd,
11050            _("Test setting to a different thread"));
11051   add_com ("tupd", class_obscure, threadlist_update_test_cmd,
11052            _("Iterate through updating all remote thread info"));
11053   add_com ("talive", class_obscure, threadalive_test,
11054            _(" Remote thread alive test "));
11055 }
11056
11057 #endif /* 0 */
11058
11059 /* Convert a thread ID to a string.  Returns the string in a static
11060    buffer.  */
11061
11062 static const char *
11063 remote_pid_to_str (struct target_ops *ops, ptid_t ptid)
11064 {
11065   static char buf[64];
11066   struct remote_state *rs = get_remote_state ();
11067
11068   if (ptid_equal (ptid, null_ptid))
11069     return normal_pid_to_str (ptid);
11070   else if (ptid_is_pid (ptid))
11071     {
11072       /* Printing an inferior target id.  */
11073
11074       /* When multi-process extensions are off, there's no way in the
11075          remote protocol to know the remote process id, if there's any
11076          at all.  There's one exception --- when we're connected with
11077          target extended-remote, and we manually attached to a process
11078          with "attach PID".  We don't record anywhere a flag that
11079          allows us to distinguish that case from the case of
11080          connecting with extended-remote and the stub already being
11081          attached to a process, and reporting yes to qAttached, hence
11082          no smart special casing here.  */
11083       if (!remote_multi_process_p (rs))
11084         {
11085           xsnprintf (buf, sizeof buf, "Remote target");
11086           return buf;
11087         }
11088
11089       return normal_pid_to_str (ptid);
11090     }
11091   else
11092     {
11093       if (ptid_equal (magic_null_ptid, ptid))
11094         xsnprintf (buf, sizeof buf, "Thread <main>");
11095       else if (remote_multi_process_p (rs))
11096         if (ptid_get_lwp (ptid) == 0)
11097           return normal_pid_to_str (ptid);
11098         else
11099           xsnprintf (buf, sizeof buf, "Thread %d.%ld",
11100                      ptid_get_pid (ptid), ptid_get_lwp (ptid));
11101       else
11102         xsnprintf (buf, sizeof buf, "Thread %ld",
11103                    ptid_get_lwp (ptid));
11104       return buf;
11105     }
11106 }
11107
11108 /* Get the address of the thread local variable in OBJFILE which is
11109    stored at OFFSET within the thread local storage for thread PTID.  */
11110
11111 static CORE_ADDR
11112 remote_get_thread_local_address (struct target_ops *ops,
11113                                  ptid_t ptid, CORE_ADDR lm, CORE_ADDR offset)
11114 {
11115   if (packet_support (PACKET_qGetTLSAddr) != 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, "qGetTLSAddr:");
11123       p += strlen (p);
11124       p = write_ptid (p, endp, ptid);
11125       *p++ = ',';
11126       p += hexnumstr (p, offset);
11127       *p++ = ',';
11128       p += hexnumstr (p, lm);
11129       *p++ = '\0';
11130
11131       putpkt (rs->buf);
11132       getpkt (&rs->buf, &rs->buf_size, 0);
11133       result = packet_ok (rs->buf,
11134                           &remote_protocol_packets[PACKET_qGetTLSAddr]);
11135       if (result == PACKET_OK)
11136         {
11137           ULONGEST result;
11138
11139           unpack_varlen_hex (rs->buf, &result);
11140           return result;
11141         }
11142       else if (result == PACKET_UNKNOWN)
11143         throw_error (TLS_GENERIC_ERROR,
11144                      _("Remote target doesn't support qGetTLSAddr packet"));
11145       else
11146         throw_error (TLS_GENERIC_ERROR,
11147                      _("Remote target failed to process qGetTLSAddr request"));
11148     }
11149   else
11150     throw_error (TLS_GENERIC_ERROR,
11151                  _("TLS not supported or disabled on this target"));
11152   /* Not reached.  */
11153   return 0;
11154 }
11155
11156 /* Provide thread local base, i.e. Thread Information Block address.
11157    Returns 1 if ptid is found and thread_local_base is non zero.  */
11158
11159 static int
11160 remote_get_tib_address (struct target_ops *self, ptid_t ptid, CORE_ADDR *addr)
11161 {
11162   if (packet_support (PACKET_qGetTIBAddr) != PACKET_DISABLE)
11163     {
11164       struct remote_state *rs = get_remote_state ();
11165       char *p = rs->buf;
11166       char *endp = rs->buf + get_remote_packet_size ();
11167       enum packet_result result;
11168
11169       strcpy (p, "qGetTIBAddr:");
11170       p += strlen (p);
11171       p = write_ptid (p, endp, ptid);
11172       *p++ = '\0';
11173
11174       putpkt (rs->buf);
11175       getpkt (&rs->buf, &rs->buf_size, 0);
11176       result = packet_ok (rs->buf,
11177                           &remote_protocol_packets[PACKET_qGetTIBAddr]);
11178       if (result == PACKET_OK)
11179         {
11180           ULONGEST result;
11181
11182           unpack_varlen_hex (rs->buf, &result);
11183           if (addr)
11184             *addr = (CORE_ADDR) result;
11185           return 1;
11186         }
11187       else if (result == PACKET_UNKNOWN)
11188         error (_("Remote target doesn't support qGetTIBAddr packet"));
11189       else
11190         error (_("Remote target failed to process qGetTIBAddr request"));
11191     }
11192   else
11193     error (_("qGetTIBAddr not supported or disabled on this target"));
11194   /* Not reached.  */
11195   return 0;
11196 }
11197
11198 /* Support for inferring a target description based on the current
11199    architecture and the size of a 'g' packet.  While the 'g' packet
11200    can have any size (since optional registers can be left off the
11201    end), some sizes are easily recognizable given knowledge of the
11202    approximate architecture.  */
11203
11204 struct remote_g_packet_guess
11205 {
11206   int bytes;
11207   const struct target_desc *tdesc;
11208 };
11209 typedef struct remote_g_packet_guess remote_g_packet_guess_s;
11210 DEF_VEC_O(remote_g_packet_guess_s);
11211
11212 struct remote_g_packet_data
11213 {
11214   VEC(remote_g_packet_guess_s) *guesses;
11215 };
11216
11217 static struct gdbarch_data *remote_g_packet_data_handle;
11218
11219 static void *
11220 remote_g_packet_data_init (struct obstack *obstack)
11221 {
11222   return OBSTACK_ZALLOC (obstack, struct remote_g_packet_data);
11223 }
11224
11225 void
11226 register_remote_g_packet_guess (struct gdbarch *gdbarch, int bytes,
11227                                 const struct target_desc *tdesc)
11228 {
11229   struct remote_g_packet_data *data
11230     = ((struct remote_g_packet_data *)
11231        gdbarch_data (gdbarch, remote_g_packet_data_handle));
11232   struct remote_g_packet_guess new_guess, *guess;
11233   int ix;
11234
11235   gdb_assert (tdesc != NULL);
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       internal_error (__FILE__, __LINE__,
11242                       _("Duplicate g packet description added for size %d"),
11243                       bytes);
11244
11245   new_guess.bytes = bytes;
11246   new_guess.tdesc = tdesc;
11247   VEC_safe_push (remote_g_packet_guess_s, data->guesses, &new_guess);
11248 }
11249
11250 /* Return 1 if remote_read_description would do anything on this target
11251    and architecture, 0 otherwise.  */
11252
11253 static int
11254 remote_read_description_p (struct target_ops *target)
11255 {
11256   struct remote_g_packet_data *data
11257     = ((struct remote_g_packet_data *)
11258        gdbarch_data (target_gdbarch (), remote_g_packet_data_handle));
11259
11260   if (!VEC_empty (remote_g_packet_guess_s, data->guesses))
11261     return 1;
11262
11263   return 0;
11264 }
11265
11266 static const struct target_desc *
11267 remote_read_description (struct target_ops *target)
11268 {
11269   struct remote_g_packet_data *data
11270     = ((struct remote_g_packet_data *)
11271        gdbarch_data (target_gdbarch (), remote_g_packet_data_handle));
11272
11273   /* Do not try this during initial connection, when we do not know
11274      whether there is a running but stopped thread.  */
11275   if (!target_has_execution || ptid_equal (inferior_ptid, null_ptid))
11276     return target->beneath->to_read_description (target->beneath);
11277
11278   if (!VEC_empty (remote_g_packet_guess_s, data->guesses))
11279     {
11280       struct remote_g_packet_guess *guess;
11281       int ix;
11282       int bytes = send_g_packet ();
11283
11284       for (ix = 0;
11285            VEC_iterate (remote_g_packet_guess_s, data->guesses, ix, guess);
11286            ix++)
11287         if (guess->bytes == bytes)
11288           return guess->tdesc;
11289
11290       /* We discard the g packet.  A minor optimization would be to
11291          hold on to it, and fill the register cache once we have selected
11292          an architecture, but it's too tricky to do safely.  */
11293     }
11294
11295   return target->beneath->to_read_description (target->beneath);
11296 }
11297
11298 /* Remote file transfer support.  This is host-initiated I/O, not
11299    target-initiated; for target-initiated, see remote-fileio.c.  */
11300
11301 /* If *LEFT is at least the length of STRING, copy STRING to
11302    *BUFFER, update *BUFFER to point to the new end of the buffer, and
11303    decrease *LEFT.  Otherwise raise an error.  */
11304
11305 static void
11306 remote_buffer_add_string (char **buffer, int *left, const char *string)
11307 {
11308   int len = strlen (string);
11309
11310   if (len > *left)
11311     error (_("Packet too long for target."));
11312
11313   memcpy (*buffer, string, len);
11314   *buffer += len;
11315   *left -= len;
11316
11317   /* NUL-terminate the buffer as a convenience, if there is
11318      room.  */
11319   if (*left)
11320     **buffer = '\0';
11321 }
11322
11323 /* If *LEFT is large enough, hex encode LEN bytes from BYTES into
11324    *BUFFER, update *BUFFER to point to the new end of the buffer, and
11325    decrease *LEFT.  Otherwise raise an error.  */
11326
11327 static void
11328 remote_buffer_add_bytes (char **buffer, int *left, const gdb_byte *bytes,
11329                          int len)
11330 {
11331   if (2 * len > *left)
11332     error (_("Packet too long for target."));
11333
11334   bin2hex (bytes, *buffer, len);
11335   *buffer += 2 * len;
11336   *left -= 2 * len;
11337
11338   /* NUL-terminate the buffer as a convenience, if there is
11339      room.  */
11340   if (*left)
11341     **buffer = '\0';
11342 }
11343
11344 /* If *LEFT is large enough, convert VALUE to hex and add it to
11345    *BUFFER, update *BUFFER to point to the new end of the buffer, and
11346    decrease *LEFT.  Otherwise raise an error.  */
11347
11348 static void
11349 remote_buffer_add_int (char **buffer, int *left, ULONGEST value)
11350 {
11351   int len = hexnumlen (value);
11352
11353   if (len > *left)
11354     error (_("Packet too long for target."));
11355
11356   hexnumstr (*buffer, value);
11357   *buffer += len;
11358   *left -= len;
11359
11360   /* NUL-terminate the buffer as a convenience, if there is
11361      room.  */
11362   if (*left)
11363     **buffer = '\0';
11364 }
11365
11366 /* Parse an I/O result packet from BUFFER.  Set RETCODE to the return
11367    value, *REMOTE_ERRNO to the remote error number or zero if none
11368    was included, and *ATTACHMENT to point to the start of the annex
11369    if any.  The length of the packet isn't needed here; there may
11370    be NUL bytes in BUFFER, but they will be after *ATTACHMENT.
11371
11372    Return 0 if the packet could be parsed, -1 if it could not.  If
11373    -1 is returned, the other variables may not be initialized.  */
11374
11375 static int
11376 remote_hostio_parse_result (char *buffer, int *retcode,
11377                             int *remote_errno, char **attachment)
11378 {
11379   char *p, *p2;
11380
11381   *remote_errno = 0;
11382   *attachment = NULL;
11383
11384   if (buffer[0] != 'F')
11385     return -1;
11386
11387   errno = 0;
11388   *retcode = strtol (&buffer[1], &p, 16);
11389   if (errno != 0 || p == &buffer[1])
11390     return -1;
11391
11392   /* Check for ",errno".  */
11393   if (*p == ',')
11394     {
11395       errno = 0;
11396       *remote_errno = strtol (p + 1, &p2, 16);
11397       if (errno != 0 || p + 1 == p2)
11398         return -1;
11399       p = p2;
11400     }
11401
11402   /* Check for ";attachment".  If there is no attachment, the
11403      packet should end here.  */
11404   if (*p == ';')
11405     {
11406       *attachment = p + 1;
11407       return 0;
11408     }
11409   else if (*p == '\0')
11410     return 0;
11411   else
11412     return -1;
11413 }
11414
11415 /* Send a prepared I/O packet to the target and read its response.
11416    The prepared packet is in the global RS->BUF before this function
11417    is called, and the answer is there when we return.
11418
11419    COMMAND_BYTES is the length of the request to send, which may include
11420    binary data.  WHICH_PACKET is the packet configuration to check
11421    before attempting a packet.  If an error occurs, *REMOTE_ERRNO
11422    is set to the error number and -1 is returned.  Otherwise the value
11423    returned by the function is returned.
11424
11425    ATTACHMENT and ATTACHMENT_LEN should be non-NULL if and only if an
11426    attachment is expected; an error will be reported if there's a
11427    mismatch.  If one is found, *ATTACHMENT will be set to point into
11428    the packet buffer and *ATTACHMENT_LEN will be set to the
11429    attachment's length.  */
11430
11431 static int
11432 remote_hostio_send_command (int command_bytes, int which_packet,
11433                             int *remote_errno, char **attachment,
11434                             int *attachment_len)
11435 {
11436   struct remote_state *rs = get_remote_state ();
11437   int ret, bytes_read;
11438   char *attachment_tmp;
11439
11440   if (!rs->remote_desc
11441       || packet_support (which_packet) == PACKET_DISABLE)
11442     {
11443       *remote_errno = FILEIO_ENOSYS;
11444       return -1;
11445     }
11446
11447   putpkt_binary (rs->buf, command_bytes);
11448   bytes_read = getpkt_sane (&rs->buf, &rs->buf_size, 0);
11449
11450   /* If it timed out, something is wrong.  Don't try to parse the
11451      buffer.  */
11452   if (bytes_read < 0)
11453     {
11454       *remote_errno = FILEIO_EINVAL;
11455       return -1;
11456     }
11457
11458   switch (packet_ok (rs->buf, &remote_protocol_packets[which_packet]))
11459     {
11460     case PACKET_ERROR:
11461       *remote_errno = FILEIO_EINVAL;
11462       return -1;
11463     case PACKET_UNKNOWN:
11464       *remote_errno = FILEIO_ENOSYS;
11465       return -1;
11466     case PACKET_OK:
11467       break;
11468     }
11469
11470   if (remote_hostio_parse_result (rs->buf, &ret, remote_errno,
11471                                   &attachment_tmp))
11472     {
11473       *remote_errno = FILEIO_EINVAL;
11474       return -1;
11475     }
11476
11477   /* Make sure we saw an attachment if and only if we expected one.  */
11478   if ((attachment_tmp == NULL && attachment != NULL)
11479       || (attachment_tmp != NULL && attachment == NULL))
11480     {
11481       *remote_errno = FILEIO_EINVAL;
11482       return -1;
11483     }
11484
11485   /* If an attachment was found, it must point into the packet buffer;
11486      work out how many bytes there were.  */
11487   if (attachment_tmp != NULL)
11488     {
11489       *attachment = attachment_tmp;
11490       *attachment_len = bytes_read - (*attachment - rs->buf);
11491     }
11492
11493   return ret;
11494 }
11495
11496 /* Invalidate the readahead cache.  */
11497
11498 static void
11499 readahead_cache_invalidate (void)
11500 {
11501   struct remote_state *rs = get_remote_state ();
11502
11503   rs->readahead_cache.fd = -1;
11504 }
11505
11506 /* Invalidate the readahead cache if it is holding data for FD.  */
11507
11508 static void
11509 readahead_cache_invalidate_fd (int fd)
11510 {
11511   struct remote_state *rs = get_remote_state ();
11512
11513   if (rs->readahead_cache.fd == fd)
11514     rs->readahead_cache.fd = -1;
11515 }
11516
11517 /* Set the filesystem remote_hostio functions that take FILENAME
11518    arguments will use.  Return 0 on success, or -1 if an error
11519    occurs (and set *REMOTE_ERRNO).  */
11520
11521 static int
11522 remote_hostio_set_filesystem (struct inferior *inf, int *remote_errno)
11523 {
11524   struct remote_state *rs = get_remote_state ();
11525   int required_pid = (inf == NULL || inf->fake_pid_p) ? 0 : inf->pid;
11526   char *p = rs->buf;
11527   int left = get_remote_packet_size () - 1;
11528   char arg[9];
11529   int ret;
11530
11531   if (packet_support (PACKET_vFile_setfs) == PACKET_DISABLE)
11532     return 0;
11533
11534   if (rs->fs_pid != -1 && required_pid == rs->fs_pid)
11535     return 0;
11536
11537   remote_buffer_add_string (&p, &left, "vFile:setfs:");
11538
11539   xsnprintf (arg, sizeof (arg), "%x", required_pid);
11540   remote_buffer_add_string (&p, &left, arg);
11541
11542   ret = remote_hostio_send_command (p - rs->buf, PACKET_vFile_setfs,
11543                                     remote_errno, NULL, NULL);
11544
11545   if (packet_support (PACKET_vFile_setfs) == PACKET_DISABLE)
11546     return 0;
11547
11548   if (ret == 0)
11549     rs->fs_pid = required_pid;
11550
11551   return ret;
11552 }
11553
11554 /* Implementation of to_fileio_open.  */
11555
11556 static int
11557 remote_hostio_open (struct target_ops *self,
11558                     struct inferior *inf, const char *filename,
11559                     int flags, int mode, int warn_if_slow,
11560                     int *remote_errno)
11561 {
11562   struct remote_state *rs = get_remote_state ();
11563   char *p = rs->buf;
11564   int left = get_remote_packet_size () - 1;
11565
11566   if (warn_if_slow)
11567     {
11568       static int warning_issued = 0;
11569
11570       printf_unfiltered (_("Reading %s from remote target...\n"),
11571                          filename);
11572
11573       if (!warning_issued)
11574         {
11575           warning (_("File transfers from remote targets can be slow."
11576                      " Use \"set sysroot\" to access files locally"
11577                      " instead."));
11578           warning_issued = 1;
11579         }
11580     }
11581
11582   if (remote_hostio_set_filesystem (inf, remote_errno) != 0)
11583     return -1;
11584
11585   remote_buffer_add_string (&p, &left, "vFile:open:");
11586
11587   remote_buffer_add_bytes (&p, &left, (const gdb_byte *) filename,
11588                            strlen (filename));
11589   remote_buffer_add_string (&p, &left, ",");
11590
11591   remote_buffer_add_int (&p, &left, flags);
11592   remote_buffer_add_string (&p, &left, ",");
11593
11594   remote_buffer_add_int (&p, &left, mode);
11595
11596   return remote_hostio_send_command (p - rs->buf, PACKET_vFile_open,
11597                                      remote_errno, NULL, NULL);
11598 }
11599
11600 /* Implementation of to_fileio_pwrite.  */
11601
11602 static int
11603 remote_hostio_pwrite (struct target_ops *self,
11604                       int fd, const gdb_byte *write_buf, int len,
11605                       ULONGEST offset, int *remote_errno)
11606 {
11607   struct remote_state *rs = get_remote_state ();
11608   char *p = rs->buf;
11609   int left = get_remote_packet_size ();
11610   int out_len;
11611
11612   readahead_cache_invalidate_fd (fd);
11613
11614   remote_buffer_add_string (&p, &left, "vFile:pwrite:");
11615
11616   remote_buffer_add_int (&p, &left, fd);
11617   remote_buffer_add_string (&p, &left, ",");
11618
11619   remote_buffer_add_int (&p, &left, offset);
11620   remote_buffer_add_string (&p, &left, ",");
11621
11622   p += remote_escape_output (write_buf, len, 1, (gdb_byte *) p, &out_len,
11623                              get_remote_packet_size () - (p - rs->buf));
11624
11625   return remote_hostio_send_command (p - rs->buf, PACKET_vFile_pwrite,
11626                                      remote_errno, NULL, NULL);
11627 }
11628
11629 /* Helper for the implementation of to_fileio_pread.  Read the file
11630    from the remote side with vFile:pread.  */
11631
11632 static int
11633 remote_hostio_pread_vFile (struct target_ops *self,
11634                            int fd, gdb_byte *read_buf, int len,
11635                            ULONGEST offset, int *remote_errno)
11636 {
11637   struct remote_state *rs = get_remote_state ();
11638   char *p = rs->buf;
11639   char *attachment;
11640   int left = get_remote_packet_size ();
11641   int ret, attachment_len;
11642   int read_len;
11643
11644   remote_buffer_add_string (&p, &left, "vFile:pread:");
11645
11646   remote_buffer_add_int (&p, &left, fd);
11647   remote_buffer_add_string (&p, &left, ",");
11648
11649   remote_buffer_add_int (&p, &left, len);
11650   remote_buffer_add_string (&p, &left, ",");
11651
11652   remote_buffer_add_int (&p, &left, offset);
11653
11654   ret = remote_hostio_send_command (p - rs->buf, PACKET_vFile_pread,
11655                                     remote_errno, &attachment,
11656                                     &attachment_len);
11657
11658   if (ret < 0)
11659     return ret;
11660
11661   read_len = remote_unescape_input ((gdb_byte *) attachment, attachment_len,
11662                                     read_buf, len);
11663   if (read_len != ret)
11664     error (_("Read returned %d, but %d bytes."), ret, (int) read_len);
11665
11666   return ret;
11667 }
11668
11669 /* Serve pread from the readahead cache.  Returns number of bytes
11670    read, or 0 if the request can't be served from the cache.  */
11671
11672 static int
11673 remote_hostio_pread_from_cache (struct remote_state *rs,
11674                                 int fd, gdb_byte *read_buf, size_t len,
11675                                 ULONGEST offset)
11676 {
11677   struct readahead_cache *cache = &rs->readahead_cache;
11678
11679   if (cache->fd == fd
11680       && cache->offset <= offset
11681       && offset < cache->offset + cache->bufsize)
11682     {
11683       ULONGEST max = cache->offset + cache->bufsize;
11684
11685       if (offset + len > max)
11686         len = max - offset;
11687
11688       memcpy (read_buf, cache->buf + offset - cache->offset, len);
11689       return len;
11690     }
11691
11692   return 0;
11693 }
11694
11695 /* Implementation of to_fileio_pread.  */
11696
11697 static int
11698 remote_hostio_pread (struct target_ops *self,
11699                      int fd, gdb_byte *read_buf, int len,
11700                      ULONGEST offset, int *remote_errno)
11701 {
11702   int ret;
11703   struct remote_state *rs = get_remote_state ();
11704   struct readahead_cache *cache = &rs->readahead_cache;
11705
11706   ret = remote_hostio_pread_from_cache (rs, fd, read_buf, len, offset);
11707   if (ret > 0)
11708     {
11709       cache->hit_count++;
11710
11711       if (remote_debug)
11712         fprintf_unfiltered (gdb_stdlog, "readahead cache hit %s\n",
11713                             pulongest (cache->hit_count));
11714       return ret;
11715     }
11716
11717   cache->miss_count++;
11718   if (remote_debug)
11719     fprintf_unfiltered (gdb_stdlog, "readahead cache miss %s\n",
11720                         pulongest (cache->miss_count));
11721
11722   cache->fd = fd;
11723   cache->offset = offset;
11724   cache->bufsize = get_remote_packet_size ();
11725   cache->buf = (gdb_byte *) xrealloc (cache->buf, cache->bufsize);
11726
11727   ret = remote_hostio_pread_vFile (self, cache->fd, cache->buf, cache->bufsize,
11728                                    cache->offset, remote_errno);
11729   if (ret <= 0)
11730     {
11731       readahead_cache_invalidate_fd (fd);
11732       return ret;
11733     }
11734
11735   cache->bufsize = ret;
11736   return remote_hostio_pread_from_cache (rs, fd, read_buf, len, offset);
11737 }
11738
11739 /* Implementation of to_fileio_close.  */
11740
11741 static int
11742 remote_hostio_close (struct target_ops *self, int fd, int *remote_errno)
11743 {
11744   struct remote_state *rs = get_remote_state ();
11745   char *p = rs->buf;
11746   int left = get_remote_packet_size () - 1;
11747
11748   readahead_cache_invalidate_fd (fd);
11749
11750   remote_buffer_add_string (&p, &left, "vFile:close:");
11751
11752   remote_buffer_add_int (&p, &left, fd);
11753
11754   return remote_hostio_send_command (p - rs->buf, PACKET_vFile_close,
11755                                      remote_errno, NULL, NULL);
11756 }
11757
11758 /* Implementation of to_fileio_unlink.  */
11759
11760 static int
11761 remote_hostio_unlink (struct target_ops *self,
11762                       struct inferior *inf, const char *filename,
11763                       int *remote_errno)
11764 {
11765   struct remote_state *rs = get_remote_state ();
11766   char *p = rs->buf;
11767   int left = get_remote_packet_size () - 1;
11768
11769   if (remote_hostio_set_filesystem (inf, remote_errno) != 0)
11770     return -1;
11771
11772   remote_buffer_add_string (&p, &left, "vFile:unlink:");
11773
11774   remote_buffer_add_bytes (&p, &left, (const gdb_byte *) filename,
11775                            strlen (filename));
11776
11777   return remote_hostio_send_command (p - rs->buf, PACKET_vFile_unlink,
11778                                      remote_errno, NULL, NULL);
11779 }
11780
11781 /* Implementation of to_fileio_readlink.  */
11782
11783 static char *
11784 remote_hostio_readlink (struct target_ops *self,
11785                         struct inferior *inf, const char *filename,
11786                         int *remote_errno)
11787 {
11788   struct remote_state *rs = get_remote_state ();
11789   char *p = rs->buf;
11790   char *attachment;
11791   int left = get_remote_packet_size ();
11792   int len, attachment_len;
11793   int read_len;
11794   char *ret;
11795
11796   if (remote_hostio_set_filesystem (inf, remote_errno) != 0)
11797     return NULL;
11798
11799   remote_buffer_add_string (&p, &left, "vFile:readlink:");
11800
11801   remote_buffer_add_bytes (&p, &left, (const gdb_byte *) filename,
11802                            strlen (filename));
11803
11804   len = remote_hostio_send_command (p - rs->buf, PACKET_vFile_readlink,
11805                                     remote_errno, &attachment,
11806                                     &attachment_len);
11807
11808   if (len < 0)
11809     return NULL;
11810
11811   ret = (char *) xmalloc (len + 1);
11812
11813   read_len = remote_unescape_input ((gdb_byte *) attachment, attachment_len,
11814                                     (gdb_byte *) ret, len);
11815   if (read_len != len)
11816     error (_("Readlink returned %d, but %d bytes."), len, read_len);
11817
11818   ret[len] = '\0';
11819   return ret;
11820 }
11821
11822 /* Implementation of to_fileio_fstat.  */
11823
11824 static int
11825 remote_hostio_fstat (struct target_ops *self,
11826                      int fd, struct stat *st,
11827                      int *remote_errno)
11828 {
11829   struct remote_state *rs = get_remote_state ();
11830   char *p = rs->buf;
11831   int left = get_remote_packet_size ();
11832   int attachment_len, ret;
11833   char *attachment;
11834   struct fio_stat fst;
11835   int read_len;
11836
11837   remote_buffer_add_string (&p, &left, "vFile:fstat:");
11838
11839   remote_buffer_add_int (&p, &left, fd);
11840
11841   ret = remote_hostio_send_command (p - rs->buf, PACKET_vFile_fstat,
11842                                     remote_errno, &attachment,
11843                                     &attachment_len);
11844   if (ret < 0)
11845     {
11846       if (*remote_errno != FILEIO_ENOSYS)
11847         return ret;
11848
11849       /* Strictly we should return -1, ENOSYS here, but when
11850          "set sysroot remote:" was implemented in August 2008
11851          BFD's need for a stat function was sidestepped with
11852          this hack.  This was not remedied until March 2015
11853          so we retain the previous behavior to avoid breaking
11854          compatibility.
11855
11856          Note that the memset is a March 2015 addition; older
11857          GDBs set st_size *and nothing else* so the structure
11858          would have garbage in all other fields.  This might
11859          break something but retaining the previous behavior
11860          here would be just too wrong.  */
11861
11862       memset (st, 0, sizeof (struct stat));
11863       st->st_size = INT_MAX;
11864       return 0;
11865     }
11866
11867   read_len = remote_unescape_input ((gdb_byte *) attachment, attachment_len,
11868                                     (gdb_byte *) &fst, sizeof (fst));
11869
11870   if (read_len != ret)
11871     error (_("vFile:fstat returned %d, but %d bytes."), ret, read_len);
11872
11873   if (read_len != sizeof (fst))
11874     error (_("vFile:fstat returned %d bytes, but expecting %d."),
11875            read_len, (int) sizeof (fst));
11876
11877   remote_fileio_to_host_stat (&fst, st);
11878
11879   return 0;
11880 }
11881
11882 /* Implementation of to_filesystem_is_local.  */
11883
11884 static int
11885 remote_filesystem_is_local (struct target_ops *self)
11886 {
11887   /* Valgrind GDB presents itself as a remote target but works
11888      on the local filesystem: it does not implement remote get
11889      and users are not expected to set a sysroot.  To handle
11890      this case we treat the remote filesystem as local if the
11891      sysroot is exactly TARGET_SYSROOT_PREFIX and if the stub
11892      does not support vFile:open.  */
11893   if (strcmp (gdb_sysroot, TARGET_SYSROOT_PREFIX) == 0)
11894     {
11895       enum packet_support ps = packet_support (PACKET_vFile_open);
11896
11897       if (ps == PACKET_SUPPORT_UNKNOWN)
11898         {
11899           int fd, remote_errno;
11900
11901           /* Try opening a file to probe support.  The supplied
11902              filename is irrelevant, we only care about whether
11903              the stub recognizes the packet or not.  */
11904           fd = remote_hostio_open (self, NULL, "just probing",
11905                                    FILEIO_O_RDONLY, 0700, 0,
11906                                    &remote_errno);
11907
11908           if (fd >= 0)
11909             remote_hostio_close (self, fd, &remote_errno);
11910
11911           ps = packet_support (PACKET_vFile_open);
11912         }
11913
11914       if (ps == PACKET_DISABLE)
11915         {
11916           static int warning_issued = 0;
11917
11918           if (!warning_issued)
11919             {
11920               warning (_("remote target does not support file"
11921                          " transfer, attempting to access files"
11922                          " from local filesystem."));
11923               warning_issued = 1;
11924             }
11925
11926           return 1;
11927         }
11928     }
11929
11930   return 0;
11931 }
11932
11933 static int
11934 remote_fileio_errno_to_host (int errnum)
11935 {
11936   switch (errnum)
11937     {
11938       case FILEIO_EPERM:
11939         return EPERM;
11940       case FILEIO_ENOENT:
11941         return ENOENT;
11942       case FILEIO_EINTR:
11943         return EINTR;
11944       case FILEIO_EIO:
11945         return EIO;
11946       case FILEIO_EBADF:
11947         return EBADF;
11948       case FILEIO_EACCES:
11949         return EACCES;
11950       case FILEIO_EFAULT:
11951         return EFAULT;
11952       case FILEIO_EBUSY:
11953         return EBUSY;
11954       case FILEIO_EEXIST:
11955         return EEXIST;
11956       case FILEIO_ENODEV:
11957         return ENODEV;
11958       case FILEIO_ENOTDIR:
11959         return ENOTDIR;
11960       case FILEIO_EISDIR:
11961         return EISDIR;
11962       case FILEIO_EINVAL:
11963         return EINVAL;
11964       case FILEIO_ENFILE:
11965         return ENFILE;
11966       case FILEIO_EMFILE:
11967         return EMFILE;
11968       case FILEIO_EFBIG:
11969         return EFBIG;
11970       case FILEIO_ENOSPC:
11971         return ENOSPC;
11972       case FILEIO_ESPIPE:
11973         return ESPIPE;
11974       case FILEIO_EROFS:
11975         return EROFS;
11976       case FILEIO_ENOSYS:
11977         return ENOSYS;
11978       case FILEIO_ENAMETOOLONG:
11979         return ENAMETOOLONG;
11980     }
11981   return -1;
11982 }
11983
11984 static char *
11985 remote_hostio_error (int errnum)
11986 {
11987   int host_error = remote_fileio_errno_to_host (errnum);
11988
11989   if (host_error == -1)
11990     error (_("Unknown remote I/O error %d"), errnum);
11991   else
11992     error (_("Remote I/O error: %s"), safe_strerror (host_error));
11993 }
11994
11995 static void
11996 remote_hostio_close_cleanup (void *opaque)
11997 {
11998   int fd = *(int *) opaque;
11999   int remote_errno;
12000
12001   remote_hostio_close (find_target_at (process_stratum), fd, &remote_errno);
12002 }
12003
12004 void
12005 remote_file_put (const char *local_file, const char *remote_file, int from_tty)
12006 {
12007   struct cleanup *back_to, *close_cleanup;
12008   int retcode, fd, remote_errno, bytes, io_size;
12009   gdb_byte *buffer;
12010   int bytes_in_buffer;
12011   int saw_eof;
12012   ULONGEST offset;
12013   struct remote_state *rs = get_remote_state ();
12014
12015   if (!rs->remote_desc)
12016     error (_("command can only be used with remote target"));
12017
12018   gdb_file_up file = gdb_fopen_cloexec (local_file, "rb");
12019   if (file == NULL)
12020     perror_with_name (local_file);
12021
12022   fd = remote_hostio_open (find_target_at (process_stratum), NULL,
12023                            remote_file, (FILEIO_O_WRONLY | FILEIO_O_CREAT
12024                                          | FILEIO_O_TRUNC),
12025                            0700, 0, &remote_errno);
12026   if (fd == -1)
12027     remote_hostio_error (remote_errno);
12028
12029   /* Send up to this many bytes at once.  They won't all fit in the
12030      remote packet limit, so we'll transfer slightly fewer.  */
12031   io_size = get_remote_packet_size ();
12032   buffer = (gdb_byte *) xmalloc (io_size);
12033   back_to = make_cleanup (xfree, buffer);
12034
12035   close_cleanup = make_cleanup (remote_hostio_close_cleanup, &fd);
12036
12037   bytes_in_buffer = 0;
12038   saw_eof = 0;
12039   offset = 0;
12040   while (bytes_in_buffer || !saw_eof)
12041     {
12042       if (!saw_eof)
12043         {
12044           bytes = fread (buffer + bytes_in_buffer, 1,
12045                          io_size - bytes_in_buffer,
12046                          file.get ());
12047           if (bytes == 0)
12048             {
12049               if (ferror (file.get ()))
12050                 error (_("Error reading %s."), local_file);
12051               else
12052                 {
12053                   /* EOF.  Unless there is something still in the
12054                      buffer from the last iteration, we are done.  */
12055                   saw_eof = 1;
12056                   if (bytes_in_buffer == 0)
12057                     break;
12058                 }
12059             }
12060         }
12061       else
12062         bytes = 0;
12063
12064       bytes += bytes_in_buffer;
12065       bytes_in_buffer = 0;
12066
12067       retcode = remote_hostio_pwrite (find_target_at (process_stratum),
12068                                       fd, buffer, bytes,
12069                                       offset, &remote_errno);
12070
12071       if (retcode < 0)
12072         remote_hostio_error (remote_errno);
12073       else if (retcode == 0)
12074         error (_("Remote write of %d bytes returned 0!"), bytes);
12075       else if (retcode < bytes)
12076         {
12077           /* Short write.  Save the rest of the read data for the next
12078              write.  */
12079           bytes_in_buffer = bytes - retcode;
12080           memmove (buffer, buffer + retcode, bytes_in_buffer);
12081         }
12082
12083       offset += retcode;
12084     }
12085
12086   discard_cleanups (close_cleanup);
12087   if (remote_hostio_close (find_target_at (process_stratum), fd, &remote_errno))
12088     remote_hostio_error (remote_errno);
12089
12090   if (from_tty)
12091     printf_filtered (_("Successfully sent file \"%s\".\n"), local_file);
12092   do_cleanups (back_to);
12093 }
12094
12095 void
12096 remote_file_get (const char *remote_file, const char *local_file, int from_tty)
12097 {
12098   struct cleanup *back_to, *close_cleanup;
12099   int fd, remote_errno, bytes, io_size;
12100   gdb_byte *buffer;
12101   ULONGEST offset;
12102   struct remote_state *rs = get_remote_state ();
12103
12104   if (!rs->remote_desc)
12105     error (_("command can only be used with remote target"));
12106
12107   fd = remote_hostio_open (find_target_at (process_stratum), NULL,
12108                            remote_file, FILEIO_O_RDONLY, 0, 0,
12109                            &remote_errno);
12110   if (fd == -1)
12111     remote_hostio_error (remote_errno);
12112
12113   gdb_file_up file = gdb_fopen_cloexec (local_file, "wb");
12114   if (file == NULL)
12115     perror_with_name (local_file);
12116
12117   /* Send up to this many bytes at once.  They won't all fit in the
12118      remote packet limit, so we'll transfer slightly fewer.  */
12119   io_size = get_remote_packet_size ();
12120   buffer = (gdb_byte *) xmalloc (io_size);
12121   back_to = make_cleanup (xfree, buffer);
12122
12123   close_cleanup = make_cleanup (remote_hostio_close_cleanup, &fd);
12124
12125   offset = 0;
12126   while (1)
12127     {
12128       bytes = remote_hostio_pread (find_target_at (process_stratum),
12129                                    fd, buffer, io_size, offset, &remote_errno);
12130       if (bytes == 0)
12131         /* Success, but no bytes, means end-of-file.  */
12132         break;
12133       if (bytes == -1)
12134         remote_hostio_error (remote_errno);
12135
12136       offset += bytes;
12137
12138       bytes = fwrite (buffer, 1, bytes, file.get ());
12139       if (bytes == 0)
12140         perror_with_name (local_file);
12141     }
12142
12143   discard_cleanups (close_cleanup);
12144   if (remote_hostio_close (find_target_at (process_stratum), fd, &remote_errno))
12145     remote_hostio_error (remote_errno);
12146
12147   if (from_tty)
12148     printf_filtered (_("Successfully fetched file \"%s\".\n"), remote_file);
12149   do_cleanups (back_to);
12150 }
12151
12152 void
12153 remote_file_delete (const char *remote_file, int from_tty)
12154 {
12155   int retcode, remote_errno;
12156   struct remote_state *rs = get_remote_state ();
12157
12158   if (!rs->remote_desc)
12159     error (_("command can only be used with remote target"));
12160
12161   retcode = remote_hostio_unlink (find_target_at (process_stratum),
12162                                   NULL, remote_file, &remote_errno);
12163   if (retcode == -1)
12164     remote_hostio_error (remote_errno);
12165
12166   if (from_tty)
12167     printf_filtered (_("Successfully deleted file \"%s\".\n"), remote_file);
12168 }
12169
12170 static void
12171 remote_put_command (const char *args, int from_tty)
12172 {
12173   if (args == NULL)
12174     error_no_arg (_("file to put"));
12175
12176   gdb_argv argv (args);
12177   if (argv[0] == NULL || argv[1] == NULL || argv[2] != NULL)
12178     error (_("Invalid parameters to remote put"));
12179
12180   remote_file_put (argv[0], argv[1], from_tty);
12181 }
12182
12183 static void
12184 remote_get_command (const char *args, int from_tty)
12185 {
12186   if (args == NULL)
12187     error_no_arg (_("file to get"));
12188
12189   gdb_argv argv (args);
12190   if (argv[0] == NULL || argv[1] == NULL || argv[2] != NULL)
12191     error (_("Invalid parameters to remote get"));
12192
12193   remote_file_get (argv[0], argv[1], from_tty);
12194 }
12195
12196 static void
12197 remote_delete_command (const char *args, int from_tty)
12198 {
12199   if (args == NULL)
12200     error_no_arg (_("file to delete"));
12201
12202   gdb_argv argv (args);
12203   if (argv[0] == NULL || argv[1] != NULL)
12204     error (_("Invalid parameters to remote delete"));
12205
12206   remote_file_delete (argv[0], from_tty);
12207 }
12208
12209 static void
12210 remote_command (char *args, int from_tty)
12211 {
12212   help_list (remote_cmdlist, "remote ", all_commands, gdb_stdout);
12213 }
12214
12215 static int
12216 remote_can_execute_reverse (struct target_ops *self)
12217 {
12218   if (packet_support (PACKET_bs) == PACKET_ENABLE
12219       || packet_support (PACKET_bc) == PACKET_ENABLE)
12220     return 1;
12221   else
12222     return 0;
12223 }
12224
12225 static int
12226 remote_supports_non_stop (struct target_ops *self)
12227 {
12228   return 1;
12229 }
12230
12231 static int
12232 remote_supports_disable_randomization (struct target_ops *self)
12233 {
12234   /* Only supported in extended mode.  */
12235   return 0;
12236 }
12237
12238 static int
12239 remote_supports_multi_process (struct target_ops *self)
12240 {
12241   struct remote_state *rs = get_remote_state ();
12242
12243   return remote_multi_process_p (rs);
12244 }
12245
12246 static int
12247 remote_supports_cond_tracepoints (void)
12248 {
12249   return packet_support (PACKET_ConditionalTracepoints) == PACKET_ENABLE;
12250 }
12251
12252 static int
12253 remote_supports_cond_breakpoints (struct target_ops *self)
12254 {
12255   return packet_support (PACKET_ConditionalBreakpoints) == PACKET_ENABLE;
12256 }
12257
12258 static int
12259 remote_supports_fast_tracepoints (void)
12260 {
12261   return packet_support (PACKET_FastTracepoints) == PACKET_ENABLE;
12262 }
12263
12264 static int
12265 remote_supports_static_tracepoints (void)
12266 {
12267   return packet_support (PACKET_StaticTracepoints) == PACKET_ENABLE;
12268 }
12269
12270 static int
12271 remote_supports_install_in_trace (void)
12272 {
12273   return packet_support (PACKET_InstallInTrace) == PACKET_ENABLE;
12274 }
12275
12276 static int
12277 remote_supports_enable_disable_tracepoint (struct target_ops *self)
12278 {
12279   return (packet_support (PACKET_EnableDisableTracepoints_feature)
12280           == PACKET_ENABLE);
12281 }
12282
12283 static int
12284 remote_supports_string_tracing (struct target_ops *self)
12285 {
12286   return packet_support (PACKET_tracenz_feature) == PACKET_ENABLE;
12287 }
12288
12289 static int
12290 remote_can_run_breakpoint_commands (struct target_ops *self)
12291 {
12292   return packet_support (PACKET_BreakpointCommands) == PACKET_ENABLE;
12293 }
12294
12295 static void
12296 remote_trace_init (struct target_ops *self)
12297 {
12298   struct remote_state *rs = get_remote_state ();
12299
12300   putpkt ("QTinit");
12301   remote_get_noisy_reply ();
12302   if (strcmp (rs->buf, "OK") != 0)
12303     error (_("Target does not support this command."));
12304 }
12305
12306 static void free_actions_list (char **actions_list);
12307 static void free_actions_list_cleanup_wrapper (void *);
12308 static void
12309 free_actions_list_cleanup_wrapper (void *al)
12310 {
12311   free_actions_list ((char **) al);
12312 }
12313
12314 static void
12315 free_actions_list (char **actions_list)
12316 {
12317   int ndx;
12318
12319   if (actions_list == 0)
12320     return;
12321
12322   for (ndx = 0; actions_list[ndx]; ndx++)
12323     xfree (actions_list[ndx]);
12324
12325   xfree (actions_list);
12326 }
12327
12328 /* Recursive routine to walk through command list including loops, and
12329    download packets for each command.  */
12330
12331 static void
12332 remote_download_command_source (int num, ULONGEST addr,
12333                                 struct command_line *cmds)
12334 {
12335   struct remote_state *rs = get_remote_state ();
12336   struct command_line *cmd;
12337
12338   for (cmd = cmds; cmd; cmd = cmd->next)
12339     {
12340       QUIT;     /* Allow user to bail out with ^C.  */
12341       strcpy (rs->buf, "QTDPsrc:");
12342       encode_source_string (num, addr, "cmd", cmd->line,
12343                             rs->buf + strlen (rs->buf),
12344                             rs->buf_size - strlen (rs->buf));
12345       putpkt (rs->buf);
12346       remote_get_noisy_reply ();
12347       if (strcmp (rs->buf, "OK"))
12348         warning (_("Target does not support source download."));
12349
12350       if (cmd->control_type == while_control
12351           || cmd->control_type == while_stepping_control)
12352         {
12353           remote_download_command_source (num, addr, *cmd->body_list);
12354
12355           QUIT; /* Allow user to bail out with ^C.  */
12356           strcpy (rs->buf, "QTDPsrc:");
12357           encode_source_string (num, addr, "cmd", "end",
12358                                 rs->buf + strlen (rs->buf),
12359                                 rs->buf_size - strlen (rs->buf));
12360           putpkt (rs->buf);
12361           remote_get_noisy_reply ();
12362           if (strcmp (rs->buf, "OK"))
12363             warning (_("Target does not support source download."));
12364         }
12365     }
12366 }
12367
12368 static void
12369 remote_download_tracepoint (struct target_ops *self, struct bp_location *loc)
12370 {
12371 #define BUF_SIZE 2048
12372
12373   CORE_ADDR tpaddr;
12374   char addrbuf[40];
12375   char buf[BUF_SIZE];
12376   char **tdp_actions;
12377   char **stepping_actions;
12378   int ndx;
12379   struct cleanup *old_chain = NULL;
12380   char *pkt;
12381   struct breakpoint *b = loc->owner;
12382   struct tracepoint *t = (struct tracepoint *) b;
12383   struct remote_state *rs = get_remote_state ();
12384
12385   encode_actions_rsp (loc, &tdp_actions, &stepping_actions);
12386   old_chain = make_cleanup (free_actions_list_cleanup_wrapper,
12387                             tdp_actions);
12388   (void) make_cleanup (free_actions_list_cleanup_wrapper,
12389                        stepping_actions);
12390
12391   tpaddr = loc->address;
12392   sprintf_vma (addrbuf, tpaddr);
12393   xsnprintf (buf, BUF_SIZE, "QTDP:%x:%s:%c:%lx:%x", b->number,
12394              addrbuf, /* address */
12395              (b->enable_state == bp_enabled ? 'E' : 'D'),
12396              t->step_count, t->pass_count);
12397   /* Fast tracepoints are mostly handled by the target, but we can
12398      tell the target how big of an instruction block should be moved
12399      around.  */
12400   if (b->type == bp_fast_tracepoint)
12401     {
12402       /* Only test for support at download time; we may not know
12403          target capabilities at definition time.  */
12404       if (remote_supports_fast_tracepoints ())
12405         {
12406           if (gdbarch_fast_tracepoint_valid_at (loc->gdbarch, tpaddr,
12407                                                 NULL))
12408             xsnprintf (buf + strlen (buf), BUF_SIZE - strlen (buf), ":F%x",
12409                        gdb_insn_length (loc->gdbarch, tpaddr));
12410           else
12411             /* If it passed validation at definition but fails now,
12412                something is very wrong.  */
12413             internal_error (__FILE__, __LINE__,
12414                             _("Fast tracepoint not "
12415                               "valid during download"));
12416         }
12417       else
12418         /* Fast tracepoints are functionally identical to regular
12419            tracepoints, so don't take lack of support as a reason to
12420            give up on the trace run.  */
12421         warning (_("Target does not support fast tracepoints, "
12422                    "downloading %d as regular tracepoint"), b->number);
12423     }
12424   else if (b->type == bp_static_tracepoint)
12425     {
12426       /* Only test for support at download time; we may not know
12427          target capabilities at definition time.  */
12428       if (remote_supports_static_tracepoints ())
12429         {
12430           struct static_tracepoint_marker marker;
12431
12432           if (target_static_tracepoint_marker_at (tpaddr, &marker))
12433             strcat (buf, ":S");
12434           else
12435             error (_("Static tracepoint not valid during download"));
12436         }
12437       else
12438         /* Fast tracepoints are functionally identical to regular
12439            tracepoints, so don't take lack of support as a reason
12440            to give up on the trace run.  */
12441         error (_("Target does not support static tracepoints"));
12442     }
12443   /* If the tracepoint has a conditional, make it into an agent
12444      expression and append to the definition.  */
12445   if (loc->cond)
12446     {
12447       /* Only test support at download time, we may not know target
12448          capabilities at definition time.  */
12449       if (remote_supports_cond_tracepoints ())
12450         {
12451           agent_expr_up aexpr = gen_eval_for_expr (tpaddr, loc->cond.get ());
12452           xsnprintf (buf + strlen (buf), BUF_SIZE - strlen (buf), ":X%x,",
12453                      aexpr->len);
12454           pkt = buf + strlen (buf);
12455           for (ndx = 0; ndx < aexpr->len; ++ndx)
12456             pkt = pack_hex_byte (pkt, aexpr->buf[ndx]);
12457           *pkt = '\0';
12458         }
12459       else
12460         warning (_("Target does not support conditional tracepoints, "
12461                    "ignoring tp %d cond"), b->number);
12462     }
12463
12464   if (b->commands || *default_collect)
12465     strcat (buf, "-");
12466   putpkt (buf);
12467   remote_get_noisy_reply ();
12468   if (strcmp (rs->buf, "OK"))
12469     error (_("Target does not support tracepoints."));
12470
12471   /* do_single_steps (t); */
12472   if (tdp_actions)
12473     {
12474       for (ndx = 0; tdp_actions[ndx]; ndx++)
12475         {
12476           QUIT; /* Allow user to bail out with ^C.  */
12477           xsnprintf (buf, BUF_SIZE, "QTDP:-%x:%s:%s%c",
12478                      b->number, addrbuf, /* address */
12479                      tdp_actions[ndx],
12480                      ((tdp_actions[ndx + 1] || stepping_actions)
12481                       ? '-' : 0));
12482           putpkt (buf);
12483           remote_get_noisy_reply ();
12484           if (strcmp (rs->buf, "OK"))
12485             error (_("Error on target while setting tracepoints."));
12486         }
12487     }
12488   if (stepping_actions)
12489     {
12490       for (ndx = 0; stepping_actions[ndx]; ndx++)
12491         {
12492           QUIT; /* Allow user to bail out with ^C.  */
12493           xsnprintf (buf, BUF_SIZE, "QTDP:-%x:%s:%s%s%s",
12494                      b->number, addrbuf, /* address */
12495                      ((ndx == 0) ? "S" : ""),
12496                      stepping_actions[ndx],
12497                      (stepping_actions[ndx + 1] ? "-" : ""));
12498           putpkt (buf);
12499           remote_get_noisy_reply ();
12500           if (strcmp (rs->buf, "OK"))
12501             error (_("Error on target while setting tracepoints."));
12502         }
12503     }
12504
12505   if (packet_support (PACKET_TracepointSource) == PACKET_ENABLE)
12506     {
12507       if (b->location != NULL)
12508         {
12509           strcpy (buf, "QTDPsrc:");
12510           encode_source_string (b->number, loc->address, "at",
12511                                 event_location_to_string (b->location.get ()),
12512                                 buf + strlen (buf), 2048 - strlen (buf));
12513           putpkt (buf);
12514           remote_get_noisy_reply ();
12515           if (strcmp (rs->buf, "OK"))
12516             warning (_("Target does not support source download."));
12517         }
12518       if (b->cond_string)
12519         {
12520           strcpy (buf, "QTDPsrc:");
12521           encode_source_string (b->number, loc->address,
12522                                 "cond", b->cond_string, buf + strlen (buf),
12523                                 2048 - strlen (buf));
12524           putpkt (buf);
12525           remote_get_noisy_reply ();
12526           if (strcmp (rs->buf, "OK"))
12527             warning (_("Target does not support source download."));
12528         }
12529       remote_download_command_source (b->number, loc->address,
12530                                       breakpoint_commands (b));
12531     }
12532
12533   do_cleanups (old_chain);
12534 }
12535
12536 static int
12537 remote_can_download_tracepoint (struct target_ops *self)
12538 {
12539   struct remote_state *rs = get_remote_state ();
12540   struct trace_status *ts;
12541   int status;
12542
12543   /* Don't try to install tracepoints until we've relocated our
12544      symbols, and fetched and merged the target's tracepoint list with
12545      ours.  */
12546   if (rs->starting_up)
12547     return 0;
12548
12549   ts = current_trace_status ();
12550   status = remote_get_trace_status (self, ts);
12551
12552   if (status == -1 || !ts->running_known || !ts->running)
12553     return 0;
12554
12555   /* If we are in a tracing experiment, but remote stub doesn't support
12556      installing tracepoint in trace, we have to return.  */
12557   if (!remote_supports_install_in_trace ())
12558     return 0;
12559
12560   return 1;
12561 }
12562
12563
12564 static void
12565 remote_download_trace_state_variable (struct target_ops *self,
12566                                       struct trace_state_variable *tsv)
12567 {
12568   struct remote_state *rs = get_remote_state ();
12569   char *p;
12570
12571   xsnprintf (rs->buf, get_remote_packet_size (), "QTDV:%x:%s:%x:",
12572              tsv->number, phex ((ULONGEST) tsv->initial_value, 8),
12573              tsv->builtin);
12574   p = rs->buf + strlen (rs->buf);
12575   if ((p - rs->buf) + strlen (tsv->name) * 2 >= get_remote_packet_size ())
12576     error (_("Trace state variable name too long for tsv definition packet"));
12577   p += 2 * bin2hex ((gdb_byte *) (tsv->name), p, strlen (tsv->name));
12578   *p++ = '\0';
12579   putpkt (rs->buf);
12580   remote_get_noisy_reply ();
12581   if (*rs->buf == '\0')
12582     error (_("Target does not support this command."));
12583   if (strcmp (rs->buf, "OK") != 0)
12584     error (_("Error on target while downloading trace state variable."));
12585 }
12586
12587 static void
12588 remote_enable_tracepoint (struct target_ops *self,
12589                           struct bp_location *location)
12590 {
12591   struct remote_state *rs = get_remote_state ();
12592   char addr_buf[40];
12593
12594   sprintf_vma (addr_buf, location->address);
12595   xsnprintf (rs->buf, get_remote_packet_size (), "QTEnable:%x:%s",
12596              location->owner->number, addr_buf);
12597   putpkt (rs->buf);
12598   remote_get_noisy_reply ();
12599   if (*rs->buf == '\0')
12600     error (_("Target does not support enabling tracepoints while a trace run is ongoing."));
12601   if (strcmp (rs->buf, "OK") != 0)
12602     error (_("Error on target while enabling tracepoint."));
12603 }
12604
12605 static void
12606 remote_disable_tracepoint (struct target_ops *self,
12607                            struct bp_location *location)
12608 {
12609   struct remote_state *rs = get_remote_state ();
12610   char addr_buf[40];
12611
12612   sprintf_vma (addr_buf, location->address);
12613   xsnprintf (rs->buf, get_remote_packet_size (), "QTDisable:%x:%s",
12614              location->owner->number, addr_buf);
12615   putpkt (rs->buf);
12616   remote_get_noisy_reply ();
12617   if (*rs->buf == '\0')
12618     error (_("Target does not support disabling tracepoints while a trace run is ongoing."));
12619   if (strcmp (rs->buf, "OK") != 0)
12620     error (_("Error on target while disabling tracepoint."));
12621 }
12622
12623 static void
12624 remote_trace_set_readonly_regions (struct target_ops *self)
12625 {
12626   asection *s;
12627   bfd *abfd = NULL;
12628   bfd_size_type size;
12629   bfd_vma vma;
12630   int anysecs = 0;
12631   int offset = 0;
12632
12633   if (!exec_bfd)
12634     return;                     /* No information to give.  */
12635
12636   struct remote_state *rs = get_remote_state ();
12637
12638   strcpy (rs->buf, "QTro");
12639   offset = strlen (rs->buf);
12640   for (s = exec_bfd->sections; s; s = s->next)
12641     {
12642       char tmp1[40], tmp2[40];
12643       int sec_length;
12644
12645       if ((s->flags & SEC_LOAD) == 0 ||
12646       /*  (s->flags & SEC_CODE) == 0 || */
12647           (s->flags & SEC_READONLY) == 0)
12648         continue;
12649
12650       anysecs = 1;
12651       vma = bfd_get_section_vma (abfd, s);
12652       size = bfd_get_section_size (s);
12653       sprintf_vma (tmp1, vma);
12654       sprintf_vma (tmp2, vma + size);
12655       sec_length = 1 + strlen (tmp1) + 1 + strlen (tmp2);
12656       if (offset + sec_length + 1 > rs->buf_size)
12657         {
12658           if (packet_support (PACKET_qXfer_traceframe_info) != PACKET_ENABLE)
12659             warning (_("\
12660 Too many sections for read-only sections definition packet."));
12661           break;
12662         }
12663       xsnprintf (rs->buf + offset, rs->buf_size - offset, ":%s,%s",
12664                  tmp1, tmp2);
12665       offset += sec_length;
12666     }
12667   if (anysecs)
12668     {
12669       putpkt (rs->buf);
12670       getpkt (&rs->buf, &rs->buf_size, 0);
12671     }
12672 }
12673
12674 static void
12675 remote_trace_start (struct target_ops *self)
12676 {
12677   struct remote_state *rs = get_remote_state ();
12678
12679   putpkt ("QTStart");
12680   remote_get_noisy_reply ();
12681   if (*rs->buf == '\0')
12682     error (_("Target does not support this command."));
12683   if (strcmp (rs->buf, "OK") != 0)
12684     error (_("Bogus reply from target: %s"), rs->buf);
12685 }
12686
12687 static int
12688 remote_get_trace_status (struct target_ops *self, struct trace_status *ts)
12689 {
12690   /* Initialize it just to avoid a GCC false warning.  */
12691   char *p = NULL;
12692   /* FIXME we need to get register block size some other way.  */
12693   extern int trace_regblock_size;
12694   enum packet_result result;
12695   struct remote_state *rs = get_remote_state ();
12696
12697   if (packet_support (PACKET_qTStatus) == PACKET_DISABLE)
12698     return -1;
12699
12700   trace_regblock_size = get_remote_arch_state ()->sizeof_g_packet;
12701
12702   putpkt ("qTStatus");
12703
12704   TRY
12705     {
12706       p = remote_get_noisy_reply ();
12707     }
12708   CATCH (ex, RETURN_MASK_ERROR)
12709     {
12710       if (ex.error != TARGET_CLOSE_ERROR)
12711         {
12712           exception_fprintf (gdb_stderr, ex, "qTStatus: ");
12713           return -1;
12714         }
12715       throw_exception (ex);
12716     }
12717   END_CATCH
12718
12719   result = packet_ok (p, &remote_protocol_packets[PACKET_qTStatus]);
12720
12721   /* If the remote target doesn't do tracing, flag it.  */
12722   if (result == PACKET_UNKNOWN)
12723     return -1;
12724
12725   /* We're working with a live target.  */
12726   ts->filename = NULL;
12727
12728   if (*p++ != 'T')
12729     error (_("Bogus trace status reply from target: %s"), rs->buf);
12730
12731   /* Function 'parse_trace_status' sets default value of each field of
12732      'ts' at first, so we don't have to do it here.  */
12733   parse_trace_status (p, ts);
12734
12735   return ts->running;
12736 }
12737
12738 static void
12739 remote_get_tracepoint_status (struct target_ops *self, struct breakpoint *bp,
12740                               struct uploaded_tp *utp)
12741 {
12742   struct remote_state *rs = get_remote_state ();
12743   char *reply;
12744   struct bp_location *loc;
12745   struct tracepoint *tp = (struct tracepoint *) bp;
12746   size_t size = get_remote_packet_size ();
12747
12748   if (tp)
12749     {
12750       tp->hit_count = 0;
12751       tp->traceframe_usage = 0;
12752       for (loc = tp->loc; loc; loc = loc->next)
12753         {
12754           /* If the tracepoint was never downloaded, don't go asking for
12755              any status.  */
12756           if (tp->number_on_target == 0)
12757             continue;
12758           xsnprintf (rs->buf, size, "qTP:%x:%s", tp->number_on_target,
12759                      phex_nz (loc->address, 0));
12760           putpkt (rs->buf);
12761           reply = remote_get_noisy_reply ();
12762           if (reply && *reply)
12763             {
12764               if (*reply == 'V')
12765                 parse_tracepoint_status (reply + 1, bp, utp);
12766             }
12767         }
12768     }
12769   else if (utp)
12770     {
12771       utp->hit_count = 0;
12772       utp->traceframe_usage = 0;
12773       xsnprintf (rs->buf, size, "qTP:%x:%s", utp->number,
12774                  phex_nz (utp->addr, 0));
12775       putpkt (rs->buf);
12776       reply = remote_get_noisy_reply ();
12777       if (reply && *reply)
12778         {
12779           if (*reply == 'V')
12780             parse_tracepoint_status (reply + 1, bp, utp);
12781         }
12782     }
12783 }
12784
12785 static void
12786 remote_trace_stop (struct target_ops *self)
12787 {
12788   struct remote_state *rs = get_remote_state ();
12789
12790   putpkt ("QTStop");
12791   remote_get_noisy_reply ();
12792   if (*rs->buf == '\0')
12793     error (_("Target does not support this command."));
12794   if (strcmp (rs->buf, "OK") != 0)
12795     error (_("Bogus reply from target: %s"), rs->buf);
12796 }
12797
12798 static int
12799 remote_trace_find (struct target_ops *self,
12800                    enum trace_find_type type, int num,
12801                    CORE_ADDR addr1, CORE_ADDR addr2,
12802                    int *tpp)
12803 {
12804   struct remote_state *rs = get_remote_state ();
12805   char *endbuf = rs->buf + get_remote_packet_size ();
12806   char *p, *reply;
12807   int target_frameno = -1, target_tracept = -1;
12808
12809   /* Lookups other than by absolute frame number depend on the current
12810      trace selected, so make sure it is correct on the remote end
12811      first.  */
12812   if (type != tfind_number)
12813     set_remote_traceframe ();
12814
12815   p = rs->buf;
12816   strcpy (p, "QTFrame:");
12817   p = strchr (p, '\0');
12818   switch (type)
12819     {
12820     case tfind_number:
12821       xsnprintf (p, endbuf - p, "%x", num);
12822       break;
12823     case tfind_pc:
12824       xsnprintf (p, endbuf - p, "pc:%s", phex_nz (addr1, 0));
12825       break;
12826     case tfind_tp:
12827       xsnprintf (p, endbuf - p, "tdp:%x", num);
12828       break;
12829     case tfind_range:
12830       xsnprintf (p, endbuf - p, "range:%s:%s", phex_nz (addr1, 0),
12831                  phex_nz (addr2, 0));
12832       break;
12833     case tfind_outside:
12834       xsnprintf (p, endbuf - p, "outside:%s:%s", phex_nz (addr1, 0),
12835                  phex_nz (addr2, 0));
12836       break;
12837     default:
12838       error (_("Unknown trace find type %d"), type);
12839     }
12840
12841   putpkt (rs->buf);
12842   reply = remote_get_noisy_reply ();
12843   if (*reply == '\0')
12844     error (_("Target does not support this command."));
12845
12846   while (reply && *reply)
12847     switch (*reply)
12848       {
12849       case 'F':
12850         p = ++reply;
12851         target_frameno = (int) strtol (p, &reply, 16);
12852         if (reply == p)
12853           error (_("Unable to parse trace frame number"));
12854         /* Don't update our remote traceframe number cache on failure
12855            to select a remote traceframe.  */
12856         if (target_frameno == -1)
12857           return -1;
12858         break;
12859       case 'T':
12860         p = ++reply;
12861         target_tracept = (int) strtol (p, &reply, 16);
12862         if (reply == p)
12863           error (_("Unable to parse tracepoint number"));
12864         break;
12865       case 'O':         /* "OK"? */
12866         if (reply[1] == 'K' && reply[2] == '\0')
12867           reply += 2;
12868         else
12869           error (_("Bogus reply from target: %s"), reply);
12870         break;
12871       default:
12872         error (_("Bogus reply from target: %s"), reply);
12873       }
12874   if (tpp)
12875     *tpp = target_tracept;
12876
12877   rs->remote_traceframe_number = target_frameno;
12878   return target_frameno;
12879 }
12880
12881 static int
12882 remote_get_trace_state_variable_value (struct target_ops *self,
12883                                        int tsvnum, LONGEST *val)
12884 {
12885   struct remote_state *rs = get_remote_state ();
12886   char *reply;
12887   ULONGEST uval;
12888
12889   set_remote_traceframe ();
12890
12891   xsnprintf (rs->buf, get_remote_packet_size (), "qTV:%x", tsvnum);
12892   putpkt (rs->buf);
12893   reply = remote_get_noisy_reply ();
12894   if (reply && *reply)
12895     {
12896       if (*reply == 'V')
12897         {
12898           unpack_varlen_hex (reply + 1, &uval);
12899           *val = (LONGEST) uval;
12900           return 1;
12901         }
12902     }
12903   return 0;
12904 }
12905
12906 static int
12907 remote_save_trace_data (struct target_ops *self, const char *filename)
12908 {
12909   struct remote_state *rs = get_remote_state ();
12910   char *p, *reply;
12911
12912   p = rs->buf;
12913   strcpy (p, "QTSave:");
12914   p += strlen (p);
12915   if ((p - rs->buf) + strlen (filename) * 2 >= get_remote_packet_size ())
12916     error (_("Remote file name too long for trace save packet"));
12917   p += 2 * bin2hex ((gdb_byte *) filename, p, strlen (filename));
12918   *p++ = '\0';
12919   putpkt (rs->buf);
12920   reply = remote_get_noisy_reply ();
12921   if (*reply == '\0')
12922     error (_("Target does not support this command."));
12923   if (strcmp (reply, "OK") != 0)
12924     error (_("Bogus reply from target: %s"), reply);
12925   return 0;
12926 }
12927
12928 /* This is basically a memory transfer, but needs to be its own packet
12929    because we don't know how the target actually organizes its trace
12930    memory, plus we want to be able to ask for as much as possible, but
12931    not be unhappy if we don't get as much as we ask for.  */
12932
12933 static LONGEST
12934 remote_get_raw_trace_data (struct target_ops *self,
12935                            gdb_byte *buf, ULONGEST offset, LONGEST len)
12936 {
12937   struct remote_state *rs = get_remote_state ();
12938   char *reply;
12939   char *p;
12940   int rslt;
12941
12942   p = rs->buf;
12943   strcpy (p, "qTBuffer:");
12944   p += strlen (p);
12945   p += hexnumstr (p, offset);
12946   *p++ = ',';
12947   p += hexnumstr (p, len);
12948   *p++ = '\0';
12949
12950   putpkt (rs->buf);
12951   reply = remote_get_noisy_reply ();
12952   if (reply && *reply)
12953     {
12954       /* 'l' by itself means we're at the end of the buffer and
12955          there is nothing more to get.  */
12956       if (*reply == 'l')
12957         return 0;
12958
12959       /* Convert the reply into binary.  Limit the number of bytes to
12960          convert according to our passed-in buffer size, rather than
12961          what was returned in the packet; if the target is
12962          unexpectedly generous and gives us a bigger reply than we
12963          asked for, we don't want to crash.  */
12964       rslt = hex2bin (reply, buf, len);
12965       return rslt;
12966     }
12967
12968   /* Something went wrong, flag as an error.  */
12969   return -1;
12970 }
12971
12972 static void
12973 remote_set_disconnected_tracing (struct target_ops *self, int val)
12974 {
12975   struct remote_state *rs = get_remote_state ();
12976
12977   if (packet_support (PACKET_DisconnectedTracing_feature) == PACKET_ENABLE)
12978     {
12979       char *reply;
12980
12981       xsnprintf (rs->buf, get_remote_packet_size (), "QTDisconnected:%x", val);
12982       putpkt (rs->buf);
12983       reply = remote_get_noisy_reply ();
12984       if (*reply == '\0')
12985         error (_("Target does not support this command."));
12986       if (strcmp (reply, "OK") != 0)
12987         error (_("Bogus reply from target: %s"), reply);
12988     }
12989   else if (val)
12990     warning (_("Target does not support disconnected tracing."));
12991 }
12992
12993 static int
12994 remote_core_of_thread (struct target_ops *ops, ptid_t ptid)
12995 {
12996   struct thread_info *info = find_thread_ptid (ptid);
12997
12998   if (info && info->priv)
12999     return info->priv->core;
13000   return -1;
13001 }
13002
13003 static void
13004 remote_set_circular_trace_buffer (struct target_ops *self, int val)
13005 {
13006   struct remote_state *rs = get_remote_state ();
13007   char *reply;
13008
13009   xsnprintf (rs->buf, get_remote_packet_size (), "QTBuffer:circular:%x", val);
13010   putpkt (rs->buf);
13011   reply = remote_get_noisy_reply ();
13012   if (*reply == '\0')
13013     error (_("Target does not support this command."));
13014   if (strcmp (reply, "OK") != 0)
13015     error (_("Bogus reply from target: %s"), reply);
13016 }
13017
13018 static struct traceframe_info *
13019 remote_traceframe_info (struct target_ops *self)
13020 {
13021   char *text;
13022
13023   text = target_read_stralloc (&current_target,
13024                                TARGET_OBJECT_TRACEFRAME_INFO, NULL);
13025   if (text != NULL)
13026     {
13027       struct traceframe_info *info;
13028       struct cleanup *back_to = make_cleanup (xfree, text);
13029
13030       info = parse_traceframe_info (text);
13031       do_cleanups (back_to);
13032       return info;
13033     }
13034
13035   return NULL;
13036 }
13037
13038 /* Handle the qTMinFTPILen packet.  Returns the minimum length of
13039    instruction on which a fast tracepoint may be placed.  Returns -1
13040    if the packet is not supported, and 0 if the minimum instruction
13041    length is unknown.  */
13042
13043 static int
13044 remote_get_min_fast_tracepoint_insn_len (struct target_ops *self)
13045 {
13046   struct remote_state *rs = get_remote_state ();
13047   char *reply;
13048
13049   /* If we're not debugging a process yet, the IPA can't be
13050      loaded.  */
13051   if (!target_has_execution)
13052     return 0;
13053
13054   /* Make sure the remote is pointing at the right process.  */
13055   set_general_process ();
13056
13057   xsnprintf (rs->buf, get_remote_packet_size (), "qTMinFTPILen");
13058   putpkt (rs->buf);
13059   reply = remote_get_noisy_reply ();
13060   if (*reply == '\0')
13061     return -1;
13062   else
13063     {
13064       ULONGEST min_insn_len;
13065
13066       unpack_varlen_hex (reply, &min_insn_len);
13067
13068       return (int) min_insn_len;
13069     }
13070 }
13071
13072 static void
13073 remote_set_trace_buffer_size (struct target_ops *self, LONGEST val)
13074 {
13075   if (packet_support (PACKET_QTBuffer_size) != PACKET_DISABLE)
13076     {
13077       struct remote_state *rs = get_remote_state ();
13078       char *buf = rs->buf;
13079       char *endbuf = rs->buf + get_remote_packet_size ();
13080       enum packet_result result;
13081
13082       gdb_assert (val >= 0 || val == -1);
13083       buf += xsnprintf (buf, endbuf - buf, "QTBuffer:size:");
13084       /* Send -1 as literal "-1" to avoid host size dependency.  */
13085       if (val < 0)
13086         {
13087           *buf++ = '-';
13088           buf += hexnumstr (buf, (ULONGEST) -val);
13089         }
13090       else
13091         buf += hexnumstr (buf, (ULONGEST) val);
13092
13093       putpkt (rs->buf);
13094       remote_get_noisy_reply ();
13095       result = packet_ok (rs->buf,
13096                   &remote_protocol_packets[PACKET_QTBuffer_size]);
13097
13098       if (result != PACKET_OK)
13099         warning (_("Bogus reply from target: %s"), rs->buf);
13100     }
13101 }
13102
13103 static int
13104 remote_set_trace_notes (struct target_ops *self,
13105                         const char *user, const char *notes,
13106                         const char *stop_notes)
13107 {
13108   struct remote_state *rs = get_remote_state ();
13109   char *reply;
13110   char *buf = rs->buf;
13111   char *endbuf = rs->buf + get_remote_packet_size ();
13112   int nbytes;
13113
13114   buf += xsnprintf (buf, endbuf - buf, "QTNotes:");
13115   if (user)
13116     {
13117       buf += xsnprintf (buf, endbuf - buf, "user:");
13118       nbytes = bin2hex ((gdb_byte *) user, buf, strlen (user));
13119       buf += 2 * nbytes;
13120       *buf++ = ';';
13121     }
13122   if (notes)
13123     {
13124       buf += xsnprintf (buf, endbuf - buf, "notes:");
13125       nbytes = bin2hex ((gdb_byte *) notes, buf, strlen (notes));
13126       buf += 2 * nbytes;
13127       *buf++ = ';';
13128     }
13129   if (stop_notes)
13130     {
13131       buf += xsnprintf (buf, endbuf - buf, "tstop:");
13132       nbytes = bin2hex ((gdb_byte *) stop_notes, buf, strlen (stop_notes));
13133       buf += 2 * nbytes;
13134       *buf++ = ';';
13135     }
13136   /* Ensure the buffer is terminated.  */
13137   *buf = '\0';
13138
13139   putpkt (rs->buf);
13140   reply = remote_get_noisy_reply ();
13141   if (*reply == '\0')
13142     return 0;
13143
13144   if (strcmp (reply, "OK") != 0)
13145     error (_("Bogus reply from target: %s"), reply);
13146
13147   return 1;
13148 }
13149
13150 static int
13151 remote_use_agent (struct target_ops *self, int use)
13152 {
13153   if (packet_support (PACKET_QAgent) != PACKET_DISABLE)
13154     {
13155       struct remote_state *rs = get_remote_state ();
13156
13157       /* If the stub supports QAgent.  */
13158       xsnprintf (rs->buf, get_remote_packet_size (), "QAgent:%d", use);
13159       putpkt (rs->buf);
13160       getpkt (&rs->buf, &rs->buf_size, 0);
13161
13162       if (strcmp (rs->buf, "OK") == 0)
13163         {
13164           use_agent = use;
13165           return 1;
13166         }
13167     }
13168
13169   return 0;
13170 }
13171
13172 static int
13173 remote_can_use_agent (struct target_ops *self)
13174 {
13175   return (packet_support (PACKET_QAgent) != PACKET_DISABLE);
13176 }
13177
13178 struct btrace_target_info
13179 {
13180   /* The ptid of the traced thread.  */
13181   ptid_t ptid;
13182
13183   /* The obtained branch trace configuration.  */
13184   struct btrace_config conf;
13185 };
13186
13187 /* Reset our idea of our target's btrace configuration.  */
13188
13189 static void
13190 remote_btrace_reset (void)
13191 {
13192   struct remote_state *rs = get_remote_state ();
13193
13194   memset (&rs->btrace_config, 0, sizeof (rs->btrace_config));
13195 }
13196
13197 /* Check whether the target supports branch tracing.  */
13198
13199 static int
13200 remote_supports_btrace (struct target_ops *self, enum btrace_format format)
13201 {
13202   if (packet_support (PACKET_Qbtrace_off) != PACKET_ENABLE)
13203     return 0;
13204   if (packet_support (PACKET_qXfer_btrace) != PACKET_ENABLE)
13205     return 0;
13206
13207   switch (format)
13208     {
13209       case BTRACE_FORMAT_NONE:
13210         return 0;
13211
13212       case BTRACE_FORMAT_BTS:
13213         return (packet_support (PACKET_Qbtrace_bts) == PACKET_ENABLE);
13214
13215       case BTRACE_FORMAT_PT:
13216         /* The trace is decoded on the host.  Even if our target supports it,
13217            we still need to have libipt to decode the trace.  */
13218 #if defined (HAVE_LIBIPT)
13219         return (packet_support (PACKET_Qbtrace_pt) == PACKET_ENABLE);
13220 #else /* !defined (HAVE_LIBIPT)  */
13221         return 0;
13222 #endif /* !defined (HAVE_LIBIPT)  */
13223     }
13224
13225   internal_error (__FILE__, __LINE__, _("Unknown branch trace format"));
13226 }
13227
13228 /* Synchronize the configuration with the target.  */
13229
13230 static void
13231 btrace_sync_conf (const struct btrace_config *conf)
13232 {
13233   struct packet_config *packet;
13234   struct remote_state *rs;
13235   char *buf, *pos, *endbuf;
13236
13237   rs = get_remote_state ();
13238   buf = rs->buf;
13239   endbuf = buf + get_remote_packet_size ();
13240
13241   packet = &remote_protocol_packets[PACKET_Qbtrace_conf_bts_size];
13242   if (packet_config_support (packet) == PACKET_ENABLE
13243       && conf->bts.size != rs->btrace_config.bts.size)
13244     {
13245       pos = buf;
13246       pos += xsnprintf (pos, endbuf - pos, "%s=0x%x", packet->name,
13247                         conf->bts.size);
13248
13249       putpkt (buf);
13250       getpkt (&buf, &rs->buf_size, 0);
13251
13252       if (packet_ok (buf, packet) == PACKET_ERROR)
13253         {
13254           if (buf[0] == 'E' && buf[1] == '.')
13255             error (_("Failed to configure the BTS buffer size: %s"), buf + 2);
13256           else
13257             error (_("Failed to configure the BTS buffer size."));
13258         }
13259
13260       rs->btrace_config.bts.size = conf->bts.size;
13261     }
13262
13263   packet = &remote_protocol_packets[PACKET_Qbtrace_conf_pt_size];
13264   if (packet_config_support (packet) == PACKET_ENABLE
13265       && conf->pt.size != rs->btrace_config.pt.size)
13266     {
13267       pos = buf;
13268       pos += xsnprintf (pos, endbuf - pos, "%s=0x%x", packet->name,
13269                         conf->pt.size);
13270
13271       putpkt (buf);
13272       getpkt (&buf, &rs->buf_size, 0);
13273
13274       if (packet_ok (buf, packet) == PACKET_ERROR)
13275         {
13276           if (buf[0] == 'E' && buf[1] == '.')
13277             error (_("Failed to configure the trace buffer size: %s"), buf + 2);
13278           else
13279             error (_("Failed to configure the trace buffer size."));
13280         }
13281
13282       rs->btrace_config.pt.size = conf->pt.size;
13283     }
13284 }
13285
13286 /* Read the current thread's btrace configuration from the target and
13287    store it into CONF.  */
13288
13289 static void
13290 btrace_read_config (struct btrace_config *conf)
13291 {
13292   char *xml;
13293
13294   xml = target_read_stralloc (&current_target,
13295                               TARGET_OBJECT_BTRACE_CONF, "");
13296   if (xml != NULL)
13297     {
13298       struct cleanup *cleanup;
13299
13300       cleanup = make_cleanup (xfree, xml);
13301       parse_xml_btrace_conf (conf, xml);
13302       do_cleanups (cleanup);
13303     }
13304 }
13305
13306 /* Maybe reopen target btrace.  */
13307
13308 static void
13309 remote_btrace_maybe_reopen (void)
13310 {
13311   struct remote_state *rs = get_remote_state ();
13312   struct thread_info *tp;
13313   int btrace_target_pushed = 0;
13314   int warned = 0;
13315
13316   scoped_restore_current_thread restore_thread;
13317
13318   ALL_NON_EXITED_THREADS (tp)
13319     {
13320       set_general_thread (tp->ptid);
13321
13322       memset (&rs->btrace_config, 0x00, sizeof (struct btrace_config));
13323       btrace_read_config (&rs->btrace_config);
13324
13325       if (rs->btrace_config.format == BTRACE_FORMAT_NONE)
13326         continue;
13327
13328 #if !defined (HAVE_LIBIPT)
13329       if (rs->btrace_config.format == BTRACE_FORMAT_PT)
13330         {
13331           if (!warned)
13332             {
13333               warned = 1;
13334               warning (_("GDB does not support Intel Processor Trace. "
13335                          "\"record\" will not work in this session."));
13336             }
13337
13338           continue;
13339         }
13340 #endif /* !defined (HAVE_LIBIPT) */
13341
13342       /* Push target, once, but before anything else happens.  This way our
13343          changes to the threads will be cleaned up by unpushing the target
13344          in case btrace_read_config () throws.  */
13345       if (!btrace_target_pushed)
13346         {
13347           btrace_target_pushed = 1;
13348           record_btrace_push_target ();
13349           printf_filtered (_("Target is recording using %s.\n"),
13350                            btrace_format_string (rs->btrace_config.format));
13351         }
13352
13353       tp->btrace.target = XCNEW (struct btrace_target_info);
13354       tp->btrace.target->ptid = tp->ptid;
13355       tp->btrace.target->conf = rs->btrace_config;
13356     }
13357 }
13358
13359 /* Enable branch tracing.  */
13360
13361 static struct btrace_target_info *
13362 remote_enable_btrace (struct target_ops *self, ptid_t ptid,
13363                       const struct btrace_config *conf)
13364 {
13365   struct btrace_target_info *tinfo = NULL;
13366   struct packet_config *packet = NULL;
13367   struct remote_state *rs = get_remote_state ();
13368   char *buf = rs->buf;
13369   char *endbuf = rs->buf + get_remote_packet_size ();
13370
13371   switch (conf->format)
13372     {
13373       case BTRACE_FORMAT_BTS:
13374         packet = &remote_protocol_packets[PACKET_Qbtrace_bts];
13375         break;
13376
13377       case BTRACE_FORMAT_PT:
13378         packet = &remote_protocol_packets[PACKET_Qbtrace_pt];
13379         break;
13380     }
13381
13382   if (packet == NULL || packet_config_support (packet) != PACKET_ENABLE)
13383     error (_("Target does not support branch tracing."));
13384
13385   btrace_sync_conf (conf);
13386
13387   set_general_thread (ptid);
13388
13389   buf += xsnprintf (buf, endbuf - buf, "%s", packet->name);
13390   putpkt (rs->buf);
13391   getpkt (&rs->buf, &rs->buf_size, 0);
13392
13393   if (packet_ok (rs->buf, packet) == PACKET_ERROR)
13394     {
13395       if (rs->buf[0] == 'E' && rs->buf[1] == '.')
13396         error (_("Could not enable branch tracing for %s: %s"),
13397                target_pid_to_str (ptid), rs->buf + 2);
13398       else
13399         error (_("Could not enable branch tracing for %s."),
13400                target_pid_to_str (ptid));
13401     }
13402
13403   tinfo = XCNEW (struct btrace_target_info);
13404   tinfo->ptid = ptid;
13405
13406   /* If we fail to read the configuration, we lose some information, but the
13407      tracing itself is not impacted.  */
13408   TRY
13409     {
13410       btrace_read_config (&tinfo->conf);
13411     }
13412   CATCH (err, RETURN_MASK_ERROR)
13413     {
13414       if (err.message != NULL)
13415         warning ("%s", err.message);
13416     }
13417   END_CATCH
13418
13419   return tinfo;
13420 }
13421
13422 /* Disable branch tracing.  */
13423
13424 static void
13425 remote_disable_btrace (struct target_ops *self,
13426                        struct btrace_target_info *tinfo)
13427 {
13428   struct packet_config *packet = &remote_protocol_packets[PACKET_Qbtrace_off];
13429   struct remote_state *rs = get_remote_state ();
13430   char *buf = rs->buf;
13431   char *endbuf = rs->buf + get_remote_packet_size ();
13432
13433   if (packet_config_support (packet) != PACKET_ENABLE)
13434     error (_("Target does not support branch tracing."));
13435
13436   set_general_thread (tinfo->ptid);
13437
13438   buf += xsnprintf (buf, endbuf - buf, "%s", packet->name);
13439   putpkt (rs->buf);
13440   getpkt (&rs->buf, &rs->buf_size, 0);
13441
13442   if (packet_ok (rs->buf, packet) == PACKET_ERROR)
13443     {
13444       if (rs->buf[0] == 'E' && rs->buf[1] == '.')
13445         error (_("Could not disable branch tracing for %s: %s"),
13446                target_pid_to_str (tinfo->ptid), rs->buf + 2);
13447       else
13448         error (_("Could not disable branch tracing for %s."),
13449                target_pid_to_str (tinfo->ptid));
13450     }
13451
13452   xfree (tinfo);
13453 }
13454
13455 /* Teardown branch tracing.  */
13456
13457 static void
13458 remote_teardown_btrace (struct target_ops *self,
13459                         struct btrace_target_info *tinfo)
13460 {
13461   /* We must not talk to the target during teardown.  */
13462   xfree (tinfo);
13463 }
13464
13465 /* Read the branch trace.  */
13466
13467 static enum btrace_error
13468 remote_read_btrace (struct target_ops *self,
13469                     struct btrace_data *btrace,
13470                     struct btrace_target_info *tinfo,
13471                     enum btrace_read_type type)
13472 {
13473   struct packet_config *packet = &remote_protocol_packets[PACKET_qXfer_btrace];
13474   struct cleanup *cleanup;
13475   const char *annex;
13476   char *xml;
13477
13478   if (packet_config_support (packet) != PACKET_ENABLE)
13479     error (_("Target does not support branch tracing."));
13480
13481 #if !defined(HAVE_LIBEXPAT)
13482   error (_("Cannot process branch tracing result. XML parsing not supported."));
13483 #endif
13484
13485   switch (type)
13486     {
13487     case BTRACE_READ_ALL:
13488       annex = "all";
13489       break;
13490     case BTRACE_READ_NEW:
13491       annex = "new";
13492       break;
13493     case BTRACE_READ_DELTA:
13494       annex = "delta";
13495       break;
13496     default:
13497       internal_error (__FILE__, __LINE__,
13498                       _("Bad branch tracing read type: %u."),
13499                       (unsigned int) type);
13500     }
13501
13502   xml = target_read_stralloc (&current_target,
13503                               TARGET_OBJECT_BTRACE, annex);
13504   if (xml == NULL)
13505     return BTRACE_ERR_UNKNOWN;
13506
13507   cleanup = make_cleanup (xfree, xml);
13508   parse_xml_btrace (btrace, xml);
13509   do_cleanups (cleanup);
13510
13511   return BTRACE_ERR_NONE;
13512 }
13513
13514 static const struct btrace_config *
13515 remote_btrace_conf (struct target_ops *self,
13516                     const struct btrace_target_info *tinfo)
13517 {
13518   return &tinfo->conf;
13519 }
13520
13521 static int
13522 remote_augmented_libraries_svr4_read (struct target_ops *self)
13523 {
13524   return (packet_support (PACKET_augmented_libraries_svr4_read_feature)
13525           == PACKET_ENABLE);
13526 }
13527
13528 /* Implementation of to_load.  */
13529
13530 static void
13531 remote_load (struct target_ops *self, const char *name, int from_tty)
13532 {
13533   generic_load (name, from_tty);
13534 }
13535
13536 /* Accepts an integer PID; returns a string representing a file that
13537    can be opened on the remote side to get the symbols for the child
13538    process.  Returns NULL if the operation is not supported.  */
13539
13540 static char *
13541 remote_pid_to_exec_file (struct target_ops *self, int pid)
13542 {
13543   static char *filename = NULL;
13544   struct inferior *inf;
13545   char *annex = NULL;
13546
13547   if (packet_support (PACKET_qXfer_exec_file) != PACKET_ENABLE)
13548     return NULL;
13549
13550   if (filename != NULL)
13551     xfree (filename);
13552
13553   inf = find_inferior_pid (pid);
13554   if (inf == NULL)
13555     internal_error (__FILE__, __LINE__,
13556                     _("not currently attached to process %d"), pid);
13557
13558   if (!inf->fake_pid_p)
13559     {
13560       const int annex_size = 9;
13561
13562       annex = (char *) alloca (annex_size);
13563       xsnprintf (annex, annex_size, "%x", pid);
13564     }
13565
13566   filename = target_read_stralloc (&current_target,
13567                                    TARGET_OBJECT_EXEC_FILE, annex);
13568
13569   return filename;
13570 }
13571
13572 /* Implement the to_can_do_single_step target_ops method.  */
13573
13574 static int
13575 remote_can_do_single_step (struct target_ops *ops)
13576 {
13577   /* We can only tell whether target supports single step or not by
13578      supported s and S vCont actions if the stub supports vContSupported
13579      feature.  If the stub doesn't support vContSupported feature,
13580      we have conservatively to think target doesn't supports single
13581      step.  */
13582   if (packet_support (PACKET_vContSupported) == PACKET_ENABLE)
13583     {
13584       struct remote_state *rs = get_remote_state ();
13585
13586       if (packet_support (PACKET_vCont) == PACKET_SUPPORT_UNKNOWN)
13587         remote_vcont_probe (rs);
13588
13589       return rs->supports_vCont.s && rs->supports_vCont.S;
13590     }
13591   else
13592     return 0;
13593 }
13594
13595 /* Implementation of the to_execution_direction method for the remote
13596    target.  */
13597
13598 static enum exec_direction_kind
13599 remote_execution_direction (struct target_ops *self)
13600 {
13601   struct remote_state *rs = get_remote_state ();
13602
13603   return rs->last_resume_exec_dir;
13604 }
13605
13606 /* Return pointer to the thread_info struct which corresponds to
13607    THREAD_HANDLE (having length HANDLE_LEN).  */
13608
13609 static struct thread_info *
13610 remote_thread_handle_to_thread_info (struct target_ops *ops,
13611                                      const gdb_byte *thread_handle,
13612                                      int handle_len,
13613                                      struct inferior *inf)
13614 {
13615   struct thread_info *tp;
13616
13617   ALL_NON_EXITED_THREADS (tp)
13618     {
13619       struct private_thread_info *priv = get_private_info_thread (tp);
13620
13621       if (tp->inf == inf && priv != NULL)
13622         {
13623           if (handle_len != priv->thread_handle->size ())
13624             error (_("Thread handle size mismatch: %d vs %zu (from remote)"),
13625                    handle_len, priv->thread_handle->size ());
13626           if (memcmp (thread_handle, priv->thread_handle->data (),
13627                       handle_len) == 0)
13628             return tp;
13629         }
13630     }
13631
13632   return NULL;
13633 }
13634
13635 static void
13636 init_remote_ops (void)
13637 {
13638   remote_ops.to_shortname = "remote";
13639   remote_ops.to_longname = "Remote serial target in gdb-specific protocol";
13640   remote_ops.to_doc =
13641     "Use a remote computer via a serial line, using a gdb-specific protocol.\n\
13642 Specify the serial device it is connected to\n\
13643 (e.g. /dev/ttyS0, /dev/ttya, COM1, etc.).";
13644   remote_ops.to_open = remote_open;
13645   remote_ops.to_close = remote_close;
13646   remote_ops.to_detach = remote_detach;
13647   remote_ops.to_disconnect = remote_disconnect;
13648   remote_ops.to_resume = remote_resume;
13649   remote_ops.to_commit_resume = remote_commit_resume;
13650   remote_ops.to_wait = remote_wait;
13651   remote_ops.to_fetch_registers = remote_fetch_registers;
13652   remote_ops.to_store_registers = remote_store_registers;
13653   remote_ops.to_prepare_to_store = remote_prepare_to_store;
13654   remote_ops.to_files_info = remote_files_info;
13655   remote_ops.to_insert_breakpoint = remote_insert_breakpoint;
13656   remote_ops.to_remove_breakpoint = remote_remove_breakpoint;
13657   remote_ops.to_stopped_by_sw_breakpoint = remote_stopped_by_sw_breakpoint;
13658   remote_ops.to_supports_stopped_by_sw_breakpoint = remote_supports_stopped_by_sw_breakpoint;
13659   remote_ops.to_stopped_by_hw_breakpoint = remote_stopped_by_hw_breakpoint;
13660   remote_ops.to_supports_stopped_by_hw_breakpoint = remote_supports_stopped_by_hw_breakpoint;
13661   remote_ops.to_stopped_by_watchpoint = remote_stopped_by_watchpoint;
13662   remote_ops.to_stopped_data_address = remote_stopped_data_address;
13663   remote_ops.to_watchpoint_addr_within_range =
13664     remote_watchpoint_addr_within_range;
13665   remote_ops.to_can_use_hw_breakpoint = remote_check_watch_resources;
13666   remote_ops.to_insert_hw_breakpoint = remote_insert_hw_breakpoint;
13667   remote_ops.to_remove_hw_breakpoint = remote_remove_hw_breakpoint;
13668   remote_ops.to_region_ok_for_hw_watchpoint
13669      = remote_region_ok_for_hw_watchpoint;
13670   remote_ops.to_insert_watchpoint = remote_insert_watchpoint;
13671   remote_ops.to_remove_watchpoint = remote_remove_watchpoint;
13672   remote_ops.to_kill = remote_kill;
13673   remote_ops.to_load = remote_load;
13674   remote_ops.to_mourn_inferior = remote_mourn;
13675   remote_ops.to_pass_signals = remote_pass_signals;
13676   remote_ops.to_set_syscall_catchpoint = remote_set_syscall_catchpoint;
13677   remote_ops.to_program_signals = remote_program_signals;
13678   remote_ops.to_thread_alive = remote_thread_alive;
13679   remote_ops.to_thread_name = remote_thread_name;
13680   remote_ops.to_update_thread_list = remote_update_thread_list;
13681   remote_ops.to_pid_to_str = remote_pid_to_str;
13682   remote_ops.to_extra_thread_info = remote_threads_extra_info;
13683   remote_ops.to_get_ada_task_ptid = remote_get_ada_task_ptid;
13684   remote_ops.to_stop = remote_stop;
13685   remote_ops.to_interrupt = remote_interrupt;
13686   remote_ops.to_pass_ctrlc = remote_pass_ctrlc;
13687   remote_ops.to_xfer_partial = remote_xfer_partial;
13688   remote_ops.to_get_memory_xfer_limit = remote_get_memory_xfer_limit;
13689   remote_ops.to_rcmd = remote_rcmd;
13690   remote_ops.to_pid_to_exec_file = remote_pid_to_exec_file;
13691   remote_ops.to_log_command = serial_log_command;
13692   remote_ops.to_get_thread_local_address = remote_get_thread_local_address;
13693   remote_ops.to_stratum = process_stratum;
13694   remote_ops.to_has_all_memory = default_child_has_all_memory;
13695   remote_ops.to_has_memory = default_child_has_memory;
13696   remote_ops.to_has_stack = default_child_has_stack;
13697   remote_ops.to_has_registers = default_child_has_registers;
13698   remote_ops.to_has_execution = default_child_has_execution;
13699   remote_ops.to_has_thread_control = tc_schedlock;    /* can lock scheduler */
13700   remote_ops.to_can_execute_reverse = remote_can_execute_reverse;
13701   remote_ops.to_magic = OPS_MAGIC;
13702   remote_ops.to_memory_map = remote_memory_map;
13703   remote_ops.to_flash_erase = remote_flash_erase;
13704   remote_ops.to_flash_done = remote_flash_done;
13705   remote_ops.to_read_description = remote_read_description;
13706   remote_ops.to_search_memory = remote_search_memory;
13707   remote_ops.to_can_async_p = remote_can_async_p;
13708   remote_ops.to_is_async_p = remote_is_async_p;
13709   remote_ops.to_async = remote_async;
13710   remote_ops.to_thread_events = remote_thread_events;
13711   remote_ops.to_can_do_single_step = remote_can_do_single_step;
13712   remote_ops.to_terminal_inferior = remote_terminal_inferior;
13713   remote_ops.to_terminal_ours = remote_terminal_ours;
13714   remote_ops.to_supports_non_stop = remote_supports_non_stop;
13715   remote_ops.to_supports_multi_process = remote_supports_multi_process;
13716   remote_ops.to_supports_disable_randomization
13717     = remote_supports_disable_randomization;
13718   remote_ops.to_filesystem_is_local = remote_filesystem_is_local;
13719   remote_ops.to_fileio_open = remote_hostio_open;
13720   remote_ops.to_fileio_pwrite = remote_hostio_pwrite;
13721   remote_ops.to_fileio_pread = remote_hostio_pread;
13722   remote_ops.to_fileio_fstat = remote_hostio_fstat;
13723   remote_ops.to_fileio_close = remote_hostio_close;
13724   remote_ops.to_fileio_unlink = remote_hostio_unlink;
13725   remote_ops.to_fileio_readlink = remote_hostio_readlink;
13726   remote_ops.to_supports_enable_disable_tracepoint = remote_supports_enable_disable_tracepoint;
13727   remote_ops.to_supports_string_tracing = remote_supports_string_tracing;
13728   remote_ops.to_supports_evaluation_of_breakpoint_conditions = remote_supports_cond_breakpoints;
13729   remote_ops.to_can_run_breakpoint_commands = remote_can_run_breakpoint_commands;
13730   remote_ops.to_trace_init = remote_trace_init;
13731   remote_ops.to_download_tracepoint = remote_download_tracepoint;
13732   remote_ops.to_can_download_tracepoint = remote_can_download_tracepoint;
13733   remote_ops.to_download_trace_state_variable
13734     = remote_download_trace_state_variable;
13735   remote_ops.to_enable_tracepoint = remote_enable_tracepoint;
13736   remote_ops.to_disable_tracepoint = remote_disable_tracepoint;
13737   remote_ops.to_trace_set_readonly_regions = remote_trace_set_readonly_regions;
13738   remote_ops.to_trace_start = remote_trace_start;
13739   remote_ops.to_get_trace_status = remote_get_trace_status;
13740   remote_ops.to_get_tracepoint_status = remote_get_tracepoint_status;
13741   remote_ops.to_trace_stop = remote_trace_stop;
13742   remote_ops.to_trace_find = remote_trace_find;
13743   remote_ops.to_get_trace_state_variable_value
13744     = remote_get_trace_state_variable_value;
13745   remote_ops.to_save_trace_data = remote_save_trace_data;
13746   remote_ops.to_upload_tracepoints = remote_upload_tracepoints;
13747   remote_ops.to_upload_trace_state_variables
13748     = remote_upload_trace_state_variables;
13749   remote_ops.to_get_raw_trace_data = remote_get_raw_trace_data;
13750   remote_ops.to_get_min_fast_tracepoint_insn_len = remote_get_min_fast_tracepoint_insn_len;
13751   remote_ops.to_set_disconnected_tracing = remote_set_disconnected_tracing;
13752   remote_ops.to_set_circular_trace_buffer = remote_set_circular_trace_buffer;
13753   remote_ops.to_set_trace_buffer_size = remote_set_trace_buffer_size;
13754   remote_ops.to_set_trace_notes = remote_set_trace_notes;
13755   remote_ops.to_core_of_thread = remote_core_of_thread;
13756   remote_ops.to_verify_memory = remote_verify_memory;
13757   remote_ops.to_get_tib_address = remote_get_tib_address;
13758   remote_ops.to_set_permissions = remote_set_permissions;
13759   remote_ops.to_static_tracepoint_marker_at
13760     = remote_static_tracepoint_marker_at;
13761   remote_ops.to_static_tracepoint_markers_by_strid
13762     = remote_static_tracepoint_markers_by_strid;
13763   remote_ops.to_traceframe_info = remote_traceframe_info;
13764   remote_ops.to_use_agent = remote_use_agent;
13765   remote_ops.to_can_use_agent = remote_can_use_agent;
13766   remote_ops.to_supports_btrace = remote_supports_btrace;
13767   remote_ops.to_enable_btrace = remote_enable_btrace;
13768   remote_ops.to_disable_btrace = remote_disable_btrace;
13769   remote_ops.to_teardown_btrace = remote_teardown_btrace;
13770   remote_ops.to_read_btrace = remote_read_btrace;
13771   remote_ops.to_btrace_conf = remote_btrace_conf;
13772   remote_ops.to_augmented_libraries_svr4_read =
13773     remote_augmented_libraries_svr4_read;
13774   remote_ops.to_follow_fork = remote_follow_fork;
13775   remote_ops.to_follow_exec = remote_follow_exec;
13776   remote_ops.to_insert_fork_catchpoint = remote_insert_fork_catchpoint;
13777   remote_ops.to_remove_fork_catchpoint = remote_remove_fork_catchpoint;
13778   remote_ops.to_insert_vfork_catchpoint = remote_insert_vfork_catchpoint;
13779   remote_ops.to_remove_vfork_catchpoint = remote_remove_vfork_catchpoint;
13780   remote_ops.to_insert_exec_catchpoint = remote_insert_exec_catchpoint;
13781   remote_ops.to_remove_exec_catchpoint = remote_remove_exec_catchpoint;
13782   remote_ops.to_execution_direction = remote_execution_direction;
13783   remote_ops.to_thread_handle_to_thread_info =
13784     remote_thread_handle_to_thread_info;
13785 }
13786
13787 /* Set up the extended remote vector by making a copy of the standard
13788    remote vector and adding to it.  */
13789
13790 static void
13791 init_extended_remote_ops (void)
13792 {
13793   extended_remote_ops = remote_ops;
13794
13795   extended_remote_ops.to_shortname = "extended-remote";
13796   extended_remote_ops.to_longname =
13797     "Extended remote serial target in gdb-specific protocol";
13798   extended_remote_ops.to_doc =
13799     "Use a remote computer via a serial line, using a gdb-specific protocol.\n\
13800 Specify the serial device it is connected to (e.g. /dev/ttya).";
13801   extended_remote_ops.to_open = extended_remote_open;
13802   extended_remote_ops.to_create_inferior = extended_remote_create_inferior;
13803   extended_remote_ops.to_detach = extended_remote_detach;
13804   extended_remote_ops.to_attach = extended_remote_attach;
13805   extended_remote_ops.to_post_attach = extended_remote_post_attach;
13806   extended_remote_ops.to_supports_disable_randomization
13807     = extended_remote_supports_disable_randomization;
13808 }
13809
13810 static int
13811 remote_can_async_p (struct target_ops *ops)
13812 {
13813   struct remote_state *rs = get_remote_state ();
13814
13815   /* We don't go async if the user has explicitly prevented it with the
13816      "maint set target-async" command.  */
13817   if (!target_async_permitted)
13818     return 0;
13819
13820   /* We're async whenever the serial device is.  */
13821   return serial_can_async_p (rs->remote_desc);
13822 }
13823
13824 static int
13825 remote_is_async_p (struct target_ops *ops)
13826 {
13827   struct remote_state *rs = get_remote_state ();
13828
13829   if (!target_async_permitted)
13830     /* We only enable async when the user specifically asks for it.  */
13831     return 0;
13832
13833   /* We're async whenever the serial device is.  */
13834   return serial_is_async_p (rs->remote_desc);
13835 }
13836
13837 /* Pass the SERIAL event on and up to the client.  One day this code
13838    will be able to delay notifying the client of an event until the
13839    point where an entire packet has been received.  */
13840
13841 static serial_event_ftype remote_async_serial_handler;
13842
13843 static void
13844 remote_async_serial_handler (struct serial *scb, void *context)
13845 {
13846   /* Don't propogate error information up to the client.  Instead let
13847      the client find out about the error by querying the target.  */
13848   inferior_event_handler (INF_REG_EVENT, NULL);
13849 }
13850
13851 static void
13852 remote_async_inferior_event_handler (gdb_client_data data)
13853 {
13854   inferior_event_handler (INF_REG_EVENT, NULL);
13855 }
13856
13857 static void
13858 remote_async (struct target_ops *ops, int enable)
13859 {
13860   struct remote_state *rs = get_remote_state ();
13861
13862   if (enable)
13863     {
13864       serial_async (rs->remote_desc, remote_async_serial_handler, rs);
13865
13866       /* If there are pending events in the stop reply queue tell the
13867          event loop to process them.  */
13868       if (!QUEUE_is_empty (stop_reply_p, stop_reply_queue))
13869         mark_async_event_handler (remote_async_inferior_event_token);
13870       /* For simplicity, below we clear the pending events token
13871          without remembering whether it is marked, so here we always
13872          mark it.  If there's actually no pending notification to
13873          process, this ends up being a no-op (other than a spurious
13874          event-loop wakeup).  */
13875       if (target_is_non_stop_p ())
13876         mark_async_event_handler (rs->notif_state->get_pending_events_token);
13877     }
13878   else
13879     {
13880       serial_async (rs->remote_desc, NULL, NULL);
13881       /* If the core is disabling async, it doesn't want to be
13882          disturbed with target events.  Clear all async event sources
13883          too.  */
13884       clear_async_event_handler (remote_async_inferior_event_token);
13885       if (target_is_non_stop_p ())
13886         clear_async_event_handler (rs->notif_state->get_pending_events_token);
13887     }
13888 }
13889
13890 /* Implementation of the to_thread_events method.  */
13891
13892 static void
13893 remote_thread_events (struct target_ops *ops, int enable)
13894 {
13895   struct remote_state *rs = get_remote_state ();
13896   size_t size = get_remote_packet_size ();
13897
13898   if (packet_support (PACKET_QThreadEvents) == PACKET_DISABLE)
13899     return;
13900
13901   xsnprintf (rs->buf, size, "QThreadEvents:%x", enable ? 1 : 0);
13902   putpkt (rs->buf);
13903   getpkt (&rs->buf, &rs->buf_size, 0);
13904
13905   switch (packet_ok (rs->buf,
13906                      &remote_protocol_packets[PACKET_QThreadEvents]))
13907     {
13908     case PACKET_OK:
13909       if (strcmp (rs->buf, "OK") != 0)
13910         error (_("Remote refused setting thread events: %s"), rs->buf);
13911       break;
13912     case PACKET_ERROR:
13913       warning (_("Remote failure reply: %s"), rs->buf);
13914       break;
13915     case PACKET_UNKNOWN:
13916       break;
13917     }
13918 }
13919
13920 static void
13921 set_remote_cmd (char *args, int from_tty)
13922 {
13923   help_list (remote_set_cmdlist, "set remote ", all_commands, gdb_stdout);
13924 }
13925
13926 static void
13927 show_remote_cmd (char *args, int from_tty)
13928 {
13929   /* We can't just use cmd_show_list here, because we want to skip
13930      the redundant "show remote Z-packet" and the legacy aliases.  */
13931   struct cmd_list_element *list = remote_show_cmdlist;
13932   struct ui_out *uiout = current_uiout;
13933
13934   ui_out_emit_tuple tuple_emitter (uiout, "showlist");
13935   for (; list != NULL; list = list->next)
13936     if (strcmp (list->name, "Z-packet") == 0)
13937       continue;
13938     else if (list->type == not_set_cmd)
13939       /* Alias commands are exactly like the original, except they
13940          don't have the normal type.  */
13941       continue;
13942     else
13943       {
13944         ui_out_emit_tuple option_emitter (uiout, "option");
13945
13946         uiout->field_string ("name", list->name);
13947         uiout->text (":  ");
13948         if (list->type == show_cmd)
13949           do_show_command (NULL, from_tty, list);
13950         else
13951           cmd_func (list, NULL, from_tty);
13952       }
13953 }
13954
13955
13956 /* Function to be called whenever a new objfile (shlib) is detected.  */
13957 static void
13958 remote_new_objfile (struct objfile *objfile)
13959 {
13960   struct remote_state *rs = get_remote_state ();
13961
13962   if (rs->remote_desc != 0)             /* Have a remote connection.  */
13963     remote_check_symbols ();
13964 }
13965
13966 /* Pull all the tracepoints defined on the target and create local
13967    data structures representing them.  We don't want to create real
13968    tracepoints yet, we don't want to mess up the user's existing
13969    collection.  */
13970   
13971 static int
13972 remote_upload_tracepoints (struct target_ops *self, struct uploaded_tp **utpp)
13973 {
13974   struct remote_state *rs = get_remote_state ();
13975   char *p;
13976
13977   /* Ask for a first packet of tracepoint definition.  */
13978   putpkt ("qTfP");
13979   getpkt (&rs->buf, &rs->buf_size, 0);
13980   p = rs->buf;
13981   while (*p && *p != 'l')
13982     {
13983       parse_tracepoint_definition (p, utpp);
13984       /* Ask for another packet of tracepoint definition.  */
13985       putpkt ("qTsP");
13986       getpkt (&rs->buf, &rs->buf_size, 0);
13987       p = rs->buf;
13988     }
13989   return 0;
13990 }
13991
13992 static int
13993 remote_upload_trace_state_variables (struct target_ops *self,
13994                                      struct uploaded_tsv **utsvp)
13995 {
13996   struct remote_state *rs = get_remote_state ();
13997   char *p;
13998
13999   /* Ask for a first packet of variable definition.  */
14000   putpkt ("qTfV");
14001   getpkt (&rs->buf, &rs->buf_size, 0);
14002   p = rs->buf;
14003   while (*p && *p != 'l')
14004     {
14005       parse_tsv_definition (p, utsvp);
14006       /* Ask for another packet of variable definition.  */
14007       putpkt ("qTsV");
14008       getpkt (&rs->buf, &rs->buf_size, 0);
14009       p = rs->buf;
14010     }
14011   return 0;
14012 }
14013
14014 /* The "set/show range-stepping" show hook.  */
14015
14016 static void
14017 show_range_stepping (struct ui_file *file, int from_tty,
14018                      struct cmd_list_element *c,
14019                      const char *value)
14020 {
14021   fprintf_filtered (file,
14022                     _("Debugger's willingness to use range stepping "
14023                       "is %s.\n"), value);
14024 }
14025
14026 /* The "set/show range-stepping" set hook.  */
14027
14028 static void
14029 set_range_stepping (char *ignore_args, int from_tty,
14030                     struct cmd_list_element *c)
14031 {
14032   struct remote_state *rs = get_remote_state ();
14033
14034   /* Whene enabling, check whether range stepping is actually
14035      supported by the target, and warn if not.  */
14036   if (use_range_stepping)
14037     {
14038       if (rs->remote_desc != NULL)
14039         {
14040           if (packet_support (PACKET_vCont) == PACKET_SUPPORT_UNKNOWN)
14041             remote_vcont_probe (rs);
14042
14043           if (packet_support (PACKET_vCont) == PACKET_ENABLE
14044               && rs->supports_vCont.r)
14045             return;
14046         }
14047
14048       warning (_("Range stepping is not supported by the current target"));
14049     }
14050 }
14051
14052 void
14053 _initialize_remote (void)
14054 {
14055   struct cmd_list_element *cmd;
14056   const char *cmd_name;
14057
14058   /* architecture specific data */
14059   remote_gdbarch_data_handle =
14060     gdbarch_data_register_post_init (init_remote_state);
14061   remote_g_packet_data_handle =
14062     gdbarch_data_register_pre_init (remote_g_packet_data_init);
14063
14064   remote_pspace_data
14065     = register_program_space_data_with_cleanup (NULL,
14066                                                 remote_pspace_data_cleanup);
14067
14068   /* Initialize the per-target state.  At the moment there is only one
14069      of these, not one per target.  Only one target is active at a
14070      time.  */
14071   remote_state = new_remote_state ();
14072
14073   init_remote_ops ();
14074   add_target (&remote_ops);
14075
14076   init_extended_remote_ops ();
14077   add_target (&extended_remote_ops);
14078
14079   /* Hook into new objfile notification.  */
14080   observer_attach_new_objfile (remote_new_objfile);
14081   /* We're no longer interested in notification events of an inferior
14082      when it exits.  */
14083   observer_attach_inferior_exit (discard_pending_stop_replies);
14084
14085 #if 0
14086   init_remote_threadtests ();
14087 #endif
14088
14089   stop_reply_queue = QUEUE_alloc (stop_reply_p, stop_reply_xfree);
14090   /* set/show remote ...  */
14091
14092   add_prefix_cmd ("remote", class_maintenance, set_remote_cmd, _("\
14093 Remote protocol specific variables\n\
14094 Configure various remote-protocol specific variables such as\n\
14095 the packets being used"),
14096                   &remote_set_cmdlist, "set remote ",
14097                   0 /* allow-unknown */, &setlist);
14098   add_prefix_cmd ("remote", class_maintenance, show_remote_cmd, _("\
14099 Remote protocol specific variables\n\
14100 Configure various remote-protocol specific variables such as\n\
14101 the packets being used"),
14102                   &remote_show_cmdlist, "show remote ",
14103                   0 /* allow-unknown */, &showlist);
14104
14105   add_cmd ("compare-sections", class_obscure, compare_sections_command, _("\
14106 Compare section data on target to the exec file.\n\
14107 Argument is a single section name (default: all loaded sections).\n\
14108 To compare only read-only loaded sections, specify the -r option."),
14109            &cmdlist);
14110
14111   add_cmd ("packet", class_maintenance, packet_command, _("\
14112 Send an arbitrary packet to a remote target.\n\
14113    maintenance packet TEXT\n\
14114 If GDB is talking to an inferior via the GDB serial protocol, then\n\
14115 this command sends the string TEXT to the inferior, and displays the\n\
14116 response packet.  GDB supplies the initial `$' character, and the\n\
14117 terminating `#' character and checksum."),
14118            &maintenancelist);
14119
14120   add_setshow_boolean_cmd ("remotebreak", no_class, &remote_break, _("\
14121 Set whether to send break if interrupted."), _("\
14122 Show whether to send break if interrupted."), _("\
14123 If set, a break, instead of a cntrl-c, is sent to the remote target."),
14124                            set_remotebreak, show_remotebreak,
14125                            &setlist, &showlist);
14126   cmd_name = "remotebreak";
14127   cmd = lookup_cmd (&cmd_name, setlist, "", -1, 1);
14128   deprecate_cmd (cmd, "set remote interrupt-sequence");
14129   cmd_name = "remotebreak"; /* needed because lookup_cmd updates the pointer */
14130   cmd = lookup_cmd (&cmd_name, showlist, "", -1, 1);
14131   deprecate_cmd (cmd, "show remote interrupt-sequence");
14132
14133   add_setshow_enum_cmd ("interrupt-sequence", class_support,
14134                         interrupt_sequence_modes, &interrupt_sequence_mode,
14135                         _("\
14136 Set interrupt sequence to remote target."), _("\
14137 Show interrupt sequence to remote target."), _("\
14138 Valid value is \"Ctrl-C\", \"BREAK\" or \"BREAK-g\". The default is \"Ctrl-C\"."),
14139                         NULL, show_interrupt_sequence,
14140                         &remote_set_cmdlist,
14141                         &remote_show_cmdlist);
14142
14143   add_setshow_boolean_cmd ("interrupt-on-connect", class_support,
14144                            &interrupt_on_connect, _("\
14145 Set whether interrupt-sequence is sent to remote target when gdb connects to."), _("            \
14146 Show whether interrupt-sequence is sent to remote target when gdb connects to."), _("           \
14147 If set, interrupt sequence is sent to remote target."),
14148                            NULL, NULL,
14149                            &remote_set_cmdlist, &remote_show_cmdlist);
14150
14151   /* Install commands for configuring memory read/write packets.  */
14152
14153   add_cmd ("remotewritesize", no_class, set_memory_write_packet_size, _("\
14154 Set the maximum number of bytes per memory write packet (deprecated)."),
14155            &setlist);
14156   add_cmd ("remotewritesize", no_class, show_memory_write_packet_size, _("\
14157 Show the maximum number of bytes per memory write packet (deprecated)."),
14158            &showlist);
14159   add_cmd ("memory-write-packet-size", no_class,
14160            set_memory_write_packet_size, _("\
14161 Set the maximum number of bytes per memory-write packet.\n\
14162 Specify the number of bytes in a packet or 0 (zero) for the\n\
14163 default packet size.  The actual limit is further reduced\n\
14164 dependent on the target.  Specify ``fixed'' to disable the\n\
14165 further restriction and ``limit'' to enable that restriction."),
14166            &remote_set_cmdlist);
14167   add_cmd ("memory-read-packet-size", no_class,
14168            set_memory_read_packet_size, _("\
14169 Set the maximum number of bytes per memory-read packet.\n\
14170 Specify the number of bytes in a packet or 0 (zero) for the\n\
14171 default packet size.  The actual limit is further reduced\n\
14172 dependent on the target.  Specify ``fixed'' to disable the\n\
14173 further restriction and ``limit'' to enable that restriction."),
14174            &remote_set_cmdlist);
14175   add_cmd ("memory-write-packet-size", no_class,
14176            show_memory_write_packet_size,
14177            _("Show the maximum number of bytes per memory-write packet."),
14178            &remote_show_cmdlist);
14179   add_cmd ("memory-read-packet-size", no_class,
14180            show_memory_read_packet_size,
14181            _("Show the maximum number of bytes per memory-read packet."),
14182            &remote_show_cmdlist);
14183
14184   add_setshow_zinteger_cmd ("hardware-watchpoint-limit", no_class,
14185                             &remote_hw_watchpoint_limit, _("\
14186 Set the maximum number of target hardware watchpoints."), _("\
14187 Show the maximum number of target hardware watchpoints."), _("\
14188 Specify a negative limit for unlimited."),
14189                             NULL, NULL, /* FIXME: i18n: The maximum
14190                                            number of target hardware
14191                                            watchpoints is %s.  */
14192                             &remote_set_cmdlist, &remote_show_cmdlist);
14193   add_setshow_zinteger_cmd ("hardware-watchpoint-length-limit", no_class,
14194                             &remote_hw_watchpoint_length_limit, _("\
14195 Set the maximum length (in bytes) of a target hardware watchpoint."), _("\
14196 Show the maximum length (in bytes) of a target hardware watchpoint."), _("\
14197 Specify a negative limit for unlimited."),
14198                             NULL, NULL, /* FIXME: i18n: The maximum
14199                                            length (in bytes) of a target
14200                                            hardware watchpoint is %s.  */
14201                             &remote_set_cmdlist, &remote_show_cmdlist);
14202   add_setshow_zinteger_cmd ("hardware-breakpoint-limit", no_class,
14203                             &remote_hw_breakpoint_limit, _("\
14204 Set the maximum number of target hardware breakpoints."), _("\
14205 Show the maximum number of target hardware breakpoints."), _("\
14206 Specify a negative limit for unlimited."),
14207                             NULL, NULL, /* FIXME: i18n: The maximum
14208                                            number of target hardware
14209                                            breakpoints is %s.  */
14210                             &remote_set_cmdlist, &remote_show_cmdlist);
14211
14212   add_setshow_zuinteger_cmd ("remoteaddresssize", class_obscure,
14213                              &remote_address_size, _("\
14214 Set the maximum size of the address (in bits) in a memory packet."), _("\
14215 Show the maximum size of the address (in bits) in a memory packet."), NULL,
14216                              NULL,
14217                              NULL, /* FIXME: i18n: */
14218                              &setlist, &showlist);
14219
14220   init_all_packet_configs ();
14221
14222   add_packet_config_cmd (&remote_protocol_packets[PACKET_X],
14223                          "X", "binary-download", 1);
14224
14225   add_packet_config_cmd (&remote_protocol_packets[PACKET_vCont],
14226                          "vCont", "verbose-resume", 0);
14227
14228   add_packet_config_cmd (&remote_protocol_packets[PACKET_QPassSignals],
14229                          "QPassSignals", "pass-signals", 0);
14230
14231   add_packet_config_cmd (&remote_protocol_packets[PACKET_QCatchSyscalls],
14232                          "QCatchSyscalls", "catch-syscalls", 0);
14233
14234   add_packet_config_cmd (&remote_protocol_packets[PACKET_QProgramSignals],
14235                          "QProgramSignals", "program-signals", 0);
14236
14237   add_packet_config_cmd (&remote_protocol_packets[PACKET_QSetWorkingDir],
14238                          "QSetWorkingDir", "set-working-dir", 0);
14239
14240   add_packet_config_cmd (&remote_protocol_packets[PACKET_QStartupWithShell],
14241                          "QStartupWithShell", "startup-with-shell", 0);
14242
14243   add_packet_config_cmd (&remote_protocol_packets
14244                          [PACKET_QEnvironmentHexEncoded],
14245                          "QEnvironmentHexEncoded", "environment-hex-encoded",
14246                          0);
14247
14248   add_packet_config_cmd (&remote_protocol_packets[PACKET_QEnvironmentReset],
14249                          "QEnvironmentReset", "environment-reset",
14250                          0);
14251
14252   add_packet_config_cmd (&remote_protocol_packets[PACKET_QEnvironmentUnset],
14253                          "QEnvironmentUnset", "environment-unset",
14254                          0);
14255
14256   add_packet_config_cmd (&remote_protocol_packets[PACKET_qSymbol],
14257                          "qSymbol", "symbol-lookup", 0);
14258
14259   add_packet_config_cmd (&remote_protocol_packets[PACKET_P],
14260                          "P", "set-register", 1);
14261
14262   add_packet_config_cmd (&remote_protocol_packets[PACKET_p],
14263                          "p", "fetch-register", 1);
14264
14265   add_packet_config_cmd (&remote_protocol_packets[PACKET_Z0],
14266                          "Z0", "software-breakpoint", 0);
14267
14268   add_packet_config_cmd (&remote_protocol_packets[PACKET_Z1],
14269                          "Z1", "hardware-breakpoint", 0);
14270
14271   add_packet_config_cmd (&remote_protocol_packets[PACKET_Z2],
14272                          "Z2", "write-watchpoint", 0);
14273
14274   add_packet_config_cmd (&remote_protocol_packets[PACKET_Z3],
14275                          "Z3", "read-watchpoint", 0);
14276
14277   add_packet_config_cmd (&remote_protocol_packets[PACKET_Z4],
14278                          "Z4", "access-watchpoint", 0);
14279
14280   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_auxv],
14281                          "qXfer:auxv:read", "read-aux-vector", 0);
14282
14283   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_exec_file],
14284                          "qXfer:exec-file:read", "pid-to-exec-file", 0);
14285
14286   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_features],
14287                          "qXfer:features:read", "target-features", 0);
14288
14289   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_libraries],
14290                          "qXfer:libraries:read", "library-info", 0);
14291
14292   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_libraries_svr4],
14293                          "qXfer:libraries-svr4:read", "library-info-svr4", 0);
14294
14295   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_memory_map],
14296                          "qXfer:memory-map:read", "memory-map", 0);
14297
14298   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_spu_read],
14299                          "qXfer:spu:read", "read-spu-object", 0);
14300
14301   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_spu_write],
14302                          "qXfer:spu:write", "write-spu-object", 0);
14303
14304   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_osdata],
14305                         "qXfer:osdata:read", "osdata", 0);
14306
14307   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_threads],
14308                          "qXfer:threads:read", "threads", 0);
14309
14310   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_siginfo_read],
14311                          "qXfer:siginfo:read", "read-siginfo-object", 0);
14312
14313   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_siginfo_write],
14314                          "qXfer:siginfo:write", "write-siginfo-object", 0);
14315
14316   add_packet_config_cmd
14317     (&remote_protocol_packets[PACKET_qXfer_traceframe_info],
14318      "qXfer:traceframe-info:read", "traceframe-info", 0);
14319
14320   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_uib],
14321                          "qXfer:uib:read", "unwind-info-block", 0);
14322
14323   add_packet_config_cmd (&remote_protocol_packets[PACKET_qGetTLSAddr],
14324                          "qGetTLSAddr", "get-thread-local-storage-address",
14325                          0);
14326
14327   add_packet_config_cmd (&remote_protocol_packets[PACKET_qGetTIBAddr],
14328                          "qGetTIBAddr", "get-thread-information-block-address",
14329                          0);
14330
14331   add_packet_config_cmd (&remote_protocol_packets[PACKET_bc],
14332                          "bc", "reverse-continue", 0);
14333
14334   add_packet_config_cmd (&remote_protocol_packets[PACKET_bs],
14335                          "bs", "reverse-step", 0);
14336
14337   add_packet_config_cmd (&remote_protocol_packets[PACKET_qSupported],
14338                          "qSupported", "supported-packets", 0);
14339
14340   add_packet_config_cmd (&remote_protocol_packets[PACKET_qSearch_memory],
14341                          "qSearch:memory", "search-memory", 0);
14342
14343   add_packet_config_cmd (&remote_protocol_packets[PACKET_qTStatus],
14344                          "qTStatus", "trace-status", 0);
14345
14346   add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_setfs],
14347                          "vFile:setfs", "hostio-setfs", 0);
14348
14349   add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_open],
14350                          "vFile:open", "hostio-open", 0);
14351
14352   add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_pread],
14353                          "vFile:pread", "hostio-pread", 0);
14354
14355   add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_pwrite],
14356                          "vFile:pwrite", "hostio-pwrite", 0);
14357
14358   add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_close],
14359                          "vFile:close", "hostio-close", 0);
14360
14361   add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_unlink],
14362                          "vFile:unlink", "hostio-unlink", 0);
14363
14364   add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_readlink],
14365                          "vFile:readlink", "hostio-readlink", 0);
14366
14367   add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_fstat],
14368                          "vFile:fstat", "hostio-fstat", 0);
14369
14370   add_packet_config_cmd (&remote_protocol_packets[PACKET_vAttach],
14371                          "vAttach", "attach", 0);
14372
14373   add_packet_config_cmd (&remote_protocol_packets[PACKET_vRun],
14374                          "vRun", "run", 0);
14375
14376   add_packet_config_cmd (&remote_protocol_packets[PACKET_QStartNoAckMode],
14377                          "QStartNoAckMode", "noack", 0);
14378
14379   add_packet_config_cmd (&remote_protocol_packets[PACKET_vKill],
14380                          "vKill", "kill", 0);
14381
14382   add_packet_config_cmd (&remote_protocol_packets[PACKET_qAttached],
14383                          "qAttached", "query-attached", 0);
14384
14385   add_packet_config_cmd (&remote_protocol_packets[PACKET_ConditionalTracepoints],
14386                          "ConditionalTracepoints",
14387                          "conditional-tracepoints", 0);
14388
14389   add_packet_config_cmd (&remote_protocol_packets[PACKET_ConditionalBreakpoints],
14390                          "ConditionalBreakpoints",
14391                          "conditional-breakpoints", 0);
14392
14393   add_packet_config_cmd (&remote_protocol_packets[PACKET_BreakpointCommands],
14394                          "BreakpointCommands",
14395                          "breakpoint-commands", 0);
14396
14397   add_packet_config_cmd (&remote_protocol_packets[PACKET_FastTracepoints],
14398                          "FastTracepoints", "fast-tracepoints", 0);
14399
14400   add_packet_config_cmd (&remote_protocol_packets[PACKET_TracepointSource],
14401                          "TracepointSource", "TracepointSource", 0);
14402
14403   add_packet_config_cmd (&remote_protocol_packets[PACKET_QAllow],
14404                          "QAllow", "allow", 0);
14405
14406   add_packet_config_cmd (&remote_protocol_packets[PACKET_StaticTracepoints],
14407                          "StaticTracepoints", "static-tracepoints", 0);
14408
14409   add_packet_config_cmd (&remote_protocol_packets[PACKET_InstallInTrace],
14410                          "InstallInTrace", "install-in-trace", 0);
14411
14412   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_statictrace_read],
14413                          "qXfer:statictrace:read", "read-sdata-object", 0);
14414
14415   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_fdpic],
14416                          "qXfer:fdpic:read", "read-fdpic-loadmap", 0);
14417
14418   add_packet_config_cmd (&remote_protocol_packets[PACKET_QDisableRandomization],
14419                          "QDisableRandomization", "disable-randomization", 0);
14420
14421   add_packet_config_cmd (&remote_protocol_packets[PACKET_QAgent],
14422                          "QAgent", "agent", 0);
14423
14424   add_packet_config_cmd (&remote_protocol_packets[PACKET_QTBuffer_size],
14425                          "QTBuffer:size", "trace-buffer-size", 0);
14426
14427   add_packet_config_cmd (&remote_protocol_packets[PACKET_Qbtrace_off],
14428        "Qbtrace:off", "disable-btrace", 0);
14429
14430   add_packet_config_cmd (&remote_protocol_packets[PACKET_Qbtrace_bts],
14431        "Qbtrace:bts", "enable-btrace-bts", 0);
14432
14433   add_packet_config_cmd (&remote_protocol_packets[PACKET_Qbtrace_pt],
14434        "Qbtrace:pt", "enable-btrace-pt", 0);
14435
14436   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_btrace],
14437        "qXfer:btrace", "read-btrace", 0);
14438
14439   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_btrace_conf],
14440        "qXfer:btrace-conf", "read-btrace-conf", 0);
14441
14442   add_packet_config_cmd (&remote_protocol_packets[PACKET_Qbtrace_conf_bts_size],
14443        "Qbtrace-conf:bts:size", "btrace-conf-bts-size", 0);
14444
14445   add_packet_config_cmd (&remote_protocol_packets[PACKET_multiprocess_feature],
14446        "multiprocess-feature", "multiprocess-feature", 0);
14447
14448   add_packet_config_cmd (&remote_protocol_packets[PACKET_swbreak_feature],
14449                          "swbreak-feature", "swbreak-feature", 0);
14450
14451   add_packet_config_cmd (&remote_protocol_packets[PACKET_hwbreak_feature],
14452                          "hwbreak-feature", "hwbreak-feature", 0);
14453
14454   add_packet_config_cmd (&remote_protocol_packets[PACKET_fork_event_feature],
14455                          "fork-event-feature", "fork-event-feature", 0);
14456
14457   add_packet_config_cmd (&remote_protocol_packets[PACKET_vfork_event_feature],
14458                          "vfork-event-feature", "vfork-event-feature", 0);
14459
14460   add_packet_config_cmd (&remote_protocol_packets[PACKET_Qbtrace_conf_pt_size],
14461        "Qbtrace-conf:pt:size", "btrace-conf-pt-size", 0);
14462
14463   add_packet_config_cmd (&remote_protocol_packets[PACKET_vContSupported],
14464                          "vContSupported", "verbose-resume-supported", 0);
14465
14466   add_packet_config_cmd (&remote_protocol_packets[PACKET_exec_event_feature],
14467                          "exec-event-feature", "exec-event-feature", 0);
14468
14469   add_packet_config_cmd (&remote_protocol_packets[PACKET_vCtrlC],
14470                          "vCtrlC", "ctrl-c", 0);
14471
14472   add_packet_config_cmd (&remote_protocol_packets[PACKET_QThreadEvents],
14473                          "QThreadEvents", "thread-events", 0);
14474
14475   add_packet_config_cmd (&remote_protocol_packets[PACKET_no_resumed],
14476                          "N stop reply", "no-resumed-stop-reply", 0);
14477
14478   /* Assert that we've registered "set remote foo-packet" commands
14479      for all packet configs.  */
14480   {
14481     int i;
14482
14483     for (i = 0; i < PACKET_MAX; i++)
14484       {
14485         /* Ideally all configs would have a command associated.  Some
14486            still don't though.  */
14487         int excepted;
14488
14489         switch (i)
14490           {
14491           case PACKET_QNonStop:
14492           case PACKET_EnableDisableTracepoints_feature:
14493           case PACKET_tracenz_feature:
14494           case PACKET_DisconnectedTracing_feature:
14495           case PACKET_augmented_libraries_svr4_read_feature:
14496           case PACKET_qCRC:
14497             /* Additions to this list need to be well justified:
14498                pre-existing packets are OK; new packets are not.  */
14499             excepted = 1;
14500             break;
14501           default:
14502             excepted = 0;
14503             break;
14504           }
14505
14506         /* This catches both forgetting to add a config command, and
14507            forgetting to remove a packet from the exception list.  */
14508         gdb_assert (excepted == (remote_protocol_packets[i].name == NULL));
14509       }
14510   }
14511
14512   /* Keep the old ``set remote Z-packet ...'' working.  Each individual
14513      Z sub-packet has its own set and show commands, but users may
14514      have sets to this variable in their .gdbinit files (or in their
14515      documentation).  */
14516   add_setshow_auto_boolean_cmd ("Z-packet", class_obscure,
14517                                 &remote_Z_packet_detect, _("\
14518 Set use of remote protocol `Z' packets"), _("\
14519 Show use of remote protocol `Z' packets "), _("\
14520 When set, GDB will attempt to use the remote breakpoint and watchpoint\n\
14521 packets."),
14522                                 set_remote_protocol_Z_packet_cmd,
14523                                 show_remote_protocol_Z_packet_cmd,
14524                                 /* FIXME: i18n: Use of remote protocol
14525                                    `Z' packets is %s.  */
14526                                 &remote_set_cmdlist, &remote_show_cmdlist);
14527
14528   add_prefix_cmd ("remote", class_files, remote_command, _("\
14529 Manipulate files on the remote system\n\
14530 Transfer files to and from the remote target system."),
14531                   &remote_cmdlist, "remote ",
14532                   0 /* allow-unknown */, &cmdlist);
14533
14534   add_cmd ("put", class_files, remote_put_command,
14535            _("Copy a local file to the remote system."),
14536            &remote_cmdlist);
14537
14538   add_cmd ("get", class_files, remote_get_command,
14539            _("Copy a remote file to the local system."),
14540            &remote_cmdlist);
14541
14542   add_cmd ("delete", class_files, remote_delete_command,
14543            _("Delete a remote file."),
14544            &remote_cmdlist);
14545
14546   add_setshow_string_noescape_cmd ("exec-file", class_files,
14547                                    &remote_exec_file_var, _("\
14548 Set the remote pathname for \"run\""), _("\
14549 Show the remote pathname for \"run\""), NULL,
14550                                    set_remote_exec_file,
14551                                    show_remote_exec_file,
14552                                    &remote_set_cmdlist,
14553                                    &remote_show_cmdlist);
14554
14555   add_setshow_boolean_cmd ("range-stepping", class_run,
14556                            &use_range_stepping, _("\
14557 Enable or disable range stepping."), _("\
14558 Show whether target-assisted range stepping is enabled."), _("\
14559 If on, and the target supports it, when stepping a source line, GDB\n\
14560 tells the target to step the corresponding range of addresses itself instead\n\
14561 of issuing multiple single-steps.  This speeds up source level\n\
14562 stepping.  If off, GDB always issues single-steps, even if range\n\
14563 stepping is supported by the target.  The default is on."),
14564                            set_range_stepping,
14565                            show_range_stepping,
14566                            &setlist,
14567                            &showlist);
14568
14569   /* Eventually initialize fileio.  See fileio.c */
14570   initialize_remote_fileio (remote_set_cmdlist, remote_show_cmdlist);
14571
14572   /* Take advantage of the fact that the TID field is not used, to tag
14573      special ptids with it set to != 0.  */
14574   magic_null_ptid = ptid_build (42000, -1, 1);
14575   not_sent_ptid = ptid_build (42000, -2, 1);
14576   any_thread_ptid = ptid_build (42000, 0, 1);
14577 }