Use register_size () instead of MAX_REGISTER_SIZE
[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
76 /* Temp hacks for tracepoint encoding migration.  */
77 static char *target_buf;
78 static long target_buf_size;
79
80 /* Per-program-space data key.  */
81 static const struct program_space_data *remote_pspace_data;
82
83 /* The variable registered as the control variable used by the
84    remote exec-file commands.  While the remote exec-file setting is
85    per-program-space, the set/show machinery uses this as the 
86    location of the remote exec-file value.  */
87 static char *remote_exec_file_var;
88
89 /* The size to align memory write packets, when practical.  The protocol
90    does not guarantee any alignment, and gdb will generate short
91    writes and unaligned writes, but even as a best-effort attempt this
92    can improve bulk transfers.  For instance, if a write is misaligned
93    relative to the target's data bus, the stub may need to make an extra
94    round trip fetching data from the target.  This doesn't make a
95    huge difference, but it's easy to do, so we try to be helpful.
96
97    The alignment chosen is arbitrary; usually data bus width is
98    important here, not the possibly larger cache line size.  */
99 enum { REMOTE_ALIGN_WRITES = 16 };
100
101 /* Prototypes for local functions.  */
102 static int getpkt_sane (char **buf, long *sizeof_buf, int forever);
103 static int getpkt_or_notif_sane (char **buf, long *sizeof_buf,
104                                  int forever, int *is_notif);
105
106 static void remote_files_info (struct target_ops *ignore);
107
108 static void remote_prepare_to_store (struct target_ops *self,
109                                      struct regcache *regcache);
110
111 static void remote_open_1 (const char *, int, struct target_ops *,
112                            int extended_p);
113
114 static void remote_close (struct target_ops *self);
115
116 struct remote_state;
117
118 static int remote_vkill (int pid, struct remote_state *rs);
119
120 static void remote_kill_k (void);
121
122 static void remote_mourn (struct target_ops *ops);
123
124 static void extended_remote_restart (void);
125
126 static void remote_send (char **buf, long *sizeof_buf_p);
127
128 static int readchar (int timeout);
129
130 static void remote_serial_write (const char *str, int len);
131
132 static void remote_kill (struct target_ops *ops);
133
134 static int remote_can_async_p (struct target_ops *);
135
136 static int remote_is_async_p (struct target_ops *);
137
138 static void remote_async (struct target_ops *ops, int enable);
139
140 static void remote_thread_events (struct target_ops *ops, int enable);
141
142 static void interrupt_query (void);
143
144 static void set_general_thread (struct ptid ptid);
145 static void set_continue_thread (struct ptid ptid);
146
147 static void get_offsets (void);
148
149 static void skip_frame (void);
150
151 static long read_frame (char **buf_p, long *sizeof_buf);
152
153 static int hexnumlen (ULONGEST num);
154
155 static void init_remote_ops (void);
156
157 static void init_extended_remote_ops (void);
158
159 static void remote_stop (struct target_ops *self, ptid_t);
160
161 static int stubhex (int ch);
162
163 static int hexnumstr (char *, ULONGEST);
164
165 static int hexnumnstr (char *, ULONGEST, int);
166
167 static CORE_ADDR remote_address_masked (CORE_ADDR);
168
169 static void print_packet (const char *);
170
171 static void compare_sections_command (char *, int);
172
173 static void packet_command (char *, int);
174
175 static int stub_unpack_int (char *buff, int fieldlength);
176
177 static ptid_t remote_current_thread (ptid_t oldptid);
178
179 static int putpkt_binary (const char *buf, int cnt);
180
181 static void check_binary_download (CORE_ADDR addr);
182
183 struct packet_config;
184
185 static void show_packet_config_cmd (struct packet_config *config);
186
187 static void show_remote_protocol_packet_cmd (struct ui_file *file,
188                                              int from_tty,
189                                              struct cmd_list_element *c,
190                                              const char *value);
191
192 static char *write_ptid (char *buf, const char *endbuf, ptid_t ptid);
193 static ptid_t read_ptid (char *buf, char **obuf);
194
195 static void remote_set_permissions (struct target_ops *self);
196
197 static int remote_get_trace_status (struct target_ops *self,
198                                     struct trace_status *ts);
199
200 static int remote_upload_tracepoints (struct target_ops *self,
201                                       struct uploaded_tp **utpp);
202
203 static int remote_upload_trace_state_variables (struct target_ops *self,
204                                                 struct uploaded_tsv **utsvp);
205   
206 static void remote_query_supported (void);
207
208 static void remote_check_symbols (void);
209
210 void _initialize_remote (void);
211
212 struct stop_reply;
213 static void stop_reply_xfree (struct stop_reply *);
214 static void remote_parse_stop_reply (char *, struct stop_reply *);
215 static void push_stop_reply (struct stop_reply *);
216 static void discard_pending_stop_replies_in_queue (struct remote_state *);
217 static int peek_stop_reply (ptid_t ptid);
218
219 struct threads_listing_context;
220 static void remove_new_fork_children (struct threads_listing_context *);
221
222 static void remote_async_inferior_event_handler (gdb_client_data);
223
224 static void remote_terminal_ours (struct target_ops *self);
225
226 static int remote_read_description_p (struct target_ops *target);
227
228 static void remote_console_output (char *msg);
229
230 static int remote_supports_cond_breakpoints (struct target_ops *self);
231
232 static int remote_can_run_breakpoint_commands (struct target_ops *self);
233
234 static void remote_btrace_reset (void);
235
236 static void remote_btrace_maybe_reopen (void);
237
238 static int stop_reply_queue_length (void);
239
240 static void readahead_cache_invalidate (void);
241
242 static void remote_unpush_and_throw (void);
243
244 /* For "remote".  */
245
246 static struct cmd_list_element *remote_cmdlist;
247
248 /* For "set remote" and "show remote".  */
249
250 static struct cmd_list_element *remote_set_cmdlist;
251 static struct cmd_list_element *remote_show_cmdlist;
252
253 /* Stub vCont actions support.
254
255    Each field is a boolean flag indicating whether the stub reports
256    support for the corresponding action.  */
257
258 struct vCont_action_support
259 {
260   /* vCont;t */
261   int t;
262
263   /* vCont;r */
264   int r;
265
266   /* vCont;s */
267   int s;
268
269   /* vCont;S */
270   int S;
271 };
272
273 /* Controls whether GDB is willing to use range stepping.  */
274
275 static int use_range_stepping = 1;
276
277 #define OPAQUETHREADBYTES 8
278
279 /* a 64 bit opaque identifier */
280 typedef unsigned char threadref[OPAQUETHREADBYTES];
281
282 /* About this many threadisds fit in a packet.  */
283
284 #define MAXTHREADLISTRESULTS 32
285
286 /* The max number of chars in debug output.  The rest of chars are
287    omitted.  */
288
289 #define REMOTE_DEBUG_MAX_CHAR 512
290
291 /* Data for the vFile:pread readahead cache.  */
292
293 struct readahead_cache
294 {
295   /* The file descriptor for the file that is being cached.  -1 if the
296      cache is invalid.  */
297   int fd;
298
299   /* The offset into the file that the cache buffer corresponds
300      to.  */
301   ULONGEST offset;
302
303   /* The buffer holding the cache contents.  */
304   gdb_byte *buf;
305   /* The buffer's size.  We try to read as much as fits into a packet
306      at a time.  */
307   size_t bufsize;
308
309   /* Cache hit and miss counters.  */
310   ULONGEST hit_count;
311   ULONGEST miss_count;
312 };
313
314 /* Description of the remote protocol state for the currently
315    connected target.  This is per-target state, and independent of the
316    selected architecture.  */
317
318 struct remote_state
319 {
320   /* A buffer to use for incoming packets, and its current size.  The
321      buffer is grown dynamically for larger incoming packets.
322      Outgoing packets may also be constructed in this buffer.
323      BUF_SIZE is always at least REMOTE_PACKET_SIZE;
324      REMOTE_PACKET_SIZE should be used to limit the length of outgoing
325      packets.  */
326   char *buf;
327   long buf_size;
328
329   /* True if we're going through initial connection setup (finding out
330      about the remote side's threads, relocating symbols, etc.).  */
331   int starting_up;
332
333   /* If we negotiated packet size explicitly (and thus can bypass
334      heuristics for the largest packet size that will not overflow
335      a buffer in the stub), this will be set to that packet size.
336      Otherwise zero, meaning to use the guessed size.  */
337   long explicit_packet_size;
338
339   /* remote_wait is normally called when the target is running and
340      waits for a stop reply packet.  But sometimes we need to call it
341      when the target is already stopped.  We can send a "?" packet
342      and have remote_wait read the response.  Or, if we already have
343      the response, we can stash it in BUF and tell remote_wait to
344      skip calling getpkt.  This flag is set when BUF contains a
345      stop reply packet and the target is not waiting.  */
346   int cached_wait_status;
347
348   /* True, if in no ack mode.  That is, neither GDB nor the stub will
349      expect acks from each other.  The connection is assumed to be
350      reliable.  */
351   int noack_mode;
352
353   /* True if we're connected in extended remote mode.  */
354   int extended;
355
356   /* True if we resumed the target and we're waiting for the target to
357      stop.  In the mean time, we can't start another command/query.
358      The remote server wouldn't be ready to process it, so we'd
359      timeout waiting for a reply that would never come and eventually
360      we'd close the connection.  This can happen in asynchronous mode
361      because we allow GDB commands while the target is running.  */
362   int waiting_for_stop_reply;
363
364   /* The status of the stub support for the various vCont actions.  */
365   struct vCont_action_support supports_vCont;
366
367   /* Nonzero if the user has pressed Ctrl-C, but the target hasn't
368      responded to that.  */
369   int ctrlc_pending_p;
370
371   /* True if we saw a Ctrl-C while reading or writing from/to the
372      remote descriptor.  At that point it is not safe to send a remote
373      interrupt packet, so we instead remember we saw the Ctrl-C and
374      process it once we're done with sending/receiving the current
375      packet, which should be shortly.  If however that takes too long,
376      and the user presses Ctrl-C again, we offer to disconnect.  */
377   int got_ctrlc_during_io;
378
379   /* Descriptor for I/O to remote machine.  Initialize it to NULL so that
380      remote_open knows that we don't have a file open when the program
381      starts.  */
382   struct serial *remote_desc;
383
384   /* These are the threads which we last sent to the remote system.  The
385      TID member will be -1 for all or -2 for not sent yet.  */
386   ptid_t general_thread;
387   ptid_t continue_thread;
388
389   /* This is the traceframe which we last selected on the remote system.
390      It will be -1 if no traceframe is selected.  */
391   int remote_traceframe_number;
392
393   char *last_pass_packet;
394
395   /* The last QProgramSignals packet sent to the target.  We bypass
396      sending a new program signals list down to the target if the new
397      packet is exactly the same as the last we sent.  IOW, we only let
398      the target know about program signals list changes.  */
399   char *last_program_signals_packet;
400
401   enum gdb_signal last_sent_signal;
402
403   int last_sent_step;
404
405   /* The execution direction of the last resume we got.  */
406   enum exec_direction_kind last_resume_exec_dir;
407
408   char *finished_object;
409   char *finished_annex;
410   ULONGEST finished_offset;
411
412   /* Should we try the 'ThreadInfo' query packet?
413
414      This variable (NOT available to the user: auto-detect only!)
415      determines whether GDB will use the new, simpler "ThreadInfo"
416      query or the older, more complex syntax for thread queries.
417      This is an auto-detect variable (set to true at each connect,
418      and set to false when the target fails to recognize it).  */
419   int use_threadinfo_query;
420   int use_threadextra_query;
421
422   threadref echo_nextthread;
423   threadref nextthread;
424   threadref resultthreadlist[MAXTHREADLISTRESULTS];
425
426   /* The state of remote notification.  */
427   struct remote_notif_state *notif_state;
428
429   /* The branch trace configuration.  */
430   struct btrace_config btrace_config;
431
432   /* The argument to the last "vFile:setfs:" packet we sent, used
433      to avoid sending repeated unnecessary "vFile:setfs:" packets.
434      Initialized to -1 to indicate that no "vFile:setfs:" packet
435      has yet been sent.  */
436   int fs_pid;
437
438   /* A readahead cache for vFile:pread.  Often, reading a binary
439      involves a sequence of small reads.  E.g., when parsing an ELF
440      file.  A readahead cache helps mostly the case of remote
441      debugging on a connection with higher latency, due to the
442      request/reply nature of the RSP.  We only cache data for a single
443      file descriptor at a time.  */
444   struct readahead_cache readahead_cache;
445 };
446
447 /* Private data that we'll store in (struct thread_info)->private.  */
448 struct private_thread_info
449 {
450   char *extra;
451   char *name;
452   int core;
453
454   /* Whether the target stopped for a breakpoint/watchpoint.  */
455   enum target_stop_reason stop_reason;
456
457   /* This is set to the data address of the access causing the target
458      to stop for a watchpoint.  */
459   CORE_ADDR watch_data_address;
460
461   /* Fields used by the vCont action coalescing implemented in
462      remote_resume / remote_commit_resume.  remote_resume stores each
463      thread's last resume request in these fields, so that a later
464      remote_commit_resume knows which is the proper action for this
465      thread to include in the vCont packet.  */
466
467   /* True if the last target_resume call for this thread was a step
468      request, false if a continue request.  */
469   int last_resume_step;
470
471   /* The signal specified in the last target_resume call for this
472      thread.  */
473   enum gdb_signal last_resume_sig;
474
475   /* Whether this thread was already vCont-resumed on the remote
476      side.  */
477   int vcont_resumed;
478 };
479
480 static void
481 free_private_thread_info (struct private_thread_info *info)
482 {
483   xfree (info->extra);
484   xfree (info->name);
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 static char *
577 remote_get_noisy_reply (char **buf_p,
578                         long *sizeof_buf)
579 {
580   do                            /* Loop on reply from remote stub.  */
581     {
582       char *buf;
583
584       QUIT;                     /* Allow user to bail out with ^C.  */
585       getpkt (buf_p, sizeof_buf, 0);
586       buf = *buf_p;
587       if (buf[0] == 'E')
588         trace_error (buf);
589       else if (startswith (buf, "qRelocInsn:"))
590         {
591           ULONGEST ul;
592           CORE_ADDR from, to, org_to;
593           char *p, *pp;
594           int adjusted_size = 0;
595           int relocated = 0;
596
597           p = buf + strlen ("qRelocInsn:");
598           pp = unpack_varlen_hex (p, &ul);
599           if (*pp != ';')
600             error (_("invalid qRelocInsn packet: %s"), buf);
601           from = ul;
602
603           p = pp + 1;
604           unpack_varlen_hex (p, &ul);
605           to = ul;
606
607           org_to = to;
608
609           TRY
610             {
611               gdbarch_relocate_instruction (target_gdbarch (), &to, from);
612               relocated = 1;
613             }
614           CATCH (ex, RETURN_MASK_ALL)
615             {
616               if (ex.error == MEMORY_ERROR)
617                 {
618                   /* Propagate memory errors silently back to the
619                      target.  The stub may have limited the range of
620                      addresses we can write to, for example.  */
621                 }
622               else
623                 {
624                   /* Something unexpectedly bad happened.  Be verbose
625                      so we can tell what, and propagate the error back
626                      to the stub, so it doesn't get stuck waiting for
627                      a response.  */
628                   exception_fprintf (gdb_stderr, ex,
629                                      _("warning: relocating instruction: "));
630                 }
631               putpkt ("E01");
632             }
633           END_CATCH
634
635           if (relocated)
636             {
637               adjusted_size = to - org_to;
638
639               xsnprintf (buf, *sizeof_buf, "qRelocInsn:%x", adjusted_size);
640               putpkt (buf);
641             }
642         }
643       else if (buf[0] == 'O' && buf[1] != 'K')
644         remote_console_output (buf + 1);        /* 'O' message from stub */
645       else
646         return buf;             /* Here's the actual reply.  */
647     }
648   while (1);
649 }
650
651 /* Handle for retreving the remote protocol data from gdbarch.  */
652 static struct gdbarch_data *remote_gdbarch_data_handle;
653
654 static struct remote_arch_state *
655 get_remote_arch_state (void)
656 {
657   gdb_assert (target_gdbarch () != NULL);
658   return ((struct remote_arch_state *)
659           gdbarch_data (target_gdbarch (), remote_gdbarch_data_handle));
660 }
661
662 /* Fetch the global remote target state.  */
663
664 static struct remote_state *
665 get_remote_state (void)
666 {
667   /* Make sure that the remote architecture state has been
668      initialized, because doing so might reallocate rs->buf.  Any
669      function which calls getpkt also needs to be mindful of changes
670      to rs->buf, but this call limits the number of places which run
671      into trouble.  */
672   get_remote_arch_state ();
673
674   return get_remote_state_raw ();
675 }
676
677 /* Cleanup routine for the remote module's pspace data.  */
678
679 static void
680 remote_pspace_data_cleanup (struct program_space *pspace, void *arg)
681 {
682   char *remote_exec_file = (char *) arg;
683
684   xfree (remote_exec_file);
685 }
686
687 /* Fetch the remote exec-file from the current program space.  */
688
689 static const char *
690 get_remote_exec_file (void)
691 {
692   char *remote_exec_file;
693
694   remote_exec_file
695     = (char *) program_space_data (current_program_space,
696                                    remote_pspace_data);
697   if (remote_exec_file == NULL)
698     return "";
699
700   return remote_exec_file;
701 }
702
703 /* Set the remote exec file for PSPACE.  */
704
705 static void
706 set_pspace_remote_exec_file (struct program_space *pspace,
707                         char *remote_exec_file)
708 {
709   char *old_file = (char *) program_space_data (pspace, remote_pspace_data);
710
711   xfree (old_file);
712   set_program_space_data (pspace, remote_pspace_data,
713                           xstrdup (remote_exec_file));
714 }
715
716 /* The "set/show remote exec-file" set command hook.  */
717
718 static void
719 set_remote_exec_file (char *ignored, int from_tty,
720                       struct cmd_list_element *c)
721 {
722   gdb_assert (remote_exec_file_var != NULL);
723   set_pspace_remote_exec_file (current_program_space, remote_exec_file_var);
724 }
725
726 /* The "set/show remote exec-file" show command hook.  */
727
728 static void
729 show_remote_exec_file (struct ui_file *file, int from_tty,
730                        struct cmd_list_element *cmd, const char *value)
731 {
732   fprintf_filtered (file, "%s\n", remote_exec_file_var);
733 }
734
735 static int
736 compare_pnums (const void *lhs_, const void *rhs_)
737 {
738   const struct packet_reg * const *lhs
739     = (const struct packet_reg * const *) lhs_;
740   const struct packet_reg * const *rhs
741     = (const struct packet_reg * const *) rhs_;
742
743   if ((*lhs)->pnum < (*rhs)->pnum)
744     return -1;
745   else if ((*lhs)->pnum == (*rhs)->pnum)
746     return 0;
747   else
748     return 1;
749 }
750
751 static int
752 map_regcache_remote_table (struct gdbarch *gdbarch, struct packet_reg *regs)
753 {
754   int regnum, num_remote_regs, offset;
755   struct packet_reg **remote_regs;
756
757   for (regnum = 0; regnum < gdbarch_num_regs (gdbarch); regnum++)
758     {
759       struct packet_reg *r = &regs[regnum];
760
761       if (register_size (gdbarch, regnum) == 0)
762         /* Do not try to fetch zero-sized (placeholder) registers.  */
763         r->pnum = -1;
764       else
765         r->pnum = gdbarch_remote_register_number (gdbarch, regnum);
766
767       r->regnum = regnum;
768     }
769
770   /* Define the g/G packet format as the contents of each register
771      with a remote protocol number, in order of ascending protocol
772      number.  */
773
774   remote_regs = XALLOCAVEC (struct packet_reg *, gdbarch_num_regs (gdbarch));
775   for (num_remote_regs = 0, regnum = 0;
776        regnum < gdbarch_num_regs (gdbarch);
777        regnum++)
778     if (regs[regnum].pnum != -1)
779       remote_regs[num_remote_regs++] = &regs[regnum];
780
781   qsort (remote_regs, num_remote_regs, sizeof (struct packet_reg *),
782          compare_pnums);
783
784   for (regnum = 0, offset = 0; regnum < num_remote_regs; regnum++)
785     {
786       remote_regs[regnum]->in_g_packet = 1;
787       remote_regs[regnum]->offset = offset;
788       offset += register_size (gdbarch, remote_regs[regnum]->regnum);
789     }
790
791   return offset;
792 }
793
794 /* Given the architecture described by GDBARCH, return the remote
795    protocol register's number and the register's offset in the g/G
796    packets of GDB register REGNUM, in PNUM and POFFSET respectively.
797    If the target does not have a mapping for REGNUM, return false,
798    otherwise, return true.  */
799
800 int
801 remote_register_number_and_offset (struct gdbarch *gdbarch, int regnum,
802                                    int *pnum, int *poffset)
803 {
804   struct packet_reg *regs;
805   struct cleanup *old_chain;
806
807   gdb_assert (regnum < gdbarch_num_regs (gdbarch));
808
809   regs = XCNEWVEC (struct packet_reg, gdbarch_num_regs (gdbarch));
810   old_chain = make_cleanup (xfree, regs);
811
812   map_regcache_remote_table (gdbarch, regs);
813
814   *pnum = regs[regnum].pnum;
815   *poffset = regs[regnum].offset;
816
817   do_cleanups (old_chain);
818
819   return *pnum != -1;
820 }
821
822 static void *
823 init_remote_state (struct gdbarch *gdbarch)
824 {
825   struct remote_state *rs = get_remote_state_raw ();
826   struct remote_arch_state *rsa;
827
828   rsa = GDBARCH_OBSTACK_ZALLOC (gdbarch, struct remote_arch_state);
829
830   /* Use the architecture to build a regnum<->pnum table, which will be
831      1:1 unless a feature set specifies otherwise.  */
832   rsa->regs = GDBARCH_OBSTACK_CALLOC (gdbarch,
833                                       gdbarch_num_regs (gdbarch),
834                                       struct packet_reg);
835
836   /* Record the maximum possible size of the g packet - it may turn out
837      to be smaller.  */
838   rsa->sizeof_g_packet = map_regcache_remote_table (gdbarch, rsa->regs);
839
840   /* Default maximum number of characters in a packet body.  Many
841      remote stubs have a hardwired buffer size of 400 bytes
842      (c.f. BUFMAX in m68k-stub.c and i386-stub.c).  BUFMAX-1 is used
843      as the maximum packet-size to ensure that the packet and an extra
844      NUL character can always fit in the buffer.  This stops GDB
845      trashing stubs that try to squeeze an extra NUL into what is
846      already a full buffer (As of 1999-12-04 that was most stubs).  */
847   rsa->remote_packet_size = 400 - 1;
848
849   /* This one is filled in when a ``g'' packet is received.  */
850   rsa->actual_register_packet_size = 0;
851
852   /* Should rsa->sizeof_g_packet needs more space than the
853      default, adjust the size accordingly.  Remember that each byte is
854      encoded as two characters.  32 is the overhead for the packet
855      header / footer.  NOTE: cagney/1999-10-26: I suspect that 8
856      (``$NN:G...#NN'') is a better guess, the below has been padded a
857      little.  */
858   if (rsa->sizeof_g_packet > ((rsa->remote_packet_size - 32) / 2))
859     rsa->remote_packet_size = (rsa->sizeof_g_packet * 2 + 32);
860
861   /* Make sure that the packet buffer is plenty big enough for
862      this architecture.  */
863   if (rs->buf_size < rsa->remote_packet_size)
864     {
865       rs->buf_size = 2 * rsa->remote_packet_size;
866       rs->buf = (char *) xrealloc (rs->buf, rs->buf_size);
867     }
868
869   return rsa;
870 }
871
872 /* Return the current allowed size of a remote packet.  This is
873    inferred from the current architecture, and should be used to
874    limit the length of outgoing packets.  */
875 static long
876 get_remote_packet_size (void)
877 {
878   struct remote_state *rs = get_remote_state ();
879   struct remote_arch_state *rsa = get_remote_arch_state ();
880
881   if (rs->explicit_packet_size)
882     return rs->explicit_packet_size;
883
884   return rsa->remote_packet_size;
885 }
886
887 static struct packet_reg *
888 packet_reg_from_regnum (struct remote_arch_state *rsa, long regnum)
889 {
890   if (regnum < 0 && regnum >= gdbarch_num_regs (target_gdbarch ()))
891     return NULL;
892   else
893     {
894       struct packet_reg *r = &rsa->regs[regnum];
895
896       gdb_assert (r->regnum == regnum);
897       return r;
898     }
899 }
900
901 static struct packet_reg *
902 packet_reg_from_pnum (struct remote_arch_state *rsa, LONGEST pnum)
903 {
904   int i;
905
906   for (i = 0; i < gdbarch_num_regs (target_gdbarch ()); i++)
907     {
908       struct packet_reg *r = &rsa->regs[i];
909
910       if (r->pnum == pnum)
911         return r;
912     }
913   return NULL;
914 }
915
916 static struct target_ops remote_ops;
917
918 static struct target_ops extended_remote_ops;
919
920 /* FIXME: cagney/1999-09-23: Even though getpkt was called with
921    ``forever'' still use the normal timeout mechanism.  This is
922    currently used by the ASYNC code to guarentee that target reads
923    during the initial connect always time-out.  Once getpkt has been
924    modified to return a timeout indication and, in turn
925    remote_wait()/wait_for_inferior() have gained a timeout parameter
926    this can go away.  */
927 static int wait_forever_enabled_p = 1;
928
929 /* Allow the user to specify what sequence to send to the remote
930    when he requests a program interruption: Although ^C is usually
931    what remote systems expect (this is the default, here), it is
932    sometimes preferable to send a break.  On other systems such
933    as the Linux kernel, a break followed by g, which is Magic SysRq g
934    is required in order to interrupt the execution.  */
935 const char interrupt_sequence_control_c[] = "Ctrl-C";
936 const char interrupt_sequence_break[] = "BREAK";
937 const char interrupt_sequence_break_g[] = "BREAK-g";
938 static const char *const interrupt_sequence_modes[] =
939   {
940     interrupt_sequence_control_c,
941     interrupt_sequence_break,
942     interrupt_sequence_break_g,
943     NULL
944   };
945 static const char *interrupt_sequence_mode = interrupt_sequence_control_c;
946
947 static void
948 show_interrupt_sequence (struct ui_file *file, int from_tty,
949                          struct cmd_list_element *c,
950                          const char *value)
951 {
952   if (interrupt_sequence_mode == interrupt_sequence_control_c)
953     fprintf_filtered (file,
954                       _("Send the ASCII ETX character (Ctrl-c) "
955                         "to the remote target to interrupt the "
956                         "execution of the program.\n"));
957   else if (interrupt_sequence_mode == interrupt_sequence_break)
958     fprintf_filtered (file,
959                       _("send a break signal to the remote target "
960                         "to interrupt the execution of the program.\n"));
961   else if (interrupt_sequence_mode == interrupt_sequence_break_g)
962     fprintf_filtered (file,
963                       _("Send a break signal and 'g' a.k.a. Magic SysRq g to "
964                         "the remote target to interrupt the execution "
965                         "of Linux kernel.\n"));
966   else
967     internal_error (__FILE__, __LINE__,
968                     _("Invalid value for interrupt_sequence_mode: %s."),
969                     interrupt_sequence_mode);
970 }
971
972 /* This boolean variable specifies whether interrupt_sequence is sent
973    to the remote target when gdb connects to it.
974    This is mostly needed when you debug the Linux kernel: The Linux kernel
975    expects BREAK g which is Magic SysRq g for connecting gdb.  */
976 static int interrupt_on_connect = 0;
977
978 /* This variable is used to implement the "set/show remotebreak" commands.
979    Since these commands are now deprecated in favor of "set/show remote
980    interrupt-sequence", it no longer has any effect on the code.  */
981 static int remote_break;
982
983 static void
984 set_remotebreak (char *args, int from_tty, struct cmd_list_element *c)
985 {
986   if (remote_break)
987     interrupt_sequence_mode = interrupt_sequence_break;
988   else
989     interrupt_sequence_mode = interrupt_sequence_control_c;
990 }
991
992 static void
993 show_remotebreak (struct ui_file *file, int from_tty,
994                   struct cmd_list_element *c,
995                   const char *value)
996 {
997 }
998
999 /* This variable sets the number of bits in an address that are to be
1000    sent in a memory ("M" or "m") packet.  Normally, after stripping
1001    leading zeros, the entire address would be sent.  This variable
1002    restricts the address to REMOTE_ADDRESS_SIZE bits.  HISTORY: The
1003    initial implementation of remote.c restricted the address sent in
1004    memory packets to ``host::sizeof long'' bytes - (typically 32
1005    bits).  Consequently, for 64 bit targets, the upper 32 bits of an
1006    address was never sent.  Since fixing this bug may cause a break in
1007    some remote targets this variable is principly provided to
1008    facilitate backward compatibility.  */
1009
1010 static unsigned int remote_address_size;
1011
1012 /* Temporary to track who currently owns the terminal.  See
1013    remote_terminal_* for more details.  */
1014
1015 static int remote_async_terminal_ours_p;
1016
1017 \f
1018 /* User configurable variables for the number of characters in a
1019    memory read/write packet.  MIN (rsa->remote_packet_size,
1020    rsa->sizeof_g_packet) is the default.  Some targets need smaller
1021    values (fifo overruns, et.al.) and some users need larger values
1022    (speed up transfers).  The variables ``preferred_*'' (the user
1023    request), ``current_*'' (what was actually set) and ``forced_*''
1024    (Positive - a soft limit, negative - a hard limit).  */
1025
1026 struct memory_packet_config
1027 {
1028   char *name;
1029   long size;
1030   int fixed_p;
1031 };
1032
1033 /* The default max memory-write-packet-size.  The 16k is historical.
1034    (It came from older GDB's using alloca for buffers and the
1035    knowledge (folklore?) that some hosts don't cope very well with
1036    large alloca calls.)  */
1037 #define DEFAULT_MAX_MEMORY_PACKET_SIZE 16384
1038
1039 /* The minimum remote packet size for memory transfers.  Ensures we
1040    can write at least one byte.  */
1041 #define MIN_MEMORY_PACKET_SIZE 20
1042
1043 /* Compute the current size of a read/write packet.  Since this makes
1044    use of ``actual_register_packet_size'' the computation is dynamic.  */
1045
1046 static long
1047 get_memory_packet_size (struct memory_packet_config *config)
1048 {
1049   struct remote_state *rs = get_remote_state ();
1050   struct remote_arch_state *rsa = get_remote_arch_state ();
1051
1052   long what_they_get;
1053   if (config->fixed_p)
1054     {
1055       if (config->size <= 0)
1056         what_they_get = DEFAULT_MAX_MEMORY_PACKET_SIZE;
1057       else
1058         what_they_get = config->size;
1059     }
1060   else
1061     {
1062       what_they_get = get_remote_packet_size ();
1063       /* Limit the packet to the size specified by the user.  */
1064       if (config->size > 0
1065           && what_they_get > config->size)
1066         what_they_get = config->size;
1067
1068       /* Limit it to the size of the targets ``g'' response unless we have
1069          permission from the stub to use a larger packet size.  */
1070       if (rs->explicit_packet_size == 0
1071           && rsa->actual_register_packet_size > 0
1072           && what_they_get > rsa->actual_register_packet_size)
1073         what_they_get = rsa->actual_register_packet_size;
1074     }
1075   if (what_they_get < MIN_MEMORY_PACKET_SIZE)
1076     what_they_get = MIN_MEMORY_PACKET_SIZE;
1077
1078   /* Make sure there is room in the global buffer for this packet
1079      (including its trailing NUL byte).  */
1080   if (rs->buf_size < what_they_get + 1)
1081     {
1082       rs->buf_size = 2 * what_they_get;
1083       rs->buf = (char *) xrealloc (rs->buf, 2 * what_they_get);
1084     }
1085
1086   return what_they_get;
1087 }
1088
1089 /* Update the size of a read/write packet.  If they user wants
1090    something really big then do a sanity check.  */
1091
1092 static void
1093 set_memory_packet_size (char *args, struct memory_packet_config *config)
1094 {
1095   int fixed_p = config->fixed_p;
1096   long size = config->size;
1097
1098   if (args == NULL)
1099     error (_("Argument required (integer, `fixed' or `limited')."));
1100   else if (strcmp (args, "hard") == 0
1101       || strcmp (args, "fixed") == 0)
1102     fixed_p = 1;
1103   else if (strcmp (args, "soft") == 0
1104            || strcmp (args, "limit") == 0)
1105     fixed_p = 0;
1106   else
1107     {
1108       char *end;
1109
1110       size = strtoul (args, &end, 0);
1111       if (args == end)
1112         error (_("Invalid %s (bad syntax)."), config->name);
1113
1114       /* Instead of explicitly capping the size of a packet to or
1115          disallowing it, the user is allowed to set the size to
1116          something arbitrarily large.  */
1117     }
1118
1119   /* So that the query shows the correct value.  */
1120   if (size <= 0)
1121     size = DEFAULT_MAX_MEMORY_PACKET_SIZE;
1122
1123   /* Extra checks?  */
1124   if (fixed_p && !config->fixed_p)
1125     {
1126       if (! query (_("The target may not be able to correctly handle a %s\n"
1127                    "of %ld bytes. Change the packet size? "),
1128                    config->name, size))
1129         error (_("Packet size not changed."));
1130     }
1131   /* Update the config.  */
1132   config->fixed_p = fixed_p;
1133   config->size = size;
1134 }
1135
1136 static void
1137 show_memory_packet_size (struct memory_packet_config *config)
1138 {
1139   printf_filtered (_("The %s is %ld. "), config->name, config->size);
1140   if (config->fixed_p)
1141     printf_filtered (_("Packets are fixed at %ld bytes.\n"),
1142                      get_memory_packet_size (config));
1143   else
1144     printf_filtered (_("Packets are limited to %ld bytes.\n"),
1145                      get_memory_packet_size (config));
1146 }
1147
1148 static struct memory_packet_config memory_write_packet_config =
1149 {
1150   "memory-write-packet-size",
1151 };
1152
1153 static void
1154 set_memory_write_packet_size (char *args, int from_tty)
1155 {
1156   set_memory_packet_size (args, &memory_write_packet_config);
1157 }
1158
1159 static void
1160 show_memory_write_packet_size (char *args, int from_tty)
1161 {
1162   show_memory_packet_size (&memory_write_packet_config);
1163 }
1164
1165 static long
1166 get_memory_write_packet_size (void)
1167 {
1168   return get_memory_packet_size (&memory_write_packet_config);
1169 }
1170
1171 static struct memory_packet_config memory_read_packet_config =
1172 {
1173   "memory-read-packet-size",
1174 };
1175
1176 static void
1177 set_memory_read_packet_size (char *args, int from_tty)
1178 {
1179   set_memory_packet_size (args, &memory_read_packet_config);
1180 }
1181
1182 static void
1183 show_memory_read_packet_size (char *args, int from_tty)
1184 {
1185   show_memory_packet_size (&memory_read_packet_config);
1186 }
1187
1188 static long
1189 get_memory_read_packet_size (void)
1190 {
1191   long size = get_memory_packet_size (&memory_read_packet_config);
1192
1193   /* FIXME: cagney/1999-11-07: Functions like getpkt() need to get an
1194      extra buffer size argument before the memory read size can be
1195      increased beyond this.  */
1196   if (size > get_remote_packet_size ())
1197     size = get_remote_packet_size ();
1198   return size;
1199 }
1200
1201 \f
1202 /* Generic configuration support for packets the stub optionally
1203    supports.  Allows the user to specify the use of the packet as well
1204    as allowing GDB to auto-detect support in the remote stub.  */
1205
1206 enum packet_support
1207   {
1208     PACKET_SUPPORT_UNKNOWN = 0,
1209     PACKET_ENABLE,
1210     PACKET_DISABLE
1211   };
1212
1213 struct packet_config
1214   {
1215     const char *name;
1216     const char *title;
1217
1218     /* If auto, GDB auto-detects support for this packet or feature,
1219        either through qSupported, or by trying the packet and looking
1220        at the response.  If true, GDB assumes the target supports this
1221        packet.  If false, the packet is disabled.  Configs that don't
1222        have an associated command always have this set to auto.  */
1223     enum auto_boolean detect;
1224
1225     /* Does the target support this packet?  */
1226     enum packet_support support;
1227   };
1228
1229 /* Analyze a packet's return value and update the packet config
1230    accordingly.  */
1231
1232 enum packet_result
1233 {
1234   PACKET_ERROR,
1235   PACKET_OK,
1236   PACKET_UNKNOWN
1237 };
1238
1239 static enum packet_support packet_config_support (struct packet_config *config);
1240 static enum packet_support packet_support (int packet);
1241
1242 static void
1243 show_packet_config_cmd (struct packet_config *config)
1244 {
1245   char *support = "internal-error";
1246
1247   switch (packet_config_support (config))
1248     {
1249     case PACKET_ENABLE:
1250       support = "enabled";
1251       break;
1252     case PACKET_DISABLE:
1253       support = "disabled";
1254       break;
1255     case PACKET_SUPPORT_UNKNOWN:
1256       support = "unknown";
1257       break;
1258     }
1259   switch (config->detect)
1260     {
1261     case AUTO_BOOLEAN_AUTO:
1262       printf_filtered (_("Support for the `%s' packet "
1263                          "is auto-detected, currently %s.\n"),
1264                        config->name, support);
1265       break;
1266     case AUTO_BOOLEAN_TRUE:
1267     case AUTO_BOOLEAN_FALSE:
1268       printf_filtered (_("Support for the `%s' packet is currently %s.\n"),
1269                        config->name, support);
1270       break;
1271     }
1272 }
1273
1274 static void
1275 add_packet_config_cmd (struct packet_config *config, const char *name,
1276                        const char *title, int legacy)
1277 {
1278   char *set_doc;
1279   char *show_doc;
1280   char *cmd_name;
1281
1282   config->name = name;
1283   config->title = title;
1284   set_doc = xstrprintf ("Set use of remote protocol `%s' (%s) packet",
1285                         name, title);
1286   show_doc = xstrprintf ("Show current use of remote "
1287                          "protocol `%s' (%s) packet",
1288                          name, title);
1289   /* set/show TITLE-packet {auto,on,off} */
1290   cmd_name = xstrprintf ("%s-packet", title);
1291   add_setshow_auto_boolean_cmd (cmd_name, class_obscure,
1292                                 &config->detect, set_doc,
1293                                 show_doc, NULL, /* help_doc */
1294                                 NULL,
1295                                 show_remote_protocol_packet_cmd,
1296                                 &remote_set_cmdlist, &remote_show_cmdlist);
1297   /* The command code copies the documentation strings.  */
1298   xfree (set_doc);
1299   xfree (show_doc);
1300   /* set/show remote NAME-packet {auto,on,off} -- legacy.  */
1301   if (legacy)
1302     {
1303       char *legacy_name;
1304
1305       legacy_name = xstrprintf ("%s-packet", name);
1306       add_alias_cmd (legacy_name, cmd_name, class_obscure, 0,
1307                      &remote_set_cmdlist);
1308       add_alias_cmd (legacy_name, cmd_name, class_obscure, 0,
1309                      &remote_show_cmdlist);
1310     }
1311 }
1312
1313 static enum packet_result
1314 packet_check_result (const char *buf)
1315 {
1316   if (buf[0] != '\0')
1317     {
1318       /* The stub recognized the packet request.  Check that the
1319          operation succeeded.  */
1320       if (buf[0] == 'E'
1321           && isxdigit (buf[1]) && isxdigit (buf[2])
1322           && buf[3] == '\0')
1323         /* "Enn"  - definitly an error.  */
1324         return PACKET_ERROR;
1325
1326       /* Always treat "E." as an error.  This will be used for
1327          more verbose error messages, such as E.memtypes.  */
1328       if (buf[0] == 'E' && buf[1] == '.')
1329         return PACKET_ERROR;
1330
1331       /* The packet may or may not be OK.  Just assume it is.  */
1332       return PACKET_OK;
1333     }
1334   else
1335     /* The stub does not support the packet.  */
1336     return PACKET_UNKNOWN;
1337 }
1338
1339 static enum packet_result
1340 packet_ok (const char *buf, struct packet_config *config)
1341 {
1342   enum packet_result result;
1343
1344   if (config->detect != AUTO_BOOLEAN_TRUE
1345       && config->support == PACKET_DISABLE)
1346     internal_error (__FILE__, __LINE__,
1347                     _("packet_ok: attempt to use a disabled packet"));
1348
1349   result = packet_check_result (buf);
1350   switch (result)
1351     {
1352     case PACKET_OK:
1353     case PACKET_ERROR:
1354       /* The stub recognized the packet request.  */
1355       if (config->support == PACKET_SUPPORT_UNKNOWN)
1356         {
1357           if (remote_debug)
1358             fprintf_unfiltered (gdb_stdlog,
1359                                 "Packet %s (%s) is supported\n",
1360                                 config->name, config->title);
1361           config->support = PACKET_ENABLE;
1362         }
1363       break;
1364     case PACKET_UNKNOWN:
1365       /* The stub does not support the packet.  */
1366       if (config->detect == AUTO_BOOLEAN_AUTO
1367           && config->support == PACKET_ENABLE)
1368         {
1369           /* If the stub previously indicated that the packet was
1370              supported then there is a protocol error.  */
1371           error (_("Protocol error: %s (%s) conflicting enabled responses."),
1372                  config->name, config->title);
1373         }
1374       else if (config->detect == AUTO_BOOLEAN_TRUE)
1375         {
1376           /* The user set it wrong.  */
1377           error (_("Enabled packet %s (%s) not recognized by stub"),
1378                  config->name, config->title);
1379         }
1380
1381       if (remote_debug)
1382         fprintf_unfiltered (gdb_stdlog,
1383                             "Packet %s (%s) is NOT supported\n",
1384                             config->name, config->title);
1385       config->support = PACKET_DISABLE;
1386       break;
1387     }
1388
1389   return result;
1390 }
1391
1392 enum {
1393   PACKET_vCont = 0,
1394   PACKET_X,
1395   PACKET_qSymbol,
1396   PACKET_P,
1397   PACKET_p,
1398   PACKET_Z0,
1399   PACKET_Z1,
1400   PACKET_Z2,
1401   PACKET_Z3,
1402   PACKET_Z4,
1403   PACKET_vFile_setfs,
1404   PACKET_vFile_open,
1405   PACKET_vFile_pread,
1406   PACKET_vFile_pwrite,
1407   PACKET_vFile_close,
1408   PACKET_vFile_unlink,
1409   PACKET_vFile_readlink,
1410   PACKET_vFile_fstat,
1411   PACKET_qXfer_auxv,
1412   PACKET_qXfer_features,
1413   PACKET_qXfer_exec_file,
1414   PACKET_qXfer_libraries,
1415   PACKET_qXfer_libraries_svr4,
1416   PACKET_qXfer_memory_map,
1417   PACKET_qXfer_spu_read,
1418   PACKET_qXfer_spu_write,
1419   PACKET_qXfer_osdata,
1420   PACKET_qXfer_threads,
1421   PACKET_qXfer_statictrace_read,
1422   PACKET_qXfer_traceframe_info,
1423   PACKET_qXfer_uib,
1424   PACKET_qGetTIBAddr,
1425   PACKET_qGetTLSAddr,
1426   PACKET_qSupported,
1427   PACKET_qTStatus,
1428   PACKET_QPassSignals,
1429   PACKET_QCatchSyscalls,
1430   PACKET_QProgramSignals,
1431   PACKET_qCRC,
1432   PACKET_qSearch_memory,
1433   PACKET_vAttach,
1434   PACKET_vRun,
1435   PACKET_QStartNoAckMode,
1436   PACKET_vKill,
1437   PACKET_qXfer_siginfo_read,
1438   PACKET_qXfer_siginfo_write,
1439   PACKET_qAttached,
1440
1441   /* Support for conditional tracepoints.  */
1442   PACKET_ConditionalTracepoints,
1443
1444   /* Support for target-side breakpoint conditions.  */
1445   PACKET_ConditionalBreakpoints,
1446
1447   /* Support for target-side breakpoint commands.  */
1448   PACKET_BreakpointCommands,
1449
1450   /* Support for fast tracepoints.  */
1451   PACKET_FastTracepoints,
1452
1453   /* Support for static tracepoints.  */
1454   PACKET_StaticTracepoints,
1455
1456   /* Support for installing tracepoints while a trace experiment is
1457      running.  */
1458   PACKET_InstallInTrace,
1459
1460   PACKET_bc,
1461   PACKET_bs,
1462   PACKET_TracepointSource,
1463   PACKET_QAllow,
1464   PACKET_qXfer_fdpic,
1465   PACKET_QDisableRandomization,
1466   PACKET_QAgent,
1467   PACKET_QTBuffer_size,
1468   PACKET_Qbtrace_off,
1469   PACKET_Qbtrace_bts,
1470   PACKET_Qbtrace_pt,
1471   PACKET_qXfer_btrace,
1472
1473   /* Support for the QNonStop packet.  */
1474   PACKET_QNonStop,
1475
1476   /* Support for the QThreadEvents packet.  */
1477   PACKET_QThreadEvents,
1478
1479   /* Support for multi-process extensions.  */
1480   PACKET_multiprocess_feature,
1481
1482   /* Support for enabling and disabling tracepoints while a trace
1483      experiment is running.  */
1484   PACKET_EnableDisableTracepoints_feature,
1485
1486   /* Support for collecting strings using the tracenz bytecode.  */
1487   PACKET_tracenz_feature,
1488
1489   /* Support for continuing to run a trace experiment while GDB is
1490      disconnected.  */
1491   PACKET_DisconnectedTracing_feature,
1492
1493   /* Support for qXfer:libraries-svr4:read with a non-empty annex.  */
1494   PACKET_augmented_libraries_svr4_read_feature,
1495
1496   /* Support for the qXfer:btrace-conf:read packet.  */
1497   PACKET_qXfer_btrace_conf,
1498
1499   /* Support for the Qbtrace-conf:bts:size packet.  */
1500   PACKET_Qbtrace_conf_bts_size,
1501
1502   /* Support for swbreak+ feature.  */
1503   PACKET_swbreak_feature,
1504
1505   /* Support for hwbreak+ feature.  */
1506   PACKET_hwbreak_feature,
1507
1508   /* Support for fork events.  */
1509   PACKET_fork_event_feature,
1510
1511   /* Support for vfork events.  */
1512   PACKET_vfork_event_feature,
1513
1514   /* Support for the Qbtrace-conf:pt:size packet.  */
1515   PACKET_Qbtrace_conf_pt_size,
1516
1517   /* Support for exec events.  */
1518   PACKET_exec_event_feature,
1519
1520   /* Support for query supported vCont actions.  */
1521   PACKET_vContSupported,
1522
1523   /* Support remote CTRL-C.  */
1524   PACKET_vCtrlC,
1525
1526   /* Support TARGET_WAITKIND_NO_RESUMED.  */
1527   PACKET_no_resumed,
1528
1529   PACKET_MAX
1530 };
1531
1532 static struct packet_config remote_protocol_packets[PACKET_MAX];
1533
1534 /* Returns the packet's corresponding "set remote foo-packet" command
1535    state.  See struct packet_config for more details.  */
1536
1537 static enum auto_boolean
1538 packet_set_cmd_state (int packet)
1539 {
1540   return remote_protocol_packets[packet].detect;
1541 }
1542
1543 /* Returns whether a given packet or feature is supported.  This takes
1544    into account the state of the corresponding "set remote foo-packet"
1545    command, which may be used to bypass auto-detection.  */
1546
1547 static enum packet_support
1548 packet_config_support (struct packet_config *config)
1549 {
1550   switch (config->detect)
1551     {
1552     case AUTO_BOOLEAN_TRUE:
1553       return PACKET_ENABLE;
1554     case AUTO_BOOLEAN_FALSE:
1555       return PACKET_DISABLE;
1556     case AUTO_BOOLEAN_AUTO:
1557       return config->support;
1558     default:
1559       gdb_assert_not_reached (_("bad switch"));
1560     }
1561 }
1562
1563 /* Same as packet_config_support, but takes the packet's enum value as
1564    argument.  */
1565
1566 static enum packet_support
1567 packet_support (int packet)
1568 {
1569   struct packet_config *config = &remote_protocol_packets[packet];
1570
1571   return packet_config_support (config);
1572 }
1573
1574 static void
1575 show_remote_protocol_packet_cmd (struct ui_file *file, int from_tty,
1576                                  struct cmd_list_element *c,
1577                                  const char *value)
1578 {
1579   struct packet_config *packet;
1580
1581   for (packet = remote_protocol_packets;
1582        packet < &remote_protocol_packets[PACKET_MAX];
1583        packet++)
1584     {
1585       if (&packet->detect == c->var)
1586         {
1587           show_packet_config_cmd (packet);
1588           return;
1589         }
1590     }
1591   internal_error (__FILE__, __LINE__, _("Could not find config for %s"),
1592                   c->name);
1593 }
1594
1595 /* Should we try one of the 'Z' requests?  */
1596
1597 enum Z_packet_type
1598 {
1599   Z_PACKET_SOFTWARE_BP,
1600   Z_PACKET_HARDWARE_BP,
1601   Z_PACKET_WRITE_WP,
1602   Z_PACKET_READ_WP,
1603   Z_PACKET_ACCESS_WP,
1604   NR_Z_PACKET_TYPES
1605 };
1606
1607 /* For compatibility with older distributions.  Provide a ``set remote
1608    Z-packet ...'' command that updates all the Z packet types.  */
1609
1610 static enum auto_boolean remote_Z_packet_detect;
1611
1612 static void
1613 set_remote_protocol_Z_packet_cmd (char *args, int from_tty,
1614                                   struct cmd_list_element *c)
1615 {
1616   int i;
1617
1618   for (i = 0; i < NR_Z_PACKET_TYPES; i++)
1619     remote_protocol_packets[PACKET_Z0 + i].detect = remote_Z_packet_detect;
1620 }
1621
1622 static void
1623 show_remote_protocol_Z_packet_cmd (struct ui_file *file, int from_tty,
1624                                    struct cmd_list_element *c,
1625                                    const char *value)
1626 {
1627   int i;
1628
1629   for (i = 0; i < NR_Z_PACKET_TYPES; i++)
1630     {
1631       show_packet_config_cmd (&remote_protocol_packets[PACKET_Z0 + i]);
1632     }
1633 }
1634
1635 /* Returns true if the multi-process extensions are in effect.  */
1636
1637 static int
1638 remote_multi_process_p (struct remote_state *rs)
1639 {
1640   return packet_support (PACKET_multiprocess_feature) == PACKET_ENABLE;
1641 }
1642
1643 /* Returns true if fork events are supported.  */
1644
1645 static int
1646 remote_fork_event_p (struct remote_state *rs)
1647 {
1648   return packet_support (PACKET_fork_event_feature) == PACKET_ENABLE;
1649 }
1650
1651 /* Returns true if vfork events are supported.  */
1652
1653 static int
1654 remote_vfork_event_p (struct remote_state *rs)
1655 {
1656   return packet_support (PACKET_vfork_event_feature) == PACKET_ENABLE;
1657 }
1658
1659 /* Returns true if exec events are supported.  */
1660
1661 static int
1662 remote_exec_event_p (struct remote_state *rs)
1663 {
1664   return packet_support (PACKET_exec_event_feature) == PACKET_ENABLE;
1665 }
1666
1667 /* Insert fork catchpoint target routine.  If fork events are enabled
1668    then return success, nothing more to do.  */
1669
1670 static int
1671 remote_insert_fork_catchpoint (struct target_ops *ops, int pid)
1672 {
1673   struct remote_state *rs = get_remote_state ();
1674
1675   return !remote_fork_event_p (rs);
1676 }
1677
1678 /* Remove fork catchpoint target routine.  Nothing to do, just
1679    return success.  */
1680
1681 static int
1682 remote_remove_fork_catchpoint (struct target_ops *ops, int pid)
1683 {
1684   return 0;
1685 }
1686
1687 /* Insert vfork catchpoint target routine.  If vfork events are enabled
1688    then return success, nothing more to do.  */
1689
1690 static int
1691 remote_insert_vfork_catchpoint (struct target_ops *ops, int pid)
1692 {
1693   struct remote_state *rs = get_remote_state ();
1694
1695   return !remote_vfork_event_p (rs);
1696 }
1697
1698 /* Remove vfork catchpoint target routine.  Nothing to do, just
1699    return success.  */
1700
1701 static int
1702 remote_remove_vfork_catchpoint (struct target_ops *ops, int pid)
1703 {
1704   return 0;
1705 }
1706
1707 /* Insert exec catchpoint target routine.  If exec events are
1708    enabled, just return success.  */
1709
1710 static int
1711 remote_insert_exec_catchpoint (struct target_ops *ops, int pid)
1712 {
1713   struct remote_state *rs = get_remote_state ();
1714
1715   return !remote_exec_event_p (rs);
1716 }
1717
1718 /* Remove exec catchpoint target routine.  Nothing to do, just
1719    return success.  */
1720
1721 static int
1722 remote_remove_exec_catchpoint (struct target_ops *ops, int pid)
1723 {
1724   return 0;
1725 }
1726
1727 \f
1728 /* Asynchronous signal handle registered as event loop source for
1729    when we have pending events ready to be passed to the core.  */
1730
1731 static struct async_event_handler *remote_async_inferior_event_token;
1732
1733 \f
1734
1735 static ptid_t magic_null_ptid;
1736 static ptid_t not_sent_ptid;
1737 static ptid_t any_thread_ptid;
1738
1739 /* Find out if the stub attached to PID (and hence GDB should offer to
1740    detach instead of killing it when bailing out).  */
1741
1742 static int
1743 remote_query_attached (int pid)
1744 {
1745   struct remote_state *rs = get_remote_state ();
1746   size_t size = get_remote_packet_size ();
1747
1748   if (packet_support (PACKET_qAttached) == PACKET_DISABLE)
1749     return 0;
1750
1751   if (remote_multi_process_p (rs))
1752     xsnprintf (rs->buf, size, "qAttached:%x", pid);
1753   else
1754     xsnprintf (rs->buf, size, "qAttached");
1755
1756   putpkt (rs->buf);
1757   getpkt (&rs->buf, &rs->buf_size, 0);
1758
1759   switch (packet_ok (rs->buf,
1760                      &remote_protocol_packets[PACKET_qAttached]))
1761     {
1762     case PACKET_OK:
1763       if (strcmp (rs->buf, "1") == 0)
1764         return 1;
1765       break;
1766     case PACKET_ERROR:
1767       warning (_("Remote failure reply: %s"), rs->buf);
1768       break;
1769     case PACKET_UNKNOWN:
1770       break;
1771     }
1772
1773   return 0;
1774 }
1775
1776 /* Add PID to GDB's inferior table.  If FAKE_PID_P is true, then PID
1777    has been invented by GDB, instead of reported by the target.  Since
1778    we can be connected to a remote system before before knowing about
1779    any inferior, mark the target with execution when we find the first
1780    inferior.  If ATTACHED is 1, then we had just attached to this
1781    inferior.  If it is 0, then we just created this inferior.  If it
1782    is -1, then try querying the remote stub to find out if it had
1783    attached to the inferior or not.  If TRY_OPEN_EXEC is true then
1784    attempt to open this inferior's executable as the main executable
1785    if no main executable is open already.  */
1786
1787 static struct inferior *
1788 remote_add_inferior (int fake_pid_p, int pid, int attached,
1789                      int try_open_exec)
1790 {
1791   struct inferior *inf;
1792
1793   /* Check whether this process we're learning about is to be
1794      considered attached, or if is to be considered to have been
1795      spawned by the stub.  */
1796   if (attached == -1)
1797     attached = remote_query_attached (pid);
1798
1799   if (gdbarch_has_global_solist (target_gdbarch ()))
1800     {
1801       /* If the target shares code across all inferiors, then every
1802          attach adds a new inferior.  */
1803       inf = add_inferior (pid);
1804
1805       /* ... and every inferior is bound to the same program space.
1806          However, each inferior may still have its own address
1807          space.  */
1808       inf->aspace = maybe_new_address_space ();
1809       inf->pspace = current_program_space;
1810     }
1811   else
1812     {
1813       /* In the traditional debugging scenario, there's a 1-1 match
1814          between program/address spaces.  We simply bind the inferior
1815          to the program space's address space.  */
1816       inf = current_inferior ();
1817       inferior_appeared (inf, pid);
1818     }
1819
1820   inf->attach_flag = attached;
1821   inf->fake_pid_p = fake_pid_p;
1822
1823   /* If no main executable is currently open then attempt to
1824      open the file that was executed to create this inferior.  */
1825   if (try_open_exec && get_exec_file (0) == NULL)
1826     exec_file_locate_attach (pid, 0, 1);
1827
1828   return inf;
1829 }
1830
1831 static struct private_thread_info *
1832   get_private_info_thread (struct thread_info *info);
1833
1834 /* Add thread PTID to GDB's thread list.  Tag it as executing/running
1835    according to RUNNING.  */
1836
1837 static void
1838 remote_add_thread (ptid_t ptid, int running, int executing)
1839 {
1840   struct remote_state *rs = get_remote_state ();
1841   struct thread_info *thread;
1842
1843   /* GDB historically didn't pull threads in the initial connection
1844      setup.  If the remote target doesn't even have a concept of
1845      threads (e.g., a bare-metal target), even if internally we
1846      consider that a single-threaded target, mentioning a new thread
1847      might be confusing to the user.  Be silent then, preserving the
1848      age old behavior.  */
1849   if (rs->starting_up)
1850     thread = add_thread_silent (ptid);
1851   else
1852     thread = add_thread (ptid);
1853
1854   get_private_info_thread (thread)->vcont_resumed = executing;
1855   set_executing (ptid, executing);
1856   set_running (ptid, running);
1857 }
1858
1859 /* Come here when we learn about a thread id from the remote target.
1860    It may be the first time we hear about such thread, so take the
1861    opportunity to add it to GDB's thread list.  In case this is the
1862    first time we're noticing its corresponding inferior, add it to
1863    GDB's inferior list as well.  EXECUTING indicates whether the
1864    thread is (internally) executing or stopped.  */
1865
1866 static void
1867 remote_notice_new_inferior (ptid_t currthread, int executing)
1868 {
1869   /* In non-stop mode, we assume new found threads are (externally)
1870      running until proven otherwise with a stop reply.  In all-stop,
1871      we can only get here if all threads are stopped.  */
1872   int running = target_is_non_stop_p () ? 1 : 0;
1873
1874   /* If this is a new thread, add it to GDB's thread list.
1875      If we leave it up to WFI to do this, bad things will happen.  */
1876
1877   if (in_thread_list (currthread) && is_exited (currthread))
1878     {
1879       /* We're seeing an event on a thread id we knew had exited.
1880          This has to be a new thread reusing the old id.  Add it.  */
1881       remote_add_thread (currthread, running, executing);
1882       return;
1883     }
1884
1885   if (!in_thread_list (currthread))
1886     {
1887       struct inferior *inf = NULL;
1888       int pid = ptid_get_pid (currthread);
1889
1890       if (ptid_is_pid (inferior_ptid)
1891           && pid == ptid_get_pid (inferior_ptid))
1892         {
1893           /* inferior_ptid has no thread member yet.  This can happen
1894              with the vAttach -> remote_wait,"TAAthread:" path if the
1895              stub doesn't support qC.  This is the first stop reported
1896              after an attach, so this is the main thread.  Update the
1897              ptid in the thread list.  */
1898           if (in_thread_list (pid_to_ptid (pid)))
1899             thread_change_ptid (inferior_ptid, currthread);
1900           else
1901             {
1902               remote_add_thread (currthread, running, executing);
1903               inferior_ptid = currthread;
1904             }
1905           return;
1906         }
1907
1908       if (ptid_equal (magic_null_ptid, inferior_ptid))
1909         {
1910           /* inferior_ptid is not set yet.  This can happen with the
1911              vRun -> remote_wait,"TAAthread:" path if the stub
1912              doesn't support qC.  This is the first stop reported
1913              after an attach, so this is the main thread.  Update the
1914              ptid in the thread list.  */
1915           thread_change_ptid (inferior_ptid, currthread);
1916           return;
1917         }
1918
1919       /* When connecting to a target remote, or to a target
1920          extended-remote which already was debugging an inferior, we
1921          may not know about it yet.  Add it before adding its child
1922          thread, so notifications are emitted in a sensible order.  */
1923       if (!in_inferior_list (ptid_get_pid (currthread)))
1924         {
1925           struct remote_state *rs = get_remote_state ();
1926           int fake_pid_p = !remote_multi_process_p (rs);
1927
1928           inf = remote_add_inferior (fake_pid_p,
1929                                      ptid_get_pid (currthread), -1, 1);
1930         }
1931
1932       /* This is really a new thread.  Add it.  */
1933       remote_add_thread (currthread, running, executing);
1934
1935       /* If we found a new inferior, let the common code do whatever
1936          it needs to with it (e.g., read shared libraries, insert
1937          breakpoints), unless we're just setting up an all-stop
1938          connection.  */
1939       if (inf != NULL)
1940         {
1941           struct remote_state *rs = get_remote_state ();
1942
1943           if (!rs->starting_up)
1944             notice_new_inferior (currthread, executing, 0);
1945         }
1946     }
1947 }
1948
1949 /* Return THREAD's private thread data, creating it if necessary.  */
1950
1951 static struct private_thread_info *
1952 get_private_info_thread (struct thread_info *thread)
1953 {
1954   gdb_assert (thread != NULL);
1955
1956   if (thread->priv == NULL)
1957     {
1958       struct private_thread_info *priv = XNEW (struct private_thread_info);
1959
1960       thread->private_dtor = free_private_thread_info;
1961       thread->priv = priv;
1962
1963       priv->core = -1;
1964       priv->extra = NULL;
1965       priv->name = NULL;
1966       priv->name = NULL;
1967       priv->last_resume_step = 0;
1968       priv->last_resume_sig = GDB_SIGNAL_0;
1969       priv->vcont_resumed = 0;
1970     }
1971
1972   return thread->priv;
1973 }
1974
1975 /* Return PTID's private thread data, creating it if necessary.  */
1976
1977 static struct private_thread_info *
1978 get_private_info_ptid (ptid_t ptid)
1979 {
1980   struct thread_info *info = find_thread_ptid (ptid);
1981
1982   return get_private_info_thread (info);
1983 }
1984
1985 /* Call this function as a result of
1986    1) A halt indication (T packet) containing a thread id
1987    2) A direct query of currthread
1988    3) Successful execution of set thread */
1989
1990 static void
1991 record_currthread (struct remote_state *rs, ptid_t currthread)
1992 {
1993   rs->general_thread = currthread;
1994 }
1995
1996 /* If 'QPassSignals' is supported, tell the remote stub what signals
1997    it can simply pass through to the inferior without reporting.  */
1998
1999 static void
2000 remote_pass_signals (struct target_ops *self,
2001                      int numsigs, unsigned char *pass_signals)
2002 {
2003   if (packet_support (PACKET_QPassSignals) != PACKET_DISABLE)
2004     {
2005       char *pass_packet, *p;
2006       int count = 0, i;
2007       struct remote_state *rs = get_remote_state ();
2008
2009       gdb_assert (numsigs < 256);
2010       for (i = 0; i < numsigs; i++)
2011         {
2012           if (pass_signals[i])
2013             count++;
2014         }
2015       pass_packet = (char *) xmalloc (count * 3 + strlen ("QPassSignals:") + 1);
2016       strcpy (pass_packet, "QPassSignals:");
2017       p = pass_packet + strlen (pass_packet);
2018       for (i = 0; i < numsigs; i++)
2019         {
2020           if (pass_signals[i])
2021             {
2022               if (i >= 16)
2023                 *p++ = tohex (i >> 4);
2024               *p++ = tohex (i & 15);
2025               if (count)
2026                 *p++ = ';';
2027               else
2028                 break;
2029               count--;
2030             }
2031         }
2032       *p = 0;
2033       if (!rs->last_pass_packet || strcmp (rs->last_pass_packet, pass_packet))
2034         {
2035           putpkt (pass_packet);
2036           getpkt (&rs->buf, &rs->buf_size, 0);
2037           packet_ok (rs->buf, &remote_protocol_packets[PACKET_QPassSignals]);
2038           if (rs->last_pass_packet)
2039             xfree (rs->last_pass_packet);
2040           rs->last_pass_packet = pass_packet;
2041         }
2042       else
2043         xfree (pass_packet);
2044     }
2045 }
2046
2047 /* If 'QCatchSyscalls' is supported, tell the remote stub
2048    to report syscalls to GDB.  */
2049
2050 static int
2051 remote_set_syscall_catchpoint (struct target_ops *self,
2052                                int pid, int needed, int any_count,
2053                                int table_size, int *table)
2054 {
2055   char *catch_packet;
2056   enum packet_result result;
2057   int n_sysno = 0;
2058
2059   if (packet_support (PACKET_QCatchSyscalls) == PACKET_DISABLE)
2060     {
2061       /* Not supported.  */
2062       return 1;
2063     }
2064
2065   if (needed && !any_count)
2066     {
2067       int i;
2068
2069       /* Count how many syscalls are to be caught (table[sysno] != 0).  */
2070       for (i = 0; i < table_size; i++)
2071         {
2072           if (table[i] != 0)
2073             n_sysno++;
2074         }
2075     }
2076
2077   if (remote_debug)
2078     {
2079       fprintf_unfiltered (gdb_stdlog,
2080                           "remote_set_syscall_catchpoint "
2081                           "pid %d needed %d any_count %d n_sysno %d\n",
2082                           pid, needed, any_count, n_sysno);
2083     }
2084
2085   if (needed)
2086     {
2087       /* Prepare a packet with the sysno list, assuming max 8+1
2088          characters for a sysno.  If the resulting packet size is too
2089          big, fallback on the non-selective packet.  */
2090       const int maxpktsz = strlen ("QCatchSyscalls:1") + n_sysno * 9 + 1;
2091
2092       catch_packet = (char *) xmalloc (maxpktsz);
2093       strcpy (catch_packet, "QCatchSyscalls:1");
2094       if (!any_count)
2095         {
2096           int i;
2097           char *p;
2098
2099           p = catch_packet;
2100           p += strlen (p);
2101
2102           /* Add in catch_packet each syscall to be caught (table[i] != 0).  */
2103           for (i = 0; i < table_size; i++)
2104             {
2105               if (table[i] != 0)
2106                 p += xsnprintf (p, catch_packet + maxpktsz - p, ";%x", i);
2107             }
2108         }
2109       if (strlen (catch_packet) > get_remote_packet_size ())
2110         {
2111           /* catch_packet too big.  Fallback to less efficient
2112              non selective mode, with GDB doing the filtering.  */
2113           catch_packet[sizeof ("QCatchSyscalls:1") - 1] = 0;
2114         }
2115     }
2116   else
2117     catch_packet = xstrdup ("QCatchSyscalls:0");
2118
2119   {
2120     struct cleanup *old_chain = make_cleanup (xfree, catch_packet);
2121     struct remote_state *rs = get_remote_state ();
2122
2123     putpkt (catch_packet);
2124     getpkt (&rs->buf, &rs->buf_size, 0);
2125     result = packet_ok (rs->buf, &remote_protocol_packets[PACKET_QCatchSyscalls]);
2126     do_cleanups (old_chain);
2127     if (result == PACKET_OK)
2128       return 0;
2129     else
2130       return -1;
2131   }
2132 }
2133
2134 /* If 'QProgramSignals' is supported, tell the remote stub what
2135    signals it should pass through to the inferior when detaching.  */
2136
2137 static void
2138 remote_program_signals (struct target_ops *self,
2139                         int numsigs, unsigned char *signals)
2140 {
2141   if (packet_support (PACKET_QProgramSignals) != PACKET_DISABLE)
2142     {
2143       char *packet, *p;
2144       int count = 0, i;
2145       struct remote_state *rs = get_remote_state ();
2146
2147       gdb_assert (numsigs < 256);
2148       for (i = 0; i < numsigs; i++)
2149         {
2150           if (signals[i])
2151             count++;
2152         }
2153       packet = (char *) xmalloc (count * 3 + strlen ("QProgramSignals:") + 1);
2154       strcpy (packet, "QProgramSignals:");
2155       p = packet + strlen (packet);
2156       for (i = 0; i < numsigs; i++)
2157         {
2158           if (signal_pass_state (i))
2159             {
2160               if (i >= 16)
2161                 *p++ = tohex (i >> 4);
2162               *p++ = tohex (i & 15);
2163               if (count)
2164                 *p++ = ';';
2165               else
2166                 break;
2167               count--;
2168             }
2169         }
2170       *p = 0;
2171       if (!rs->last_program_signals_packet
2172           || strcmp (rs->last_program_signals_packet, packet) != 0)
2173         {
2174           putpkt (packet);
2175           getpkt (&rs->buf, &rs->buf_size, 0);
2176           packet_ok (rs->buf, &remote_protocol_packets[PACKET_QProgramSignals]);
2177           xfree (rs->last_program_signals_packet);
2178           rs->last_program_signals_packet = packet;
2179         }
2180       else
2181         xfree (packet);
2182     }
2183 }
2184
2185 /* If PTID is MAGIC_NULL_PTID, don't set any thread.  If PTID is
2186    MINUS_ONE_PTID, set the thread to -1, so the stub returns the
2187    thread.  If GEN is set, set the general thread, if not, then set
2188    the step/continue thread.  */
2189 static void
2190 set_thread (struct ptid ptid, int gen)
2191 {
2192   struct remote_state *rs = get_remote_state ();
2193   ptid_t state = gen ? rs->general_thread : rs->continue_thread;
2194   char *buf = rs->buf;
2195   char *endbuf = rs->buf + get_remote_packet_size ();
2196
2197   if (ptid_equal (state, ptid))
2198     return;
2199
2200   *buf++ = 'H';
2201   *buf++ = gen ? 'g' : 'c';
2202   if (ptid_equal (ptid, magic_null_ptid))
2203     xsnprintf (buf, endbuf - buf, "0");
2204   else if (ptid_equal (ptid, any_thread_ptid))
2205     xsnprintf (buf, endbuf - buf, "0");
2206   else if (ptid_equal (ptid, minus_one_ptid))
2207     xsnprintf (buf, endbuf - buf, "-1");
2208   else
2209     write_ptid (buf, endbuf, ptid);
2210   putpkt (rs->buf);
2211   getpkt (&rs->buf, &rs->buf_size, 0);
2212   if (gen)
2213     rs->general_thread = ptid;
2214   else
2215     rs->continue_thread = ptid;
2216 }
2217
2218 static void
2219 set_general_thread (struct ptid ptid)
2220 {
2221   set_thread (ptid, 1);
2222 }
2223
2224 static void
2225 set_continue_thread (struct ptid ptid)
2226 {
2227   set_thread (ptid, 0);
2228 }
2229
2230 /* Change the remote current process.  Which thread within the process
2231    ends up selected isn't important, as long as it is the same process
2232    as what INFERIOR_PTID points to.
2233
2234    This comes from that fact that there is no explicit notion of
2235    "selected process" in the protocol.  The selected process for
2236    general operations is the process the selected general thread
2237    belongs to.  */
2238
2239 static void
2240 set_general_process (void)
2241 {
2242   struct remote_state *rs = get_remote_state ();
2243
2244   /* If the remote can't handle multiple processes, don't bother.  */
2245   if (!remote_multi_process_p (rs))
2246     return;
2247
2248   /* We only need to change the remote current thread if it's pointing
2249      at some other process.  */
2250   if (ptid_get_pid (rs->general_thread) != ptid_get_pid (inferior_ptid))
2251     set_general_thread (inferior_ptid);
2252 }
2253
2254 \f
2255 /* Return nonzero if this is the main thread that we made up ourselves
2256    to model non-threaded targets as single-threaded.  */
2257
2258 static int
2259 remote_thread_always_alive (struct target_ops *ops, ptid_t ptid)
2260 {
2261   if (ptid_equal (ptid, magic_null_ptid))
2262     /* The main thread is always alive.  */
2263     return 1;
2264
2265   if (ptid_get_pid (ptid) != 0 && ptid_get_lwp (ptid) == 0)
2266     /* The main thread is always alive.  This can happen after a
2267        vAttach, if the remote side doesn't support
2268        multi-threading.  */
2269     return 1;
2270
2271   return 0;
2272 }
2273
2274 /* Return nonzero if the thread PTID is still alive on the remote
2275    system.  */
2276
2277 static int
2278 remote_thread_alive (struct target_ops *ops, ptid_t ptid)
2279 {
2280   struct remote_state *rs = get_remote_state ();
2281   char *p, *endp;
2282
2283   /* Check if this is a thread that we made up ourselves to model
2284      non-threaded targets as single-threaded.  */
2285   if (remote_thread_always_alive (ops, ptid))
2286     return 1;
2287
2288   p = rs->buf;
2289   endp = rs->buf + get_remote_packet_size ();
2290
2291   *p++ = 'T';
2292   write_ptid (p, endp, ptid);
2293
2294   putpkt (rs->buf);
2295   getpkt (&rs->buf, &rs->buf_size, 0);
2296   return (rs->buf[0] == 'O' && rs->buf[1] == 'K');
2297 }
2298
2299 /* Return a pointer to a thread name if we know it and NULL otherwise.
2300    The thread_info object owns the memory for the name.  */
2301
2302 static const char *
2303 remote_thread_name (struct target_ops *ops, struct thread_info *info)
2304 {
2305   if (info->priv != NULL)
2306     return info->priv->name;
2307
2308   return NULL;
2309 }
2310
2311 /* About these extended threadlist and threadinfo packets.  They are
2312    variable length packets but, the fields within them are often fixed
2313    length.  They are redundent enough to send over UDP as is the
2314    remote protocol in general.  There is a matching unit test module
2315    in libstub.  */
2316
2317 /* WARNING: This threadref data structure comes from the remote O.S.,
2318    libstub protocol encoding, and remote.c.  It is not particularly
2319    changable.  */
2320
2321 /* Right now, the internal structure is int. We want it to be bigger.
2322    Plan to fix this.  */
2323
2324 typedef int gdb_threadref;      /* Internal GDB thread reference.  */
2325
2326 /* gdb_ext_thread_info is an internal GDB data structure which is
2327    equivalent to the reply of the remote threadinfo packet.  */
2328
2329 struct gdb_ext_thread_info
2330   {
2331     threadref threadid;         /* External form of thread reference.  */
2332     int active;                 /* Has state interesting to GDB?
2333                                    regs, stack.  */
2334     char display[256];          /* Brief state display, name,
2335                                    blocked/suspended.  */
2336     char shortname[32];         /* To be used to name threads.  */
2337     char more_display[256];     /* Long info, statistics, queue depth,
2338                                    whatever.  */
2339   };
2340
2341 /* The volume of remote transfers can be limited by submitting
2342    a mask containing bits specifying the desired information.
2343    Use a union of these values as the 'selection' parameter to
2344    get_thread_info.  FIXME: Make these TAG names more thread specific.  */
2345
2346 #define TAG_THREADID 1
2347 #define TAG_EXISTS 2
2348 #define TAG_DISPLAY 4
2349 #define TAG_THREADNAME 8
2350 #define TAG_MOREDISPLAY 16
2351
2352 #define BUF_THREAD_ID_SIZE (OPAQUETHREADBYTES * 2)
2353
2354 static char *unpack_nibble (char *buf, int *val);
2355
2356 static char *unpack_byte (char *buf, int *value);
2357
2358 static char *pack_int (char *buf, int value);
2359
2360 static char *unpack_int (char *buf, int *value);
2361
2362 static char *unpack_string (char *src, char *dest, int length);
2363
2364 static char *pack_threadid (char *pkt, threadref *id);
2365
2366 static char *unpack_threadid (char *inbuf, threadref *id);
2367
2368 void int_to_threadref (threadref *id, int value);
2369
2370 static int threadref_to_int (threadref *ref);
2371
2372 static void copy_threadref (threadref *dest, threadref *src);
2373
2374 static int threadmatch (threadref *dest, threadref *src);
2375
2376 static char *pack_threadinfo_request (char *pkt, int mode,
2377                                       threadref *id);
2378
2379 static int remote_unpack_thread_info_response (char *pkt,
2380                                                threadref *expectedref,
2381                                                struct gdb_ext_thread_info
2382                                                *info);
2383
2384
2385 static int remote_get_threadinfo (threadref *threadid,
2386                                   int fieldset, /*TAG mask */
2387                                   struct gdb_ext_thread_info *info);
2388
2389 static char *pack_threadlist_request (char *pkt, int startflag,
2390                                       int threadcount,
2391                                       threadref *nextthread);
2392
2393 static int parse_threadlist_response (char *pkt,
2394                                       int result_limit,
2395                                       threadref *original_echo,
2396                                       threadref *resultlist,
2397                                       int *doneflag);
2398
2399 static int remote_get_threadlist (int startflag,
2400                                   threadref *nextthread,
2401                                   int result_limit,
2402                                   int *done,
2403                                   int *result_count,
2404                                   threadref *threadlist);
2405
2406 typedef int (*rmt_thread_action) (threadref *ref, void *context);
2407
2408 static int remote_threadlist_iterator (rmt_thread_action stepfunction,
2409                                        void *context, int looplimit);
2410
2411 static int remote_newthread_step (threadref *ref, void *context);
2412
2413
2414 /* Write a PTID to BUF.  ENDBUF points to one-passed-the-end of the
2415    buffer we're allowed to write to.  Returns
2416    BUF+CHARACTERS_WRITTEN.  */
2417
2418 static char *
2419 write_ptid (char *buf, const char *endbuf, ptid_t ptid)
2420 {
2421   int pid, tid;
2422   struct remote_state *rs = get_remote_state ();
2423
2424   if (remote_multi_process_p (rs))
2425     {
2426       pid = ptid_get_pid (ptid);
2427       if (pid < 0)
2428         buf += xsnprintf (buf, endbuf - buf, "p-%x.", -pid);
2429       else
2430         buf += xsnprintf (buf, endbuf - buf, "p%x.", pid);
2431     }
2432   tid = ptid_get_lwp (ptid);
2433   if (tid < 0)
2434     buf += xsnprintf (buf, endbuf - buf, "-%x", -tid);
2435   else
2436     buf += xsnprintf (buf, endbuf - buf, "%x", tid);
2437
2438   return buf;
2439 }
2440
2441 /* Extract a PTID from BUF.  If non-null, OBUF is set to the to one
2442    passed the last parsed char.  Returns null_ptid on error.  */
2443
2444 static ptid_t
2445 read_ptid (char *buf, char **obuf)
2446 {
2447   char *p = buf;
2448   char *pp;
2449   ULONGEST pid = 0, tid = 0;
2450
2451   if (*p == 'p')
2452     {
2453       /* Multi-process ptid.  */
2454       pp = unpack_varlen_hex (p + 1, &pid);
2455       if (*pp != '.')
2456         error (_("invalid remote ptid: %s"), p);
2457
2458       p = pp;
2459       pp = unpack_varlen_hex (p + 1, &tid);
2460       if (obuf)
2461         *obuf = pp;
2462       return ptid_build (pid, tid, 0);
2463     }
2464
2465   /* No multi-process.  Just a tid.  */
2466   pp = unpack_varlen_hex (p, &tid);
2467
2468   /* Return null_ptid when no thread id is found.  */
2469   if (p == pp)
2470     {
2471       if (obuf)
2472         *obuf = pp;
2473       return null_ptid;
2474     }
2475
2476   /* Since the stub is not sending a process id, then default to
2477      what's in inferior_ptid, unless it's null at this point.  If so,
2478      then since there's no way to know the pid of the reported
2479      threads, use the magic number.  */
2480   if (ptid_equal (inferior_ptid, null_ptid))
2481     pid = ptid_get_pid (magic_null_ptid);
2482   else
2483     pid = ptid_get_pid (inferior_ptid);
2484
2485   if (obuf)
2486     *obuf = pp;
2487   return ptid_build (pid, tid, 0);
2488 }
2489
2490 static int
2491 stubhex (int ch)
2492 {
2493   if (ch >= 'a' && ch <= 'f')
2494     return ch - 'a' + 10;
2495   if (ch >= '0' && ch <= '9')
2496     return ch - '0';
2497   if (ch >= 'A' && ch <= 'F')
2498     return ch - 'A' + 10;
2499   return -1;
2500 }
2501
2502 static int
2503 stub_unpack_int (char *buff, int fieldlength)
2504 {
2505   int nibble;
2506   int retval = 0;
2507
2508   while (fieldlength)
2509     {
2510       nibble = stubhex (*buff++);
2511       retval |= nibble;
2512       fieldlength--;
2513       if (fieldlength)
2514         retval = retval << 4;
2515     }
2516   return retval;
2517 }
2518
2519 static char *
2520 unpack_nibble (char *buf, int *val)
2521 {
2522   *val = fromhex (*buf++);
2523   return buf;
2524 }
2525
2526 static char *
2527 unpack_byte (char *buf, int *value)
2528 {
2529   *value = stub_unpack_int (buf, 2);
2530   return buf + 2;
2531 }
2532
2533 static char *
2534 pack_int (char *buf, int value)
2535 {
2536   buf = pack_hex_byte (buf, (value >> 24) & 0xff);
2537   buf = pack_hex_byte (buf, (value >> 16) & 0xff);
2538   buf = pack_hex_byte (buf, (value >> 8) & 0x0ff);
2539   buf = pack_hex_byte (buf, (value & 0xff));
2540   return buf;
2541 }
2542
2543 static char *
2544 unpack_int (char *buf, int *value)
2545 {
2546   *value = stub_unpack_int (buf, 8);
2547   return buf + 8;
2548 }
2549
2550 #if 0                   /* Currently unused, uncomment when needed.  */
2551 static char *pack_string (char *pkt, char *string);
2552
2553 static char *
2554 pack_string (char *pkt, char *string)
2555 {
2556   char ch;
2557   int len;
2558
2559   len = strlen (string);
2560   if (len > 200)
2561     len = 200;          /* Bigger than most GDB packets, junk???  */
2562   pkt = pack_hex_byte (pkt, len);
2563   while (len-- > 0)
2564     {
2565       ch = *string++;
2566       if ((ch == '\0') || (ch == '#'))
2567         ch = '*';               /* Protect encapsulation.  */
2568       *pkt++ = ch;
2569     }
2570   return pkt;
2571 }
2572 #endif /* 0 (unused) */
2573
2574 static char *
2575 unpack_string (char *src, char *dest, int length)
2576 {
2577   while (length--)
2578     *dest++ = *src++;
2579   *dest = '\0';
2580   return src;
2581 }
2582
2583 static char *
2584 pack_threadid (char *pkt, threadref *id)
2585 {
2586   char *limit;
2587   unsigned char *altid;
2588
2589   altid = (unsigned char *) id;
2590   limit = pkt + BUF_THREAD_ID_SIZE;
2591   while (pkt < limit)
2592     pkt = pack_hex_byte (pkt, *altid++);
2593   return pkt;
2594 }
2595
2596
2597 static char *
2598 unpack_threadid (char *inbuf, threadref *id)
2599 {
2600   char *altref;
2601   char *limit = inbuf + BUF_THREAD_ID_SIZE;
2602   int x, y;
2603
2604   altref = (char *) id;
2605
2606   while (inbuf < limit)
2607     {
2608       x = stubhex (*inbuf++);
2609       y = stubhex (*inbuf++);
2610       *altref++ = (x << 4) | y;
2611     }
2612   return inbuf;
2613 }
2614
2615 /* Externally, threadrefs are 64 bits but internally, they are still
2616    ints.  This is due to a mismatch of specifications.  We would like
2617    to use 64bit thread references internally.  This is an adapter
2618    function.  */
2619
2620 void
2621 int_to_threadref (threadref *id, int value)
2622 {
2623   unsigned char *scan;
2624
2625   scan = (unsigned char *) id;
2626   {
2627     int i = 4;
2628     while (i--)
2629       *scan++ = 0;
2630   }
2631   *scan++ = (value >> 24) & 0xff;
2632   *scan++ = (value >> 16) & 0xff;
2633   *scan++ = (value >> 8) & 0xff;
2634   *scan++ = (value & 0xff);
2635 }
2636
2637 static int
2638 threadref_to_int (threadref *ref)
2639 {
2640   int i, value = 0;
2641   unsigned char *scan;
2642
2643   scan = *ref;
2644   scan += 4;
2645   i = 4;
2646   while (i-- > 0)
2647     value = (value << 8) | ((*scan++) & 0xff);
2648   return value;
2649 }
2650
2651 static void
2652 copy_threadref (threadref *dest, threadref *src)
2653 {
2654   int i;
2655   unsigned char *csrc, *cdest;
2656
2657   csrc = (unsigned char *) src;
2658   cdest = (unsigned char *) dest;
2659   i = 8;
2660   while (i--)
2661     *cdest++ = *csrc++;
2662 }
2663
2664 static int
2665 threadmatch (threadref *dest, threadref *src)
2666 {
2667   /* Things are broken right now, so just assume we got a match.  */
2668 #if 0
2669   unsigned char *srcp, *destp;
2670   int i, result;
2671   srcp = (char *) src;
2672   destp = (char *) dest;
2673
2674   result = 1;
2675   while (i-- > 0)
2676     result &= (*srcp++ == *destp++) ? 1 : 0;
2677   return result;
2678 #endif
2679   return 1;
2680 }
2681
2682 /*
2683    threadid:1,        # always request threadid
2684    context_exists:2,
2685    display:4,
2686    unique_name:8,
2687    more_display:16
2688  */
2689
2690 /* Encoding:  'Q':8,'P':8,mask:32,threadid:64 */
2691
2692 static char *
2693 pack_threadinfo_request (char *pkt, int mode, threadref *id)
2694 {
2695   *pkt++ = 'q';                         /* Info Query */
2696   *pkt++ = 'P';                         /* process or thread info */
2697   pkt = pack_int (pkt, mode);           /* mode */
2698   pkt = pack_threadid (pkt, id);        /* threadid */
2699   *pkt = '\0';                          /* terminate */
2700   return pkt;
2701 }
2702
2703 /* These values tag the fields in a thread info response packet.  */
2704 /* Tagging the fields allows us to request specific fields and to
2705    add more fields as time goes by.  */
2706
2707 #define TAG_THREADID 1          /* Echo the thread identifier.  */
2708 #define TAG_EXISTS 2            /* Is this process defined enough to
2709                                    fetch registers and its stack?  */
2710 #define TAG_DISPLAY 4           /* A short thing maybe to put on a window */
2711 #define TAG_THREADNAME 8        /* string, maps 1-to-1 with a thread is.  */
2712 #define TAG_MOREDISPLAY 16      /* Whatever the kernel wants to say about
2713                                    the process.  */
2714
2715 static int
2716 remote_unpack_thread_info_response (char *pkt, threadref *expectedref,
2717                                     struct gdb_ext_thread_info *info)
2718 {
2719   struct remote_state *rs = get_remote_state ();
2720   int mask, length;
2721   int tag;
2722   threadref ref;
2723   char *limit = pkt + rs->buf_size; /* Plausible parsing limit.  */
2724   int retval = 1;
2725
2726   /* info->threadid = 0; FIXME: implement zero_threadref.  */
2727   info->active = 0;
2728   info->display[0] = '\0';
2729   info->shortname[0] = '\0';
2730   info->more_display[0] = '\0';
2731
2732   /* Assume the characters indicating the packet type have been
2733      stripped.  */
2734   pkt = unpack_int (pkt, &mask);        /* arg mask */
2735   pkt = unpack_threadid (pkt, &ref);
2736
2737   if (mask == 0)
2738     warning (_("Incomplete response to threadinfo request."));
2739   if (!threadmatch (&ref, expectedref))
2740     {                   /* This is an answer to a different request.  */
2741       warning (_("ERROR RMT Thread info mismatch."));
2742       return 0;
2743     }
2744   copy_threadref (&info->threadid, &ref);
2745
2746   /* Loop on tagged fields , try to bail if somthing goes wrong.  */
2747
2748   /* Packets are terminated with nulls.  */
2749   while ((pkt < limit) && mask && *pkt)
2750     {
2751       pkt = unpack_int (pkt, &tag);     /* tag */
2752       pkt = unpack_byte (pkt, &length); /* length */
2753       if (!(tag & mask))                /* Tags out of synch with mask.  */
2754         {
2755           warning (_("ERROR RMT: threadinfo tag mismatch."));
2756           retval = 0;
2757           break;
2758         }
2759       if (tag == TAG_THREADID)
2760         {
2761           if (length != 16)
2762             {
2763               warning (_("ERROR RMT: length of threadid is not 16."));
2764               retval = 0;
2765               break;
2766             }
2767           pkt = unpack_threadid (pkt, &ref);
2768           mask = mask & ~TAG_THREADID;
2769           continue;
2770         }
2771       if (tag == TAG_EXISTS)
2772         {
2773           info->active = stub_unpack_int (pkt, length);
2774           pkt += length;
2775           mask = mask & ~(TAG_EXISTS);
2776           if (length > 8)
2777             {
2778               warning (_("ERROR RMT: 'exists' length too long."));
2779               retval = 0;
2780               break;
2781             }
2782           continue;
2783         }
2784       if (tag == TAG_THREADNAME)
2785         {
2786           pkt = unpack_string (pkt, &info->shortname[0], length);
2787           mask = mask & ~TAG_THREADNAME;
2788           continue;
2789         }
2790       if (tag == TAG_DISPLAY)
2791         {
2792           pkt = unpack_string (pkt, &info->display[0], length);
2793           mask = mask & ~TAG_DISPLAY;
2794           continue;
2795         }
2796       if (tag == TAG_MOREDISPLAY)
2797         {
2798           pkt = unpack_string (pkt, &info->more_display[0], length);
2799           mask = mask & ~TAG_MOREDISPLAY;
2800           continue;
2801         }
2802       warning (_("ERROR RMT: unknown thread info tag."));
2803       break;                    /* Not a tag we know about.  */
2804     }
2805   return retval;
2806 }
2807
2808 static int
2809 remote_get_threadinfo (threadref *threadid, int fieldset,       /* TAG mask */
2810                        struct gdb_ext_thread_info *info)
2811 {
2812   struct remote_state *rs = get_remote_state ();
2813   int result;
2814
2815   pack_threadinfo_request (rs->buf, fieldset, threadid);
2816   putpkt (rs->buf);
2817   getpkt (&rs->buf, &rs->buf_size, 0);
2818
2819   if (rs->buf[0] == '\0')
2820     return 0;
2821
2822   result = remote_unpack_thread_info_response (rs->buf + 2,
2823                                                threadid, info);
2824   return result;
2825 }
2826
2827 /*    Format: i'Q':8,i"L":8,initflag:8,batchsize:16,lastthreadid:32   */
2828
2829 static char *
2830 pack_threadlist_request (char *pkt, int startflag, int threadcount,
2831                          threadref *nextthread)
2832 {
2833   *pkt++ = 'q';                 /* info query packet */
2834   *pkt++ = 'L';                 /* Process LIST or threadLIST request */
2835   pkt = pack_nibble (pkt, startflag);           /* initflag 1 bytes */
2836   pkt = pack_hex_byte (pkt, threadcount);       /* threadcount 2 bytes */
2837   pkt = pack_threadid (pkt, nextthread);        /* 64 bit thread identifier */
2838   *pkt = '\0';
2839   return pkt;
2840 }
2841
2842 /* Encoding:   'q':8,'M':8,count:16,done:8,argthreadid:64,(threadid:64)* */
2843
2844 static int
2845 parse_threadlist_response (char *pkt, int result_limit,
2846                            threadref *original_echo, threadref *resultlist,
2847                            int *doneflag)
2848 {
2849   struct remote_state *rs = get_remote_state ();
2850   char *limit;
2851   int count, resultcount, done;
2852
2853   resultcount = 0;
2854   /* Assume the 'q' and 'M chars have been stripped.  */
2855   limit = pkt + (rs->buf_size - BUF_THREAD_ID_SIZE);
2856   /* done parse past here */
2857   pkt = unpack_byte (pkt, &count);      /* count field */
2858   pkt = unpack_nibble (pkt, &done);
2859   /* The first threadid is the argument threadid.  */
2860   pkt = unpack_threadid (pkt, original_echo);   /* should match query packet */
2861   while ((count-- > 0) && (pkt < limit))
2862     {
2863       pkt = unpack_threadid (pkt, resultlist++);
2864       if (resultcount++ >= result_limit)
2865         break;
2866     }
2867   if (doneflag)
2868     *doneflag = done;
2869   return resultcount;
2870 }
2871
2872 /* Fetch the next batch of threads from the remote.  Returns -1 if the
2873    qL packet is not supported, 0 on error and 1 on success.  */
2874
2875 static int
2876 remote_get_threadlist (int startflag, threadref *nextthread, int result_limit,
2877                        int *done, int *result_count, threadref *threadlist)
2878 {
2879   struct remote_state *rs = get_remote_state ();
2880   int result = 1;
2881
2882   /* Trancate result limit to be smaller than the packet size.  */
2883   if ((((result_limit + 1) * BUF_THREAD_ID_SIZE) + 10)
2884       >= get_remote_packet_size ())
2885     result_limit = (get_remote_packet_size () / BUF_THREAD_ID_SIZE) - 2;
2886
2887   pack_threadlist_request (rs->buf, startflag, result_limit, nextthread);
2888   putpkt (rs->buf);
2889   getpkt (&rs->buf, &rs->buf_size, 0);
2890   if (*rs->buf == '\0')
2891     {
2892       /* Packet not supported.  */
2893       return -1;
2894     }
2895
2896   *result_count =
2897     parse_threadlist_response (rs->buf + 2, result_limit,
2898                                &rs->echo_nextthread, threadlist, done);
2899
2900   if (!threadmatch (&rs->echo_nextthread, nextthread))
2901     {
2902       /* FIXME: This is a good reason to drop the packet.  */
2903       /* Possably, there is a duplicate response.  */
2904       /* Possabilities :
2905          retransmit immediatly - race conditions
2906          retransmit after timeout - yes
2907          exit
2908          wait for packet, then exit
2909        */
2910       warning (_("HMM: threadlist did not echo arg thread, dropping it."));
2911       return 0;                 /* I choose simply exiting.  */
2912     }
2913   if (*result_count <= 0)
2914     {
2915       if (*done != 1)
2916         {
2917           warning (_("RMT ERROR : failed to get remote thread list."));
2918           result = 0;
2919         }
2920       return result;            /* break; */
2921     }
2922   if (*result_count > result_limit)
2923     {
2924       *result_count = 0;
2925       warning (_("RMT ERROR: threadlist response longer than requested."));
2926       return 0;
2927     }
2928   return result;
2929 }
2930
2931 /* Fetch the list of remote threads, with the qL packet, and call
2932    STEPFUNCTION for each thread found.  Stops iterating and returns 1
2933    if STEPFUNCTION returns true.  Stops iterating and returns 0 if the
2934    STEPFUNCTION returns false.  If the packet is not supported,
2935    returns -1.  */
2936
2937 static int
2938 remote_threadlist_iterator (rmt_thread_action stepfunction, void *context,
2939                             int looplimit)
2940 {
2941   struct remote_state *rs = get_remote_state ();
2942   int done, i, result_count;
2943   int startflag = 1;
2944   int result = 1;
2945   int loopcount = 0;
2946
2947   done = 0;
2948   while (!done)
2949     {
2950       if (loopcount++ > looplimit)
2951         {
2952           result = 0;
2953           warning (_("Remote fetch threadlist -infinite loop-."));
2954           break;
2955         }
2956       result = remote_get_threadlist (startflag, &rs->nextthread,
2957                                       MAXTHREADLISTRESULTS,
2958                                       &done, &result_count,
2959                                       rs->resultthreadlist);
2960       if (result <= 0)
2961         break;
2962       /* Clear for later iterations.  */
2963       startflag = 0;
2964       /* Setup to resume next batch of thread references, set nextthread.  */
2965       if (result_count >= 1)
2966         copy_threadref (&rs->nextthread,
2967                         &rs->resultthreadlist[result_count - 1]);
2968       i = 0;
2969       while (result_count--)
2970         {
2971           if (!(*stepfunction) (&rs->resultthreadlist[i++], context))
2972             {
2973               result = 0;
2974               break;
2975             }
2976         }
2977     }
2978   return result;
2979 }
2980
2981 /* A thread found on the remote target.  */
2982
2983 typedef struct thread_item
2984 {
2985   /* The thread's PTID.  */
2986   ptid_t ptid;
2987
2988   /* The thread's extra info.  May be NULL.  */
2989   char *extra;
2990
2991   /* The thread's name.  May be NULL.  */
2992   char *name;
2993
2994   /* The core the thread was running on.  -1 if not known.  */
2995   int core;
2996 } thread_item_t;
2997 DEF_VEC_O(thread_item_t);
2998
2999 /* Context passed around to the various methods listing remote
3000    threads.  As new threads are found, they're added to the ITEMS
3001    vector.  */
3002
3003 struct threads_listing_context
3004 {
3005   /* The threads found on the remote target.  */
3006   VEC (thread_item_t) *items;
3007 };
3008
3009 /* Discard the contents of the constructed thread listing context.  */
3010
3011 static void
3012 clear_threads_listing_context (void *p)
3013 {
3014   struct threads_listing_context *context
3015     = (struct threads_listing_context *) p;
3016   int i;
3017   struct thread_item *item;
3018
3019   for (i = 0; VEC_iterate (thread_item_t, context->items, i, item); ++i)
3020     {
3021       xfree (item->extra);
3022       xfree (item->name);
3023     }
3024
3025   VEC_free (thread_item_t, context->items);
3026 }
3027
3028 /* Remove the thread specified as the related_pid field of WS
3029    from the CONTEXT list.  */
3030
3031 static void
3032 threads_listing_context_remove (struct target_waitstatus *ws,
3033                                 struct threads_listing_context *context)
3034 {
3035   struct thread_item *item;
3036   int i;
3037   ptid_t child_ptid = ws->value.related_pid;
3038
3039   for (i = 0; VEC_iterate (thread_item_t, context->items, i, item); ++i)
3040     {
3041       if (ptid_equal (item->ptid, child_ptid))
3042         {
3043           VEC_ordered_remove (thread_item_t, context->items, i);
3044           break;
3045         }
3046     }
3047 }
3048
3049 static int
3050 remote_newthread_step (threadref *ref, void *data)
3051 {
3052   struct threads_listing_context *context
3053     = (struct threads_listing_context *) data;
3054   struct thread_item item;
3055   int pid = ptid_get_pid (inferior_ptid);
3056
3057   item.ptid = ptid_build (pid, threadref_to_int (ref), 0);
3058   item.core = -1;
3059   item.name = NULL;
3060   item.extra = NULL;
3061
3062   VEC_safe_push (thread_item_t, context->items, &item);
3063
3064   return 1;                     /* continue iterator */
3065 }
3066
3067 #define CRAZY_MAX_THREADS 1000
3068
3069 static ptid_t
3070 remote_current_thread (ptid_t oldpid)
3071 {
3072   struct remote_state *rs = get_remote_state ();
3073
3074   putpkt ("qC");
3075   getpkt (&rs->buf, &rs->buf_size, 0);
3076   if (rs->buf[0] == 'Q' && rs->buf[1] == 'C')
3077     {
3078       char *obuf;
3079       ptid_t result;
3080
3081       result = read_ptid (&rs->buf[2], &obuf);
3082       if (*obuf != '\0' && remote_debug)
3083         fprintf_unfiltered (gdb_stdlog,
3084                             "warning: garbage in qC reply\n");
3085
3086       return result;
3087     }
3088   else
3089     return oldpid;
3090 }
3091
3092 /* List remote threads using the deprecated qL packet.  */
3093
3094 static int
3095 remote_get_threads_with_ql (struct target_ops *ops,
3096                             struct threads_listing_context *context)
3097 {
3098   if (remote_threadlist_iterator (remote_newthread_step, context,
3099                                   CRAZY_MAX_THREADS) >= 0)
3100     return 1;
3101
3102   return 0;
3103 }
3104
3105 #if defined(HAVE_LIBEXPAT)
3106
3107 static void
3108 start_thread (struct gdb_xml_parser *parser,
3109               const struct gdb_xml_element *element,
3110               void *user_data, VEC(gdb_xml_value_s) *attributes)
3111 {
3112   struct threads_listing_context *data
3113     = (struct threads_listing_context *) user_data;
3114
3115   struct thread_item item;
3116   char *id;
3117   struct gdb_xml_value *attr;
3118
3119   id = (char *) xml_find_attribute (attributes, "id")->value;
3120   item.ptid = read_ptid (id, NULL);
3121
3122   attr = xml_find_attribute (attributes, "core");
3123   if (attr != NULL)
3124     item.core = *(ULONGEST *) attr->value;
3125   else
3126     item.core = -1;
3127
3128   attr = xml_find_attribute (attributes, "name");
3129   item.name = attr != NULL ? xstrdup ((const char *) attr->value) : NULL;
3130
3131   item.extra = 0;
3132
3133   VEC_safe_push (thread_item_t, data->items, &item);
3134 }
3135
3136 static void
3137 end_thread (struct gdb_xml_parser *parser,
3138             const struct gdb_xml_element *element,
3139             void *user_data, const char *body_text)
3140 {
3141   struct threads_listing_context *data
3142     = (struct threads_listing_context *) user_data;
3143
3144   if (body_text && *body_text)
3145     VEC_last (thread_item_t, data->items)->extra = xstrdup (body_text);
3146 }
3147
3148 const struct gdb_xml_attribute thread_attributes[] = {
3149   { "id", GDB_XML_AF_NONE, NULL, NULL },
3150   { "core", GDB_XML_AF_OPTIONAL, gdb_xml_parse_attr_ulongest, NULL },
3151   { "name", GDB_XML_AF_OPTIONAL, NULL, NULL },
3152   { NULL, GDB_XML_AF_NONE, NULL, NULL }
3153 };
3154
3155 const struct gdb_xml_element thread_children[] = {
3156   { NULL, NULL, NULL, GDB_XML_EF_NONE, NULL, NULL }
3157 };
3158
3159 const struct gdb_xml_element threads_children[] = {
3160   { "thread", thread_attributes, thread_children,
3161     GDB_XML_EF_REPEATABLE | GDB_XML_EF_OPTIONAL,
3162     start_thread, end_thread },
3163   { NULL, NULL, NULL, GDB_XML_EF_NONE, NULL, NULL }
3164 };
3165
3166 const struct gdb_xml_element threads_elements[] = {
3167   { "threads", NULL, threads_children,
3168     GDB_XML_EF_NONE, NULL, NULL },
3169   { NULL, NULL, NULL, GDB_XML_EF_NONE, NULL, NULL }
3170 };
3171
3172 #endif
3173
3174 /* List remote threads using qXfer:threads:read.  */
3175
3176 static int
3177 remote_get_threads_with_qxfer (struct target_ops *ops,
3178                                struct threads_listing_context *context)
3179 {
3180 #if defined(HAVE_LIBEXPAT)
3181   if (packet_support (PACKET_qXfer_threads) == PACKET_ENABLE)
3182     {
3183       char *xml = target_read_stralloc (ops, TARGET_OBJECT_THREADS, NULL);
3184       struct cleanup *back_to = make_cleanup (xfree, xml);
3185
3186       if (xml != NULL && *xml != '\0')
3187         {
3188           gdb_xml_parse_quick (_("threads"), "threads.dtd",
3189                                threads_elements, xml, context);
3190         }
3191
3192       do_cleanups (back_to);
3193       return 1;
3194     }
3195 #endif
3196
3197   return 0;
3198 }
3199
3200 /* List remote threads using qfThreadInfo/qsThreadInfo.  */
3201
3202 static int
3203 remote_get_threads_with_qthreadinfo (struct target_ops *ops,
3204                                      struct threads_listing_context *context)
3205 {
3206   struct remote_state *rs = get_remote_state ();
3207
3208   if (rs->use_threadinfo_query)
3209     {
3210       char *bufp;
3211
3212       putpkt ("qfThreadInfo");
3213       getpkt (&rs->buf, &rs->buf_size, 0);
3214       bufp = rs->buf;
3215       if (bufp[0] != '\0')              /* q packet recognized */
3216         {
3217           while (*bufp++ == 'm')        /* reply contains one or more TID */
3218             {
3219               do
3220                 {
3221                   struct thread_item item;
3222
3223                   item.ptid = read_ptid (bufp, &bufp);
3224                   item.core = -1;
3225                   item.name = NULL;
3226                   item.extra = NULL;
3227
3228                   VEC_safe_push (thread_item_t, context->items, &item);
3229                 }
3230               while (*bufp++ == ',');   /* comma-separated list */
3231               putpkt ("qsThreadInfo");
3232               getpkt (&rs->buf, &rs->buf_size, 0);
3233               bufp = rs->buf;
3234             }
3235           return 1;
3236         }
3237       else
3238         {
3239           /* Packet not recognized.  */
3240           rs->use_threadinfo_query = 0;
3241         }
3242     }
3243
3244   return 0;
3245 }
3246
3247 /* Implement the to_update_thread_list function for the remote
3248    targets.  */
3249
3250 static void
3251 remote_update_thread_list (struct target_ops *ops)
3252 {
3253   struct threads_listing_context context;
3254   struct cleanup *old_chain;
3255   int got_list = 0;
3256
3257   context.items = NULL;
3258   old_chain = make_cleanup (clear_threads_listing_context, &context);
3259
3260   /* We have a few different mechanisms to fetch the thread list.  Try
3261      them all, starting with the most preferred one first, falling
3262      back to older methods.  */
3263   if (remote_get_threads_with_qxfer (ops, &context)
3264       || remote_get_threads_with_qthreadinfo (ops, &context)
3265       || remote_get_threads_with_ql (ops, &context))
3266     {
3267       int i;
3268       struct thread_item *item;
3269       struct thread_info *tp, *tmp;
3270
3271       got_list = 1;
3272
3273       if (VEC_empty (thread_item_t, context.items)
3274           && remote_thread_always_alive (ops, inferior_ptid))
3275         {
3276           /* Some targets don't really support threads, but still
3277              reply an (empty) thread list in response to the thread
3278              listing packets, instead of replying "packet not
3279              supported".  Exit early so we don't delete the main
3280              thread.  */
3281           do_cleanups (old_chain);
3282           return;
3283         }
3284
3285       /* CONTEXT now holds the current thread list on the remote
3286          target end.  Delete GDB-side threads no longer found on the
3287          target.  */
3288       ALL_THREADS_SAFE (tp, tmp)
3289         {
3290           for (i = 0;
3291                VEC_iterate (thread_item_t, context.items, i, item);
3292                ++i)
3293             {
3294               if (ptid_equal (item->ptid, tp->ptid))
3295                 break;
3296             }
3297
3298           if (i == VEC_length (thread_item_t, context.items))
3299             {
3300               /* Not found.  */
3301               delete_thread (tp->ptid);
3302             }
3303         }
3304
3305       /* Remove any unreported fork child threads from CONTEXT so
3306          that we don't interfere with follow fork, which is where
3307          creation of such threads is handled.  */
3308       remove_new_fork_children (&context);
3309
3310       /* And now add threads we don't know about yet to our list.  */
3311       for (i = 0;
3312            VEC_iterate (thread_item_t, context.items, i, item);
3313            ++i)
3314         {
3315           if (!ptid_equal (item->ptid, null_ptid))
3316             {
3317               struct private_thread_info *info;
3318               /* In non-stop mode, we assume new found threads are
3319                  executing until proven otherwise with a stop reply.
3320                  In all-stop, we can only get here if all threads are
3321                  stopped.  */
3322               int executing = target_is_non_stop_p () ? 1 : 0;
3323
3324               remote_notice_new_inferior (item->ptid, executing);
3325
3326               info = get_private_info_ptid (item->ptid);
3327               info->core = item->core;
3328               info->extra = item->extra;
3329               item->extra = NULL;
3330               info->name = item->name;
3331               item->name = NULL;
3332             }
3333         }
3334     }
3335
3336   if (!got_list)
3337     {
3338       /* If no thread listing method is supported, then query whether
3339          each known thread is alive, one by one, with the T packet.
3340          If the target doesn't support threads at all, then this is a
3341          no-op.  See remote_thread_alive.  */
3342       prune_threads ();
3343     }
3344
3345   do_cleanups (old_chain);
3346 }
3347
3348 /*
3349  * Collect a descriptive string about the given thread.
3350  * The target may say anything it wants to about the thread
3351  * (typically info about its blocked / runnable state, name, etc.).
3352  * This string will appear in the info threads display.
3353  *
3354  * Optional: targets are not required to implement this function.
3355  */
3356
3357 static char *
3358 remote_threads_extra_info (struct target_ops *self, struct thread_info *tp)
3359 {
3360   struct remote_state *rs = get_remote_state ();
3361   int result;
3362   int set;
3363   threadref id;
3364   struct gdb_ext_thread_info threadinfo;
3365   static char display_buf[100]; /* arbitrary...  */
3366   int n = 0;                    /* position in display_buf */
3367
3368   if (rs->remote_desc == 0)             /* paranoia */
3369     internal_error (__FILE__, __LINE__,
3370                     _("remote_threads_extra_info"));
3371
3372   if (ptid_equal (tp->ptid, magic_null_ptid)
3373       || (ptid_get_pid (tp->ptid) != 0 && ptid_get_lwp (tp->ptid) == 0))
3374     /* This is the main thread which was added by GDB.  The remote
3375        server doesn't know about it.  */
3376     return NULL;
3377
3378   if (packet_support (PACKET_qXfer_threads) == PACKET_ENABLE)
3379     {
3380       struct thread_info *info = find_thread_ptid (tp->ptid);
3381
3382       if (info && info->priv)
3383         return info->priv->extra;
3384       else
3385         return NULL;
3386     }
3387
3388   if (rs->use_threadextra_query)
3389     {
3390       char *b = rs->buf;
3391       char *endb = rs->buf + get_remote_packet_size ();
3392
3393       xsnprintf (b, endb - b, "qThreadExtraInfo,");
3394       b += strlen (b);
3395       write_ptid (b, endb, tp->ptid);
3396
3397       putpkt (rs->buf);
3398       getpkt (&rs->buf, &rs->buf_size, 0);
3399       if (rs->buf[0] != 0)
3400         {
3401           n = std::min (strlen (rs->buf) / 2, sizeof (display_buf));
3402           result = hex2bin (rs->buf, (gdb_byte *) display_buf, n);
3403           display_buf [result] = '\0';
3404           return display_buf;
3405         }
3406     }
3407
3408   /* If the above query fails, fall back to the old method.  */
3409   rs->use_threadextra_query = 0;
3410   set = TAG_THREADID | TAG_EXISTS | TAG_THREADNAME
3411     | TAG_MOREDISPLAY | TAG_DISPLAY;
3412   int_to_threadref (&id, ptid_get_lwp (tp->ptid));
3413   if (remote_get_threadinfo (&id, set, &threadinfo))
3414     if (threadinfo.active)
3415       {
3416         if (*threadinfo.shortname)
3417           n += xsnprintf (&display_buf[0], sizeof (display_buf) - n,
3418                           " Name: %s,", threadinfo.shortname);
3419         if (*threadinfo.display)
3420           n += xsnprintf (&display_buf[n], sizeof (display_buf) - n,
3421                           " State: %s,", threadinfo.display);
3422         if (*threadinfo.more_display)
3423           n += xsnprintf (&display_buf[n], sizeof (display_buf) - n,
3424                           " Priority: %s", threadinfo.more_display);
3425
3426         if (n > 0)
3427           {
3428             /* For purely cosmetic reasons, clear up trailing commas.  */
3429             if (',' == display_buf[n-1])
3430               display_buf[n-1] = ' ';
3431             return display_buf;
3432           }
3433       }
3434   return NULL;
3435 }
3436 \f
3437
3438 static int
3439 remote_static_tracepoint_marker_at (struct target_ops *self, CORE_ADDR addr,
3440                                     struct static_tracepoint_marker *marker)
3441 {
3442   struct remote_state *rs = get_remote_state ();
3443   char *p = rs->buf;
3444
3445   xsnprintf (p, get_remote_packet_size (), "qTSTMat:");
3446   p += strlen (p);
3447   p += hexnumstr (p, addr);
3448   putpkt (rs->buf);
3449   getpkt (&rs->buf, &rs->buf_size, 0);
3450   p = rs->buf;
3451
3452   if (*p == 'E')
3453     error (_("Remote failure reply: %s"), p);
3454
3455   if (*p++ == 'm')
3456     {
3457       parse_static_tracepoint_marker_definition (p, &p, marker);
3458       return 1;
3459     }
3460
3461   return 0;
3462 }
3463
3464 static VEC(static_tracepoint_marker_p) *
3465 remote_static_tracepoint_markers_by_strid (struct target_ops *self,
3466                                            const char *strid)
3467 {
3468   struct remote_state *rs = get_remote_state ();
3469   VEC(static_tracepoint_marker_p) *markers = NULL;
3470   struct static_tracepoint_marker *marker = NULL;
3471   struct cleanup *old_chain;
3472   char *p;
3473
3474   /* Ask for a first packet of static tracepoint marker
3475      definition.  */
3476   putpkt ("qTfSTM");
3477   getpkt (&rs->buf, &rs->buf_size, 0);
3478   p = rs->buf;
3479   if (*p == 'E')
3480     error (_("Remote failure reply: %s"), p);
3481
3482   old_chain = make_cleanup (free_current_marker, &marker);
3483
3484   while (*p++ == 'm')
3485     {
3486       if (marker == NULL)
3487         marker = XCNEW (struct static_tracepoint_marker);
3488
3489       do
3490         {
3491           parse_static_tracepoint_marker_definition (p, &p, marker);
3492
3493           if (strid == NULL || strcmp (strid, marker->str_id) == 0)
3494             {
3495               VEC_safe_push (static_tracepoint_marker_p,
3496                              markers, marker);
3497               marker = NULL;
3498             }
3499           else
3500             {
3501               release_static_tracepoint_marker (marker);
3502               memset (marker, 0, sizeof (*marker));
3503             }
3504         }
3505       while (*p++ == ',');      /* comma-separated list */
3506       /* Ask for another packet of static tracepoint definition.  */
3507       putpkt ("qTsSTM");
3508       getpkt (&rs->buf, &rs->buf_size, 0);
3509       p = rs->buf;
3510     }
3511
3512   do_cleanups (old_chain);
3513   return markers;
3514 }
3515
3516 \f
3517 /* Implement the to_get_ada_task_ptid function for the remote targets.  */
3518
3519 static ptid_t
3520 remote_get_ada_task_ptid (struct target_ops *self, long lwp, long thread)
3521 {
3522   return ptid_build (ptid_get_pid (inferior_ptid), lwp, 0);
3523 }
3524 \f
3525
3526 /* Restart the remote side; this is an extended protocol operation.  */
3527
3528 static void
3529 extended_remote_restart (void)
3530 {
3531   struct remote_state *rs = get_remote_state ();
3532
3533   /* Send the restart command; for reasons I don't understand the
3534      remote side really expects a number after the "R".  */
3535   xsnprintf (rs->buf, get_remote_packet_size (), "R%x", 0);
3536   putpkt (rs->buf);
3537
3538   remote_fileio_reset ();
3539 }
3540 \f
3541 /* Clean up connection to a remote debugger.  */
3542
3543 static void
3544 remote_close (struct target_ops *self)
3545 {
3546   struct remote_state *rs = get_remote_state ();
3547
3548   if (rs->remote_desc == NULL)
3549     return; /* already closed */
3550
3551   /* Make sure we leave stdin registered in the event loop.  */
3552   remote_terminal_ours (self);
3553
3554   serial_close (rs->remote_desc);
3555   rs->remote_desc = NULL;
3556
3557   /* We don't have a connection to the remote stub anymore.  Get rid
3558      of all the inferiors and their threads we were controlling.
3559      Reset inferior_ptid to null_ptid first, as otherwise has_stack_frame
3560      will be unable to find the thread corresponding to (pid, 0, 0).  */
3561   inferior_ptid = null_ptid;
3562   discard_all_inferiors ();
3563
3564   /* We are closing the remote target, so we should discard
3565      everything of this target.  */
3566   discard_pending_stop_replies_in_queue (rs);
3567
3568   if (remote_async_inferior_event_token)
3569     delete_async_event_handler (&remote_async_inferior_event_token);
3570
3571   remote_notif_state_xfree (rs->notif_state);
3572
3573   trace_reset_local_state ();
3574 }
3575
3576 /* Query the remote side for the text, data and bss offsets.  */
3577
3578 static void
3579 get_offsets (void)
3580 {
3581   struct remote_state *rs = get_remote_state ();
3582   char *buf;
3583   char *ptr;
3584   int lose, num_segments = 0, do_sections, do_segments;
3585   CORE_ADDR text_addr, data_addr, bss_addr, segments[2];
3586   struct section_offsets *offs;
3587   struct symfile_segment_data *data;
3588
3589   if (symfile_objfile == NULL)
3590     return;
3591
3592   putpkt ("qOffsets");
3593   getpkt (&rs->buf, &rs->buf_size, 0);
3594   buf = rs->buf;
3595
3596   if (buf[0] == '\000')
3597     return;                     /* Return silently.  Stub doesn't support
3598                                    this command.  */
3599   if (buf[0] == 'E')
3600     {
3601       warning (_("Remote failure reply: %s"), buf);
3602       return;
3603     }
3604
3605   /* Pick up each field in turn.  This used to be done with scanf, but
3606      scanf will make trouble if CORE_ADDR size doesn't match
3607      conversion directives correctly.  The following code will work
3608      with any size of CORE_ADDR.  */
3609   text_addr = data_addr = bss_addr = 0;
3610   ptr = buf;
3611   lose = 0;
3612
3613   if (startswith (ptr, "Text="))
3614     {
3615       ptr += 5;
3616       /* Don't use strtol, could lose on big values.  */
3617       while (*ptr && *ptr != ';')
3618         text_addr = (text_addr << 4) + fromhex (*ptr++);
3619
3620       if (startswith (ptr, ";Data="))
3621         {
3622           ptr += 6;
3623           while (*ptr && *ptr != ';')
3624             data_addr = (data_addr << 4) + fromhex (*ptr++);
3625         }
3626       else
3627         lose = 1;
3628
3629       if (!lose && startswith (ptr, ";Bss="))
3630         {
3631           ptr += 5;
3632           while (*ptr && *ptr != ';')
3633             bss_addr = (bss_addr << 4) + fromhex (*ptr++);
3634
3635           if (bss_addr != data_addr)
3636             warning (_("Target reported unsupported offsets: %s"), buf);
3637         }
3638       else
3639         lose = 1;
3640     }
3641   else if (startswith (ptr, "TextSeg="))
3642     {
3643       ptr += 8;
3644       /* Don't use strtol, could lose on big values.  */
3645       while (*ptr && *ptr != ';')
3646         text_addr = (text_addr << 4) + fromhex (*ptr++);
3647       num_segments = 1;
3648
3649       if (startswith (ptr, ";DataSeg="))
3650         {
3651           ptr += 9;
3652           while (*ptr && *ptr != ';')
3653             data_addr = (data_addr << 4) + fromhex (*ptr++);
3654           num_segments++;
3655         }
3656     }
3657   else
3658     lose = 1;
3659
3660   if (lose)
3661     error (_("Malformed response to offset query, %s"), buf);
3662   else if (*ptr != '\0')
3663     warning (_("Target reported unsupported offsets: %s"), buf);
3664
3665   offs = ((struct section_offsets *)
3666           alloca (SIZEOF_N_SECTION_OFFSETS (symfile_objfile->num_sections)));
3667   memcpy (offs, symfile_objfile->section_offsets,
3668           SIZEOF_N_SECTION_OFFSETS (symfile_objfile->num_sections));
3669
3670   data = get_symfile_segment_data (symfile_objfile->obfd);
3671   do_segments = (data != NULL);
3672   do_sections = num_segments == 0;
3673
3674   if (num_segments > 0)
3675     {
3676       segments[0] = text_addr;
3677       segments[1] = data_addr;
3678     }
3679   /* If we have two segments, we can still try to relocate everything
3680      by assuming that the .text and .data offsets apply to the whole
3681      text and data segments.  Convert the offsets given in the packet
3682      to base addresses for symfile_map_offsets_to_segments.  */
3683   else if (data && data->num_segments == 2)
3684     {
3685       segments[0] = data->segment_bases[0] + text_addr;
3686       segments[1] = data->segment_bases[1] + data_addr;
3687       num_segments = 2;
3688     }
3689   /* If the object file has only one segment, assume that it is text
3690      rather than data; main programs with no writable data are rare,
3691      but programs with no code are useless.  Of course the code might
3692      have ended up in the data segment... to detect that we would need
3693      the permissions here.  */
3694   else if (data && data->num_segments == 1)
3695     {
3696       segments[0] = data->segment_bases[0] + text_addr;
3697       num_segments = 1;
3698     }
3699   /* There's no way to relocate by segment.  */
3700   else
3701     do_segments = 0;
3702
3703   if (do_segments)
3704     {
3705       int ret = symfile_map_offsets_to_segments (symfile_objfile->obfd, data,
3706                                                  offs, num_segments, segments);
3707
3708       if (ret == 0 && !do_sections)
3709         error (_("Can not handle qOffsets TextSeg "
3710                  "response with this symbol file"));
3711
3712       if (ret > 0)
3713         do_sections = 0;
3714     }
3715
3716   if (data)
3717     free_symfile_segment_data (data);
3718
3719   if (do_sections)
3720     {
3721       offs->offsets[SECT_OFF_TEXT (symfile_objfile)] = text_addr;
3722
3723       /* This is a temporary kludge to force data and bss to use the
3724          same offsets because that's what nlmconv does now.  The real
3725          solution requires changes to the stub and remote.c that I
3726          don't have time to do right now.  */
3727
3728       offs->offsets[SECT_OFF_DATA (symfile_objfile)] = data_addr;
3729       offs->offsets[SECT_OFF_BSS (symfile_objfile)] = data_addr;
3730     }
3731
3732   objfile_relocate (symfile_objfile, offs);
3733 }
3734
3735 /* Send interrupt_sequence to remote target.  */
3736 static void
3737 send_interrupt_sequence (void)
3738 {
3739   struct remote_state *rs = get_remote_state ();
3740
3741   if (interrupt_sequence_mode == interrupt_sequence_control_c)
3742     remote_serial_write ("\x03", 1);
3743   else if (interrupt_sequence_mode == interrupt_sequence_break)
3744     serial_send_break (rs->remote_desc);
3745   else if (interrupt_sequence_mode == interrupt_sequence_break_g)
3746     {
3747       serial_send_break (rs->remote_desc);
3748       remote_serial_write ("g", 1);
3749     }
3750   else
3751     internal_error (__FILE__, __LINE__,
3752                     _("Invalid value for interrupt_sequence_mode: %s."),
3753                     interrupt_sequence_mode);
3754 }
3755
3756
3757 /* If STOP_REPLY is a T stop reply, look for the "thread" register,
3758    and extract the PTID.  Returns NULL_PTID if not found.  */
3759
3760 static ptid_t
3761 stop_reply_extract_thread (char *stop_reply)
3762 {
3763   if (stop_reply[0] == 'T' && strlen (stop_reply) > 3)
3764     {
3765       char *p;
3766
3767       /* Txx r:val ; r:val (...)  */
3768       p = &stop_reply[3];
3769
3770       /* Look for "register" named "thread".  */
3771       while (*p != '\0')
3772         {
3773           char *p1;
3774
3775           p1 = strchr (p, ':');
3776           if (p1 == NULL)
3777             return null_ptid;
3778
3779           if (strncmp (p, "thread", p1 - p) == 0)
3780             return read_ptid (++p1, &p);
3781
3782           p1 = strchr (p, ';');
3783           if (p1 == NULL)
3784             return null_ptid;
3785           p1++;
3786
3787           p = p1;
3788         }
3789     }
3790
3791   return null_ptid;
3792 }
3793
3794 /* Determine the remote side's current thread.  If we have a stop
3795    reply handy (in WAIT_STATUS), maybe it's a T stop reply with a
3796    "thread" register we can extract the current thread from.  If not,
3797    ask the remote which is the current thread with qC.  The former
3798    method avoids a roundtrip.  */
3799
3800 static ptid_t
3801 get_current_thread (char *wait_status)
3802 {
3803   ptid_t ptid = null_ptid;
3804
3805   /* Note we don't use remote_parse_stop_reply as that makes use of
3806      the target architecture, which we haven't yet fully determined at
3807      this point.  */
3808   if (wait_status != NULL)
3809     ptid = stop_reply_extract_thread (wait_status);
3810   if (ptid_equal (ptid, null_ptid))
3811     ptid = remote_current_thread (inferior_ptid);
3812
3813   return ptid;
3814 }
3815
3816 /* Query the remote target for which is the current thread/process,
3817    add it to our tables, and update INFERIOR_PTID.  The caller is
3818    responsible for setting the state such that the remote end is ready
3819    to return the current thread.
3820
3821    This function is called after handling the '?' or 'vRun' packets,
3822    whose response is a stop reply from which we can also try
3823    extracting the thread.  If the target doesn't support the explicit
3824    qC query, we infer the current thread from that stop reply, passed
3825    in in WAIT_STATUS, which may be NULL.  */
3826
3827 static void
3828 add_current_inferior_and_thread (char *wait_status)
3829 {
3830   struct remote_state *rs = get_remote_state ();
3831   int fake_pid_p = 0;
3832   ptid_t ptid;
3833
3834   inferior_ptid = null_ptid;
3835
3836   /* Now, if we have thread information, update inferior_ptid.  */
3837   ptid = get_current_thread (wait_status);
3838
3839   if (!ptid_equal (ptid, null_ptid))
3840     {
3841       if (!remote_multi_process_p (rs))
3842         fake_pid_p = 1;
3843
3844       inferior_ptid = ptid;
3845     }
3846   else
3847     {
3848       /* Without this, some commands which require an active target
3849          (such as kill) won't work.  This variable serves (at least)
3850          double duty as both the pid of the target process (if it has
3851          such), and as a flag indicating that a target is active.  */
3852       inferior_ptid = magic_null_ptid;
3853       fake_pid_p = 1;
3854     }
3855
3856   remote_add_inferior (fake_pid_p, ptid_get_pid (inferior_ptid), -1, 1);
3857
3858   /* Add the main thread.  */
3859   add_thread_silent (inferior_ptid);
3860 }
3861
3862 /* Print info about a thread that was found already stopped on
3863    connection.  */
3864
3865 static void
3866 print_one_stopped_thread (struct thread_info *thread)
3867 {
3868   struct target_waitstatus *ws = &thread->suspend.waitstatus;
3869
3870   switch_to_thread (thread->ptid);
3871   stop_pc = get_frame_pc (get_current_frame ());
3872   set_current_sal_from_frame (get_current_frame ());
3873
3874   thread->suspend.waitstatus_pending_p = 0;
3875
3876   if (ws->kind == TARGET_WAITKIND_STOPPED)
3877     {
3878       enum gdb_signal sig = ws->value.sig;
3879
3880       if (signal_print_state (sig))
3881         observer_notify_signal_received (sig);
3882     }
3883   observer_notify_normal_stop (NULL, 1);
3884 }
3885
3886 /* Process all initial stop replies the remote side sent in response
3887    to the ? packet.  These indicate threads that were already stopped
3888    on initial connection.  We mark these threads as stopped and print
3889    their current frame before giving the user the prompt.  */
3890
3891 static void
3892 process_initial_stop_replies (int from_tty)
3893 {
3894   int pending_stop_replies = stop_reply_queue_length ();
3895   struct inferior *inf;
3896   struct thread_info *thread;
3897   struct thread_info *selected = NULL;
3898   struct thread_info *lowest_stopped = NULL;
3899   struct thread_info *first = NULL;
3900
3901   /* Consume the initial pending events.  */
3902   while (pending_stop_replies-- > 0)
3903     {
3904       ptid_t waiton_ptid = minus_one_ptid;
3905       ptid_t event_ptid;
3906       struct target_waitstatus ws;
3907       int ignore_event = 0;
3908       struct thread_info *thread;
3909
3910       memset (&ws, 0, sizeof (ws));
3911       event_ptid = target_wait (waiton_ptid, &ws, TARGET_WNOHANG);
3912       if (remote_debug)
3913         print_target_wait_results (waiton_ptid, event_ptid, &ws);
3914
3915       switch (ws.kind)
3916         {
3917         case TARGET_WAITKIND_IGNORE:
3918         case TARGET_WAITKIND_NO_RESUMED:
3919         case TARGET_WAITKIND_SIGNALLED:
3920         case TARGET_WAITKIND_EXITED:
3921           /* We shouldn't see these, but if we do, just ignore.  */
3922           if (remote_debug)
3923             fprintf_unfiltered (gdb_stdlog, "remote: event ignored\n");
3924           ignore_event = 1;
3925           break;
3926
3927         case TARGET_WAITKIND_EXECD:
3928           xfree (ws.value.execd_pathname);
3929           break;
3930         default:
3931           break;
3932         }
3933
3934       if (ignore_event)
3935         continue;
3936
3937       thread = find_thread_ptid (event_ptid);
3938
3939       if (ws.kind == TARGET_WAITKIND_STOPPED)
3940         {
3941           enum gdb_signal sig = ws.value.sig;
3942
3943           /* Stubs traditionally report SIGTRAP as initial signal,
3944              instead of signal 0.  Suppress it.  */
3945           if (sig == GDB_SIGNAL_TRAP)
3946             sig = GDB_SIGNAL_0;
3947           thread->suspend.stop_signal = sig;
3948           ws.value.sig = sig;
3949         }
3950
3951       thread->suspend.waitstatus = ws;
3952
3953       if (ws.kind != TARGET_WAITKIND_STOPPED
3954           || ws.value.sig != GDB_SIGNAL_0)
3955         thread->suspend.waitstatus_pending_p = 1;
3956
3957       set_executing (event_ptid, 0);
3958       set_running (event_ptid, 0);
3959       thread->priv->vcont_resumed = 0;
3960     }
3961
3962   /* "Notice" the new inferiors before anything related to
3963      registers/memory.  */
3964   ALL_INFERIORS (inf)
3965     {
3966       if (inf->pid == 0)
3967         continue;
3968
3969       inf->needs_setup = 1;
3970
3971       if (non_stop)
3972         {
3973           thread = any_live_thread_of_process (inf->pid);
3974           notice_new_inferior (thread->ptid,
3975                                thread->state == THREAD_RUNNING,
3976                                from_tty);
3977         }
3978     }
3979
3980   /* If all-stop on top of non-stop, pause all threads.  Note this
3981      records the threads' stop pc, so must be done after "noticing"
3982      the inferiors.  */
3983   if (!non_stop)
3984     {
3985       stop_all_threads ();
3986
3987       /* If all threads of an inferior were already stopped, we
3988          haven't setup the inferior yet.  */
3989       ALL_INFERIORS (inf)
3990         {
3991           if (inf->pid == 0)
3992             continue;
3993
3994           if (inf->needs_setup)
3995             {
3996               thread = any_live_thread_of_process (inf->pid);
3997               switch_to_thread_no_regs (thread);
3998               setup_inferior (0);
3999             }
4000         }
4001     }
4002
4003   /* Now go over all threads that are stopped, and print their current
4004      frame.  If all-stop, then if there's a signalled thread, pick
4005      that as current.  */
4006   ALL_NON_EXITED_THREADS (thread)
4007     {
4008       if (first == NULL)
4009         first = thread;
4010
4011       if (!non_stop)
4012         set_running (thread->ptid, 0);
4013       else if (thread->state != THREAD_STOPPED)
4014         continue;
4015
4016       if (selected == NULL
4017           && thread->suspend.waitstatus_pending_p)
4018         selected = thread;
4019
4020       if (lowest_stopped == NULL
4021           || thread->inf->num < lowest_stopped->inf->num
4022           || thread->per_inf_num < lowest_stopped->per_inf_num)
4023         lowest_stopped = thread;
4024
4025       if (non_stop)
4026         print_one_stopped_thread (thread);
4027     }
4028
4029   /* In all-stop, we only print the status of one thread, and leave
4030      others with their status pending.  */
4031   if (!non_stop)
4032     {
4033       thread = selected;
4034       if (thread == NULL)
4035         thread = lowest_stopped;
4036       if (thread == NULL)
4037         thread = first;
4038
4039       print_one_stopped_thread (thread);
4040     }
4041
4042   /* For "info program".  */
4043   thread = inferior_thread ();
4044   if (thread->state == THREAD_STOPPED)
4045     set_last_target_status (inferior_ptid, thread->suspend.waitstatus);
4046 }
4047
4048 /* Start the remote connection and sync state.  */
4049
4050 static void
4051 remote_start_remote (int from_tty, struct target_ops *target, int extended_p)
4052 {
4053   struct remote_state *rs = get_remote_state ();
4054   struct packet_config *noack_config;
4055   char *wait_status = NULL;
4056
4057   /* Signal other parts that we're going through the initial setup,
4058      and so things may not be stable yet.  E.g., we don't try to
4059      install tracepoints until we've relocated symbols.  Also, a
4060      Ctrl-C before we're connected and synced up can't interrupt the
4061      target.  Instead, it offers to drop the (potentially wedged)
4062      connection.  */
4063   rs->starting_up = 1;
4064
4065   QUIT;
4066
4067   if (interrupt_on_connect)
4068     send_interrupt_sequence ();
4069
4070   /* Ack any packet which the remote side has already sent.  */
4071   remote_serial_write ("+", 1);
4072
4073   /* The first packet we send to the target is the optional "supported
4074      packets" request.  If the target can answer this, it will tell us
4075      which later probes to skip.  */
4076   remote_query_supported ();
4077
4078   /* If the stub wants to get a QAllow, compose one and send it.  */
4079   if (packet_support (PACKET_QAllow) != PACKET_DISABLE)
4080     remote_set_permissions (target);
4081
4082   /* gdbserver < 7.7 (before its fix from 2013-12-11) did reply to any
4083      unknown 'v' packet with string "OK".  "OK" gets interpreted by GDB
4084      as a reply to known packet.  For packet "vFile:setfs:" it is an
4085      invalid reply and GDB would return error in
4086      remote_hostio_set_filesystem, making remote files access impossible.
4087      Disable "vFile:setfs:" in such case.  Do not disable other 'v' packets as
4088      other "vFile" packets get correctly detected even on gdbserver < 7.7.  */
4089   {
4090     const char v_mustreplyempty[] = "vMustReplyEmpty";
4091
4092     putpkt (v_mustreplyempty);
4093     getpkt (&rs->buf, &rs->buf_size, 0);
4094     if (strcmp (rs->buf, "OK") == 0)
4095       remote_protocol_packets[PACKET_vFile_setfs].support = PACKET_DISABLE;
4096     else if (strcmp (rs->buf, "") != 0)
4097       error (_("Remote replied unexpectedly to '%s': %s"), v_mustreplyempty,
4098              rs->buf);
4099   }
4100
4101   /* Next, we possibly activate noack mode.
4102
4103      If the QStartNoAckMode packet configuration is set to AUTO,
4104      enable noack mode if the stub reported a wish for it with
4105      qSupported.
4106
4107      If set to TRUE, then enable noack mode even if the stub didn't
4108      report it in qSupported.  If the stub doesn't reply OK, the
4109      session ends with an error.
4110
4111      If FALSE, then don't activate noack mode, regardless of what the
4112      stub claimed should be the default with qSupported.  */
4113
4114   noack_config = &remote_protocol_packets[PACKET_QStartNoAckMode];
4115   if (packet_config_support (noack_config) != PACKET_DISABLE)
4116     {
4117       putpkt ("QStartNoAckMode");
4118       getpkt (&rs->buf, &rs->buf_size, 0);
4119       if (packet_ok (rs->buf, noack_config) == PACKET_OK)
4120         rs->noack_mode = 1;
4121     }
4122
4123   if (extended_p)
4124     {
4125       /* Tell the remote that we are using the extended protocol.  */
4126       putpkt ("!");
4127       getpkt (&rs->buf, &rs->buf_size, 0);
4128     }
4129
4130   /* Let the target know which signals it is allowed to pass down to
4131      the program.  */
4132   update_signals_program_target ();
4133
4134   /* Next, if the target can specify a description, read it.  We do
4135      this before anything involving memory or registers.  */
4136   target_find_description ();
4137
4138   /* Next, now that we know something about the target, update the
4139      address spaces in the program spaces.  */
4140   update_address_spaces ();
4141
4142   /* On OSs where the list of libraries is global to all
4143      processes, we fetch them early.  */
4144   if (gdbarch_has_global_solist (target_gdbarch ()))
4145     solib_add (NULL, from_tty, target, auto_solib_add);
4146
4147   if (target_is_non_stop_p ())
4148     {
4149       if (packet_support (PACKET_QNonStop) != PACKET_ENABLE)
4150         error (_("Non-stop mode requested, but remote "
4151                  "does not support non-stop"));
4152
4153       putpkt ("QNonStop:1");
4154       getpkt (&rs->buf, &rs->buf_size, 0);
4155
4156       if (strcmp (rs->buf, "OK") != 0)
4157         error (_("Remote refused setting non-stop mode with: %s"), rs->buf);
4158
4159       /* Find about threads and processes the stub is already
4160          controlling.  We default to adding them in the running state.
4161          The '?' query below will then tell us about which threads are
4162          stopped.  */
4163       remote_update_thread_list (target);
4164     }
4165   else if (packet_support (PACKET_QNonStop) == PACKET_ENABLE)
4166     {
4167       /* Don't assume that the stub can operate in all-stop mode.
4168          Request it explicitly.  */
4169       putpkt ("QNonStop:0");
4170       getpkt (&rs->buf, &rs->buf_size, 0);
4171
4172       if (strcmp (rs->buf, "OK") != 0)
4173         error (_("Remote refused setting all-stop mode with: %s"), rs->buf);
4174     }
4175
4176   /* Upload TSVs regardless of whether the target is running or not.  The
4177      remote stub, such as GDBserver, may have some predefined or builtin
4178      TSVs, even if the target is not running.  */
4179   if (remote_get_trace_status (target, current_trace_status ()) != -1)
4180     {
4181       struct uploaded_tsv *uploaded_tsvs = NULL;
4182
4183       remote_upload_trace_state_variables (target, &uploaded_tsvs);
4184       merge_uploaded_trace_state_variables (&uploaded_tsvs);
4185     }
4186
4187   /* Check whether the target is running now.  */
4188   putpkt ("?");
4189   getpkt (&rs->buf, &rs->buf_size, 0);
4190
4191   if (!target_is_non_stop_p ())
4192     {
4193       if (rs->buf[0] == 'W' || rs->buf[0] == 'X')
4194         {
4195           if (!extended_p)
4196             error (_("The target is not running (try extended-remote?)"));
4197
4198           /* We're connected, but not running.  Drop out before we
4199              call start_remote.  */
4200           rs->starting_up = 0;
4201           return;
4202         }
4203       else
4204         {
4205           /* Save the reply for later.  */
4206           wait_status = (char *) alloca (strlen (rs->buf) + 1);
4207           strcpy (wait_status, rs->buf);
4208         }
4209
4210       /* Fetch thread list.  */
4211       target_update_thread_list ();
4212
4213       /* Let the stub know that we want it to return the thread.  */
4214       set_continue_thread (minus_one_ptid);
4215
4216       if (thread_count () == 0)
4217         {
4218           /* Target has no concept of threads at all.  GDB treats
4219              non-threaded target as single-threaded; add a main
4220              thread.  */
4221           add_current_inferior_and_thread (wait_status);
4222         }
4223       else
4224         {
4225           /* We have thread information; select the thread the target
4226              says should be current.  If we're reconnecting to a
4227              multi-threaded program, this will ideally be the thread
4228              that last reported an event before GDB disconnected.  */
4229           inferior_ptid = get_current_thread (wait_status);
4230           if (ptid_equal (inferior_ptid, null_ptid))
4231             {
4232               /* Odd... The target was able to list threads, but not
4233                  tell us which thread was current (no "thread"
4234                  register in T stop reply?).  Just pick the first
4235                  thread in the thread list then.  */
4236               
4237               if (remote_debug)
4238                 fprintf_unfiltered (gdb_stdlog,
4239                                     "warning: couldn't determine remote "
4240                                     "current thread; picking first in list.\n");
4241
4242               inferior_ptid = thread_list->ptid;
4243             }
4244         }
4245
4246       /* init_wait_for_inferior should be called before get_offsets in order
4247          to manage `inserted' flag in bp loc in a correct state.
4248          breakpoint_init_inferior, called from init_wait_for_inferior, set
4249          `inserted' flag to 0, while before breakpoint_re_set, called from
4250          start_remote, set `inserted' flag to 1.  In the initialization of
4251          inferior, breakpoint_init_inferior should be called first, and then
4252          breakpoint_re_set can be called.  If this order is broken, state of
4253          `inserted' flag is wrong, and cause some problems on breakpoint
4254          manipulation.  */
4255       init_wait_for_inferior ();
4256
4257       get_offsets ();           /* Get text, data & bss offsets.  */
4258
4259       /* If we could not find a description using qXfer, and we know
4260          how to do it some other way, try again.  This is not
4261          supported for non-stop; it could be, but it is tricky if
4262          there are no stopped threads when we connect.  */
4263       if (remote_read_description_p (target)
4264           && gdbarch_target_desc (target_gdbarch ()) == NULL)
4265         {
4266           target_clear_description ();
4267           target_find_description ();
4268         }
4269
4270       /* Use the previously fetched status.  */
4271       gdb_assert (wait_status != NULL);
4272       strcpy (rs->buf, wait_status);
4273       rs->cached_wait_status = 1;
4274
4275       start_remote (from_tty); /* Initialize gdb process mechanisms.  */
4276     }
4277   else
4278     {
4279       /* Clear WFI global state.  Do this before finding about new
4280          threads and inferiors, and setting the current inferior.
4281          Otherwise we would clear the proceed status of the current
4282          inferior when we want its stop_soon state to be preserved
4283          (see notice_new_inferior).  */
4284       init_wait_for_inferior ();
4285
4286       /* In non-stop, we will either get an "OK", meaning that there
4287          are no stopped threads at this time; or, a regular stop
4288          reply.  In the latter case, there may be more than one thread
4289          stopped --- we pull them all out using the vStopped
4290          mechanism.  */
4291       if (strcmp (rs->buf, "OK") != 0)
4292         {
4293           struct notif_client *notif = &notif_client_stop;
4294
4295           /* remote_notif_get_pending_replies acks this one, and gets
4296              the rest out.  */
4297           rs->notif_state->pending_event[notif_client_stop.id]
4298             = remote_notif_parse (notif, rs->buf);
4299           remote_notif_get_pending_events (notif);
4300         }
4301
4302       if (thread_count () == 0)
4303         {
4304           if (!extended_p)
4305             error (_("The target is not running (try extended-remote?)"));
4306
4307           /* We're connected, but not running.  Drop out before we
4308              call start_remote.  */
4309           rs->starting_up = 0;
4310           return;
4311         }
4312
4313       /* In non-stop mode, any cached wait status will be stored in
4314          the stop reply queue.  */
4315       gdb_assert (wait_status == NULL);
4316
4317       /* Report all signals during attach/startup.  */
4318       remote_pass_signals (target, 0, NULL);
4319
4320       /* If there are already stopped threads, mark them stopped and
4321          report their stops before giving the prompt to the user.  */
4322       process_initial_stop_replies (from_tty);
4323
4324       if (target_can_async_p ())
4325         target_async (1);
4326     }
4327
4328   /* If we connected to a live target, do some additional setup.  */
4329   if (target_has_execution)
4330     {
4331       if (symfile_objfile)      /* No use without a symbol-file.  */
4332         remote_check_symbols ();
4333     }
4334
4335   /* Possibly the target has been engaged in a trace run started
4336      previously; find out where things are at.  */
4337   if (remote_get_trace_status (target, current_trace_status ()) != -1)
4338     {
4339       struct uploaded_tp *uploaded_tps = NULL;
4340
4341       if (current_trace_status ()->running)
4342         printf_filtered (_("Trace is already running on the target.\n"));
4343
4344       remote_upload_tracepoints (target, &uploaded_tps);
4345
4346       merge_uploaded_tracepoints (&uploaded_tps);
4347     }
4348
4349   /* Possibly the target has been engaged in a btrace record started
4350      previously; find out where things are at.  */
4351   remote_btrace_maybe_reopen ();
4352
4353   /* The thread and inferior lists are now synchronized with the
4354      target, our symbols have been relocated, and we're merged the
4355      target's tracepoints with ours.  We're done with basic start
4356      up.  */
4357   rs->starting_up = 0;
4358
4359   /* Maybe breakpoints are global and need to be inserted now.  */
4360   if (breakpoints_should_be_inserted_now ())
4361     insert_breakpoints ();
4362 }
4363
4364 /* Open a connection to a remote debugger.
4365    NAME is the filename used for communication.  */
4366
4367 static void
4368 remote_open (const char *name, int from_tty)
4369 {
4370   remote_open_1 (name, from_tty, &remote_ops, 0);
4371 }
4372
4373 /* Open a connection to a remote debugger using the extended
4374    remote gdb protocol.  NAME is the filename used for communication.  */
4375
4376 static void
4377 extended_remote_open (const char *name, int from_tty)
4378 {
4379   remote_open_1 (name, from_tty, &extended_remote_ops, 1 /*extended_p */);
4380 }
4381
4382 /* Reset all packets back to "unknown support".  Called when opening a
4383    new connection to a remote target.  */
4384
4385 static void
4386 reset_all_packet_configs_support (void)
4387 {
4388   int i;
4389
4390   for (i = 0; i < PACKET_MAX; i++)
4391     remote_protocol_packets[i].support = PACKET_SUPPORT_UNKNOWN;
4392 }
4393
4394 /* Initialize all packet configs.  */
4395
4396 static void
4397 init_all_packet_configs (void)
4398 {
4399   int i;
4400
4401   for (i = 0; i < PACKET_MAX; i++)
4402     {
4403       remote_protocol_packets[i].detect = AUTO_BOOLEAN_AUTO;
4404       remote_protocol_packets[i].support = PACKET_SUPPORT_UNKNOWN;
4405     }
4406 }
4407
4408 /* Symbol look-up.  */
4409
4410 static void
4411 remote_check_symbols (void)
4412 {
4413   struct remote_state *rs = get_remote_state ();
4414   char *msg, *reply, *tmp;
4415   int end;
4416   long reply_size;
4417   struct cleanup *old_chain;
4418
4419   /* The remote side has no concept of inferiors that aren't running
4420      yet, it only knows about running processes.  If we're connected
4421      but our current inferior is not running, we should not invite the
4422      remote target to request symbol lookups related to its
4423      (unrelated) current process.  */
4424   if (!target_has_execution)
4425     return;
4426
4427   if (packet_support (PACKET_qSymbol) == PACKET_DISABLE)
4428     return;
4429
4430   /* Make sure the remote is pointing at the right process.  Note
4431      there's no way to select "no process".  */
4432   set_general_process ();
4433
4434   /* Allocate a message buffer.  We can't reuse the input buffer in RS,
4435      because we need both at the same time.  */
4436   msg = (char *) xmalloc (get_remote_packet_size ());
4437   old_chain = make_cleanup (xfree, msg);
4438   reply = (char *) xmalloc (get_remote_packet_size ());
4439   make_cleanup (free_current_contents, &reply);
4440   reply_size = get_remote_packet_size ();
4441
4442   /* Invite target to request symbol lookups.  */
4443
4444   putpkt ("qSymbol::");
4445   getpkt (&reply, &reply_size, 0);
4446   packet_ok (reply, &remote_protocol_packets[PACKET_qSymbol]);
4447
4448   while (startswith (reply, "qSymbol:"))
4449     {
4450       struct bound_minimal_symbol sym;
4451
4452       tmp = &reply[8];
4453       end = hex2bin (tmp, (gdb_byte *) msg, strlen (tmp) / 2);
4454       msg[end] = '\0';
4455       sym = lookup_minimal_symbol (msg, NULL, NULL);
4456       if (sym.minsym == NULL)
4457         xsnprintf (msg, get_remote_packet_size (), "qSymbol::%s", &reply[8]);
4458       else
4459         {
4460           int addr_size = gdbarch_addr_bit (target_gdbarch ()) / 8;
4461           CORE_ADDR sym_addr = BMSYMBOL_VALUE_ADDRESS (sym);
4462
4463           /* If this is a function address, return the start of code
4464              instead of any data function descriptor.  */
4465           sym_addr = gdbarch_convert_from_func_ptr_addr (target_gdbarch (),
4466                                                          sym_addr,
4467                                                          &current_target);
4468
4469           xsnprintf (msg, get_remote_packet_size (), "qSymbol:%s:%s",
4470                      phex_nz (sym_addr, addr_size), &reply[8]);
4471         }
4472   
4473       putpkt (msg);
4474       getpkt (&reply, &reply_size, 0);
4475     }
4476
4477   do_cleanups (old_chain);
4478 }
4479
4480 static struct serial *
4481 remote_serial_open (const char *name)
4482 {
4483   static int udp_warning = 0;
4484
4485   /* FIXME: Parsing NAME here is a hack.  But we want to warn here instead
4486      of in ser-tcp.c, because it is the remote protocol assuming that the
4487      serial connection is reliable and not the serial connection promising
4488      to be.  */
4489   if (!udp_warning && startswith (name, "udp:"))
4490     {
4491       warning (_("The remote protocol may be unreliable over UDP.\n"
4492                  "Some events may be lost, rendering further debugging "
4493                  "impossible."));
4494       udp_warning = 1;
4495     }
4496
4497   return serial_open (name);
4498 }
4499
4500 /* Inform the target of our permission settings.  The permission flags
4501    work without this, but if the target knows the settings, it can do
4502    a couple things.  First, it can add its own check, to catch cases
4503    that somehow manage to get by the permissions checks in target
4504    methods.  Second, if the target is wired to disallow particular
4505    settings (for instance, a system in the field that is not set up to
4506    be able to stop at a breakpoint), it can object to any unavailable
4507    permissions.  */
4508
4509 void
4510 remote_set_permissions (struct target_ops *self)
4511 {
4512   struct remote_state *rs = get_remote_state ();
4513
4514   xsnprintf (rs->buf, get_remote_packet_size (), "QAllow:"
4515              "WriteReg:%x;WriteMem:%x;"
4516              "InsertBreak:%x;InsertTrace:%x;"
4517              "InsertFastTrace:%x;Stop:%x",
4518              may_write_registers, may_write_memory,
4519              may_insert_breakpoints, may_insert_tracepoints,
4520              may_insert_fast_tracepoints, may_stop);
4521   putpkt (rs->buf);
4522   getpkt (&rs->buf, &rs->buf_size, 0);
4523
4524   /* If the target didn't like the packet, warn the user.  Do not try
4525      to undo the user's settings, that would just be maddening.  */
4526   if (strcmp (rs->buf, "OK") != 0)
4527     warning (_("Remote refused setting permissions with: %s"), rs->buf);
4528 }
4529
4530 /* This type describes each known response to the qSupported
4531    packet.  */
4532 struct protocol_feature
4533 {
4534   /* The name of this protocol feature.  */
4535   const char *name;
4536
4537   /* The default for this protocol feature.  */
4538   enum packet_support default_support;
4539
4540   /* The function to call when this feature is reported, or after
4541      qSupported processing if the feature is not supported.
4542      The first argument points to this structure.  The second
4543      argument indicates whether the packet requested support be
4544      enabled, disabled, or probed (or the default, if this function
4545      is being called at the end of processing and this feature was
4546      not reported).  The third argument may be NULL; if not NULL, it
4547      is a NUL-terminated string taken from the packet following
4548      this feature's name and an equals sign.  */
4549   void (*func) (const struct protocol_feature *, enum packet_support,
4550                 const char *);
4551
4552   /* The corresponding packet for this feature.  Only used if
4553      FUNC is remote_supported_packet.  */
4554   int packet;
4555 };
4556
4557 static void
4558 remote_supported_packet (const struct protocol_feature *feature,
4559                          enum packet_support support,
4560                          const char *argument)
4561 {
4562   if (argument)
4563     {
4564       warning (_("Remote qSupported response supplied an unexpected value for"
4565                  " \"%s\"."), feature->name);
4566       return;
4567     }
4568
4569   remote_protocol_packets[feature->packet].support = support;
4570 }
4571
4572 static void
4573 remote_packet_size (const struct protocol_feature *feature,
4574                     enum packet_support support, const char *value)
4575 {
4576   struct remote_state *rs = get_remote_state ();
4577
4578   int packet_size;
4579   char *value_end;
4580
4581   if (support != PACKET_ENABLE)
4582     return;
4583
4584   if (value == NULL || *value == '\0')
4585     {
4586       warning (_("Remote target reported \"%s\" without a size."),
4587                feature->name);
4588       return;
4589     }
4590
4591   errno = 0;
4592   packet_size = strtol (value, &value_end, 16);
4593   if (errno != 0 || *value_end != '\0' || packet_size < 0)
4594     {
4595       warning (_("Remote target reported \"%s\" with a bad size: \"%s\"."),
4596                feature->name, value);
4597       return;
4598     }
4599
4600   /* Record the new maximum packet size.  */
4601   rs->explicit_packet_size = packet_size;
4602 }
4603
4604 static const struct protocol_feature remote_protocol_features[] = {
4605   { "PacketSize", PACKET_DISABLE, remote_packet_size, -1 },
4606   { "qXfer:auxv:read", PACKET_DISABLE, remote_supported_packet,
4607     PACKET_qXfer_auxv },
4608   { "qXfer:exec-file:read", PACKET_DISABLE, remote_supported_packet,
4609     PACKET_qXfer_exec_file },
4610   { "qXfer:features:read", PACKET_DISABLE, remote_supported_packet,
4611     PACKET_qXfer_features },
4612   { "qXfer:libraries:read", PACKET_DISABLE, remote_supported_packet,
4613     PACKET_qXfer_libraries },
4614   { "qXfer:libraries-svr4:read", PACKET_DISABLE, remote_supported_packet,
4615     PACKET_qXfer_libraries_svr4 },
4616   { "augmented-libraries-svr4-read", PACKET_DISABLE,
4617     remote_supported_packet, PACKET_augmented_libraries_svr4_read_feature },
4618   { "qXfer:memory-map:read", PACKET_DISABLE, remote_supported_packet,
4619     PACKET_qXfer_memory_map },
4620   { "qXfer:spu:read", PACKET_DISABLE, remote_supported_packet,
4621     PACKET_qXfer_spu_read },
4622   { "qXfer:spu:write", PACKET_DISABLE, remote_supported_packet,
4623     PACKET_qXfer_spu_write },
4624   { "qXfer:osdata:read", PACKET_DISABLE, remote_supported_packet,
4625     PACKET_qXfer_osdata },
4626   { "qXfer:threads:read", PACKET_DISABLE, remote_supported_packet,
4627     PACKET_qXfer_threads },
4628   { "qXfer:traceframe-info:read", PACKET_DISABLE, remote_supported_packet,
4629     PACKET_qXfer_traceframe_info },
4630   { "QPassSignals", PACKET_DISABLE, remote_supported_packet,
4631     PACKET_QPassSignals },
4632   { "QCatchSyscalls", PACKET_DISABLE, remote_supported_packet,
4633     PACKET_QCatchSyscalls },
4634   { "QProgramSignals", PACKET_DISABLE, remote_supported_packet,
4635     PACKET_QProgramSignals },
4636   { "QStartNoAckMode", PACKET_DISABLE, remote_supported_packet,
4637     PACKET_QStartNoAckMode },
4638   { "multiprocess", PACKET_DISABLE, remote_supported_packet,
4639     PACKET_multiprocess_feature },
4640   { "QNonStop", PACKET_DISABLE, remote_supported_packet, PACKET_QNonStop },
4641   { "qXfer:siginfo:read", PACKET_DISABLE, remote_supported_packet,
4642     PACKET_qXfer_siginfo_read },
4643   { "qXfer:siginfo:write", PACKET_DISABLE, remote_supported_packet,
4644     PACKET_qXfer_siginfo_write },
4645   { "ConditionalTracepoints", PACKET_DISABLE, remote_supported_packet,
4646     PACKET_ConditionalTracepoints },
4647   { "ConditionalBreakpoints", PACKET_DISABLE, remote_supported_packet,
4648     PACKET_ConditionalBreakpoints },
4649   { "BreakpointCommands", PACKET_DISABLE, remote_supported_packet,
4650     PACKET_BreakpointCommands },
4651   { "FastTracepoints", PACKET_DISABLE, remote_supported_packet,
4652     PACKET_FastTracepoints },
4653   { "StaticTracepoints", PACKET_DISABLE, remote_supported_packet,
4654     PACKET_StaticTracepoints },
4655   {"InstallInTrace", PACKET_DISABLE, remote_supported_packet,
4656    PACKET_InstallInTrace},
4657   { "DisconnectedTracing", PACKET_DISABLE, remote_supported_packet,
4658     PACKET_DisconnectedTracing_feature },
4659   { "ReverseContinue", PACKET_DISABLE, remote_supported_packet,
4660     PACKET_bc },
4661   { "ReverseStep", PACKET_DISABLE, remote_supported_packet,
4662     PACKET_bs },
4663   { "TracepointSource", PACKET_DISABLE, remote_supported_packet,
4664     PACKET_TracepointSource },
4665   { "QAllow", PACKET_DISABLE, remote_supported_packet,
4666     PACKET_QAllow },
4667   { "EnableDisableTracepoints", PACKET_DISABLE, remote_supported_packet,
4668     PACKET_EnableDisableTracepoints_feature },
4669   { "qXfer:fdpic:read", PACKET_DISABLE, remote_supported_packet,
4670     PACKET_qXfer_fdpic },
4671   { "qXfer:uib:read", PACKET_DISABLE, remote_supported_packet,
4672     PACKET_qXfer_uib },
4673   { "QDisableRandomization", PACKET_DISABLE, remote_supported_packet,
4674     PACKET_QDisableRandomization },
4675   { "QAgent", PACKET_DISABLE, remote_supported_packet, PACKET_QAgent},
4676   { "QTBuffer:size", PACKET_DISABLE,
4677     remote_supported_packet, PACKET_QTBuffer_size},
4678   { "tracenz", PACKET_DISABLE, remote_supported_packet, PACKET_tracenz_feature },
4679   { "Qbtrace:off", PACKET_DISABLE, remote_supported_packet, PACKET_Qbtrace_off },
4680   { "Qbtrace:bts", PACKET_DISABLE, remote_supported_packet, PACKET_Qbtrace_bts },
4681   { "Qbtrace:pt", PACKET_DISABLE, remote_supported_packet, PACKET_Qbtrace_pt },
4682   { "qXfer:btrace:read", PACKET_DISABLE, remote_supported_packet,
4683     PACKET_qXfer_btrace },
4684   { "qXfer:btrace-conf:read", PACKET_DISABLE, remote_supported_packet,
4685     PACKET_qXfer_btrace_conf },
4686   { "Qbtrace-conf:bts:size", PACKET_DISABLE, remote_supported_packet,
4687     PACKET_Qbtrace_conf_bts_size },
4688   { "swbreak", PACKET_DISABLE, remote_supported_packet, PACKET_swbreak_feature },
4689   { "hwbreak", PACKET_DISABLE, remote_supported_packet, PACKET_hwbreak_feature },
4690   { "fork-events", PACKET_DISABLE, remote_supported_packet,
4691     PACKET_fork_event_feature },
4692   { "vfork-events", PACKET_DISABLE, remote_supported_packet,
4693     PACKET_vfork_event_feature },
4694   { "exec-events", PACKET_DISABLE, remote_supported_packet,
4695     PACKET_exec_event_feature },
4696   { "Qbtrace-conf:pt:size", PACKET_DISABLE, remote_supported_packet,
4697     PACKET_Qbtrace_conf_pt_size },
4698   { "vContSupported", PACKET_DISABLE, remote_supported_packet, PACKET_vContSupported },
4699   { "QThreadEvents", PACKET_DISABLE, remote_supported_packet, PACKET_QThreadEvents },
4700   { "no-resumed", PACKET_DISABLE, remote_supported_packet, PACKET_no_resumed },
4701 };
4702
4703 static char *remote_support_xml;
4704
4705 /* Register string appended to "xmlRegisters=" in qSupported query.  */
4706
4707 void
4708 register_remote_support_xml (const char *xml)
4709 {
4710 #if defined(HAVE_LIBEXPAT)
4711   if (remote_support_xml == NULL)
4712     remote_support_xml = concat ("xmlRegisters=", xml, (char *) NULL);
4713   else
4714     {
4715       char *copy = xstrdup (remote_support_xml + 13);
4716       char *p = strtok (copy, ",");
4717
4718       do
4719         {
4720           if (strcmp (p, xml) == 0)
4721             {
4722               /* already there */
4723               xfree (copy);
4724               return;
4725             }
4726         }
4727       while ((p = strtok (NULL, ",")) != NULL);
4728       xfree (copy);
4729
4730       remote_support_xml = reconcat (remote_support_xml,
4731                                      remote_support_xml, ",", xml,
4732                                      (char *) NULL);
4733     }
4734 #endif
4735 }
4736
4737 static char *
4738 remote_query_supported_append (char *msg, const char *append)
4739 {
4740   if (msg)
4741     return reconcat (msg, msg, ";", append, (char *) NULL);
4742   else
4743     return xstrdup (append);
4744 }
4745
4746 static void
4747 remote_query_supported (void)
4748 {
4749   struct remote_state *rs = get_remote_state ();
4750   char *next;
4751   int i;
4752   unsigned char seen [ARRAY_SIZE (remote_protocol_features)];
4753
4754   /* The packet support flags are handled differently for this packet
4755      than for most others.  We treat an error, a disabled packet, and
4756      an empty response identically: any features which must be reported
4757      to be used will be automatically disabled.  An empty buffer
4758      accomplishes this, since that is also the representation for a list
4759      containing no features.  */
4760
4761   rs->buf[0] = 0;
4762   if (packet_support (PACKET_qSupported) != PACKET_DISABLE)
4763     {
4764       char *q = NULL;
4765       struct cleanup *old_chain = make_cleanup (free_current_contents, &q);
4766
4767       if (packet_set_cmd_state (PACKET_multiprocess_feature) != AUTO_BOOLEAN_FALSE)
4768         q = remote_query_supported_append (q, "multiprocess+");
4769
4770       if (packet_set_cmd_state (PACKET_swbreak_feature) != AUTO_BOOLEAN_FALSE)
4771         q = remote_query_supported_append (q, "swbreak+");
4772       if (packet_set_cmd_state (PACKET_hwbreak_feature) != AUTO_BOOLEAN_FALSE)
4773         q = remote_query_supported_append (q, "hwbreak+");
4774
4775       q = remote_query_supported_append (q, "qRelocInsn+");
4776
4777       if (packet_set_cmd_state (PACKET_fork_event_feature)
4778           != AUTO_BOOLEAN_FALSE)
4779         q = remote_query_supported_append (q, "fork-events+");
4780       if (packet_set_cmd_state (PACKET_vfork_event_feature)
4781           != AUTO_BOOLEAN_FALSE)
4782         q = remote_query_supported_append (q, "vfork-events+");
4783       if (packet_set_cmd_state (PACKET_exec_event_feature)
4784           != AUTO_BOOLEAN_FALSE)
4785         q = remote_query_supported_append (q, "exec-events+");
4786
4787       if (packet_set_cmd_state (PACKET_vContSupported) != AUTO_BOOLEAN_FALSE)
4788         q = remote_query_supported_append (q, "vContSupported+");
4789
4790       if (packet_set_cmd_state (PACKET_QThreadEvents) != AUTO_BOOLEAN_FALSE)
4791         q = remote_query_supported_append (q, "QThreadEvents+");
4792
4793       if (packet_set_cmd_state (PACKET_no_resumed) != AUTO_BOOLEAN_FALSE)
4794         q = remote_query_supported_append (q, "no-resumed+");
4795
4796       /* Keep this one last to work around a gdbserver <= 7.10 bug in
4797          the qSupported:xmlRegisters=i386 handling.  */
4798       if (remote_support_xml != NULL)
4799         q = remote_query_supported_append (q, remote_support_xml);
4800
4801       q = reconcat (q, "qSupported:", q, (char *) NULL);
4802       putpkt (q);
4803
4804       do_cleanups (old_chain);
4805
4806       getpkt (&rs->buf, &rs->buf_size, 0);
4807
4808       /* If an error occured, warn, but do not return - just reset the
4809          buffer to empty and go on to disable features.  */
4810       if (packet_ok (rs->buf, &remote_protocol_packets[PACKET_qSupported])
4811           == PACKET_ERROR)
4812         {
4813           warning (_("Remote failure reply: %s"), rs->buf);
4814           rs->buf[0] = 0;
4815         }
4816     }
4817
4818   memset (seen, 0, sizeof (seen));
4819
4820   next = rs->buf;
4821   while (*next)
4822     {
4823       enum packet_support is_supported;
4824       char *p, *end, *name_end, *value;
4825
4826       /* First separate out this item from the rest of the packet.  If
4827          there's another item after this, we overwrite the separator
4828          (terminated strings are much easier to work with).  */
4829       p = next;
4830       end = strchr (p, ';');
4831       if (end == NULL)
4832         {
4833           end = p + strlen (p);
4834           next = end;
4835         }
4836       else
4837         {
4838           *end = '\0';
4839           next = end + 1;
4840
4841           if (end == p)
4842             {
4843               warning (_("empty item in \"qSupported\" response"));
4844               continue;
4845             }
4846         }
4847
4848       name_end = strchr (p, '=');
4849       if (name_end)
4850         {
4851           /* This is a name=value entry.  */
4852           is_supported = PACKET_ENABLE;
4853           value = name_end + 1;
4854           *name_end = '\0';
4855         }
4856       else
4857         {
4858           value = NULL;
4859           switch (end[-1])
4860             {
4861             case '+':
4862               is_supported = PACKET_ENABLE;
4863               break;
4864
4865             case '-':
4866               is_supported = PACKET_DISABLE;
4867               break;
4868
4869             case '?':
4870               is_supported = PACKET_SUPPORT_UNKNOWN;
4871               break;
4872
4873             default:
4874               warning (_("unrecognized item \"%s\" "
4875                          "in \"qSupported\" response"), p);
4876               continue;
4877             }
4878           end[-1] = '\0';
4879         }
4880
4881       for (i = 0; i < ARRAY_SIZE (remote_protocol_features); i++)
4882         if (strcmp (remote_protocol_features[i].name, p) == 0)
4883           {
4884             const struct protocol_feature *feature;
4885
4886             seen[i] = 1;
4887             feature = &remote_protocol_features[i];
4888             feature->func (feature, is_supported, value);
4889             break;
4890           }
4891     }
4892
4893   /* If we increased the packet size, make sure to increase the global
4894      buffer size also.  We delay this until after parsing the entire
4895      qSupported packet, because this is the same buffer we were
4896      parsing.  */
4897   if (rs->buf_size < rs->explicit_packet_size)
4898     {
4899       rs->buf_size = rs->explicit_packet_size;
4900       rs->buf = (char *) xrealloc (rs->buf, rs->buf_size);
4901     }
4902
4903   /* Handle the defaults for unmentioned features.  */
4904   for (i = 0; i < ARRAY_SIZE (remote_protocol_features); i++)
4905     if (!seen[i])
4906       {
4907         const struct protocol_feature *feature;
4908
4909         feature = &remote_protocol_features[i];
4910         feature->func (feature, feature->default_support, NULL);
4911       }
4912 }
4913
4914 /* Serial QUIT handler for the remote serial descriptor.
4915
4916    Defers handling a Ctrl-C until we're done with the current
4917    command/response packet sequence, unless:
4918
4919    - We're setting up the connection.  Don't send a remote interrupt
4920      request, as we're not fully synced yet.  Quit immediately
4921      instead.
4922
4923    - The target has been resumed in the foreground
4924      (target_terminal_is_ours is false) with a synchronous resume
4925      packet, and we're blocked waiting for the stop reply, thus a
4926      Ctrl-C should be immediately sent to the target.
4927
4928    - We get a second Ctrl-C while still within the same serial read or
4929      write.  In that case the serial is seemingly wedged --- offer to
4930      quit/disconnect.
4931
4932    - We see a second Ctrl-C without target response, after having
4933      previously interrupted the target.  In that case the target/stub
4934      is probably wedged --- offer to quit/disconnect.
4935 */
4936
4937 static void
4938 remote_serial_quit_handler (void)
4939 {
4940   struct remote_state *rs = get_remote_state ();
4941
4942   if (check_quit_flag ())
4943     {
4944       /* If we're starting up, we're not fully synced yet.  Quit
4945          immediately.  */
4946       if (rs->starting_up)
4947         quit ();
4948       else if (rs->got_ctrlc_during_io)
4949         {
4950           if (query (_("The target is not responding to GDB commands.\n"
4951                        "Stop debugging it? ")))
4952             remote_unpush_and_throw ();
4953         }
4954       /* If ^C has already been sent once, offer to disconnect.  */
4955       else if (!target_terminal_is_ours () && rs->ctrlc_pending_p)
4956         interrupt_query ();
4957       /* All-stop protocol, and blocked waiting for stop reply.  Send
4958          an interrupt request.  */
4959       else if (!target_terminal_is_ours () && rs->waiting_for_stop_reply)
4960         target_interrupt (inferior_ptid);
4961       else
4962         rs->got_ctrlc_during_io = 1;
4963     }
4964 }
4965
4966 /* Remove any of the remote.c targets from target stack.  Upper targets depend
4967    on it so remove them first.  */
4968
4969 static void
4970 remote_unpush_target (void)
4971 {
4972   pop_all_targets_at_and_above (process_stratum);
4973 }
4974
4975 static void
4976 remote_unpush_and_throw (void)
4977 {
4978   remote_unpush_target ();
4979   throw_error (TARGET_CLOSE_ERROR, _("Disconnected from target."));
4980 }
4981
4982 static void
4983 remote_open_1 (const char *name, int from_tty,
4984                struct target_ops *target, int extended_p)
4985 {
4986   struct remote_state *rs = get_remote_state ();
4987
4988   if (name == 0)
4989     error (_("To open a remote debug connection, you need to specify what\n"
4990            "serial device is attached to the remote system\n"
4991            "(e.g. /dev/ttyS0, /dev/ttya, COM1, etc.)."));
4992
4993   /* See FIXME above.  */
4994   if (!target_async_permitted)
4995     wait_forever_enabled_p = 1;
4996
4997   /* If we're connected to a running target, target_preopen will kill it.
4998      Ask this question first, before target_preopen has a chance to kill
4999      anything.  */
5000   if (rs->remote_desc != NULL && !have_inferiors ())
5001     {
5002       if (from_tty
5003           && !query (_("Already connected to a remote target.  Disconnect? ")))
5004         error (_("Still connected."));
5005     }
5006
5007   /* Here the possibly existing remote target gets unpushed.  */
5008   target_preopen (from_tty);
5009
5010   /* Make sure we send the passed signals list the next time we resume.  */
5011   xfree (rs->last_pass_packet);
5012   rs->last_pass_packet = NULL;
5013
5014   /* Make sure we send the program signals list the next time we
5015      resume.  */
5016   xfree (rs->last_program_signals_packet);
5017   rs->last_program_signals_packet = NULL;
5018
5019   remote_fileio_reset ();
5020   reopen_exec_file ();
5021   reread_symbols ();
5022
5023   rs->remote_desc = remote_serial_open (name);
5024   if (!rs->remote_desc)
5025     perror_with_name (name);
5026
5027   if (baud_rate != -1)
5028     {
5029       if (serial_setbaudrate (rs->remote_desc, baud_rate))
5030         {
5031           /* The requested speed could not be set.  Error out to
5032              top level after closing remote_desc.  Take care to
5033              set remote_desc to NULL to avoid closing remote_desc
5034              more than once.  */
5035           serial_close (rs->remote_desc);
5036           rs->remote_desc = NULL;
5037           perror_with_name (name);
5038         }
5039     }
5040
5041   serial_setparity (rs->remote_desc, serial_parity);
5042   serial_raw (rs->remote_desc);
5043
5044   /* If there is something sitting in the buffer we might take it as a
5045      response to a command, which would be bad.  */
5046   serial_flush_input (rs->remote_desc);
5047
5048   if (from_tty)
5049     {
5050       puts_filtered ("Remote debugging using ");
5051       puts_filtered (name);
5052       puts_filtered ("\n");
5053     }
5054   push_target (target);         /* Switch to using remote target now.  */
5055
5056   /* Register extra event sources in the event loop.  */
5057   remote_async_inferior_event_token
5058     = create_async_event_handler (remote_async_inferior_event_handler,
5059                                   NULL);
5060   rs->notif_state = remote_notif_state_allocate ();
5061
5062   /* Reset the target state; these things will be queried either by
5063      remote_query_supported or as they are needed.  */
5064   reset_all_packet_configs_support ();
5065   rs->cached_wait_status = 0;
5066   rs->explicit_packet_size = 0;
5067   rs->noack_mode = 0;
5068   rs->extended = extended_p;
5069   rs->waiting_for_stop_reply = 0;
5070   rs->ctrlc_pending_p = 0;
5071   rs->got_ctrlc_during_io = 0;
5072
5073   rs->general_thread = not_sent_ptid;
5074   rs->continue_thread = not_sent_ptid;
5075   rs->remote_traceframe_number = -1;
5076
5077   rs->last_resume_exec_dir = EXEC_FORWARD;
5078
5079   /* Probe for ability to use "ThreadInfo" query, as required.  */
5080   rs->use_threadinfo_query = 1;
5081   rs->use_threadextra_query = 1;
5082
5083   readahead_cache_invalidate ();
5084
5085   /* Start out by owning the terminal.  */
5086   remote_async_terminal_ours_p = 1;
5087
5088   if (target_async_permitted)
5089     {
5090       /* FIXME: cagney/1999-09-23: During the initial connection it is
5091          assumed that the target is already ready and able to respond to
5092          requests.  Unfortunately remote_start_remote() eventually calls
5093          wait_for_inferior() with no timeout.  wait_forever_enabled_p gets
5094          around this.  Eventually a mechanism that allows
5095          wait_for_inferior() to expect/get timeouts will be
5096          implemented.  */
5097       wait_forever_enabled_p = 0;
5098     }
5099
5100   /* First delete any symbols previously loaded from shared libraries.  */
5101   no_shared_libraries (NULL, 0);
5102
5103   /* Start afresh.  */
5104   init_thread_list ();
5105
5106   /* Start the remote connection.  If error() or QUIT, discard this
5107      target (we'd otherwise be in an inconsistent state) and then
5108      propogate the error on up the exception chain.  This ensures that
5109      the caller doesn't stumble along blindly assuming that the
5110      function succeeded.  The CLI doesn't have this problem but other
5111      UI's, such as MI do.
5112
5113      FIXME: cagney/2002-05-19: Instead of re-throwing the exception,
5114      this function should return an error indication letting the
5115      caller restore the previous state.  Unfortunately the command
5116      ``target remote'' is directly wired to this function making that
5117      impossible.  On a positive note, the CLI side of this problem has
5118      been fixed - the function set_cmd_context() makes it possible for
5119      all the ``target ....'' commands to share a common callback
5120      function.  See cli-dump.c.  */
5121   {
5122
5123     TRY
5124       {
5125         remote_start_remote (from_tty, target, extended_p);
5126       }
5127     CATCH (ex, RETURN_MASK_ALL)
5128       {
5129         /* Pop the partially set up target - unless something else did
5130            already before throwing the exception.  */
5131         if (rs->remote_desc != NULL)
5132           remote_unpush_target ();
5133         if (target_async_permitted)
5134           wait_forever_enabled_p = 1;
5135         throw_exception (ex);
5136       }
5137     END_CATCH
5138   }
5139
5140   remote_btrace_reset ();
5141
5142   if (target_async_permitted)
5143     wait_forever_enabled_p = 1;
5144 }
5145
5146 /* Detach the specified process.  */
5147
5148 static void
5149 remote_detach_pid (int pid)
5150 {
5151   struct remote_state *rs = get_remote_state ();
5152
5153   if (remote_multi_process_p (rs))
5154     xsnprintf (rs->buf, get_remote_packet_size (), "D;%x", pid);
5155   else
5156     strcpy (rs->buf, "D");
5157
5158   putpkt (rs->buf);
5159   getpkt (&rs->buf, &rs->buf_size, 0);
5160
5161   if (rs->buf[0] == 'O' && rs->buf[1] == 'K')
5162     ;
5163   else if (rs->buf[0] == '\0')
5164     error (_("Remote doesn't know how to detach"));
5165   else
5166     error (_("Can't detach process."));
5167 }
5168
5169 /* This detaches a program to which we previously attached, using
5170    inferior_ptid to identify the process.  After this is done, GDB
5171    can be used to debug some other program.  We better not have left
5172    any breakpoints in the target program or it'll die when it hits
5173    one.  */
5174
5175 static void
5176 remote_detach_1 (const char *args, int from_tty)
5177 {
5178   int pid = ptid_get_pid (inferior_ptid);
5179   struct remote_state *rs = get_remote_state ();
5180   struct thread_info *tp = find_thread_ptid (inferior_ptid);
5181   int is_fork_parent;
5182
5183   if (args)
5184     error (_("Argument given to \"detach\" when remotely debugging."));
5185
5186   if (!target_has_execution)
5187     error (_("No process to detach from."));
5188
5189   target_announce_detach (from_tty);
5190
5191   /* Tell the remote target to detach.  */
5192   remote_detach_pid (pid);
5193
5194   /* Exit only if this is the only active inferior.  */
5195   if (from_tty && !rs->extended && number_of_live_inferiors () == 1)
5196     puts_filtered (_("Ending remote debugging.\n"));
5197
5198   /* Check to see if we are detaching a fork parent.  Note that if we
5199      are detaching a fork child, tp == NULL.  */
5200   is_fork_parent = (tp != NULL
5201                     && tp->pending_follow.kind == TARGET_WAITKIND_FORKED);
5202
5203   /* If doing detach-on-fork, we don't mourn, because that will delete
5204      breakpoints that should be available for the followed inferior.  */
5205   if (!is_fork_parent)
5206     target_mourn_inferior (inferior_ptid);
5207   else
5208     {
5209       inferior_ptid = null_ptid;
5210       detach_inferior (pid);
5211     }
5212 }
5213
5214 static void
5215 remote_detach (struct target_ops *ops, const char *args, int from_tty)
5216 {
5217   remote_detach_1 (args, from_tty);
5218 }
5219
5220 static void
5221 extended_remote_detach (struct target_ops *ops, const char *args, int from_tty)
5222 {
5223   remote_detach_1 (args, from_tty);
5224 }
5225
5226 /* Target follow-fork function for remote targets.  On entry, and
5227    at return, the current inferior is the fork parent.
5228
5229    Note that although this is currently only used for extended-remote,
5230    it is named remote_follow_fork in anticipation of using it for the
5231    remote target as well.  */
5232
5233 static int
5234 remote_follow_fork (struct target_ops *ops, int follow_child,
5235                     int detach_fork)
5236 {
5237   struct remote_state *rs = get_remote_state ();
5238   enum target_waitkind kind = inferior_thread ()->pending_follow.kind;
5239
5240   if ((kind == TARGET_WAITKIND_FORKED && remote_fork_event_p (rs))
5241       || (kind == TARGET_WAITKIND_VFORKED && remote_vfork_event_p (rs)))
5242     {
5243       /* When following the parent and detaching the child, we detach
5244          the child here.  For the case of following the child and
5245          detaching the parent, the detach is done in the target-
5246          independent follow fork code in infrun.c.  We can't use
5247          target_detach when detaching an unfollowed child because
5248          the client side doesn't know anything about the child.  */
5249       if (detach_fork && !follow_child)
5250         {
5251           /* Detach the fork child.  */
5252           ptid_t child_ptid;
5253           pid_t child_pid;
5254
5255           child_ptid = inferior_thread ()->pending_follow.value.related_pid;
5256           child_pid = ptid_get_pid (child_ptid);
5257
5258           remote_detach_pid (child_pid);
5259           detach_inferior (child_pid);
5260         }
5261     }
5262   return 0;
5263 }
5264
5265 /* Target follow-exec function for remote targets.  Save EXECD_PATHNAME
5266    in the program space of the new inferior.  On entry and at return the
5267    current inferior is the exec'ing inferior.  INF is the new exec'd
5268    inferior, which may be the same as the exec'ing inferior unless
5269    follow-exec-mode is "new".  */
5270
5271 static void
5272 remote_follow_exec (struct target_ops *ops,
5273                     struct inferior *inf, char *execd_pathname)
5274 {
5275   /* We know that this is a target file name, so if it has the "target:"
5276      prefix we strip it off before saving it in the program space.  */
5277   if (is_target_filename (execd_pathname))
5278     execd_pathname += strlen (TARGET_SYSROOT_PREFIX);
5279
5280   set_pspace_remote_exec_file (inf->pspace, execd_pathname);
5281 }
5282
5283 /* Same as remote_detach, but don't send the "D" packet; just disconnect.  */
5284
5285 static void
5286 remote_disconnect (struct target_ops *target, const char *args, int from_tty)
5287 {
5288   if (args)
5289     error (_("Argument given to \"disconnect\" when remotely debugging."));
5290
5291   /* Make sure we unpush even the extended remote targets.  Calling
5292      target_mourn_inferior won't unpush, and remote_mourn won't
5293      unpush if there is more than one inferior left.  */
5294   unpush_target (target);
5295   generic_mourn_inferior ();
5296
5297   if (from_tty)
5298     puts_filtered ("Ending remote debugging.\n");
5299 }
5300
5301 /* Attach to the process specified by ARGS.  If FROM_TTY is non-zero,
5302    be chatty about it.  */
5303
5304 static void
5305 extended_remote_attach (struct target_ops *target, const char *args,
5306                         int from_tty)
5307 {
5308   struct remote_state *rs = get_remote_state ();
5309   int pid;
5310   char *wait_status = NULL;
5311
5312   pid = parse_pid_to_attach (args);
5313
5314   /* Remote PID can be freely equal to getpid, do not check it here the same
5315      way as in other targets.  */
5316
5317   if (packet_support (PACKET_vAttach) == PACKET_DISABLE)
5318     error (_("This target does not support attaching to a process"));
5319
5320   if (from_tty)
5321     {
5322       char *exec_file = get_exec_file (0);
5323
5324       if (exec_file)
5325         printf_unfiltered (_("Attaching to program: %s, %s\n"), exec_file,
5326                            target_pid_to_str (pid_to_ptid (pid)));
5327       else
5328         printf_unfiltered (_("Attaching to %s\n"),
5329                            target_pid_to_str (pid_to_ptid (pid)));
5330
5331       gdb_flush (gdb_stdout);
5332     }
5333
5334   xsnprintf (rs->buf, get_remote_packet_size (), "vAttach;%x", pid);
5335   putpkt (rs->buf);
5336   getpkt (&rs->buf, &rs->buf_size, 0);
5337
5338   switch (packet_ok (rs->buf,
5339                      &remote_protocol_packets[PACKET_vAttach]))
5340     {
5341     case PACKET_OK:
5342       if (!target_is_non_stop_p ())
5343         {
5344           /* Save the reply for later.  */
5345           wait_status = (char *) alloca (strlen (rs->buf) + 1);
5346           strcpy (wait_status, rs->buf);
5347         }
5348       else if (strcmp (rs->buf, "OK") != 0)
5349         error (_("Attaching to %s failed with: %s"),
5350                target_pid_to_str (pid_to_ptid (pid)),
5351                rs->buf);
5352       break;
5353     case PACKET_UNKNOWN:
5354       error (_("This target does not support attaching to a process"));
5355     default:
5356       error (_("Attaching to %s failed"),
5357              target_pid_to_str (pid_to_ptid (pid)));
5358     }
5359
5360   set_current_inferior (remote_add_inferior (0, pid, 1, 0));
5361
5362   inferior_ptid = pid_to_ptid (pid);
5363
5364   if (target_is_non_stop_p ())
5365     {
5366       struct thread_info *thread;
5367
5368       /* Get list of threads.  */
5369       remote_update_thread_list (target);
5370
5371       thread = first_thread_of_process (pid);
5372       if (thread)
5373         inferior_ptid = thread->ptid;
5374       else
5375         inferior_ptid = pid_to_ptid (pid);
5376
5377       /* Invalidate our notion of the remote current thread.  */
5378       record_currthread (rs, minus_one_ptid);
5379     }
5380   else
5381     {
5382       /* Now, if we have thread information, update inferior_ptid.  */
5383       inferior_ptid = remote_current_thread (inferior_ptid);
5384
5385       /* Add the main thread to the thread list.  */
5386       add_thread_silent (inferior_ptid);
5387     }
5388
5389   /* Next, if the target can specify a description, read it.  We do
5390      this before anything involving memory or registers.  */
5391   target_find_description ();
5392
5393   if (!target_is_non_stop_p ())
5394     {
5395       /* Use the previously fetched status.  */
5396       gdb_assert (wait_status != NULL);
5397
5398       if (target_can_async_p ())
5399         {
5400           struct notif_event *reply
5401             =  remote_notif_parse (&notif_client_stop, wait_status);
5402
5403           push_stop_reply ((struct stop_reply *) reply);
5404
5405           target_async (1);
5406         }
5407       else
5408         {
5409           gdb_assert (wait_status != NULL);
5410           strcpy (rs->buf, wait_status);
5411           rs->cached_wait_status = 1;
5412         }
5413     }
5414   else
5415     gdb_assert (wait_status == NULL);
5416 }
5417
5418 /* Implementation of the to_post_attach method.  */
5419
5420 static void
5421 extended_remote_post_attach (struct target_ops *ops, int pid)
5422 {
5423   /* Get text, data & bss offsets.  */
5424   get_offsets ();
5425
5426   /* In certain cases GDB might not have had the chance to start
5427      symbol lookup up until now.  This could happen if the debugged
5428      binary is not using shared libraries, the vsyscall page is not
5429      present (on Linux) and the binary itself hadn't changed since the
5430      debugging process was started.  */
5431   if (symfile_objfile != NULL)
5432     remote_check_symbols();
5433 }
5434
5435 \f
5436 /* Check for the availability of vCont.  This function should also check
5437    the response.  */
5438
5439 static void
5440 remote_vcont_probe (struct remote_state *rs)
5441 {
5442   char *buf;
5443
5444   strcpy (rs->buf, "vCont?");
5445   putpkt (rs->buf);
5446   getpkt (&rs->buf, &rs->buf_size, 0);
5447   buf = rs->buf;
5448
5449   /* Make sure that the features we assume are supported.  */
5450   if (startswith (buf, "vCont"))
5451     {
5452       char *p = &buf[5];
5453       int support_c, support_C;
5454
5455       rs->supports_vCont.s = 0;
5456       rs->supports_vCont.S = 0;
5457       support_c = 0;
5458       support_C = 0;
5459       rs->supports_vCont.t = 0;
5460       rs->supports_vCont.r = 0;
5461       while (p && *p == ';')
5462         {
5463           p++;
5464           if (*p == 's' && (*(p + 1) == ';' || *(p + 1) == 0))
5465             rs->supports_vCont.s = 1;
5466           else if (*p == 'S' && (*(p + 1) == ';' || *(p + 1) == 0))
5467             rs->supports_vCont.S = 1;
5468           else if (*p == 'c' && (*(p + 1) == ';' || *(p + 1) == 0))
5469             support_c = 1;
5470           else if (*p == 'C' && (*(p + 1) == ';' || *(p + 1) == 0))
5471             support_C = 1;
5472           else if (*p == 't' && (*(p + 1) == ';' || *(p + 1) == 0))
5473             rs->supports_vCont.t = 1;
5474           else if (*p == 'r' && (*(p + 1) == ';' || *(p + 1) == 0))
5475             rs->supports_vCont.r = 1;
5476
5477           p = strchr (p, ';');
5478         }
5479
5480       /* If c, and C are not all supported, we can't use vCont.  Clearing
5481          BUF will make packet_ok disable the packet.  */
5482       if (!support_c || !support_C)
5483         buf[0] = 0;
5484     }
5485
5486   packet_ok (buf, &remote_protocol_packets[PACKET_vCont]);
5487 }
5488
5489 /* Helper function for building "vCont" resumptions.  Write a
5490    resumption to P.  ENDP points to one-passed-the-end of the buffer
5491    we're allowed to write to.  Returns BUF+CHARACTERS_WRITTEN.  The
5492    thread to be resumed is PTID; STEP and SIGGNAL indicate whether the
5493    resumed thread should be single-stepped and/or signalled.  If PTID
5494    equals minus_one_ptid, then all threads are resumed; if PTID
5495    represents a process, then all threads of the process are resumed;
5496    the thread to be stepped and/or signalled is given in the global
5497    INFERIOR_PTID.  */
5498
5499 static char *
5500 append_resumption (char *p, char *endp,
5501                    ptid_t ptid, int step, enum gdb_signal siggnal)
5502 {
5503   struct remote_state *rs = get_remote_state ();
5504
5505   if (step && siggnal != GDB_SIGNAL_0)
5506     p += xsnprintf (p, endp - p, ";S%02x", siggnal);
5507   else if (step
5508            /* GDB is willing to range step.  */
5509            && use_range_stepping
5510            /* Target supports range stepping.  */
5511            && rs->supports_vCont.r
5512            /* We don't currently support range stepping multiple
5513               threads with a wildcard (though the protocol allows it,
5514               so stubs shouldn't make an active effort to forbid
5515               it).  */
5516            && !(remote_multi_process_p (rs) && ptid_is_pid (ptid)))
5517     {
5518       struct thread_info *tp;
5519
5520       if (ptid_equal (ptid, minus_one_ptid))
5521         {
5522           /* If we don't know about the target thread's tid, then
5523              we're resuming magic_null_ptid (see caller).  */
5524           tp = find_thread_ptid (magic_null_ptid);
5525         }
5526       else
5527         tp = find_thread_ptid (ptid);
5528       gdb_assert (tp != NULL);
5529
5530       if (tp->control.may_range_step)
5531         {
5532           int addr_size = gdbarch_addr_bit (target_gdbarch ()) / 8;
5533
5534           p += xsnprintf (p, endp - p, ";r%s,%s",
5535                           phex_nz (tp->control.step_range_start,
5536                                    addr_size),
5537                           phex_nz (tp->control.step_range_end,
5538                                    addr_size));
5539         }
5540       else
5541         p += xsnprintf (p, endp - p, ";s");
5542     }
5543   else if (step)
5544     p += xsnprintf (p, endp - p, ";s");
5545   else if (siggnal != GDB_SIGNAL_0)
5546     p += xsnprintf (p, endp - p, ";C%02x", siggnal);
5547   else
5548     p += xsnprintf (p, endp - p, ";c");
5549
5550   if (remote_multi_process_p (rs) && ptid_is_pid (ptid))
5551     {
5552       ptid_t nptid;
5553
5554       /* All (-1) threads of process.  */
5555       nptid = ptid_build (ptid_get_pid (ptid), -1, 0);
5556
5557       p += xsnprintf (p, endp - p, ":");
5558       p = write_ptid (p, endp, nptid);
5559     }
5560   else if (!ptid_equal (ptid, minus_one_ptid))
5561     {
5562       p += xsnprintf (p, endp - p, ":");
5563       p = write_ptid (p, endp, ptid);
5564     }
5565
5566   return p;
5567 }
5568
5569 /* Clear the thread's private info on resume.  */
5570
5571 static void
5572 resume_clear_thread_private_info (struct thread_info *thread)
5573 {
5574   if (thread->priv != NULL)
5575     {
5576       thread->priv->stop_reason = TARGET_STOPPED_BY_NO_REASON;
5577       thread->priv->watch_data_address = 0;
5578     }
5579 }
5580
5581 /* Append a vCont continue-with-signal action for threads that have a
5582    non-zero stop signal.  */
5583
5584 static char *
5585 append_pending_thread_resumptions (char *p, char *endp, ptid_t ptid)
5586 {
5587   struct thread_info *thread;
5588
5589   ALL_NON_EXITED_THREADS (thread)
5590     if (ptid_match (thread->ptid, ptid)
5591         && !ptid_equal (inferior_ptid, thread->ptid)
5592         && thread->suspend.stop_signal != GDB_SIGNAL_0)
5593       {
5594         p = append_resumption (p, endp, thread->ptid,
5595                                0, thread->suspend.stop_signal);
5596         thread->suspend.stop_signal = GDB_SIGNAL_0;
5597         resume_clear_thread_private_info (thread);
5598       }
5599
5600   return p;
5601 }
5602
5603 /* Set the target running, using the packets that use Hc
5604    (c/s/C/S).  */
5605
5606 static void
5607 remote_resume_with_hc (struct target_ops *ops,
5608                        ptid_t ptid, int step, enum gdb_signal siggnal)
5609 {
5610   struct remote_state *rs = get_remote_state ();
5611   struct thread_info *thread;
5612   char *buf;
5613
5614   rs->last_sent_signal = siggnal;
5615   rs->last_sent_step = step;
5616
5617   /* The c/s/C/S resume packets use Hc, so set the continue
5618      thread.  */
5619   if (ptid_equal (ptid, minus_one_ptid))
5620     set_continue_thread (any_thread_ptid);
5621   else
5622     set_continue_thread (ptid);
5623
5624   ALL_NON_EXITED_THREADS (thread)
5625     resume_clear_thread_private_info (thread);
5626
5627   buf = rs->buf;
5628   if (execution_direction == EXEC_REVERSE)
5629     {
5630       /* We don't pass signals to the target in reverse exec mode.  */
5631       if (info_verbose && siggnal != GDB_SIGNAL_0)
5632         warning (_(" - Can't pass signal %d to target in reverse: ignored."),
5633                  siggnal);
5634
5635       if (step && packet_support (PACKET_bs) == PACKET_DISABLE)
5636         error (_("Remote reverse-step not supported."));
5637       if (!step && packet_support (PACKET_bc) == PACKET_DISABLE)
5638         error (_("Remote reverse-continue not supported."));
5639
5640       strcpy (buf, step ? "bs" : "bc");
5641     }
5642   else if (siggnal != GDB_SIGNAL_0)
5643     {
5644       buf[0] = step ? 'S' : 'C';
5645       buf[1] = tohex (((int) siggnal >> 4) & 0xf);
5646       buf[2] = tohex (((int) siggnal) & 0xf);
5647       buf[3] = '\0';
5648     }
5649   else
5650     strcpy (buf, step ? "s" : "c");
5651
5652   putpkt (buf);
5653 }
5654
5655 /* Resume the remote inferior by using a "vCont" packet.  The thread
5656    to be resumed is PTID; STEP and SIGGNAL indicate whether the
5657    resumed thread should be single-stepped and/or signalled.  If PTID
5658    equals minus_one_ptid, then all threads are resumed; the thread to
5659    be stepped and/or signalled is given in the global INFERIOR_PTID.
5660    This function returns non-zero iff it resumes the inferior.
5661
5662    This function issues a strict subset of all possible vCont commands
5663    at the moment.  */
5664
5665 static int
5666 remote_resume_with_vcont (ptid_t ptid, int step, enum gdb_signal siggnal)
5667 {
5668   struct remote_state *rs = get_remote_state ();
5669   char *p;
5670   char *endp;
5671
5672   /* No reverse execution actions defined for vCont.  */
5673   if (execution_direction == EXEC_REVERSE)
5674     return 0;
5675
5676   if (packet_support (PACKET_vCont) == PACKET_SUPPORT_UNKNOWN)
5677     remote_vcont_probe (rs);
5678
5679   if (packet_support (PACKET_vCont) == PACKET_DISABLE)
5680     return 0;
5681
5682   p = rs->buf;
5683   endp = rs->buf + get_remote_packet_size ();
5684
5685   /* If we could generate a wider range of packets, we'd have to worry
5686      about overflowing BUF.  Should there be a generic
5687      "multi-part-packet" packet?  */
5688
5689   p += xsnprintf (p, endp - p, "vCont");
5690
5691   if (ptid_equal (ptid, magic_null_ptid))
5692     {
5693       /* MAGIC_NULL_PTID means that we don't have any active threads,
5694          so we don't have any TID numbers the inferior will
5695          understand.  Make sure to only send forms that do not specify
5696          a TID.  */
5697       append_resumption (p, endp, minus_one_ptid, step, siggnal);
5698     }
5699   else if (ptid_equal (ptid, minus_one_ptid) || ptid_is_pid (ptid))
5700     {
5701       /* Resume all threads (of all processes, or of a single
5702          process), with preference for INFERIOR_PTID.  This assumes
5703          inferior_ptid belongs to the set of all threads we are about
5704          to resume.  */
5705       if (step || siggnal != GDB_SIGNAL_0)
5706         {
5707           /* Step inferior_ptid, with or without signal.  */
5708           p = append_resumption (p, endp, inferior_ptid, step, siggnal);
5709         }
5710
5711       /* Also pass down any pending signaled resumption for other
5712          threads not the current.  */
5713       p = append_pending_thread_resumptions (p, endp, ptid);
5714
5715       /* And continue others without a signal.  */
5716       append_resumption (p, endp, ptid, /*step=*/ 0, GDB_SIGNAL_0);
5717     }
5718   else
5719     {
5720       /* Scheduler locking; resume only PTID.  */
5721       append_resumption (p, endp, ptid, step, siggnal);
5722     }
5723
5724   gdb_assert (strlen (rs->buf) < get_remote_packet_size ());
5725   putpkt (rs->buf);
5726
5727   if (target_is_non_stop_p ())
5728     {
5729       /* In non-stop, the stub replies to vCont with "OK".  The stop
5730          reply will be reported asynchronously by means of a `%Stop'
5731          notification.  */
5732       getpkt (&rs->buf, &rs->buf_size, 0);
5733       if (strcmp (rs->buf, "OK") != 0)
5734         error (_("Unexpected vCont reply in non-stop mode: %s"), rs->buf);
5735     }
5736
5737   return 1;
5738 }
5739
5740 /* Tell the remote machine to resume.  */
5741
5742 static void
5743 remote_resume (struct target_ops *ops,
5744                ptid_t ptid, int step, enum gdb_signal siggnal)
5745 {
5746   struct remote_state *rs = get_remote_state ();
5747
5748   /* When connected in non-stop mode, the core resumes threads
5749      individually.  Resuming remote threads directly in target_resume
5750      would thus result in sending one packet per thread.  Instead, to
5751      minimize roundtrip latency, here we just store the resume
5752      request; the actual remote resumption will be done in
5753      target_commit_resume / remote_commit_resume, where we'll be able
5754      to do vCont action coalescing.  */
5755   if (target_is_non_stop_p () && execution_direction != EXEC_REVERSE)
5756     {
5757       struct private_thread_info *remote_thr;
5758
5759       if (ptid_equal (minus_one_ptid, ptid) || ptid_is_pid (ptid))
5760         remote_thr = get_private_info_ptid (inferior_ptid);
5761       else
5762         remote_thr = get_private_info_ptid (ptid);
5763       remote_thr->last_resume_step = step;
5764       remote_thr->last_resume_sig = siggnal;
5765       return;
5766     }
5767
5768   /* In all-stop, we can't mark REMOTE_ASYNC_GET_PENDING_EVENTS_TOKEN
5769      (explained in remote-notif.c:handle_notification) so
5770      remote_notif_process is not called.  We need find a place where
5771      it is safe to start a 'vNotif' sequence.  It is good to do it
5772      before resuming inferior, because inferior was stopped and no RSP
5773      traffic at that moment.  */
5774   if (!target_is_non_stop_p ())
5775     remote_notif_process (rs->notif_state, &notif_client_stop);
5776
5777   rs->last_resume_exec_dir = execution_direction;
5778
5779   /* Prefer vCont, and fallback to s/c/S/C, which use Hc.  */
5780   if (!remote_resume_with_vcont (ptid, step, siggnal))
5781     remote_resume_with_hc (ops, ptid, step, siggnal);
5782
5783   /* We are about to start executing the inferior, let's register it
5784      with the event loop.  NOTE: this is the one place where all the
5785      execution commands end up.  We could alternatively do this in each
5786      of the execution commands in infcmd.c.  */
5787   /* FIXME: ezannoni 1999-09-28: We may need to move this out of here
5788      into infcmd.c in order to allow inferior function calls to work
5789      NOT asynchronously.  */
5790   if (target_can_async_p ())
5791     target_async (1);
5792
5793   /* We've just told the target to resume.  The remote server will
5794      wait for the inferior to stop, and then send a stop reply.  In
5795      the mean time, we can't start another command/query ourselves
5796      because the stub wouldn't be ready to process it.  This applies
5797      only to the base all-stop protocol, however.  In non-stop (which
5798      only supports vCont), the stub replies with an "OK", and is
5799      immediate able to process further serial input.  */
5800   if (!target_is_non_stop_p ())
5801     rs->waiting_for_stop_reply = 1;
5802 }
5803
5804 static void check_pending_events_prevent_wildcard_vcont
5805   (int *may_global_wildcard_vcont);
5806 static int is_pending_fork_parent_thread (struct thread_info *thread);
5807
5808 /* Private per-inferior info for target remote processes.  */
5809
5810 struct private_inferior
5811 {
5812   /* Whether we can send a wildcard vCont for this process.  */
5813   int may_wildcard_vcont;
5814 };
5815
5816 /* Structure used to track the construction of a vCont packet in the
5817    outgoing packet buffer.  This is used to send multiple vCont
5818    packets if we have more actions than would fit a single packet.  */
5819
5820 struct vcont_builder
5821 {
5822   /* Pointer to the first action.  P points here if no action has been
5823      appended yet.  */
5824   char *first_action;
5825
5826   /* Where the next action will be appended.  */
5827   char *p;
5828
5829   /* The end of the buffer.  Must never write past this.  */
5830   char *endp;
5831 };
5832
5833 /* Prepare the outgoing buffer for a new vCont packet.  */
5834
5835 static void
5836 vcont_builder_restart (struct vcont_builder *builder)
5837 {
5838   struct remote_state *rs = get_remote_state ();
5839
5840   builder->p = rs->buf;
5841   builder->endp = rs->buf + get_remote_packet_size ();
5842   builder->p += xsnprintf (builder->p, builder->endp - builder->p, "vCont");
5843   builder->first_action = builder->p;
5844 }
5845
5846 /* If the vCont packet being built has any action, send it to the
5847    remote end.  */
5848
5849 static void
5850 vcont_builder_flush (struct vcont_builder *builder)
5851 {
5852   struct remote_state *rs;
5853
5854   if (builder->p == builder->first_action)
5855     return;
5856
5857   rs = get_remote_state ();
5858   putpkt (rs->buf);
5859   getpkt (&rs->buf, &rs->buf_size, 0);
5860   if (strcmp (rs->buf, "OK") != 0)
5861     error (_("Unexpected vCont reply in non-stop mode: %s"), rs->buf);
5862 }
5863
5864 /* The largest action is range-stepping, with its two addresses.  This
5865    is more than sufficient.  If a new, bigger action is created, it'll
5866    quickly trigger a failed assertion in append_resumption (and we'll
5867    just bump this).  */
5868 #define MAX_ACTION_SIZE 200
5869
5870 /* Append a new vCont action in the outgoing packet being built.  If
5871    the action doesn't fit the packet along with previous actions, push
5872    what we've got so far to the remote end and start over a new vCont
5873    packet (with the new action).  */
5874
5875 static void
5876 vcont_builder_push_action (struct vcont_builder *builder,
5877                            ptid_t ptid, int step, enum gdb_signal siggnal)
5878 {
5879   char buf[MAX_ACTION_SIZE + 1];
5880   char *endp;
5881   size_t rsize;
5882
5883   endp = append_resumption (buf, buf + sizeof (buf),
5884                             ptid, step, siggnal);
5885
5886   /* Check whether this new action would fit in the vCont packet along
5887      with previous actions.  If not, send what we've got so far and
5888      start a new vCont packet.  */
5889   rsize = endp - buf;
5890   if (rsize > builder->endp - builder->p)
5891     {
5892       vcont_builder_flush (builder);
5893       vcont_builder_restart (builder);
5894
5895       /* Should now fit.  */
5896       gdb_assert (rsize <= builder->endp - builder->p);
5897     }
5898
5899   memcpy (builder->p, buf, rsize);
5900   builder->p += rsize;
5901   *builder->p = '\0';
5902 }
5903
5904 /* to_commit_resume implementation.  */
5905
5906 static void
5907 remote_commit_resume (struct target_ops *ops)
5908 {
5909   struct remote_state *rs = get_remote_state ();
5910   struct inferior *inf;
5911   struct thread_info *tp;
5912   int any_process_wildcard;
5913   int may_global_wildcard_vcont;
5914   struct vcont_builder vcont_builder;
5915
5916   /* If connected in all-stop mode, we'd send the remote resume
5917      request directly from remote_resume.  Likewise if
5918      reverse-debugging, as there are no defined vCont actions for
5919      reverse execution.  */
5920   if (!target_is_non_stop_p () || execution_direction == EXEC_REVERSE)
5921     return;
5922
5923   /* Try to send wildcard actions ("vCont;c" or "vCont;c:pPID.-1")
5924      instead of resuming all threads of each process individually.
5925      However, if any thread of a process must remain halted, we can't
5926      send wildcard resumes and must send one action per thread.
5927
5928      Care must be taken to not resume threads/processes the server
5929      side already told us are stopped, but the core doesn't know about
5930      yet, because the events are still in the vStopped notification
5931      queue.  For example:
5932
5933        #1 => vCont s:p1.1;c
5934        #2 <= OK
5935        #3 <= %Stopped T05 p1.1
5936        #4 => vStopped
5937        #5 <= T05 p1.2
5938        #6 => vStopped
5939        #7 <= OK
5940        #8 (infrun handles the stop for p1.1 and continues stepping)
5941        #9 => vCont s:p1.1;c
5942
5943      The last vCont above would resume thread p1.2 by mistake, because
5944      the server has no idea that the event for p1.2 had not been
5945      handled yet.
5946
5947      The server side must similarly ignore resume actions for the
5948      thread that has a pending %Stopped notification (and any other
5949      threads with events pending), until GDB acks the notification
5950      with vStopped.  Otherwise, e.g., the following case is
5951      mishandled:
5952
5953        #1 => g  (or any other packet)
5954        #2 <= [registers]
5955        #3 <= %Stopped T05 p1.2
5956        #4 => vCont s:p1.1;c
5957        #5 <= OK
5958
5959      Above, the server must not resume thread p1.2.  GDB can't know
5960      that p1.2 stopped until it acks the %Stopped notification, and
5961      since from GDB's perspective all threads should be running, it
5962      sends a "c" action.
5963
5964      Finally, special care must also be given to handling fork/vfork
5965      events.  A (v)fork event actually tells us that two processes
5966      stopped -- the parent and the child.  Until we follow the fork,
5967      we must not resume the child.  Therefore, if we have a pending
5968      fork follow, we must not send a global wildcard resume action
5969      (vCont;c).  We can still send process-wide wildcards though.  */
5970
5971   /* Start by assuming a global wildcard (vCont;c) is possible.  */
5972   may_global_wildcard_vcont = 1;
5973
5974   /* And assume every process is individually wildcard-able too.  */
5975   ALL_NON_EXITED_INFERIORS (inf)
5976     {
5977       if (inf->priv == NULL)
5978         inf->priv = XNEW (struct private_inferior);
5979       inf->priv->may_wildcard_vcont = 1;
5980     }
5981
5982   /* Check for any pending events (not reported or processed yet) and
5983      disable process and global wildcard resumes appropriately.  */
5984   check_pending_events_prevent_wildcard_vcont (&may_global_wildcard_vcont);
5985
5986   ALL_NON_EXITED_THREADS (tp)
5987     {
5988       /* If a thread of a process is not meant to be resumed, then we
5989          can't wildcard that process.  */
5990       if (!tp->executing)
5991         {
5992           tp->inf->priv->may_wildcard_vcont = 0;
5993
5994           /* And if we can't wildcard a process, we can't wildcard
5995              everything either.  */
5996           may_global_wildcard_vcont = 0;
5997           continue;
5998         }
5999
6000       /* If a thread is the parent of an unfollowed fork, then we
6001          can't do a global wildcard, as that would resume the fork
6002          child.  */
6003       if (is_pending_fork_parent_thread (tp))
6004         may_global_wildcard_vcont = 0;
6005     }
6006
6007   /* Now let's build the vCont packet(s).  Actions must be appended
6008      from narrower to wider scopes (thread -> process -> global).  If
6009      we end up with too many actions for a single packet vcont_builder
6010      flushes the current vCont packet to the remote side and starts a
6011      new one.  */
6012   vcont_builder_restart (&vcont_builder);
6013
6014   /* Threads first.  */
6015   ALL_NON_EXITED_THREADS (tp)
6016     {
6017       struct private_thread_info *remote_thr = tp->priv;
6018
6019       if (!tp->executing || remote_thr->vcont_resumed)
6020         continue;
6021
6022       gdb_assert (!thread_is_in_step_over_chain (tp));
6023
6024       if (!remote_thr->last_resume_step
6025           && remote_thr->last_resume_sig == GDB_SIGNAL_0
6026           && tp->inf->priv->may_wildcard_vcont)
6027         {
6028           /* We'll send a wildcard resume instead.  */
6029           remote_thr->vcont_resumed = 1;
6030           continue;
6031         }
6032
6033       vcont_builder_push_action (&vcont_builder, tp->ptid,
6034                                  remote_thr->last_resume_step,
6035                                  remote_thr->last_resume_sig);
6036       remote_thr->vcont_resumed = 1;
6037     }
6038
6039   /* Now check whether we can send any process-wide wildcard.  This is
6040      to avoid sending a global wildcard in the case nothing is
6041      supposed to be resumed.  */
6042   any_process_wildcard = 0;
6043
6044   ALL_NON_EXITED_INFERIORS (inf)
6045     {
6046       if (inf->priv->may_wildcard_vcont)
6047         {
6048           any_process_wildcard = 1;
6049           break;
6050         }
6051     }
6052
6053   if (any_process_wildcard)
6054     {
6055       /* If all processes are wildcard-able, then send a single "c"
6056          action, otherwise, send an "all (-1) threads of process"
6057          continue action for each running process, if any.  */
6058       if (may_global_wildcard_vcont)
6059         {
6060           vcont_builder_push_action (&vcont_builder, minus_one_ptid,
6061                                      0, GDB_SIGNAL_0);
6062         }
6063       else
6064         {
6065           ALL_NON_EXITED_INFERIORS (inf)
6066             {
6067               if (inf->priv->may_wildcard_vcont)
6068                 {
6069                   vcont_builder_push_action (&vcont_builder,
6070                                              pid_to_ptid (inf->pid),
6071                                              0, GDB_SIGNAL_0);
6072                 }
6073             }
6074         }
6075     }
6076
6077   vcont_builder_flush (&vcont_builder);
6078 }
6079
6080 \f
6081
6082 /* Non-stop version of target_stop.  Uses `vCont;t' to stop a remote
6083    thread, all threads of a remote process, or all threads of all
6084    processes.  */
6085
6086 static void
6087 remote_stop_ns (ptid_t ptid)
6088 {
6089   struct remote_state *rs = get_remote_state ();
6090   char *p = rs->buf;
6091   char *endp = rs->buf + get_remote_packet_size ();
6092
6093   if (packet_support (PACKET_vCont) == PACKET_SUPPORT_UNKNOWN)
6094     remote_vcont_probe (rs);
6095
6096   if (!rs->supports_vCont.t)
6097     error (_("Remote server does not support stopping threads"));
6098
6099   if (ptid_equal (ptid, minus_one_ptid)
6100       || (!remote_multi_process_p (rs) && ptid_is_pid (ptid)))
6101     p += xsnprintf (p, endp - p, "vCont;t");
6102   else
6103     {
6104       ptid_t nptid;
6105
6106       p += xsnprintf (p, endp - p, "vCont;t:");
6107
6108       if (ptid_is_pid (ptid))
6109           /* All (-1) threads of process.  */
6110         nptid = ptid_build (ptid_get_pid (ptid), -1, 0);
6111       else
6112         {
6113           /* Small optimization: if we already have a stop reply for
6114              this thread, no use in telling the stub we want this
6115              stopped.  */
6116           if (peek_stop_reply (ptid))
6117             return;
6118
6119           nptid = ptid;
6120         }
6121
6122       write_ptid (p, endp, nptid);
6123     }
6124
6125   /* In non-stop, we get an immediate OK reply.  The stop reply will
6126      come in asynchronously by notification.  */
6127   putpkt (rs->buf);
6128   getpkt (&rs->buf, &rs->buf_size, 0);
6129   if (strcmp (rs->buf, "OK") != 0)
6130     error (_("Stopping %s failed: %s"), target_pid_to_str (ptid), rs->buf);
6131 }
6132
6133 /* All-stop version of target_interrupt.  Sends a break or a ^C to
6134    interrupt the remote target.  It is undefined which thread of which
6135    process reports the interrupt.  */
6136
6137 static void
6138 remote_interrupt_as (void)
6139 {
6140   struct remote_state *rs = get_remote_state ();
6141
6142   rs->ctrlc_pending_p = 1;
6143
6144   /* If the inferior is stopped already, but the core didn't know
6145      about it yet, just ignore the request.  The cached wait status
6146      will be collected in remote_wait.  */
6147   if (rs->cached_wait_status)
6148     return;
6149
6150   /* Send interrupt_sequence to remote target.  */
6151   send_interrupt_sequence ();
6152 }
6153
6154 /* Non-stop version of target_interrupt.  Uses `vCtrlC' to interrupt
6155    the remote target.  It is undefined which thread of which process
6156    reports the interrupt.  Throws an error if the packet is not
6157    supported by the server.  */
6158
6159 static void
6160 remote_interrupt_ns (void)
6161 {
6162   struct remote_state *rs = get_remote_state ();
6163   char *p = rs->buf;
6164   char *endp = rs->buf + get_remote_packet_size ();
6165
6166   xsnprintf (p, endp - p, "vCtrlC");
6167
6168   /* In non-stop, we get an immediate OK reply.  The stop reply will
6169      come in asynchronously by notification.  */
6170   putpkt (rs->buf);
6171   getpkt (&rs->buf, &rs->buf_size, 0);
6172
6173   switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_vCtrlC]))
6174     {
6175     case PACKET_OK:
6176       break;
6177     case PACKET_UNKNOWN:
6178       error (_("No support for interrupting the remote target."));
6179     case PACKET_ERROR:
6180       error (_("Interrupting target failed: %s"), rs->buf);
6181     }
6182 }
6183
6184 /* Implement the to_stop function for the remote targets.  */
6185
6186 static void
6187 remote_stop (struct target_ops *self, ptid_t ptid)
6188 {
6189   if (remote_debug)
6190     fprintf_unfiltered (gdb_stdlog, "remote_stop called\n");
6191
6192   if (target_is_non_stop_p ())
6193     remote_stop_ns (ptid);
6194   else
6195     {
6196       /* We don't currently have a way to transparently pause the
6197          remote target in all-stop mode.  Interrupt it instead.  */
6198       remote_interrupt_as ();
6199     }
6200 }
6201
6202 /* Implement the to_interrupt function for the remote targets.  */
6203
6204 static void
6205 remote_interrupt (struct target_ops *self, ptid_t ptid)
6206 {
6207   struct remote_state *rs = get_remote_state ();
6208
6209   if (remote_debug)
6210     fprintf_unfiltered (gdb_stdlog, "remote_interrupt called\n");
6211
6212   if (target_is_non_stop_p ())
6213     remote_interrupt_ns ();
6214   else
6215     remote_interrupt_as ();
6216 }
6217
6218 /* Implement the to_pass_ctrlc function for the remote targets.  */
6219
6220 static void
6221 remote_pass_ctrlc (struct target_ops *self)
6222 {
6223   struct remote_state *rs = get_remote_state ();
6224
6225   if (remote_debug)
6226     fprintf_unfiltered (gdb_stdlog, "remote_pass_ctrlc called\n");
6227
6228   /* If we're starting up, we're not fully synced yet.  Quit
6229      immediately.  */
6230   if (rs->starting_up)
6231     quit ();
6232   /* If ^C has already been sent once, offer to disconnect.  */
6233   else if (rs->ctrlc_pending_p)
6234     interrupt_query ();
6235   else
6236     target_interrupt (inferior_ptid);
6237 }
6238
6239 /* Ask the user what to do when an interrupt is received.  */
6240
6241 static void
6242 interrupt_query (void)
6243 {
6244   struct remote_state *rs = get_remote_state ();
6245
6246   if (rs->waiting_for_stop_reply && rs->ctrlc_pending_p)
6247     {
6248       if (query (_("The target is not responding to interrupt requests.\n"
6249                    "Stop debugging it? ")))
6250         {
6251           remote_unpush_target ();
6252           throw_error (TARGET_CLOSE_ERROR, _("Disconnected from target."));
6253         }
6254     }
6255   else
6256     {
6257       if (query (_("Interrupted while waiting for the program.\n"
6258                    "Give up waiting? ")))
6259         quit ();
6260     }
6261 }
6262
6263 /* Enable/disable target terminal ownership.  Most targets can use
6264    terminal groups to control terminal ownership.  Remote targets are
6265    different in that explicit transfer of ownership to/from GDB/target
6266    is required.  */
6267
6268 static void
6269 remote_terminal_inferior (struct target_ops *self)
6270 {
6271   /* FIXME: cagney/1999-09-27: Make calls to target_terminal_*()
6272      idempotent.  The event-loop GDB talking to an asynchronous target
6273      with a synchronous command calls this function from both
6274      event-top.c and infrun.c/infcmd.c.  Once GDB stops trying to
6275      transfer the terminal to the target when it shouldn't this guard
6276      can go away.  */
6277   if (!remote_async_terminal_ours_p)
6278     return;
6279   remote_async_terminal_ours_p = 0;
6280   /* NOTE: At this point we could also register our selves as the
6281      recipient of all input.  Any characters typed could then be
6282      passed on down to the target.  */
6283 }
6284
6285 static void
6286 remote_terminal_ours (struct target_ops *self)
6287 {
6288   /* See FIXME in remote_terminal_inferior.  */
6289   if (remote_async_terminal_ours_p)
6290     return;
6291   remote_async_terminal_ours_p = 1;
6292 }
6293
6294 static void
6295 remote_console_output (char *msg)
6296 {
6297   char *p;
6298
6299   for (p = msg; p[0] && p[1]; p += 2)
6300     {
6301       char tb[2];
6302       char c = fromhex (p[0]) * 16 + fromhex (p[1]);
6303
6304       tb[0] = c;
6305       tb[1] = 0;
6306       fputs_unfiltered (tb, gdb_stdtarg);
6307     }
6308   gdb_flush (gdb_stdtarg);
6309 }
6310
6311 typedef struct cached_reg
6312 {
6313   int num;
6314   gdb_byte data[MAX_REGISTER_SIZE];
6315 } cached_reg_t;
6316
6317 DEF_VEC_O(cached_reg_t);
6318
6319 typedef struct stop_reply
6320 {
6321   struct notif_event base;
6322
6323   /* The identifier of the thread about this event  */
6324   ptid_t ptid;
6325
6326   /* The remote state this event is associated with.  When the remote
6327      connection, represented by a remote_state object, is closed,
6328      all the associated stop_reply events should be released.  */
6329   struct remote_state *rs;
6330
6331   struct target_waitstatus ws;
6332
6333   /* Expedited registers.  This makes remote debugging a bit more
6334      efficient for those targets that provide critical registers as
6335      part of their normal status mechanism (as another roundtrip to
6336      fetch them is avoided).  */
6337   VEC(cached_reg_t) *regcache;
6338
6339   enum target_stop_reason stop_reason;
6340
6341   CORE_ADDR watch_data_address;
6342
6343   int core;
6344 } *stop_reply_p;
6345
6346 DECLARE_QUEUE_P (stop_reply_p);
6347 DEFINE_QUEUE_P (stop_reply_p);
6348 /* The list of already fetched and acknowledged stop events.  This
6349    queue is used for notification Stop, and other notifications
6350    don't need queue for their events, because the notification events
6351    of Stop can't be consumed immediately, so that events should be
6352    queued first, and be consumed by remote_wait_{ns,as} one per
6353    time.  Other notifications can consume their events immediately,
6354    so queue is not needed for them.  */
6355 static QUEUE (stop_reply_p) *stop_reply_queue;
6356
6357 static void
6358 stop_reply_xfree (struct stop_reply *r)
6359 {
6360   notif_event_xfree ((struct notif_event *) r);
6361 }
6362
6363 /* Return the length of the stop reply queue.  */
6364
6365 static int
6366 stop_reply_queue_length (void)
6367 {
6368   return QUEUE_length (stop_reply_p, stop_reply_queue);
6369 }
6370
6371 static void
6372 remote_notif_stop_parse (struct notif_client *self, char *buf,
6373                          struct notif_event *event)
6374 {
6375   remote_parse_stop_reply (buf, (struct stop_reply *) event);
6376 }
6377
6378 static void
6379 remote_notif_stop_ack (struct notif_client *self, char *buf,
6380                        struct notif_event *event)
6381 {
6382   struct stop_reply *stop_reply = (struct stop_reply *) event;
6383
6384   /* acknowledge */
6385   putpkt (self->ack_command);
6386
6387   if (stop_reply->ws.kind == TARGET_WAITKIND_IGNORE)
6388       /* We got an unknown stop reply.  */
6389       error (_("Unknown stop reply"));
6390
6391   push_stop_reply (stop_reply);
6392 }
6393
6394 static int
6395 remote_notif_stop_can_get_pending_events (struct notif_client *self)
6396 {
6397   /* We can't get pending events in remote_notif_process for
6398      notification stop, and we have to do this in remote_wait_ns
6399      instead.  If we fetch all queued events from stub, remote stub
6400      may exit and we have no chance to process them back in
6401      remote_wait_ns.  */
6402   mark_async_event_handler (remote_async_inferior_event_token);
6403   return 0;
6404 }
6405
6406 static void
6407 stop_reply_dtr (struct notif_event *event)
6408 {
6409   struct stop_reply *r = (struct stop_reply *) event;
6410
6411   VEC_free (cached_reg_t, r->regcache);
6412 }
6413
6414 static struct notif_event *
6415 remote_notif_stop_alloc_reply (void)
6416 {
6417   /* We cast to a pointer to the "base class".  */
6418   struct notif_event *r = (struct notif_event *) XNEW (struct stop_reply);
6419
6420   r->dtr = stop_reply_dtr;
6421
6422   return r;
6423 }
6424
6425 /* A client of notification Stop.  */
6426
6427 struct notif_client notif_client_stop =
6428 {
6429   "Stop",
6430   "vStopped",
6431   remote_notif_stop_parse,
6432   remote_notif_stop_ack,
6433   remote_notif_stop_can_get_pending_events,
6434   remote_notif_stop_alloc_reply,
6435   REMOTE_NOTIF_STOP,
6436 };
6437
6438 /* A parameter to pass data in and out.  */
6439
6440 struct queue_iter_param
6441 {
6442   void *input;
6443   struct stop_reply *output;
6444 };
6445
6446 /* Determine if THREAD_PTID is a pending fork parent thread.  ARG contains
6447    the pid of the process that owns the threads we want to check, or
6448    -1 if we want to check all threads.  */
6449
6450 static int
6451 is_pending_fork_parent (struct target_waitstatus *ws, int event_pid,
6452                         ptid_t thread_ptid)
6453 {
6454   if (ws->kind == TARGET_WAITKIND_FORKED
6455       || ws->kind == TARGET_WAITKIND_VFORKED)
6456     {
6457       if (event_pid == -1 || event_pid == ptid_get_pid (thread_ptid))
6458         return 1;
6459     }
6460
6461   return 0;
6462 }
6463
6464 /* Return the thread's pending status used to determine whether the
6465    thread is a fork parent stopped at a fork event.  */
6466
6467 static struct target_waitstatus *
6468 thread_pending_fork_status (struct thread_info *thread)
6469 {
6470   if (thread->suspend.waitstatus_pending_p)
6471     return &thread->suspend.waitstatus;
6472   else
6473     return &thread->pending_follow;
6474 }
6475
6476 /* Determine if THREAD is a pending fork parent thread.  */
6477
6478 static int
6479 is_pending_fork_parent_thread (struct thread_info *thread)
6480 {
6481   struct target_waitstatus *ws = thread_pending_fork_status (thread);
6482   int pid = -1;
6483
6484   return is_pending_fork_parent (ws, pid, thread->ptid);
6485 }
6486
6487 /* Check whether EVENT is a fork event, and if it is, remove the
6488    fork child from the context list passed in DATA.  */
6489
6490 static int
6491 remove_child_of_pending_fork (QUEUE (stop_reply_p) *q,
6492                               QUEUE_ITER (stop_reply_p) *iter,
6493                               stop_reply_p event,
6494                               void *data)
6495 {
6496   struct queue_iter_param *param = (struct queue_iter_param *) data;
6497   struct threads_listing_context *context
6498     = (struct threads_listing_context *) param->input;
6499
6500   if (event->ws.kind == TARGET_WAITKIND_FORKED
6501       || event->ws.kind == TARGET_WAITKIND_VFORKED
6502       || event->ws.kind == TARGET_WAITKIND_THREAD_EXITED)
6503     threads_listing_context_remove (&event->ws, context);
6504
6505   return 1;
6506 }
6507
6508 /* If CONTEXT contains any fork child threads that have not been
6509    reported yet, remove them from the CONTEXT list.  If such a
6510    thread exists it is because we are stopped at a fork catchpoint
6511    and have not yet called follow_fork, which will set up the
6512    host-side data structures for the new process.  */
6513
6514 static void
6515 remove_new_fork_children (struct threads_listing_context *context)
6516 {
6517   struct thread_info * thread;
6518   int pid = -1;
6519   struct notif_client *notif = &notif_client_stop;
6520   struct queue_iter_param param;
6521
6522   /* For any threads stopped at a fork event, remove the corresponding
6523      fork child threads from the CONTEXT list.  */
6524   ALL_NON_EXITED_THREADS (thread)
6525     {
6526       struct target_waitstatus *ws = thread_pending_fork_status (thread);
6527
6528       if (is_pending_fork_parent (ws, pid, thread->ptid))
6529         {
6530           threads_listing_context_remove (ws, context);
6531         }
6532     }
6533
6534   /* Check for any pending fork events (not reported or processed yet)
6535      in process PID and remove those fork child threads from the
6536      CONTEXT list as well.  */
6537   remote_notif_get_pending_events (notif);
6538   param.input = context;
6539   param.output = NULL;
6540   QUEUE_iterate (stop_reply_p, stop_reply_queue,
6541                  remove_child_of_pending_fork, &param);
6542 }
6543
6544 /* Check whether EVENT would prevent a global or process wildcard
6545    vCont action.  */
6546
6547 static int
6548 check_pending_event_prevents_wildcard_vcont_callback
6549   (QUEUE (stop_reply_p) *q,
6550    QUEUE_ITER (stop_reply_p) *iter,
6551    stop_reply_p event,
6552    void *data)
6553 {
6554   struct inferior *inf;
6555   int *may_global_wildcard_vcont = (int *) data;
6556
6557   if (event->ws.kind == TARGET_WAITKIND_NO_RESUMED
6558       || event->ws.kind == TARGET_WAITKIND_NO_HISTORY)
6559     return 1;
6560
6561   if (event->ws.kind == TARGET_WAITKIND_FORKED
6562       || event->ws.kind == TARGET_WAITKIND_VFORKED)
6563     *may_global_wildcard_vcont = 0;
6564
6565   inf = find_inferior_ptid (event->ptid);
6566
6567   /* This may be the first time we heard about this process.
6568      Regardless, we must not do a global wildcard resume, otherwise
6569      we'd resume this process too.  */
6570   *may_global_wildcard_vcont = 0;
6571   if (inf != NULL)
6572     inf->priv->may_wildcard_vcont = 0;
6573
6574   return 1;
6575 }
6576
6577 /* Check whether any event pending in the vStopped queue would prevent
6578    a global or process wildcard vCont action.  Clear
6579    *may_global_wildcard if we can't do a global wildcard (vCont;c),
6580    and clear the event inferior's may_wildcard_vcont flag if we can't
6581    do a process-wide wildcard resume (vCont;c:pPID.-1).  */
6582
6583 static void
6584 check_pending_events_prevent_wildcard_vcont (int *may_global_wildcard)
6585 {
6586   struct notif_client *notif = &notif_client_stop;
6587
6588   remote_notif_get_pending_events (notif);
6589   QUEUE_iterate (stop_reply_p, stop_reply_queue,
6590                  check_pending_event_prevents_wildcard_vcont_callback,
6591                  may_global_wildcard);
6592 }
6593
6594 /* Remove stop replies in the queue if its pid is equal to the given
6595    inferior's pid.  */
6596
6597 static int
6598 remove_stop_reply_for_inferior (QUEUE (stop_reply_p) *q,
6599                                 QUEUE_ITER (stop_reply_p) *iter,
6600                                 stop_reply_p event,
6601                                 void *data)
6602 {
6603   struct queue_iter_param *param = (struct queue_iter_param *) data;
6604   struct inferior *inf = (struct inferior *) param->input;
6605
6606   if (ptid_get_pid (event->ptid) == inf->pid)
6607     {
6608       stop_reply_xfree (event);
6609       QUEUE_remove_elem (stop_reply_p, q, iter);
6610     }
6611
6612   return 1;
6613 }
6614
6615 /* Discard all pending stop replies of inferior INF.  */
6616
6617 static void
6618 discard_pending_stop_replies (struct inferior *inf)
6619 {
6620   struct queue_iter_param param;
6621   struct stop_reply *reply;
6622   struct remote_state *rs = get_remote_state ();
6623   struct remote_notif_state *rns = rs->notif_state;
6624
6625   /* This function can be notified when an inferior exists.  When the
6626      target is not remote, the notification state is NULL.  */
6627   if (rs->remote_desc == NULL)
6628     return;
6629
6630   reply = (struct stop_reply *) rns->pending_event[notif_client_stop.id];
6631
6632   /* Discard the in-flight notification.  */
6633   if (reply != NULL && ptid_get_pid (reply->ptid) == inf->pid)
6634     {
6635       stop_reply_xfree (reply);
6636       rns->pending_event[notif_client_stop.id] = NULL;
6637     }
6638
6639   param.input = inf;
6640   param.output = NULL;
6641   /* Discard the stop replies we have already pulled with
6642      vStopped.  */
6643   QUEUE_iterate (stop_reply_p, stop_reply_queue,
6644                  remove_stop_reply_for_inferior, &param);
6645 }
6646
6647 /* If its remote state is equal to the given remote state,
6648    remove EVENT from the stop reply queue.  */
6649
6650 static int
6651 remove_stop_reply_of_remote_state (QUEUE (stop_reply_p) *q,
6652                                    QUEUE_ITER (stop_reply_p) *iter,
6653                                    stop_reply_p event,
6654                                    void *data)
6655 {
6656   struct queue_iter_param *param = (struct queue_iter_param *) data;
6657   struct remote_state *rs = (struct remote_state *) param->input;
6658
6659   if (event->rs == rs)
6660     {
6661       stop_reply_xfree (event);
6662       QUEUE_remove_elem (stop_reply_p, q, iter);
6663     }
6664
6665   return 1;
6666 }
6667
6668 /* Discard the stop replies for RS in stop_reply_queue.  */
6669
6670 static void
6671 discard_pending_stop_replies_in_queue (struct remote_state *rs)
6672 {
6673   struct queue_iter_param param;
6674
6675   param.input = rs;
6676   param.output = NULL;
6677   /* Discard the stop replies we have already pulled with
6678      vStopped.  */
6679   QUEUE_iterate (stop_reply_p, stop_reply_queue,
6680                  remove_stop_reply_of_remote_state, &param);
6681 }
6682
6683 /* A parameter to pass data in and out.  */
6684
6685 static int
6686 remote_notif_remove_once_on_match (QUEUE (stop_reply_p) *q,
6687                                    QUEUE_ITER (stop_reply_p) *iter,
6688                                    stop_reply_p event,
6689                                    void *data)
6690 {
6691   struct queue_iter_param *param = (struct queue_iter_param *) data;
6692   ptid_t *ptid = (ptid_t *) param->input;
6693
6694   if (ptid_match (event->ptid, *ptid))
6695     {
6696       param->output = event;
6697       QUEUE_remove_elem (stop_reply_p, q, iter);
6698       return 0;
6699     }
6700
6701   return 1;
6702 }
6703
6704 /* Remove the first reply in 'stop_reply_queue' which matches
6705    PTID.  */
6706
6707 static struct stop_reply *
6708 remote_notif_remove_queued_reply (ptid_t ptid)
6709 {
6710   struct queue_iter_param param;
6711
6712   param.input = &ptid;
6713   param.output = NULL;
6714
6715   QUEUE_iterate (stop_reply_p, stop_reply_queue,
6716                  remote_notif_remove_once_on_match, &param);
6717   if (notif_debug)
6718     fprintf_unfiltered (gdb_stdlog,
6719                         "notif: discard queued event: 'Stop' in %s\n",
6720                         target_pid_to_str (ptid));
6721
6722   return param.output;
6723 }
6724
6725 /* Look for a queued stop reply belonging to PTID.  If one is found,
6726    remove it from the queue, and return it.  Returns NULL if none is
6727    found.  If there are still queued events left to process, tell the
6728    event loop to get back to target_wait soon.  */
6729
6730 static struct stop_reply *
6731 queued_stop_reply (ptid_t ptid)
6732 {
6733   struct stop_reply *r = remote_notif_remove_queued_reply (ptid);
6734
6735   if (!QUEUE_is_empty (stop_reply_p, stop_reply_queue))
6736     /* There's still at least an event left.  */
6737     mark_async_event_handler (remote_async_inferior_event_token);
6738
6739   return r;
6740 }
6741
6742 /* Push a fully parsed stop reply in the stop reply queue.  Since we
6743    know that we now have at least one queued event left to pass to the
6744    core side, tell the event loop to get back to target_wait soon.  */
6745
6746 static void
6747 push_stop_reply (struct stop_reply *new_event)
6748 {
6749   QUEUE_enque (stop_reply_p, stop_reply_queue, new_event);
6750
6751   if (notif_debug)
6752     fprintf_unfiltered (gdb_stdlog,
6753                         "notif: push 'Stop' %s to queue %d\n",
6754                         target_pid_to_str (new_event->ptid),
6755                         QUEUE_length (stop_reply_p,
6756                                       stop_reply_queue));
6757
6758   mark_async_event_handler (remote_async_inferior_event_token);
6759 }
6760
6761 static int
6762 stop_reply_match_ptid_and_ws (QUEUE (stop_reply_p) *q,
6763                               QUEUE_ITER (stop_reply_p) *iter,
6764                               struct stop_reply *event,
6765                               void *data)
6766 {
6767   ptid_t *ptid = (ptid_t *) data;
6768
6769   return !(ptid_equal (*ptid, event->ptid)
6770            && event->ws.kind == TARGET_WAITKIND_STOPPED);
6771 }
6772
6773 /* Returns true if we have a stop reply for PTID.  */
6774
6775 static int
6776 peek_stop_reply (ptid_t ptid)
6777 {
6778   return !QUEUE_iterate (stop_reply_p, stop_reply_queue,
6779                          stop_reply_match_ptid_and_ws, &ptid);
6780 }
6781
6782 /* Helper for remote_parse_stop_reply.  Return nonzero if the substring
6783    starting with P and ending with PEND matches PREFIX.  */
6784
6785 static int
6786 strprefix (const char *p, const char *pend, const char *prefix)
6787 {
6788   for ( ; p < pend; p++, prefix++)
6789     if (*p != *prefix)
6790       return 0;
6791   return *prefix == '\0';
6792 }
6793
6794 /* Parse the stop reply in BUF.  Either the function succeeds, and the
6795    result is stored in EVENT, or throws an error.  */
6796
6797 static void
6798 remote_parse_stop_reply (char *buf, struct stop_reply *event)
6799 {
6800   struct remote_arch_state *rsa = get_remote_arch_state ();
6801   ULONGEST addr;
6802   char *p;
6803   int skipregs = 0;
6804
6805   event->ptid = null_ptid;
6806   event->rs = get_remote_state ();
6807   event->ws.kind = TARGET_WAITKIND_IGNORE;
6808   event->ws.value.integer = 0;
6809   event->stop_reason = TARGET_STOPPED_BY_NO_REASON;
6810   event->regcache = NULL;
6811   event->core = -1;
6812
6813   switch (buf[0])
6814     {
6815     case 'T':           /* Status with PC, SP, FP, ...  */
6816       /* Expedited reply, containing Signal, {regno, reg} repeat.  */
6817       /*  format is:  'Tssn...:r...;n...:r...;n...:r...;#cc', where
6818             ss = signal number
6819             n... = register number
6820             r... = register contents
6821       */
6822
6823       p = &buf[3];      /* after Txx */
6824       while (*p)
6825         {
6826           char *p1;
6827           int fieldsize;
6828
6829           p1 = strchr (p, ':');
6830           if (p1 == NULL)
6831             error (_("Malformed packet(a) (missing colon): %s\n\
6832 Packet: '%s'\n"),
6833                    p, buf);
6834           if (p == p1)
6835             error (_("Malformed packet(a) (missing register number): %s\n\
6836 Packet: '%s'\n"),
6837                    p, buf);
6838
6839           /* Some "registers" are actually extended stop information.
6840              Note if you're adding a new entry here: GDB 7.9 and
6841              earlier assume that all register "numbers" that start
6842              with an hex digit are real register numbers.  Make sure
6843              the server only sends such a packet if it knows the
6844              client understands it.  */
6845
6846           if (strprefix (p, p1, "thread"))
6847             event->ptid = read_ptid (++p1, &p);
6848           else if (strprefix (p, p1, "syscall_entry"))
6849             {
6850               ULONGEST sysno;
6851
6852               event->ws.kind = TARGET_WAITKIND_SYSCALL_ENTRY;
6853               p = unpack_varlen_hex (++p1, &sysno);
6854               event->ws.value.syscall_number = (int) sysno;
6855             }
6856           else if (strprefix (p, p1, "syscall_return"))
6857             {
6858               ULONGEST sysno;
6859
6860               event->ws.kind = TARGET_WAITKIND_SYSCALL_RETURN;
6861               p = unpack_varlen_hex (++p1, &sysno);
6862               event->ws.value.syscall_number = (int) sysno;
6863             }
6864           else if (strprefix (p, p1, "watch")
6865                    || strprefix (p, p1, "rwatch")
6866                    || strprefix (p, p1, "awatch"))
6867             {
6868               event->stop_reason = TARGET_STOPPED_BY_WATCHPOINT;
6869               p = unpack_varlen_hex (++p1, &addr);
6870               event->watch_data_address = (CORE_ADDR) addr;
6871             }
6872           else if (strprefix (p, p1, "swbreak"))
6873             {
6874               event->stop_reason = TARGET_STOPPED_BY_SW_BREAKPOINT;
6875
6876               /* Make sure the stub doesn't forget to indicate support
6877                  with qSupported.  */
6878               if (packet_support (PACKET_swbreak_feature) != PACKET_ENABLE)
6879                 error (_("Unexpected swbreak stop reason"));
6880
6881               /* The value part is documented as "must be empty",
6882                  though we ignore it, in case we ever decide to make
6883                  use of it in a backward compatible way.  */
6884               p = strchrnul (p1 + 1, ';');
6885             }
6886           else if (strprefix (p, p1, "hwbreak"))
6887             {
6888               event->stop_reason = TARGET_STOPPED_BY_HW_BREAKPOINT;
6889
6890               /* Make sure the stub doesn't forget to indicate support
6891                  with qSupported.  */
6892               if (packet_support (PACKET_hwbreak_feature) != PACKET_ENABLE)
6893                 error (_("Unexpected hwbreak stop reason"));
6894
6895               /* See above.  */
6896               p = strchrnul (p1 + 1, ';');
6897             }
6898           else if (strprefix (p, p1, "library"))
6899             {
6900               event->ws.kind = TARGET_WAITKIND_LOADED;
6901               p = strchrnul (p1 + 1, ';');
6902             }
6903           else if (strprefix (p, p1, "replaylog"))
6904             {
6905               event->ws.kind = TARGET_WAITKIND_NO_HISTORY;
6906               /* p1 will indicate "begin" or "end", but it makes
6907                  no difference for now, so ignore it.  */
6908               p = strchrnul (p1 + 1, ';');
6909             }
6910           else if (strprefix (p, p1, "core"))
6911             {
6912               ULONGEST c;
6913
6914               p = unpack_varlen_hex (++p1, &c);
6915               event->core = c;
6916             }
6917           else if (strprefix (p, p1, "fork"))
6918             {
6919               event->ws.value.related_pid = read_ptid (++p1, &p);
6920               event->ws.kind = TARGET_WAITKIND_FORKED;
6921             }
6922           else if (strprefix (p, p1, "vfork"))
6923             {
6924               event->ws.value.related_pid = read_ptid (++p1, &p);
6925               event->ws.kind = TARGET_WAITKIND_VFORKED;
6926             }
6927           else if (strprefix (p, p1, "vforkdone"))
6928             {
6929               event->ws.kind = TARGET_WAITKIND_VFORK_DONE;
6930               p = strchrnul (p1 + 1, ';');
6931             }
6932           else if (strprefix (p, p1, "exec"))
6933             {
6934               ULONGEST ignored;
6935               char pathname[PATH_MAX];
6936               int pathlen;
6937
6938               /* Determine the length of the execd pathname.  */
6939               p = unpack_varlen_hex (++p1, &ignored);
6940               pathlen = (p - p1) / 2;
6941
6942               /* Save the pathname for event reporting and for
6943                  the next run command.  */
6944               hex2bin (p1, (gdb_byte *) pathname, pathlen);
6945               pathname[pathlen] = '\0';
6946
6947               /* This is freed during event handling.  */
6948               event->ws.value.execd_pathname = xstrdup (pathname);
6949               event->ws.kind = TARGET_WAITKIND_EXECD;
6950
6951               /* Skip the registers included in this packet, since
6952                  they may be for an architecture different from the
6953                  one used by the original program.  */
6954               skipregs = 1;
6955             }
6956           else if (strprefix (p, p1, "create"))
6957             {
6958               event->ws.kind = TARGET_WAITKIND_THREAD_CREATED;
6959               p = strchrnul (p1 + 1, ';');
6960             }
6961           else
6962             {
6963               ULONGEST pnum;
6964               char *p_temp;
6965
6966               if (skipregs)
6967                 {
6968                   p = strchrnul (p1 + 1, ';');
6969                   p++;
6970                   continue;
6971                 }
6972
6973               /* Maybe a real ``P'' register number.  */
6974               p_temp = unpack_varlen_hex (p, &pnum);
6975               /* If the first invalid character is the colon, we got a
6976                  register number.  Otherwise, it's an unknown stop
6977                  reason.  */
6978               if (p_temp == p1)
6979                 {
6980                   struct packet_reg *reg = packet_reg_from_pnum (rsa, pnum);
6981                   cached_reg_t cached_reg;
6982
6983                   if (reg == NULL)
6984                     error (_("Remote sent bad register number %s: %s\n\
6985 Packet: '%s'\n"),
6986                            hex_string (pnum), p, buf);
6987
6988                   cached_reg.num = reg->regnum;
6989
6990                   p = p1 + 1;
6991                   fieldsize = hex2bin (p, cached_reg.data,
6992                                        register_size (target_gdbarch (),
6993                                                       reg->regnum));
6994                   p += 2 * fieldsize;
6995                   if (fieldsize < register_size (target_gdbarch (),
6996                                                  reg->regnum))
6997                     warning (_("Remote reply is too short: %s"), buf);
6998
6999                   VEC_safe_push (cached_reg_t, event->regcache, &cached_reg);
7000                 }
7001               else
7002                 {
7003                   /* Not a number.  Silently skip unknown optional
7004                      info.  */
7005                   p = strchrnul (p1 + 1, ';');
7006                 }
7007             }
7008
7009           if (*p != ';')
7010             error (_("Remote register badly formatted: %s\nhere: %s"),
7011                    buf, p);
7012           ++p;
7013         }
7014
7015       if (event->ws.kind != TARGET_WAITKIND_IGNORE)
7016         break;
7017
7018       /* fall through */
7019     case 'S':           /* Old style status, just signal only.  */
7020       {
7021         int sig;
7022
7023         event->ws.kind = TARGET_WAITKIND_STOPPED;
7024         sig = (fromhex (buf[1]) << 4) + fromhex (buf[2]);
7025         if (GDB_SIGNAL_FIRST <= sig && sig < GDB_SIGNAL_LAST)
7026           event->ws.value.sig = (enum gdb_signal) sig;
7027         else
7028           event->ws.value.sig = GDB_SIGNAL_UNKNOWN;
7029       }
7030       break;
7031     case 'w':           /* Thread exited.  */
7032       {
7033         char *p;
7034         ULONGEST value;
7035
7036         event->ws.kind = TARGET_WAITKIND_THREAD_EXITED;
7037         p = unpack_varlen_hex (&buf[1], &value);
7038         event->ws.value.integer = value;
7039         if (*p != ';')
7040           error (_("stop reply packet badly formatted: %s"), buf);
7041         event->ptid = read_ptid (++p, NULL);
7042         break;
7043       }
7044     case 'W':           /* Target exited.  */
7045     case 'X':
7046       {
7047         char *p;
7048         int pid;
7049         ULONGEST value;
7050
7051         /* GDB used to accept only 2 hex chars here.  Stubs should
7052            only send more if they detect GDB supports multi-process
7053            support.  */
7054         p = unpack_varlen_hex (&buf[1], &value);
7055
7056         if (buf[0] == 'W')
7057           {
7058             /* The remote process exited.  */
7059             event->ws.kind = TARGET_WAITKIND_EXITED;
7060             event->ws.value.integer = value;
7061           }
7062         else
7063           {
7064             /* The remote process exited with a signal.  */
7065             event->ws.kind = TARGET_WAITKIND_SIGNALLED;
7066             if (GDB_SIGNAL_FIRST <= value && value < GDB_SIGNAL_LAST)
7067               event->ws.value.sig = (enum gdb_signal) value;
7068             else
7069               event->ws.value.sig = GDB_SIGNAL_UNKNOWN;
7070           }
7071
7072         /* If no process is specified, assume inferior_ptid.  */
7073         pid = ptid_get_pid (inferior_ptid);
7074         if (*p == '\0')
7075           ;
7076         else if (*p == ';')
7077           {
7078             p++;
7079
7080             if (*p == '\0')
7081               ;
7082             else if (startswith (p, "process:"))
7083               {
7084                 ULONGEST upid;
7085
7086                 p += sizeof ("process:") - 1;
7087                 unpack_varlen_hex (p, &upid);
7088                 pid = upid;
7089               }
7090             else
7091               error (_("unknown stop reply packet: %s"), buf);
7092           }
7093         else
7094           error (_("unknown stop reply packet: %s"), buf);
7095         event->ptid = pid_to_ptid (pid);
7096       }
7097       break;
7098     case 'N':
7099       event->ws.kind = TARGET_WAITKIND_NO_RESUMED;
7100       event->ptid = minus_one_ptid;
7101       break;
7102     }
7103
7104   if (target_is_non_stop_p () && ptid_equal (event->ptid, null_ptid))
7105     error (_("No process or thread specified in stop reply: %s"), buf);
7106 }
7107
7108 /* When the stub wants to tell GDB about a new notification reply, it
7109    sends a notification (%Stop, for example).  Those can come it at
7110    any time, hence, we have to make sure that any pending
7111    putpkt/getpkt sequence we're making is finished, before querying
7112    the stub for more events with the corresponding ack command
7113    (vStopped, for example).  E.g., if we started a vStopped sequence
7114    immediately upon receiving the notification, something like this
7115    could happen:
7116
7117     1.1) --> Hg 1
7118     1.2) <-- OK
7119     1.3) --> g
7120     1.4) <-- %Stop
7121     1.5) --> vStopped
7122     1.6) <-- (registers reply to step #1.3)
7123
7124    Obviously, the reply in step #1.6 would be unexpected to a vStopped
7125    query.
7126
7127    To solve this, whenever we parse a %Stop notification successfully,
7128    we mark the REMOTE_ASYNC_GET_PENDING_EVENTS_TOKEN, and carry on
7129    doing whatever we were doing:
7130
7131     2.1) --> Hg 1
7132     2.2) <-- OK
7133     2.3) --> g
7134     2.4) <-- %Stop
7135       <GDB marks the REMOTE_ASYNC_GET_PENDING_EVENTS_TOKEN>
7136     2.5) <-- (registers reply to step #2.3)
7137
7138    Eventualy after step #2.5, we return to the event loop, which
7139    notices there's an event on the
7140    REMOTE_ASYNC_GET_PENDING_EVENTS_TOKEN event and calls the
7141    associated callback --- the function below.  At this point, we're
7142    always safe to start a vStopped sequence. :
7143
7144     2.6) --> vStopped
7145     2.7) <-- T05 thread:2
7146     2.8) --> vStopped
7147     2.9) --> OK
7148 */
7149
7150 void
7151 remote_notif_get_pending_events (struct notif_client *nc)
7152 {
7153   struct remote_state *rs = get_remote_state ();
7154
7155   if (rs->notif_state->pending_event[nc->id] != NULL)
7156     {
7157       if (notif_debug)
7158         fprintf_unfiltered (gdb_stdlog,
7159                             "notif: process: '%s' ack pending event\n",
7160                             nc->name);
7161
7162       /* acknowledge */
7163       nc->ack (nc, rs->buf, rs->notif_state->pending_event[nc->id]);
7164       rs->notif_state->pending_event[nc->id] = NULL;
7165
7166       while (1)
7167         {
7168           getpkt (&rs->buf, &rs->buf_size, 0);
7169           if (strcmp (rs->buf, "OK") == 0)
7170             break;
7171           else
7172             remote_notif_ack (nc, rs->buf);
7173         }
7174     }
7175   else
7176     {
7177       if (notif_debug)
7178         fprintf_unfiltered (gdb_stdlog,
7179                             "notif: process: '%s' no pending reply\n",
7180                             nc->name);
7181     }
7182 }
7183
7184 /* Called when it is decided that STOP_REPLY holds the info of the
7185    event that is to be returned to the core.  This function always
7186    destroys STOP_REPLY.  */
7187
7188 static ptid_t
7189 process_stop_reply (struct stop_reply *stop_reply,
7190                     struct target_waitstatus *status)
7191 {
7192   ptid_t ptid;
7193
7194   *status = stop_reply->ws;
7195   ptid = stop_reply->ptid;
7196
7197   /* If no thread/process was reported by the stub, assume the current
7198      inferior.  */
7199   if (ptid_equal (ptid, null_ptid))
7200     ptid = inferior_ptid;
7201
7202   if (status->kind != TARGET_WAITKIND_EXITED
7203       && status->kind != TARGET_WAITKIND_SIGNALLED
7204       && status->kind != TARGET_WAITKIND_NO_RESUMED)
7205     {
7206       struct private_thread_info *remote_thr;
7207
7208       /* Expedited registers.  */
7209       if (stop_reply->regcache)
7210         {
7211           struct regcache *regcache
7212             = get_thread_arch_regcache (ptid, target_gdbarch ());
7213           cached_reg_t *reg;
7214           int ix;
7215
7216           for (ix = 0;
7217                VEC_iterate(cached_reg_t, stop_reply->regcache, ix, reg);
7218                ix++)
7219             regcache_raw_supply (regcache, reg->num, reg->data);
7220           VEC_free (cached_reg_t, stop_reply->regcache);
7221         }
7222
7223       remote_notice_new_inferior (ptid, 0);
7224       remote_thr = get_private_info_ptid (ptid);
7225       remote_thr->core = stop_reply->core;
7226       remote_thr->stop_reason = stop_reply->stop_reason;
7227       remote_thr->watch_data_address = stop_reply->watch_data_address;
7228       remote_thr->vcont_resumed = 0;
7229     }
7230
7231   stop_reply_xfree (stop_reply);
7232   return ptid;
7233 }
7234
7235 /* The non-stop mode version of target_wait.  */
7236
7237 static ptid_t
7238 remote_wait_ns (ptid_t ptid, struct target_waitstatus *status, int options)
7239 {
7240   struct remote_state *rs = get_remote_state ();
7241   struct stop_reply *stop_reply;
7242   int ret;
7243   int is_notif = 0;
7244
7245   /* If in non-stop mode, get out of getpkt even if a
7246      notification is received.  */
7247
7248   ret = getpkt_or_notif_sane (&rs->buf, &rs->buf_size,
7249                               0 /* forever */, &is_notif);
7250   while (1)
7251     {
7252       if (ret != -1 && !is_notif)
7253         switch (rs->buf[0])
7254           {
7255           case 'E':             /* Error of some sort.  */
7256             /* We're out of sync with the target now.  Did it continue
7257                or not?  We can't tell which thread it was in non-stop,
7258                so just ignore this.  */
7259             warning (_("Remote failure reply: %s"), rs->buf);
7260             break;
7261           case 'O':             /* Console output.  */
7262             remote_console_output (rs->buf + 1);
7263             break;
7264           default:
7265             warning (_("Invalid remote reply: %s"), rs->buf);
7266             break;
7267           }
7268
7269       /* Acknowledge a pending stop reply that may have arrived in the
7270          mean time.  */
7271       if (rs->notif_state->pending_event[notif_client_stop.id] != NULL)
7272         remote_notif_get_pending_events (&notif_client_stop);
7273
7274       /* If indeed we noticed a stop reply, we're done.  */
7275       stop_reply = queued_stop_reply (ptid);
7276       if (stop_reply != NULL)
7277         return process_stop_reply (stop_reply, status);
7278
7279       /* Still no event.  If we're just polling for an event, then
7280          return to the event loop.  */
7281       if (options & TARGET_WNOHANG)
7282         {
7283           status->kind = TARGET_WAITKIND_IGNORE;
7284           return minus_one_ptid;
7285         }
7286
7287       /* Otherwise do a blocking wait.  */
7288       ret = getpkt_or_notif_sane (&rs->buf, &rs->buf_size,
7289                                   1 /* forever */, &is_notif);
7290     }
7291 }
7292
7293 /* Wait until the remote machine stops, then return, storing status in
7294    STATUS just as `wait' would.  */
7295
7296 static ptid_t
7297 remote_wait_as (ptid_t ptid, struct target_waitstatus *status, int options)
7298 {
7299   struct remote_state *rs = get_remote_state ();
7300   ptid_t event_ptid = null_ptid;
7301   char *buf;
7302   struct stop_reply *stop_reply;
7303
7304  again:
7305
7306   status->kind = TARGET_WAITKIND_IGNORE;
7307   status->value.integer = 0;
7308
7309   stop_reply = queued_stop_reply (ptid);
7310   if (stop_reply != NULL)
7311     return process_stop_reply (stop_reply, status);
7312
7313   if (rs->cached_wait_status)
7314     /* Use the cached wait status, but only once.  */
7315     rs->cached_wait_status = 0;
7316   else
7317     {
7318       int ret;
7319       int is_notif;
7320       int forever = ((options & TARGET_WNOHANG) == 0
7321                      && wait_forever_enabled_p);
7322
7323       if (!rs->waiting_for_stop_reply)
7324         {
7325           status->kind = TARGET_WAITKIND_NO_RESUMED;
7326           return minus_one_ptid;
7327         }
7328
7329       /* FIXME: cagney/1999-09-27: If we're in async mode we should
7330          _never_ wait for ever -> test on target_is_async_p().
7331          However, before we do that we need to ensure that the caller
7332          knows how to take the target into/out of async mode.  */
7333       ret = getpkt_or_notif_sane (&rs->buf, &rs->buf_size,
7334                                   forever, &is_notif);
7335
7336       /* GDB gets a notification.  Return to core as this event is
7337          not interesting.  */
7338       if (ret != -1 && is_notif)
7339         return minus_one_ptid;
7340
7341       if (ret == -1 && (options & TARGET_WNOHANG) != 0)
7342         return minus_one_ptid;
7343     }
7344
7345   buf = rs->buf;
7346
7347   /* Assume that the target has acknowledged Ctrl-C unless we receive
7348      an 'F' or 'O' packet.  */
7349   if (buf[0] != 'F' && buf[0] != 'O')
7350     rs->ctrlc_pending_p = 0;
7351
7352   switch (buf[0])
7353     {
7354     case 'E':           /* Error of some sort.  */
7355       /* We're out of sync with the target now.  Did it continue or
7356          not?  Not is more likely, so report a stop.  */
7357       rs->waiting_for_stop_reply = 0;
7358
7359       warning (_("Remote failure reply: %s"), buf);
7360       status->kind = TARGET_WAITKIND_STOPPED;
7361       status->value.sig = GDB_SIGNAL_0;
7362       break;
7363     case 'F':           /* File-I/O request.  */
7364       /* GDB may access the inferior memory while handling the File-I/O
7365          request, but we don't want GDB accessing memory while waiting
7366          for a stop reply.  See the comments in putpkt_binary.  Set
7367          waiting_for_stop_reply to 0 temporarily.  */
7368       rs->waiting_for_stop_reply = 0;
7369       remote_fileio_request (buf, rs->ctrlc_pending_p);
7370       rs->ctrlc_pending_p = 0;
7371       /* GDB handled the File-I/O request, and the target is running
7372          again.  Keep waiting for events.  */
7373       rs->waiting_for_stop_reply = 1;
7374       break;
7375     case 'N': case 'T': case 'S': case 'X': case 'W':
7376       {
7377         struct stop_reply *stop_reply;
7378
7379         /* There is a stop reply to handle.  */
7380         rs->waiting_for_stop_reply = 0;
7381
7382         stop_reply
7383           = (struct stop_reply *) remote_notif_parse (&notif_client_stop,
7384                                                       rs->buf);
7385
7386         event_ptid = process_stop_reply (stop_reply, status);
7387         break;
7388       }
7389     case 'O':           /* Console output.  */
7390       remote_console_output (buf + 1);
7391       break;
7392     case '\0':
7393       if (rs->last_sent_signal != GDB_SIGNAL_0)
7394         {
7395           /* Zero length reply means that we tried 'S' or 'C' and the
7396              remote system doesn't support it.  */
7397           target_terminal_ours_for_output ();
7398           printf_filtered
7399             ("Can't send signals to this remote system.  %s not sent.\n",
7400              gdb_signal_to_name (rs->last_sent_signal));
7401           rs->last_sent_signal = GDB_SIGNAL_0;
7402           target_terminal_inferior ();
7403
7404           strcpy (buf, rs->last_sent_step ? "s" : "c");
7405           putpkt (buf);
7406           break;
7407         }
7408       /* else fallthrough */
7409     default:
7410       warning (_("Invalid remote reply: %s"), buf);
7411       break;
7412     }
7413
7414   if (status->kind == TARGET_WAITKIND_NO_RESUMED)
7415     return minus_one_ptid;
7416   else if (status->kind == TARGET_WAITKIND_IGNORE)
7417     {
7418       /* Nothing interesting happened.  If we're doing a non-blocking
7419          poll, we're done.  Otherwise, go back to waiting.  */
7420       if (options & TARGET_WNOHANG)
7421         return minus_one_ptid;
7422       else
7423         goto again;
7424     }
7425   else if (status->kind != TARGET_WAITKIND_EXITED
7426            && status->kind != TARGET_WAITKIND_SIGNALLED)
7427     {
7428       if (!ptid_equal (event_ptid, null_ptid))
7429         record_currthread (rs, event_ptid);
7430       else
7431         event_ptid = inferior_ptid;
7432     }
7433   else
7434     /* A process exit.  Invalidate our notion of current thread.  */
7435     record_currthread (rs, minus_one_ptid);
7436
7437   return event_ptid;
7438 }
7439
7440 /* Wait until the remote machine stops, then return, storing status in
7441    STATUS just as `wait' would.  */
7442
7443 static ptid_t
7444 remote_wait (struct target_ops *ops,
7445              ptid_t ptid, struct target_waitstatus *status, int options)
7446 {
7447   ptid_t event_ptid;
7448
7449   if (target_is_non_stop_p ())
7450     event_ptid = remote_wait_ns (ptid, status, options);
7451   else
7452     event_ptid = remote_wait_as (ptid, status, options);
7453
7454   if (target_is_async_p ())
7455     {
7456       /* If there are are events left in the queue tell the event loop
7457          to return here.  */
7458       if (!QUEUE_is_empty (stop_reply_p, stop_reply_queue))
7459         mark_async_event_handler (remote_async_inferior_event_token);
7460     }
7461
7462   return event_ptid;
7463 }
7464
7465 /* Fetch a single register using a 'p' packet.  */
7466
7467 static int
7468 fetch_register_using_p (struct regcache *regcache, struct packet_reg *reg)
7469 {
7470   struct gdbarch *gdbarch = get_regcache_arch (regcache);
7471   struct remote_state *rs = get_remote_state ();
7472   char *buf, *p;
7473   gdb_byte *regp = (gdb_byte *) alloca (register_size (gdbarch, reg->regnum));
7474   int i;
7475
7476   if (packet_support (PACKET_p) == PACKET_DISABLE)
7477     return 0;
7478
7479   if (reg->pnum == -1)
7480     return 0;
7481
7482   p = rs->buf;
7483   *p++ = 'p';
7484   p += hexnumstr (p, reg->pnum);
7485   *p++ = '\0';
7486   putpkt (rs->buf);
7487   getpkt (&rs->buf, &rs->buf_size, 0);
7488
7489   buf = rs->buf;
7490
7491   switch (packet_ok (buf, &remote_protocol_packets[PACKET_p]))
7492     {
7493     case PACKET_OK:
7494       break;
7495     case PACKET_UNKNOWN:
7496       return 0;
7497     case PACKET_ERROR:
7498       error (_("Could not fetch register \"%s\"; remote failure reply '%s'"),
7499              gdbarch_register_name (get_regcache_arch (regcache), 
7500                                     reg->regnum), 
7501              buf);
7502     }
7503
7504   /* If this register is unfetchable, tell the regcache.  */
7505   if (buf[0] == 'x')
7506     {
7507       regcache_raw_supply (regcache, reg->regnum, NULL);
7508       return 1;
7509     }
7510
7511   /* Otherwise, parse and supply the value.  */
7512   p = buf;
7513   i = 0;
7514   while (p[0] != 0)
7515     {
7516       if (p[1] == 0)
7517         error (_("fetch_register_using_p: early buf termination"));
7518
7519       regp[i++] = fromhex (p[0]) * 16 + fromhex (p[1]);
7520       p += 2;
7521     }
7522   regcache_raw_supply (regcache, reg->regnum, regp);
7523   return 1;
7524 }
7525
7526 /* Fetch the registers included in the target's 'g' packet.  */
7527
7528 static int
7529 send_g_packet (void)
7530 {
7531   struct remote_state *rs = get_remote_state ();
7532   int buf_len;
7533
7534   xsnprintf (rs->buf, get_remote_packet_size (), "g");
7535   remote_send (&rs->buf, &rs->buf_size);
7536
7537   /* We can get out of synch in various cases.  If the first character
7538      in the buffer is not a hex character, assume that has happened
7539      and try to fetch another packet to read.  */
7540   while ((rs->buf[0] < '0' || rs->buf[0] > '9')
7541          && (rs->buf[0] < 'A' || rs->buf[0] > 'F')
7542          && (rs->buf[0] < 'a' || rs->buf[0] > 'f')
7543          && rs->buf[0] != 'x')  /* New: unavailable register value.  */
7544     {
7545       if (remote_debug)
7546         fprintf_unfiltered (gdb_stdlog,
7547                             "Bad register packet; fetching a new packet\n");
7548       getpkt (&rs->buf, &rs->buf_size, 0);
7549     }
7550
7551   buf_len = strlen (rs->buf);
7552
7553   /* Sanity check the received packet.  */
7554   if (buf_len % 2 != 0)
7555     error (_("Remote 'g' packet reply is of odd length: %s"), rs->buf);
7556
7557   return buf_len / 2;
7558 }
7559
7560 static void
7561 process_g_packet (struct regcache *regcache)
7562 {
7563   struct gdbarch *gdbarch = get_regcache_arch (regcache);
7564   struct remote_state *rs = get_remote_state ();
7565   struct remote_arch_state *rsa = get_remote_arch_state ();
7566   int i, buf_len;
7567   char *p;
7568   char *regs;
7569
7570   buf_len = strlen (rs->buf);
7571
7572   /* Further sanity checks, with knowledge of the architecture.  */
7573   if (buf_len > 2 * rsa->sizeof_g_packet)
7574     error (_("Remote 'g' packet reply is too long: %s"), rs->buf);
7575
7576   /* Save the size of the packet sent to us by the target.  It is used
7577      as a heuristic when determining the max size of packets that the
7578      target can safely receive.  */
7579   if (rsa->actual_register_packet_size == 0)
7580     rsa->actual_register_packet_size = buf_len;
7581
7582   /* If this is smaller than we guessed the 'g' packet would be,
7583      update our records.  A 'g' reply that doesn't include a register's
7584      value implies either that the register is not available, or that
7585      the 'p' packet must be used.  */
7586   if (buf_len < 2 * rsa->sizeof_g_packet)
7587     {
7588       long sizeof_g_packet = buf_len / 2;
7589
7590       for (i = 0; i < gdbarch_num_regs (gdbarch); i++)
7591         {
7592           long offset = rsa->regs[i].offset;
7593           long reg_size = register_size (gdbarch, i);
7594
7595           if (rsa->regs[i].pnum == -1)
7596             continue;
7597
7598           if (offset >= sizeof_g_packet)
7599             rsa->regs[i].in_g_packet = 0;
7600           else if (offset + reg_size > sizeof_g_packet)
7601             error (_("Truncated register %d in remote 'g' packet"), i);
7602           else
7603             rsa->regs[i].in_g_packet = 1;
7604         }
7605
7606       /* Looks valid enough, we can assume this is the correct length
7607          for a 'g' packet.  It's important not to adjust
7608          rsa->sizeof_g_packet if we have truncated registers otherwise
7609          this "if" won't be run the next time the method is called
7610          with a packet of the same size and one of the internal errors
7611          below will trigger instead.  */
7612       rsa->sizeof_g_packet = sizeof_g_packet;
7613     }
7614
7615   regs = (char *) alloca (rsa->sizeof_g_packet);
7616
7617   /* Unimplemented registers read as all bits zero.  */
7618   memset (regs, 0, rsa->sizeof_g_packet);
7619
7620   /* Reply describes registers byte by byte, each byte encoded as two
7621      hex characters.  Suck them all up, then supply them to the
7622      register cacheing/storage mechanism.  */
7623
7624   p = rs->buf;
7625   for (i = 0; i < rsa->sizeof_g_packet; i++)
7626     {
7627       if (p[0] == 0 || p[1] == 0)
7628         /* This shouldn't happen - we adjusted sizeof_g_packet above.  */
7629         internal_error (__FILE__, __LINE__,
7630                         _("unexpected end of 'g' packet reply"));
7631
7632       if (p[0] == 'x' && p[1] == 'x')
7633         regs[i] = 0;            /* 'x' */
7634       else
7635         regs[i] = fromhex (p[0]) * 16 + fromhex (p[1]);
7636       p += 2;
7637     }
7638
7639   for (i = 0; i < gdbarch_num_regs (gdbarch); i++)
7640     {
7641       struct packet_reg *r = &rsa->regs[i];
7642       long reg_size = register_size (gdbarch, i);
7643
7644       if (r->in_g_packet)
7645         {
7646           if ((r->offset + reg_size) * 2 > strlen (rs->buf))
7647             /* This shouldn't happen - we adjusted in_g_packet above.  */
7648             internal_error (__FILE__, __LINE__,
7649                             _("unexpected end of 'g' packet reply"));
7650           else if (rs->buf[r->offset * 2] == 'x')
7651             {
7652               gdb_assert (r->offset * 2 < strlen (rs->buf));
7653               /* The register isn't available, mark it as such (at
7654                  the same time setting the value to zero).  */
7655               regcache_raw_supply (regcache, r->regnum, NULL);
7656             }
7657           else
7658             regcache_raw_supply (regcache, r->regnum,
7659                                  regs + r->offset);
7660         }
7661     }
7662 }
7663
7664 static void
7665 fetch_registers_using_g (struct regcache *regcache)
7666 {
7667   send_g_packet ();
7668   process_g_packet (regcache);
7669 }
7670
7671 /* Make the remote selected traceframe match GDB's selected
7672    traceframe.  */
7673
7674 static void
7675 set_remote_traceframe (void)
7676 {
7677   int newnum;
7678   struct remote_state *rs = get_remote_state ();
7679
7680   if (rs->remote_traceframe_number == get_traceframe_number ())
7681     return;
7682
7683   /* Avoid recursion, remote_trace_find calls us again.  */
7684   rs->remote_traceframe_number = get_traceframe_number ();
7685
7686   newnum = target_trace_find (tfind_number,
7687                               get_traceframe_number (), 0, 0, NULL);
7688
7689   /* Should not happen.  If it does, all bets are off.  */
7690   if (newnum != get_traceframe_number ())
7691     warning (_("could not set remote traceframe"));
7692 }
7693
7694 static void
7695 remote_fetch_registers (struct target_ops *ops,
7696                         struct regcache *regcache, int regnum)
7697 {
7698   struct remote_arch_state *rsa = get_remote_arch_state ();
7699   int i;
7700
7701   set_remote_traceframe ();
7702   set_general_thread (inferior_ptid);
7703
7704   if (regnum >= 0)
7705     {
7706       struct packet_reg *reg = packet_reg_from_regnum (rsa, regnum);
7707
7708       gdb_assert (reg != NULL);
7709
7710       /* If this register might be in the 'g' packet, try that first -
7711          we are likely to read more than one register.  If this is the
7712          first 'g' packet, we might be overly optimistic about its
7713          contents, so fall back to 'p'.  */
7714       if (reg->in_g_packet)
7715         {
7716           fetch_registers_using_g (regcache);
7717           if (reg->in_g_packet)
7718             return;
7719         }
7720
7721       if (fetch_register_using_p (regcache, reg))
7722         return;
7723
7724       /* This register is not available.  */
7725       regcache_raw_supply (regcache, reg->regnum, NULL);
7726
7727       return;
7728     }
7729
7730   fetch_registers_using_g (regcache);
7731
7732   for (i = 0; i < gdbarch_num_regs (get_regcache_arch (regcache)); i++)
7733     if (!rsa->regs[i].in_g_packet)
7734       if (!fetch_register_using_p (regcache, &rsa->regs[i]))
7735         {
7736           /* This register is not available.  */
7737           regcache_raw_supply (regcache, i, NULL);
7738         }
7739 }
7740
7741 /* Prepare to store registers.  Since we may send them all (using a
7742    'G' request), we have to read out the ones we don't want to change
7743    first.  */
7744
7745 static void
7746 remote_prepare_to_store (struct target_ops *self, struct regcache *regcache)
7747 {
7748   struct remote_arch_state *rsa = get_remote_arch_state ();
7749   int i;
7750   gdb_byte buf[MAX_REGISTER_SIZE];
7751
7752   /* Make sure the entire registers array is valid.  */
7753   switch (packet_support (PACKET_P))
7754     {
7755     case PACKET_DISABLE:
7756     case PACKET_SUPPORT_UNKNOWN:
7757       /* Make sure all the necessary registers are cached.  */
7758       for (i = 0; i < gdbarch_num_regs (get_regcache_arch (regcache)); i++)
7759         if (rsa->regs[i].in_g_packet)
7760           regcache_raw_read (regcache, rsa->regs[i].regnum, buf);
7761       break;
7762     case PACKET_ENABLE:
7763       break;
7764     }
7765 }
7766
7767 /* Helper: Attempt to store REGNUM using the P packet.  Return fail IFF
7768    packet was not recognized.  */
7769
7770 static int
7771 store_register_using_P (const struct regcache *regcache, 
7772                         struct packet_reg *reg)
7773 {
7774   struct gdbarch *gdbarch = get_regcache_arch (regcache);
7775   struct remote_state *rs = get_remote_state ();
7776   /* Try storing a single register.  */
7777   char *buf = rs->buf;
7778   gdb_byte *regp = (gdb_byte *) alloca (register_size (gdbarch, reg->regnum));
7779   char *p;
7780
7781   if (packet_support (PACKET_P) == PACKET_DISABLE)
7782     return 0;
7783
7784   if (reg->pnum == -1)
7785     return 0;
7786
7787   xsnprintf (buf, get_remote_packet_size (), "P%s=", phex_nz (reg->pnum, 0));
7788   p = buf + strlen (buf);
7789   regcache_raw_collect (regcache, reg->regnum, regp);
7790   bin2hex (regp, p, register_size (gdbarch, reg->regnum));
7791   putpkt (rs->buf);
7792   getpkt (&rs->buf, &rs->buf_size, 0);
7793
7794   switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_P]))
7795     {
7796     case PACKET_OK:
7797       return 1;
7798     case PACKET_ERROR:
7799       error (_("Could not write register \"%s\"; remote failure reply '%s'"),
7800              gdbarch_register_name (gdbarch, reg->regnum), rs->buf);
7801     case PACKET_UNKNOWN:
7802       return 0;
7803     default:
7804       internal_error (__FILE__, __LINE__, _("Bad result from packet_ok"));
7805     }
7806 }
7807
7808 /* Store register REGNUM, or all registers if REGNUM == -1, from the
7809    contents of the register cache buffer.  FIXME: ignores errors.  */
7810
7811 static void
7812 store_registers_using_G (const struct regcache *regcache)
7813 {
7814   struct remote_state *rs = get_remote_state ();
7815   struct remote_arch_state *rsa = get_remote_arch_state ();
7816   gdb_byte *regs;
7817   char *p;
7818
7819   /* Extract all the registers in the regcache copying them into a
7820      local buffer.  */
7821   {
7822     int i;
7823
7824     regs = (gdb_byte *) alloca (rsa->sizeof_g_packet);
7825     memset (regs, 0, rsa->sizeof_g_packet);
7826     for (i = 0; i < gdbarch_num_regs (get_regcache_arch (regcache)); i++)
7827       {
7828         struct packet_reg *r = &rsa->regs[i];
7829
7830         if (r->in_g_packet)
7831           regcache_raw_collect (regcache, r->regnum, regs + r->offset);
7832       }
7833   }
7834
7835   /* Command describes registers byte by byte,
7836      each byte encoded as two hex characters.  */
7837   p = rs->buf;
7838   *p++ = 'G';
7839   /* remote_prepare_to_store insures that rsa->sizeof_g_packet gets
7840      updated.  */
7841   bin2hex (regs, p, rsa->sizeof_g_packet);
7842   putpkt (rs->buf);
7843   getpkt (&rs->buf, &rs->buf_size, 0);
7844   if (packet_check_result (rs->buf) == PACKET_ERROR)
7845     error (_("Could not write registers; remote failure reply '%s'"), 
7846            rs->buf);
7847 }
7848
7849 /* Store register REGNUM, or all registers if REGNUM == -1, from the contents
7850    of the register cache buffer.  FIXME: ignores errors.  */
7851
7852 static void
7853 remote_store_registers (struct target_ops *ops,
7854                         struct regcache *regcache, int regnum)
7855 {
7856   struct remote_arch_state *rsa = get_remote_arch_state ();
7857   int i;
7858
7859   set_remote_traceframe ();
7860   set_general_thread (inferior_ptid);
7861
7862   if (regnum >= 0)
7863     {
7864       struct packet_reg *reg = packet_reg_from_regnum (rsa, regnum);
7865
7866       gdb_assert (reg != NULL);
7867
7868       /* Always prefer to store registers using the 'P' packet if
7869          possible; we often change only a small number of registers.
7870          Sometimes we change a larger number; we'd need help from a
7871          higher layer to know to use 'G'.  */
7872       if (store_register_using_P (regcache, reg))
7873         return;
7874
7875       /* For now, don't complain if we have no way to write the
7876          register.  GDB loses track of unavailable registers too
7877          easily.  Some day, this may be an error.  We don't have
7878          any way to read the register, either...  */
7879       if (!reg->in_g_packet)
7880         return;
7881
7882       store_registers_using_G (regcache);
7883       return;
7884     }
7885
7886   store_registers_using_G (regcache);
7887
7888   for (i = 0; i < gdbarch_num_regs (get_regcache_arch (regcache)); i++)
7889     if (!rsa->regs[i].in_g_packet)
7890       if (!store_register_using_P (regcache, &rsa->regs[i]))
7891         /* See above for why we do not issue an error here.  */
7892         continue;
7893 }
7894 \f
7895
7896 /* Return the number of hex digits in num.  */
7897
7898 static int
7899 hexnumlen (ULONGEST num)
7900 {
7901   int i;
7902
7903   for (i = 0; num != 0; i++)
7904     num >>= 4;
7905
7906   return std::max (i, 1);
7907 }
7908
7909 /* Set BUF to the minimum number of hex digits representing NUM.  */
7910
7911 static int
7912 hexnumstr (char *buf, ULONGEST num)
7913 {
7914   int len = hexnumlen (num);
7915
7916   return hexnumnstr (buf, num, len);
7917 }
7918
7919
7920 /* Set BUF to the hex digits representing NUM, padded to WIDTH characters.  */
7921
7922 static int
7923 hexnumnstr (char *buf, ULONGEST num, int width)
7924 {
7925   int i;
7926
7927   buf[width] = '\0';
7928
7929   for (i = width - 1; i >= 0; i--)
7930     {
7931       buf[i] = "0123456789abcdef"[(num & 0xf)];
7932       num >>= 4;
7933     }
7934
7935   return width;
7936 }
7937
7938 /* Mask all but the least significant REMOTE_ADDRESS_SIZE bits.  */
7939
7940 static CORE_ADDR
7941 remote_address_masked (CORE_ADDR addr)
7942 {
7943   unsigned int address_size = remote_address_size;
7944
7945   /* If "remoteaddresssize" was not set, default to target address size.  */
7946   if (!address_size)
7947     address_size = gdbarch_addr_bit (target_gdbarch ());
7948
7949   if (address_size > 0
7950       && address_size < (sizeof (ULONGEST) * 8))
7951     {
7952       /* Only create a mask when that mask can safely be constructed
7953          in a ULONGEST variable.  */
7954       ULONGEST mask = 1;
7955
7956       mask = (mask << address_size) - 1;
7957       addr &= mask;
7958     }
7959   return addr;
7960 }
7961
7962 /* Determine whether the remote target supports binary downloading.
7963    This is accomplished by sending a no-op memory write of zero length
7964    to the target at the specified address. It does not suffice to send
7965    the whole packet, since many stubs strip the eighth bit and
7966    subsequently compute a wrong checksum, which causes real havoc with
7967    remote_write_bytes.
7968
7969    NOTE: This can still lose if the serial line is not eight-bit
7970    clean.  In cases like this, the user should clear "remote
7971    X-packet".  */
7972
7973 static void
7974 check_binary_download (CORE_ADDR addr)
7975 {
7976   struct remote_state *rs = get_remote_state ();
7977
7978   switch (packet_support (PACKET_X))
7979     {
7980     case PACKET_DISABLE:
7981       break;
7982     case PACKET_ENABLE:
7983       break;
7984     case PACKET_SUPPORT_UNKNOWN:
7985       {
7986         char *p;
7987
7988         p = rs->buf;
7989         *p++ = 'X';
7990         p += hexnumstr (p, (ULONGEST) addr);
7991         *p++ = ',';
7992         p += hexnumstr (p, (ULONGEST) 0);
7993         *p++ = ':';
7994         *p = '\0';
7995
7996         putpkt_binary (rs->buf, (int) (p - rs->buf));
7997         getpkt (&rs->buf, &rs->buf_size, 0);
7998
7999         if (rs->buf[0] == '\0')
8000           {
8001             if (remote_debug)
8002               fprintf_unfiltered (gdb_stdlog,
8003                                   "binary downloading NOT "
8004                                   "supported by target\n");
8005             remote_protocol_packets[PACKET_X].support = PACKET_DISABLE;
8006           }
8007         else
8008           {
8009             if (remote_debug)
8010               fprintf_unfiltered (gdb_stdlog,
8011                                   "binary downloading supported by target\n");
8012             remote_protocol_packets[PACKET_X].support = PACKET_ENABLE;
8013           }
8014         break;
8015       }
8016     }
8017 }
8018
8019 /* Helper function to resize the payload in order to try to get a good
8020    alignment.  We try to write an amount of data such that the next write will
8021    start on an address aligned on REMOTE_ALIGN_WRITES.  */
8022
8023 static int
8024 align_for_efficient_write (int todo, CORE_ADDR memaddr)
8025 {
8026   return ((memaddr + todo) & ~(REMOTE_ALIGN_WRITES - 1)) - memaddr;
8027 }
8028
8029 /* Write memory data directly to the remote machine.
8030    This does not inform the data cache; the data cache uses this.
8031    HEADER is the starting part of the packet.
8032    MEMADDR is the address in the remote memory space.
8033    MYADDR is the address of the buffer in our space.
8034    LEN_UNITS is the number of addressable units to write.
8035    UNIT_SIZE is the length in bytes of an addressable unit.
8036    PACKET_FORMAT should be either 'X' or 'M', and indicates if we
8037    should send data as binary ('X'), or hex-encoded ('M').
8038
8039    The function creates packet of the form
8040        <HEADER><ADDRESS>,<LENGTH>:<DATA>
8041
8042    where encoding of <DATA> is terminated by PACKET_FORMAT.
8043
8044    If USE_LENGTH is 0, then the <LENGTH> field and the preceding comma
8045    are omitted.
8046
8047    Return the transferred status, error or OK (an
8048    'enum target_xfer_status' value).  Save the number of addressable units
8049    transferred in *XFERED_LEN_UNITS.  Only transfer a single packet.
8050
8051    On a platform with an addressable memory size of 2 bytes (UNIT_SIZE == 2), an
8052    exchange between gdb and the stub could look like (?? in place of the
8053    checksum):
8054
8055    -> $m1000,4#??
8056    <- aaaabbbbccccdddd
8057
8058    -> $M1000,3:eeeeffffeeee#??
8059    <- OK
8060
8061    -> $m1000,4#??
8062    <- eeeeffffeeeedddd  */
8063
8064 static enum target_xfer_status
8065 remote_write_bytes_aux (const char *header, CORE_ADDR memaddr,
8066                         const gdb_byte *myaddr, ULONGEST len_units,
8067                         int unit_size, ULONGEST *xfered_len_units,
8068                         char packet_format, int use_length)
8069 {
8070   struct remote_state *rs = get_remote_state ();
8071   char *p;
8072   char *plen = NULL;
8073   int plenlen = 0;
8074   int todo_units;
8075   int units_written;
8076   int payload_capacity_bytes;
8077   int payload_length_bytes;
8078
8079   if (packet_format != 'X' && packet_format != 'M')
8080     internal_error (__FILE__, __LINE__,
8081                     _("remote_write_bytes_aux: bad packet format"));
8082
8083   if (len_units == 0)
8084     return TARGET_XFER_EOF;
8085
8086   payload_capacity_bytes = get_memory_write_packet_size ();
8087
8088   /* The packet buffer will be large enough for the payload;
8089      get_memory_packet_size ensures this.  */
8090   rs->buf[0] = '\0';
8091
8092   /* Compute the size of the actual payload by subtracting out the
8093      packet header and footer overhead: "$M<memaddr>,<len>:...#nn".  */
8094
8095   payload_capacity_bytes -= strlen ("$,:#NN");
8096   if (!use_length)
8097     /* The comma won't be used.  */
8098     payload_capacity_bytes += 1;
8099   payload_capacity_bytes -= strlen (header);
8100   payload_capacity_bytes -= hexnumlen (memaddr);
8101
8102   /* Construct the packet excluding the data: "<header><memaddr>,<len>:".  */
8103
8104   strcat (rs->buf, header);
8105   p = rs->buf + strlen (header);
8106
8107   /* Compute a best guess of the number of bytes actually transfered.  */
8108   if (packet_format == 'X')
8109     {
8110       /* Best guess at number of bytes that will fit.  */
8111       todo_units = std::min (len_units,
8112                              (ULONGEST) payload_capacity_bytes / unit_size);
8113       if (use_length)
8114         payload_capacity_bytes -= hexnumlen (todo_units);
8115       todo_units = std::min (todo_units, payload_capacity_bytes / unit_size);
8116     }
8117   else
8118     {
8119       /* Number of bytes that will fit.  */
8120       todo_units
8121         = std::min (len_units,
8122                     (ULONGEST) (payload_capacity_bytes / unit_size) / 2);
8123       if (use_length)
8124         payload_capacity_bytes -= hexnumlen (todo_units);
8125       todo_units = std::min (todo_units,
8126                              (payload_capacity_bytes / unit_size) / 2);
8127     }
8128
8129   if (todo_units <= 0)
8130     internal_error (__FILE__, __LINE__,
8131                     _("minimum packet size too small to write data"));
8132
8133   /* If we already need another packet, then try to align the end
8134      of this packet to a useful boundary.  */
8135   if (todo_units > 2 * REMOTE_ALIGN_WRITES && todo_units < len_units)
8136     todo_units = align_for_efficient_write (todo_units, memaddr);
8137
8138   /* Append "<memaddr>".  */
8139   memaddr = remote_address_masked (memaddr);
8140   p += hexnumstr (p, (ULONGEST) memaddr);
8141
8142   if (use_length)
8143     {
8144       /* Append ",".  */
8145       *p++ = ',';
8146
8147       /* Append the length and retain its location and size.  It may need to be
8148          adjusted once the packet body has been created.  */
8149       plen = p;
8150       plenlen = hexnumstr (p, (ULONGEST) todo_units);
8151       p += plenlen;
8152     }
8153
8154   /* Append ":".  */
8155   *p++ = ':';
8156   *p = '\0';
8157
8158   /* Append the packet body.  */
8159   if (packet_format == 'X')
8160     {
8161       /* Binary mode.  Send target system values byte by byte, in
8162          increasing byte addresses.  Only escape certain critical
8163          characters.  */
8164       payload_length_bytes =
8165           remote_escape_output (myaddr, todo_units, unit_size, (gdb_byte *) p,
8166                                 &units_written, payload_capacity_bytes);
8167
8168       /* If not all TODO units fit, then we'll need another packet.  Make
8169          a second try to keep the end of the packet aligned.  Don't do
8170          this if the packet is tiny.  */
8171       if (units_written < todo_units && units_written > 2 * REMOTE_ALIGN_WRITES)
8172         {
8173           int new_todo_units;
8174
8175           new_todo_units = align_for_efficient_write (units_written, memaddr);
8176
8177           if (new_todo_units != units_written)
8178             payload_length_bytes =
8179                 remote_escape_output (myaddr, new_todo_units, unit_size,
8180                                       (gdb_byte *) p, &units_written,
8181                                       payload_capacity_bytes);
8182         }
8183
8184       p += payload_length_bytes;
8185       if (use_length && units_written < todo_units)
8186         {
8187           /* Escape chars have filled up the buffer prematurely,
8188              and we have actually sent fewer units than planned.
8189              Fix-up the length field of the packet.  Use the same
8190              number of characters as before.  */
8191           plen += hexnumnstr (plen, (ULONGEST) units_written,
8192                               plenlen);
8193           *plen = ':';  /* overwrite \0 from hexnumnstr() */
8194         }
8195     }
8196   else
8197     {
8198       /* Normal mode: Send target system values byte by byte, in
8199          increasing byte addresses.  Each byte is encoded as a two hex
8200          value.  */
8201       p += 2 * bin2hex (myaddr, p, todo_units * unit_size);
8202       units_written = todo_units;
8203     }
8204
8205   putpkt_binary (rs->buf, (int) (p - rs->buf));
8206   getpkt (&rs->buf, &rs->buf_size, 0);
8207
8208   if (rs->buf[0] == 'E')
8209     return TARGET_XFER_E_IO;
8210
8211   /* Return UNITS_WRITTEN, not TODO_UNITS, in case escape chars caused us to
8212      send fewer units than we'd planned.  */
8213   *xfered_len_units = (ULONGEST) units_written;
8214   return TARGET_XFER_OK;
8215 }
8216
8217 /* Write memory data directly to the remote machine.
8218    This does not inform the data cache; the data cache uses this.
8219    MEMADDR is the address in the remote memory space.
8220    MYADDR is the address of the buffer in our space.
8221    LEN is the number of bytes.
8222
8223    Return the transferred status, error or OK (an
8224    'enum target_xfer_status' value).  Save the number of bytes
8225    transferred in *XFERED_LEN.  Only transfer a single packet.  */
8226
8227 static enum target_xfer_status
8228 remote_write_bytes (CORE_ADDR memaddr, const gdb_byte *myaddr, ULONGEST len,
8229                     int unit_size, ULONGEST *xfered_len)
8230 {
8231   char *packet_format = 0;
8232
8233   /* Check whether the target supports binary download.  */
8234   check_binary_download (memaddr);
8235
8236   switch (packet_support (PACKET_X))
8237     {
8238     case PACKET_ENABLE:
8239       packet_format = "X";
8240       break;
8241     case PACKET_DISABLE:
8242       packet_format = "M";
8243       break;
8244     case PACKET_SUPPORT_UNKNOWN:
8245       internal_error (__FILE__, __LINE__,
8246                       _("remote_write_bytes: bad internal state"));
8247     default:
8248       internal_error (__FILE__, __LINE__, _("bad switch"));
8249     }
8250
8251   return remote_write_bytes_aux (packet_format,
8252                                  memaddr, myaddr, len, unit_size, xfered_len,
8253                                  packet_format[0], 1);
8254 }
8255
8256 /* Read memory data directly from the remote machine.
8257    This does not use the data cache; the data cache uses this.
8258    MEMADDR is the address in the remote memory space.
8259    MYADDR is the address of the buffer in our space.
8260    LEN_UNITS is the number of addressable memory units to read..
8261    UNIT_SIZE is the length in bytes of an addressable unit.
8262
8263    Return the transferred status, error or OK (an
8264    'enum target_xfer_status' value).  Save the number of bytes
8265    transferred in *XFERED_LEN_UNITS.
8266
8267    See the comment of remote_write_bytes_aux for an example of
8268    memory read/write exchange between gdb and the stub.  */
8269
8270 static enum target_xfer_status
8271 remote_read_bytes_1 (CORE_ADDR memaddr, gdb_byte *myaddr, ULONGEST len_units,
8272                      int unit_size, ULONGEST *xfered_len_units)
8273 {
8274   struct remote_state *rs = get_remote_state ();
8275   int buf_size_bytes;           /* Max size of packet output buffer.  */
8276   char *p;
8277   int todo_units;
8278   int decoded_bytes;
8279
8280   buf_size_bytes = get_memory_read_packet_size ();
8281   /* The packet buffer will be large enough for the payload;
8282      get_memory_packet_size ensures this.  */
8283
8284   /* Number of units that will fit.  */
8285   todo_units = std::min (len_units,
8286                          (ULONGEST) (buf_size_bytes / unit_size) / 2);
8287
8288   /* Construct "m"<memaddr>","<len>".  */
8289   memaddr = remote_address_masked (memaddr);
8290   p = rs->buf;
8291   *p++ = 'm';
8292   p += hexnumstr (p, (ULONGEST) memaddr);
8293   *p++ = ',';
8294   p += hexnumstr (p, (ULONGEST) todo_units);
8295   *p = '\0';
8296   putpkt (rs->buf);
8297   getpkt (&rs->buf, &rs->buf_size, 0);
8298   if (rs->buf[0] == 'E'
8299       && isxdigit (rs->buf[1]) && isxdigit (rs->buf[2])
8300       && rs->buf[3] == '\0')
8301     return TARGET_XFER_E_IO;
8302   /* Reply describes memory byte by byte, each byte encoded as two hex
8303      characters.  */
8304   p = rs->buf;
8305   decoded_bytes = hex2bin (p, myaddr, todo_units * unit_size);
8306   /* Return what we have.  Let higher layers handle partial reads.  */
8307   *xfered_len_units = (ULONGEST) (decoded_bytes / unit_size);
8308   return TARGET_XFER_OK;
8309 }
8310
8311 /* Using the set of read-only target sections of remote, read live
8312    read-only memory.
8313
8314    For interface/parameters/return description see target.h,
8315    to_xfer_partial.  */
8316
8317 static enum target_xfer_status
8318 remote_xfer_live_readonly_partial (struct target_ops *ops, gdb_byte *readbuf,
8319                                    ULONGEST memaddr, ULONGEST len,
8320                                    int unit_size, ULONGEST *xfered_len)
8321 {
8322   struct target_section *secp;
8323   struct target_section_table *table;
8324
8325   secp = target_section_by_addr (ops, memaddr);
8326   if (secp != NULL
8327       && (bfd_get_section_flags (secp->the_bfd_section->owner,
8328                                  secp->the_bfd_section)
8329           & SEC_READONLY))
8330     {
8331       struct target_section *p;
8332       ULONGEST memend = memaddr + len;
8333
8334       table = target_get_section_table (ops);
8335
8336       for (p = table->sections; p < table->sections_end; p++)
8337         {
8338           if (memaddr >= p->addr)
8339             {
8340               if (memend <= p->endaddr)
8341                 {
8342                   /* Entire transfer is within this section.  */
8343                   return remote_read_bytes_1 (memaddr, readbuf, len, unit_size,
8344                                               xfered_len);
8345                 }
8346               else if (memaddr >= p->endaddr)
8347                 {
8348                   /* This section ends before the transfer starts.  */
8349                   continue;
8350                 }
8351               else
8352                 {
8353                   /* This section overlaps the transfer.  Just do half.  */
8354                   len = p->endaddr - memaddr;
8355                   return remote_read_bytes_1 (memaddr, readbuf, len, unit_size,
8356                                               xfered_len);
8357                 }
8358             }
8359         }
8360     }
8361
8362   return TARGET_XFER_EOF;
8363 }
8364
8365 /* Similar to remote_read_bytes_1, but it reads from the remote stub
8366    first if the requested memory is unavailable in traceframe.
8367    Otherwise, fall back to remote_read_bytes_1.  */
8368
8369 static enum target_xfer_status
8370 remote_read_bytes (struct target_ops *ops, CORE_ADDR memaddr,
8371                    gdb_byte *myaddr, ULONGEST len, int unit_size,
8372                    ULONGEST *xfered_len)
8373 {
8374   if (len == 0)
8375     return TARGET_XFER_EOF;
8376
8377   if (get_traceframe_number () != -1)
8378     {
8379       VEC(mem_range_s) *available;
8380
8381       /* If we fail to get the set of available memory, then the
8382          target does not support querying traceframe info, and so we
8383          attempt reading from the traceframe anyway (assuming the
8384          target implements the old QTro packet then).  */
8385       if (traceframe_available_memory (&available, memaddr, len))
8386         {
8387           struct cleanup *old_chain;
8388
8389           old_chain = make_cleanup (VEC_cleanup(mem_range_s), &available);
8390
8391           if (VEC_empty (mem_range_s, available)
8392               || VEC_index (mem_range_s, available, 0)->start != memaddr)
8393             {
8394               enum target_xfer_status res;
8395
8396               /* Don't read into the traceframe's available
8397                  memory.  */
8398               if (!VEC_empty (mem_range_s, available))
8399                 {
8400                   LONGEST oldlen = len;
8401
8402                   len = VEC_index (mem_range_s, available, 0)->start - memaddr;
8403                   gdb_assert (len <= oldlen);
8404                 }
8405
8406               do_cleanups (old_chain);
8407
8408               /* This goes through the topmost target again.  */
8409               res = remote_xfer_live_readonly_partial (ops, myaddr, memaddr,
8410                                                        len, unit_size, xfered_len);
8411               if (res == TARGET_XFER_OK)
8412                 return TARGET_XFER_OK;
8413               else
8414                 {
8415                   /* No use trying further, we know some memory starting
8416                      at MEMADDR isn't available.  */
8417                   *xfered_len = len;
8418                   return TARGET_XFER_UNAVAILABLE;
8419                 }
8420             }
8421
8422           /* Don't try to read more than how much is available, in
8423              case the target implements the deprecated QTro packet to
8424              cater for older GDBs (the target's knowledge of read-only
8425              sections may be outdated by now).  */
8426           len = VEC_index (mem_range_s, available, 0)->length;
8427
8428           do_cleanups (old_chain);
8429         }
8430     }
8431
8432   return remote_read_bytes_1 (memaddr, myaddr, len, unit_size, xfered_len);
8433 }
8434
8435 \f
8436
8437 /* Sends a packet with content determined by the printf format string
8438    FORMAT and the remaining arguments, then gets the reply.  Returns
8439    whether the packet was a success, a failure, or unknown.  */
8440
8441 static enum packet_result remote_send_printf (const char *format, ...)
8442   ATTRIBUTE_PRINTF (1, 2);
8443
8444 static enum packet_result
8445 remote_send_printf (const char *format, ...)
8446 {
8447   struct remote_state *rs = get_remote_state ();
8448   int max_size = get_remote_packet_size ();
8449   va_list ap;
8450
8451   va_start (ap, format);
8452
8453   rs->buf[0] = '\0';
8454   if (vsnprintf (rs->buf, max_size, format, ap) >= max_size)
8455     internal_error (__FILE__, __LINE__, _("Too long remote packet."));
8456
8457   if (putpkt (rs->buf) < 0)
8458     error (_("Communication problem with target."));
8459
8460   rs->buf[0] = '\0';
8461   getpkt (&rs->buf, &rs->buf_size, 0);
8462
8463   return packet_check_result (rs->buf);
8464 }
8465
8466 static void
8467 restore_remote_timeout (void *p)
8468 {
8469   int value = *(int *)p;
8470
8471   remote_timeout = value;
8472 }
8473
8474 /* Flash writing can take quite some time.  We'll set
8475    effectively infinite timeout for flash operations.
8476    In future, we'll need to decide on a better approach.  */
8477 static const int remote_flash_timeout = 1000;
8478
8479 static void
8480 remote_flash_erase (struct target_ops *ops,
8481                     ULONGEST address, LONGEST length)
8482 {
8483   int addr_size = gdbarch_addr_bit (target_gdbarch ()) / 8;
8484   int saved_remote_timeout = remote_timeout;
8485   enum packet_result ret;
8486   struct cleanup *back_to = make_cleanup (restore_remote_timeout,
8487                                           &saved_remote_timeout);
8488
8489   remote_timeout = remote_flash_timeout;
8490
8491   ret = remote_send_printf ("vFlashErase:%s,%s",
8492                             phex (address, addr_size),
8493                             phex (length, 4));
8494   switch (ret)
8495     {
8496     case PACKET_UNKNOWN:
8497       error (_("Remote target does not support flash erase"));
8498     case PACKET_ERROR:
8499       error (_("Error erasing flash with vFlashErase packet"));
8500     default:
8501       break;
8502     }
8503
8504   do_cleanups (back_to);
8505 }
8506
8507 static enum target_xfer_status
8508 remote_flash_write (struct target_ops *ops, ULONGEST address,
8509                     ULONGEST length, ULONGEST *xfered_len,
8510                     const gdb_byte *data)
8511 {
8512   int saved_remote_timeout = remote_timeout;
8513   enum target_xfer_status ret;
8514   struct cleanup *back_to = make_cleanup (restore_remote_timeout,
8515                                           &saved_remote_timeout);
8516
8517   remote_timeout = remote_flash_timeout;
8518   ret = remote_write_bytes_aux ("vFlashWrite:", address, data, length, 1,
8519                                 xfered_len,'X', 0);
8520   do_cleanups (back_to);
8521
8522   return ret;
8523 }
8524
8525 static void
8526 remote_flash_done (struct target_ops *ops)
8527 {
8528   int saved_remote_timeout = remote_timeout;
8529   int ret;
8530   struct cleanup *back_to = make_cleanup (restore_remote_timeout,
8531                                           &saved_remote_timeout);
8532
8533   remote_timeout = remote_flash_timeout;
8534   ret = remote_send_printf ("vFlashDone");
8535   do_cleanups (back_to);
8536
8537   switch (ret)
8538     {
8539     case PACKET_UNKNOWN:
8540       error (_("Remote target does not support vFlashDone"));
8541     case PACKET_ERROR:
8542       error (_("Error finishing flash operation"));
8543     default:
8544       break;
8545     }
8546 }
8547
8548 static void
8549 remote_files_info (struct target_ops *ignore)
8550 {
8551   puts_filtered ("Debugging a target over a serial line.\n");
8552 }
8553 \f
8554 /* Stuff for dealing with the packets which are part of this protocol.
8555    See comment at top of file for details.  */
8556
8557 /* Close/unpush the remote target, and throw a TARGET_CLOSE_ERROR
8558    error to higher layers.  Called when a serial error is detected.
8559    The exception message is STRING, followed by a colon and a blank,
8560    the system error message for errno at function entry and final dot
8561    for output compatibility with throw_perror_with_name.  */
8562
8563 static void
8564 unpush_and_perror (const char *string)
8565 {
8566   int saved_errno = errno;
8567
8568   remote_unpush_target ();
8569   throw_error (TARGET_CLOSE_ERROR, "%s: %s.", string,
8570                safe_strerror (saved_errno));
8571 }
8572
8573 /* Read a single character from the remote end.  The current quit
8574    handler is overridden to avoid quitting in the middle of packet
8575    sequence, as that would break communication with the remote server.
8576    See remote_serial_quit_handler for more detail.  */
8577
8578 static int
8579 readchar (int timeout)
8580 {
8581   int ch;
8582   struct remote_state *rs = get_remote_state ();
8583   struct cleanup *old_chain;
8584
8585   old_chain = make_cleanup_override_quit_handler (remote_serial_quit_handler);
8586
8587   rs->got_ctrlc_during_io = 0;
8588
8589   ch = serial_readchar (rs->remote_desc, timeout);
8590
8591   if (rs->got_ctrlc_during_io)
8592     set_quit_flag ();
8593
8594   do_cleanups (old_chain);
8595
8596   if (ch >= 0)
8597     return ch;
8598
8599   switch ((enum serial_rc) ch)
8600     {
8601     case SERIAL_EOF:
8602       remote_unpush_target ();
8603       throw_error (TARGET_CLOSE_ERROR, _("Remote connection closed"));
8604       /* no return */
8605     case SERIAL_ERROR:
8606       unpush_and_perror (_("Remote communication error.  "
8607                            "Target disconnected."));
8608       /* no return */
8609     case SERIAL_TIMEOUT:
8610       break;
8611     }
8612   return ch;
8613 }
8614
8615 /* Wrapper for serial_write that closes the target and throws if
8616    writing fails.  The current quit handler is overridden to avoid
8617    quitting in the middle of packet sequence, as that would break
8618    communication with the remote server.  See
8619    remote_serial_quit_handler for more detail.  */
8620
8621 static void
8622 remote_serial_write (const char *str, int len)
8623 {
8624   struct remote_state *rs = get_remote_state ();
8625   struct cleanup *old_chain;
8626
8627   old_chain = make_cleanup_override_quit_handler (remote_serial_quit_handler);
8628
8629   rs->got_ctrlc_during_io = 0;
8630
8631   if (serial_write (rs->remote_desc, str, len))
8632     {
8633       unpush_and_perror (_("Remote communication error.  "
8634                            "Target disconnected."));
8635     }
8636
8637   if (rs->got_ctrlc_during_io)
8638     set_quit_flag ();
8639
8640   do_cleanups (old_chain);
8641 }
8642
8643 /* Send the command in *BUF to the remote machine, and read the reply
8644    into *BUF.  Report an error if we get an error reply.  Resize
8645    *BUF using xrealloc if necessary to hold the result, and update
8646    *SIZEOF_BUF.  */
8647
8648 static void
8649 remote_send (char **buf,
8650              long *sizeof_buf)
8651 {
8652   putpkt (*buf);
8653   getpkt (buf, sizeof_buf, 0);
8654
8655   if ((*buf)[0] == 'E')
8656     error (_("Remote failure reply: %s"), *buf);
8657 }
8658
8659 /* Return a string representing an escaped version of BUF, of len N.
8660    E.g. \n is converted to \\n, \t to \\t, etc.  */
8661
8662 static std::string
8663 escape_buffer (const char *buf, int n)
8664 {
8665   struct cleanup *old_chain;
8666   struct ui_file *stb;
8667
8668   stb = mem_fileopen ();
8669   old_chain = make_cleanup_ui_file_delete (stb);
8670
8671   fputstrn_unfiltered (buf, n, '\\', stb);
8672   std::string str = ui_file_as_string (stb);
8673   do_cleanups (old_chain);
8674   return str;
8675 }
8676
8677 /* Display a null-terminated packet on stdout, for debugging, using C
8678    string notation.  */
8679
8680 static void
8681 print_packet (const char *buf)
8682 {
8683   puts_filtered ("\"");
8684   fputstr_filtered (buf, '"', gdb_stdout);
8685   puts_filtered ("\"");
8686 }
8687
8688 int
8689 putpkt (const char *buf)
8690 {
8691   return putpkt_binary (buf, strlen (buf));
8692 }
8693
8694 /* Send a packet to the remote machine, with error checking.  The data
8695    of the packet is in BUF.  The string in BUF can be at most
8696    get_remote_packet_size () - 5 to account for the $, # and checksum,
8697    and for a possible /0 if we are debugging (remote_debug) and want
8698    to print the sent packet as a string.  */
8699
8700 static int
8701 putpkt_binary (const char *buf, int cnt)
8702 {
8703   struct remote_state *rs = get_remote_state ();
8704   int i;
8705   unsigned char csum = 0;
8706   char *buf2 = (char *) xmalloc (cnt + 6);
8707   struct cleanup *old_chain = make_cleanup (xfree, buf2);
8708
8709   int ch;
8710   int tcount = 0;
8711   char *p;
8712
8713   /* Catch cases like trying to read memory or listing threads while
8714      we're waiting for a stop reply.  The remote server wouldn't be
8715      ready to handle this request, so we'd hang and timeout.  We don't
8716      have to worry about this in synchronous mode, because in that
8717      case it's not possible to issue a command while the target is
8718      running.  This is not a problem in non-stop mode, because in that
8719      case, the stub is always ready to process serial input.  */
8720   if (!target_is_non_stop_p ()
8721       && target_is_async_p ()
8722       && rs->waiting_for_stop_reply)
8723     {
8724       error (_("Cannot execute this command while the target is running.\n"
8725                "Use the \"interrupt\" command to stop the target\n"
8726                "and then try again."));
8727     }
8728
8729   /* We're sending out a new packet.  Make sure we don't look at a
8730      stale cached response.  */
8731   rs->cached_wait_status = 0;
8732
8733   /* Copy the packet into buffer BUF2, encapsulating it
8734      and giving it a checksum.  */
8735
8736   p = buf2;
8737   *p++ = '$';
8738
8739   for (i = 0; i < cnt; i++)
8740     {
8741       csum += buf[i];
8742       *p++ = buf[i];
8743     }
8744   *p++ = '#';
8745   *p++ = tohex ((csum >> 4) & 0xf);
8746   *p++ = tohex (csum & 0xf);
8747
8748   /* Send it over and over until we get a positive ack.  */
8749
8750   while (1)
8751     {
8752       int started_error_output = 0;
8753
8754       if (remote_debug)
8755         {
8756           *p = '\0';
8757
8758           int len = (int) (p - buf2);
8759
8760           std::string str
8761             = escape_buffer (buf2, std::min (len, REMOTE_DEBUG_MAX_CHAR));
8762
8763           fprintf_unfiltered (gdb_stdlog, "Sending packet: %s", str.c_str ());
8764
8765           if (str.length () > REMOTE_DEBUG_MAX_CHAR)
8766             {
8767               fprintf_unfiltered (gdb_stdlog, "[%zu bytes omitted]",
8768                                   str.length () - REMOTE_DEBUG_MAX_CHAR);
8769             }
8770
8771           fprintf_unfiltered (gdb_stdlog, "...");
8772
8773           gdb_flush (gdb_stdlog);
8774         }
8775       remote_serial_write (buf2, p - buf2);
8776
8777       /* If this is a no acks version of the remote protocol, send the
8778          packet and move on.  */
8779       if (rs->noack_mode)
8780         break;
8781
8782       /* Read until either a timeout occurs (-2) or '+' is read.
8783          Handle any notification that arrives in the mean time.  */
8784       while (1)
8785         {
8786           ch = readchar (remote_timeout);
8787
8788           if (remote_debug)
8789             {
8790               switch (ch)
8791                 {
8792                 case '+':
8793                 case '-':
8794                 case SERIAL_TIMEOUT:
8795                 case '$':
8796                 case '%':
8797                   if (started_error_output)
8798                     {
8799                       putchar_unfiltered ('\n');
8800                       started_error_output = 0;
8801                     }
8802                 }
8803             }
8804
8805           switch (ch)
8806             {
8807             case '+':
8808               if (remote_debug)
8809                 fprintf_unfiltered (gdb_stdlog, "Ack\n");
8810               do_cleanups (old_chain);
8811               return 1;
8812             case '-':
8813               if (remote_debug)
8814                 fprintf_unfiltered (gdb_stdlog, "Nak\n");
8815               /* FALLTHROUGH */
8816             case SERIAL_TIMEOUT:
8817               tcount++;
8818               if (tcount > 3)
8819                 {
8820                   do_cleanups (old_chain);
8821                   return 0;
8822                 }
8823               break;            /* Retransmit buffer.  */
8824             case '$':
8825               {
8826                 if (remote_debug)
8827                   fprintf_unfiltered (gdb_stdlog,
8828                                       "Packet instead of Ack, ignoring it\n");
8829                 /* It's probably an old response sent because an ACK
8830                    was lost.  Gobble up the packet and ack it so it
8831                    doesn't get retransmitted when we resend this
8832                    packet.  */
8833                 skip_frame ();
8834                 remote_serial_write ("+", 1);
8835                 continue;       /* Now, go look for +.  */
8836               }
8837
8838             case '%':
8839               {
8840                 int val;
8841
8842                 /* If we got a notification, handle it, and go back to looking
8843                    for an ack.  */
8844                 /* We've found the start of a notification.  Now
8845                    collect the data.  */
8846                 val = read_frame (&rs->buf, &rs->buf_size);
8847                 if (val >= 0)
8848                   {
8849                     if (remote_debug)
8850                       {
8851                         std::string str = escape_buffer (rs->buf, val);
8852
8853                         fprintf_unfiltered (gdb_stdlog,
8854                                             "  Notification received: %s\n",
8855                                             str.c_str ());
8856                       }
8857                     handle_notification (rs->notif_state, rs->buf);
8858                     /* We're in sync now, rewait for the ack.  */
8859                     tcount = 0;
8860                   }
8861                 else
8862                   {
8863                     if (remote_debug)
8864                       {
8865                         if (!started_error_output)
8866                           {
8867                             started_error_output = 1;
8868                             fprintf_unfiltered (gdb_stdlog, "putpkt: Junk: ");
8869                           }
8870                         fputc_unfiltered (ch & 0177, gdb_stdlog);
8871                         fprintf_unfiltered (gdb_stdlog, "%s", rs->buf);
8872                       }
8873                   }
8874                 continue;
8875               }
8876               /* fall-through */
8877             default:
8878               if (remote_debug)
8879                 {
8880                   if (!started_error_output)
8881                     {
8882                       started_error_output = 1;
8883                       fprintf_unfiltered (gdb_stdlog, "putpkt: Junk: ");
8884                     }
8885                   fputc_unfiltered (ch & 0177, gdb_stdlog);
8886                 }
8887               continue;
8888             }
8889           break;                /* Here to retransmit.  */
8890         }
8891
8892 #if 0
8893       /* This is wrong.  If doing a long backtrace, the user should be
8894          able to get out next time we call QUIT, without anything as
8895          violent as interrupt_query.  If we want to provide a way out of
8896          here without getting to the next QUIT, it should be based on
8897          hitting ^C twice as in remote_wait.  */
8898       if (quit_flag)
8899         {
8900           quit_flag = 0;
8901           interrupt_query ();
8902         }
8903 #endif
8904     }
8905
8906   do_cleanups (old_chain);
8907   return 0;
8908 }
8909
8910 /* Come here after finding the start of a frame when we expected an
8911    ack.  Do our best to discard the rest of this packet.  */
8912
8913 static void
8914 skip_frame (void)
8915 {
8916   int c;
8917
8918   while (1)
8919     {
8920       c = readchar (remote_timeout);
8921       switch (c)
8922         {
8923         case SERIAL_TIMEOUT:
8924           /* Nothing we can do.  */
8925           return;
8926         case '#':
8927           /* Discard the two bytes of checksum and stop.  */
8928           c = readchar (remote_timeout);
8929           if (c >= 0)
8930             c = readchar (remote_timeout);
8931
8932           return;
8933         case '*':               /* Run length encoding.  */
8934           /* Discard the repeat count.  */
8935           c = readchar (remote_timeout);
8936           if (c < 0)
8937             return;
8938           break;
8939         default:
8940           /* A regular character.  */
8941           break;
8942         }
8943     }
8944 }
8945
8946 /* Come here after finding the start of the frame.  Collect the rest
8947    into *BUF, verifying the checksum, length, and handling run-length
8948    compression.  NUL terminate the buffer.  If there is not enough room,
8949    expand *BUF using xrealloc.
8950
8951    Returns -1 on error, number of characters in buffer (ignoring the
8952    trailing NULL) on success. (could be extended to return one of the
8953    SERIAL status indications).  */
8954
8955 static long
8956 read_frame (char **buf_p,
8957             long *sizeof_buf)
8958 {
8959   unsigned char csum;
8960   long bc;
8961   int c;
8962   char *buf = *buf_p;
8963   struct remote_state *rs = get_remote_state ();
8964
8965   csum = 0;
8966   bc = 0;
8967
8968   while (1)
8969     {
8970       c = readchar (remote_timeout);
8971       switch (c)
8972         {
8973         case SERIAL_TIMEOUT:
8974           if (remote_debug)
8975             fputs_filtered ("Timeout in mid-packet, retrying\n", gdb_stdlog);
8976           return -1;
8977         case '$':
8978           if (remote_debug)
8979             fputs_filtered ("Saw new packet start in middle of old one\n",
8980                             gdb_stdlog);
8981           return -1;            /* Start a new packet, count retries.  */
8982         case '#':
8983           {
8984             unsigned char pktcsum;
8985             int check_0 = 0;
8986             int check_1 = 0;
8987
8988             buf[bc] = '\0';
8989
8990             check_0 = readchar (remote_timeout);
8991             if (check_0 >= 0)
8992               check_1 = readchar (remote_timeout);
8993
8994             if (check_0 == SERIAL_TIMEOUT || check_1 == SERIAL_TIMEOUT)
8995               {
8996                 if (remote_debug)
8997                   fputs_filtered ("Timeout in checksum, retrying\n",
8998                                   gdb_stdlog);
8999                 return -1;
9000               }
9001             else if (check_0 < 0 || check_1 < 0)
9002               {
9003                 if (remote_debug)
9004                   fputs_filtered ("Communication error in checksum\n",
9005                                   gdb_stdlog);
9006                 return -1;
9007               }
9008
9009             /* Don't recompute the checksum; with no ack packets we
9010                don't have any way to indicate a packet retransmission
9011                is necessary.  */
9012             if (rs->noack_mode)
9013               return bc;
9014
9015             pktcsum = (fromhex (check_0) << 4) | fromhex (check_1);
9016             if (csum == pktcsum)
9017               return bc;
9018
9019             if (remote_debug)
9020               {
9021                 std::string str = escape_buffer (buf, bc);
9022
9023                 fprintf_unfiltered (gdb_stdlog,
9024                                     "Bad checksum, sentsum=0x%x, "
9025                                     "csum=0x%x, buf=%s\n",
9026                                     pktcsum, csum, str.c_str ());
9027               }
9028             /* Number of characters in buffer ignoring trailing
9029                NULL.  */
9030             return -1;
9031           }
9032         case '*':               /* Run length encoding.  */
9033           {
9034             int repeat;
9035
9036             csum += c;
9037             c = readchar (remote_timeout);
9038             csum += c;
9039             repeat = c - ' ' + 3;       /* Compute repeat count.  */
9040
9041             /* The character before ``*'' is repeated.  */
9042
9043             if (repeat > 0 && repeat <= 255 && bc > 0)
9044               {
9045                 if (bc + repeat - 1 >= *sizeof_buf - 1)
9046                   {
9047                     /* Make some more room in the buffer.  */
9048                     *sizeof_buf += repeat;
9049                     *buf_p = (char *) xrealloc (*buf_p, *sizeof_buf);
9050                     buf = *buf_p;
9051                   }
9052
9053                 memset (&buf[bc], buf[bc - 1], repeat);
9054                 bc += repeat;
9055                 continue;
9056               }
9057
9058             buf[bc] = '\0';
9059             printf_filtered (_("Invalid run length encoding: %s\n"), buf);
9060             return -1;
9061           }
9062         default:
9063           if (bc >= *sizeof_buf - 1)
9064             {
9065               /* Make some more room in the buffer.  */
9066               *sizeof_buf *= 2;
9067               *buf_p = (char *) xrealloc (*buf_p, *sizeof_buf);
9068               buf = *buf_p;
9069             }
9070
9071           buf[bc++] = c;
9072           csum += c;
9073           continue;
9074         }
9075     }
9076 }
9077
9078 /* Read a packet from the remote machine, with error checking, and
9079    store it in *BUF.  Resize *BUF using xrealloc if necessary to hold
9080    the result, and update *SIZEOF_BUF.  If FOREVER, wait forever
9081    rather than timing out; this is used (in synchronous mode) to wait
9082    for a target that is is executing user code to stop.  */
9083 /* FIXME: ezannoni 2000-02-01 this wrapper is necessary so that we
9084    don't have to change all the calls to getpkt to deal with the
9085    return value, because at the moment I don't know what the right
9086    thing to do it for those.  */
9087 void
9088 getpkt (char **buf,
9089         long *sizeof_buf,
9090         int forever)
9091 {
9092   getpkt_sane (buf, sizeof_buf, forever);
9093 }
9094
9095
9096 /* Read a packet from the remote machine, with error checking, and
9097    store it in *BUF.  Resize *BUF using xrealloc if necessary to hold
9098    the result, and update *SIZEOF_BUF.  If FOREVER, wait forever
9099    rather than timing out; this is used (in synchronous mode) to wait
9100    for a target that is is executing user code to stop.  If FOREVER ==
9101    0, this function is allowed to time out gracefully and return an
9102    indication of this to the caller.  Otherwise return the number of
9103    bytes read.  If EXPECTING_NOTIF, consider receiving a notification
9104    enough reason to return to the caller.  *IS_NOTIF is an output
9105    boolean that indicates whether *BUF holds a notification or not
9106    (a regular packet).  */
9107
9108 static int
9109 getpkt_or_notif_sane_1 (char **buf, long *sizeof_buf, int forever,
9110                         int expecting_notif, int *is_notif)
9111 {
9112   struct remote_state *rs = get_remote_state ();
9113   int c;
9114   int tries;
9115   int timeout;
9116   int val = -1;
9117
9118   /* We're reading a new response.  Make sure we don't look at a
9119      previously cached response.  */
9120   rs->cached_wait_status = 0;
9121
9122   strcpy (*buf, "timeout");
9123
9124   if (forever)
9125     timeout = watchdog > 0 ? watchdog : -1;
9126   else if (expecting_notif)
9127     timeout = 0; /* There should already be a char in the buffer.  If
9128                     not, bail out.  */
9129   else
9130     timeout = remote_timeout;
9131
9132 #define MAX_TRIES 3
9133
9134   /* Process any number of notifications, and then return when
9135      we get a packet.  */
9136   for (;;)
9137     {
9138       /* If we get a timeout or bad checksum, retry up to MAX_TRIES
9139          times.  */
9140       for (tries = 1; tries <= MAX_TRIES; tries++)
9141         {
9142           /* This can loop forever if the remote side sends us
9143              characters continuously, but if it pauses, we'll get
9144              SERIAL_TIMEOUT from readchar because of timeout.  Then
9145              we'll count that as a retry.
9146
9147              Note that even when forever is set, we will only wait
9148              forever prior to the start of a packet.  After that, we
9149              expect characters to arrive at a brisk pace.  They should
9150              show up within remote_timeout intervals.  */
9151           do
9152             c = readchar (timeout);
9153           while (c != SERIAL_TIMEOUT && c != '$' && c != '%');
9154
9155           if (c == SERIAL_TIMEOUT)
9156             {
9157               if (expecting_notif)
9158                 return -1; /* Don't complain, it's normal to not get
9159                               anything in this case.  */
9160
9161               if (forever)      /* Watchdog went off?  Kill the target.  */
9162                 {
9163                   remote_unpush_target ();
9164                   throw_error (TARGET_CLOSE_ERROR,
9165                                _("Watchdog timeout has expired.  "
9166                                  "Target detached."));
9167                 }
9168               if (remote_debug)
9169                 fputs_filtered ("Timed out.\n", gdb_stdlog);
9170             }
9171           else
9172             {
9173               /* We've found the start of a packet or notification.
9174                  Now collect the data.  */
9175               val = read_frame (buf, sizeof_buf);
9176               if (val >= 0)
9177                 break;
9178             }
9179
9180           remote_serial_write ("-", 1);
9181         }
9182
9183       if (tries > MAX_TRIES)
9184         {
9185           /* We have tried hard enough, and just can't receive the
9186              packet/notification.  Give up.  */
9187           printf_unfiltered (_("Ignoring packet error, continuing...\n"));
9188
9189           /* Skip the ack char if we're in no-ack mode.  */
9190           if (!rs->noack_mode)
9191             remote_serial_write ("+", 1);
9192           return -1;
9193         }
9194
9195       /* If we got an ordinary packet, return that to our caller.  */
9196       if (c == '$')
9197         {
9198           if (remote_debug)
9199             {
9200               std::string str
9201                 = escape_buffer (*buf,
9202                                  std::min (val, REMOTE_DEBUG_MAX_CHAR));
9203
9204               fprintf_unfiltered (gdb_stdlog, "Packet received: %s",
9205                                   str.c_str ());
9206
9207               if (str.length () >  REMOTE_DEBUG_MAX_CHAR)
9208                 {
9209                   fprintf_unfiltered (gdb_stdlog, "[%zu bytes omitted]",
9210                                       str.length () - REMOTE_DEBUG_MAX_CHAR);
9211                 }
9212
9213               fprintf_unfiltered (gdb_stdlog, "\n");
9214             }
9215
9216           /* Skip the ack char if we're in no-ack mode.  */
9217           if (!rs->noack_mode)
9218             remote_serial_write ("+", 1);
9219           if (is_notif != NULL)
9220             *is_notif = 0;
9221           return val;
9222         }
9223
9224        /* If we got a notification, handle it, and go back to looking
9225          for a packet.  */
9226       else
9227         {
9228           gdb_assert (c == '%');
9229
9230           if (remote_debug)
9231             {
9232               std::string str = escape_buffer (*buf, val);
9233
9234               fprintf_unfiltered (gdb_stdlog,
9235                                   "  Notification received: %s\n",
9236                                   str.c_str ());
9237             }
9238           if (is_notif != NULL)
9239             *is_notif = 1;
9240
9241           handle_notification (rs->notif_state, *buf);
9242
9243           /* Notifications require no acknowledgement.  */
9244
9245           if (expecting_notif)
9246             return val;
9247         }
9248     }
9249 }
9250
9251 static int
9252 getpkt_sane (char **buf, long *sizeof_buf, int forever)
9253 {
9254   return getpkt_or_notif_sane_1 (buf, sizeof_buf, forever, 0, NULL);
9255 }
9256
9257 static int
9258 getpkt_or_notif_sane (char **buf, long *sizeof_buf, int forever,
9259                       int *is_notif)
9260 {
9261   return getpkt_or_notif_sane_1 (buf, sizeof_buf, forever, 1,
9262                                  is_notif);
9263 }
9264
9265 /* Check whether EVENT is a fork event for the process specified
9266    by the pid passed in DATA, and if it is, kill the fork child.  */
9267
9268 static int
9269 kill_child_of_pending_fork (QUEUE (stop_reply_p) *q,
9270                             QUEUE_ITER (stop_reply_p) *iter,
9271                             stop_reply_p event,
9272                             void *data)
9273 {
9274   struct queue_iter_param *param = (struct queue_iter_param *) data;
9275   int parent_pid = *(int *) param->input;
9276
9277   if (is_pending_fork_parent (&event->ws, parent_pid, event->ptid))
9278     {
9279       struct remote_state *rs = get_remote_state ();
9280       int child_pid = ptid_get_pid (event->ws.value.related_pid);
9281       int res;
9282
9283       res = remote_vkill (child_pid, rs);
9284       if (res != 0)
9285         error (_("Can't kill fork child process %d"), child_pid);
9286     }
9287
9288   return 1;
9289 }
9290
9291 /* Kill any new fork children of process PID that haven't been
9292    processed by follow_fork.  */
9293
9294 static void
9295 kill_new_fork_children (int pid, struct remote_state *rs)
9296 {
9297   struct thread_info *thread;
9298   struct notif_client *notif = &notif_client_stop;
9299   struct queue_iter_param param;
9300
9301   /* Kill the fork child threads of any threads in process PID
9302      that are stopped at a fork event.  */
9303   ALL_NON_EXITED_THREADS (thread)
9304     {
9305       struct target_waitstatus *ws = &thread->pending_follow;
9306
9307       if (is_pending_fork_parent (ws, pid, thread->ptid))
9308         {
9309           struct remote_state *rs = get_remote_state ();
9310           int child_pid = ptid_get_pid (ws->value.related_pid);
9311           int res;
9312
9313           res = remote_vkill (child_pid, rs);
9314           if (res != 0)
9315             error (_("Can't kill fork child process %d"), child_pid);
9316         }
9317     }
9318
9319   /* Check for any pending fork events (not reported or processed yet)
9320      in process PID and kill those fork child threads as well.  */
9321   remote_notif_get_pending_events (notif);
9322   param.input = &pid;
9323   param.output = NULL;
9324   QUEUE_iterate (stop_reply_p, stop_reply_queue,
9325                  kill_child_of_pending_fork, &param);
9326 }
9327
9328 \f
9329 /* Target hook to kill the current inferior.  */
9330
9331 static void
9332 remote_kill (struct target_ops *ops)
9333 {
9334   int res = -1;
9335   int pid = ptid_get_pid (inferior_ptid);
9336   struct remote_state *rs = get_remote_state ();
9337
9338   if (packet_support (PACKET_vKill) != PACKET_DISABLE)
9339     {
9340       /* If we're stopped while forking and we haven't followed yet,
9341          kill the child task.  We need to do this before killing the
9342          parent task because if this is a vfork then the parent will
9343          be sleeping.  */
9344       kill_new_fork_children (pid, rs);
9345
9346       res = remote_vkill (pid, rs);
9347       if (res == 0)
9348         {
9349           target_mourn_inferior (inferior_ptid);
9350           return;
9351         }
9352     }
9353
9354   /* If we are in 'target remote' mode and we are killing the only
9355      inferior, then we will tell gdbserver to exit and unpush the
9356      target.  */
9357   if (res == -1 && !remote_multi_process_p (rs)
9358       && number_of_live_inferiors () == 1)
9359     {
9360       remote_kill_k ();
9361
9362       /* We've killed the remote end, we get to mourn it.  If we are
9363          not in extended mode, mourning the inferior also unpushes
9364          remote_ops from the target stack, which closes the remote
9365          connection.  */
9366       target_mourn_inferior (inferior_ptid);
9367
9368       return;
9369     }
9370
9371   error (_("Can't kill process"));
9372 }
9373
9374 /* Send a kill request to the target using the 'vKill' packet.  */
9375
9376 static int
9377 remote_vkill (int pid, struct remote_state *rs)
9378 {
9379   if (packet_support (PACKET_vKill) == PACKET_DISABLE)
9380     return -1;
9381
9382   /* Tell the remote target to detach.  */
9383   xsnprintf (rs->buf, get_remote_packet_size (), "vKill;%x", pid);
9384   putpkt (rs->buf);
9385   getpkt (&rs->buf, &rs->buf_size, 0);
9386
9387   switch (packet_ok (rs->buf,
9388                      &remote_protocol_packets[PACKET_vKill]))
9389     {
9390     case PACKET_OK:
9391       return 0;
9392     case PACKET_ERROR:
9393       return 1;
9394     case PACKET_UNKNOWN:
9395       return -1;
9396     default:
9397       internal_error (__FILE__, __LINE__, _("Bad result from packet_ok"));
9398     }
9399 }
9400
9401 /* Send a kill request to the target using the 'k' packet.  */
9402
9403 static void
9404 remote_kill_k (void)
9405 {
9406   /* Catch errors so the user can quit from gdb even when we
9407      aren't on speaking terms with the remote system.  */
9408   TRY
9409     {
9410       putpkt ("k");
9411     }
9412   CATCH (ex, RETURN_MASK_ERROR)
9413     {
9414       if (ex.error == TARGET_CLOSE_ERROR)
9415         {
9416           /* If we got an (EOF) error that caused the target
9417              to go away, then we're done, that's what we wanted.
9418              "k" is susceptible to cause a premature EOF, given
9419              that the remote server isn't actually required to
9420              reply to "k", and it can happen that it doesn't
9421              even get to reply ACK to the "k".  */
9422           return;
9423         }
9424
9425       /* Otherwise, something went wrong.  We didn't actually kill
9426          the target.  Just propagate the exception, and let the
9427          user or higher layers decide what to do.  */
9428       throw_exception (ex);
9429     }
9430   END_CATCH
9431 }
9432
9433 static void
9434 remote_mourn (struct target_ops *target)
9435 {
9436   struct remote_state *rs = get_remote_state ();
9437
9438   /* In 'target remote' mode with one inferior, we close the connection.  */
9439   if (!rs->extended && number_of_live_inferiors () <= 1)
9440     {
9441       unpush_target (target);
9442
9443       /* remote_close takes care of doing most of the clean up.  */
9444       generic_mourn_inferior ();
9445       return;
9446     }
9447
9448   /* In case we got here due to an error, but we're going to stay
9449      connected.  */
9450   rs->waiting_for_stop_reply = 0;
9451
9452   /* If the current general thread belonged to the process we just
9453      detached from or has exited, the remote side current general
9454      thread becomes undefined.  Considering a case like this:
9455
9456      - We just got here due to a detach.
9457      - The process that we're detaching from happens to immediately
9458        report a global breakpoint being hit in non-stop mode, in the
9459        same thread we had selected before.
9460      - GDB attaches to this process again.
9461      - This event happens to be the next event we handle.
9462
9463      GDB would consider that the current general thread didn't need to
9464      be set on the stub side (with Hg), since for all it knew,
9465      GENERAL_THREAD hadn't changed.
9466
9467      Notice that although in all-stop mode, the remote server always
9468      sets the current thread to the thread reporting the stop event,
9469      that doesn't happen in non-stop mode; in non-stop, the stub *must
9470      not* change the current thread when reporting a breakpoint hit,
9471      due to the decoupling of event reporting and event handling.
9472
9473      To keep things simple, we always invalidate our notion of the
9474      current thread.  */
9475   record_currthread (rs, minus_one_ptid);
9476
9477   /* Call common code to mark the inferior as not running.  */
9478   generic_mourn_inferior ();
9479
9480   if (!have_inferiors ())
9481     {
9482       if (!remote_multi_process_p (rs))
9483         {
9484           /* Check whether the target is running now - some remote stubs
9485              automatically restart after kill.  */
9486           putpkt ("?");
9487           getpkt (&rs->buf, &rs->buf_size, 0);
9488
9489           if (rs->buf[0] == 'S' || rs->buf[0] == 'T')
9490             {
9491               /* Assume that the target has been restarted.  Set
9492                  inferior_ptid so that bits of core GDB realizes
9493                  there's something here, e.g., so that the user can
9494                  say "kill" again.  */
9495               inferior_ptid = magic_null_ptid;
9496             }
9497         }
9498     }
9499 }
9500
9501 static int
9502 extended_remote_supports_disable_randomization (struct target_ops *self)
9503 {
9504   return packet_support (PACKET_QDisableRandomization) == PACKET_ENABLE;
9505 }
9506
9507 static void
9508 extended_remote_disable_randomization (int val)
9509 {
9510   struct remote_state *rs = get_remote_state ();
9511   char *reply;
9512
9513   xsnprintf (rs->buf, get_remote_packet_size (), "QDisableRandomization:%x",
9514              val);
9515   putpkt (rs->buf);
9516   reply = remote_get_noisy_reply (&target_buf, &target_buf_size);
9517   if (*reply == '\0')
9518     error (_("Target does not support QDisableRandomization."));
9519   if (strcmp (reply, "OK") != 0)
9520     error (_("Bogus QDisableRandomization reply from target: %s"), reply);
9521 }
9522
9523 static int
9524 extended_remote_run (char *args)
9525 {
9526   struct remote_state *rs = get_remote_state ();
9527   int len;
9528   const char *remote_exec_file = get_remote_exec_file ();
9529
9530   /* If the user has disabled vRun support, or we have detected that
9531      support is not available, do not try it.  */
9532   if (packet_support (PACKET_vRun) == PACKET_DISABLE)
9533     return -1;
9534
9535   strcpy (rs->buf, "vRun;");
9536   len = strlen (rs->buf);
9537
9538   if (strlen (remote_exec_file) * 2 + len >= get_remote_packet_size ())
9539     error (_("Remote file name too long for run packet"));
9540   len += 2 * bin2hex ((gdb_byte *) remote_exec_file, rs->buf + len,
9541                       strlen (remote_exec_file));
9542
9543   gdb_assert (args != NULL);
9544   if (*args)
9545     {
9546       struct cleanup *back_to;
9547       int i;
9548       char **argv;
9549
9550       argv = gdb_buildargv (args);
9551       back_to = make_cleanup_freeargv (argv);
9552       for (i = 0; argv[i] != NULL; i++)
9553         {
9554           if (strlen (argv[i]) * 2 + 1 + len >= get_remote_packet_size ())
9555             error (_("Argument list too long for run packet"));
9556           rs->buf[len++] = ';';
9557           len += 2 * bin2hex ((gdb_byte *) argv[i], rs->buf + len,
9558                               strlen (argv[i]));
9559         }
9560       do_cleanups (back_to);
9561     }
9562
9563   rs->buf[len++] = '\0';
9564
9565   putpkt (rs->buf);
9566   getpkt (&rs->buf, &rs->buf_size, 0);
9567
9568   switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_vRun]))
9569     {
9570     case PACKET_OK:
9571       /* We have a wait response.  All is well.  */
9572       return 0;
9573     case PACKET_UNKNOWN:
9574       return -1;
9575     case PACKET_ERROR:
9576       if (remote_exec_file[0] == '\0')
9577         error (_("Running the default executable on the remote target failed; "
9578                  "try \"set remote exec-file\"?"));
9579       else
9580         error (_("Running \"%s\" on the remote target failed"),
9581                remote_exec_file);
9582     default:
9583       gdb_assert_not_reached (_("bad switch"));
9584     }
9585 }
9586
9587 /* In the extended protocol we want to be able to do things like
9588    "run" and have them basically work as expected.  So we need
9589    a special create_inferior function.  We support changing the
9590    executable file and the command line arguments, but not the
9591    environment.  */
9592
9593 static void
9594 extended_remote_create_inferior (struct target_ops *ops,
9595                                  char *exec_file, char *args,
9596                                  char **env, int from_tty)
9597 {
9598   int run_worked;
9599   char *stop_reply;
9600   struct remote_state *rs = get_remote_state ();
9601   const char *remote_exec_file = get_remote_exec_file ();
9602
9603   /* If running asynchronously, register the target file descriptor
9604      with the event loop.  */
9605   if (target_can_async_p ())
9606     target_async (1);
9607
9608   /* Disable address space randomization if requested (and supported).  */
9609   if (extended_remote_supports_disable_randomization (ops))
9610     extended_remote_disable_randomization (disable_randomization);
9611
9612   /* Now restart the remote server.  */
9613   run_worked = extended_remote_run (args) != -1;
9614   if (!run_worked)
9615     {
9616       /* vRun was not supported.  Fail if we need it to do what the
9617          user requested.  */
9618       if (remote_exec_file[0])
9619         error (_("Remote target does not support \"set remote exec-file\""));
9620       if (args[0])
9621         error (_("Remote target does not support \"set args\" or run <ARGS>"));
9622
9623       /* Fall back to "R".  */
9624       extended_remote_restart ();
9625     }
9626
9627   if (!have_inferiors ())
9628     {
9629       /* Clean up from the last time we ran, before we mark the target
9630          running again.  This will mark breakpoints uninserted, and
9631          get_offsets may insert breakpoints.  */
9632       init_thread_list ();
9633       init_wait_for_inferior ();
9634     }
9635
9636   /* vRun's success return is a stop reply.  */
9637   stop_reply = run_worked ? rs->buf : NULL;
9638   add_current_inferior_and_thread (stop_reply);
9639
9640   /* Get updated offsets, if the stub uses qOffsets.  */
9641   get_offsets ();
9642 }
9643 \f
9644
9645 /* Given a location's target info BP_TGT and the packet buffer BUF,  output
9646    the list of conditions (in agent expression bytecode format), if any, the
9647    target needs to evaluate.  The output is placed into the packet buffer
9648    started from BUF and ended at BUF_END.  */
9649
9650 static int
9651 remote_add_target_side_condition (struct gdbarch *gdbarch,
9652                                   struct bp_target_info *bp_tgt, char *buf,
9653                                   char *buf_end)
9654 {
9655   if (bp_tgt->conditions.empty ())
9656     return 0;
9657
9658   buf += strlen (buf);
9659   xsnprintf (buf, buf_end - buf, "%s", ";");
9660   buf++;
9661
9662   /* Send conditions to the target and free the vector.  */
9663   for (int ix = 0; ix < bp_tgt->conditions.size (); ix++)
9664     {
9665       struct agent_expr *aexpr = bp_tgt->conditions[ix];
9666
9667       xsnprintf (buf, buf_end - buf, "X%x,", aexpr->len);
9668       buf += strlen (buf);
9669       for (int i = 0; i < aexpr->len; ++i)
9670         buf = pack_hex_byte (buf, aexpr->buf[i]);
9671       *buf = '\0';
9672     }
9673   return 0;
9674 }
9675
9676 static void
9677 remote_add_target_side_commands (struct gdbarch *gdbarch,
9678                                  struct bp_target_info *bp_tgt, char *buf)
9679 {
9680   if (bp_tgt->tcommands.empty ())
9681     return;
9682
9683   buf += strlen (buf);
9684
9685   sprintf (buf, ";cmds:%x,", bp_tgt->persist);
9686   buf += strlen (buf);
9687
9688   /* Concatenate all the agent expressions that are commands into the
9689      cmds parameter.  */
9690   for (int ix = 0; ix < bp_tgt->tcommands.size (); ix++)
9691     {
9692       struct agent_expr *aexpr = bp_tgt->tcommands[ix];
9693
9694       sprintf (buf, "X%x,", aexpr->len);
9695       buf += strlen (buf);
9696       for (int i = 0; i < aexpr->len; ++i)
9697         buf = pack_hex_byte (buf, aexpr->buf[i]);
9698       *buf = '\0';
9699     }
9700 }
9701
9702 /* Insert a breakpoint.  On targets that have software breakpoint
9703    support, we ask the remote target to do the work; on targets
9704    which don't, we insert a traditional memory breakpoint.  */
9705
9706 static int
9707 remote_insert_breakpoint (struct target_ops *ops,
9708                           struct gdbarch *gdbarch,
9709                           struct bp_target_info *bp_tgt)
9710 {
9711   /* Try the "Z" s/w breakpoint packet if it is not already disabled.
9712      If it succeeds, then set the support to PACKET_ENABLE.  If it
9713      fails, and the user has explicitly requested the Z support then
9714      report an error, otherwise, mark it disabled and go on.  */
9715
9716   if (packet_support (PACKET_Z0) != PACKET_DISABLE)
9717     {
9718       CORE_ADDR addr = bp_tgt->reqstd_address;
9719       struct remote_state *rs;
9720       char *p, *endbuf;
9721       int bpsize;
9722
9723       /* Make sure the remote is pointing at the right process, if
9724          necessary.  */
9725       if (!gdbarch_has_global_breakpoints (target_gdbarch ()))
9726         set_general_process ();
9727
9728       rs = get_remote_state ();
9729       p = rs->buf;
9730       endbuf = rs->buf + get_remote_packet_size ();
9731
9732       *(p++) = 'Z';
9733       *(p++) = '0';
9734       *(p++) = ',';
9735       addr = (ULONGEST) remote_address_masked (addr);
9736       p += hexnumstr (p, addr);
9737       xsnprintf (p, endbuf - p, ",%d", bp_tgt->kind);
9738
9739       if (remote_supports_cond_breakpoints (ops))
9740         remote_add_target_side_condition (gdbarch, bp_tgt, p, endbuf);
9741
9742       if (remote_can_run_breakpoint_commands (ops))
9743         remote_add_target_side_commands (gdbarch, bp_tgt, p);
9744
9745       putpkt (rs->buf);
9746       getpkt (&rs->buf, &rs->buf_size, 0);
9747
9748       switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_Z0]))
9749         {
9750         case PACKET_ERROR:
9751           return -1;
9752         case PACKET_OK:
9753           return 0;
9754         case PACKET_UNKNOWN:
9755           break;
9756         }
9757     }
9758
9759   /* If this breakpoint has target-side commands but this stub doesn't
9760      support Z0 packets, throw error.  */
9761   if (!bp_tgt->tcommands.empty ())
9762     throw_error (NOT_SUPPORTED_ERROR, _("\
9763 Target doesn't support breakpoints that have target side commands."));
9764
9765   return memory_insert_breakpoint (ops, gdbarch, bp_tgt);
9766 }
9767
9768 static int
9769 remote_remove_breakpoint (struct target_ops *ops,
9770                           struct gdbarch *gdbarch,
9771                           struct bp_target_info *bp_tgt,
9772                           enum remove_bp_reason reason)
9773 {
9774   CORE_ADDR addr = bp_tgt->placed_address;
9775   struct remote_state *rs = get_remote_state ();
9776
9777   if (packet_support (PACKET_Z0) != PACKET_DISABLE)
9778     {
9779       char *p = rs->buf;
9780       char *endbuf = rs->buf + get_remote_packet_size ();
9781
9782       /* Make sure the remote is pointing at the right process, if
9783          necessary.  */
9784       if (!gdbarch_has_global_breakpoints (target_gdbarch ()))
9785         set_general_process ();
9786
9787       *(p++) = 'z';
9788       *(p++) = '0';
9789       *(p++) = ',';
9790
9791       addr = (ULONGEST) remote_address_masked (bp_tgt->placed_address);
9792       p += hexnumstr (p, addr);
9793       xsnprintf (p, endbuf - p, ",%d", bp_tgt->kind);
9794
9795       putpkt (rs->buf);
9796       getpkt (&rs->buf, &rs->buf_size, 0);
9797
9798       return (rs->buf[0] == 'E');
9799     }
9800
9801   return memory_remove_breakpoint (ops, gdbarch, bp_tgt, reason);
9802 }
9803
9804 static enum Z_packet_type
9805 watchpoint_to_Z_packet (int type)
9806 {
9807   switch (type)
9808     {
9809     case hw_write:
9810       return Z_PACKET_WRITE_WP;
9811       break;
9812     case hw_read:
9813       return Z_PACKET_READ_WP;
9814       break;
9815     case hw_access:
9816       return Z_PACKET_ACCESS_WP;
9817       break;
9818     default:
9819       internal_error (__FILE__, __LINE__,
9820                       _("hw_bp_to_z: bad watchpoint type %d"), type);
9821     }
9822 }
9823
9824 static int
9825 remote_insert_watchpoint (struct target_ops *self, CORE_ADDR addr, int len,
9826                           enum target_hw_bp_type type, struct expression *cond)
9827 {
9828   struct remote_state *rs = get_remote_state ();
9829   char *endbuf = rs->buf + get_remote_packet_size ();
9830   char *p;
9831   enum Z_packet_type packet = watchpoint_to_Z_packet (type);
9832
9833   if (packet_support (PACKET_Z0 + packet) == PACKET_DISABLE)
9834     return 1;
9835
9836   /* Make sure the remote is pointing at the right process, if
9837      necessary.  */
9838   if (!gdbarch_has_global_breakpoints (target_gdbarch ()))
9839     set_general_process ();
9840
9841   xsnprintf (rs->buf, endbuf - rs->buf, "Z%x,", packet);
9842   p = strchr (rs->buf, '\0');
9843   addr = remote_address_masked (addr);
9844   p += hexnumstr (p, (ULONGEST) addr);
9845   xsnprintf (p, endbuf - p, ",%x", len);
9846
9847   putpkt (rs->buf);
9848   getpkt (&rs->buf, &rs->buf_size, 0);
9849
9850   switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_Z0 + packet]))
9851     {
9852     case PACKET_ERROR:
9853       return -1;
9854     case PACKET_UNKNOWN:
9855       return 1;
9856     case PACKET_OK:
9857       return 0;
9858     }
9859   internal_error (__FILE__, __LINE__,
9860                   _("remote_insert_watchpoint: reached end of function"));
9861 }
9862
9863 static int
9864 remote_watchpoint_addr_within_range (struct target_ops *target, CORE_ADDR addr,
9865                                      CORE_ADDR start, int length)
9866 {
9867   CORE_ADDR diff = remote_address_masked (addr - start);
9868
9869   return diff < length;
9870 }
9871
9872
9873 static int
9874 remote_remove_watchpoint (struct target_ops *self, CORE_ADDR addr, int len,
9875                           enum target_hw_bp_type type, struct expression *cond)
9876 {
9877   struct remote_state *rs = get_remote_state ();
9878   char *endbuf = rs->buf + get_remote_packet_size ();
9879   char *p;
9880   enum Z_packet_type packet = watchpoint_to_Z_packet (type);
9881
9882   if (packet_support (PACKET_Z0 + packet) == PACKET_DISABLE)
9883     return -1;
9884
9885   /* Make sure the remote is pointing at the right process, if
9886      necessary.  */
9887   if (!gdbarch_has_global_breakpoints (target_gdbarch ()))
9888     set_general_process ();
9889
9890   xsnprintf (rs->buf, endbuf - rs->buf, "z%x,", packet);
9891   p = strchr (rs->buf, '\0');
9892   addr = remote_address_masked (addr);
9893   p += hexnumstr (p, (ULONGEST) addr);
9894   xsnprintf (p, endbuf - p, ",%x", len);
9895   putpkt (rs->buf);
9896   getpkt (&rs->buf, &rs->buf_size, 0);
9897
9898   switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_Z0 + packet]))
9899     {
9900     case PACKET_ERROR:
9901     case PACKET_UNKNOWN:
9902       return -1;
9903     case PACKET_OK:
9904       return 0;
9905     }
9906   internal_error (__FILE__, __LINE__,
9907                   _("remote_remove_watchpoint: reached end of function"));
9908 }
9909
9910
9911 int remote_hw_watchpoint_limit = -1;
9912 int remote_hw_watchpoint_length_limit = -1;
9913 int remote_hw_breakpoint_limit = -1;
9914
9915 static int
9916 remote_region_ok_for_hw_watchpoint (struct target_ops *self,
9917                                     CORE_ADDR addr, int len)
9918 {
9919   if (remote_hw_watchpoint_length_limit == 0)
9920     return 0;
9921   else if (remote_hw_watchpoint_length_limit < 0)
9922     return 1;
9923   else if (len <= remote_hw_watchpoint_length_limit)
9924     return 1;
9925   else
9926     return 0;
9927 }
9928
9929 static int
9930 remote_check_watch_resources (struct target_ops *self,
9931                               enum bptype type, int cnt, int ot)
9932 {
9933   if (type == bp_hardware_breakpoint)
9934     {
9935       if (remote_hw_breakpoint_limit == 0)
9936         return 0;
9937       else if (remote_hw_breakpoint_limit < 0)
9938         return 1;
9939       else if (cnt <= remote_hw_breakpoint_limit)
9940         return 1;
9941     }
9942   else
9943     {
9944       if (remote_hw_watchpoint_limit == 0)
9945         return 0;
9946       else if (remote_hw_watchpoint_limit < 0)
9947         return 1;
9948       else if (ot)
9949         return -1;
9950       else if (cnt <= remote_hw_watchpoint_limit)
9951         return 1;
9952     }
9953   return -1;
9954 }
9955
9956 /* The to_stopped_by_sw_breakpoint method of target remote.  */
9957
9958 static int
9959 remote_stopped_by_sw_breakpoint (struct target_ops *ops)
9960 {
9961   struct thread_info *thread = inferior_thread ();
9962
9963   return (thread->priv != NULL
9964           && thread->priv->stop_reason == TARGET_STOPPED_BY_SW_BREAKPOINT);
9965 }
9966
9967 /* The to_supports_stopped_by_sw_breakpoint method of target
9968    remote.  */
9969
9970 static int
9971 remote_supports_stopped_by_sw_breakpoint (struct target_ops *ops)
9972 {
9973   return (packet_support (PACKET_swbreak_feature) == PACKET_ENABLE);
9974 }
9975
9976 /* The to_stopped_by_hw_breakpoint method of target remote.  */
9977
9978 static int
9979 remote_stopped_by_hw_breakpoint (struct target_ops *ops)
9980 {
9981   struct thread_info *thread = inferior_thread ();
9982
9983   return (thread->priv != NULL
9984           && thread->priv->stop_reason == TARGET_STOPPED_BY_HW_BREAKPOINT);
9985 }
9986
9987 /* The to_supports_stopped_by_hw_breakpoint method of target
9988    remote.  */
9989
9990 static int
9991 remote_supports_stopped_by_hw_breakpoint (struct target_ops *ops)
9992 {
9993   return (packet_support (PACKET_hwbreak_feature) == PACKET_ENABLE);
9994 }
9995
9996 static int
9997 remote_stopped_by_watchpoint (struct target_ops *ops)
9998 {
9999   struct thread_info *thread = inferior_thread ();
10000
10001   return (thread->priv != NULL
10002           && thread->priv->stop_reason == TARGET_STOPPED_BY_WATCHPOINT);
10003 }
10004
10005 static int
10006 remote_stopped_data_address (struct target_ops *target, CORE_ADDR *addr_p)
10007 {
10008   struct thread_info *thread = inferior_thread ();
10009
10010   if (thread->priv != NULL
10011       && thread->priv->stop_reason == TARGET_STOPPED_BY_WATCHPOINT)
10012     {
10013       *addr_p = thread->priv->watch_data_address;
10014       return 1;
10015     }
10016
10017   return 0;
10018 }
10019
10020
10021 static int
10022 remote_insert_hw_breakpoint (struct target_ops *self, struct gdbarch *gdbarch,
10023                              struct bp_target_info *bp_tgt)
10024 {
10025   CORE_ADDR addr = bp_tgt->reqstd_address;
10026   struct remote_state *rs;
10027   char *p, *endbuf;
10028   char *message;
10029
10030   if (packet_support (PACKET_Z1) == PACKET_DISABLE)
10031     return -1;
10032
10033   /* Make sure the remote is pointing at the right process, if
10034      necessary.  */
10035   if (!gdbarch_has_global_breakpoints (target_gdbarch ()))
10036     set_general_process ();
10037
10038   rs = get_remote_state ();
10039   p = rs->buf;
10040   endbuf = rs->buf + get_remote_packet_size ();
10041
10042   *(p++) = 'Z';
10043   *(p++) = '1';
10044   *(p++) = ',';
10045
10046   addr = remote_address_masked (addr);
10047   p += hexnumstr (p, (ULONGEST) addr);
10048   xsnprintf (p, endbuf - p, ",%x", bp_tgt->kind);
10049
10050   if (remote_supports_cond_breakpoints (self))
10051     remote_add_target_side_condition (gdbarch, bp_tgt, p, endbuf);
10052
10053   if (remote_can_run_breakpoint_commands (self))
10054     remote_add_target_side_commands (gdbarch, bp_tgt, p);
10055
10056   putpkt (rs->buf);
10057   getpkt (&rs->buf, &rs->buf_size, 0);
10058
10059   switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_Z1]))
10060     {
10061     case PACKET_ERROR:
10062       if (rs->buf[1] == '.')
10063         {
10064           message = strchr (rs->buf + 2, '.');
10065           if (message)
10066             error (_("Remote failure reply: %s"), message + 1);
10067         }
10068       return -1;
10069     case PACKET_UNKNOWN:
10070       return -1;
10071     case PACKET_OK:
10072       return 0;
10073     }
10074   internal_error (__FILE__, __LINE__,
10075                   _("remote_insert_hw_breakpoint: reached end of function"));
10076 }
10077
10078
10079 static int
10080 remote_remove_hw_breakpoint (struct target_ops *self, struct gdbarch *gdbarch,
10081                              struct bp_target_info *bp_tgt)
10082 {
10083   CORE_ADDR addr;
10084   struct remote_state *rs = get_remote_state ();
10085   char *p = rs->buf;
10086   char *endbuf = rs->buf + get_remote_packet_size ();
10087
10088   if (packet_support (PACKET_Z1) == PACKET_DISABLE)
10089     return -1;
10090
10091   /* Make sure the remote is pointing at the right process, if
10092      necessary.  */
10093   if (!gdbarch_has_global_breakpoints (target_gdbarch ()))
10094     set_general_process ();
10095
10096   *(p++) = 'z';
10097   *(p++) = '1';
10098   *(p++) = ',';
10099
10100   addr = remote_address_masked (bp_tgt->placed_address);
10101   p += hexnumstr (p, (ULONGEST) addr);
10102   xsnprintf (p, endbuf  - p, ",%x", bp_tgt->kind);
10103
10104   putpkt (rs->buf);
10105   getpkt (&rs->buf, &rs->buf_size, 0);
10106
10107   switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_Z1]))
10108     {
10109     case PACKET_ERROR:
10110     case PACKET_UNKNOWN:
10111       return -1;
10112     case PACKET_OK:
10113       return 0;
10114     }
10115   internal_error (__FILE__, __LINE__,
10116                   _("remote_remove_hw_breakpoint: reached end of function"));
10117 }
10118
10119 /* Verify memory using the "qCRC:" request.  */
10120
10121 static int
10122 remote_verify_memory (struct target_ops *ops,
10123                       const gdb_byte *data, CORE_ADDR lma, ULONGEST size)
10124 {
10125   struct remote_state *rs = get_remote_state ();
10126   unsigned long host_crc, target_crc;
10127   char *tmp;
10128
10129   /* It doesn't make sense to use qCRC if the remote target is
10130      connected but not running.  */
10131   if (target_has_execution && packet_support (PACKET_qCRC) != PACKET_DISABLE)
10132     {
10133       enum packet_result result;
10134
10135       /* Make sure the remote is pointing at the right process.  */
10136       set_general_process ();
10137
10138       /* FIXME: assumes lma can fit into long.  */
10139       xsnprintf (rs->buf, get_remote_packet_size (), "qCRC:%lx,%lx",
10140                  (long) lma, (long) size);
10141       putpkt (rs->buf);
10142
10143       /* Be clever; compute the host_crc before waiting for target
10144          reply.  */
10145       host_crc = xcrc32 (data, size, 0xffffffff);
10146
10147       getpkt (&rs->buf, &rs->buf_size, 0);
10148
10149       result = packet_ok (rs->buf,
10150                           &remote_protocol_packets[PACKET_qCRC]);
10151       if (result == PACKET_ERROR)
10152         return -1;
10153       else if (result == PACKET_OK)
10154         {
10155           for (target_crc = 0, tmp = &rs->buf[1]; *tmp; tmp++)
10156             target_crc = target_crc * 16 + fromhex (*tmp);
10157
10158           return (host_crc == target_crc);
10159         }
10160     }
10161
10162   return simple_verify_memory (ops, data, lma, size);
10163 }
10164
10165 /* compare-sections command
10166
10167    With no arguments, compares each loadable section in the exec bfd
10168    with the same memory range on the target, and reports mismatches.
10169    Useful for verifying the image on the target against the exec file.  */
10170
10171 static void
10172 compare_sections_command (char *args, int from_tty)
10173 {
10174   asection *s;
10175   struct cleanup *old_chain;
10176   gdb_byte *sectdata;
10177   const char *sectname;
10178   bfd_size_type size;
10179   bfd_vma lma;
10180   int matched = 0;
10181   int mismatched = 0;
10182   int res;
10183   int read_only = 0;
10184
10185   if (!exec_bfd)
10186     error (_("command cannot be used without an exec file"));
10187
10188   /* Make sure the remote is pointing at the right process.  */
10189   set_general_process ();
10190
10191   if (args != NULL && strcmp (args, "-r") == 0)
10192     {
10193       read_only = 1;
10194       args = NULL;
10195     }
10196
10197   for (s = exec_bfd->sections; s; s = s->next)
10198     {
10199       if (!(s->flags & SEC_LOAD))
10200         continue;               /* Skip non-loadable section.  */
10201
10202       if (read_only && (s->flags & SEC_READONLY) == 0)
10203         continue;               /* Skip writeable sections */
10204
10205       size = bfd_get_section_size (s);
10206       if (size == 0)
10207         continue;               /* Skip zero-length section.  */
10208
10209       sectname = bfd_get_section_name (exec_bfd, s);
10210       if (args && strcmp (args, sectname) != 0)
10211         continue;               /* Not the section selected by user.  */
10212
10213       matched = 1;              /* Do this section.  */
10214       lma = s->lma;
10215
10216       sectdata = (gdb_byte *) xmalloc (size);
10217       old_chain = make_cleanup (xfree, sectdata);
10218       bfd_get_section_contents (exec_bfd, s, sectdata, 0, size);
10219
10220       res = target_verify_memory (sectdata, lma, size);
10221
10222       if (res == -1)
10223         error (_("target memory fault, section %s, range %s -- %s"), sectname,
10224                paddress (target_gdbarch (), lma),
10225                paddress (target_gdbarch (), lma + size));
10226
10227       printf_filtered ("Section %s, range %s -- %s: ", sectname,
10228                        paddress (target_gdbarch (), lma),
10229                        paddress (target_gdbarch (), lma + size));
10230       if (res)
10231         printf_filtered ("matched.\n");
10232       else
10233         {
10234           printf_filtered ("MIS-MATCHED!\n");
10235           mismatched++;
10236         }
10237
10238       do_cleanups (old_chain);
10239     }
10240   if (mismatched > 0)
10241     warning (_("One or more sections of the target image does not match\n\
10242 the loaded file\n"));
10243   if (args && !matched)
10244     printf_filtered (_("No loaded section named '%s'.\n"), args);
10245 }
10246
10247 /* Write LEN bytes from WRITEBUF into OBJECT_NAME/ANNEX at OFFSET
10248    into remote target.  The number of bytes written to the remote
10249    target is returned, or -1 for error.  */
10250
10251 static enum target_xfer_status
10252 remote_write_qxfer (struct target_ops *ops, const char *object_name,
10253                     const char *annex, const gdb_byte *writebuf, 
10254                     ULONGEST offset, LONGEST len, ULONGEST *xfered_len,
10255                     struct packet_config *packet)
10256 {
10257   int i, buf_len;
10258   ULONGEST n;
10259   struct remote_state *rs = get_remote_state ();
10260   int max_size = get_memory_write_packet_size (); 
10261
10262   if (packet->support == PACKET_DISABLE)
10263     return TARGET_XFER_E_IO;
10264
10265   /* Insert header.  */
10266   i = snprintf (rs->buf, max_size, 
10267                 "qXfer:%s:write:%s:%s:",
10268                 object_name, annex ? annex : "",
10269                 phex_nz (offset, sizeof offset));
10270   max_size -= (i + 1);
10271
10272   /* Escape as much data as fits into rs->buf.  */
10273   buf_len = remote_escape_output 
10274     (writebuf, len, 1, (gdb_byte *) rs->buf + i, &max_size, max_size);
10275
10276   if (putpkt_binary (rs->buf, i + buf_len) < 0
10277       || getpkt_sane (&rs->buf, &rs->buf_size, 0) < 0
10278       || packet_ok (rs->buf, packet) != PACKET_OK)
10279     return TARGET_XFER_E_IO;
10280
10281   unpack_varlen_hex (rs->buf, &n);
10282
10283   *xfered_len = n;
10284   return TARGET_XFER_OK;
10285 }
10286
10287 /* Read OBJECT_NAME/ANNEX from the remote target using a qXfer packet.
10288    Data at OFFSET, of up to LEN bytes, is read into READBUF; the
10289    number of bytes read is returned, or 0 for EOF, or -1 for error.
10290    The number of bytes read may be less than LEN without indicating an
10291    EOF.  PACKET is checked and updated to indicate whether the remote
10292    target supports this object.  */
10293
10294 static enum target_xfer_status
10295 remote_read_qxfer (struct target_ops *ops, const char *object_name,
10296                    const char *annex,
10297                    gdb_byte *readbuf, ULONGEST offset, LONGEST len,
10298                    ULONGEST *xfered_len,
10299                    struct packet_config *packet)
10300 {
10301   struct remote_state *rs = get_remote_state ();
10302   LONGEST i, n, packet_len;
10303
10304   if (packet->support == PACKET_DISABLE)
10305     return TARGET_XFER_E_IO;
10306
10307   /* Check whether we've cached an end-of-object packet that matches
10308      this request.  */
10309   if (rs->finished_object)
10310     {
10311       if (strcmp (object_name, rs->finished_object) == 0
10312           && strcmp (annex ? annex : "", rs->finished_annex) == 0
10313           && offset == rs->finished_offset)
10314         return TARGET_XFER_EOF;
10315
10316
10317       /* Otherwise, we're now reading something different.  Discard
10318          the cache.  */
10319       xfree (rs->finished_object);
10320       xfree (rs->finished_annex);
10321       rs->finished_object = NULL;
10322       rs->finished_annex = NULL;
10323     }
10324
10325   /* Request only enough to fit in a single packet.  The actual data
10326      may not, since we don't know how much of it will need to be escaped;
10327      the target is free to respond with slightly less data.  We subtract
10328      five to account for the response type and the protocol frame.  */
10329   n = std::min<LONGEST> (get_remote_packet_size () - 5, len);
10330   snprintf (rs->buf, get_remote_packet_size () - 4, "qXfer:%s:read:%s:%s,%s",
10331             object_name, annex ? annex : "",
10332             phex_nz (offset, sizeof offset),
10333             phex_nz (n, sizeof n));
10334   i = putpkt (rs->buf);
10335   if (i < 0)
10336     return TARGET_XFER_E_IO;
10337
10338   rs->buf[0] = '\0';
10339   packet_len = getpkt_sane (&rs->buf, &rs->buf_size, 0);
10340   if (packet_len < 0 || packet_ok (rs->buf, packet) != PACKET_OK)
10341     return TARGET_XFER_E_IO;
10342
10343   if (rs->buf[0] != 'l' && rs->buf[0] != 'm')
10344     error (_("Unknown remote qXfer reply: %s"), rs->buf);
10345
10346   /* 'm' means there is (or at least might be) more data after this
10347      batch.  That does not make sense unless there's at least one byte
10348      of data in this reply.  */
10349   if (rs->buf[0] == 'm' && packet_len == 1)
10350     error (_("Remote qXfer reply contained no data."));
10351
10352   /* Got some data.  */
10353   i = remote_unescape_input ((gdb_byte *) rs->buf + 1,
10354                              packet_len - 1, readbuf, n);
10355
10356   /* 'l' is an EOF marker, possibly including a final block of data,
10357      or possibly empty.  If we have the final block of a non-empty
10358      object, record this fact to bypass a subsequent partial read.  */
10359   if (rs->buf[0] == 'l' && offset + i > 0)
10360     {
10361       rs->finished_object = xstrdup (object_name);
10362       rs->finished_annex = xstrdup (annex ? annex : "");
10363       rs->finished_offset = offset + i;
10364     }
10365
10366   if (i == 0)
10367     return TARGET_XFER_EOF;
10368   else
10369     {
10370       *xfered_len = i;
10371       return TARGET_XFER_OK;
10372     }
10373 }
10374
10375 static enum target_xfer_status
10376 remote_xfer_partial (struct target_ops *ops, enum target_object object,
10377                      const char *annex, gdb_byte *readbuf,
10378                      const gdb_byte *writebuf, ULONGEST offset, ULONGEST len,
10379                      ULONGEST *xfered_len)
10380 {
10381   struct remote_state *rs;
10382   int i;
10383   char *p2;
10384   char query_type;
10385   int unit_size = gdbarch_addressable_memory_unit_size (target_gdbarch ());
10386
10387   set_remote_traceframe ();
10388   set_general_thread (inferior_ptid);
10389
10390   rs = get_remote_state ();
10391
10392   /* Handle memory using the standard memory routines.  */
10393   if (object == TARGET_OBJECT_MEMORY)
10394     {
10395       /* If the remote target is connected but not running, we should
10396          pass this request down to a lower stratum (e.g. the executable
10397          file).  */
10398       if (!target_has_execution)
10399         return TARGET_XFER_EOF;
10400
10401       if (writebuf != NULL)
10402         return remote_write_bytes (offset, writebuf, len, unit_size,
10403                                    xfered_len);
10404       else
10405         return remote_read_bytes (ops, offset, readbuf, len, unit_size,
10406                                   xfered_len);
10407     }
10408
10409   /* Handle SPU memory using qxfer packets.  */
10410   if (object == TARGET_OBJECT_SPU)
10411     {
10412       if (readbuf)
10413         return remote_read_qxfer (ops, "spu", annex, readbuf, offset, len,
10414                                   xfered_len, &remote_protocol_packets
10415                                   [PACKET_qXfer_spu_read]);
10416       else
10417         return remote_write_qxfer (ops, "spu", annex, writebuf, offset, len,
10418                                    xfered_len, &remote_protocol_packets
10419                                    [PACKET_qXfer_spu_write]);
10420     }
10421
10422   /* Handle extra signal info using qxfer packets.  */
10423   if (object == TARGET_OBJECT_SIGNAL_INFO)
10424     {
10425       if (readbuf)
10426         return remote_read_qxfer (ops, "siginfo", annex, readbuf, offset, len,
10427                                   xfered_len, &remote_protocol_packets
10428                                   [PACKET_qXfer_siginfo_read]);
10429       else
10430         return remote_write_qxfer (ops, "siginfo", annex,
10431                                    writebuf, offset, len, xfered_len,
10432                                    &remote_protocol_packets
10433                                    [PACKET_qXfer_siginfo_write]);
10434     }
10435
10436   if (object == TARGET_OBJECT_STATIC_TRACE_DATA)
10437     {
10438       if (readbuf)
10439         return remote_read_qxfer (ops, "statictrace", annex,
10440                                   readbuf, offset, len, xfered_len,
10441                                   &remote_protocol_packets
10442                                   [PACKET_qXfer_statictrace_read]);
10443       else
10444         return TARGET_XFER_E_IO;
10445     }
10446
10447   /* Only handle flash writes.  */
10448   if (writebuf != NULL)
10449     {
10450       switch (object)
10451         {
10452         case TARGET_OBJECT_FLASH:
10453           return remote_flash_write (ops, offset, len, xfered_len,
10454                                      writebuf);
10455
10456         default:
10457           return TARGET_XFER_E_IO;
10458         }
10459     }
10460
10461   /* Map pre-existing objects onto letters.  DO NOT do this for new
10462      objects!!!  Instead specify new query packets.  */
10463   switch (object)
10464     {
10465     case TARGET_OBJECT_AVR:
10466       query_type = 'R';
10467       break;
10468
10469     case TARGET_OBJECT_AUXV:
10470       gdb_assert (annex == NULL);
10471       return remote_read_qxfer (ops, "auxv", annex, readbuf, offset, len,
10472                                 xfered_len,
10473                                 &remote_protocol_packets[PACKET_qXfer_auxv]);
10474
10475     case TARGET_OBJECT_AVAILABLE_FEATURES:
10476       return remote_read_qxfer
10477         (ops, "features", annex, readbuf, offset, len, xfered_len,
10478          &remote_protocol_packets[PACKET_qXfer_features]);
10479
10480     case TARGET_OBJECT_LIBRARIES:
10481       return remote_read_qxfer
10482         (ops, "libraries", annex, readbuf, offset, len, xfered_len,
10483          &remote_protocol_packets[PACKET_qXfer_libraries]);
10484
10485     case TARGET_OBJECT_LIBRARIES_SVR4:
10486       return remote_read_qxfer
10487         (ops, "libraries-svr4", annex, readbuf, offset, len, xfered_len,
10488          &remote_protocol_packets[PACKET_qXfer_libraries_svr4]);
10489
10490     case TARGET_OBJECT_MEMORY_MAP:
10491       gdb_assert (annex == NULL);
10492       return remote_read_qxfer (ops, "memory-map", annex, readbuf, offset, len,
10493                                  xfered_len,
10494                                 &remote_protocol_packets[PACKET_qXfer_memory_map]);
10495
10496     case TARGET_OBJECT_OSDATA:
10497       /* Should only get here if we're connected.  */
10498       gdb_assert (rs->remote_desc);
10499       return remote_read_qxfer
10500         (ops, "osdata", annex, readbuf, offset, len, xfered_len,
10501         &remote_protocol_packets[PACKET_qXfer_osdata]);
10502
10503     case TARGET_OBJECT_THREADS:
10504       gdb_assert (annex == NULL);
10505       return remote_read_qxfer (ops, "threads", annex, readbuf, offset, len,
10506                                 xfered_len,
10507                                 &remote_protocol_packets[PACKET_qXfer_threads]);
10508
10509     case TARGET_OBJECT_TRACEFRAME_INFO:
10510       gdb_assert (annex == NULL);
10511       return remote_read_qxfer
10512         (ops, "traceframe-info", annex, readbuf, offset, len, xfered_len,
10513          &remote_protocol_packets[PACKET_qXfer_traceframe_info]);
10514
10515     case TARGET_OBJECT_FDPIC:
10516       return remote_read_qxfer (ops, "fdpic", annex, readbuf, offset, len,
10517                                 xfered_len,
10518                                 &remote_protocol_packets[PACKET_qXfer_fdpic]);
10519
10520     case TARGET_OBJECT_OPENVMS_UIB:
10521       return remote_read_qxfer (ops, "uib", annex, readbuf, offset, len,
10522                                 xfered_len,
10523                                 &remote_protocol_packets[PACKET_qXfer_uib]);
10524
10525     case TARGET_OBJECT_BTRACE:
10526       return remote_read_qxfer (ops, "btrace", annex, readbuf, offset, len,
10527                                 xfered_len,
10528         &remote_protocol_packets[PACKET_qXfer_btrace]);
10529
10530     case TARGET_OBJECT_BTRACE_CONF:
10531       return remote_read_qxfer (ops, "btrace-conf", annex, readbuf, offset,
10532                                 len, xfered_len,
10533         &remote_protocol_packets[PACKET_qXfer_btrace_conf]);
10534
10535     case TARGET_OBJECT_EXEC_FILE:
10536       return remote_read_qxfer (ops, "exec-file", annex, readbuf, offset,
10537                                 len, xfered_len,
10538         &remote_protocol_packets[PACKET_qXfer_exec_file]);
10539
10540     default:
10541       return TARGET_XFER_E_IO;
10542     }
10543
10544   /* Minimum outbuf size is get_remote_packet_size ().  If LEN is not
10545      large enough let the caller deal with it.  */
10546   if (len < get_remote_packet_size ())
10547     return TARGET_XFER_E_IO;
10548   len = get_remote_packet_size ();
10549
10550   /* Except for querying the minimum buffer size, target must be open.  */
10551   if (!rs->remote_desc)
10552     error (_("remote query is only available after target open"));
10553
10554   gdb_assert (annex != NULL);
10555   gdb_assert (readbuf != NULL);
10556
10557   p2 = rs->buf;
10558   *p2++ = 'q';
10559   *p2++ = query_type;
10560
10561   /* We used one buffer char for the remote protocol q command and
10562      another for the query type.  As the remote protocol encapsulation
10563      uses 4 chars plus one extra in case we are debugging
10564      (remote_debug), we have PBUFZIZ - 7 left to pack the query
10565      string.  */
10566   i = 0;
10567   while (annex[i] && (i < (get_remote_packet_size () - 8)))
10568     {
10569       /* Bad caller may have sent forbidden characters.  */
10570       gdb_assert (isprint (annex[i]) && annex[i] != '$' && annex[i] != '#');
10571       *p2++ = annex[i];
10572       i++;
10573     }
10574   *p2 = '\0';
10575   gdb_assert (annex[i] == '\0');
10576
10577   i = putpkt (rs->buf);
10578   if (i < 0)
10579     return TARGET_XFER_E_IO;
10580
10581   getpkt (&rs->buf, &rs->buf_size, 0);
10582   strcpy ((char *) readbuf, rs->buf);
10583
10584   *xfered_len = strlen ((char *) readbuf);
10585   return TARGET_XFER_OK;
10586 }
10587
10588 /* Implementation of to_get_memory_xfer_limit.  */
10589
10590 static ULONGEST
10591 remote_get_memory_xfer_limit (struct target_ops *ops)
10592 {
10593   return get_memory_write_packet_size ();
10594 }
10595
10596 static int
10597 remote_search_memory (struct target_ops* ops,
10598                       CORE_ADDR start_addr, ULONGEST search_space_len,
10599                       const gdb_byte *pattern, ULONGEST pattern_len,
10600                       CORE_ADDR *found_addrp)
10601 {
10602   int addr_size = gdbarch_addr_bit (target_gdbarch ()) / 8;
10603   struct remote_state *rs = get_remote_state ();
10604   int max_size = get_memory_write_packet_size ();
10605   struct packet_config *packet =
10606     &remote_protocol_packets[PACKET_qSearch_memory];
10607   /* Number of packet bytes used to encode the pattern;
10608      this could be more than PATTERN_LEN due to escape characters.  */
10609   int escaped_pattern_len;
10610   /* Amount of pattern that was encodable in the packet.  */
10611   int used_pattern_len;
10612   int i;
10613   int found;
10614   ULONGEST found_addr;
10615
10616   /* Don't go to the target if we don't have to.
10617      This is done before checking packet->support to avoid the possibility that
10618      a success for this edge case means the facility works in general.  */
10619   if (pattern_len > search_space_len)
10620     return 0;
10621   if (pattern_len == 0)
10622     {
10623       *found_addrp = start_addr;
10624       return 1;
10625     }
10626
10627   /* If we already know the packet isn't supported, fall back to the simple
10628      way of searching memory.  */
10629
10630   if (packet_config_support (packet) == PACKET_DISABLE)
10631     {
10632       /* Target doesn't provided special support, fall back and use the
10633          standard support (copy memory and do the search here).  */
10634       return simple_search_memory (ops, start_addr, search_space_len,
10635                                    pattern, pattern_len, found_addrp);
10636     }
10637
10638   /* Make sure the remote is pointing at the right process.  */
10639   set_general_process ();
10640
10641   /* Insert header.  */
10642   i = snprintf (rs->buf, max_size, 
10643                 "qSearch:memory:%s;%s;",
10644                 phex_nz (start_addr, addr_size),
10645                 phex_nz (search_space_len, sizeof (search_space_len)));
10646   max_size -= (i + 1);
10647
10648   /* Escape as much data as fits into rs->buf.  */
10649   escaped_pattern_len =
10650     remote_escape_output (pattern, pattern_len, 1, (gdb_byte *) rs->buf + i,
10651                           &used_pattern_len, max_size);
10652
10653   /* Bail if the pattern is too large.  */
10654   if (used_pattern_len != pattern_len)
10655     error (_("Pattern is too large to transmit to remote target."));
10656
10657   if (putpkt_binary (rs->buf, i + escaped_pattern_len) < 0
10658       || getpkt_sane (&rs->buf, &rs->buf_size, 0) < 0
10659       || packet_ok (rs->buf, packet) != PACKET_OK)
10660     {
10661       /* The request may not have worked because the command is not
10662          supported.  If so, fall back to the simple way.  */
10663       if (packet->support == PACKET_DISABLE)
10664         {
10665           return simple_search_memory (ops, start_addr, search_space_len,
10666                                        pattern, pattern_len, found_addrp);
10667         }
10668       return -1;
10669     }
10670
10671   if (rs->buf[0] == '0')
10672     found = 0;
10673   else if (rs->buf[0] == '1')
10674     {
10675       found = 1;
10676       if (rs->buf[1] != ',')
10677         error (_("Unknown qSearch:memory reply: %s"), rs->buf);
10678       unpack_varlen_hex (rs->buf + 2, &found_addr);
10679       *found_addrp = found_addr;
10680     }
10681   else
10682     error (_("Unknown qSearch:memory reply: %s"), rs->buf);
10683
10684   return found;
10685 }
10686
10687 static void
10688 remote_rcmd (struct target_ops *self, const char *command,
10689              struct ui_file *outbuf)
10690 {
10691   struct remote_state *rs = get_remote_state ();
10692   char *p = rs->buf;
10693
10694   if (!rs->remote_desc)
10695     error (_("remote rcmd is only available after target open"));
10696
10697   /* Send a NULL command across as an empty command.  */
10698   if (command == NULL)
10699     command = "";
10700
10701   /* The query prefix.  */
10702   strcpy (rs->buf, "qRcmd,");
10703   p = strchr (rs->buf, '\0');
10704
10705   if ((strlen (rs->buf) + strlen (command) * 2 + 8/*misc*/)
10706       > get_remote_packet_size ())
10707     error (_("\"monitor\" command ``%s'' is too long."), command);
10708
10709   /* Encode the actual command.  */
10710   bin2hex ((const gdb_byte *) command, p, strlen (command));
10711
10712   if (putpkt (rs->buf) < 0)
10713     error (_("Communication problem with target."));
10714
10715   /* get/display the response */
10716   while (1)
10717     {
10718       char *buf;
10719
10720       /* XXX - see also remote_get_noisy_reply().  */
10721       QUIT;                     /* Allow user to bail out with ^C.  */
10722       rs->buf[0] = '\0';
10723       if (getpkt_sane (&rs->buf, &rs->buf_size, 0) == -1)
10724         { 
10725           /* Timeout.  Continue to (try to) read responses.
10726              This is better than stopping with an error, assuming the stub
10727              is still executing the (long) monitor command.
10728              If needed, the user can interrupt gdb using C-c, obtaining
10729              an effect similar to stop on timeout.  */
10730           continue;
10731         }
10732       buf = rs->buf;
10733       if (buf[0] == '\0')
10734         error (_("Target does not support this command."));
10735       if (buf[0] == 'O' && buf[1] != 'K')
10736         {
10737           remote_console_output (buf + 1); /* 'O' message from stub.  */
10738           continue;
10739         }
10740       if (strcmp (buf, "OK") == 0)
10741         break;
10742       if (strlen (buf) == 3 && buf[0] == 'E'
10743           && isdigit (buf[1]) && isdigit (buf[2]))
10744         {
10745           error (_("Protocol error with Rcmd"));
10746         }
10747       for (p = buf; p[0] != '\0' && p[1] != '\0'; p += 2)
10748         {
10749           char c = (fromhex (p[0]) << 4) + fromhex (p[1]);
10750
10751           fputc_unfiltered (c, outbuf);
10752         }
10753       break;
10754     }
10755 }
10756
10757 static VEC(mem_region_s) *
10758 remote_memory_map (struct target_ops *ops)
10759 {
10760   VEC(mem_region_s) *result = NULL;
10761   char *text = target_read_stralloc (&current_target,
10762                                      TARGET_OBJECT_MEMORY_MAP, NULL);
10763
10764   if (text)
10765     {
10766       struct cleanup *back_to = make_cleanup (xfree, text);
10767
10768       result = parse_memory_map (text);
10769       do_cleanups (back_to);
10770     }
10771
10772   return result;
10773 }
10774
10775 static void
10776 packet_command (char *args, int from_tty)
10777 {
10778   struct remote_state *rs = get_remote_state ();
10779
10780   if (!rs->remote_desc)
10781     error (_("command can only be used with remote target"));
10782
10783   if (!args)
10784     error (_("remote-packet command requires packet text as argument"));
10785
10786   puts_filtered ("sending: ");
10787   print_packet (args);
10788   puts_filtered ("\n");
10789   putpkt (args);
10790
10791   getpkt (&rs->buf, &rs->buf_size, 0);
10792   puts_filtered ("received: ");
10793   print_packet (rs->buf);
10794   puts_filtered ("\n");
10795 }
10796
10797 #if 0
10798 /* --------- UNIT_TEST for THREAD oriented PACKETS ------------------- */
10799
10800 static void display_thread_info (struct gdb_ext_thread_info *info);
10801
10802 static void threadset_test_cmd (char *cmd, int tty);
10803
10804 static void threadalive_test (char *cmd, int tty);
10805
10806 static void threadlist_test_cmd (char *cmd, int tty);
10807
10808 int get_and_display_threadinfo (threadref *ref);
10809
10810 static void threadinfo_test_cmd (char *cmd, int tty);
10811
10812 static int thread_display_step (threadref *ref, void *context);
10813
10814 static void threadlist_update_test_cmd (char *cmd, int tty);
10815
10816 static void init_remote_threadtests (void);
10817
10818 #define SAMPLE_THREAD  0x05060708       /* Truncated 64 bit threadid.  */
10819
10820 static void
10821 threadset_test_cmd (char *cmd, int tty)
10822 {
10823   int sample_thread = SAMPLE_THREAD;
10824
10825   printf_filtered (_("Remote threadset test\n"));
10826   set_general_thread (sample_thread);
10827 }
10828
10829
10830 static void
10831 threadalive_test (char *cmd, int tty)
10832 {
10833   int sample_thread = SAMPLE_THREAD;
10834   int pid = ptid_get_pid (inferior_ptid);
10835   ptid_t ptid = ptid_build (pid, sample_thread, 0);
10836
10837   if (remote_thread_alive (ptid))
10838     printf_filtered ("PASS: Thread alive test\n");
10839   else
10840     printf_filtered ("FAIL: Thread alive test\n");
10841 }
10842
10843 void output_threadid (char *title, threadref *ref);
10844
10845 void
10846 output_threadid (char *title, threadref *ref)
10847 {
10848   char hexid[20];
10849
10850   pack_threadid (&hexid[0], ref);       /* Convert threead id into hex.  */
10851   hexid[16] = 0;
10852   printf_filtered ("%s  %s\n", title, (&hexid[0]));
10853 }
10854
10855 static void
10856 threadlist_test_cmd (char *cmd, int tty)
10857 {
10858   int startflag = 1;
10859   threadref nextthread;
10860   int done, result_count;
10861   threadref threadlist[3];
10862
10863   printf_filtered ("Remote Threadlist test\n");
10864   if (!remote_get_threadlist (startflag, &nextthread, 3, &done,
10865                               &result_count, &threadlist[0]))
10866     printf_filtered ("FAIL: threadlist test\n");
10867   else
10868     {
10869       threadref *scan = threadlist;
10870       threadref *limit = scan + result_count;
10871
10872       while (scan < limit)
10873         output_threadid (" thread ", scan++);
10874     }
10875 }
10876
10877 void
10878 display_thread_info (struct gdb_ext_thread_info *info)
10879 {
10880   output_threadid ("Threadid: ", &info->threadid);
10881   printf_filtered ("Name: %s\n ", info->shortname);
10882   printf_filtered ("State: %s\n", info->display);
10883   printf_filtered ("other: %s\n\n", info->more_display);
10884 }
10885
10886 int
10887 get_and_display_threadinfo (threadref *ref)
10888 {
10889   int result;
10890   int set;
10891   struct gdb_ext_thread_info threadinfo;
10892
10893   set = TAG_THREADID | TAG_EXISTS | TAG_THREADNAME
10894     | TAG_MOREDISPLAY | TAG_DISPLAY;
10895   if (0 != (result = remote_get_threadinfo (ref, set, &threadinfo)))
10896     display_thread_info (&threadinfo);
10897   return result;
10898 }
10899
10900 static void
10901 threadinfo_test_cmd (char *cmd, int tty)
10902 {
10903   int athread = SAMPLE_THREAD;
10904   threadref thread;
10905   int set;
10906
10907   int_to_threadref (&thread, athread);
10908   printf_filtered ("Remote Threadinfo test\n");
10909   if (!get_and_display_threadinfo (&thread))
10910     printf_filtered ("FAIL cannot get thread info\n");
10911 }
10912
10913 static int
10914 thread_display_step (threadref *ref, void *context)
10915 {
10916   /* output_threadid(" threadstep ",ref); *//* simple test */
10917   return get_and_display_threadinfo (ref);
10918 }
10919
10920 static void
10921 threadlist_update_test_cmd (char *cmd, int tty)
10922 {
10923   printf_filtered ("Remote Threadlist update test\n");
10924   remote_threadlist_iterator (thread_display_step, 0, CRAZY_MAX_THREADS);
10925 }
10926
10927 static void
10928 init_remote_threadtests (void)
10929 {
10930   add_com ("tlist", class_obscure, threadlist_test_cmd,
10931            _("Fetch and print the remote list of "
10932              "thread identifiers, one pkt only"));
10933   add_com ("tinfo", class_obscure, threadinfo_test_cmd,
10934            _("Fetch and display info about one thread"));
10935   add_com ("tset", class_obscure, threadset_test_cmd,
10936            _("Test setting to a different thread"));
10937   add_com ("tupd", class_obscure, threadlist_update_test_cmd,
10938            _("Iterate through updating all remote thread info"));
10939   add_com ("talive", class_obscure, threadalive_test,
10940            _(" Remote thread alive test "));
10941 }
10942
10943 #endif /* 0 */
10944
10945 /* Convert a thread ID to a string.  Returns the string in a static
10946    buffer.  */
10947
10948 static char *
10949 remote_pid_to_str (struct target_ops *ops, ptid_t ptid)
10950 {
10951   static char buf[64];
10952   struct remote_state *rs = get_remote_state ();
10953
10954   if (ptid_equal (ptid, null_ptid))
10955     return normal_pid_to_str (ptid);
10956   else if (ptid_is_pid (ptid))
10957     {
10958       /* Printing an inferior target id.  */
10959
10960       /* When multi-process extensions are off, there's no way in the
10961          remote protocol to know the remote process id, if there's any
10962          at all.  There's one exception --- when we're connected with
10963          target extended-remote, and we manually attached to a process
10964          with "attach PID".  We don't record anywhere a flag that
10965          allows us to distinguish that case from the case of
10966          connecting with extended-remote and the stub already being
10967          attached to a process, and reporting yes to qAttached, hence
10968          no smart special casing here.  */
10969       if (!remote_multi_process_p (rs))
10970         {
10971           xsnprintf (buf, sizeof buf, "Remote target");
10972           return buf;
10973         }
10974
10975       return normal_pid_to_str (ptid);
10976     }
10977   else
10978     {
10979       if (ptid_equal (magic_null_ptid, ptid))
10980         xsnprintf (buf, sizeof buf, "Thread <main>");
10981       else if (remote_multi_process_p (rs))
10982         if (ptid_get_lwp (ptid) == 0)
10983           return normal_pid_to_str (ptid);
10984         else
10985           xsnprintf (buf, sizeof buf, "Thread %d.%ld",
10986                      ptid_get_pid (ptid), ptid_get_lwp (ptid));
10987       else
10988         xsnprintf (buf, sizeof buf, "Thread %ld",
10989                    ptid_get_lwp (ptid));
10990       return buf;
10991     }
10992 }
10993
10994 /* Get the address of the thread local variable in OBJFILE which is
10995    stored at OFFSET within the thread local storage for thread PTID.  */
10996
10997 static CORE_ADDR
10998 remote_get_thread_local_address (struct target_ops *ops,
10999                                  ptid_t ptid, CORE_ADDR lm, CORE_ADDR offset)
11000 {
11001   if (packet_support (PACKET_qGetTLSAddr) != PACKET_DISABLE)
11002     {
11003       struct remote_state *rs = get_remote_state ();
11004       char *p = rs->buf;
11005       char *endp = rs->buf + get_remote_packet_size ();
11006       enum packet_result result;
11007
11008       strcpy (p, "qGetTLSAddr:");
11009       p += strlen (p);
11010       p = write_ptid (p, endp, ptid);
11011       *p++ = ',';
11012       p += hexnumstr (p, offset);
11013       *p++ = ',';
11014       p += hexnumstr (p, lm);
11015       *p++ = '\0';
11016
11017       putpkt (rs->buf);
11018       getpkt (&rs->buf, &rs->buf_size, 0);
11019       result = packet_ok (rs->buf,
11020                           &remote_protocol_packets[PACKET_qGetTLSAddr]);
11021       if (result == PACKET_OK)
11022         {
11023           ULONGEST result;
11024
11025           unpack_varlen_hex (rs->buf, &result);
11026           return result;
11027         }
11028       else if (result == PACKET_UNKNOWN)
11029         throw_error (TLS_GENERIC_ERROR,
11030                      _("Remote target doesn't support qGetTLSAddr packet"));
11031       else
11032         throw_error (TLS_GENERIC_ERROR,
11033                      _("Remote target failed to process qGetTLSAddr request"));
11034     }
11035   else
11036     throw_error (TLS_GENERIC_ERROR,
11037                  _("TLS not supported or disabled on this target"));
11038   /* Not reached.  */
11039   return 0;
11040 }
11041
11042 /* Provide thread local base, i.e. Thread Information Block address.
11043    Returns 1 if ptid is found and thread_local_base is non zero.  */
11044
11045 static int
11046 remote_get_tib_address (struct target_ops *self, ptid_t ptid, CORE_ADDR *addr)
11047 {
11048   if (packet_support (PACKET_qGetTIBAddr) != PACKET_DISABLE)
11049     {
11050       struct remote_state *rs = get_remote_state ();
11051       char *p = rs->buf;
11052       char *endp = rs->buf + get_remote_packet_size ();
11053       enum packet_result result;
11054
11055       strcpy (p, "qGetTIBAddr:");
11056       p += strlen (p);
11057       p = write_ptid (p, endp, ptid);
11058       *p++ = '\0';
11059
11060       putpkt (rs->buf);
11061       getpkt (&rs->buf, &rs->buf_size, 0);
11062       result = packet_ok (rs->buf,
11063                           &remote_protocol_packets[PACKET_qGetTIBAddr]);
11064       if (result == PACKET_OK)
11065         {
11066           ULONGEST result;
11067
11068           unpack_varlen_hex (rs->buf, &result);
11069           if (addr)
11070             *addr = (CORE_ADDR) result;
11071           return 1;
11072         }
11073       else if (result == PACKET_UNKNOWN)
11074         error (_("Remote target doesn't support qGetTIBAddr packet"));
11075       else
11076         error (_("Remote target failed to process qGetTIBAddr request"));
11077     }
11078   else
11079     error (_("qGetTIBAddr not supported or disabled on this target"));
11080   /* Not reached.  */
11081   return 0;
11082 }
11083
11084 /* Support for inferring a target description based on the current
11085    architecture and the size of a 'g' packet.  While the 'g' packet
11086    can have any size (since optional registers can be left off the
11087    end), some sizes are easily recognizable given knowledge of the
11088    approximate architecture.  */
11089
11090 struct remote_g_packet_guess
11091 {
11092   int bytes;
11093   const struct target_desc *tdesc;
11094 };
11095 typedef struct remote_g_packet_guess remote_g_packet_guess_s;
11096 DEF_VEC_O(remote_g_packet_guess_s);
11097
11098 struct remote_g_packet_data
11099 {
11100   VEC(remote_g_packet_guess_s) *guesses;
11101 };
11102
11103 static struct gdbarch_data *remote_g_packet_data_handle;
11104
11105 static void *
11106 remote_g_packet_data_init (struct obstack *obstack)
11107 {
11108   return OBSTACK_ZALLOC (obstack, struct remote_g_packet_data);
11109 }
11110
11111 void
11112 register_remote_g_packet_guess (struct gdbarch *gdbarch, int bytes,
11113                                 const struct target_desc *tdesc)
11114 {
11115   struct remote_g_packet_data *data
11116     = ((struct remote_g_packet_data *)
11117        gdbarch_data (gdbarch, remote_g_packet_data_handle));
11118   struct remote_g_packet_guess new_guess, *guess;
11119   int ix;
11120
11121   gdb_assert (tdesc != NULL);
11122
11123   for (ix = 0;
11124        VEC_iterate (remote_g_packet_guess_s, data->guesses, ix, guess);
11125        ix++)
11126     if (guess->bytes == bytes)
11127       internal_error (__FILE__, __LINE__,
11128                       _("Duplicate g packet description added for size %d"),
11129                       bytes);
11130
11131   new_guess.bytes = bytes;
11132   new_guess.tdesc = tdesc;
11133   VEC_safe_push (remote_g_packet_guess_s, data->guesses, &new_guess);
11134 }
11135
11136 /* Return 1 if remote_read_description would do anything on this target
11137    and architecture, 0 otherwise.  */
11138
11139 static int
11140 remote_read_description_p (struct target_ops *target)
11141 {
11142   struct remote_g_packet_data *data
11143     = ((struct remote_g_packet_data *)
11144        gdbarch_data (target_gdbarch (), remote_g_packet_data_handle));
11145
11146   if (!VEC_empty (remote_g_packet_guess_s, data->guesses))
11147     return 1;
11148
11149   return 0;
11150 }
11151
11152 static const struct target_desc *
11153 remote_read_description (struct target_ops *target)
11154 {
11155   struct remote_g_packet_data *data
11156     = ((struct remote_g_packet_data *)
11157        gdbarch_data (target_gdbarch (), remote_g_packet_data_handle));
11158
11159   /* Do not try this during initial connection, when we do not know
11160      whether there is a running but stopped thread.  */
11161   if (!target_has_execution || ptid_equal (inferior_ptid, null_ptid))
11162     return target->beneath->to_read_description (target->beneath);
11163
11164   if (!VEC_empty (remote_g_packet_guess_s, data->guesses))
11165     {
11166       struct remote_g_packet_guess *guess;
11167       int ix;
11168       int bytes = send_g_packet ();
11169
11170       for (ix = 0;
11171            VEC_iterate (remote_g_packet_guess_s, data->guesses, ix, guess);
11172            ix++)
11173         if (guess->bytes == bytes)
11174           return guess->tdesc;
11175
11176       /* We discard the g packet.  A minor optimization would be to
11177          hold on to it, and fill the register cache once we have selected
11178          an architecture, but it's too tricky to do safely.  */
11179     }
11180
11181   return target->beneath->to_read_description (target->beneath);
11182 }
11183
11184 /* Remote file transfer support.  This is host-initiated I/O, not
11185    target-initiated; for target-initiated, see remote-fileio.c.  */
11186
11187 /* If *LEFT is at least the length of STRING, copy STRING to
11188    *BUFFER, update *BUFFER to point to the new end of the buffer, and
11189    decrease *LEFT.  Otherwise raise an error.  */
11190
11191 static void
11192 remote_buffer_add_string (char **buffer, int *left, char *string)
11193 {
11194   int len = strlen (string);
11195
11196   if (len > *left)
11197     error (_("Packet too long for target."));
11198
11199   memcpy (*buffer, string, len);
11200   *buffer += len;
11201   *left -= len;
11202
11203   /* NUL-terminate the buffer as a convenience, if there is
11204      room.  */
11205   if (*left)
11206     **buffer = '\0';
11207 }
11208
11209 /* If *LEFT is large enough, hex encode LEN bytes from BYTES into
11210    *BUFFER, update *BUFFER to point to the new end of the buffer, and
11211    decrease *LEFT.  Otherwise raise an error.  */
11212
11213 static void
11214 remote_buffer_add_bytes (char **buffer, int *left, const gdb_byte *bytes,
11215                          int len)
11216 {
11217   if (2 * len > *left)
11218     error (_("Packet too long for target."));
11219
11220   bin2hex (bytes, *buffer, len);
11221   *buffer += 2 * len;
11222   *left -= 2 * len;
11223
11224   /* NUL-terminate the buffer as a convenience, if there is
11225      room.  */
11226   if (*left)
11227     **buffer = '\0';
11228 }
11229
11230 /* If *LEFT is large enough, convert VALUE to hex and add it to
11231    *BUFFER, update *BUFFER to point to the new end of the buffer, and
11232    decrease *LEFT.  Otherwise raise an error.  */
11233
11234 static void
11235 remote_buffer_add_int (char **buffer, int *left, ULONGEST value)
11236 {
11237   int len = hexnumlen (value);
11238
11239   if (len > *left)
11240     error (_("Packet too long for target."));
11241
11242   hexnumstr (*buffer, value);
11243   *buffer += len;
11244   *left -= len;
11245
11246   /* NUL-terminate the buffer as a convenience, if there is
11247      room.  */
11248   if (*left)
11249     **buffer = '\0';
11250 }
11251
11252 /* Parse an I/O result packet from BUFFER.  Set RETCODE to the return
11253    value, *REMOTE_ERRNO to the remote error number or zero if none
11254    was included, and *ATTACHMENT to point to the start of the annex
11255    if any.  The length of the packet isn't needed here; there may
11256    be NUL bytes in BUFFER, but they will be after *ATTACHMENT.
11257
11258    Return 0 if the packet could be parsed, -1 if it could not.  If
11259    -1 is returned, the other variables may not be initialized.  */
11260
11261 static int
11262 remote_hostio_parse_result (char *buffer, int *retcode,
11263                             int *remote_errno, char **attachment)
11264 {
11265   char *p, *p2;
11266
11267   *remote_errno = 0;
11268   *attachment = NULL;
11269
11270   if (buffer[0] != 'F')
11271     return -1;
11272
11273   errno = 0;
11274   *retcode = strtol (&buffer[1], &p, 16);
11275   if (errno != 0 || p == &buffer[1])
11276     return -1;
11277
11278   /* Check for ",errno".  */
11279   if (*p == ',')
11280     {
11281       errno = 0;
11282       *remote_errno = strtol (p + 1, &p2, 16);
11283       if (errno != 0 || p + 1 == p2)
11284         return -1;
11285       p = p2;
11286     }
11287
11288   /* Check for ";attachment".  If there is no attachment, the
11289      packet should end here.  */
11290   if (*p == ';')
11291     {
11292       *attachment = p + 1;
11293       return 0;
11294     }
11295   else if (*p == '\0')
11296     return 0;
11297   else
11298     return -1;
11299 }
11300
11301 /* Send a prepared I/O packet to the target and read its response.
11302    The prepared packet is in the global RS->BUF before this function
11303    is called, and the answer is there when we return.
11304
11305    COMMAND_BYTES is the length of the request to send, which may include
11306    binary data.  WHICH_PACKET is the packet configuration to check
11307    before attempting a packet.  If an error occurs, *REMOTE_ERRNO
11308    is set to the error number and -1 is returned.  Otherwise the value
11309    returned by the function is returned.
11310
11311    ATTACHMENT and ATTACHMENT_LEN should be non-NULL if and only if an
11312    attachment is expected; an error will be reported if there's a
11313    mismatch.  If one is found, *ATTACHMENT will be set to point into
11314    the packet buffer and *ATTACHMENT_LEN will be set to the
11315    attachment's length.  */
11316
11317 static int
11318 remote_hostio_send_command (int command_bytes, int which_packet,
11319                             int *remote_errno, char **attachment,
11320                             int *attachment_len)
11321 {
11322   struct remote_state *rs = get_remote_state ();
11323   int ret, bytes_read;
11324   char *attachment_tmp;
11325
11326   if (!rs->remote_desc
11327       || packet_support (which_packet) == PACKET_DISABLE)
11328     {
11329       *remote_errno = FILEIO_ENOSYS;
11330       return -1;
11331     }
11332
11333   putpkt_binary (rs->buf, command_bytes);
11334   bytes_read = getpkt_sane (&rs->buf, &rs->buf_size, 0);
11335
11336   /* If it timed out, something is wrong.  Don't try to parse the
11337      buffer.  */
11338   if (bytes_read < 0)
11339     {
11340       *remote_errno = FILEIO_EINVAL;
11341       return -1;
11342     }
11343
11344   switch (packet_ok (rs->buf, &remote_protocol_packets[which_packet]))
11345     {
11346     case PACKET_ERROR:
11347       *remote_errno = FILEIO_EINVAL;
11348       return -1;
11349     case PACKET_UNKNOWN:
11350       *remote_errno = FILEIO_ENOSYS;
11351       return -1;
11352     case PACKET_OK:
11353       break;
11354     }
11355
11356   if (remote_hostio_parse_result (rs->buf, &ret, remote_errno,
11357                                   &attachment_tmp))
11358     {
11359       *remote_errno = FILEIO_EINVAL;
11360       return -1;
11361     }
11362
11363   /* Make sure we saw an attachment if and only if we expected one.  */
11364   if ((attachment_tmp == NULL && attachment != NULL)
11365       || (attachment_tmp != NULL && attachment == NULL))
11366     {
11367       *remote_errno = FILEIO_EINVAL;
11368       return -1;
11369     }
11370
11371   /* If an attachment was found, it must point into the packet buffer;
11372      work out how many bytes there were.  */
11373   if (attachment_tmp != NULL)
11374     {
11375       *attachment = attachment_tmp;
11376       *attachment_len = bytes_read - (*attachment - rs->buf);
11377     }
11378
11379   return ret;
11380 }
11381
11382 /* Invalidate the readahead cache.  */
11383
11384 static void
11385 readahead_cache_invalidate (void)
11386 {
11387   struct remote_state *rs = get_remote_state ();
11388
11389   rs->readahead_cache.fd = -1;
11390 }
11391
11392 /* Invalidate the readahead cache if it is holding data for FD.  */
11393
11394 static void
11395 readahead_cache_invalidate_fd (int fd)
11396 {
11397   struct remote_state *rs = get_remote_state ();
11398
11399   if (rs->readahead_cache.fd == fd)
11400     rs->readahead_cache.fd = -1;
11401 }
11402
11403 /* Set the filesystem remote_hostio functions that take FILENAME
11404    arguments will use.  Return 0 on success, or -1 if an error
11405    occurs (and set *REMOTE_ERRNO).  */
11406
11407 static int
11408 remote_hostio_set_filesystem (struct inferior *inf, int *remote_errno)
11409 {
11410   struct remote_state *rs = get_remote_state ();
11411   int required_pid = (inf == NULL || inf->fake_pid_p) ? 0 : inf->pid;
11412   char *p = rs->buf;
11413   int left = get_remote_packet_size () - 1;
11414   char arg[9];
11415   int ret;
11416
11417   if (packet_support (PACKET_vFile_setfs) == PACKET_DISABLE)
11418     return 0;
11419
11420   if (rs->fs_pid != -1 && required_pid == rs->fs_pid)
11421     return 0;
11422
11423   remote_buffer_add_string (&p, &left, "vFile:setfs:");
11424
11425   xsnprintf (arg, sizeof (arg), "%x", required_pid);
11426   remote_buffer_add_string (&p, &left, arg);
11427
11428   ret = remote_hostio_send_command (p - rs->buf, PACKET_vFile_setfs,
11429                                     remote_errno, NULL, NULL);
11430
11431   if (packet_support (PACKET_vFile_setfs) == PACKET_DISABLE)
11432     return 0;
11433
11434   if (ret == 0)
11435     rs->fs_pid = required_pid;
11436
11437   return ret;
11438 }
11439
11440 /* Implementation of to_fileio_open.  */
11441
11442 static int
11443 remote_hostio_open (struct target_ops *self,
11444                     struct inferior *inf, const char *filename,
11445                     int flags, int mode, int warn_if_slow,
11446                     int *remote_errno)
11447 {
11448   struct remote_state *rs = get_remote_state ();
11449   char *p = rs->buf;
11450   int left = get_remote_packet_size () - 1;
11451
11452   if (warn_if_slow)
11453     {
11454       static int warning_issued = 0;
11455
11456       printf_unfiltered (_("Reading %s from remote target...\n"),
11457                          filename);
11458
11459       if (!warning_issued)
11460         {
11461           warning (_("File transfers from remote targets can be slow."
11462                      " Use \"set sysroot\" to access files locally"
11463                      " instead."));
11464           warning_issued = 1;
11465         }
11466     }
11467
11468   if (remote_hostio_set_filesystem (inf, remote_errno) != 0)
11469     return -1;
11470
11471   remote_buffer_add_string (&p, &left, "vFile:open:");
11472
11473   remote_buffer_add_bytes (&p, &left, (const gdb_byte *) filename,
11474                            strlen (filename));
11475   remote_buffer_add_string (&p, &left, ",");
11476
11477   remote_buffer_add_int (&p, &left, flags);
11478   remote_buffer_add_string (&p, &left, ",");
11479
11480   remote_buffer_add_int (&p, &left, mode);
11481
11482   return remote_hostio_send_command (p - rs->buf, PACKET_vFile_open,
11483                                      remote_errno, NULL, NULL);
11484 }
11485
11486 /* Implementation of to_fileio_pwrite.  */
11487
11488 static int
11489 remote_hostio_pwrite (struct target_ops *self,
11490                       int fd, const gdb_byte *write_buf, int len,
11491                       ULONGEST offset, int *remote_errno)
11492 {
11493   struct remote_state *rs = get_remote_state ();
11494   char *p = rs->buf;
11495   int left = get_remote_packet_size ();
11496   int out_len;
11497
11498   readahead_cache_invalidate_fd (fd);
11499
11500   remote_buffer_add_string (&p, &left, "vFile:pwrite:");
11501
11502   remote_buffer_add_int (&p, &left, fd);
11503   remote_buffer_add_string (&p, &left, ",");
11504
11505   remote_buffer_add_int (&p, &left, offset);
11506   remote_buffer_add_string (&p, &left, ",");
11507
11508   p += remote_escape_output (write_buf, len, 1, (gdb_byte *) p, &out_len,
11509                              get_remote_packet_size () - (p - rs->buf));
11510
11511   return remote_hostio_send_command (p - rs->buf, PACKET_vFile_pwrite,
11512                                      remote_errno, NULL, NULL);
11513 }
11514
11515 /* Helper for the implementation of to_fileio_pread.  Read the file
11516    from the remote side with vFile:pread.  */
11517
11518 static int
11519 remote_hostio_pread_vFile (struct target_ops *self,
11520                            int fd, gdb_byte *read_buf, int len,
11521                            ULONGEST offset, int *remote_errno)
11522 {
11523   struct remote_state *rs = get_remote_state ();
11524   char *p = rs->buf;
11525   char *attachment;
11526   int left = get_remote_packet_size ();
11527   int ret, attachment_len;
11528   int read_len;
11529
11530   remote_buffer_add_string (&p, &left, "vFile:pread:");
11531
11532   remote_buffer_add_int (&p, &left, fd);
11533   remote_buffer_add_string (&p, &left, ",");
11534
11535   remote_buffer_add_int (&p, &left, len);
11536   remote_buffer_add_string (&p, &left, ",");
11537
11538   remote_buffer_add_int (&p, &left, offset);
11539
11540   ret = remote_hostio_send_command (p - rs->buf, PACKET_vFile_pread,
11541                                     remote_errno, &attachment,
11542                                     &attachment_len);
11543
11544   if (ret < 0)
11545     return ret;
11546
11547   read_len = remote_unescape_input ((gdb_byte *) attachment, attachment_len,
11548                                     read_buf, len);
11549   if (read_len != ret)
11550     error (_("Read returned %d, but %d bytes."), ret, (int) read_len);
11551
11552   return ret;
11553 }
11554
11555 /* Serve pread from the readahead cache.  Returns number of bytes
11556    read, or 0 if the request can't be served from the cache.  */
11557
11558 static int
11559 remote_hostio_pread_from_cache (struct remote_state *rs,
11560                                 int fd, gdb_byte *read_buf, size_t len,
11561                                 ULONGEST offset)
11562 {
11563   struct readahead_cache *cache = &rs->readahead_cache;
11564
11565   if (cache->fd == fd
11566       && cache->offset <= offset
11567       && offset < cache->offset + cache->bufsize)
11568     {
11569       ULONGEST max = cache->offset + cache->bufsize;
11570
11571       if (offset + len > max)
11572         len = max - offset;
11573
11574       memcpy (read_buf, cache->buf + offset - cache->offset, len);
11575       return len;
11576     }
11577
11578   return 0;
11579 }
11580
11581 /* Implementation of to_fileio_pread.  */
11582
11583 static int
11584 remote_hostio_pread (struct target_ops *self,
11585                      int fd, gdb_byte *read_buf, int len,
11586                      ULONGEST offset, int *remote_errno)
11587 {
11588   int ret;
11589   struct remote_state *rs = get_remote_state ();
11590   struct readahead_cache *cache = &rs->readahead_cache;
11591
11592   ret = remote_hostio_pread_from_cache (rs, fd, read_buf, len, offset);
11593   if (ret > 0)
11594     {
11595       cache->hit_count++;
11596
11597       if (remote_debug)
11598         fprintf_unfiltered (gdb_stdlog, "readahead cache hit %s\n",
11599                             pulongest (cache->hit_count));
11600       return ret;
11601     }
11602
11603   cache->miss_count++;
11604   if (remote_debug)
11605     fprintf_unfiltered (gdb_stdlog, "readahead cache miss %s\n",
11606                         pulongest (cache->miss_count));
11607
11608   cache->fd = fd;
11609   cache->offset = offset;
11610   cache->bufsize = get_remote_packet_size ();
11611   cache->buf = (gdb_byte *) xrealloc (cache->buf, cache->bufsize);
11612
11613   ret = remote_hostio_pread_vFile (self, cache->fd, cache->buf, cache->bufsize,
11614                                    cache->offset, remote_errno);
11615   if (ret <= 0)
11616     {
11617       readahead_cache_invalidate_fd (fd);
11618       return ret;
11619     }
11620
11621   cache->bufsize = ret;
11622   return remote_hostio_pread_from_cache (rs, fd, read_buf, len, offset);
11623 }
11624
11625 /* Implementation of to_fileio_close.  */
11626
11627 static int
11628 remote_hostio_close (struct target_ops *self, int fd, int *remote_errno)
11629 {
11630   struct remote_state *rs = get_remote_state ();
11631   char *p = rs->buf;
11632   int left = get_remote_packet_size () - 1;
11633
11634   readahead_cache_invalidate_fd (fd);
11635
11636   remote_buffer_add_string (&p, &left, "vFile:close:");
11637
11638   remote_buffer_add_int (&p, &left, fd);
11639
11640   return remote_hostio_send_command (p - rs->buf, PACKET_vFile_close,
11641                                      remote_errno, NULL, NULL);
11642 }
11643
11644 /* Implementation of to_fileio_unlink.  */
11645
11646 static int
11647 remote_hostio_unlink (struct target_ops *self,
11648                       struct inferior *inf, const char *filename,
11649                       int *remote_errno)
11650 {
11651   struct remote_state *rs = get_remote_state ();
11652   char *p = rs->buf;
11653   int left = get_remote_packet_size () - 1;
11654
11655   if (remote_hostio_set_filesystem (inf, remote_errno) != 0)
11656     return -1;
11657
11658   remote_buffer_add_string (&p, &left, "vFile:unlink:");
11659
11660   remote_buffer_add_bytes (&p, &left, (const gdb_byte *) filename,
11661                            strlen (filename));
11662
11663   return remote_hostio_send_command (p - rs->buf, PACKET_vFile_unlink,
11664                                      remote_errno, NULL, NULL);
11665 }
11666
11667 /* Implementation of to_fileio_readlink.  */
11668
11669 static char *
11670 remote_hostio_readlink (struct target_ops *self,
11671                         struct inferior *inf, const char *filename,
11672                         int *remote_errno)
11673 {
11674   struct remote_state *rs = get_remote_state ();
11675   char *p = rs->buf;
11676   char *attachment;
11677   int left = get_remote_packet_size ();
11678   int len, attachment_len;
11679   int read_len;
11680   char *ret;
11681
11682   if (remote_hostio_set_filesystem (inf, remote_errno) != 0)
11683     return NULL;
11684
11685   remote_buffer_add_string (&p, &left, "vFile:readlink:");
11686
11687   remote_buffer_add_bytes (&p, &left, (const gdb_byte *) filename,
11688                            strlen (filename));
11689
11690   len = remote_hostio_send_command (p - rs->buf, PACKET_vFile_readlink,
11691                                     remote_errno, &attachment,
11692                                     &attachment_len);
11693
11694   if (len < 0)
11695     return NULL;
11696
11697   ret = (char *) xmalloc (len + 1);
11698
11699   read_len = remote_unescape_input ((gdb_byte *) attachment, attachment_len,
11700                                     (gdb_byte *) ret, len);
11701   if (read_len != len)
11702     error (_("Readlink returned %d, but %d bytes."), len, read_len);
11703
11704   ret[len] = '\0';
11705   return ret;
11706 }
11707
11708 /* Implementation of to_fileio_fstat.  */
11709
11710 static int
11711 remote_hostio_fstat (struct target_ops *self,
11712                      int fd, struct stat *st,
11713                      int *remote_errno)
11714 {
11715   struct remote_state *rs = get_remote_state ();
11716   char *p = rs->buf;
11717   int left = get_remote_packet_size ();
11718   int attachment_len, ret;
11719   char *attachment;
11720   struct fio_stat fst;
11721   int read_len;
11722
11723   remote_buffer_add_string (&p, &left, "vFile:fstat:");
11724
11725   remote_buffer_add_int (&p, &left, fd);
11726
11727   ret = remote_hostio_send_command (p - rs->buf, PACKET_vFile_fstat,
11728                                     remote_errno, &attachment,
11729                                     &attachment_len);
11730   if (ret < 0)
11731     {
11732       if (*remote_errno != FILEIO_ENOSYS)
11733         return ret;
11734
11735       /* Strictly we should return -1, ENOSYS here, but when
11736          "set sysroot remote:" was implemented in August 2008
11737          BFD's need for a stat function was sidestepped with
11738          this hack.  This was not remedied until March 2015
11739          so we retain the previous behavior to avoid breaking
11740          compatibility.
11741
11742          Note that the memset is a March 2015 addition; older
11743          GDBs set st_size *and nothing else* so the structure
11744          would have garbage in all other fields.  This might
11745          break something but retaining the previous behavior
11746          here would be just too wrong.  */
11747
11748       memset (st, 0, sizeof (struct stat));
11749       st->st_size = INT_MAX;
11750       return 0;
11751     }
11752
11753   read_len = remote_unescape_input ((gdb_byte *) attachment, attachment_len,
11754                                     (gdb_byte *) &fst, sizeof (fst));
11755
11756   if (read_len != ret)
11757     error (_("vFile:fstat returned %d, but %d bytes."), ret, read_len);
11758
11759   if (read_len != sizeof (fst))
11760     error (_("vFile:fstat returned %d bytes, but expecting %d."),
11761            read_len, (int) sizeof (fst));
11762
11763   remote_fileio_to_host_stat (&fst, st);
11764
11765   return 0;
11766 }
11767
11768 /* Implementation of to_filesystem_is_local.  */
11769
11770 static int
11771 remote_filesystem_is_local (struct target_ops *self)
11772 {
11773   /* Valgrind GDB presents itself as a remote target but works
11774      on the local filesystem: it does not implement remote get
11775      and users are not expected to set a sysroot.  To handle
11776      this case we treat the remote filesystem as local if the
11777      sysroot is exactly TARGET_SYSROOT_PREFIX and if the stub
11778      does not support vFile:open.  */
11779   if (strcmp (gdb_sysroot, TARGET_SYSROOT_PREFIX) == 0)
11780     {
11781       enum packet_support ps = packet_support (PACKET_vFile_open);
11782
11783       if (ps == PACKET_SUPPORT_UNKNOWN)
11784         {
11785           int fd, remote_errno;
11786
11787           /* Try opening a file to probe support.  The supplied
11788              filename is irrelevant, we only care about whether
11789              the stub recognizes the packet or not.  */
11790           fd = remote_hostio_open (self, NULL, "just probing",
11791                                    FILEIO_O_RDONLY, 0700, 0,
11792                                    &remote_errno);
11793
11794           if (fd >= 0)
11795             remote_hostio_close (self, fd, &remote_errno);
11796
11797           ps = packet_support (PACKET_vFile_open);
11798         }
11799
11800       if (ps == PACKET_DISABLE)
11801         {
11802           static int warning_issued = 0;
11803
11804           if (!warning_issued)
11805             {
11806               warning (_("remote target does not support file"
11807                          " transfer, attempting to access files"
11808                          " from local filesystem."));
11809               warning_issued = 1;
11810             }
11811
11812           return 1;
11813         }
11814     }
11815
11816   return 0;
11817 }
11818
11819 static int
11820 remote_fileio_errno_to_host (int errnum)
11821 {
11822   switch (errnum)
11823     {
11824       case FILEIO_EPERM:
11825         return EPERM;
11826       case FILEIO_ENOENT:
11827         return ENOENT;
11828       case FILEIO_EINTR:
11829         return EINTR;
11830       case FILEIO_EIO:
11831         return EIO;
11832       case FILEIO_EBADF:
11833         return EBADF;
11834       case FILEIO_EACCES:
11835         return EACCES;
11836       case FILEIO_EFAULT:
11837         return EFAULT;
11838       case FILEIO_EBUSY:
11839         return EBUSY;
11840       case FILEIO_EEXIST:
11841         return EEXIST;
11842       case FILEIO_ENODEV:
11843         return ENODEV;
11844       case FILEIO_ENOTDIR:
11845         return ENOTDIR;
11846       case FILEIO_EISDIR:
11847         return EISDIR;
11848       case FILEIO_EINVAL:
11849         return EINVAL;
11850       case FILEIO_ENFILE:
11851         return ENFILE;
11852       case FILEIO_EMFILE:
11853         return EMFILE;
11854       case FILEIO_EFBIG:
11855         return EFBIG;
11856       case FILEIO_ENOSPC:
11857         return ENOSPC;
11858       case FILEIO_ESPIPE:
11859         return ESPIPE;
11860       case FILEIO_EROFS:
11861         return EROFS;
11862       case FILEIO_ENOSYS:
11863         return ENOSYS;
11864       case FILEIO_ENAMETOOLONG:
11865         return ENAMETOOLONG;
11866     }
11867   return -1;
11868 }
11869
11870 static char *
11871 remote_hostio_error (int errnum)
11872 {
11873   int host_error = remote_fileio_errno_to_host (errnum);
11874
11875   if (host_error == -1)
11876     error (_("Unknown remote I/O error %d"), errnum);
11877   else
11878     error (_("Remote I/O error: %s"), safe_strerror (host_error));
11879 }
11880
11881 static void
11882 remote_hostio_close_cleanup (void *opaque)
11883 {
11884   int fd = *(int *) opaque;
11885   int remote_errno;
11886
11887   remote_hostio_close (find_target_at (process_stratum), fd, &remote_errno);
11888 }
11889
11890 void
11891 remote_file_put (const char *local_file, const char *remote_file, int from_tty)
11892 {
11893   struct cleanup *back_to, *close_cleanup;
11894   int retcode, fd, remote_errno, bytes, io_size;
11895   FILE *file;
11896   gdb_byte *buffer;
11897   int bytes_in_buffer;
11898   int saw_eof;
11899   ULONGEST offset;
11900   struct remote_state *rs = get_remote_state ();
11901
11902   if (!rs->remote_desc)
11903     error (_("command can only be used with remote target"));
11904
11905   file = gdb_fopen_cloexec (local_file, "rb");
11906   if (file == NULL)
11907     perror_with_name (local_file);
11908   back_to = make_cleanup_fclose (file);
11909
11910   fd = remote_hostio_open (find_target_at (process_stratum), NULL,
11911                            remote_file, (FILEIO_O_WRONLY | FILEIO_O_CREAT
11912                                          | FILEIO_O_TRUNC),
11913                            0700, 0, &remote_errno);
11914   if (fd == -1)
11915     remote_hostio_error (remote_errno);
11916
11917   /* Send up to this many bytes at once.  They won't all fit in the
11918      remote packet limit, so we'll transfer slightly fewer.  */
11919   io_size = get_remote_packet_size ();
11920   buffer = (gdb_byte *) xmalloc (io_size);
11921   make_cleanup (xfree, buffer);
11922
11923   close_cleanup = make_cleanup (remote_hostio_close_cleanup, &fd);
11924
11925   bytes_in_buffer = 0;
11926   saw_eof = 0;
11927   offset = 0;
11928   while (bytes_in_buffer || !saw_eof)
11929     {
11930       if (!saw_eof)
11931         {
11932           bytes = fread (buffer + bytes_in_buffer, 1,
11933                          io_size - bytes_in_buffer,
11934                          file);
11935           if (bytes == 0)
11936             {
11937               if (ferror (file))
11938                 error (_("Error reading %s."), local_file);
11939               else
11940                 {
11941                   /* EOF.  Unless there is something still in the
11942                      buffer from the last iteration, we are done.  */
11943                   saw_eof = 1;
11944                   if (bytes_in_buffer == 0)
11945                     break;
11946                 }
11947             }
11948         }
11949       else
11950         bytes = 0;
11951
11952       bytes += bytes_in_buffer;
11953       bytes_in_buffer = 0;
11954
11955       retcode = remote_hostio_pwrite (find_target_at (process_stratum),
11956                                       fd, buffer, bytes,
11957                                       offset, &remote_errno);
11958
11959       if (retcode < 0)
11960         remote_hostio_error (remote_errno);
11961       else if (retcode == 0)
11962         error (_("Remote write of %d bytes returned 0!"), bytes);
11963       else if (retcode < bytes)
11964         {
11965           /* Short write.  Save the rest of the read data for the next
11966              write.  */
11967           bytes_in_buffer = bytes - retcode;
11968           memmove (buffer, buffer + retcode, bytes_in_buffer);
11969         }
11970
11971       offset += retcode;
11972     }
11973
11974   discard_cleanups (close_cleanup);
11975   if (remote_hostio_close (find_target_at (process_stratum), fd, &remote_errno))
11976     remote_hostio_error (remote_errno);
11977
11978   if (from_tty)
11979     printf_filtered (_("Successfully sent file \"%s\".\n"), local_file);
11980   do_cleanups (back_to);
11981 }
11982
11983 void
11984 remote_file_get (const char *remote_file, const char *local_file, int from_tty)
11985 {
11986   struct cleanup *back_to, *close_cleanup;
11987   int fd, remote_errno, bytes, io_size;
11988   FILE *file;
11989   gdb_byte *buffer;
11990   ULONGEST offset;
11991   struct remote_state *rs = get_remote_state ();
11992
11993   if (!rs->remote_desc)
11994     error (_("command can only be used with remote target"));
11995
11996   fd = remote_hostio_open (find_target_at (process_stratum), NULL,
11997                            remote_file, FILEIO_O_RDONLY, 0, 0,
11998                            &remote_errno);
11999   if (fd == -1)
12000     remote_hostio_error (remote_errno);
12001
12002   file = gdb_fopen_cloexec (local_file, "wb");
12003   if (file == NULL)
12004     perror_with_name (local_file);
12005   back_to = make_cleanup_fclose (file);
12006
12007   /* Send up to this many bytes at once.  They won't all fit in the
12008      remote packet limit, so we'll transfer slightly fewer.  */
12009   io_size = get_remote_packet_size ();
12010   buffer = (gdb_byte *) xmalloc (io_size);
12011   make_cleanup (xfree, buffer);
12012
12013   close_cleanup = make_cleanup (remote_hostio_close_cleanup, &fd);
12014
12015   offset = 0;
12016   while (1)
12017     {
12018       bytes = remote_hostio_pread (find_target_at (process_stratum),
12019                                    fd, buffer, io_size, offset, &remote_errno);
12020       if (bytes == 0)
12021         /* Success, but no bytes, means end-of-file.  */
12022         break;
12023       if (bytes == -1)
12024         remote_hostio_error (remote_errno);
12025
12026       offset += bytes;
12027
12028       bytes = fwrite (buffer, 1, bytes, file);
12029       if (bytes == 0)
12030         perror_with_name (local_file);
12031     }
12032
12033   discard_cleanups (close_cleanup);
12034   if (remote_hostio_close (find_target_at (process_stratum), fd, &remote_errno))
12035     remote_hostio_error (remote_errno);
12036
12037   if (from_tty)
12038     printf_filtered (_("Successfully fetched file \"%s\".\n"), remote_file);
12039   do_cleanups (back_to);
12040 }
12041
12042 void
12043 remote_file_delete (const char *remote_file, int from_tty)
12044 {
12045   int retcode, remote_errno;
12046   struct remote_state *rs = get_remote_state ();
12047
12048   if (!rs->remote_desc)
12049     error (_("command can only be used with remote target"));
12050
12051   retcode = remote_hostio_unlink (find_target_at (process_stratum),
12052                                   NULL, remote_file, &remote_errno);
12053   if (retcode == -1)
12054     remote_hostio_error (remote_errno);
12055
12056   if (from_tty)
12057     printf_filtered (_("Successfully deleted file \"%s\".\n"), remote_file);
12058 }
12059
12060 static void
12061 remote_put_command (char *args, int from_tty)
12062 {
12063   struct cleanup *back_to;
12064   char **argv;
12065
12066   if (args == NULL)
12067     error_no_arg (_("file to put"));
12068
12069   argv = gdb_buildargv (args);
12070   back_to = make_cleanup_freeargv (argv);
12071   if (argv[0] == NULL || argv[1] == NULL || argv[2] != NULL)
12072     error (_("Invalid parameters to remote put"));
12073
12074   remote_file_put (argv[0], argv[1], from_tty);
12075
12076   do_cleanups (back_to);
12077 }
12078
12079 static void
12080 remote_get_command (char *args, int from_tty)
12081 {
12082   struct cleanup *back_to;
12083   char **argv;
12084
12085   if (args == NULL)
12086     error_no_arg (_("file to get"));
12087
12088   argv = gdb_buildargv (args);
12089   back_to = make_cleanup_freeargv (argv);
12090   if (argv[0] == NULL || argv[1] == NULL || argv[2] != NULL)
12091     error (_("Invalid parameters to remote get"));
12092
12093   remote_file_get (argv[0], argv[1], from_tty);
12094
12095   do_cleanups (back_to);
12096 }
12097
12098 static void
12099 remote_delete_command (char *args, int from_tty)
12100 {
12101   struct cleanup *back_to;
12102   char **argv;
12103
12104   if (args == NULL)
12105     error_no_arg (_("file to delete"));
12106
12107   argv = gdb_buildargv (args);
12108   back_to = make_cleanup_freeargv (argv);
12109   if (argv[0] == NULL || argv[1] != NULL)
12110     error (_("Invalid parameters to remote delete"));
12111
12112   remote_file_delete (argv[0], from_tty);
12113
12114   do_cleanups (back_to);
12115 }
12116
12117 static void
12118 remote_command (char *args, int from_tty)
12119 {
12120   help_list (remote_cmdlist, "remote ", all_commands, gdb_stdout);
12121 }
12122
12123 static int
12124 remote_can_execute_reverse (struct target_ops *self)
12125 {
12126   if (packet_support (PACKET_bs) == PACKET_ENABLE
12127       || packet_support (PACKET_bc) == PACKET_ENABLE)
12128     return 1;
12129   else
12130     return 0;
12131 }
12132
12133 static int
12134 remote_supports_non_stop (struct target_ops *self)
12135 {
12136   return 1;
12137 }
12138
12139 static int
12140 remote_supports_disable_randomization (struct target_ops *self)
12141 {
12142   /* Only supported in extended mode.  */
12143   return 0;
12144 }
12145
12146 static int
12147 remote_supports_multi_process (struct target_ops *self)
12148 {
12149   struct remote_state *rs = get_remote_state ();
12150
12151   return remote_multi_process_p (rs);
12152 }
12153
12154 static int
12155 remote_supports_cond_tracepoints (void)
12156 {
12157   return packet_support (PACKET_ConditionalTracepoints) == PACKET_ENABLE;
12158 }
12159
12160 static int
12161 remote_supports_cond_breakpoints (struct target_ops *self)
12162 {
12163   return packet_support (PACKET_ConditionalBreakpoints) == PACKET_ENABLE;
12164 }
12165
12166 static int
12167 remote_supports_fast_tracepoints (void)
12168 {
12169   return packet_support (PACKET_FastTracepoints) == PACKET_ENABLE;
12170 }
12171
12172 static int
12173 remote_supports_static_tracepoints (void)
12174 {
12175   return packet_support (PACKET_StaticTracepoints) == PACKET_ENABLE;
12176 }
12177
12178 static int
12179 remote_supports_install_in_trace (void)
12180 {
12181   return packet_support (PACKET_InstallInTrace) == PACKET_ENABLE;
12182 }
12183
12184 static int
12185 remote_supports_enable_disable_tracepoint (struct target_ops *self)
12186 {
12187   return (packet_support (PACKET_EnableDisableTracepoints_feature)
12188           == PACKET_ENABLE);
12189 }
12190
12191 static int
12192 remote_supports_string_tracing (struct target_ops *self)
12193 {
12194   return packet_support (PACKET_tracenz_feature) == PACKET_ENABLE;
12195 }
12196
12197 static int
12198 remote_can_run_breakpoint_commands (struct target_ops *self)
12199 {
12200   return packet_support (PACKET_BreakpointCommands) == PACKET_ENABLE;
12201 }
12202
12203 static void
12204 remote_trace_init (struct target_ops *self)
12205 {
12206   putpkt ("QTinit");
12207   remote_get_noisy_reply (&target_buf, &target_buf_size);
12208   if (strcmp (target_buf, "OK") != 0)
12209     error (_("Target does not support this command."));
12210 }
12211
12212 static void free_actions_list (char **actions_list);
12213 static void free_actions_list_cleanup_wrapper (void *);
12214 static void
12215 free_actions_list_cleanup_wrapper (void *al)
12216 {
12217   free_actions_list ((char **) al);
12218 }
12219
12220 static void
12221 free_actions_list (char **actions_list)
12222 {
12223   int ndx;
12224
12225   if (actions_list == 0)
12226     return;
12227
12228   for (ndx = 0; actions_list[ndx]; ndx++)
12229     xfree (actions_list[ndx]);
12230
12231   xfree (actions_list);
12232 }
12233
12234 /* Recursive routine to walk through command list including loops, and
12235    download packets for each command.  */
12236
12237 static void
12238 remote_download_command_source (int num, ULONGEST addr,
12239                                 struct command_line *cmds)
12240 {
12241   struct remote_state *rs = get_remote_state ();
12242   struct command_line *cmd;
12243
12244   for (cmd = cmds; cmd; cmd = cmd->next)
12245     {
12246       QUIT;     /* Allow user to bail out with ^C.  */
12247       strcpy (rs->buf, "QTDPsrc:");
12248       encode_source_string (num, addr, "cmd", cmd->line,
12249                             rs->buf + strlen (rs->buf),
12250                             rs->buf_size - strlen (rs->buf));
12251       putpkt (rs->buf);
12252       remote_get_noisy_reply (&target_buf, &target_buf_size);
12253       if (strcmp (target_buf, "OK"))
12254         warning (_("Target does not support source download."));
12255
12256       if (cmd->control_type == while_control
12257           || cmd->control_type == while_stepping_control)
12258         {
12259           remote_download_command_source (num, addr, *cmd->body_list);
12260
12261           QUIT; /* Allow user to bail out with ^C.  */
12262           strcpy (rs->buf, "QTDPsrc:");
12263           encode_source_string (num, addr, "cmd", "end",
12264                                 rs->buf + strlen (rs->buf),
12265                                 rs->buf_size - strlen (rs->buf));
12266           putpkt (rs->buf);
12267           remote_get_noisy_reply (&target_buf, &target_buf_size);
12268           if (strcmp (target_buf, "OK"))
12269             warning (_("Target does not support source download."));
12270         }
12271     }
12272 }
12273
12274 static void
12275 remote_download_tracepoint (struct target_ops *self, struct bp_location *loc)
12276 {
12277 #define BUF_SIZE 2048
12278
12279   CORE_ADDR tpaddr;
12280   char addrbuf[40];
12281   char buf[BUF_SIZE];
12282   char **tdp_actions;
12283   char **stepping_actions;
12284   int ndx;
12285   struct cleanup *old_chain = NULL;
12286   char *pkt;
12287   struct breakpoint *b = loc->owner;
12288   struct tracepoint *t = (struct tracepoint *) b;
12289
12290   encode_actions_rsp (loc, &tdp_actions, &stepping_actions);
12291   old_chain = make_cleanup (free_actions_list_cleanup_wrapper,
12292                             tdp_actions);
12293   (void) make_cleanup (free_actions_list_cleanup_wrapper,
12294                        stepping_actions);
12295
12296   tpaddr = loc->address;
12297   sprintf_vma (addrbuf, tpaddr);
12298   xsnprintf (buf, BUF_SIZE, "QTDP:%x:%s:%c:%lx:%x", b->number,
12299              addrbuf, /* address */
12300              (b->enable_state == bp_enabled ? 'E' : 'D'),
12301              t->step_count, t->pass_count);
12302   /* Fast tracepoints are mostly handled by the target, but we can
12303      tell the target how big of an instruction block should be moved
12304      around.  */
12305   if (b->type == bp_fast_tracepoint)
12306     {
12307       /* Only test for support at download time; we may not know
12308          target capabilities at definition time.  */
12309       if (remote_supports_fast_tracepoints ())
12310         {
12311           if (gdbarch_fast_tracepoint_valid_at (loc->gdbarch, tpaddr,
12312                                                 NULL))
12313             xsnprintf (buf + strlen (buf), BUF_SIZE - strlen (buf), ":F%x",
12314                        gdb_insn_length (loc->gdbarch, tpaddr));
12315           else
12316             /* If it passed validation at definition but fails now,
12317                something is very wrong.  */
12318             internal_error (__FILE__, __LINE__,
12319                             _("Fast tracepoint not "
12320                               "valid during download"));
12321         }
12322       else
12323         /* Fast tracepoints are functionally identical to regular
12324            tracepoints, so don't take lack of support as a reason to
12325            give up on the trace run.  */
12326         warning (_("Target does not support fast tracepoints, "
12327                    "downloading %d as regular tracepoint"), b->number);
12328     }
12329   else if (b->type == bp_static_tracepoint)
12330     {
12331       /* Only test for support at download time; we may not know
12332          target capabilities at definition time.  */
12333       if (remote_supports_static_tracepoints ())
12334         {
12335           struct static_tracepoint_marker marker;
12336
12337           if (target_static_tracepoint_marker_at (tpaddr, &marker))
12338             strcat (buf, ":S");
12339           else
12340             error (_("Static tracepoint not valid during download"));
12341         }
12342       else
12343         /* Fast tracepoints are functionally identical to regular
12344            tracepoints, so don't take lack of support as a reason
12345            to give up on the trace run.  */
12346         error (_("Target does not support static tracepoints"));
12347     }
12348   /* If the tracepoint has a conditional, make it into an agent
12349      expression and append to the definition.  */
12350   if (loc->cond)
12351     {
12352       /* Only test support at download time, we may not know target
12353          capabilities at definition time.  */
12354       if (remote_supports_cond_tracepoints ())
12355         {
12356           agent_expr_up aexpr = gen_eval_for_expr (tpaddr, loc->cond.get ());
12357           xsnprintf (buf + strlen (buf), BUF_SIZE - strlen (buf), ":X%x,",
12358                      aexpr->len);
12359           pkt = buf + strlen (buf);
12360           for (ndx = 0; ndx < aexpr->len; ++ndx)
12361             pkt = pack_hex_byte (pkt, aexpr->buf[ndx]);
12362           *pkt = '\0';
12363         }
12364       else
12365         warning (_("Target does not support conditional tracepoints, "
12366                    "ignoring tp %d cond"), b->number);
12367     }
12368
12369   if (b->commands || *default_collect)
12370     strcat (buf, "-");
12371   putpkt (buf);
12372   remote_get_noisy_reply (&target_buf, &target_buf_size);
12373   if (strcmp (target_buf, "OK"))
12374     error (_("Target does not support tracepoints."));
12375
12376   /* do_single_steps (t); */
12377   if (tdp_actions)
12378     {
12379       for (ndx = 0; tdp_actions[ndx]; ndx++)
12380         {
12381           QUIT; /* Allow user to bail out with ^C.  */
12382           xsnprintf (buf, BUF_SIZE, "QTDP:-%x:%s:%s%c",
12383                      b->number, addrbuf, /* address */
12384                      tdp_actions[ndx],
12385                      ((tdp_actions[ndx + 1] || stepping_actions)
12386                       ? '-' : 0));
12387           putpkt (buf);
12388           remote_get_noisy_reply (&target_buf,
12389                                   &target_buf_size);
12390           if (strcmp (target_buf, "OK"))
12391             error (_("Error on target while setting tracepoints."));
12392         }
12393     }
12394   if (stepping_actions)
12395     {
12396       for (ndx = 0; stepping_actions[ndx]; ndx++)
12397         {
12398           QUIT; /* Allow user to bail out with ^C.  */
12399           xsnprintf (buf, BUF_SIZE, "QTDP:-%x:%s:%s%s%s",
12400                      b->number, addrbuf, /* address */
12401                      ((ndx == 0) ? "S" : ""),
12402                      stepping_actions[ndx],
12403                      (stepping_actions[ndx + 1] ? "-" : ""));
12404           putpkt (buf);
12405           remote_get_noisy_reply (&target_buf,
12406                                   &target_buf_size);
12407           if (strcmp (target_buf, "OK"))
12408             error (_("Error on target while setting tracepoints."));
12409         }
12410     }
12411
12412   if (packet_support (PACKET_TracepointSource) == PACKET_ENABLE)
12413     {
12414       if (b->location != NULL)
12415         {
12416           strcpy (buf, "QTDPsrc:");
12417           encode_source_string (b->number, loc->address, "at",
12418                                 event_location_to_string (b->location),
12419                                 buf + strlen (buf), 2048 - strlen (buf));
12420           putpkt (buf);
12421           remote_get_noisy_reply (&target_buf, &target_buf_size);
12422           if (strcmp (target_buf, "OK"))
12423             warning (_("Target does not support source download."));
12424         }
12425       if (b->cond_string)
12426         {
12427           strcpy (buf, "QTDPsrc:");
12428           encode_source_string (b->number, loc->address,
12429                                 "cond", b->cond_string, buf + strlen (buf),
12430                                 2048 - strlen (buf));
12431           putpkt (buf);
12432           remote_get_noisy_reply (&target_buf, &target_buf_size);
12433           if (strcmp (target_buf, "OK"))
12434             warning (_("Target does not support source download."));
12435         }
12436       remote_download_command_source (b->number, loc->address,
12437                                       breakpoint_commands (b));
12438     }
12439
12440   do_cleanups (old_chain);
12441 }
12442
12443 static int
12444 remote_can_download_tracepoint (struct target_ops *self)
12445 {
12446   struct remote_state *rs = get_remote_state ();
12447   struct trace_status *ts;
12448   int status;
12449
12450   /* Don't try to install tracepoints until we've relocated our
12451      symbols, and fetched and merged the target's tracepoint list with
12452      ours.  */
12453   if (rs->starting_up)
12454     return 0;
12455
12456   ts = current_trace_status ();
12457   status = remote_get_trace_status (self, ts);
12458
12459   if (status == -1 || !ts->running_known || !ts->running)
12460     return 0;
12461
12462   /* If we are in a tracing experiment, but remote stub doesn't support
12463      installing tracepoint in trace, we have to return.  */
12464   if (!remote_supports_install_in_trace ())
12465     return 0;
12466
12467   return 1;
12468 }
12469
12470
12471 static void
12472 remote_download_trace_state_variable (struct target_ops *self,
12473                                       struct trace_state_variable *tsv)
12474 {
12475   struct remote_state *rs = get_remote_state ();
12476   char *p;
12477
12478   xsnprintf (rs->buf, get_remote_packet_size (), "QTDV:%x:%s:%x:",
12479              tsv->number, phex ((ULONGEST) tsv->initial_value, 8),
12480              tsv->builtin);
12481   p = rs->buf + strlen (rs->buf);
12482   if ((p - rs->buf) + strlen (tsv->name) * 2 >= get_remote_packet_size ())
12483     error (_("Trace state variable name too long for tsv definition packet"));
12484   p += 2 * bin2hex ((gdb_byte *) (tsv->name), p, strlen (tsv->name));
12485   *p++ = '\0';
12486   putpkt (rs->buf);
12487   remote_get_noisy_reply (&target_buf, &target_buf_size);
12488   if (*target_buf == '\0')
12489     error (_("Target does not support this command."));
12490   if (strcmp (target_buf, "OK") != 0)
12491     error (_("Error on target while downloading trace state variable."));
12492 }
12493
12494 static void
12495 remote_enable_tracepoint (struct target_ops *self,
12496                           struct bp_location *location)
12497 {
12498   struct remote_state *rs = get_remote_state ();
12499   char addr_buf[40];
12500
12501   sprintf_vma (addr_buf, location->address);
12502   xsnprintf (rs->buf, get_remote_packet_size (), "QTEnable:%x:%s",
12503              location->owner->number, addr_buf);
12504   putpkt (rs->buf);
12505   remote_get_noisy_reply (&rs->buf, &rs->buf_size);
12506   if (*rs->buf == '\0')
12507     error (_("Target does not support enabling tracepoints while a trace run is ongoing."));
12508   if (strcmp (rs->buf, "OK") != 0)
12509     error (_("Error on target while enabling tracepoint."));
12510 }
12511
12512 static void
12513 remote_disable_tracepoint (struct target_ops *self,
12514                            struct bp_location *location)
12515 {
12516   struct remote_state *rs = get_remote_state ();
12517   char addr_buf[40];
12518
12519   sprintf_vma (addr_buf, location->address);
12520   xsnprintf (rs->buf, get_remote_packet_size (), "QTDisable:%x:%s",
12521              location->owner->number, addr_buf);
12522   putpkt (rs->buf);
12523   remote_get_noisy_reply (&rs->buf, &rs->buf_size);
12524   if (*rs->buf == '\0')
12525     error (_("Target does not support disabling tracepoints while a trace run is ongoing."));
12526   if (strcmp (rs->buf, "OK") != 0)
12527     error (_("Error on target while disabling tracepoint."));
12528 }
12529
12530 static void
12531 remote_trace_set_readonly_regions (struct target_ops *self)
12532 {
12533   asection *s;
12534   bfd *abfd = NULL;
12535   bfd_size_type size;
12536   bfd_vma vma;
12537   int anysecs = 0;
12538   int offset = 0;
12539
12540   if (!exec_bfd)
12541     return;                     /* No information to give.  */
12542
12543   strcpy (target_buf, "QTro");
12544   offset = strlen (target_buf);
12545   for (s = exec_bfd->sections; s; s = s->next)
12546     {
12547       char tmp1[40], tmp2[40];
12548       int sec_length;
12549
12550       if ((s->flags & SEC_LOAD) == 0 ||
12551       /*  (s->flags & SEC_CODE) == 0 || */
12552           (s->flags & SEC_READONLY) == 0)
12553         continue;
12554
12555       anysecs = 1;
12556       vma = bfd_get_section_vma (abfd, s);
12557       size = bfd_get_section_size (s);
12558       sprintf_vma (tmp1, vma);
12559       sprintf_vma (tmp2, vma + size);
12560       sec_length = 1 + strlen (tmp1) + 1 + strlen (tmp2);
12561       if (offset + sec_length + 1 > target_buf_size)
12562         {
12563           if (packet_support (PACKET_qXfer_traceframe_info) != PACKET_ENABLE)
12564             warning (_("\
12565 Too many sections for read-only sections definition packet."));
12566           break;
12567         }
12568       xsnprintf (target_buf + offset, target_buf_size - offset, ":%s,%s",
12569                  tmp1, tmp2);
12570       offset += sec_length;
12571     }
12572   if (anysecs)
12573     {
12574       putpkt (target_buf);
12575       getpkt (&target_buf, &target_buf_size, 0);
12576     }
12577 }
12578
12579 static void
12580 remote_trace_start (struct target_ops *self)
12581 {
12582   putpkt ("QTStart");
12583   remote_get_noisy_reply (&target_buf, &target_buf_size);
12584   if (*target_buf == '\0')
12585     error (_("Target does not support this command."));
12586   if (strcmp (target_buf, "OK") != 0)
12587     error (_("Bogus reply from target: %s"), target_buf);
12588 }
12589
12590 static int
12591 remote_get_trace_status (struct target_ops *self, struct trace_status *ts)
12592 {
12593   /* Initialize it just to avoid a GCC false warning.  */
12594   char *p = NULL;
12595   /* FIXME we need to get register block size some other way.  */
12596   extern int trace_regblock_size;
12597   enum packet_result result;
12598
12599   if (packet_support (PACKET_qTStatus) == PACKET_DISABLE)
12600     return -1;
12601
12602   trace_regblock_size = get_remote_arch_state ()->sizeof_g_packet;
12603
12604   putpkt ("qTStatus");
12605
12606   TRY
12607     {
12608       p = remote_get_noisy_reply (&target_buf, &target_buf_size);
12609     }
12610   CATCH (ex, RETURN_MASK_ERROR)
12611     {
12612       if (ex.error != TARGET_CLOSE_ERROR)
12613         {
12614           exception_fprintf (gdb_stderr, ex, "qTStatus: ");
12615           return -1;
12616         }
12617       throw_exception (ex);
12618     }
12619   END_CATCH
12620
12621   result = packet_ok (p, &remote_protocol_packets[PACKET_qTStatus]);
12622
12623   /* If the remote target doesn't do tracing, flag it.  */
12624   if (result == PACKET_UNKNOWN)
12625     return -1;
12626
12627   /* We're working with a live target.  */
12628   ts->filename = NULL;
12629
12630   if (*p++ != 'T')
12631     error (_("Bogus trace status reply from target: %s"), target_buf);
12632
12633   /* Function 'parse_trace_status' sets default value of each field of
12634      'ts' at first, so we don't have to do it here.  */
12635   parse_trace_status (p, ts);
12636
12637   return ts->running;
12638 }
12639
12640 static void
12641 remote_get_tracepoint_status (struct target_ops *self, struct breakpoint *bp,
12642                               struct uploaded_tp *utp)
12643 {
12644   struct remote_state *rs = get_remote_state ();
12645   char *reply;
12646   struct bp_location *loc;
12647   struct tracepoint *tp = (struct tracepoint *) bp;
12648   size_t size = get_remote_packet_size ();
12649
12650   if (tp)
12651     {
12652       tp->base.hit_count = 0;
12653       tp->traceframe_usage = 0;
12654       for (loc = tp->base.loc; loc; loc = loc->next)
12655         {
12656           /* If the tracepoint was never downloaded, don't go asking for
12657              any status.  */
12658           if (tp->number_on_target == 0)
12659             continue;
12660           xsnprintf (rs->buf, size, "qTP:%x:%s", tp->number_on_target,
12661                      phex_nz (loc->address, 0));
12662           putpkt (rs->buf);
12663           reply = remote_get_noisy_reply (&target_buf, &target_buf_size);
12664           if (reply && *reply)
12665             {
12666               if (*reply == 'V')
12667                 parse_tracepoint_status (reply + 1, bp, utp);
12668             }
12669         }
12670     }
12671   else if (utp)
12672     {
12673       utp->hit_count = 0;
12674       utp->traceframe_usage = 0;
12675       xsnprintf (rs->buf, size, "qTP:%x:%s", utp->number,
12676                  phex_nz (utp->addr, 0));
12677       putpkt (rs->buf);
12678       reply = remote_get_noisy_reply (&target_buf, &target_buf_size);
12679       if (reply && *reply)
12680         {
12681           if (*reply == 'V')
12682             parse_tracepoint_status (reply + 1, bp, utp);
12683         }
12684     }
12685 }
12686
12687 static void
12688 remote_trace_stop (struct target_ops *self)
12689 {
12690   putpkt ("QTStop");
12691   remote_get_noisy_reply (&target_buf, &target_buf_size);
12692   if (*target_buf == '\0')
12693     error (_("Target does not support this command."));
12694   if (strcmp (target_buf, "OK") != 0)
12695     error (_("Bogus reply from target: %s"), target_buf);
12696 }
12697
12698 static int
12699 remote_trace_find (struct target_ops *self,
12700                    enum trace_find_type type, int num,
12701                    CORE_ADDR addr1, CORE_ADDR addr2,
12702                    int *tpp)
12703 {
12704   struct remote_state *rs = get_remote_state ();
12705   char *endbuf = rs->buf + get_remote_packet_size ();
12706   char *p, *reply;
12707   int target_frameno = -1, target_tracept = -1;
12708
12709   /* Lookups other than by absolute frame number depend on the current
12710      trace selected, so make sure it is correct on the remote end
12711      first.  */
12712   if (type != tfind_number)
12713     set_remote_traceframe ();
12714
12715   p = rs->buf;
12716   strcpy (p, "QTFrame:");
12717   p = strchr (p, '\0');
12718   switch (type)
12719     {
12720     case tfind_number:
12721       xsnprintf (p, endbuf - p, "%x", num);
12722       break;
12723     case tfind_pc:
12724       xsnprintf (p, endbuf - p, "pc:%s", phex_nz (addr1, 0));
12725       break;
12726     case tfind_tp:
12727       xsnprintf (p, endbuf - p, "tdp:%x", num);
12728       break;
12729     case tfind_range:
12730       xsnprintf (p, endbuf - p, "range:%s:%s", phex_nz (addr1, 0),
12731                  phex_nz (addr2, 0));
12732       break;
12733     case tfind_outside:
12734       xsnprintf (p, endbuf - p, "outside:%s:%s", phex_nz (addr1, 0),
12735                  phex_nz (addr2, 0));
12736       break;
12737     default:
12738       error (_("Unknown trace find type %d"), type);
12739     }
12740
12741   putpkt (rs->buf);
12742   reply = remote_get_noisy_reply (&(rs->buf), &rs->buf_size);
12743   if (*reply == '\0')
12744     error (_("Target does not support this command."));
12745
12746   while (reply && *reply)
12747     switch (*reply)
12748       {
12749       case 'F':
12750         p = ++reply;
12751         target_frameno = (int) strtol (p, &reply, 16);
12752         if (reply == p)
12753           error (_("Unable to parse trace frame number"));
12754         /* Don't update our remote traceframe number cache on failure
12755            to select a remote traceframe.  */
12756         if (target_frameno == -1)
12757           return -1;
12758         break;
12759       case 'T':
12760         p = ++reply;
12761         target_tracept = (int) strtol (p, &reply, 16);
12762         if (reply == p)
12763           error (_("Unable to parse tracepoint number"));
12764         break;
12765       case 'O':         /* "OK"? */
12766         if (reply[1] == 'K' && reply[2] == '\0')
12767           reply += 2;
12768         else
12769           error (_("Bogus reply from target: %s"), reply);
12770         break;
12771       default:
12772         error (_("Bogus reply from target: %s"), reply);
12773       }
12774   if (tpp)
12775     *tpp = target_tracept;
12776
12777   rs->remote_traceframe_number = target_frameno;
12778   return target_frameno;
12779 }
12780
12781 static int
12782 remote_get_trace_state_variable_value (struct target_ops *self,
12783                                        int tsvnum, LONGEST *val)
12784 {
12785   struct remote_state *rs = get_remote_state ();
12786   char *reply;
12787   ULONGEST uval;
12788
12789   set_remote_traceframe ();
12790
12791   xsnprintf (rs->buf, get_remote_packet_size (), "qTV:%x", tsvnum);
12792   putpkt (rs->buf);
12793   reply = remote_get_noisy_reply (&target_buf, &target_buf_size);
12794   if (reply && *reply)
12795     {
12796       if (*reply == 'V')
12797         {
12798           unpack_varlen_hex (reply + 1, &uval);
12799           *val = (LONGEST) uval;
12800           return 1;
12801         }
12802     }
12803   return 0;
12804 }
12805
12806 static int
12807 remote_save_trace_data (struct target_ops *self, const char *filename)
12808 {
12809   struct remote_state *rs = get_remote_state ();
12810   char *p, *reply;
12811
12812   p = rs->buf;
12813   strcpy (p, "QTSave:");
12814   p += strlen (p);
12815   if ((p - rs->buf) + strlen (filename) * 2 >= get_remote_packet_size ())
12816     error (_("Remote file name too long for trace save packet"));
12817   p += 2 * bin2hex ((gdb_byte *) filename, p, strlen (filename));
12818   *p++ = '\0';
12819   putpkt (rs->buf);
12820   reply = remote_get_noisy_reply (&target_buf, &target_buf_size);
12821   if (*reply == '\0')
12822     error (_("Target does not support this command."));
12823   if (strcmp (reply, "OK") != 0)
12824     error (_("Bogus reply from target: %s"), reply);
12825   return 0;
12826 }
12827
12828 /* This is basically a memory transfer, but needs to be its own packet
12829    because we don't know how the target actually organizes its trace
12830    memory, plus we want to be able to ask for as much as possible, but
12831    not be unhappy if we don't get as much as we ask for.  */
12832
12833 static LONGEST
12834 remote_get_raw_trace_data (struct target_ops *self,
12835                            gdb_byte *buf, ULONGEST offset, LONGEST len)
12836 {
12837   struct remote_state *rs = get_remote_state ();
12838   char *reply;
12839   char *p;
12840   int rslt;
12841
12842   p = rs->buf;
12843   strcpy (p, "qTBuffer:");
12844   p += strlen (p);
12845   p += hexnumstr (p, offset);
12846   *p++ = ',';
12847   p += hexnumstr (p, len);
12848   *p++ = '\0';
12849
12850   putpkt (rs->buf);
12851   reply = remote_get_noisy_reply (&target_buf, &target_buf_size);
12852   if (reply && *reply)
12853     {
12854       /* 'l' by itself means we're at the end of the buffer and
12855          there is nothing more to get.  */
12856       if (*reply == 'l')
12857         return 0;
12858
12859       /* Convert the reply into binary.  Limit the number of bytes to
12860          convert according to our passed-in buffer size, rather than
12861          what was returned in the packet; if the target is
12862          unexpectedly generous and gives us a bigger reply than we
12863          asked for, we don't want to crash.  */
12864       rslt = hex2bin (target_buf, buf, len);
12865       return rslt;
12866     }
12867
12868   /* Something went wrong, flag as an error.  */
12869   return -1;
12870 }
12871
12872 static void
12873 remote_set_disconnected_tracing (struct target_ops *self, int val)
12874 {
12875   struct remote_state *rs = get_remote_state ();
12876
12877   if (packet_support (PACKET_DisconnectedTracing_feature) == PACKET_ENABLE)
12878     {
12879       char *reply;
12880
12881       xsnprintf (rs->buf, get_remote_packet_size (), "QTDisconnected:%x", val);
12882       putpkt (rs->buf);
12883       reply = remote_get_noisy_reply (&target_buf, &target_buf_size);
12884       if (*reply == '\0')
12885         error (_("Target does not support this command."));
12886       if (strcmp (reply, "OK") != 0)
12887         error (_("Bogus reply from target: %s"), reply);
12888     }
12889   else if (val)
12890     warning (_("Target does not support disconnected tracing."));
12891 }
12892
12893 static int
12894 remote_core_of_thread (struct target_ops *ops, ptid_t ptid)
12895 {
12896   struct thread_info *info = find_thread_ptid (ptid);
12897
12898   if (info && info->priv)
12899     return info->priv->core;
12900   return -1;
12901 }
12902
12903 static void
12904 remote_set_circular_trace_buffer (struct target_ops *self, int val)
12905 {
12906   struct remote_state *rs = get_remote_state ();
12907   char *reply;
12908
12909   xsnprintf (rs->buf, get_remote_packet_size (), "QTBuffer:circular:%x", val);
12910   putpkt (rs->buf);
12911   reply = remote_get_noisy_reply (&target_buf, &target_buf_size);
12912   if (*reply == '\0')
12913     error (_("Target does not support this command."));
12914   if (strcmp (reply, "OK") != 0)
12915     error (_("Bogus reply from target: %s"), reply);
12916 }
12917
12918 static struct traceframe_info *
12919 remote_traceframe_info (struct target_ops *self)
12920 {
12921   char *text;
12922
12923   text = target_read_stralloc (&current_target,
12924                                TARGET_OBJECT_TRACEFRAME_INFO, NULL);
12925   if (text != NULL)
12926     {
12927       struct traceframe_info *info;
12928       struct cleanup *back_to = make_cleanup (xfree, text);
12929
12930       info = parse_traceframe_info (text);
12931       do_cleanups (back_to);
12932       return info;
12933     }
12934
12935   return NULL;
12936 }
12937
12938 /* Handle the qTMinFTPILen packet.  Returns the minimum length of
12939    instruction on which a fast tracepoint may be placed.  Returns -1
12940    if the packet is not supported, and 0 if the minimum instruction
12941    length is unknown.  */
12942
12943 static int
12944 remote_get_min_fast_tracepoint_insn_len (struct target_ops *self)
12945 {
12946   struct remote_state *rs = get_remote_state ();
12947   char *reply;
12948
12949   /* If we're not debugging a process yet, the IPA can't be
12950      loaded.  */
12951   if (!target_has_execution)
12952     return 0;
12953
12954   /* Make sure the remote is pointing at the right process.  */
12955   set_general_process ();
12956
12957   xsnprintf (rs->buf, get_remote_packet_size (), "qTMinFTPILen");
12958   putpkt (rs->buf);
12959   reply = remote_get_noisy_reply (&target_buf, &target_buf_size);
12960   if (*reply == '\0')
12961     return -1;
12962   else
12963     {
12964       ULONGEST min_insn_len;
12965
12966       unpack_varlen_hex (reply, &min_insn_len);
12967
12968       return (int) min_insn_len;
12969     }
12970 }
12971
12972 static void
12973 remote_set_trace_buffer_size (struct target_ops *self, LONGEST val)
12974 {
12975   if (packet_support (PACKET_QTBuffer_size) != PACKET_DISABLE)
12976     {
12977       struct remote_state *rs = get_remote_state ();
12978       char *buf = rs->buf;
12979       char *endbuf = rs->buf + get_remote_packet_size ();
12980       enum packet_result result;
12981
12982       gdb_assert (val >= 0 || val == -1);
12983       buf += xsnprintf (buf, endbuf - buf, "QTBuffer:size:");
12984       /* Send -1 as literal "-1" to avoid host size dependency.  */
12985       if (val < 0)
12986         {
12987           *buf++ = '-';
12988           buf += hexnumstr (buf, (ULONGEST) -val);
12989         }
12990       else
12991         buf += hexnumstr (buf, (ULONGEST) val);
12992
12993       putpkt (rs->buf);
12994       remote_get_noisy_reply (&rs->buf, &rs->buf_size);
12995       result = packet_ok (rs->buf,
12996                   &remote_protocol_packets[PACKET_QTBuffer_size]);
12997
12998       if (result != PACKET_OK)
12999         warning (_("Bogus reply from target: %s"), rs->buf);
13000     }
13001 }
13002
13003 static int
13004 remote_set_trace_notes (struct target_ops *self,
13005                         const char *user, const char *notes,
13006                         const char *stop_notes)
13007 {
13008   struct remote_state *rs = get_remote_state ();
13009   char *reply;
13010   char *buf = rs->buf;
13011   char *endbuf = rs->buf + get_remote_packet_size ();
13012   int nbytes;
13013
13014   buf += xsnprintf (buf, endbuf - buf, "QTNotes:");
13015   if (user)
13016     {
13017       buf += xsnprintf (buf, endbuf - buf, "user:");
13018       nbytes = bin2hex ((gdb_byte *) user, buf, strlen (user));
13019       buf += 2 * nbytes;
13020       *buf++ = ';';
13021     }
13022   if (notes)
13023     {
13024       buf += xsnprintf (buf, endbuf - buf, "notes:");
13025       nbytes = bin2hex ((gdb_byte *) notes, buf, strlen (notes));
13026       buf += 2 * nbytes;
13027       *buf++ = ';';
13028     }
13029   if (stop_notes)
13030     {
13031       buf += xsnprintf (buf, endbuf - buf, "tstop:");
13032       nbytes = bin2hex ((gdb_byte *) stop_notes, buf, strlen (stop_notes));
13033       buf += 2 * nbytes;
13034       *buf++ = ';';
13035     }
13036   /* Ensure the buffer is terminated.  */
13037   *buf = '\0';
13038
13039   putpkt (rs->buf);
13040   reply = remote_get_noisy_reply (&target_buf, &target_buf_size);
13041   if (*reply == '\0')
13042     return 0;
13043
13044   if (strcmp (reply, "OK") != 0)
13045     error (_("Bogus reply from target: %s"), reply);
13046
13047   return 1;
13048 }
13049
13050 static int
13051 remote_use_agent (struct target_ops *self, int use)
13052 {
13053   if (packet_support (PACKET_QAgent) != PACKET_DISABLE)
13054     {
13055       struct remote_state *rs = get_remote_state ();
13056
13057       /* If the stub supports QAgent.  */
13058       xsnprintf (rs->buf, get_remote_packet_size (), "QAgent:%d", use);
13059       putpkt (rs->buf);
13060       getpkt (&rs->buf, &rs->buf_size, 0);
13061
13062       if (strcmp (rs->buf, "OK") == 0)
13063         {
13064           use_agent = use;
13065           return 1;
13066         }
13067     }
13068
13069   return 0;
13070 }
13071
13072 static int
13073 remote_can_use_agent (struct target_ops *self)
13074 {
13075   return (packet_support (PACKET_QAgent) != PACKET_DISABLE);
13076 }
13077
13078 struct btrace_target_info
13079 {
13080   /* The ptid of the traced thread.  */
13081   ptid_t ptid;
13082
13083   /* The obtained branch trace configuration.  */
13084   struct btrace_config conf;
13085 };
13086
13087 /* Reset our idea of our target's btrace configuration.  */
13088
13089 static void
13090 remote_btrace_reset (void)
13091 {
13092   struct remote_state *rs = get_remote_state ();
13093
13094   memset (&rs->btrace_config, 0, sizeof (rs->btrace_config));
13095 }
13096
13097 /* Check whether the target supports branch tracing.  */
13098
13099 static int
13100 remote_supports_btrace (struct target_ops *self, enum btrace_format format)
13101 {
13102   if (packet_support (PACKET_Qbtrace_off) != PACKET_ENABLE)
13103     return 0;
13104   if (packet_support (PACKET_qXfer_btrace) != PACKET_ENABLE)
13105     return 0;
13106
13107   switch (format)
13108     {
13109       case BTRACE_FORMAT_NONE:
13110         return 0;
13111
13112       case BTRACE_FORMAT_BTS:
13113         return (packet_support (PACKET_Qbtrace_bts) == PACKET_ENABLE);
13114
13115       case BTRACE_FORMAT_PT:
13116         /* The trace is decoded on the host.  Even if our target supports it,
13117            we still need to have libipt to decode the trace.  */
13118 #if defined (HAVE_LIBIPT)
13119         return (packet_support (PACKET_Qbtrace_pt) == PACKET_ENABLE);
13120 #else /* !defined (HAVE_LIBIPT)  */
13121         return 0;
13122 #endif /* !defined (HAVE_LIBIPT)  */
13123     }
13124
13125   internal_error (__FILE__, __LINE__, _("Unknown branch trace format"));
13126 }
13127
13128 /* Synchronize the configuration with the target.  */
13129
13130 static void
13131 btrace_sync_conf (const struct btrace_config *conf)
13132 {
13133   struct packet_config *packet;
13134   struct remote_state *rs;
13135   char *buf, *pos, *endbuf;
13136
13137   rs = get_remote_state ();
13138   buf = rs->buf;
13139   endbuf = buf + get_remote_packet_size ();
13140
13141   packet = &remote_protocol_packets[PACKET_Qbtrace_conf_bts_size];
13142   if (packet_config_support (packet) == PACKET_ENABLE
13143       && conf->bts.size != rs->btrace_config.bts.size)
13144     {
13145       pos = buf;
13146       pos += xsnprintf (pos, endbuf - pos, "%s=0x%x", packet->name,
13147                         conf->bts.size);
13148
13149       putpkt (buf);
13150       getpkt (&buf, &rs->buf_size, 0);
13151
13152       if (packet_ok (buf, packet) == PACKET_ERROR)
13153         {
13154           if (buf[0] == 'E' && buf[1] == '.')
13155             error (_("Failed to configure the BTS buffer size: %s"), buf + 2);
13156           else
13157             error (_("Failed to configure the BTS buffer size."));
13158         }
13159
13160       rs->btrace_config.bts.size = conf->bts.size;
13161     }
13162
13163   packet = &remote_protocol_packets[PACKET_Qbtrace_conf_pt_size];
13164   if (packet_config_support (packet) == PACKET_ENABLE
13165       && conf->pt.size != rs->btrace_config.pt.size)
13166     {
13167       pos = buf;
13168       pos += xsnprintf (pos, endbuf - pos, "%s=0x%x", packet->name,
13169                         conf->pt.size);
13170
13171       putpkt (buf);
13172       getpkt (&buf, &rs->buf_size, 0);
13173
13174       if (packet_ok (buf, packet) == PACKET_ERROR)
13175         {
13176           if (buf[0] == 'E' && buf[1] == '.')
13177             error (_("Failed to configure the trace buffer size: %s"), buf + 2);
13178           else
13179             error (_("Failed to configure the trace buffer size."));
13180         }
13181
13182       rs->btrace_config.pt.size = conf->pt.size;
13183     }
13184 }
13185
13186 /* Read the current thread's btrace configuration from the target and
13187    store it into CONF.  */
13188
13189 static void
13190 btrace_read_config (struct btrace_config *conf)
13191 {
13192   char *xml;
13193
13194   xml = target_read_stralloc (&current_target,
13195                               TARGET_OBJECT_BTRACE_CONF, "");
13196   if (xml != NULL)
13197     {
13198       struct cleanup *cleanup;
13199
13200       cleanup = make_cleanup (xfree, xml);
13201       parse_xml_btrace_conf (conf, xml);
13202       do_cleanups (cleanup);
13203     }
13204 }
13205
13206 /* Maybe reopen target btrace.  */
13207
13208 static void
13209 remote_btrace_maybe_reopen (void)
13210 {
13211   struct remote_state *rs = get_remote_state ();
13212   struct cleanup *cleanup;
13213   struct thread_info *tp;
13214   int btrace_target_pushed = 0;
13215   int warned = 0;
13216
13217   cleanup = make_cleanup_restore_current_thread ();
13218   ALL_NON_EXITED_THREADS (tp)
13219     {
13220       set_general_thread (tp->ptid);
13221
13222       memset (&rs->btrace_config, 0x00, sizeof (struct btrace_config));
13223       btrace_read_config (&rs->btrace_config);
13224
13225       if (rs->btrace_config.format == BTRACE_FORMAT_NONE)
13226         continue;
13227
13228 #if !defined (HAVE_LIBIPT)
13229       if (rs->btrace_config.format == BTRACE_FORMAT_PT)
13230         {
13231           if (!warned)
13232             {
13233               warned = 1;
13234               warning (_("GDB does not support Intel Processor Trace. "
13235                          "\"record\" will not work in this session."));
13236             }
13237
13238           continue;
13239         }
13240 #endif /* !defined (HAVE_LIBIPT) */
13241
13242       /* Push target, once, but before anything else happens.  This way our
13243          changes to the threads will be cleaned up by unpushing the target
13244          in case btrace_read_config () throws.  */
13245       if (!btrace_target_pushed)
13246         {
13247           btrace_target_pushed = 1;
13248           record_btrace_push_target ();
13249           printf_filtered (_("Target is recording using %s.\n"),
13250                            btrace_format_string (rs->btrace_config.format));
13251         }
13252
13253       tp->btrace.target = XCNEW (struct btrace_target_info);
13254       tp->btrace.target->ptid = tp->ptid;
13255       tp->btrace.target->conf = rs->btrace_config;
13256     }
13257   do_cleanups (cleanup);
13258 }
13259
13260 /* Enable branch tracing.  */
13261
13262 static struct btrace_target_info *
13263 remote_enable_btrace (struct target_ops *self, ptid_t ptid,
13264                       const struct btrace_config *conf)
13265 {
13266   struct btrace_target_info *tinfo = NULL;
13267   struct packet_config *packet = NULL;
13268   struct remote_state *rs = get_remote_state ();
13269   char *buf = rs->buf;
13270   char *endbuf = rs->buf + get_remote_packet_size ();
13271
13272   switch (conf->format)
13273     {
13274       case BTRACE_FORMAT_BTS:
13275         packet = &remote_protocol_packets[PACKET_Qbtrace_bts];
13276         break;
13277
13278       case BTRACE_FORMAT_PT:
13279         packet = &remote_protocol_packets[PACKET_Qbtrace_pt];
13280         break;
13281     }
13282
13283   if (packet == NULL || packet_config_support (packet) != PACKET_ENABLE)
13284     error (_("Target does not support branch tracing."));
13285
13286   btrace_sync_conf (conf);
13287
13288   set_general_thread (ptid);
13289
13290   buf += xsnprintf (buf, endbuf - buf, "%s", packet->name);
13291   putpkt (rs->buf);
13292   getpkt (&rs->buf, &rs->buf_size, 0);
13293
13294   if (packet_ok (rs->buf, packet) == PACKET_ERROR)
13295     {
13296       if (rs->buf[0] == 'E' && rs->buf[1] == '.')
13297         error (_("Could not enable branch tracing for %s: %s"),
13298                target_pid_to_str (ptid), rs->buf + 2);
13299       else
13300         error (_("Could not enable branch tracing for %s."),
13301                target_pid_to_str (ptid));
13302     }
13303
13304   tinfo = XCNEW (struct btrace_target_info);
13305   tinfo->ptid = ptid;
13306
13307   /* If we fail to read the configuration, we lose some information, but the
13308      tracing itself is not impacted.  */
13309   TRY
13310     {
13311       btrace_read_config (&tinfo->conf);
13312     }
13313   CATCH (err, RETURN_MASK_ERROR)
13314     {
13315       if (err.message != NULL)
13316         warning ("%s", err.message);
13317     }
13318   END_CATCH
13319
13320   return tinfo;
13321 }
13322
13323 /* Disable branch tracing.  */
13324
13325 static void
13326 remote_disable_btrace (struct target_ops *self,
13327                        struct btrace_target_info *tinfo)
13328 {
13329   struct packet_config *packet = &remote_protocol_packets[PACKET_Qbtrace_off];
13330   struct remote_state *rs = get_remote_state ();
13331   char *buf = rs->buf;
13332   char *endbuf = rs->buf + get_remote_packet_size ();
13333
13334   if (packet_config_support (packet) != PACKET_ENABLE)
13335     error (_("Target does not support branch tracing."));
13336
13337   set_general_thread (tinfo->ptid);
13338
13339   buf += xsnprintf (buf, endbuf - buf, "%s", packet->name);
13340   putpkt (rs->buf);
13341   getpkt (&rs->buf, &rs->buf_size, 0);
13342
13343   if (packet_ok (rs->buf, packet) == PACKET_ERROR)
13344     {
13345       if (rs->buf[0] == 'E' && rs->buf[1] == '.')
13346         error (_("Could not disable branch tracing for %s: %s"),
13347                target_pid_to_str (tinfo->ptid), rs->buf + 2);
13348       else
13349         error (_("Could not disable branch tracing for %s."),
13350                target_pid_to_str (tinfo->ptid));
13351     }
13352
13353   xfree (tinfo);
13354 }
13355
13356 /* Teardown branch tracing.  */
13357
13358 static void
13359 remote_teardown_btrace (struct target_ops *self,
13360                         struct btrace_target_info *tinfo)
13361 {
13362   /* We must not talk to the target during teardown.  */
13363   xfree (tinfo);
13364 }
13365
13366 /* Read the branch trace.  */
13367
13368 static enum btrace_error
13369 remote_read_btrace (struct target_ops *self,
13370                     struct btrace_data *btrace,
13371                     struct btrace_target_info *tinfo,
13372                     enum btrace_read_type type)
13373 {
13374   struct packet_config *packet = &remote_protocol_packets[PACKET_qXfer_btrace];
13375   struct cleanup *cleanup;
13376   const char *annex;
13377   char *xml;
13378
13379   if (packet_config_support (packet) != PACKET_ENABLE)
13380     error (_("Target does not support branch tracing."));
13381
13382 #if !defined(HAVE_LIBEXPAT)
13383   error (_("Cannot process branch tracing result. XML parsing not supported."));
13384 #endif
13385
13386   switch (type)
13387     {
13388     case BTRACE_READ_ALL:
13389       annex = "all";
13390       break;
13391     case BTRACE_READ_NEW:
13392       annex = "new";
13393       break;
13394     case BTRACE_READ_DELTA:
13395       annex = "delta";
13396       break;
13397     default:
13398       internal_error (__FILE__, __LINE__,
13399                       _("Bad branch tracing read type: %u."),
13400                       (unsigned int) type);
13401     }
13402
13403   xml = target_read_stralloc (&current_target,
13404                               TARGET_OBJECT_BTRACE, annex);
13405   if (xml == NULL)
13406     return BTRACE_ERR_UNKNOWN;
13407
13408   cleanup = make_cleanup (xfree, xml);
13409   parse_xml_btrace (btrace, xml);
13410   do_cleanups (cleanup);
13411
13412   return BTRACE_ERR_NONE;
13413 }
13414
13415 static const struct btrace_config *
13416 remote_btrace_conf (struct target_ops *self,
13417                     const struct btrace_target_info *tinfo)
13418 {
13419   return &tinfo->conf;
13420 }
13421
13422 static int
13423 remote_augmented_libraries_svr4_read (struct target_ops *self)
13424 {
13425   return (packet_support (PACKET_augmented_libraries_svr4_read_feature)
13426           == PACKET_ENABLE);
13427 }
13428
13429 /* Implementation of to_load.  */
13430
13431 static void
13432 remote_load (struct target_ops *self, const char *name, int from_tty)
13433 {
13434   generic_load (name, from_tty);
13435 }
13436
13437 /* Accepts an integer PID; returns a string representing a file that
13438    can be opened on the remote side to get the symbols for the child
13439    process.  Returns NULL if the operation is not supported.  */
13440
13441 static char *
13442 remote_pid_to_exec_file (struct target_ops *self, int pid)
13443 {
13444   static char *filename = NULL;
13445   struct inferior *inf;
13446   char *annex = NULL;
13447
13448   if (packet_support (PACKET_qXfer_exec_file) != PACKET_ENABLE)
13449     return NULL;
13450
13451   if (filename != NULL)
13452     xfree (filename);
13453
13454   inf = find_inferior_pid (pid);
13455   if (inf == NULL)
13456     internal_error (__FILE__, __LINE__,
13457                     _("not currently attached to process %d"), pid);
13458
13459   if (!inf->fake_pid_p)
13460     {
13461       const int annex_size = 9;
13462
13463       annex = (char *) alloca (annex_size);
13464       xsnprintf (annex, annex_size, "%x", pid);
13465     }
13466
13467   filename = target_read_stralloc (&current_target,
13468                                    TARGET_OBJECT_EXEC_FILE, annex);
13469
13470   return filename;
13471 }
13472
13473 /* Implement the to_can_do_single_step target_ops method.  */
13474
13475 static int
13476 remote_can_do_single_step (struct target_ops *ops)
13477 {
13478   /* We can only tell whether target supports single step or not by
13479      supported s and S vCont actions if the stub supports vContSupported
13480      feature.  If the stub doesn't support vContSupported feature,
13481      we have conservatively to think target doesn't supports single
13482      step.  */
13483   if (packet_support (PACKET_vContSupported) == PACKET_ENABLE)
13484     {
13485       struct remote_state *rs = get_remote_state ();
13486
13487       if (packet_support (PACKET_vCont) == PACKET_SUPPORT_UNKNOWN)
13488         remote_vcont_probe (rs);
13489
13490       return rs->supports_vCont.s && rs->supports_vCont.S;
13491     }
13492   else
13493     return 0;
13494 }
13495
13496 /* Implementation of the to_execution_direction method for the remote
13497    target.  */
13498
13499 static enum exec_direction_kind
13500 remote_execution_direction (struct target_ops *self)
13501 {
13502   struct remote_state *rs = get_remote_state ();
13503
13504   return rs->last_resume_exec_dir;
13505 }
13506
13507 static void
13508 init_remote_ops (void)
13509 {
13510   remote_ops.to_shortname = "remote";
13511   remote_ops.to_longname = "Remote serial target in gdb-specific protocol";
13512   remote_ops.to_doc =
13513     "Use a remote computer via a serial line, using a gdb-specific protocol.\n\
13514 Specify the serial device it is connected to\n\
13515 (e.g. /dev/ttyS0, /dev/ttya, COM1, etc.).";
13516   remote_ops.to_open = remote_open;
13517   remote_ops.to_close = remote_close;
13518   remote_ops.to_detach = remote_detach;
13519   remote_ops.to_disconnect = remote_disconnect;
13520   remote_ops.to_resume = remote_resume;
13521   remote_ops.to_commit_resume = remote_commit_resume;
13522   remote_ops.to_wait = remote_wait;
13523   remote_ops.to_fetch_registers = remote_fetch_registers;
13524   remote_ops.to_store_registers = remote_store_registers;
13525   remote_ops.to_prepare_to_store = remote_prepare_to_store;
13526   remote_ops.to_files_info = remote_files_info;
13527   remote_ops.to_insert_breakpoint = remote_insert_breakpoint;
13528   remote_ops.to_remove_breakpoint = remote_remove_breakpoint;
13529   remote_ops.to_stopped_by_sw_breakpoint = remote_stopped_by_sw_breakpoint;
13530   remote_ops.to_supports_stopped_by_sw_breakpoint = remote_supports_stopped_by_sw_breakpoint;
13531   remote_ops.to_stopped_by_hw_breakpoint = remote_stopped_by_hw_breakpoint;
13532   remote_ops.to_supports_stopped_by_hw_breakpoint = remote_supports_stopped_by_hw_breakpoint;
13533   remote_ops.to_stopped_by_watchpoint = remote_stopped_by_watchpoint;
13534   remote_ops.to_stopped_data_address = remote_stopped_data_address;
13535   remote_ops.to_watchpoint_addr_within_range =
13536     remote_watchpoint_addr_within_range;
13537   remote_ops.to_can_use_hw_breakpoint = remote_check_watch_resources;
13538   remote_ops.to_insert_hw_breakpoint = remote_insert_hw_breakpoint;
13539   remote_ops.to_remove_hw_breakpoint = remote_remove_hw_breakpoint;
13540   remote_ops.to_region_ok_for_hw_watchpoint
13541      = remote_region_ok_for_hw_watchpoint;
13542   remote_ops.to_insert_watchpoint = remote_insert_watchpoint;
13543   remote_ops.to_remove_watchpoint = remote_remove_watchpoint;
13544   remote_ops.to_kill = remote_kill;
13545   remote_ops.to_load = remote_load;
13546   remote_ops.to_mourn_inferior = remote_mourn;
13547   remote_ops.to_pass_signals = remote_pass_signals;
13548   remote_ops.to_set_syscall_catchpoint = remote_set_syscall_catchpoint;
13549   remote_ops.to_program_signals = remote_program_signals;
13550   remote_ops.to_thread_alive = remote_thread_alive;
13551   remote_ops.to_thread_name = remote_thread_name;
13552   remote_ops.to_update_thread_list = remote_update_thread_list;
13553   remote_ops.to_pid_to_str = remote_pid_to_str;
13554   remote_ops.to_extra_thread_info = remote_threads_extra_info;
13555   remote_ops.to_get_ada_task_ptid = remote_get_ada_task_ptid;
13556   remote_ops.to_stop = remote_stop;
13557   remote_ops.to_interrupt = remote_interrupt;
13558   remote_ops.to_pass_ctrlc = remote_pass_ctrlc;
13559   remote_ops.to_xfer_partial = remote_xfer_partial;
13560   remote_ops.to_get_memory_xfer_limit = remote_get_memory_xfer_limit;
13561   remote_ops.to_rcmd = remote_rcmd;
13562   remote_ops.to_pid_to_exec_file = remote_pid_to_exec_file;
13563   remote_ops.to_log_command = serial_log_command;
13564   remote_ops.to_get_thread_local_address = remote_get_thread_local_address;
13565   remote_ops.to_stratum = process_stratum;
13566   remote_ops.to_has_all_memory = default_child_has_all_memory;
13567   remote_ops.to_has_memory = default_child_has_memory;
13568   remote_ops.to_has_stack = default_child_has_stack;
13569   remote_ops.to_has_registers = default_child_has_registers;
13570   remote_ops.to_has_execution = default_child_has_execution;
13571   remote_ops.to_has_thread_control = tc_schedlock;    /* can lock scheduler */
13572   remote_ops.to_can_execute_reverse = remote_can_execute_reverse;
13573   remote_ops.to_magic = OPS_MAGIC;
13574   remote_ops.to_memory_map = remote_memory_map;
13575   remote_ops.to_flash_erase = remote_flash_erase;
13576   remote_ops.to_flash_done = remote_flash_done;
13577   remote_ops.to_read_description = remote_read_description;
13578   remote_ops.to_search_memory = remote_search_memory;
13579   remote_ops.to_can_async_p = remote_can_async_p;
13580   remote_ops.to_is_async_p = remote_is_async_p;
13581   remote_ops.to_async = remote_async;
13582   remote_ops.to_thread_events = remote_thread_events;
13583   remote_ops.to_can_do_single_step = remote_can_do_single_step;
13584   remote_ops.to_terminal_inferior = remote_terminal_inferior;
13585   remote_ops.to_terminal_ours = remote_terminal_ours;
13586   remote_ops.to_supports_non_stop = remote_supports_non_stop;
13587   remote_ops.to_supports_multi_process = remote_supports_multi_process;
13588   remote_ops.to_supports_disable_randomization
13589     = remote_supports_disable_randomization;
13590   remote_ops.to_filesystem_is_local = remote_filesystem_is_local;
13591   remote_ops.to_fileio_open = remote_hostio_open;
13592   remote_ops.to_fileio_pwrite = remote_hostio_pwrite;
13593   remote_ops.to_fileio_pread = remote_hostio_pread;
13594   remote_ops.to_fileio_fstat = remote_hostio_fstat;
13595   remote_ops.to_fileio_close = remote_hostio_close;
13596   remote_ops.to_fileio_unlink = remote_hostio_unlink;
13597   remote_ops.to_fileio_readlink = remote_hostio_readlink;
13598   remote_ops.to_supports_enable_disable_tracepoint = remote_supports_enable_disable_tracepoint;
13599   remote_ops.to_supports_string_tracing = remote_supports_string_tracing;
13600   remote_ops.to_supports_evaluation_of_breakpoint_conditions = remote_supports_cond_breakpoints;
13601   remote_ops.to_can_run_breakpoint_commands = remote_can_run_breakpoint_commands;
13602   remote_ops.to_trace_init = remote_trace_init;
13603   remote_ops.to_download_tracepoint = remote_download_tracepoint;
13604   remote_ops.to_can_download_tracepoint = remote_can_download_tracepoint;
13605   remote_ops.to_download_trace_state_variable
13606     = remote_download_trace_state_variable;
13607   remote_ops.to_enable_tracepoint = remote_enable_tracepoint;
13608   remote_ops.to_disable_tracepoint = remote_disable_tracepoint;
13609   remote_ops.to_trace_set_readonly_regions = remote_trace_set_readonly_regions;
13610   remote_ops.to_trace_start = remote_trace_start;
13611   remote_ops.to_get_trace_status = remote_get_trace_status;
13612   remote_ops.to_get_tracepoint_status = remote_get_tracepoint_status;
13613   remote_ops.to_trace_stop = remote_trace_stop;
13614   remote_ops.to_trace_find = remote_trace_find;
13615   remote_ops.to_get_trace_state_variable_value
13616     = remote_get_trace_state_variable_value;
13617   remote_ops.to_save_trace_data = remote_save_trace_data;
13618   remote_ops.to_upload_tracepoints = remote_upload_tracepoints;
13619   remote_ops.to_upload_trace_state_variables
13620     = remote_upload_trace_state_variables;
13621   remote_ops.to_get_raw_trace_data = remote_get_raw_trace_data;
13622   remote_ops.to_get_min_fast_tracepoint_insn_len = remote_get_min_fast_tracepoint_insn_len;
13623   remote_ops.to_set_disconnected_tracing = remote_set_disconnected_tracing;
13624   remote_ops.to_set_circular_trace_buffer = remote_set_circular_trace_buffer;
13625   remote_ops.to_set_trace_buffer_size = remote_set_trace_buffer_size;
13626   remote_ops.to_set_trace_notes = remote_set_trace_notes;
13627   remote_ops.to_core_of_thread = remote_core_of_thread;
13628   remote_ops.to_verify_memory = remote_verify_memory;
13629   remote_ops.to_get_tib_address = remote_get_tib_address;
13630   remote_ops.to_set_permissions = remote_set_permissions;
13631   remote_ops.to_static_tracepoint_marker_at
13632     = remote_static_tracepoint_marker_at;
13633   remote_ops.to_static_tracepoint_markers_by_strid
13634     = remote_static_tracepoint_markers_by_strid;
13635   remote_ops.to_traceframe_info = remote_traceframe_info;
13636   remote_ops.to_use_agent = remote_use_agent;
13637   remote_ops.to_can_use_agent = remote_can_use_agent;
13638   remote_ops.to_supports_btrace = remote_supports_btrace;
13639   remote_ops.to_enable_btrace = remote_enable_btrace;
13640   remote_ops.to_disable_btrace = remote_disable_btrace;
13641   remote_ops.to_teardown_btrace = remote_teardown_btrace;
13642   remote_ops.to_read_btrace = remote_read_btrace;
13643   remote_ops.to_btrace_conf = remote_btrace_conf;
13644   remote_ops.to_augmented_libraries_svr4_read =
13645     remote_augmented_libraries_svr4_read;
13646   remote_ops.to_follow_fork = remote_follow_fork;
13647   remote_ops.to_follow_exec = remote_follow_exec;
13648   remote_ops.to_insert_fork_catchpoint = remote_insert_fork_catchpoint;
13649   remote_ops.to_remove_fork_catchpoint = remote_remove_fork_catchpoint;
13650   remote_ops.to_insert_vfork_catchpoint = remote_insert_vfork_catchpoint;
13651   remote_ops.to_remove_vfork_catchpoint = remote_remove_vfork_catchpoint;
13652   remote_ops.to_insert_exec_catchpoint = remote_insert_exec_catchpoint;
13653   remote_ops.to_remove_exec_catchpoint = remote_remove_exec_catchpoint;
13654   remote_ops.to_execution_direction = remote_execution_direction;
13655 }
13656
13657 /* Set up the extended remote vector by making a copy of the standard
13658    remote vector and adding to it.  */
13659
13660 static void
13661 init_extended_remote_ops (void)
13662 {
13663   extended_remote_ops = remote_ops;
13664
13665   extended_remote_ops.to_shortname = "extended-remote";
13666   extended_remote_ops.to_longname =
13667     "Extended remote serial target in gdb-specific protocol";
13668   extended_remote_ops.to_doc =
13669     "Use a remote computer via a serial line, using a gdb-specific protocol.\n\
13670 Specify the serial device it is connected to (e.g. /dev/ttya).";
13671   extended_remote_ops.to_open = extended_remote_open;
13672   extended_remote_ops.to_create_inferior = extended_remote_create_inferior;
13673   extended_remote_ops.to_detach = extended_remote_detach;
13674   extended_remote_ops.to_attach = extended_remote_attach;
13675   extended_remote_ops.to_post_attach = extended_remote_post_attach;
13676   extended_remote_ops.to_supports_disable_randomization
13677     = extended_remote_supports_disable_randomization;
13678 }
13679
13680 static int
13681 remote_can_async_p (struct target_ops *ops)
13682 {
13683   struct remote_state *rs = get_remote_state ();
13684
13685   /* We don't go async if the user has explicitly prevented it with the
13686      "maint set target-async" command.  */
13687   if (!target_async_permitted)
13688     return 0;
13689
13690   /* We're async whenever the serial device is.  */
13691   return serial_can_async_p (rs->remote_desc);
13692 }
13693
13694 static int
13695 remote_is_async_p (struct target_ops *ops)
13696 {
13697   struct remote_state *rs = get_remote_state ();
13698
13699   if (!target_async_permitted)
13700     /* We only enable async when the user specifically asks for it.  */
13701     return 0;
13702
13703   /* We're async whenever the serial device is.  */
13704   return serial_is_async_p (rs->remote_desc);
13705 }
13706
13707 /* Pass the SERIAL event on and up to the client.  One day this code
13708    will be able to delay notifying the client of an event until the
13709    point where an entire packet has been received.  */
13710
13711 static serial_event_ftype remote_async_serial_handler;
13712
13713 static void
13714 remote_async_serial_handler (struct serial *scb, void *context)
13715 {
13716   /* Don't propogate error information up to the client.  Instead let
13717      the client find out about the error by querying the target.  */
13718   inferior_event_handler (INF_REG_EVENT, NULL);
13719 }
13720
13721 static void
13722 remote_async_inferior_event_handler (gdb_client_data data)
13723 {
13724   inferior_event_handler (INF_REG_EVENT, NULL);
13725 }
13726
13727 static void
13728 remote_async (struct target_ops *ops, int enable)
13729 {
13730   struct remote_state *rs = get_remote_state ();
13731
13732   if (enable)
13733     {
13734       serial_async (rs->remote_desc, remote_async_serial_handler, rs);
13735
13736       /* If there are pending events in the stop reply queue tell the
13737          event loop to process them.  */
13738       if (!QUEUE_is_empty (stop_reply_p, stop_reply_queue))
13739         mark_async_event_handler (remote_async_inferior_event_token);
13740       /* For simplicity, below we clear the pending events token
13741          without remembering whether it is marked, so here we always
13742          mark it.  If there's actually no pending notification to
13743          process, this ends up being a no-op (other than a spurious
13744          event-loop wakeup).  */
13745       if (target_is_non_stop_p ())
13746         mark_async_event_handler (rs->notif_state->get_pending_events_token);
13747     }
13748   else
13749     {
13750       serial_async (rs->remote_desc, NULL, NULL);
13751       /* If the core is disabling async, it doesn't want to be
13752          disturbed with target events.  Clear all async event sources
13753          too.  */
13754       clear_async_event_handler (remote_async_inferior_event_token);
13755       if (target_is_non_stop_p ())
13756         clear_async_event_handler (rs->notif_state->get_pending_events_token);
13757     }
13758 }
13759
13760 /* Implementation of the to_thread_events method.  */
13761
13762 static void
13763 remote_thread_events (struct target_ops *ops, int enable)
13764 {
13765   struct remote_state *rs = get_remote_state ();
13766   size_t size = get_remote_packet_size ();
13767
13768   if (packet_support (PACKET_QThreadEvents) == PACKET_DISABLE)
13769     return;
13770
13771   xsnprintf (rs->buf, size, "QThreadEvents:%x", enable ? 1 : 0);
13772   putpkt (rs->buf);
13773   getpkt (&rs->buf, &rs->buf_size, 0);
13774
13775   switch (packet_ok (rs->buf,
13776                      &remote_protocol_packets[PACKET_QThreadEvents]))
13777     {
13778     case PACKET_OK:
13779       if (strcmp (rs->buf, "OK") != 0)
13780         error (_("Remote refused setting thread events: %s"), rs->buf);
13781       break;
13782     case PACKET_ERROR:
13783       warning (_("Remote failure reply: %s"), rs->buf);
13784       break;
13785     case PACKET_UNKNOWN:
13786       break;
13787     }
13788 }
13789
13790 static void
13791 set_remote_cmd (char *args, int from_tty)
13792 {
13793   help_list (remote_set_cmdlist, "set remote ", all_commands, gdb_stdout);
13794 }
13795
13796 static void
13797 show_remote_cmd (char *args, int from_tty)
13798 {
13799   /* We can't just use cmd_show_list here, because we want to skip
13800      the redundant "show remote Z-packet" and the legacy aliases.  */
13801   struct cleanup *showlist_chain;
13802   struct cmd_list_element *list = remote_show_cmdlist;
13803   struct ui_out *uiout = current_uiout;
13804
13805   showlist_chain = make_cleanup_ui_out_tuple_begin_end (uiout, "showlist");
13806   for (; list != NULL; list = list->next)
13807     if (strcmp (list->name, "Z-packet") == 0)
13808       continue;
13809     else if (list->type == not_set_cmd)
13810       /* Alias commands are exactly like the original, except they
13811          don't have the normal type.  */
13812       continue;
13813     else
13814       {
13815         struct cleanup *option_chain
13816           = make_cleanup_ui_out_tuple_begin_end (uiout, "option");
13817
13818         uiout->field_string ("name", list->name);
13819         uiout->text (":  ");
13820         if (list->type == show_cmd)
13821           do_show_command (NULL, from_tty, list);
13822         else
13823           cmd_func (list, NULL, from_tty);
13824         /* Close the tuple.  */
13825         do_cleanups (option_chain);
13826       }
13827
13828   /* Close the tuple.  */
13829   do_cleanups (showlist_chain);
13830 }
13831
13832
13833 /* Function to be called whenever a new objfile (shlib) is detected.  */
13834 static void
13835 remote_new_objfile (struct objfile *objfile)
13836 {
13837   struct remote_state *rs = get_remote_state ();
13838
13839   if (rs->remote_desc != 0)             /* Have a remote connection.  */
13840     remote_check_symbols ();
13841 }
13842
13843 /* Pull all the tracepoints defined on the target and create local
13844    data structures representing them.  We don't want to create real
13845    tracepoints yet, we don't want to mess up the user's existing
13846    collection.  */
13847   
13848 static int
13849 remote_upload_tracepoints (struct target_ops *self, struct uploaded_tp **utpp)
13850 {
13851   struct remote_state *rs = get_remote_state ();
13852   char *p;
13853
13854   /* Ask for a first packet of tracepoint definition.  */
13855   putpkt ("qTfP");
13856   getpkt (&rs->buf, &rs->buf_size, 0);
13857   p = rs->buf;
13858   while (*p && *p != 'l')
13859     {
13860       parse_tracepoint_definition (p, utpp);
13861       /* Ask for another packet of tracepoint definition.  */
13862       putpkt ("qTsP");
13863       getpkt (&rs->buf, &rs->buf_size, 0);
13864       p = rs->buf;
13865     }
13866   return 0;
13867 }
13868
13869 static int
13870 remote_upload_trace_state_variables (struct target_ops *self,
13871                                      struct uploaded_tsv **utsvp)
13872 {
13873   struct remote_state *rs = get_remote_state ();
13874   char *p;
13875
13876   /* Ask for a first packet of variable definition.  */
13877   putpkt ("qTfV");
13878   getpkt (&rs->buf, &rs->buf_size, 0);
13879   p = rs->buf;
13880   while (*p && *p != 'l')
13881     {
13882       parse_tsv_definition (p, utsvp);
13883       /* Ask for another packet of variable definition.  */
13884       putpkt ("qTsV");
13885       getpkt (&rs->buf, &rs->buf_size, 0);
13886       p = rs->buf;
13887     }
13888   return 0;
13889 }
13890
13891 /* The "set/show range-stepping" show hook.  */
13892
13893 static void
13894 show_range_stepping (struct ui_file *file, int from_tty,
13895                      struct cmd_list_element *c,
13896                      const char *value)
13897 {
13898   fprintf_filtered (file,
13899                     _("Debugger's willingness to use range stepping "
13900                       "is %s.\n"), value);
13901 }
13902
13903 /* The "set/show range-stepping" set hook.  */
13904
13905 static void
13906 set_range_stepping (char *ignore_args, int from_tty,
13907                     struct cmd_list_element *c)
13908 {
13909   struct remote_state *rs = get_remote_state ();
13910
13911   /* Whene enabling, check whether range stepping is actually
13912      supported by the target, and warn if not.  */
13913   if (use_range_stepping)
13914     {
13915       if (rs->remote_desc != NULL)
13916         {
13917           if (packet_support (PACKET_vCont) == PACKET_SUPPORT_UNKNOWN)
13918             remote_vcont_probe (rs);
13919
13920           if (packet_support (PACKET_vCont) == PACKET_ENABLE
13921               && rs->supports_vCont.r)
13922             return;
13923         }
13924
13925       warning (_("Range stepping is not supported by the current target"));
13926     }
13927 }
13928
13929 void
13930 _initialize_remote (void)
13931 {
13932   struct cmd_list_element *cmd;
13933   const char *cmd_name;
13934
13935   /* architecture specific data */
13936   remote_gdbarch_data_handle =
13937     gdbarch_data_register_post_init (init_remote_state);
13938   remote_g_packet_data_handle =
13939     gdbarch_data_register_pre_init (remote_g_packet_data_init);
13940
13941   remote_pspace_data
13942     = register_program_space_data_with_cleanup (NULL,
13943                                                 remote_pspace_data_cleanup);
13944
13945   /* Initialize the per-target state.  At the moment there is only one
13946      of these, not one per target.  Only one target is active at a
13947      time.  */
13948   remote_state = new_remote_state ();
13949
13950   init_remote_ops ();
13951   add_target (&remote_ops);
13952
13953   init_extended_remote_ops ();
13954   add_target (&extended_remote_ops);
13955
13956   /* Hook into new objfile notification.  */
13957   observer_attach_new_objfile (remote_new_objfile);
13958   /* We're no longer interested in notification events of an inferior
13959      when it exits.  */
13960   observer_attach_inferior_exit (discard_pending_stop_replies);
13961
13962 #if 0
13963   init_remote_threadtests ();
13964 #endif
13965
13966   stop_reply_queue = QUEUE_alloc (stop_reply_p, stop_reply_xfree);
13967   /* set/show remote ...  */
13968
13969   add_prefix_cmd ("remote", class_maintenance, set_remote_cmd, _("\
13970 Remote protocol specific variables\n\
13971 Configure various remote-protocol specific variables such as\n\
13972 the packets being used"),
13973                   &remote_set_cmdlist, "set remote ",
13974                   0 /* allow-unknown */, &setlist);
13975   add_prefix_cmd ("remote", class_maintenance, show_remote_cmd, _("\
13976 Remote protocol specific variables\n\
13977 Configure various remote-protocol specific variables such as\n\
13978 the packets being used"),
13979                   &remote_show_cmdlist, "show remote ",
13980                   0 /* allow-unknown */, &showlist);
13981
13982   add_cmd ("compare-sections", class_obscure, compare_sections_command, _("\
13983 Compare section data on target to the exec file.\n\
13984 Argument is a single section name (default: all loaded sections).\n\
13985 To compare only read-only loaded sections, specify the -r option."),
13986            &cmdlist);
13987
13988   add_cmd ("packet", class_maintenance, packet_command, _("\
13989 Send an arbitrary packet to a remote target.\n\
13990    maintenance packet TEXT\n\
13991 If GDB is talking to an inferior via the GDB serial protocol, then\n\
13992 this command sends the string TEXT to the inferior, and displays the\n\
13993 response packet.  GDB supplies the initial `$' character, and the\n\
13994 terminating `#' character and checksum."),
13995            &maintenancelist);
13996
13997   add_setshow_boolean_cmd ("remotebreak", no_class, &remote_break, _("\
13998 Set whether to send break if interrupted."), _("\
13999 Show whether to send break if interrupted."), _("\
14000 If set, a break, instead of a cntrl-c, is sent to the remote target."),
14001                            set_remotebreak, show_remotebreak,
14002                            &setlist, &showlist);
14003   cmd_name = "remotebreak";
14004   cmd = lookup_cmd (&cmd_name, setlist, "", -1, 1);
14005   deprecate_cmd (cmd, "set remote interrupt-sequence");
14006   cmd_name = "remotebreak"; /* needed because lookup_cmd updates the pointer */
14007   cmd = lookup_cmd (&cmd_name, showlist, "", -1, 1);
14008   deprecate_cmd (cmd, "show remote interrupt-sequence");
14009
14010   add_setshow_enum_cmd ("interrupt-sequence", class_support,
14011                         interrupt_sequence_modes, &interrupt_sequence_mode,
14012                         _("\
14013 Set interrupt sequence to remote target."), _("\
14014 Show interrupt sequence to remote target."), _("\
14015 Valid value is \"Ctrl-C\", \"BREAK\" or \"BREAK-g\". The default is \"Ctrl-C\"."),
14016                         NULL, show_interrupt_sequence,
14017                         &remote_set_cmdlist,
14018                         &remote_show_cmdlist);
14019
14020   add_setshow_boolean_cmd ("interrupt-on-connect", class_support,
14021                            &interrupt_on_connect, _("\
14022 Set whether interrupt-sequence is sent to remote target when gdb connects to."), _("            \
14023 Show whether interrupt-sequence is sent to remote target when gdb connects to."), _("           \
14024 If set, interrupt sequence is sent to remote target."),
14025                            NULL, NULL,
14026                            &remote_set_cmdlist, &remote_show_cmdlist);
14027
14028   /* Install commands for configuring memory read/write packets.  */
14029
14030   add_cmd ("remotewritesize", no_class, set_memory_write_packet_size, _("\
14031 Set the maximum number of bytes per memory write packet (deprecated)."),
14032            &setlist);
14033   add_cmd ("remotewritesize", no_class, show_memory_write_packet_size, _("\
14034 Show the maximum number of bytes per memory write packet (deprecated)."),
14035            &showlist);
14036   add_cmd ("memory-write-packet-size", no_class,
14037            set_memory_write_packet_size, _("\
14038 Set the maximum number of bytes per memory-write packet.\n\
14039 Specify the number of bytes in a packet or 0 (zero) for the\n\
14040 default packet size.  The actual limit is further reduced\n\
14041 dependent on the target.  Specify ``fixed'' to disable the\n\
14042 further restriction and ``limit'' to enable that restriction."),
14043            &remote_set_cmdlist);
14044   add_cmd ("memory-read-packet-size", no_class,
14045            set_memory_read_packet_size, _("\
14046 Set the maximum number of bytes per memory-read packet.\n\
14047 Specify the number of bytes in a packet or 0 (zero) for the\n\
14048 default packet size.  The actual limit is further reduced\n\
14049 dependent on the target.  Specify ``fixed'' to disable the\n\
14050 further restriction and ``limit'' to enable that restriction."),
14051            &remote_set_cmdlist);
14052   add_cmd ("memory-write-packet-size", no_class,
14053            show_memory_write_packet_size,
14054            _("Show the maximum number of bytes per memory-write packet."),
14055            &remote_show_cmdlist);
14056   add_cmd ("memory-read-packet-size", no_class,
14057            show_memory_read_packet_size,
14058            _("Show the maximum number of bytes per memory-read packet."),
14059            &remote_show_cmdlist);
14060
14061   add_setshow_zinteger_cmd ("hardware-watchpoint-limit", no_class,
14062                             &remote_hw_watchpoint_limit, _("\
14063 Set the maximum number of target hardware watchpoints."), _("\
14064 Show the maximum number of target hardware watchpoints."), _("\
14065 Specify a negative limit for unlimited."),
14066                             NULL, NULL, /* FIXME: i18n: The maximum
14067                                            number of target hardware
14068                                            watchpoints is %s.  */
14069                             &remote_set_cmdlist, &remote_show_cmdlist);
14070   add_setshow_zinteger_cmd ("hardware-watchpoint-length-limit", no_class,
14071                             &remote_hw_watchpoint_length_limit, _("\
14072 Set the maximum length (in bytes) of a target hardware watchpoint."), _("\
14073 Show the maximum length (in bytes) of a target hardware watchpoint."), _("\
14074 Specify a negative limit for unlimited."),
14075                             NULL, NULL, /* FIXME: i18n: The maximum
14076                                            length (in bytes) of a target
14077                                            hardware watchpoint is %s.  */
14078                             &remote_set_cmdlist, &remote_show_cmdlist);
14079   add_setshow_zinteger_cmd ("hardware-breakpoint-limit", no_class,
14080                             &remote_hw_breakpoint_limit, _("\
14081 Set the maximum number of target hardware breakpoints."), _("\
14082 Show the maximum number of target hardware breakpoints."), _("\
14083 Specify a negative limit for unlimited."),
14084                             NULL, NULL, /* FIXME: i18n: The maximum
14085                                            number of target hardware
14086                                            breakpoints is %s.  */
14087                             &remote_set_cmdlist, &remote_show_cmdlist);
14088
14089   add_setshow_zuinteger_cmd ("remoteaddresssize", class_obscure,
14090                              &remote_address_size, _("\
14091 Set the maximum size of the address (in bits) in a memory packet."), _("\
14092 Show the maximum size of the address (in bits) in a memory packet."), NULL,
14093                              NULL,
14094                              NULL, /* FIXME: i18n: */
14095                              &setlist, &showlist);
14096
14097   init_all_packet_configs ();
14098
14099   add_packet_config_cmd (&remote_protocol_packets[PACKET_X],
14100                          "X", "binary-download", 1);
14101
14102   add_packet_config_cmd (&remote_protocol_packets[PACKET_vCont],
14103                          "vCont", "verbose-resume", 0);
14104
14105   add_packet_config_cmd (&remote_protocol_packets[PACKET_QPassSignals],
14106                          "QPassSignals", "pass-signals", 0);
14107
14108   add_packet_config_cmd (&remote_protocol_packets[PACKET_QCatchSyscalls],
14109                          "QCatchSyscalls", "catch-syscalls", 0);
14110
14111   add_packet_config_cmd (&remote_protocol_packets[PACKET_QProgramSignals],
14112                          "QProgramSignals", "program-signals", 0);
14113
14114   add_packet_config_cmd (&remote_protocol_packets[PACKET_qSymbol],
14115                          "qSymbol", "symbol-lookup", 0);
14116
14117   add_packet_config_cmd (&remote_protocol_packets[PACKET_P],
14118                          "P", "set-register", 1);
14119
14120   add_packet_config_cmd (&remote_protocol_packets[PACKET_p],
14121                          "p", "fetch-register", 1);
14122
14123   add_packet_config_cmd (&remote_protocol_packets[PACKET_Z0],
14124                          "Z0", "software-breakpoint", 0);
14125
14126   add_packet_config_cmd (&remote_protocol_packets[PACKET_Z1],
14127                          "Z1", "hardware-breakpoint", 0);
14128
14129   add_packet_config_cmd (&remote_protocol_packets[PACKET_Z2],
14130                          "Z2", "write-watchpoint", 0);
14131
14132   add_packet_config_cmd (&remote_protocol_packets[PACKET_Z3],
14133                          "Z3", "read-watchpoint", 0);
14134
14135   add_packet_config_cmd (&remote_protocol_packets[PACKET_Z4],
14136                          "Z4", "access-watchpoint", 0);
14137
14138   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_auxv],
14139                          "qXfer:auxv:read", "read-aux-vector", 0);
14140
14141   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_exec_file],
14142                          "qXfer:exec-file:read", "pid-to-exec-file", 0);
14143
14144   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_features],
14145                          "qXfer:features:read", "target-features", 0);
14146
14147   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_libraries],
14148                          "qXfer:libraries:read", "library-info", 0);
14149
14150   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_libraries_svr4],
14151                          "qXfer:libraries-svr4:read", "library-info-svr4", 0);
14152
14153   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_memory_map],
14154                          "qXfer:memory-map:read", "memory-map", 0);
14155
14156   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_spu_read],
14157                          "qXfer:spu:read", "read-spu-object", 0);
14158
14159   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_spu_write],
14160                          "qXfer:spu:write", "write-spu-object", 0);
14161
14162   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_osdata],
14163                         "qXfer:osdata:read", "osdata", 0);
14164
14165   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_threads],
14166                          "qXfer:threads:read", "threads", 0);
14167
14168   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_siginfo_read],
14169                          "qXfer:siginfo:read", "read-siginfo-object", 0);
14170
14171   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_siginfo_write],
14172                          "qXfer:siginfo:write", "write-siginfo-object", 0);
14173
14174   add_packet_config_cmd
14175     (&remote_protocol_packets[PACKET_qXfer_traceframe_info],
14176      "qXfer:traceframe-info:read", "traceframe-info", 0);
14177
14178   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_uib],
14179                          "qXfer:uib:read", "unwind-info-block", 0);
14180
14181   add_packet_config_cmd (&remote_protocol_packets[PACKET_qGetTLSAddr],
14182                          "qGetTLSAddr", "get-thread-local-storage-address",
14183                          0);
14184
14185   add_packet_config_cmd (&remote_protocol_packets[PACKET_qGetTIBAddr],
14186                          "qGetTIBAddr", "get-thread-information-block-address",
14187                          0);
14188
14189   add_packet_config_cmd (&remote_protocol_packets[PACKET_bc],
14190                          "bc", "reverse-continue", 0);
14191
14192   add_packet_config_cmd (&remote_protocol_packets[PACKET_bs],
14193                          "bs", "reverse-step", 0);
14194
14195   add_packet_config_cmd (&remote_protocol_packets[PACKET_qSupported],
14196                          "qSupported", "supported-packets", 0);
14197
14198   add_packet_config_cmd (&remote_protocol_packets[PACKET_qSearch_memory],
14199                          "qSearch:memory", "search-memory", 0);
14200
14201   add_packet_config_cmd (&remote_protocol_packets[PACKET_qTStatus],
14202                          "qTStatus", "trace-status", 0);
14203
14204   add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_setfs],
14205                          "vFile:setfs", "hostio-setfs", 0);
14206
14207   add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_open],
14208                          "vFile:open", "hostio-open", 0);
14209
14210   add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_pread],
14211                          "vFile:pread", "hostio-pread", 0);
14212
14213   add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_pwrite],
14214                          "vFile:pwrite", "hostio-pwrite", 0);
14215
14216   add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_close],
14217                          "vFile:close", "hostio-close", 0);
14218
14219   add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_unlink],
14220                          "vFile:unlink", "hostio-unlink", 0);
14221
14222   add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_readlink],
14223                          "vFile:readlink", "hostio-readlink", 0);
14224
14225   add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_fstat],
14226                          "vFile:fstat", "hostio-fstat", 0);
14227
14228   add_packet_config_cmd (&remote_protocol_packets[PACKET_vAttach],
14229                          "vAttach", "attach", 0);
14230
14231   add_packet_config_cmd (&remote_protocol_packets[PACKET_vRun],
14232                          "vRun", "run", 0);
14233
14234   add_packet_config_cmd (&remote_protocol_packets[PACKET_QStartNoAckMode],
14235                          "QStartNoAckMode", "noack", 0);
14236
14237   add_packet_config_cmd (&remote_protocol_packets[PACKET_vKill],
14238                          "vKill", "kill", 0);
14239
14240   add_packet_config_cmd (&remote_protocol_packets[PACKET_qAttached],
14241                          "qAttached", "query-attached", 0);
14242
14243   add_packet_config_cmd (&remote_protocol_packets[PACKET_ConditionalTracepoints],
14244                          "ConditionalTracepoints",
14245                          "conditional-tracepoints", 0);
14246
14247   add_packet_config_cmd (&remote_protocol_packets[PACKET_ConditionalBreakpoints],
14248                          "ConditionalBreakpoints",
14249                          "conditional-breakpoints", 0);
14250
14251   add_packet_config_cmd (&remote_protocol_packets[PACKET_BreakpointCommands],
14252                          "BreakpointCommands",
14253                          "breakpoint-commands", 0);
14254
14255   add_packet_config_cmd (&remote_protocol_packets[PACKET_FastTracepoints],
14256                          "FastTracepoints", "fast-tracepoints", 0);
14257
14258   add_packet_config_cmd (&remote_protocol_packets[PACKET_TracepointSource],
14259                          "TracepointSource", "TracepointSource", 0);
14260
14261   add_packet_config_cmd (&remote_protocol_packets[PACKET_QAllow],
14262                          "QAllow", "allow", 0);
14263
14264   add_packet_config_cmd (&remote_protocol_packets[PACKET_StaticTracepoints],
14265                          "StaticTracepoints", "static-tracepoints", 0);
14266
14267   add_packet_config_cmd (&remote_protocol_packets[PACKET_InstallInTrace],
14268                          "InstallInTrace", "install-in-trace", 0);
14269
14270   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_statictrace_read],
14271                          "qXfer:statictrace:read", "read-sdata-object", 0);
14272
14273   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_fdpic],
14274                          "qXfer:fdpic:read", "read-fdpic-loadmap", 0);
14275
14276   add_packet_config_cmd (&remote_protocol_packets[PACKET_QDisableRandomization],
14277                          "QDisableRandomization", "disable-randomization", 0);
14278
14279   add_packet_config_cmd (&remote_protocol_packets[PACKET_QAgent],
14280                          "QAgent", "agent", 0);
14281
14282   add_packet_config_cmd (&remote_protocol_packets[PACKET_QTBuffer_size],
14283                          "QTBuffer:size", "trace-buffer-size", 0);
14284
14285   add_packet_config_cmd (&remote_protocol_packets[PACKET_Qbtrace_off],
14286        "Qbtrace:off", "disable-btrace", 0);
14287
14288   add_packet_config_cmd (&remote_protocol_packets[PACKET_Qbtrace_bts],
14289        "Qbtrace:bts", "enable-btrace-bts", 0);
14290
14291   add_packet_config_cmd (&remote_protocol_packets[PACKET_Qbtrace_pt],
14292        "Qbtrace:pt", "enable-btrace-pt", 0);
14293
14294   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_btrace],
14295        "qXfer:btrace", "read-btrace", 0);
14296
14297   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_btrace_conf],
14298        "qXfer:btrace-conf", "read-btrace-conf", 0);
14299
14300   add_packet_config_cmd (&remote_protocol_packets[PACKET_Qbtrace_conf_bts_size],
14301        "Qbtrace-conf:bts:size", "btrace-conf-bts-size", 0);
14302
14303   add_packet_config_cmd (&remote_protocol_packets[PACKET_multiprocess_feature],
14304        "multiprocess-feature", "multiprocess-feature", 0);
14305
14306   add_packet_config_cmd (&remote_protocol_packets[PACKET_swbreak_feature],
14307                          "swbreak-feature", "swbreak-feature", 0);
14308
14309   add_packet_config_cmd (&remote_protocol_packets[PACKET_hwbreak_feature],
14310                          "hwbreak-feature", "hwbreak-feature", 0);
14311
14312   add_packet_config_cmd (&remote_protocol_packets[PACKET_fork_event_feature],
14313                          "fork-event-feature", "fork-event-feature", 0);
14314
14315   add_packet_config_cmd (&remote_protocol_packets[PACKET_vfork_event_feature],
14316                          "vfork-event-feature", "vfork-event-feature", 0);
14317
14318   add_packet_config_cmd (&remote_protocol_packets[PACKET_Qbtrace_conf_pt_size],
14319        "Qbtrace-conf:pt:size", "btrace-conf-pt-size", 0);
14320
14321   add_packet_config_cmd (&remote_protocol_packets[PACKET_vContSupported],
14322                          "vContSupported", "verbose-resume-supported", 0);
14323
14324   add_packet_config_cmd (&remote_protocol_packets[PACKET_exec_event_feature],
14325                          "exec-event-feature", "exec-event-feature", 0);
14326
14327   add_packet_config_cmd (&remote_protocol_packets[PACKET_vCtrlC],
14328                          "vCtrlC", "ctrl-c", 0);
14329
14330   add_packet_config_cmd (&remote_protocol_packets[PACKET_QThreadEvents],
14331                          "QThreadEvents", "thread-events", 0);
14332
14333   add_packet_config_cmd (&remote_protocol_packets[PACKET_no_resumed],
14334                          "N stop reply", "no-resumed-stop-reply", 0);
14335
14336   /* Assert that we've registered "set remote foo-packet" commands
14337      for all packet configs.  */
14338   {
14339     int i;
14340
14341     for (i = 0; i < PACKET_MAX; i++)
14342       {
14343         /* Ideally all configs would have a command associated.  Some
14344            still don't though.  */
14345         int excepted;
14346
14347         switch (i)
14348           {
14349           case PACKET_QNonStop:
14350           case PACKET_EnableDisableTracepoints_feature:
14351           case PACKET_tracenz_feature:
14352           case PACKET_DisconnectedTracing_feature:
14353           case PACKET_augmented_libraries_svr4_read_feature:
14354           case PACKET_qCRC:
14355             /* Additions to this list need to be well justified:
14356                pre-existing packets are OK; new packets are not.  */
14357             excepted = 1;
14358             break;
14359           default:
14360             excepted = 0;
14361             break;
14362           }
14363
14364         /* This catches both forgetting to add a config command, and
14365            forgetting to remove a packet from the exception list.  */
14366         gdb_assert (excepted == (remote_protocol_packets[i].name == NULL));
14367       }
14368   }
14369
14370   /* Keep the old ``set remote Z-packet ...'' working.  Each individual
14371      Z sub-packet has its own set and show commands, but users may
14372      have sets to this variable in their .gdbinit files (or in their
14373      documentation).  */
14374   add_setshow_auto_boolean_cmd ("Z-packet", class_obscure,
14375                                 &remote_Z_packet_detect, _("\
14376 Set use of remote protocol `Z' packets"), _("\
14377 Show use of remote protocol `Z' packets "), _("\
14378 When set, GDB will attempt to use the remote breakpoint and watchpoint\n\
14379 packets."),
14380                                 set_remote_protocol_Z_packet_cmd,
14381                                 show_remote_protocol_Z_packet_cmd,
14382                                 /* FIXME: i18n: Use of remote protocol
14383                                    `Z' packets is %s.  */
14384                                 &remote_set_cmdlist, &remote_show_cmdlist);
14385
14386   add_prefix_cmd ("remote", class_files, remote_command, _("\
14387 Manipulate files on the remote system\n\
14388 Transfer files to and from the remote target system."),
14389                   &remote_cmdlist, "remote ",
14390                   0 /* allow-unknown */, &cmdlist);
14391
14392   add_cmd ("put", class_files, remote_put_command,
14393            _("Copy a local file to the remote system."),
14394            &remote_cmdlist);
14395
14396   add_cmd ("get", class_files, remote_get_command,
14397            _("Copy a remote file to the local system."),
14398            &remote_cmdlist);
14399
14400   add_cmd ("delete", class_files, remote_delete_command,
14401            _("Delete a remote file."),
14402            &remote_cmdlist);
14403
14404   add_setshow_string_noescape_cmd ("exec-file", class_files,
14405                                    &remote_exec_file_var, _("\
14406 Set the remote pathname for \"run\""), _("\
14407 Show the remote pathname for \"run\""), NULL,
14408                                    set_remote_exec_file,
14409                                    show_remote_exec_file,
14410                                    &remote_set_cmdlist,
14411                                    &remote_show_cmdlist);
14412
14413   add_setshow_boolean_cmd ("range-stepping", class_run,
14414                            &use_range_stepping, _("\
14415 Enable or disable range stepping."), _("\
14416 Show whether target-assisted range stepping is enabled."), _("\
14417 If on, and the target supports it, when stepping a source line, GDB\n\
14418 tells the target to step the corresponding range of addresses itself instead\n\
14419 of issuing multiple single-steps.  This speeds up source level\n\
14420 stepping.  If off, GDB always issues single-steps, even if range\n\
14421 stepping is supported by the target.  The default is on."),
14422                            set_range_stepping,
14423                            show_range_stepping,
14424                            &setlist,
14425                            &showlist);
14426
14427   /* Eventually initialize fileio.  See fileio.c */
14428   initialize_remote_fileio (remote_set_cmdlist, remote_show_cmdlist);
14429
14430   /* Take advantage of the fact that the TID field is not used, to tag
14431      special ptids with it set to != 0.  */
14432   magic_null_ptid = ptid_build (42000, -1, 1);
14433   not_sent_ptid = ptid_build (42000, -2, 1);
14434   any_thread_ptid = ptid_build (42000, 0, 1);
14435
14436   target_buf_size = 2048;
14437   target_buf = (char *) xmalloc (target_buf_size);
14438 }
14439