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