Set dynamic tag VMA and size from dynamic section when possible
[external/binutils.git] / gdb / remote.c
1 /* Remote target communications for serial-line targets in custom GDB protocol
2
3    Copyright (C) 1988-2016 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
74 /* Temp hacks for tracepoint encoding migration.  */
75 static char *target_buf;
76 static long target_buf_size;
77
78 /* Per-program-space data key.  */
79 static const struct program_space_data *remote_pspace_data;
80
81 /* The variable registered as the control variable used by the
82    remote exec-file commands.  While the remote exec-file setting is
83    per-program-space, the set/show machinery uses this as the 
84    location of the remote exec-file value.  */
85 static char *remote_exec_file_var;
86
87 /* The size to align memory write packets, when practical.  The protocol
88    does not guarantee any alignment, and gdb will generate short
89    writes and unaligned writes, but even as a best-effort attempt this
90    can improve bulk transfers.  For instance, if a write is misaligned
91    relative to the target's data bus, the stub may need to make an extra
92    round trip fetching data from the target.  This doesn't make a
93    huge difference, but it's easy to do, so we try to be helpful.
94
95    The alignment chosen is arbitrary; usually data bus width is
96    important here, not the possibly larger cache line size.  */
97 enum { REMOTE_ALIGN_WRITES = 16 };
98
99 /* Prototypes for local functions.  */
100 static int getpkt_sane (char **buf, long *sizeof_buf, int forever);
101 static int getpkt_or_notif_sane (char **buf, long *sizeof_buf,
102                                  int forever, int *is_notif);
103
104 static void remote_files_info (struct target_ops *ignore);
105
106 static void remote_prepare_to_store (struct target_ops *self,
107                                      struct regcache *regcache);
108
109 static void remote_open_1 (const char *, int, struct target_ops *,
110                            int extended_p);
111
112 static void remote_close (struct target_ops *self);
113
114 struct remote_state;
115
116 static int remote_vkill (int pid, struct remote_state *rs);
117
118 static void remote_kill_k (void);
119
120 static void remote_mourn (struct target_ops *ops);
121
122 static void extended_remote_restart (void);
123
124 static void remote_send (char **buf, long *sizeof_buf_p);
125
126 static int readchar (int timeout);
127
128 static void remote_serial_write (const char *str, int len);
129
130 static void remote_kill (struct target_ops *ops);
131
132 static int remote_can_async_p (struct target_ops *);
133
134 static int remote_is_async_p (struct target_ops *);
135
136 static void remote_async (struct target_ops *ops, int enable);
137
138 static void remote_thread_events (struct target_ops *ops, int enable);
139
140 static void interrupt_query (void);
141
142 static void set_general_thread (struct ptid ptid);
143 static void set_continue_thread (struct ptid ptid);
144
145 static void get_offsets (void);
146
147 static void skip_frame (void);
148
149 static long read_frame (char **buf_p, long *sizeof_buf);
150
151 static int hexnumlen (ULONGEST num);
152
153 static void init_remote_ops (void);
154
155 static void init_extended_remote_ops (void);
156
157 static void remote_stop (struct target_ops *self, ptid_t);
158
159 static int stubhex (int ch);
160
161 static int hexnumstr (char *, ULONGEST);
162
163 static int hexnumnstr (char *, ULONGEST, int);
164
165 static CORE_ADDR remote_address_masked (CORE_ADDR);
166
167 static void print_packet (const char *);
168
169 static void compare_sections_command (char *, int);
170
171 static void packet_command (char *, int);
172
173 static int stub_unpack_int (char *buff, int fieldlength);
174
175 static ptid_t remote_current_thread (ptid_t oldptid);
176
177 static int putpkt_binary (const char *buf, int cnt);
178
179 static void check_binary_download (CORE_ADDR addr);
180
181 struct packet_config;
182
183 static void show_packet_config_cmd (struct packet_config *config);
184
185 static void show_remote_protocol_packet_cmd (struct ui_file *file,
186                                              int from_tty,
187                                              struct cmd_list_element *c,
188                                              const char *value);
189
190 static char *write_ptid (char *buf, const char *endbuf, ptid_t ptid);
191 static ptid_t read_ptid (char *buf, char **obuf);
192
193 static void remote_set_permissions (struct target_ops *self);
194
195 static int remote_get_trace_status (struct target_ops *self,
196                                     struct trace_status *ts);
197
198 static int remote_upload_tracepoints (struct target_ops *self,
199                                       struct uploaded_tp **utpp);
200
201 static int remote_upload_trace_state_variables (struct target_ops *self,
202                                                 struct uploaded_tsv **utsvp);
203   
204 static void remote_query_supported (void);
205
206 static void remote_check_symbols (void);
207
208 void _initialize_remote (void);
209
210 struct stop_reply;
211 static void stop_reply_xfree (struct stop_reply *);
212 static void remote_parse_stop_reply (char *, struct stop_reply *);
213 static void push_stop_reply (struct stop_reply *);
214 static void discard_pending_stop_replies_in_queue (struct remote_state *);
215 static int peek_stop_reply (ptid_t ptid);
216
217 struct threads_listing_context;
218 static void remove_new_fork_children (struct threads_listing_context *);
219
220 static void remote_async_inferior_event_handler (gdb_client_data);
221
222 static void remote_terminal_ours (struct target_ops *self);
223
224 static int remote_read_description_p (struct target_ops *target);
225
226 static void remote_console_output (char *msg);
227
228 static int remote_supports_cond_breakpoints (struct target_ops *self);
229
230 static int remote_can_run_breakpoint_commands (struct target_ops *self);
231
232 static void remote_btrace_reset (void);
233
234 static int stop_reply_queue_length (void);
235
236 static void readahead_cache_invalidate (void);
237
238 static void remote_unpush_and_throw (void);
239
240 /* For "remote".  */
241
242 static struct cmd_list_element *remote_cmdlist;
243
244 /* For "set remote" and "show remote".  */
245
246 static struct cmd_list_element *remote_set_cmdlist;
247 static struct cmd_list_element *remote_show_cmdlist;
248
249 /* Stub vCont actions support.
250
251    Each field is a boolean flag indicating whether the stub reports
252    support for the corresponding action.  */
253
254 struct vCont_action_support
255 {
256   /* vCont;t */
257   int t;
258
259   /* vCont;r */
260   int r;
261
262   /* vCont;s */
263   int s;
264
265   /* vCont;S */
266   int S;
267 };
268
269 /* Controls whether GDB is willing to use range stepping.  */
270
271 static int use_range_stepping = 1;
272
273 #define OPAQUETHREADBYTES 8
274
275 /* a 64 bit opaque identifier */
276 typedef unsigned char threadref[OPAQUETHREADBYTES];
277
278 /* About this many threadisds fit in a packet.  */
279
280 #define MAXTHREADLISTRESULTS 32
281
282 /* Data for the vFile:pread readahead cache.  */
283
284 struct readahead_cache
285 {
286   /* The file descriptor for the file that is being cached.  -1 if the
287      cache is invalid.  */
288   int fd;
289
290   /* The offset into the file that the cache buffer corresponds
291      to.  */
292   ULONGEST offset;
293
294   /* The buffer holding the cache contents.  */
295   gdb_byte *buf;
296   /* The buffer's size.  We try to read as much as fits into a packet
297      at a time.  */
298   size_t bufsize;
299
300   /* Cache hit and miss counters.  */
301   ULONGEST hit_count;
302   ULONGEST miss_count;
303 };
304
305 /* Description of the remote protocol state for the currently
306    connected target.  This is per-target state, and independent of the
307    selected architecture.  */
308
309 struct remote_state
310 {
311   /* A buffer to use for incoming packets, and its current size.  The
312      buffer is grown dynamically for larger incoming packets.
313      Outgoing packets may also be constructed in this buffer.
314      BUF_SIZE is always at least REMOTE_PACKET_SIZE;
315      REMOTE_PACKET_SIZE should be used to limit the length of outgoing
316      packets.  */
317   char *buf;
318   long buf_size;
319
320   /* True if we're going through initial connection setup (finding out
321      about the remote side's threads, relocating symbols, etc.).  */
322   int starting_up;
323
324   /* If we negotiated packet size explicitly (and thus can bypass
325      heuristics for the largest packet size that will not overflow
326      a buffer in the stub), this will be set to that packet size.
327      Otherwise zero, meaning to use the guessed size.  */
328   long explicit_packet_size;
329
330   /* remote_wait is normally called when the target is running and
331      waits for a stop reply packet.  But sometimes we need to call it
332      when the target is already stopped.  We can send a "?" packet
333      and have remote_wait read the response.  Or, if we already have
334      the response, we can stash it in BUF and tell remote_wait to
335      skip calling getpkt.  This flag is set when BUF contains a
336      stop reply packet and the target is not waiting.  */
337   int cached_wait_status;
338
339   /* True, if in no ack mode.  That is, neither GDB nor the stub will
340      expect acks from each other.  The connection is assumed to be
341      reliable.  */
342   int noack_mode;
343
344   /* True if we're connected in extended remote mode.  */
345   int extended;
346
347   /* True if we resumed the target and we're waiting for the target to
348      stop.  In the mean time, we can't start another command/query.
349      The remote server wouldn't be ready to process it, so we'd
350      timeout waiting for a reply that would never come and eventually
351      we'd close the connection.  This can happen in asynchronous mode
352      because we allow GDB commands while the target is running.  */
353   int waiting_for_stop_reply;
354
355   /* The status of the stub support for the various vCont actions.  */
356   struct vCont_action_support supports_vCont;
357
358   /* Nonzero if the user has pressed Ctrl-C, but the target hasn't
359      responded to that.  */
360   int ctrlc_pending_p;
361
362   /* True if we saw a Ctrl-C while reading or writing from/to the
363      remote descriptor.  At that point it is not safe to send a remote
364      interrupt packet, so we instead remember we saw the Ctrl-C and
365      process it once we're done with sending/receiving the current
366      packet, which should be shortly.  If however that takes too long,
367      and the user presses Ctrl-C again, we offer to disconnect.  */
368   int got_ctrlc_during_io;
369
370   /* Descriptor for I/O to remote machine.  Initialize it to NULL so that
371      remote_open knows that we don't have a file open when the program
372      starts.  */
373   struct serial *remote_desc;
374
375   /* These are the threads which we last sent to the remote system.  The
376      TID member will be -1 for all or -2 for not sent yet.  */
377   ptid_t general_thread;
378   ptid_t continue_thread;
379
380   /* This is the traceframe which we last selected on the remote system.
381      It will be -1 if no traceframe is selected.  */
382   int remote_traceframe_number;
383
384   char *last_pass_packet;
385
386   /* The last QProgramSignals packet sent to the target.  We bypass
387      sending a new program signals list down to the target if the new
388      packet is exactly the same as the last we sent.  IOW, we only let
389      the target know about program signals list changes.  */
390   char *last_program_signals_packet;
391
392   enum gdb_signal last_sent_signal;
393
394   int last_sent_step;
395
396   /* The execution direction of the last resume we got.  */
397   enum exec_direction_kind last_resume_exec_dir;
398
399   char *finished_object;
400   char *finished_annex;
401   ULONGEST finished_offset;
402
403   /* Should we try the 'ThreadInfo' query packet?
404
405      This variable (NOT available to the user: auto-detect only!)
406      determines whether GDB will use the new, simpler "ThreadInfo"
407      query or the older, more complex syntax for thread queries.
408      This is an auto-detect variable (set to true at each connect,
409      and set to false when the target fails to recognize it).  */
410   int use_threadinfo_query;
411   int use_threadextra_query;
412
413   threadref echo_nextthread;
414   threadref nextthread;
415   threadref resultthreadlist[MAXTHREADLISTRESULTS];
416
417   /* The state of remote notification.  */
418   struct remote_notif_state *notif_state;
419
420   /* The branch trace configuration.  */
421   struct btrace_config btrace_config;
422
423   /* The argument to the last "vFile:setfs:" packet we sent, used
424      to avoid sending repeated unnecessary "vFile:setfs:" packets.
425      Initialized to -1 to indicate that no "vFile:setfs:" packet
426      has yet been sent.  */
427   int fs_pid;
428
429   /* A readahead cache for vFile:pread.  Often, reading a binary
430      involves a sequence of small reads.  E.g., when parsing an ELF
431      file.  A readahead cache helps mostly the case of remote
432      debugging on a connection with higher latency, due to the
433      request/reply nature of the RSP.  We only cache data for a single
434      file descriptor at a time.  */
435   struct readahead_cache readahead_cache;
436 };
437
438 /* Private data that we'll store in (struct thread_info)->private.  */
439 struct private_thread_info
440 {
441   char *extra;
442   char *name;
443   int core;
444
445   /* Whether the target stopped for a breakpoint/watchpoint.  */
446   enum target_stop_reason stop_reason;
447
448   /* This is set to the data address of the access causing the target
449      to stop for a watchpoint.  */
450   CORE_ADDR watch_data_address;
451 };
452
453 static void
454 free_private_thread_info (struct private_thread_info *info)
455 {
456   xfree (info->extra);
457   xfree (info->name);
458   xfree (info);
459 }
460
461 /* This data could be associated with a target, but we do not always
462    have access to the current target when we need it, so for now it is
463    static.  This will be fine for as long as only one target is in use
464    at a time.  */
465 static struct remote_state *remote_state;
466
467 static struct remote_state *
468 get_remote_state_raw (void)
469 {
470   return remote_state;
471 }
472
473 /* Allocate a new struct remote_state with xmalloc, initialize it, and
474    return it.  */
475
476 static struct remote_state *
477 new_remote_state (void)
478 {
479   struct remote_state *result = XCNEW (struct remote_state);
480
481   /* The default buffer size is unimportant; it will be expanded
482      whenever a larger buffer is needed. */
483   result->buf_size = 400;
484   result->buf = (char *) xmalloc (result->buf_size);
485   result->remote_traceframe_number = -1;
486   result->last_sent_signal = GDB_SIGNAL_0;
487   result->last_resume_exec_dir = EXEC_FORWARD;
488   result->fs_pid = -1;
489
490   return result;
491 }
492
493 /* Description of the remote protocol for a given architecture.  */
494
495 struct packet_reg
496 {
497   long offset; /* Offset into G packet.  */
498   long regnum; /* GDB's internal register number.  */
499   LONGEST pnum; /* Remote protocol register number.  */
500   int in_g_packet; /* Always part of G packet.  */
501   /* long size in bytes;  == register_size (target_gdbarch (), regnum);
502      at present.  */
503   /* char *name; == gdbarch_register_name (target_gdbarch (), regnum);
504      at present.  */
505 };
506
507 struct remote_arch_state
508 {
509   /* Description of the remote protocol registers.  */
510   long sizeof_g_packet;
511
512   /* Description of the remote protocol registers indexed by REGNUM
513      (making an array gdbarch_num_regs in size).  */
514   struct packet_reg *regs;
515
516   /* This is the size (in chars) of the first response to the ``g''
517      packet.  It is used as a heuristic when determining the maximum
518      size of memory-read and memory-write packets.  A target will
519      typically only reserve a buffer large enough to hold the ``g''
520      packet.  The size does not include packet overhead (headers and
521      trailers).  */
522   long actual_register_packet_size;
523
524   /* This is the maximum size (in chars) of a non read/write packet.
525      It is also used as a cap on the size of read/write packets.  */
526   long remote_packet_size;
527 };
528
529 /* Utility: generate error from an incoming stub packet.  */
530 static void
531 trace_error (char *buf)
532 {
533   if (*buf++ != 'E')
534     return;                     /* not an error msg */
535   switch (*buf)
536     {
537     case '1':                   /* malformed packet error */
538       if (*++buf == '0')        /*   general case: */
539         error (_("remote.c: error in outgoing packet."));
540       else
541         error (_("remote.c: error in outgoing packet at field #%ld."),
542                strtol (buf, NULL, 16));
543     default:
544       error (_("Target returns error code '%s'."), buf);
545     }
546 }
547
548 /* Utility: wait for reply from stub, while accepting "O" packets.  */
549 static char *
550 remote_get_noisy_reply (char **buf_p,
551                         long *sizeof_buf)
552 {
553   do                            /* Loop on reply from remote stub.  */
554     {
555       char *buf;
556
557       QUIT;                     /* Allow user to bail out with ^C.  */
558       getpkt (buf_p, sizeof_buf, 0);
559       buf = *buf_p;
560       if (buf[0] == 'E')
561         trace_error (buf);
562       else if (startswith (buf, "qRelocInsn:"))
563         {
564           ULONGEST ul;
565           CORE_ADDR from, to, org_to;
566           char *p, *pp;
567           int adjusted_size = 0;
568           int relocated = 0;
569
570           p = buf + strlen ("qRelocInsn:");
571           pp = unpack_varlen_hex (p, &ul);
572           if (*pp != ';')
573             error (_("invalid qRelocInsn packet: %s"), buf);
574           from = ul;
575
576           p = pp + 1;
577           unpack_varlen_hex (p, &ul);
578           to = ul;
579
580           org_to = to;
581
582           TRY
583             {
584               gdbarch_relocate_instruction (target_gdbarch (), &to, from);
585               relocated = 1;
586             }
587           CATCH (ex, RETURN_MASK_ALL)
588             {
589               if (ex.error == MEMORY_ERROR)
590                 {
591                   /* Propagate memory errors silently back to the
592                      target.  The stub may have limited the range of
593                      addresses we can write to, for example.  */
594                 }
595               else
596                 {
597                   /* Something unexpectedly bad happened.  Be verbose
598                      so we can tell what, and propagate the error back
599                      to the stub, so it doesn't get stuck waiting for
600                      a response.  */
601                   exception_fprintf (gdb_stderr, ex,
602                                      _("warning: relocating instruction: "));
603                 }
604               putpkt ("E01");
605             }
606           END_CATCH
607
608           if (relocated)
609             {
610               adjusted_size = to - org_to;
611
612               xsnprintf (buf, *sizeof_buf, "qRelocInsn:%x", adjusted_size);
613               putpkt (buf);
614             }
615         }
616       else if (buf[0] == 'O' && buf[1] != 'K')
617         remote_console_output (buf + 1);        /* 'O' message from stub */
618       else
619         return buf;             /* Here's the actual reply.  */
620     }
621   while (1);
622 }
623
624 /* Handle for retreving the remote protocol data from gdbarch.  */
625 static struct gdbarch_data *remote_gdbarch_data_handle;
626
627 static struct remote_arch_state *
628 get_remote_arch_state (void)
629 {
630   gdb_assert (target_gdbarch () != NULL);
631   return ((struct remote_arch_state *)
632           gdbarch_data (target_gdbarch (), remote_gdbarch_data_handle));
633 }
634
635 /* Fetch the global remote target state.  */
636
637 static struct remote_state *
638 get_remote_state (void)
639 {
640   /* Make sure that the remote architecture state has been
641      initialized, because doing so might reallocate rs->buf.  Any
642      function which calls getpkt also needs to be mindful of changes
643      to rs->buf, but this call limits the number of places which run
644      into trouble.  */
645   get_remote_arch_state ();
646
647   return get_remote_state_raw ();
648 }
649
650 /* Cleanup routine for the remote module's pspace data.  */
651
652 static void
653 remote_pspace_data_cleanup (struct program_space *pspace, void *arg)
654 {
655   char *remote_exec_file = (char *) arg;
656
657   xfree (remote_exec_file);
658 }
659
660 /* Fetch the remote exec-file from the current program space.  */
661
662 static const char *
663 get_remote_exec_file (void)
664 {
665   char *remote_exec_file;
666
667   remote_exec_file
668     = (char *) program_space_data (current_program_space,
669                                    remote_pspace_data);
670   if (remote_exec_file == NULL)
671     return "";
672
673   return remote_exec_file;
674 }
675
676 /* Set the remote exec file for PSPACE.  */
677
678 static void
679 set_pspace_remote_exec_file (struct program_space *pspace,
680                         char *remote_exec_file)
681 {
682   char *old_file = (char *) program_space_data (pspace, remote_pspace_data);
683
684   xfree (old_file);
685   set_program_space_data (pspace, remote_pspace_data,
686                           xstrdup (remote_exec_file));
687 }
688
689 /* The "set/show remote exec-file" set command hook.  */
690
691 static void
692 set_remote_exec_file (char *ignored, int from_tty,
693                       struct cmd_list_element *c)
694 {
695   gdb_assert (remote_exec_file_var != NULL);
696   set_pspace_remote_exec_file (current_program_space, remote_exec_file_var);
697 }
698
699 /* The "set/show remote exec-file" show command hook.  */
700
701 static void
702 show_remote_exec_file (struct ui_file *file, int from_tty,
703                        struct cmd_list_element *cmd, const char *value)
704 {
705   fprintf_filtered (file, "%s\n", remote_exec_file_var);
706 }
707
708 static int
709 compare_pnums (const void *lhs_, const void *rhs_)
710 {
711   const struct packet_reg * const *lhs
712     = (const struct packet_reg * const *) lhs_;
713   const struct packet_reg * const *rhs
714     = (const struct packet_reg * const *) rhs_;
715
716   if ((*lhs)->pnum < (*rhs)->pnum)
717     return -1;
718   else if ((*lhs)->pnum == (*rhs)->pnum)
719     return 0;
720   else
721     return 1;
722 }
723
724 static int
725 map_regcache_remote_table (struct gdbarch *gdbarch, struct packet_reg *regs)
726 {
727   int regnum, num_remote_regs, offset;
728   struct packet_reg **remote_regs;
729
730   for (regnum = 0; regnum < gdbarch_num_regs (gdbarch); regnum++)
731     {
732       struct packet_reg *r = &regs[regnum];
733
734       if (register_size (gdbarch, regnum) == 0)
735         /* Do not try to fetch zero-sized (placeholder) registers.  */
736         r->pnum = -1;
737       else
738         r->pnum = gdbarch_remote_register_number (gdbarch, regnum);
739
740       r->regnum = regnum;
741     }
742
743   /* Define the g/G packet format as the contents of each register
744      with a remote protocol number, in order of ascending protocol
745      number.  */
746
747   remote_regs = XALLOCAVEC (struct packet_reg *, gdbarch_num_regs (gdbarch));
748   for (num_remote_regs = 0, regnum = 0;
749        regnum < gdbarch_num_regs (gdbarch);
750        regnum++)
751     if (regs[regnum].pnum != -1)
752       remote_regs[num_remote_regs++] = &regs[regnum];
753
754   qsort (remote_regs, num_remote_regs, sizeof (struct packet_reg *),
755          compare_pnums);
756
757   for (regnum = 0, offset = 0; regnum < num_remote_regs; regnum++)
758     {
759       remote_regs[regnum]->in_g_packet = 1;
760       remote_regs[regnum]->offset = offset;
761       offset += register_size (gdbarch, remote_regs[regnum]->regnum);
762     }
763
764   return offset;
765 }
766
767 /* Given the architecture described by GDBARCH, return the remote
768    protocol register's number and the register's offset in the g/G
769    packets of GDB register REGNUM, in PNUM and POFFSET respectively.
770    If the target does not have a mapping for REGNUM, return false,
771    otherwise, return true.  */
772
773 int
774 remote_register_number_and_offset (struct gdbarch *gdbarch, int regnum,
775                                    int *pnum, int *poffset)
776 {
777   struct packet_reg *regs;
778   struct cleanup *old_chain;
779
780   gdb_assert (regnum < gdbarch_num_regs (gdbarch));
781
782   regs = XCNEWVEC (struct packet_reg, gdbarch_num_regs (gdbarch));
783   old_chain = make_cleanup (xfree, regs);
784
785   map_regcache_remote_table (gdbarch, regs);
786
787   *pnum = regs[regnum].pnum;
788   *poffset = regs[regnum].offset;
789
790   do_cleanups (old_chain);
791
792   return *pnum != -1;
793 }
794
795 static void *
796 init_remote_state (struct gdbarch *gdbarch)
797 {
798   struct remote_state *rs = get_remote_state_raw ();
799   struct remote_arch_state *rsa;
800
801   rsa = GDBARCH_OBSTACK_ZALLOC (gdbarch, struct remote_arch_state);
802
803   /* Use the architecture to build a regnum<->pnum table, which will be
804      1:1 unless a feature set specifies otherwise.  */
805   rsa->regs = GDBARCH_OBSTACK_CALLOC (gdbarch,
806                                       gdbarch_num_regs (gdbarch),
807                                       struct packet_reg);
808
809   /* Record the maximum possible size of the g packet - it may turn out
810      to be smaller.  */
811   rsa->sizeof_g_packet = map_regcache_remote_table (gdbarch, rsa->regs);
812
813   /* Default maximum number of characters in a packet body.  Many
814      remote stubs have a hardwired buffer size of 400 bytes
815      (c.f. BUFMAX in m68k-stub.c and i386-stub.c).  BUFMAX-1 is used
816      as the maximum packet-size to ensure that the packet and an extra
817      NUL character can always fit in the buffer.  This stops GDB
818      trashing stubs that try to squeeze an extra NUL into what is
819      already a full buffer (As of 1999-12-04 that was most stubs).  */
820   rsa->remote_packet_size = 400 - 1;
821
822   /* This one is filled in when a ``g'' packet is received.  */
823   rsa->actual_register_packet_size = 0;
824
825   /* Should rsa->sizeof_g_packet needs more space than the
826      default, adjust the size accordingly.  Remember that each byte is
827      encoded as two characters.  32 is the overhead for the packet
828      header / footer.  NOTE: cagney/1999-10-26: I suspect that 8
829      (``$NN:G...#NN'') is a better guess, the below has been padded a
830      little.  */
831   if (rsa->sizeof_g_packet > ((rsa->remote_packet_size - 32) / 2))
832     rsa->remote_packet_size = (rsa->sizeof_g_packet * 2 + 32);
833
834   /* Make sure that the packet buffer is plenty big enough for
835      this architecture.  */
836   if (rs->buf_size < rsa->remote_packet_size)
837     {
838       rs->buf_size = 2 * rsa->remote_packet_size;
839       rs->buf = (char *) xrealloc (rs->buf, rs->buf_size);
840     }
841
842   return rsa;
843 }
844
845 /* Return the current allowed size of a remote packet.  This is
846    inferred from the current architecture, and should be used to
847    limit the length of outgoing packets.  */
848 static long
849 get_remote_packet_size (void)
850 {
851   struct remote_state *rs = get_remote_state ();
852   struct remote_arch_state *rsa = get_remote_arch_state ();
853
854   if (rs->explicit_packet_size)
855     return rs->explicit_packet_size;
856
857   return rsa->remote_packet_size;
858 }
859
860 static struct packet_reg *
861 packet_reg_from_regnum (struct remote_arch_state *rsa, long regnum)
862 {
863   if (regnum < 0 && regnum >= gdbarch_num_regs (target_gdbarch ()))
864     return NULL;
865   else
866     {
867       struct packet_reg *r = &rsa->regs[regnum];
868
869       gdb_assert (r->regnum == regnum);
870       return r;
871     }
872 }
873
874 static struct packet_reg *
875 packet_reg_from_pnum (struct remote_arch_state *rsa, LONGEST pnum)
876 {
877   int i;
878
879   for (i = 0; i < gdbarch_num_regs (target_gdbarch ()); i++)
880     {
881       struct packet_reg *r = &rsa->regs[i];
882
883       if (r->pnum == pnum)
884         return r;
885     }
886   return NULL;
887 }
888
889 static struct target_ops remote_ops;
890
891 static struct target_ops extended_remote_ops;
892
893 /* FIXME: cagney/1999-09-23: Even though getpkt was called with
894    ``forever'' still use the normal timeout mechanism.  This is
895    currently used by the ASYNC code to guarentee that target reads
896    during the initial connect always time-out.  Once getpkt has been
897    modified to return a timeout indication and, in turn
898    remote_wait()/wait_for_inferior() have gained a timeout parameter
899    this can go away.  */
900 static int wait_forever_enabled_p = 1;
901
902 /* Allow the user to specify what sequence to send to the remote
903    when he requests a program interruption: Although ^C is usually
904    what remote systems expect (this is the default, here), it is
905    sometimes preferable to send a break.  On other systems such
906    as the Linux kernel, a break followed by g, which is Magic SysRq g
907    is required in order to interrupt the execution.  */
908 const char interrupt_sequence_control_c[] = "Ctrl-C";
909 const char interrupt_sequence_break[] = "BREAK";
910 const char interrupt_sequence_break_g[] = "BREAK-g";
911 static const char *const interrupt_sequence_modes[] =
912   {
913     interrupt_sequence_control_c,
914     interrupt_sequence_break,
915     interrupt_sequence_break_g,
916     NULL
917   };
918 static const char *interrupt_sequence_mode = interrupt_sequence_control_c;
919
920 static void
921 show_interrupt_sequence (struct ui_file *file, int from_tty,
922                          struct cmd_list_element *c,
923                          const char *value)
924 {
925   if (interrupt_sequence_mode == interrupt_sequence_control_c)
926     fprintf_filtered (file,
927                       _("Send the ASCII ETX character (Ctrl-c) "
928                         "to the remote target to interrupt the "
929                         "execution of the program.\n"));
930   else if (interrupt_sequence_mode == interrupt_sequence_break)
931     fprintf_filtered (file,
932                       _("send a break signal to the remote target "
933                         "to interrupt the execution of the program.\n"));
934   else if (interrupt_sequence_mode == interrupt_sequence_break_g)
935     fprintf_filtered (file,
936                       _("Send a break signal and 'g' a.k.a. Magic SysRq g to "
937                         "the remote target to interrupt the execution "
938                         "of Linux kernel.\n"));
939   else
940     internal_error (__FILE__, __LINE__,
941                     _("Invalid value for interrupt_sequence_mode: %s."),
942                     interrupt_sequence_mode);
943 }
944
945 /* This boolean variable specifies whether interrupt_sequence is sent
946    to the remote target when gdb connects to it.
947    This is mostly needed when you debug the Linux kernel: The Linux kernel
948    expects BREAK g which is Magic SysRq g for connecting gdb.  */
949 static int interrupt_on_connect = 0;
950
951 /* This variable is used to implement the "set/show remotebreak" commands.
952    Since these commands are now deprecated in favor of "set/show remote
953    interrupt-sequence", it no longer has any effect on the code.  */
954 static int remote_break;
955
956 static void
957 set_remotebreak (char *args, int from_tty, struct cmd_list_element *c)
958 {
959   if (remote_break)
960     interrupt_sequence_mode = interrupt_sequence_break;
961   else
962     interrupt_sequence_mode = interrupt_sequence_control_c;
963 }
964
965 static void
966 show_remotebreak (struct ui_file *file, int from_tty,
967                   struct cmd_list_element *c,
968                   const char *value)
969 {
970 }
971
972 /* This variable sets the number of bits in an address that are to be
973    sent in a memory ("M" or "m") packet.  Normally, after stripping
974    leading zeros, the entire address would be sent.  This variable
975    restricts the address to REMOTE_ADDRESS_SIZE bits.  HISTORY: The
976    initial implementation of remote.c restricted the address sent in
977    memory packets to ``host::sizeof long'' bytes - (typically 32
978    bits).  Consequently, for 64 bit targets, the upper 32 bits of an
979    address was never sent.  Since fixing this bug may cause a break in
980    some remote targets this variable is principly provided to
981    facilitate backward compatibility.  */
982
983 static unsigned int remote_address_size;
984
985 /* Temporary to track who currently owns the terminal.  See
986    remote_terminal_* for more details.  */
987
988 static int remote_async_terminal_ours_p;
989
990 \f
991 /* User configurable variables for the number of characters in a
992    memory read/write packet.  MIN (rsa->remote_packet_size,
993    rsa->sizeof_g_packet) is the default.  Some targets need smaller
994    values (fifo overruns, et.al.) and some users need larger values
995    (speed up transfers).  The variables ``preferred_*'' (the user
996    request), ``current_*'' (what was actually set) and ``forced_*''
997    (Positive - a soft limit, negative - a hard limit).  */
998
999 struct memory_packet_config
1000 {
1001   char *name;
1002   long size;
1003   int fixed_p;
1004 };
1005
1006 /* The default max memory-write-packet-size.  The 16k is historical.
1007    (It came from older GDB's using alloca for buffers and the
1008    knowledge (folklore?) that some hosts don't cope very well with
1009    large alloca calls.)  */
1010 #define DEFAULT_MAX_MEMORY_PACKET_SIZE 16384
1011
1012 /* The minimum remote packet size for memory transfers.  Ensures we
1013    can write at least one byte.  */
1014 #define MIN_MEMORY_PACKET_SIZE 20
1015
1016 /* Compute the current size of a read/write packet.  Since this makes
1017    use of ``actual_register_packet_size'' the computation is dynamic.  */
1018
1019 static long
1020 get_memory_packet_size (struct memory_packet_config *config)
1021 {
1022   struct remote_state *rs = get_remote_state ();
1023   struct remote_arch_state *rsa = get_remote_arch_state ();
1024
1025   long what_they_get;
1026   if (config->fixed_p)
1027     {
1028       if (config->size <= 0)
1029         what_they_get = DEFAULT_MAX_MEMORY_PACKET_SIZE;
1030       else
1031         what_they_get = config->size;
1032     }
1033   else
1034     {
1035       what_they_get = get_remote_packet_size ();
1036       /* Limit the packet to the size specified by the user.  */
1037       if (config->size > 0
1038           && what_they_get > config->size)
1039         what_they_get = config->size;
1040
1041       /* Limit it to the size of the targets ``g'' response unless we have
1042          permission from the stub to use a larger packet size.  */
1043       if (rs->explicit_packet_size == 0
1044           && rsa->actual_register_packet_size > 0
1045           && what_they_get > rsa->actual_register_packet_size)
1046         what_they_get = rsa->actual_register_packet_size;
1047     }
1048   if (what_they_get < MIN_MEMORY_PACKET_SIZE)
1049     what_they_get = MIN_MEMORY_PACKET_SIZE;
1050
1051   /* Make sure there is room in the global buffer for this packet
1052      (including its trailing NUL byte).  */
1053   if (rs->buf_size < what_they_get + 1)
1054     {
1055       rs->buf_size = 2 * what_they_get;
1056       rs->buf = (char *) xrealloc (rs->buf, 2 * what_they_get);
1057     }
1058
1059   return what_they_get;
1060 }
1061
1062 /* Update the size of a read/write packet.  If they user wants
1063    something really big then do a sanity check.  */
1064
1065 static void
1066 set_memory_packet_size (char *args, struct memory_packet_config *config)
1067 {
1068   int fixed_p = config->fixed_p;
1069   long size = config->size;
1070
1071   if (args == NULL)
1072     error (_("Argument required (integer, `fixed' or `limited')."));
1073   else if (strcmp (args, "hard") == 0
1074       || strcmp (args, "fixed") == 0)
1075     fixed_p = 1;
1076   else if (strcmp (args, "soft") == 0
1077            || strcmp (args, "limit") == 0)
1078     fixed_p = 0;
1079   else
1080     {
1081       char *end;
1082
1083       size = strtoul (args, &end, 0);
1084       if (args == end)
1085         error (_("Invalid %s (bad syntax)."), config->name);
1086
1087       /* Instead of explicitly capping the size of a packet to or
1088          disallowing it, the user is allowed to set the size to
1089          something arbitrarily large.  */
1090     }
1091
1092   /* So that the query shows the correct value.  */
1093   if (size <= 0)
1094     size = DEFAULT_MAX_MEMORY_PACKET_SIZE;
1095
1096   /* Extra checks?  */
1097   if (fixed_p && !config->fixed_p)
1098     {
1099       if (! query (_("The target may not be able to correctly handle a %s\n"
1100                    "of %ld bytes. Change the packet size? "),
1101                    config->name, size))
1102         error (_("Packet size not changed."));
1103     }
1104   /* Update the config.  */
1105   config->fixed_p = fixed_p;
1106   config->size = size;
1107 }
1108
1109 static void
1110 show_memory_packet_size (struct memory_packet_config *config)
1111 {
1112   printf_filtered (_("The %s is %ld. "), config->name, config->size);
1113   if (config->fixed_p)
1114     printf_filtered (_("Packets are fixed at %ld bytes.\n"),
1115                      get_memory_packet_size (config));
1116   else
1117     printf_filtered (_("Packets are limited to %ld bytes.\n"),
1118                      get_memory_packet_size (config));
1119 }
1120
1121 static struct memory_packet_config memory_write_packet_config =
1122 {
1123   "memory-write-packet-size",
1124 };
1125
1126 static void
1127 set_memory_write_packet_size (char *args, int from_tty)
1128 {
1129   set_memory_packet_size (args, &memory_write_packet_config);
1130 }
1131
1132 static void
1133 show_memory_write_packet_size (char *args, int from_tty)
1134 {
1135   show_memory_packet_size (&memory_write_packet_config);
1136 }
1137
1138 static long
1139 get_memory_write_packet_size (void)
1140 {
1141   return get_memory_packet_size (&memory_write_packet_config);
1142 }
1143
1144 static struct memory_packet_config memory_read_packet_config =
1145 {
1146   "memory-read-packet-size",
1147 };
1148
1149 static void
1150 set_memory_read_packet_size (char *args, int from_tty)
1151 {
1152   set_memory_packet_size (args, &memory_read_packet_config);
1153 }
1154
1155 static void
1156 show_memory_read_packet_size (char *args, int from_tty)
1157 {
1158   show_memory_packet_size (&memory_read_packet_config);
1159 }
1160
1161 static long
1162 get_memory_read_packet_size (void)
1163 {
1164   long size = get_memory_packet_size (&memory_read_packet_config);
1165
1166   /* FIXME: cagney/1999-11-07: Functions like getpkt() need to get an
1167      extra buffer size argument before the memory read size can be
1168      increased beyond this.  */
1169   if (size > get_remote_packet_size ())
1170     size = get_remote_packet_size ();
1171   return size;
1172 }
1173
1174 \f
1175 /* Generic configuration support for packets the stub optionally
1176    supports.  Allows the user to specify the use of the packet as well
1177    as allowing GDB to auto-detect support in the remote stub.  */
1178
1179 enum packet_support
1180   {
1181     PACKET_SUPPORT_UNKNOWN = 0,
1182     PACKET_ENABLE,
1183     PACKET_DISABLE
1184   };
1185
1186 struct packet_config
1187   {
1188     const char *name;
1189     const char *title;
1190
1191     /* If auto, GDB auto-detects support for this packet or feature,
1192        either through qSupported, or by trying the packet and looking
1193        at the response.  If true, GDB assumes the target supports this
1194        packet.  If false, the packet is disabled.  Configs that don't
1195        have an associated command always have this set to auto.  */
1196     enum auto_boolean detect;
1197
1198     /* Does the target support this packet?  */
1199     enum packet_support support;
1200   };
1201
1202 /* Analyze a packet's return value and update the packet config
1203    accordingly.  */
1204
1205 enum packet_result
1206 {
1207   PACKET_ERROR,
1208   PACKET_OK,
1209   PACKET_UNKNOWN
1210 };
1211
1212 static enum packet_support packet_config_support (struct packet_config *config);
1213 static enum packet_support packet_support (int packet);
1214
1215 static void
1216 show_packet_config_cmd (struct packet_config *config)
1217 {
1218   char *support = "internal-error";
1219
1220   switch (packet_config_support (config))
1221     {
1222     case PACKET_ENABLE:
1223       support = "enabled";
1224       break;
1225     case PACKET_DISABLE:
1226       support = "disabled";
1227       break;
1228     case PACKET_SUPPORT_UNKNOWN:
1229       support = "unknown";
1230       break;
1231     }
1232   switch (config->detect)
1233     {
1234     case AUTO_BOOLEAN_AUTO:
1235       printf_filtered (_("Support for the `%s' packet "
1236                          "is auto-detected, currently %s.\n"),
1237                        config->name, support);
1238       break;
1239     case AUTO_BOOLEAN_TRUE:
1240     case AUTO_BOOLEAN_FALSE:
1241       printf_filtered (_("Support for the `%s' packet is currently %s.\n"),
1242                        config->name, support);
1243       break;
1244     }
1245 }
1246
1247 static void
1248 add_packet_config_cmd (struct packet_config *config, const char *name,
1249                        const char *title, int legacy)
1250 {
1251   char *set_doc;
1252   char *show_doc;
1253   char *cmd_name;
1254
1255   config->name = name;
1256   config->title = title;
1257   set_doc = xstrprintf ("Set use of remote protocol `%s' (%s) packet",
1258                         name, title);
1259   show_doc = xstrprintf ("Show current use of remote "
1260                          "protocol `%s' (%s) packet",
1261                          name, title);
1262   /* set/show TITLE-packet {auto,on,off} */
1263   cmd_name = xstrprintf ("%s-packet", title);
1264   add_setshow_auto_boolean_cmd (cmd_name, class_obscure,
1265                                 &config->detect, set_doc,
1266                                 show_doc, NULL, /* help_doc */
1267                                 NULL,
1268                                 show_remote_protocol_packet_cmd,
1269                                 &remote_set_cmdlist, &remote_show_cmdlist);
1270   /* The command code copies the documentation strings.  */
1271   xfree (set_doc);
1272   xfree (show_doc);
1273   /* set/show remote NAME-packet {auto,on,off} -- legacy.  */
1274   if (legacy)
1275     {
1276       char *legacy_name;
1277
1278       legacy_name = xstrprintf ("%s-packet", name);
1279       add_alias_cmd (legacy_name, cmd_name, class_obscure, 0,
1280                      &remote_set_cmdlist);
1281       add_alias_cmd (legacy_name, cmd_name, class_obscure, 0,
1282                      &remote_show_cmdlist);
1283     }
1284 }
1285
1286 static enum packet_result
1287 packet_check_result (const char *buf)
1288 {
1289   if (buf[0] != '\0')
1290     {
1291       /* The stub recognized the packet request.  Check that the
1292          operation succeeded.  */
1293       if (buf[0] == 'E'
1294           && isxdigit (buf[1]) && isxdigit (buf[2])
1295           && buf[3] == '\0')
1296         /* "Enn"  - definitly an error.  */
1297         return PACKET_ERROR;
1298
1299       /* Always treat "E." as an error.  This will be used for
1300          more verbose error messages, such as E.memtypes.  */
1301       if (buf[0] == 'E' && buf[1] == '.')
1302         return PACKET_ERROR;
1303
1304       /* The packet may or may not be OK.  Just assume it is.  */
1305       return PACKET_OK;
1306     }
1307   else
1308     /* The stub does not support the packet.  */
1309     return PACKET_UNKNOWN;
1310 }
1311
1312 static enum packet_result
1313 packet_ok (const char *buf, struct packet_config *config)
1314 {
1315   enum packet_result result;
1316
1317   if (config->detect != AUTO_BOOLEAN_TRUE
1318       && config->support == PACKET_DISABLE)
1319     internal_error (__FILE__, __LINE__,
1320                     _("packet_ok: attempt to use a disabled packet"));
1321
1322   result = packet_check_result (buf);
1323   switch (result)
1324     {
1325     case PACKET_OK:
1326     case PACKET_ERROR:
1327       /* The stub recognized the packet request.  */
1328       if (config->support == PACKET_SUPPORT_UNKNOWN)
1329         {
1330           if (remote_debug)
1331             fprintf_unfiltered (gdb_stdlog,
1332                                 "Packet %s (%s) is supported\n",
1333                                 config->name, config->title);
1334           config->support = PACKET_ENABLE;
1335         }
1336       break;
1337     case PACKET_UNKNOWN:
1338       /* The stub does not support the packet.  */
1339       if (config->detect == AUTO_BOOLEAN_AUTO
1340           && config->support == PACKET_ENABLE)
1341         {
1342           /* If the stub previously indicated that the packet was
1343              supported then there is a protocol error.  */
1344           error (_("Protocol error: %s (%s) conflicting enabled responses."),
1345                  config->name, config->title);
1346         }
1347       else if (config->detect == AUTO_BOOLEAN_TRUE)
1348         {
1349           /* The user set it wrong.  */
1350           error (_("Enabled packet %s (%s) not recognized by stub"),
1351                  config->name, config->title);
1352         }
1353
1354       if (remote_debug)
1355         fprintf_unfiltered (gdb_stdlog,
1356                             "Packet %s (%s) is NOT supported\n",
1357                             config->name, config->title);
1358       config->support = PACKET_DISABLE;
1359       break;
1360     }
1361
1362   return result;
1363 }
1364
1365 enum {
1366   PACKET_vCont = 0,
1367   PACKET_X,
1368   PACKET_qSymbol,
1369   PACKET_P,
1370   PACKET_p,
1371   PACKET_Z0,
1372   PACKET_Z1,
1373   PACKET_Z2,
1374   PACKET_Z3,
1375   PACKET_Z4,
1376   PACKET_vFile_setfs,
1377   PACKET_vFile_open,
1378   PACKET_vFile_pread,
1379   PACKET_vFile_pwrite,
1380   PACKET_vFile_close,
1381   PACKET_vFile_unlink,
1382   PACKET_vFile_readlink,
1383   PACKET_vFile_fstat,
1384   PACKET_qXfer_auxv,
1385   PACKET_qXfer_features,
1386   PACKET_qXfer_exec_file,
1387   PACKET_qXfer_libraries,
1388   PACKET_qXfer_libraries_svr4,
1389   PACKET_qXfer_memory_map,
1390   PACKET_qXfer_spu_read,
1391   PACKET_qXfer_spu_write,
1392   PACKET_qXfer_osdata,
1393   PACKET_qXfer_threads,
1394   PACKET_qXfer_statictrace_read,
1395   PACKET_qXfer_traceframe_info,
1396   PACKET_qXfer_uib,
1397   PACKET_qGetTIBAddr,
1398   PACKET_qGetTLSAddr,
1399   PACKET_qSupported,
1400   PACKET_qTStatus,
1401   PACKET_QPassSignals,
1402   PACKET_QCatchSyscalls,
1403   PACKET_QProgramSignals,
1404   PACKET_qCRC,
1405   PACKET_qSearch_memory,
1406   PACKET_vAttach,
1407   PACKET_vRun,
1408   PACKET_QStartNoAckMode,
1409   PACKET_vKill,
1410   PACKET_qXfer_siginfo_read,
1411   PACKET_qXfer_siginfo_write,
1412   PACKET_qAttached,
1413
1414   /* Support for conditional tracepoints.  */
1415   PACKET_ConditionalTracepoints,
1416
1417   /* Support for target-side breakpoint conditions.  */
1418   PACKET_ConditionalBreakpoints,
1419
1420   /* Support for target-side breakpoint commands.  */
1421   PACKET_BreakpointCommands,
1422
1423   /* Support for fast tracepoints.  */
1424   PACKET_FastTracepoints,
1425
1426   /* Support for static tracepoints.  */
1427   PACKET_StaticTracepoints,
1428
1429   /* Support for installing tracepoints while a trace experiment is
1430      running.  */
1431   PACKET_InstallInTrace,
1432
1433   PACKET_bc,
1434   PACKET_bs,
1435   PACKET_TracepointSource,
1436   PACKET_QAllow,
1437   PACKET_qXfer_fdpic,
1438   PACKET_QDisableRandomization,
1439   PACKET_QAgent,
1440   PACKET_QTBuffer_size,
1441   PACKET_Qbtrace_off,
1442   PACKET_Qbtrace_bts,
1443   PACKET_Qbtrace_pt,
1444   PACKET_qXfer_btrace,
1445
1446   /* Support for the QNonStop packet.  */
1447   PACKET_QNonStop,
1448
1449   /* Support for the QThreadEvents packet.  */
1450   PACKET_QThreadEvents,
1451
1452   /* Support for multi-process extensions.  */
1453   PACKET_multiprocess_feature,
1454
1455   /* Support for enabling and disabling tracepoints while a trace
1456      experiment is running.  */
1457   PACKET_EnableDisableTracepoints_feature,
1458
1459   /* Support for collecting strings using the tracenz bytecode.  */
1460   PACKET_tracenz_feature,
1461
1462   /* Support for continuing to run a trace experiment while GDB is
1463      disconnected.  */
1464   PACKET_DisconnectedTracing_feature,
1465
1466   /* Support for qXfer:libraries-svr4:read with a non-empty annex.  */
1467   PACKET_augmented_libraries_svr4_read_feature,
1468
1469   /* Support for the qXfer:btrace-conf:read packet.  */
1470   PACKET_qXfer_btrace_conf,
1471
1472   /* Support for the Qbtrace-conf:bts:size packet.  */
1473   PACKET_Qbtrace_conf_bts_size,
1474
1475   /* Support for swbreak+ feature.  */
1476   PACKET_swbreak_feature,
1477
1478   /* Support for hwbreak+ feature.  */
1479   PACKET_hwbreak_feature,
1480
1481   /* Support for fork events.  */
1482   PACKET_fork_event_feature,
1483
1484   /* Support for vfork events.  */
1485   PACKET_vfork_event_feature,
1486
1487   /* Support for the Qbtrace-conf:pt:size packet.  */
1488   PACKET_Qbtrace_conf_pt_size,
1489
1490   /* Support for exec events.  */
1491   PACKET_exec_event_feature,
1492
1493   /* Support for query supported vCont actions.  */
1494   PACKET_vContSupported,
1495
1496   /* Support remote CTRL-C.  */
1497   PACKET_vCtrlC,
1498
1499   /* Support TARGET_WAITKIND_NO_RESUMED.  */
1500   PACKET_no_resumed,
1501
1502   PACKET_MAX
1503 };
1504
1505 static struct packet_config remote_protocol_packets[PACKET_MAX];
1506
1507 /* Returns the packet's corresponding "set remote foo-packet" command
1508    state.  See struct packet_config for more details.  */
1509
1510 static enum auto_boolean
1511 packet_set_cmd_state (int packet)
1512 {
1513   return remote_protocol_packets[packet].detect;
1514 }
1515
1516 /* Returns whether a given packet or feature is supported.  This takes
1517    into account the state of the corresponding "set remote foo-packet"
1518    command, which may be used to bypass auto-detection.  */
1519
1520 static enum packet_support
1521 packet_config_support (struct packet_config *config)
1522 {
1523   switch (config->detect)
1524     {
1525     case AUTO_BOOLEAN_TRUE:
1526       return PACKET_ENABLE;
1527     case AUTO_BOOLEAN_FALSE:
1528       return PACKET_DISABLE;
1529     case AUTO_BOOLEAN_AUTO:
1530       return config->support;
1531     default:
1532       gdb_assert_not_reached (_("bad switch"));
1533     }
1534 }
1535
1536 /* Same as packet_config_support, but takes the packet's enum value as
1537    argument.  */
1538
1539 static enum packet_support
1540 packet_support (int packet)
1541 {
1542   struct packet_config *config = &remote_protocol_packets[packet];
1543
1544   return packet_config_support (config);
1545 }
1546
1547 static void
1548 show_remote_protocol_packet_cmd (struct ui_file *file, int from_tty,
1549                                  struct cmd_list_element *c,
1550                                  const char *value)
1551 {
1552   struct packet_config *packet;
1553
1554   for (packet = remote_protocol_packets;
1555        packet < &remote_protocol_packets[PACKET_MAX];
1556        packet++)
1557     {
1558       if (&packet->detect == c->var)
1559         {
1560           show_packet_config_cmd (packet);
1561           return;
1562         }
1563     }
1564   internal_error (__FILE__, __LINE__, _("Could not find config for %s"),
1565                   c->name);
1566 }
1567
1568 /* Should we try one of the 'Z' requests?  */
1569
1570 enum Z_packet_type
1571 {
1572   Z_PACKET_SOFTWARE_BP,
1573   Z_PACKET_HARDWARE_BP,
1574   Z_PACKET_WRITE_WP,
1575   Z_PACKET_READ_WP,
1576   Z_PACKET_ACCESS_WP,
1577   NR_Z_PACKET_TYPES
1578 };
1579
1580 /* For compatibility with older distributions.  Provide a ``set remote
1581    Z-packet ...'' command that updates all the Z packet types.  */
1582
1583 static enum auto_boolean remote_Z_packet_detect;
1584
1585 static void
1586 set_remote_protocol_Z_packet_cmd (char *args, int from_tty,
1587                                   struct cmd_list_element *c)
1588 {
1589   int i;
1590
1591   for (i = 0; i < NR_Z_PACKET_TYPES; i++)
1592     remote_protocol_packets[PACKET_Z0 + i].detect = remote_Z_packet_detect;
1593 }
1594
1595 static void
1596 show_remote_protocol_Z_packet_cmd (struct ui_file *file, int from_tty,
1597                                    struct cmd_list_element *c,
1598                                    const char *value)
1599 {
1600   int i;
1601
1602   for (i = 0; i < NR_Z_PACKET_TYPES; i++)
1603     {
1604       show_packet_config_cmd (&remote_protocol_packets[PACKET_Z0 + i]);
1605     }
1606 }
1607
1608 /* Returns true if the multi-process extensions are in effect.  */
1609
1610 static int
1611 remote_multi_process_p (struct remote_state *rs)
1612 {
1613   return packet_support (PACKET_multiprocess_feature) == PACKET_ENABLE;
1614 }
1615
1616 /* Returns true if fork events are supported.  */
1617
1618 static int
1619 remote_fork_event_p (struct remote_state *rs)
1620 {
1621   return packet_support (PACKET_fork_event_feature) == PACKET_ENABLE;
1622 }
1623
1624 /* Returns true if vfork events are supported.  */
1625
1626 static int
1627 remote_vfork_event_p (struct remote_state *rs)
1628 {
1629   return packet_support (PACKET_vfork_event_feature) == PACKET_ENABLE;
1630 }
1631
1632 /* Returns true if exec events are supported.  */
1633
1634 static int
1635 remote_exec_event_p (struct remote_state *rs)
1636 {
1637   return packet_support (PACKET_exec_event_feature) == PACKET_ENABLE;
1638 }
1639
1640 /* Insert fork catchpoint target routine.  If fork events are enabled
1641    then return success, nothing more to do.  */
1642
1643 static int
1644 remote_insert_fork_catchpoint (struct target_ops *ops, int pid)
1645 {
1646   struct remote_state *rs = get_remote_state ();
1647
1648   return !remote_fork_event_p (rs);
1649 }
1650
1651 /* Remove fork catchpoint target routine.  Nothing to do, just
1652    return success.  */
1653
1654 static int
1655 remote_remove_fork_catchpoint (struct target_ops *ops, int pid)
1656 {
1657   return 0;
1658 }
1659
1660 /* Insert vfork catchpoint target routine.  If vfork events are enabled
1661    then return success, nothing more to do.  */
1662
1663 static int
1664 remote_insert_vfork_catchpoint (struct target_ops *ops, int pid)
1665 {
1666   struct remote_state *rs = get_remote_state ();
1667
1668   return !remote_vfork_event_p (rs);
1669 }
1670
1671 /* Remove vfork catchpoint target routine.  Nothing to do, just
1672    return success.  */
1673
1674 static int
1675 remote_remove_vfork_catchpoint (struct target_ops *ops, int pid)
1676 {
1677   return 0;
1678 }
1679
1680 /* Insert exec catchpoint target routine.  If exec events are
1681    enabled, just return success.  */
1682
1683 static int
1684 remote_insert_exec_catchpoint (struct target_ops *ops, int pid)
1685 {
1686   struct remote_state *rs = get_remote_state ();
1687
1688   return !remote_exec_event_p (rs);
1689 }
1690
1691 /* Remove exec catchpoint target routine.  Nothing to do, just
1692    return success.  */
1693
1694 static int
1695 remote_remove_exec_catchpoint (struct target_ops *ops, int pid)
1696 {
1697   return 0;
1698 }
1699
1700 \f
1701 /* Asynchronous signal handle registered as event loop source for
1702    when we have pending events ready to be passed to the core.  */
1703
1704 static struct async_event_handler *remote_async_inferior_event_token;
1705
1706 \f
1707
1708 static ptid_t magic_null_ptid;
1709 static ptid_t not_sent_ptid;
1710 static ptid_t any_thread_ptid;
1711
1712 /* Find out if the stub attached to PID (and hence GDB should offer to
1713    detach instead of killing it when bailing out).  */
1714
1715 static int
1716 remote_query_attached (int pid)
1717 {
1718   struct remote_state *rs = get_remote_state ();
1719   size_t size = get_remote_packet_size ();
1720
1721   if (packet_support (PACKET_qAttached) == PACKET_DISABLE)
1722     return 0;
1723
1724   if (remote_multi_process_p (rs))
1725     xsnprintf (rs->buf, size, "qAttached:%x", pid);
1726   else
1727     xsnprintf (rs->buf, size, "qAttached");
1728
1729   putpkt (rs->buf);
1730   getpkt (&rs->buf, &rs->buf_size, 0);
1731
1732   switch (packet_ok (rs->buf,
1733                      &remote_protocol_packets[PACKET_qAttached]))
1734     {
1735     case PACKET_OK:
1736       if (strcmp (rs->buf, "1") == 0)
1737         return 1;
1738       break;
1739     case PACKET_ERROR:
1740       warning (_("Remote failure reply: %s"), rs->buf);
1741       break;
1742     case PACKET_UNKNOWN:
1743       break;
1744     }
1745
1746   return 0;
1747 }
1748
1749 /* Add PID to GDB's inferior table.  If FAKE_PID_P is true, then PID
1750    has been invented by GDB, instead of reported by the target.  Since
1751    we can be connected to a remote system before before knowing about
1752    any inferior, mark the target with execution when we find the first
1753    inferior.  If ATTACHED is 1, then we had just attached to this
1754    inferior.  If it is 0, then we just created this inferior.  If it
1755    is -1, then try querying the remote stub to find out if it had
1756    attached to the inferior or not.  If TRY_OPEN_EXEC is true then
1757    attempt to open this inferior's executable as the main executable
1758    if no main executable is open already.  */
1759
1760 static struct inferior *
1761 remote_add_inferior (int fake_pid_p, int pid, int attached,
1762                      int try_open_exec)
1763 {
1764   struct inferior *inf;
1765
1766   /* Check whether this process we're learning about is to be
1767      considered attached, or if is to be considered to have been
1768      spawned by the stub.  */
1769   if (attached == -1)
1770     attached = remote_query_attached (pid);
1771
1772   if (gdbarch_has_global_solist (target_gdbarch ()))
1773     {
1774       /* If the target shares code across all inferiors, then every
1775          attach adds a new inferior.  */
1776       inf = add_inferior (pid);
1777
1778       /* ... and every inferior is bound to the same program space.
1779          However, each inferior may still have its own address
1780          space.  */
1781       inf->aspace = maybe_new_address_space ();
1782       inf->pspace = current_program_space;
1783     }
1784   else
1785     {
1786       /* In the traditional debugging scenario, there's a 1-1 match
1787          between program/address spaces.  We simply bind the inferior
1788          to the program space's address space.  */
1789       inf = current_inferior ();
1790       inferior_appeared (inf, pid);
1791     }
1792
1793   inf->attach_flag = attached;
1794   inf->fake_pid_p = fake_pid_p;
1795
1796   /* If no main executable is currently open then attempt to
1797      open the file that was executed to create this inferior.  */
1798   if (try_open_exec && get_exec_file (0) == NULL)
1799     exec_file_locate_attach (pid, 1);
1800
1801   return inf;
1802 }
1803
1804 /* Add thread PTID to GDB's thread list.  Tag it as executing/running
1805    according to RUNNING.  */
1806
1807 static void
1808 remote_add_thread (ptid_t ptid, int running, int executing)
1809 {
1810   struct remote_state *rs = get_remote_state ();
1811
1812   /* GDB historically didn't pull threads in the initial connection
1813      setup.  If the remote target doesn't even have a concept of
1814      threads (e.g., a bare-metal target), even if internally we
1815      consider that a single-threaded target, mentioning a new thread
1816      might be confusing to the user.  Be silent then, preserving the
1817      age old behavior.  */
1818   if (rs->starting_up)
1819     add_thread_silent (ptid);
1820   else
1821     add_thread (ptid);
1822
1823   set_executing (ptid, executing);
1824   set_running (ptid, running);
1825 }
1826
1827 /* Come here when we learn about a thread id from the remote target.
1828    It may be the first time we hear about such thread, so take the
1829    opportunity to add it to GDB's thread list.  In case this is the
1830    first time we're noticing its corresponding inferior, add it to
1831    GDB's inferior list as well.  EXECUTING indicates whether the
1832    thread is (internally) executing or stopped.  */
1833
1834 static void
1835 remote_notice_new_inferior (ptid_t currthread, int executing)
1836 {
1837   /* In non-stop mode, we assume new found threads are (externally)
1838      running until proven otherwise with a stop reply.  In all-stop,
1839      we can only get here if all threads are stopped.  */
1840   int running = target_is_non_stop_p () ? 1 : 0;
1841
1842   /* If this is a new thread, add it to GDB's thread list.
1843      If we leave it up to WFI to do this, bad things will happen.  */
1844
1845   if (in_thread_list (currthread) && is_exited (currthread))
1846     {
1847       /* We're seeing an event on a thread id we knew had exited.
1848          This has to be a new thread reusing the old id.  Add it.  */
1849       remote_add_thread (currthread, running, executing);
1850       return;
1851     }
1852
1853   if (!in_thread_list (currthread))
1854     {
1855       struct inferior *inf = NULL;
1856       int pid = ptid_get_pid (currthread);
1857
1858       if (ptid_is_pid (inferior_ptid)
1859           && pid == ptid_get_pid (inferior_ptid))
1860         {
1861           /* inferior_ptid has no thread member yet.  This can happen
1862              with the vAttach -> remote_wait,"TAAthread:" path if the
1863              stub doesn't support qC.  This is the first stop reported
1864              after an attach, so this is the main thread.  Update the
1865              ptid in the thread list.  */
1866           if (in_thread_list (pid_to_ptid (pid)))
1867             thread_change_ptid (inferior_ptid, currthread);
1868           else
1869             {
1870               remote_add_thread (currthread, running, executing);
1871               inferior_ptid = currthread;
1872             }
1873           return;
1874         }
1875
1876       if (ptid_equal (magic_null_ptid, inferior_ptid))
1877         {
1878           /* inferior_ptid is not set yet.  This can happen with the
1879              vRun -> remote_wait,"TAAthread:" path if the stub
1880              doesn't support qC.  This is the first stop reported
1881              after an attach, so this is the main thread.  Update the
1882              ptid in the thread list.  */
1883           thread_change_ptid (inferior_ptid, currthread);
1884           return;
1885         }
1886
1887       /* When connecting to a target remote, or to a target
1888          extended-remote which already was debugging an inferior, we
1889          may not know about it yet.  Add it before adding its child
1890          thread, so notifications are emitted in a sensible order.  */
1891       if (!in_inferior_list (ptid_get_pid (currthread)))
1892         {
1893           struct remote_state *rs = get_remote_state ();
1894           int fake_pid_p = !remote_multi_process_p (rs);
1895
1896           inf = remote_add_inferior (fake_pid_p,
1897                                      ptid_get_pid (currthread), -1, 1);
1898         }
1899
1900       /* This is really a new thread.  Add it.  */
1901       remote_add_thread (currthread, running, executing);
1902
1903       /* If we found a new inferior, let the common code do whatever
1904          it needs to with it (e.g., read shared libraries, insert
1905          breakpoints), unless we're just setting up an all-stop
1906          connection.  */
1907       if (inf != NULL)
1908         {
1909           struct remote_state *rs = get_remote_state ();
1910
1911           if (!rs->starting_up)
1912             notice_new_inferior (currthread, executing, 0);
1913         }
1914     }
1915 }
1916
1917 /* Return the private thread data, creating it if necessary.  */
1918
1919 static struct private_thread_info *
1920 demand_private_info (ptid_t ptid)
1921 {
1922   struct thread_info *info = find_thread_ptid (ptid);
1923
1924   gdb_assert (info);
1925
1926   if (!info->priv)
1927     {
1928       info->priv = XNEW (struct private_thread_info);
1929       info->private_dtor = free_private_thread_info;
1930       info->priv->core = -1;
1931       info->priv->extra = NULL;
1932       info->priv->name = NULL;
1933     }
1934
1935   return info->priv;
1936 }
1937
1938 /* Call this function as a result of
1939    1) A halt indication (T packet) containing a thread id
1940    2) A direct query of currthread
1941    3) Successful execution of set thread */
1942
1943 static void
1944 record_currthread (struct remote_state *rs, ptid_t currthread)
1945 {
1946   rs->general_thread = currthread;
1947 }
1948
1949 /* If 'QPassSignals' is supported, tell the remote stub what signals
1950    it can simply pass through to the inferior without reporting.  */
1951
1952 static void
1953 remote_pass_signals (struct target_ops *self,
1954                      int numsigs, unsigned char *pass_signals)
1955 {
1956   if (packet_support (PACKET_QPassSignals) != PACKET_DISABLE)
1957     {
1958       char *pass_packet, *p;
1959       int count = 0, i;
1960       struct remote_state *rs = get_remote_state ();
1961
1962       gdb_assert (numsigs < 256);
1963       for (i = 0; i < numsigs; i++)
1964         {
1965           if (pass_signals[i])
1966             count++;
1967         }
1968       pass_packet = (char *) xmalloc (count * 3 + strlen ("QPassSignals:") + 1);
1969       strcpy (pass_packet, "QPassSignals:");
1970       p = pass_packet + strlen (pass_packet);
1971       for (i = 0; i < numsigs; i++)
1972         {
1973           if (pass_signals[i])
1974             {
1975               if (i >= 16)
1976                 *p++ = tohex (i >> 4);
1977               *p++ = tohex (i & 15);
1978               if (count)
1979                 *p++ = ';';
1980               else
1981                 break;
1982               count--;
1983             }
1984         }
1985       *p = 0;
1986       if (!rs->last_pass_packet || strcmp (rs->last_pass_packet, pass_packet))
1987         {
1988           putpkt (pass_packet);
1989           getpkt (&rs->buf, &rs->buf_size, 0);
1990           packet_ok (rs->buf, &remote_protocol_packets[PACKET_QPassSignals]);
1991           if (rs->last_pass_packet)
1992             xfree (rs->last_pass_packet);
1993           rs->last_pass_packet = pass_packet;
1994         }
1995       else
1996         xfree (pass_packet);
1997     }
1998 }
1999
2000 /* If 'QCatchSyscalls' is supported, tell the remote stub
2001    to report syscalls to GDB.  */
2002
2003 static int
2004 remote_set_syscall_catchpoint (struct target_ops *self,
2005                                int pid, int needed, int any_count,
2006                                int table_size, int *table)
2007 {
2008   char *catch_packet;
2009   enum packet_result result;
2010   int n_sysno = 0;
2011
2012   if (packet_support (PACKET_QCatchSyscalls) == PACKET_DISABLE)
2013     {
2014       /* Not supported.  */
2015       return 1;
2016     }
2017
2018   if (needed && !any_count)
2019     {
2020       int i;
2021
2022       /* Count how many syscalls are to be caught (table[sysno] != 0).  */
2023       for (i = 0; i < table_size; i++)
2024         {
2025           if (table[i] != 0)
2026             n_sysno++;
2027         }
2028     }
2029
2030   if (remote_debug)
2031     {
2032       fprintf_unfiltered (gdb_stdlog,
2033                           "remote_set_syscall_catchpoint "
2034                           "pid %d needed %d any_count %d n_sysno %d\n",
2035                           pid, needed, any_count, n_sysno);
2036     }
2037
2038   if (needed)
2039     {
2040       /* Prepare a packet with the sysno list, assuming max 8+1
2041          characters for a sysno.  If the resulting packet size is too
2042          big, fallback on the non-selective packet.  */
2043       const int maxpktsz = strlen ("QCatchSyscalls:1") + n_sysno * 9 + 1;
2044
2045       catch_packet = (char *) xmalloc (maxpktsz);
2046       strcpy (catch_packet, "QCatchSyscalls:1");
2047       if (!any_count)
2048         {
2049           int i;
2050           char *p;
2051
2052           p = catch_packet;
2053           p += strlen (p);
2054
2055           /* Add in catch_packet each syscall to be caught (table[i] != 0).  */
2056           for (i = 0; i < table_size; i++)
2057             {
2058               if (table[i] != 0)
2059                 p += xsnprintf (p, catch_packet + maxpktsz - p, ";%x", i);
2060             }
2061         }
2062       if (strlen (catch_packet) > get_remote_packet_size ())
2063         {
2064           /* catch_packet too big.  Fallback to less efficient
2065              non selective mode, with GDB doing the filtering.  */
2066           catch_packet[sizeof ("QCatchSyscalls:1") - 1] = 0;
2067         }
2068     }
2069   else
2070     catch_packet = xstrdup ("QCatchSyscalls:0");
2071
2072   {
2073     struct cleanup *old_chain = make_cleanup (xfree, catch_packet);
2074     struct remote_state *rs = get_remote_state ();
2075
2076     putpkt (catch_packet);
2077     getpkt (&rs->buf, &rs->buf_size, 0);
2078     result = packet_ok (rs->buf, &remote_protocol_packets[PACKET_QCatchSyscalls]);
2079     do_cleanups (old_chain);
2080     if (result == PACKET_OK)
2081       return 0;
2082     else
2083       return -1;
2084   }
2085 }
2086
2087 /* If 'QProgramSignals' is supported, tell the remote stub what
2088    signals it should pass through to the inferior when detaching.  */
2089
2090 static void
2091 remote_program_signals (struct target_ops *self,
2092                         int numsigs, unsigned char *signals)
2093 {
2094   if (packet_support (PACKET_QProgramSignals) != PACKET_DISABLE)
2095     {
2096       char *packet, *p;
2097       int count = 0, i;
2098       struct remote_state *rs = get_remote_state ();
2099
2100       gdb_assert (numsigs < 256);
2101       for (i = 0; i < numsigs; i++)
2102         {
2103           if (signals[i])
2104             count++;
2105         }
2106       packet = (char *) xmalloc (count * 3 + strlen ("QProgramSignals:") + 1);
2107       strcpy (packet, "QProgramSignals:");
2108       p = packet + strlen (packet);
2109       for (i = 0; i < numsigs; i++)
2110         {
2111           if (signal_pass_state (i))
2112             {
2113               if (i >= 16)
2114                 *p++ = tohex (i >> 4);
2115               *p++ = tohex (i & 15);
2116               if (count)
2117                 *p++ = ';';
2118               else
2119                 break;
2120               count--;
2121             }
2122         }
2123       *p = 0;
2124       if (!rs->last_program_signals_packet
2125           || strcmp (rs->last_program_signals_packet, packet) != 0)
2126         {
2127           putpkt (packet);
2128           getpkt (&rs->buf, &rs->buf_size, 0);
2129           packet_ok (rs->buf, &remote_protocol_packets[PACKET_QProgramSignals]);
2130           xfree (rs->last_program_signals_packet);
2131           rs->last_program_signals_packet = packet;
2132         }
2133       else
2134         xfree (packet);
2135     }
2136 }
2137
2138 /* If PTID is MAGIC_NULL_PTID, don't set any thread.  If PTID is
2139    MINUS_ONE_PTID, set the thread to -1, so the stub returns the
2140    thread.  If GEN is set, set the general thread, if not, then set
2141    the step/continue thread.  */
2142 static void
2143 set_thread (struct ptid ptid, int gen)
2144 {
2145   struct remote_state *rs = get_remote_state ();
2146   ptid_t state = gen ? rs->general_thread : rs->continue_thread;
2147   char *buf = rs->buf;
2148   char *endbuf = rs->buf + get_remote_packet_size ();
2149
2150   if (ptid_equal (state, ptid))
2151     return;
2152
2153   *buf++ = 'H';
2154   *buf++ = gen ? 'g' : 'c';
2155   if (ptid_equal (ptid, magic_null_ptid))
2156     xsnprintf (buf, endbuf - buf, "0");
2157   else if (ptid_equal (ptid, any_thread_ptid))
2158     xsnprintf (buf, endbuf - buf, "0");
2159   else if (ptid_equal (ptid, minus_one_ptid))
2160     xsnprintf (buf, endbuf - buf, "-1");
2161   else
2162     write_ptid (buf, endbuf, ptid);
2163   putpkt (rs->buf);
2164   getpkt (&rs->buf, &rs->buf_size, 0);
2165   if (gen)
2166     rs->general_thread = ptid;
2167   else
2168     rs->continue_thread = ptid;
2169 }
2170
2171 static void
2172 set_general_thread (struct ptid ptid)
2173 {
2174   set_thread (ptid, 1);
2175 }
2176
2177 static void
2178 set_continue_thread (struct ptid ptid)
2179 {
2180   set_thread (ptid, 0);
2181 }
2182
2183 /* Change the remote current process.  Which thread within the process
2184    ends up selected isn't important, as long as it is the same process
2185    as what INFERIOR_PTID points to.
2186
2187    This comes from that fact that there is no explicit notion of
2188    "selected process" in the protocol.  The selected process for
2189    general operations is the process the selected general thread
2190    belongs to.  */
2191
2192 static void
2193 set_general_process (void)
2194 {
2195   struct remote_state *rs = get_remote_state ();
2196
2197   /* If the remote can't handle multiple processes, don't bother.  */
2198   if (!remote_multi_process_p (rs))
2199     return;
2200
2201   /* We only need to change the remote current thread if it's pointing
2202      at some other process.  */
2203   if (ptid_get_pid (rs->general_thread) != ptid_get_pid (inferior_ptid))
2204     set_general_thread (inferior_ptid);
2205 }
2206
2207 \f
2208 /* Return nonzero if this is the main thread that we made up ourselves
2209    to model non-threaded targets as single-threaded.  */
2210
2211 static int
2212 remote_thread_always_alive (struct target_ops *ops, ptid_t ptid)
2213 {
2214   if (ptid_equal (ptid, magic_null_ptid))
2215     /* The main thread is always alive.  */
2216     return 1;
2217
2218   if (ptid_get_pid (ptid) != 0 && ptid_get_lwp (ptid) == 0)
2219     /* The main thread is always alive.  This can happen after a
2220        vAttach, if the remote side doesn't support
2221        multi-threading.  */
2222     return 1;
2223
2224   return 0;
2225 }
2226
2227 /* Return nonzero if the thread PTID is still alive on the remote
2228    system.  */
2229
2230 static int
2231 remote_thread_alive (struct target_ops *ops, ptid_t ptid)
2232 {
2233   struct remote_state *rs = get_remote_state ();
2234   char *p, *endp;
2235
2236   /* Check if this is a thread that we made up ourselves to model
2237      non-threaded targets as single-threaded.  */
2238   if (remote_thread_always_alive (ops, ptid))
2239     return 1;
2240
2241   p = rs->buf;
2242   endp = rs->buf + get_remote_packet_size ();
2243
2244   *p++ = 'T';
2245   write_ptid (p, endp, ptid);
2246
2247   putpkt (rs->buf);
2248   getpkt (&rs->buf, &rs->buf_size, 0);
2249   return (rs->buf[0] == 'O' && rs->buf[1] == 'K');
2250 }
2251
2252 /* Return a pointer to a thread name if we know it and NULL otherwise.
2253    The thread_info object owns the memory for the name.  */
2254
2255 static const char *
2256 remote_thread_name (struct target_ops *ops, struct thread_info *info)
2257 {
2258   if (info->priv != NULL)
2259     return info->priv->name;
2260
2261   return NULL;
2262 }
2263
2264 /* About these extended threadlist and threadinfo packets.  They are
2265    variable length packets but, the fields within them are often fixed
2266    length.  They are redundent enough to send over UDP as is the
2267    remote protocol in general.  There is a matching unit test module
2268    in libstub.  */
2269
2270 /* WARNING: This threadref data structure comes from the remote O.S.,
2271    libstub protocol encoding, and remote.c.  It is not particularly
2272    changable.  */
2273
2274 /* Right now, the internal structure is int. We want it to be bigger.
2275    Plan to fix this.  */
2276
2277 typedef int gdb_threadref;      /* Internal GDB thread reference.  */
2278
2279 /* gdb_ext_thread_info is an internal GDB data structure which is
2280    equivalent to the reply of the remote threadinfo packet.  */
2281
2282 struct gdb_ext_thread_info
2283   {
2284     threadref threadid;         /* External form of thread reference.  */
2285     int active;                 /* Has state interesting to GDB?
2286                                    regs, stack.  */
2287     char display[256];          /* Brief state display, name,
2288                                    blocked/suspended.  */
2289     char shortname[32];         /* To be used to name threads.  */
2290     char more_display[256];     /* Long info, statistics, queue depth,
2291                                    whatever.  */
2292   };
2293
2294 /* The volume of remote transfers can be limited by submitting
2295    a mask containing bits specifying the desired information.
2296    Use a union of these values as the 'selection' parameter to
2297    get_thread_info.  FIXME: Make these TAG names more thread specific.  */
2298
2299 #define TAG_THREADID 1
2300 #define TAG_EXISTS 2
2301 #define TAG_DISPLAY 4
2302 #define TAG_THREADNAME 8
2303 #define TAG_MOREDISPLAY 16
2304
2305 #define BUF_THREAD_ID_SIZE (OPAQUETHREADBYTES * 2)
2306
2307 static char *unpack_nibble (char *buf, int *val);
2308
2309 static char *unpack_byte (char *buf, int *value);
2310
2311 static char *pack_int (char *buf, int value);
2312
2313 static char *unpack_int (char *buf, int *value);
2314
2315 static char *unpack_string (char *src, char *dest, int length);
2316
2317 static char *pack_threadid (char *pkt, threadref *id);
2318
2319 static char *unpack_threadid (char *inbuf, threadref *id);
2320
2321 void int_to_threadref (threadref *id, int value);
2322
2323 static int threadref_to_int (threadref *ref);
2324
2325 static void copy_threadref (threadref *dest, threadref *src);
2326
2327 static int threadmatch (threadref *dest, threadref *src);
2328
2329 static char *pack_threadinfo_request (char *pkt, int mode,
2330                                       threadref *id);
2331
2332 static int remote_unpack_thread_info_response (char *pkt,
2333                                                threadref *expectedref,
2334                                                struct gdb_ext_thread_info
2335                                                *info);
2336
2337
2338 static int remote_get_threadinfo (threadref *threadid,
2339                                   int fieldset, /*TAG mask */
2340                                   struct gdb_ext_thread_info *info);
2341
2342 static char *pack_threadlist_request (char *pkt, int startflag,
2343                                       int threadcount,
2344                                       threadref *nextthread);
2345
2346 static int parse_threadlist_response (char *pkt,
2347                                       int result_limit,
2348                                       threadref *original_echo,
2349                                       threadref *resultlist,
2350                                       int *doneflag);
2351
2352 static int remote_get_threadlist (int startflag,
2353                                   threadref *nextthread,
2354                                   int result_limit,
2355                                   int *done,
2356                                   int *result_count,
2357                                   threadref *threadlist);
2358
2359 typedef int (*rmt_thread_action) (threadref *ref, void *context);
2360
2361 static int remote_threadlist_iterator (rmt_thread_action stepfunction,
2362                                        void *context, int looplimit);
2363
2364 static int remote_newthread_step (threadref *ref, void *context);
2365
2366
2367 /* Write a PTID to BUF.  ENDBUF points to one-passed-the-end of the
2368    buffer we're allowed to write to.  Returns
2369    BUF+CHARACTERS_WRITTEN.  */
2370
2371 static char *
2372 write_ptid (char *buf, const char *endbuf, ptid_t ptid)
2373 {
2374   int pid, tid;
2375   struct remote_state *rs = get_remote_state ();
2376
2377   if (remote_multi_process_p (rs))
2378     {
2379       pid = ptid_get_pid (ptid);
2380       if (pid < 0)
2381         buf += xsnprintf (buf, endbuf - buf, "p-%x.", -pid);
2382       else
2383         buf += xsnprintf (buf, endbuf - buf, "p%x.", pid);
2384     }
2385   tid = ptid_get_lwp (ptid);
2386   if (tid < 0)
2387     buf += xsnprintf (buf, endbuf - buf, "-%x", -tid);
2388   else
2389     buf += xsnprintf (buf, endbuf - buf, "%x", tid);
2390
2391   return buf;
2392 }
2393
2394 /* Extract a PTID from BUF.  If non-null, OBUF is set to the to one
2395    passed the last parsed char.  Returns null_ptid on error.  */
2396
2397 static ptid_t
2398 read_ptid (char *buf, char **obuf)
2399 {
2400   char *p = buf;
2401   char *pp;
2402   ULONGEST pid = 0, tid = 0;
2403
2404   if (*p == 'p')
2405     {
2406       /* Multi-process ptid.  */
2407       pp = unpack_varlen_hex (p + 1, &pid);
2408       if (*pp != '.')
2409         error (_("invalid remote ptid: %s"), p);
2410
2411       p = pp;
2412       pp = unpack_varlen_hex (p + 1, &tid);
2413       if (obuf)
2414         *obuf = pp;
2415       return ptid_build (pid, tid, 0);
2416     }
2417
2418   /* No multi-process.  Just a tid.  */
2419   pp = unpack_varlen_hex (p, &tid);
2420
2421   /* Return null_ptid when no thread id is found.  */
2422   if (p == pp)
2423     {
2424       if (obuf)
2425         *obuf = pp;
2426       return null_ptid;
2427     }
2428
2429   /* Since the stub is not sending a process id, then default to
2430      what's in inferior_ptid, unless it's null at this point.  If so,
2431      then since there's no way to know the pid of the reported
2432      threads, use the magic number.  */
2433   if (ptid_equal (inferior_ptid, null_ptid))
2434     pid = ptid_get_pid (magic_null_ptid);
2435   else
2436     pid = ptid_get_pid (inferior_ptid);
2437
2438   if (obuf)
2439     *obuf = pp;
2440   return ptid_build (pid, tid, 0);
2441 }
2442
2443 static int
2444 stubhex (int ch)
2445 {
2446   if (ch >= 'a' && ch <= 'f')
2447     return ch - 'a' + 10;
2448   if (ch >= '0' && ch <= '9')
2449     return ch - '0';
2450   if (ch >= 'A' && ch <= 'F')
2451     return ch - 'A' + 10;
2452   return -1;
2453 }
2454
2455 static int
2456 stub_unpack_int (char *buff, int fieldlength)
2457 {
2458   int nibble;
2459   int retval = 0;
2460
2461   while (fieldlength)
2462     {
2463       nibble = stubhex (*buff++);
2464       retval |= nibble;
2465       fieldlength--;
2466       if (fieldlength)
2467         retval = retval << 4;
2468     }
2469   return retval;
2470 }
2471
2472 static char *
2473 unpack_nibble (char *buf, int *val)
2474 {
2475   *val = fromhex (*buf++);
2476   return buf;
2477 }
2478
2479 static char *
2480 unpack_byte (char *buf, int *value)
2481 {
2482   *value = stub_unpack_int (buf, 2);
2483   return buf + 2;
2484 }
2485
2486 static char *
2487 pack_int (char *buf, int value)
2488 {
2489   buf = pack_hex_byte (buf, (value >> 24) & 0xff);
2490   buf = pack_hex_byte (buf, (value >> 16) & 0xff);
2491   buf = pack_hex_byte (buf, (value >> 8) & 0x0ff);
2492   buf = pack_hex_byte (buf, (value & 0xff));
2493   return buf;
2494 }
2495
2496 static char *
2497 unpack_int (char *buf, int *value)
2498 {
2499   *value = stub_unpack_int (buf, 8);
2500   return buf + 8;
2501 }
2502
2503 #if 0                   /* Currently unused, uncomment when needed.  */
2504 static char *pack_string (char *pkt, char *string);
2505
2506 static char *
2507 pack_string (char *pkt, char *string)
2508 {
2509   char ch;
2510   int len;
2511
2512   len = strlen (string);
2513   if (len > 200)
2514     len = 200;          /* Bigger than most GDB packets, junk???  */
2515   pkt = pack_hex_byte (pkt, len);
2516   while (len-- > 0)
2517     {
2518       ch = *string++;
2519       if ((ch == '\0') || (ch == '#'))
2520         ch = '*';               /* Protect encapsulation.  */
2521       *pkt++ = ch;
2522     }
2523   return pkt;
2524 }
2525 #endif /* 0 (unused) */
2526
2527 static char *
2528 unpack_string (char *src, char *dest, int length)
2529 {
2530   while (length--)
2531     *dest++ = *src++;
2532   *dest = '\0';
2533   return src;
2534 }
2535
2536 static char *
2537 pack_threadid (char *pkt, threadref *id)
2538 {
2539   char *limit;
2540   unsigned char *altid;
2541
2542   altid = (unsigned char *) id;
2543   limit = pkt + BUF_THREAD_ID_SIZE;
2544   while (pkt < limit)
2545     pkt = pack_hex_byte (pkt, *altid++);
2546   return pkt;
2547 }
2548
2549
2550 static char *
2551 unpack_threadid (char *inbuf, threadref *id)
2552 {
2553   char *altref;
2554   char *limit = inbuf + BUF_THREAD_ID_SIZE;
2555   int x, y;
2556
2557   altref = (char *) id;
2558
2559   while (inbuf < limit)
2560     {
2561       x = stubhex (*inbuf++);
2562       y = stubhex (*inbuf++);
2563       *altref++ = (x << 4) | y;
2564     }
2565   return inbuf;
2566 }
2567
2568 /* Externally, threadrefs are 64 bits but internally, they are still
2569    ints.  This is due to a mismatch of specifications.  We would like
2570    to use 64bit thread references internally.  This is an adapter
2571    function.  */
2572
2573 void
2574 int_to_threadref (threadref *id, int value)
2575 {
2576   unsigned char *scan;
2577
2578   scan = (unsigned char *) id;
2579   {
2580     int i = 4;
2581     while (i--)
2582       *scan++ = 0;
2583   }
2584   *scan++ = (value >> 24) & 0xff;
2585   *scan++ = (value >> 16) & 0xff;
2586   *scan++ = (value >> 8) & 0xff;
2587   *scan++ = (value & 0xff);
2588 }
2589
2590 static int
2591 threadref_to_int (threadref *ref)
2592 {
2593   int i, value = 0;
2594   unsigned char *scan;
2595
2596   scan = *ref;
2597   scan += 4;
2598   i = 4;
2599   while (i-- > 0)
2600     value = (value << 8) | ((*scan++) & 0xff);
2601   return value;
2602 }
2603
2604 static void
2605 copy_threadref (threadref *dest, threadref *src)
2606 {
2607   int i;
2608   unsigned char *csrc, *cdest;
2609
2610   csrc = (unsigned char *) src;
2611   cdest = (unsigned char *) dest;
2612   i = 8;
2613   while (i--)
2614     *cdest++ = *csrc++;
2615 }
2616
2617 static int
2618 threadmatch (threadref *dest, threadref *src)
2619 {
2620   /* Things are broken right now, so just assume we got a match.  */
2621 #if 0
2622   unsigned char *srcp, *destp;
2623   int i, result;
2624   srcp = (char *) src;
2625   destp = (char *) dest;
2626
2627   result = 1;
2628   while (i-- > 0)
2629     result &= (*srcp++ == *destp++) ? 1 : 0;
2630   return result;
2631 #endif
2632   return 1;
2633 }
2634
2635 /*
2636    threadid:1,        # always request threadid
2637    context_exists:2,
2638    display:4,
2639    unique_name:8,
2640    more_display:16
2641  */
2642
2643 /* Encoding:  'Q':8,'P':8,mask:32,threadid:64 */
2644
2645 static char *
2646 pack_threadinfo_request (char *pkt, int mode, threadref *id)
2647 {
2648   *pkt++ = 'q';                         /* Info Query */
2649   *pkt++ = 'P';                         /* process or thread info */
2650   pkt = pack_int (pkt, mode);           /* mode */
2651   pkt = pack_threadid (pkt, id);        /* threadid */
2652   *pkt = '\0';                          /* terminate */
2653   return pkt;
2654 }
2655
2656 /* These values tag the fields in a thread info response packet.  */
2657 /* Tagging the fields allows us to request specific fields and to
2658    add more fields as time goes by.  */
2659
2660 #define TAG_THREADID 1          /* Echo the thread identifier.  */
2661 #define TAG_EXISTS 2            /* Is this process defined enough to
2662                                    fetch registers and its stack?  */
2663 #define TAG_DISPLAY 4           /* A short thing maybe to put on a window */
2664 #define TAG_THREADNAME 8        /* string, maps 1-to-1 with a thread is.  */
2665 #define TAG_MOREDISPLAY 16      /* Whatever the kernel wants to say about
2666                                    the process.  */
2667
2668 static int
2669 remote_unpack_thread_info_response (char *pkt, threadref *expectedref,
2670                                     struct gdb_ext_thread_info *info)
2671 {
2672   struct remote_state *rs = get_remote_state ();
2673   int mask, length;
2674   int tag;
2675   threadref ref;
2676   char *limit = pkt + rs->buf_size; /* Plausible parsing limit.  */
2677   int retval = 1;
2678
2679   /* info->threadid = 0; FIXME: implement zero_threadref.  */
2680   info->active = 0;
2681   info->display[0] = '\0';
2682   info->shortname[0] = '\0';
2683   info->more_display[0] = '\0';
2684
2685   /* Assume the characters indicating the packet type have been
2686      stripped.  */
2687   pkt = unpack_int (pkt, &mask);        /* arg mask */
2688   pkt = unpack_threadid (pkt, &ref);
2689
2690   if (mask == 0)
2691     warning (_("Incomplete response to threadinfo request."));
2692   if (!threadmatch (&ref, expectedref))
2693     {                   /* This is an answer to a different request.  */
2694       warning (_("ERROR RMT Thread info mismatch."));
2695       return 0;
2696     }
2697   copy_threadref (&info->threadid, &ref);
2698
2699   /* Loop on tagged fields , try to bail if somthing goes wrong.  */
2700
2701   /* Packets are terminated with nulls.  */
2702   while ((pkt < limit) && mask && *pkt)
2703     {
2704       pkt = unpack_int (pkt, &tag);     /* tag */
2705       pkt = unpack_byte (pkt, &length); /* length */
2706       if (!(tag & mask))                /* Tags out of synch with mask.  */
2707         {
2708           warning (_("ERROR RMT: threadinfo tag mismatch."));
2709           retval = 0;
2710           break;
2711         }
2712       if (tag == TAG_THREADID)
2713         {
2714           if (length != 16)
2715             {
2716               warning (_("ERROR RMT: length of threadid is not 16."));
2717               retval = 0;
2718               break;
2719             }
2720           pkt = unpack_threadid (pkt, &ref);
2721           mask = mask & ~TAG_THREADID;
2722           continue;
2723         }
2724       if (tag == TAG_EXISTS)
2725         {
2726           info->active = stub_unpack_int (pkt, length);
2727           pkt += length;
2728           mask = mask & ~(TAG_EXISTS);
2729           if (length > 8)
2730             {
2731               warning (_("ERROR RMT: 'exists' length too long."));
2732               retval = 0;
2733               break;
2734             }
2735           continue;
2736         }
2737       if (tag == TAG_THREADNAME)
2738         {
2739           pkt = unpack_string (pkt, &info->shortname[0], length);
2740           mask = mask & ~TAG_THREADNAME;
2741           continue;
2742         }
2743       if (tag == TAG_DISPLAY)
2744         {
2745           pkt = unpack_string (pkt, &info->display[0], length);
2746           mask = mask & ~TAG_DISPLAY;
2747           continue;
2748         }
2749       if (tag == TAG_MOREDISPLAY)
2750         {
2751           pkt = unpack_string (pkt, &info->more_display[0], length);
2752           mask = mask & ~TAG_MOREDISPLAY;
2753           continue;
2754         }
2755       warning (_("ERROR RMT: unknown thread info tag."));
2756       break;                    /* Not a tag we know about.  */
2757     }
2758   return retval;
2759 }
2760
2761 static int
2762 remote_get_threadinfo (threadref *threadid, int fieldset,       /* TAG mask */
2763                        struct gdb_ext_thread_info *info)
2764 {
2765   struct remote_state *rs = get_remote_state ();
2766   int result;
2767
2768   pack_threadinfo_request (rs->buf, fieldset, threadid);
2769   putpkt (rs->buf);
2770   getpkt (&rs->buf, &rs->buf_size, 0);
2771
2772   if (rs->buf[0] == '\0')
2773     return 0;
2774
2775   result = remote_unpack_thread_info_response (rs->buf + 2,
2776                                                threadid, info);
2777   return result;
2778 }
2779
2780 /*    Format: i'Q':8,i"L":8,initflag:8,batchsize:16,lastthreadid:32   */
2781
2782 static char *
2783 pack_threadlist_request (char *pkt, int startflag, int threadcount,
2784                          threadref *nextthread)
2785 {
2786   *pkt++ = 'q';                 /* info query packet */
2787   *pkt++ = 'L';                 /* Process LIST or threadLIST request */
2788   pkt = pack_nibble (pkt, startflag);           /* initflag 1 bytes */
2789   pkt = pack_hex_byte (pkt, threadcount);       /* threadcount 2 bytes */
2790   pkt = pack_threadid (pkt, nextthread);        /* 64 bit thread identifier */
2791   *pkt = '\0';
2792   return pkt;
2793 }
2794
2795 /* Encoding:   'q':8,'M':8,count:16,done:8,argthreadid:64,(threadid:64)* */
2796
2797 static int
2798 parse_threadlist_response (char *pkt, int result_limit,
2799                            threadref *original_echo, threadref *resultlist,
2800                            int *doneflag)
2801 {
2802   struct remote_state *rs = get_remote_state ();
2803   char *limit;
2804   int count, resultcount, done;
2805
2806   resultcount = 0;
2807   /* Assume the 'q' and 'M chars have been stripped.  */
2808   limit = pkt + (rs->buf_size - BUF_THREAD_ID_SIZE);
2809   /* done parse past here */
2810   pkt = unpack_byte (pkt, &count);      /* count field */
2811   pkt = unpack_nibble (pkt, &done);
2812   /* The first threadid is the argument threadid.  */
2813   pkt = unpack_threadid (pkt, original_echo);   /* should match query packet */
2814   while ((count-- > 0) && (pkt < limit))
2815     {
2816       pkt = unpack_threadid (pkt, resultlist++);
2817       if (resultcount++ >= result_limit)
2818         break;
2819     }
2820   if (doneflag)
2821     *doneflag = done;
2822   return resultcount;
2823 }
2824
2825 /* Fetch the next batch of threads from the remote.  Returns -1 if the
2826    qL packet is not supported, 0 on error and 1 on success.  */
2827
2828 static int
2829 remote_get_threadlist (int startflag, threadref *nextthread, int result_limit,
2830                        int *done, int *result_count, threadref *threadlist)
2831 {
2832   struct remote_state *rs = get_remote_state ();
2833   int result = 1;
2834
2835   /* Trancate result limit to be smaller than the packet size.  */
2836   if ((((result_limit + 1) * BUF_THREAD_ID_SIZE) + 10)
2837       >= get_remote_packet_size ())
2838     result_limit = (get_remote_packet_size () / BUF_THREAD_ID_SIZE) - 2;
2839
2840   pack_threadlist_request (rs->buf, startflag, result_limit, nextthread);
2841   putpkt (rs->buf);
2842   getpkt (&rs->buf, &rs->buf_size, 0);
2843   if (*rs->buf == '\0')
2844     {
2845       /* Packet not supported.  */
2846       return -1;
2847     }
2848
2849   *result_count =
2850     parse_threadlist_response (rs->buf + 2, result_limit,
2851                                &rs->echo_nextthread, threadlist, done);
2852
2853   if (!threadmatch (&rs->echo_nextthread, nextthread))
2854     {
2855       /* FIXME: This is a good reason to drop the packet.  */
2856       /* Possably, there is a duplicate response.  */
2857       /* Possabilities :
2858          retransmit immediatly - race conditions
2859          retransmit after timeout - yes
2860          exit
2861          wait for packet, then exit
2862        */
2863       warning (_("HMM: threadlist did not echo arg thread, dropping it."));
2864       return 0;                 /* I choose simply exiting.  */
2865     }
2866   if (*result_count <= 0)
2867     {
2868       if (*done != 1)
2869         {
2870           warning (_("RMT ERROR : failed to get remote thread list."));
2871           result = 0;
2872         }
2873       return result;            /* break; */
2874     }
2875   if (*result_count > result_limit)
2876     {
2877       *result_count = 0;
2878       warning (_("RMT ERROR: threadlist response longer than requested."));
2879       return 0;
2880     }
2881   return result;
2882 }
2883
2884 /* Fetch the list of remote threads, with the qL packet, and call
2885    STEPFUNCTION for each thread found.  Stops iterating and returns 1
2886    if STEPFUNCTION returns true.  Stops iterating and returns 0 if the
2887    STEPFUNCTION returns false.  If the packet is not supported,
2888    returns -1.  */
2889
2890 static int
2891 remote_threadlist_iterator (rmt_thread_action stepfunction, void *context,
2892                             int looplimit)
2893 {
2894   struct remote_state *rs = get_remote_state ();
2895   int done, i, result_count;
2896   int startflag = 1;
2897   int result = 1;
2898   int loopcount = 0;
2899
2900   done = 0;
2901   while (!done)
2902     {
2903       if (loopcount++ > looplimit)
2904         {
2905           result = 0;
2906           warning (_("Remote fetch threadlist -infinite loop-."));
2907           break;
2908         }
2909       result = remote_get_threadlist (startflag, &rs->nextthread,
2910                                       MAXTHREADLISTRESULTS,
2911                                       &done, &result_count,
2912                                       rs->resultthreadlist);
2913       if (result <= 0)
2914         break;
2915       /* Clear for later iterations.  */
2916       startflag = 0;
2917       /* Setup to resume next batch of thread references, set nextthread.  */
2918       if (result_count >= 1)
2919         copy_threadref (&rs->nextthread,
2920                         &rs->resultthreadlist[result_count - 1]);
2921       i = 0;
2922       while (result_count--)
2923         {
2924           if (!(*stepfunction) (&rs->resultthreadlist[i++], context))
2925             {
2926               result = 0;
2927               break;
2928             }
2929         }
2930     }
2931   return result;
2932 }
2933
2934 /* A thread found on the remote target.  */
2935
2936 typedef struct thread_item
2937 {
2938   /* The thread's PTID.  */
2939   ptid_t ptid;
2940
2941   /* The thread's extra info.  May be NULL.  */
2942   char *extra;
2943
2944   /* The thread's name.  May be NULL.  */
2945   char *name;
2946
2947   /* The core the thread was running on.  -1 if not known.  */
2948   int core;
2949 } thread_item_t;
2950 DEF_VEC_O(thread_item_t);
2951
2952 /* Context passed around to the various methods listing remote
2953    threads.  As new threads are found, they're added to the ITEMS
2954    vector.  */
2955
2956 struct threads_listing_context
2957 {
2958   /* The threads found on the remote target.  */
2959   VEC (thread_item_t) *items;
2960 };
2961
2962 /* Discard the contents of the constructed thread listing context.  */
2963
2964 static void
2965 clear_threads_listing_context (void *p)
2966 {
2967   struct threads_listing_context *context
2968     = (struct threads_listing_context *) p;
2969   int i;
2970   struct thread_item *item;
2971
2972   for (i = 0; VEC_iterate (thread_item_t, context->items, i, item); ++i)
2973     {
2974       xfree (item->extra);
2975       xfree (item->name);
2976     }
2977
2978   VEC_free (thread_item_t, context->items);
2979 }
2980
2981 /* Remove the thread specified as the related_pid field of WS
2982    from the CONTEXT list.  */
2983
2984 static void
2985 threads_listing_context_remove (struct target_waitstatus *ws,
2986                                 struct threads_listing_context *context)
2987 {
2988   struct thread_item *item;
2989   int i;
2990   ptid_t child_ptid = ws->value.related_pid;
2991
2992   for (i = 0; VEC_iterate (thread_item_t, context->items, i, item); ++i)
2993     {
2994       if (ptid_equal (item->ptid, child_ptid))
2995         {
2996           VEC_ordered_remove (thread_item_t, context->items, i);
2997           break;
2998         }
2999     }
3000 }
3001
3002 static int
3003 remote_newthread_step (threadref *ref, void *data)
3004 {
3005   struct threads_listing_context *context
3006     = (struct threads_listing_context *) data;
3007   struct thread_item item;
3008   int pid = ptid_get_pid (inferior_ptid);
3009
3010   item.ptid = ptid_build (pid, threadref_to_int (ref), 0);
3011   item.core = -1;
3012   item.name = NULL;
3013   item.extra = NULL;
3014
3015   VEC_safe_push (thread_item_t, context->items, &item);
3016
3017   return 1;                     /* continue iterator */
3018 }
3019
3020 #define CRAZY_MAX_THREADS 1000
3021
3022 static ptid_t
3023 remote_current_thread (ptid_t oldpid)
3024 {
3025   struct remote_state *rs = get_remote_state ();
3026
3027   putpkt ("qC");
3028   getpkt (&rs->buf, &rs->buf_size, 0);
3029   if (rs->buf[0] == 'Q' && rs->buf[1] == 'C')
3030     {
3031       char *obuf;
3032       ptid_t result;
3033
3034       result = read_ptid (&rs->buf[2], &obuf);
3035       if (*obuf != '\0' && remote_debug)
3036         fprintf_unfiltered (gdb_stdlog,
3037                             "warning: garbage in qC reply\n");
3038
3039       return result;
3040     }
3041   else
3042     return oldpid;
3043 }
3044
3045 /* List remote threads using the deprecated qL packet.  */
3046
3047 static int
3048 remote_get_threads_with_ql (struct target_ops *ops,
3049                             struct threads_listing_context *context)
3050 {
3051   if (remote_threadlist_iterator (remote_newthread_step, context,
3052                                   CRAZY_MAX_THREADS) >= 0)
3053     return 1;
3054
3055   return 0;
3056 }
3057
3058 #if defined(HAVE_LIBEXPAT)
3059
3060 static void
3061 start_thread (struct gdb_xml_parser *parser,
3062               const struct gdb_xml_element *element,
3063               void *user_data, VEC(gdb_xml_value_s) *attributes)
3064 {
3065   struct threads_listing_context *data
3066     = (struct threads_listing_context *) user_data;
3067
3068   struct thread_item item;
3069   char *id;
3070   struct gdb_xml_value *attr;
3071
3072   id = (char *) xml_find_attribute (attributes, "id")->value;
3073   item.ptid = read_ptid (id, NULL);
3074
3075   attr = xml_find_attribute (attributes, "core");
3076   if (attr != NULL)
3077     item.core = *(ULONGEST *) attr->value;
3078   else
3079     item.core = -1;
3080
3081   attr = xml_find_attribute (attributes, "name");
3082   item.name = attr != NULL ? xstrdup ((const char *) attr->value) : NULL;
3083
3084   item.extra = 0;
3085
3086   VEC_safe_push (thread_item_t, data->items, &item);
3087 }
3088
3089 static void
3090 end_thread (struct gdb_xml_parser *parser,
3091             const struct gdb_xml_element *element,
3092             void *user_data, const char *body_text)
3093 {
3094   struct threads_listing_context *data
3095     = (struct threads_listing_context *) user_data;
3096
3097   if (body_text && *body_text)
3098     VEC_last (thread_item_t, data->items)->extra = xstrdup (body_text);
3099 }
3100
3101 const struct gdb_xml_attribute thread_attributes[] = {
3102   { "id", GDB_XML_AF_NONE, NULL, NULL },
3103   { "core", GDB_XML_AF_OPTIONAL, gdb_xml_parse_attr_ulongest, NULL },
3104   { "name", GDB_XML_AF_OPTIONAL, NULL, NULL },
3105   { NULL, GDB_XML_AF_NONE, NULL, NULL }
3106 };
3107
3108 const struct gdb_xml_element thread_children[] = {
3109   { NULL, NULL, NULL, GDB_XML_EF_NONE, NULL, NULL }
3110 };
3111
3112 const struct gdb_xml_element threads_children[] = {
3113   { "thread", thread_attributes, thread_children,
3114     GDB_XML_EF_REPEATABLE | GDB_XML_EF_OPTIONAL,
3115     start_thread, end_thread },
3116   { NULL, NULL, NULL, GDB_XML_EF_NONE, NULL, NULL }
3117 };
3118
3119 const struct gdb_xml_element threads_elements[] = {
3120   { "threads", NULL, threads_children,
3121     GDB_XML_EF_NONE, NULL, NULL },
3122   { NULL, NULL, NULL, GDB_XML_EF_NONE, NULL, NULL }
3123 };
3124
3125 #endif
3126
3127 /* List remote threads using qXfer:threads:read.  */
3128
3129 static int
3130 remote_get_threads_with_qxfer (struct target_ops *ops,
3131                                struct threads_listing_context *context)
3132 {
3133 #if defined(HAVE_LIBEXPAT)
3134   if (packet_support (PACKET_qXfer_threads) == PACKET_ENABLE)
3135     {
3136       char *xml = target_read_stralloc (ops, TARGET_OBJECT_THREADS, NULL);
3137       struct cleanup *back_to = make_cleanup (xfree, xml);
3138
3139       if (xml != NULL && *xml != '\0')
3140         {
3141           gdb_xml_parse_quick (_("threads"), "threads.dtd",
3142                                threads_elements, xml, context);
3143         }
3144
3145       do_cleanups (back_to);
3146       return 1;
3147     }
3148 #endif
3149
3150   return 0;
3151 }
3152
3153 /* List remote threads using qfThreadInfo/qsThreadInfo.  */
3154
3155 static int
3156 remote_get_threads_with_qthreadinfo (struct target_ops *ops,
3157                                      struct threads_listing_context *context)
3158 {
3159   struct remote_state *rs = get_remote_state ();
3160
3161   if (rs->use_threadinfo_query)
3162     {
3163       char *bufp;
3164
3165       putpkt ("qfThreadInfo");
3166       getpkt (&rs->buf, &rs->buf_size, 0);
3167       bufp = rs->buf;
3168       if (bufp[0] != '\0')              /* q packet recognized */
3169         {
3170           while (*bufp++ == 'm')        /* reply contains one or more TID */
3171             {
3172               do
3173                 {
3174                   struct thread_item item;
3175
3176                   item.ptid = read_ptid (bufp, &bufp);
3177                   item.core = -1;
3178                   item.name = NULL;
3179                   item.extra = NULL;
3180
3181                   VEC_safe_push (thread_item_t, context->items, &item);
3182                 }
3183               while (*bufp++ == ',');   /* comma-separated list */
3184               putpkt ("qsThreadInfo");
3185               getpkt (&rs->buf, &rs->buf_size, 0);
3186               bufp = rs->buf;
3187             }
3188           return 1;
3189         }
3190       else
3191         {
3192           /* Packet not recognized.  */
3193           rs->use_threadinfo_query = 0;
3194         }
3195     }
3196
3197   return 0;
3198 }
3199
3200 /* Implement the to_update_thread_list function for the remote
3201    targets.  */
3202
3203 static void
3204 remote_update_thread_list (struct target_ops *ops)
3205 {
3206   struct threads_listing_context context;
3207   struct cleanup *old_chain;
3208   int got_list = 0;
3209
3210   context.items = NULL;
3211   old_chain = make_cleanup (clear_threads_listing_context, &context);
3212
3213   /* We have a few different mechanisms to fetch the thread list.  Try
3214      them all, starting with the most preferred one first, falling
3215      back to older methods.  */
3216   if (remote_get_threads_with_qxfer (ops, &context)
3217       || remote_get_threads_with_qthreadinfo (ops, &context)
3218       || remote_get_threads_with_ql (ops, &context))
3219     {
3220       int i;
3221       struct thread_item *item;
3222       struct thread_info *tp, *tmp;
3223
3224       got_list = 1;
3225
3226       if (VEC_empty (thread_item_t, context.items)
3227           && remote_thread_always_alive (ops, inferior_ptid))
3228         {
3229           /* Some targets don't really support threads, but still
3230              reply an (empty) thread list in response to the thread
3231              listing packets, instead of replying "packet not
3232              supported".  Exit early so we don't delete the main
3233              thread.  */
3234           do_cleanups (old_chain);
3235           return;
3236         }
3237
3238       /* CONTEXT now holds the current thread list on the remote
3239          target end.  Delete GDB-side threads no longer found on the
3240          target.  */
3241       ALL_THREADS_SAFE (tp, tmp)
3242         {
3243           for (i = 0;
3244                VEC_iterate (thread_item_t, context.items, i, item);
3245                ++i)
3246             {
3247               if (ptid_equal (item->ptid, tp->ptid))
3248                 break;
3249             }
3250
3251           if (i == VEC_length (thread_item_t, context.items))
3252             {
3253               /* Not found.  */
3254               delete_thread (tp->ptid);
3255             }
3256         }
3257
3258       /* Remove any unreported fork child threads from CONTEXT so
3259          that we don't interfere with follow fork, which is where
3260          creation of such threads is handled.  */
3261       remove_new_fork_children (&context);
3262
3263       /* And now add threads we don't know about yet to our list.  */
3264       for (i = 0;
3265            VEC_iterate (thread_item_t, context.items, i, item);
3266            ++i)
3267         {
3268           if (!ptid_equal (item->ptid, null_ptid))
3269             {
3270               struct private_thread_info *info;
3271               /* In non-stop mode, we assume new found threads are
3272                  executing until proven otherwise with a stop reply.
3273                  In all-stop, we can only get here if all threads are
3274                  stopped.  */
3275               int executing = target_is_non_stop_p () ? 1 : 0;
3276
3277               remote_notice_new_inferior (item->ptid, executing);
3278
3279               info = demand_private_info (item->ptid);
3280               info->core = item->core;
3281               info->extra = item->extra;
3282               item->extra = NULL;
3283               info->name = item->name;
3284               item->name = NULL;
3285             }
3286         }
3287     }
3288
3289   if (!got_list)
3290     {
3291       /* If no thread listing method is supported, then query whether
3292          each known thread is alive, one by one, with the T packet.
3293          If the target doesn't support threads at all, then this is a
3294          no-op.  See remote_thread_alive.  */
3295       prune_threads ();
3296     }
3297
3298   do_cleanups (old_chain);
3299 }
3300
3301 /*
3302  * Collect a descriptive string about the given thread.
3303  * The target may say anything it wants to about the thread
3304  * (typically info about its blocked / runnable state, name, etc.).
3305  * This string will appear in the info threads display.
3306  *
3307  * Optional: targets are not required to implement this function.
3308  */
3309
3310 static char *
3311 remote_threads_extra_info (struct target_ops *self, struct thread_info *tp)
3312 {
3313   struct remote_state *rs = get_remote_state ();
3314   int result;
3315   int set;
3316   threadref id;
3317   struct gdb_ext_thread_info threadinfo;
3318   static char display_buf[100]; /* arbitrary...  */
3319   int n = 0;                    /* position in display_buf */
3320
3321   if (rs->remote_desc == 0)             /* paranoia */
3322     internal_error (__FILE__, __LINE__,
3323                     _("remote_threads_extra_info"));
3324
3325   if (ptid_equal (tp->ptid, magic_null_ptid)
3326       || (ptid_get_pid (tp->ptid) != 0 && ptid_get_lwp (tp->ptid) == 0))
3327     /* This is the main thread which was added by GDB.  The remote
3328        server doesn't know about it.  */
3329     return NULL;
3330
3331   if (packet_support (PACKET_qXfer_threads) == PACKET_ENABLE)
3332     {
3333       struct thread_info *info = find_thread_ptid (tp->ptid);
3334
3335       if (info && info->priv)
3336         return info->priv->extra;
3337       else
3338         return NULL;
3339     }
3340
3341   if (rs->use_threadextra_query)
3342     {
3343       char *b = rs->buf;
3344       char *endb = rs->buf + get_remote_packet_size ();
3345
3346       xsnprintf (b, endb - b, "qThreadExtraInfo,");
3347       b += strlen (b);
3348       write_ptid (b, endb, tp->ptid);
3349
3350       putpkt (rs->buf);
3351       getpkt (&rs->buf, &rs->buf_size, 0);
3352       if (rs->buf[0] != 0)
3353         {
3354           n = min (strlen (rs->buf) / 2, sizeof (display_buf));
3355           result = hex2bin (rs->buf, (gdb_byte *) display_buf, n);
3356           display_buf [result] = '\0';
3357           return display_buf;
3358         }
3359     }
3360
3361   /* If the above query fails, fall back to the old method.  */
3362   rs->use_threadextra_query = 0;
3363   set = TAG_THREADID | TAG_EXISTS | TAG_THREADNAME
3364     | TAG_MOREDISPLAY | TAG_DISPLAY;
3365   int_to_threadref (&id, ptid_get_lwp (tp->ptid));
3366   if (remote_get_threadinfo (&id, set, &threadinfo))
3367     if (threadinfo.active)
3368       {
3369         if (*threadinfo.shortname)
3370           n += xsnprintf (&display_buf[0], sizeof (display_buf) - n,
3371                           " Name: %s,", threadinfo.shortname);
3372         if (*threadinfo.display)
3373           n += xsnprintf (&display_buf[n], sizeof (display_buf) - n,
3374                           " State: %s,", threadinfo.display);
3375         if (*threadinfo.more_display)
3376           n += xsnprintf (&display_buf[n], sizeof (display_buf) - n,
3377                           " Priority: %s", threadinfo.more_display);
3378
3379         if (n > 0)
3380           {
3381             /* For purely cosmetic reasons, clear up trailing commas.  */
3382             if (',' == display_buf[n-1])
3383               display_buf[n-1] = ' ';
3384             return display_buf;
3385           }
3386       }
3387   return NULL;
3388 }
3389 \f
3390
3391 static int
3392 remote_static_tracepoint_marker_at (struct target_ops *self, CORE_ADDR addr,
3393                                     struct static_tracepoint_marker *marker)
3394 {
3395   struct remote_state *rs = get_remote_state ();
3396   char *p = rs->buf;
3397
3398   xsnprintf (p, get_remote_packet_size (), "qTSTMat:");
3399   p += strlen (p);
3400   p += hexnumstr (p, addr);
3401   putpkt (rs->buf);
3402   getpkt (&rs->buf, &rs->buf_size, 0);
3403   p = rs->buf;
3404
3405   if (*p == 'E')
3406     error (_("Remote failure reply: %s"), p);
3407
3408   if (*p++ == 'm')
3409     {
3410       parse_static_tracepoint_marker_definition (p, &p, marker);
3411       return 1;
3412     }
3413
3414   return 0;
3415 }
3416
3417 static VEC(static_tracepoint_marker_p) *
3418 remote_static_tracepoint_markers_by_strid (struct target_ops *self,
3419                                            const char *strid)
3420 {
3421   struct remote_state *rs = get_remote_state ();
3422   VEC(static_tracepoint_marker_p) *markers = NULL;
3423   struct static_tracepoint_marker *marker = NULL;
3424   struct cleanup *old_chain;
3425   char *p;
3426
3427   /* Ask for a first packet of static tracepoint marker
3428      definition.  */
3429   putpkt ("qTfSTM");
3430   getpkt (&rs->buf, &rs->buf_size, 0);
3431   p = rs->buf;
3432   if (*p == 'E')
3433     error (_("Remote failure reply: %s"), p);
3434
3435   old_chain = make_cleanup (free_current_marker, &marker);
3436
3437   while (*p++ == 'm')
3438     {
3439       if (marker == NULL)
3440         marker = XCNEW (struct static_tracepoint_marker);
3441
3442       do
3443         {
3444           parse_static_tracepoint_marker_definition (p, &p, marker);
3445
3446           if (strid == NULL || strcmp (strid, marker->str_id) == 0)
3447             {
3448               VEC_safe_push (static_tracepoint_marker_p,
3449                              markers, marker);
3450               marker = NULL;
3451             }
3452           else
3453             {
3454               release_static_tracepoint_marker (marker);
3455               memset (marker, 0, sizeof (*marker));
3456             }
3457         }
3458       while (*p++ == ',');      /* comma-separated list */
3459       /* Ask for another packet of static tracepoint definition.  */
3460       putpkt ("qTsSTM");
3461       getpkt (&rs->buf, &rs->buf_size, 0);
3462       p = rs->buf;
3463     }
3464
3465   do_cleanups (old_chain);
3466   return markers;
3467 }
3468
3469 \f
3470 /* Implement the to_get_ada_task_ptid function for the remote targets.  */
3471
3472 static ptid_t
3473 remote_get_ada_task_ptid (struct target_ops *self, long lwp, long thread)
3474 {
3475   return ptid_build (ptid_get_pid (inferior_ptid), lwp, 0);
3476 }
3477 \f
3478
3479 /* Restart the remote side; this is an extended protocol operation.  */
3480
3481 static void
3482 extended_remote_restart (void)
3483 {
3484   struct remote_state *rs = get_remote_state ();
3485
3486   /* Send the restart command; for reasons I don't understand the
3487      remote side really expects a number after the "R".  */
3488   xsnprintf (rs->buf, get_remote_packet_size (), "R%x", 0);
3489   putpkt (rs->buf);
3490
3491   remote_fileio_reset ();
3492 }
3493 \f
3494 /* Clean up connection to a remote debugger.  */
3495
3496 static void
3497 remote_close (struct target_ops *self)
3498 {
3499   struct remote_state *rs = get_remote_state ();
3500
3501   if (rs->remote_desc == NULL)
3502     return; /* already closed */
3503
3504   /* Make sure we leave stdin registered in the event loop.  */
3505   remote_terminal_ours (self);
3506
3507   serial_close (rs->remote_desc);
3508   rs->remote_desc = NULL;
3509
3510   /* We don't have a connection to the remote stub anymore.  Get rid
3511      of all the inferiors and their threads we were controlling.
3512      Reset inferior_ptid to null_ptid first, as otherwise has_stack_frame
3513      will be unable to find the thread corresponding to (pid, 0, 0).  */
3514   inferior_ptid = null_ptid;
3515   discard_all_inferiors ();
3516
3517   /* We are closing the remote target, so we should discard
3518      everything of this target.  */
3519   discard_pending_stop_replies_in_queue (rs);
3520
3521   if (remote_async_inferior_event_token)
3522     delete_async_event_handler (&remote_async_inferior_event_token);
3523
3524   remote_notif_state_xfree (rs->notif_state);
3525
3526   trace_reset_local_state ();
3527 }
3528
3529 /* Query the remote side for the text, data and bss offsets.  */
3530
3531 static void
3532 get_offsets (void)
3533 {
3534   struct remote_state *rs = get_remote_state ();
3535   char *buf;
3536   char *ptr;
3537   int lose, num_segments = 0, do_sections, do_segments;
3538   CORE_ADDR text_addr, data_addr, bss_addr, segments[2];
3539   struct section_offsets *offs;
3540   struct symfile_segment_data *data;
3541
3542   if (symfile_objfile == NULL)
3543     return;
3544
3545   putpkt ("qOffsets");
3546   getpkt (&rs->buf, &rs->buf_size, 0);
3547   buf = rs->buf;
3548
3549   if (buf[0] == '\000')
3550     return;                     /* Return silently.  Stub doesn't support
3551                                    this command.  */
3552   if (buf[0] == 'E')
3553     {
3554       warning (_("Remote failure reply: %s"), buf);
3555       return;
3556     }
3557
3558   /* Pick up each field in turn.  This used to be done with scanf, but
3559      scanf will make trouble if CORE_ADDR size doesn't match
3560      conversion directives correctly.  The following code will work
3561      with any size of CORE_ADDR.  */
3562   text_addr = data_addr = bss_addr = 0;
3563   ptr = buf;
3564   lose = 0;
3565
3566   if (startswith (ptr, "Text="))
3567     {
3568       ptr += 5;
3569       /* Don't use strtol, could lose on big values.  */
3570       while (*ptr && *ptr != ';')
3571         text_addr = (text_addr << 4) + fromhex (*ptr++);
3572
3573       if (startswith (ptr, ";Data="))
3574         {
3575           ptr += 6;
3576           while (*ptr && *ptr != ';')
3577             data_addr = (data_addr << 4) + fromhex (*ptr++);
3578         }
3579       else
3580         lose = 1;
3581
3582       if (!lose && startswith (ptr, ";Bss="))
3583         {
3584           ptr += 5;
3585           while (*ptr && *ptr != ';')
3586             bss_addr = (bss_addr << 4) + fromhex (*ptr++);
3587
3588           if (bss_addr != data_addr)
3589             warning (_("Target reported unsupported offsets: %s"), buf);
3590         }
3591       else
3592         lose = 1;
3593     }
3594   else if (startswith (ptr, "TextSeg="))
3595     {
3596       ptr += 8;
3597       /* Don't use strtol, could lose on big values.  */
3598       while (*ptr && *ptr != ';')
3599         text_addr = (text_addr << 4) + fromhex (*ptr++);
3600       num_segments = 1;
3601
3602       if (startswith (ptr, ";DataSeg="))
3603         {
3604           ptr += 9;
3605           while (*ptr && *ptr != ';')
3606             data_addr = (data_addr << 4) + fromhex (*ptr++);
3607           num_segments++;
3608         }
3609     }
3610   else
3611     lose = 1;
3612
3613   if (lose)
3614     error (_("Malformed response to offset query, %s"), buf);
3615   else if (*ptr != '\0')
3616     warning (_("Target reported unsupported offsets: %s"), buf);
3617
3618   offs = ((struct section_offsets *)
3619           alloca (SIZEOF_N_SECTION_OFFSETS (symfile_objfile->num_sections)));
3620   memcpy (offs, symfile_objfile->section_offsets,
3621           SIZEOF_N_SECTION_OFFSETS (symfile_objfile->num_sections));
3622
3623   data = get_symfile_segment_data (symfile_objfile->obfd);
3624   do_segments = (data != NULL);
3625   do_sections = num_segments == 0;
3626
3627   if (num_segments > 0)
3628     {
3629       segments[0] = text_addr;
3630       segments[1] = data_addr;
3631     }
3632   /* If we have two segments, we can still try to relocate everything
3633      by assuming that the .text and .data offsets apply to the whole
3634      text and data segments.  Convert the offsets given in the packet
3635      to base addresses for symfile_map_offsets_to_segments.  */
3636   else if (data && data->num_segments == 2)
3637     {
3638       segments[0] = data->segment_bases[0] + text_addr;
3639       segments[1] = data->segment_bases[1] + data_addr;
3640       num_segments = 2;
3641     }
3642   /* If the object file has only one segment, assume that it is text
3643      rather than data; main programs with no writable data are rare,
3644      but programs with no code are useless.  Of course the code might
3645      have ended up in the data segment... to detect that we would need
3646      the permissions here.  */
3647   else if (data && data->num_segments == 1)
3648     {
3649       segments[0] = data->segment_bases[0] + text_addr;
3650       num_segments = 1;
3651     }
3652   /* There's no way to relocate by segment.  */
3653   else
3654     do_segments = 0;
3655
3656   if (do_segments)
3657     {
3658       int ret = symfile_map_offsets_to_segments (symfile_objfile->obfd, data,
3659                                                  offs, num_segments, segments);
3660
3661       if (ret == 0 && !do_sections)
3662         error (_("Can not handle qOffsets TextSeg "
3663                  "response with this symbol file"));
3664
3665       if (ret > 0)
3666         do_sections = 0;
3667     }
3668
3669   if (data)
3670     free_symfile_segment_data (data);
3671
3672   if (do_sections)
3673     {
3674       offs->offsets[SECT_OFF_TEXT (symfile_objfile)] = text_addr;
3675
3676       /* This is a temporary kludge to force data and bss to use the
3677          same offsets because that's what nlmconv does now.  The real
3678          solution requires changes to the stub and remote.c that I
3679          don't have time to do right now.  */
3680
3681       offs->offsets[SECT_OFF_DATA (symfile_objfile)] = data_addr;
3682       offs->offsets[SECT_OFF_BSS (symfile_objfile)] = data_addr;
3683     }
3684
3685   objfile_relocate (symfile_objfile, offs);
3686 }
3687
3688 /* Send interrupt_sequence to remote target.  */
3689 static void
3690 send_interrupt_sequence (void)
3691 {
3692   struct remote_state *rs = get_remote_state ();
3693
3694   if (interrupt_sequence_mode == interrupt_sequence_control_c)
3695     remote_serial_write ("\x03", 1);
3696   else if (interrupt_sequence_mode == interrupt_sequence_break)
3697     serial_send_break (rs->remote_desc);
3698   else if (interrupt_sequence_mode == interrupt_sequence_break_g)
3699     {
3700       serial_send_break (rs->remote_desc);
3701       remote_serial_write ("g", 1);
3702     }
3703   else
3704     internal_error (__FILE__, __LINE__,
3705                     _("Invalid value for interrupt_sequence_mode: %s."),
3706                     interrupt_sequence_mode);
3707 }
3708
3709
3710 /* If STOP_REPLY is a T stop reply, look for the "thread" register,
3711    and extract the PTID.  Returns NULL_PTID if not found.  */
3712
3713 static ptid_t
3714 stop_reply_extract_thread (char *stop_reply)
3715 {
3716   if (stop_reply[0] == 'T' && strlen (stop_reply) > 3)
3717     {
3718       char *p;
3719
3720       /* Txx r:val ; r:val (...)  */
3721       p = &stop_reply[3];
3722
3723       /* Look for "register" named "thread".  */
3724       while (*p != '\0')
3725         {
3726           char *p1;
3727
3728           p1 = strchr (p, ':');
3729           if (p1 == NULL)
3730             return null_ptid;
3731
3732           if (strncmp (p, "thread", p1 - p) == 0)
3733             return read_ptid (++p1, &p);
3734
3735           p1 = strchr (p, ';');
3736           if (p1 == NULL)
3737             return null_ptid;
3738           p1++;
3739
3740           p = p1;
3741         }
3742     }
3743
3744   return null_ptid;
3745 }
3746
3747 /* Determine the remote side's current thread.  If we have a stop
3748    reply handy (in WAIT_STATUS), maybe it's a T stop reply with a
3749    "thread" register we can extract the current thread from.  If not,
3750    ask the remote which is the current thread with qC.  The former
3751    method avoids a roundtrip.  */
3752
3753 static ptid_t
3754 get_current_thread (char *wait_status)
3755 {
3756   ptid_t ptid = null_ptid;
3757
3758   /* Note we don't use remote_parse_stop_reply as that makes use of
3759      the target architecture, which we haven't yet fully determined at
3760      this point.  */
3761   if (wait_status != NULL)
3762     ptid = stop_reply_extract_thread (wait_status);
3763   if (ptid_equal (ptid, null_ptid))
3764     ptid = remote_current_thread (inferior_ptid);
3765
3766   return ptid;
3767 }
3768
3769 /* Query the remote target for which is the current thread/process,
3770    add it to our tables, and update INFERIOR_PTID.  The caller is
3771    responsible for setting the state such that the remote end is ready
3772    to return the current thread.
3773
3774    This function is called after handling the '?' or 'vRun' packets,
3775    whose response is a stop reply from which we can also try
3776    extracting the thread.  If the target doesn't support the explicit
3777    qC query, we infer the current thread from that stop reply, passed
3778    in in WAIT_STATUS, which may be NULL.  */
3779
3780 static void
3781 add_current_inferior_and_thread (char *wait_status)
3782 {
3783   struct remote_state *rs = get_remote_state ();
3784   int fake_pid_p = 0;
3785   ptid_t ptid;
3786
3787   inferior_ptid = null_ptid;
3788
3789   /* Now, if we have thread information, update inferior_ptid.  */
3790   ptid = get_current_thread (wait_status);
3791
3792   if (!ptid_equal (ptid, null_ptid))
3793     {
3794       if (!remote_multi_process_p (rs))
3795         fake_pid_p = 1;
3796
3797       inferior_ptid = ptid;
3798     }
3799   else
3800     {
3801       /* Without this, some commands which require an active target
3802          (such as kill) won't work.  This variable serves (at least)
3803          double duty as both the pid of the target process (if it has
3804          such), and as a flag indicating that a target is active.  */
3805       inferior_ptid = magic_null_ptid;
3806       fake_pid_p = 1;
3807     }
3808
3809   remote_add_inferior (fake_pid_p, ptid_get_pid (inferior_ptid), -1, 1);
3810
3811   /* Add the main thread.  */
3812   add_thread_silent (inferior_ptid);
3813 }
3814
3815 /* Print info about a thread that was found already stopped on
3816    connection.  */
3817
3818 static void
3819 print_one_stopped_thread (struct thread_info *thread)
3820 {
3821   struct target_waitstatus *ws = &thread->suspend.waitstatus;
3822
3823   switch_to_thread (thread->ptid);
3824   stop_pc = get_frame_pc (get_current_frame ());
3825   set_current_sal_from_frame (get_current_frame ());
3826
3827   thread->suspend.waitstatus_pending_p = 0;
3828
3829   if (ws->kind == TARGET_WAITKIND_STOPPED)
3830     {
3831       enum gdb_signal sig = ws->value.sig;
3832
3833       if (signal_print_state (sig))
3834         observer_notify_signal_received (sig);
3835     }
3836   observer_notify_normal_stop (NULL, 1);
3837 }
3838
3839 /* Process all initial stop replies the remote side sent in response
3840    to the ? packet.  These indicate threads that were already stopped
3841    on initial connection.  We mark these threads as stopped and print
3842    their current frame before giving the user the prompt.  */
3843
3844 static void
3845 process_initial_stop_replies (int from_tty)
3846 {
3847   int pending_stop_replies = stop_reply_queue_length ();
3848   struct inferior *inf;
3849   struct thread_info *thread;
3850   struct thread_info *selected = NULL;
3851   struct thread_info *lowest_stopped = NULL;
3852   struct thread_info *first = NULL;
3853
3854   /* Consume the initial pending events.  */
3855   while (pending_stop_replies-- > 0)
3856     {
3857       ptid_t waiton_ptid = minus_one_ptid;
3858       ptid_t event_ptid;
3859       struct target_waitstatus ws;
3860       int ignore_event = 0;
3861       struct thread_info *thread;
3862
3863       memset (&ws, 0, sizeof (ws));
3864       event_ptid = target_wait (waiton_ptid, &ws, TARGET_WNOHANG);
3865       if (remote_debug)
3866         print_target_wait_results (waiton_ptid, event_ptid, &ws);
3867
3868       switch (ws.kind)
3869         {
3870         case TARGET_WAITKIND_IGNORE:
3871         case TARGET_WAITKIND_NO_RESUMED:
3872         case TARGET_WAITKIND_SIGNALLED:
3873         case TARGET_WAITKIND_EXITED:
3874           /* We shouldn't see these, but if we do, just ignore.  */
3875           if (remote_debug)
3876             fprintf_unfiltered (gdb_stdlog, "remote: event ignored\n");
3877           ignore_event = 1;
3878           break;
3879
3880         case TARGET_WAITKIND_EXECD:
3881           xfree (ws.value.execd_pathname);
3882           break;
3883         default:
3884           break;
3885         }
3886
3887       if (ignore_event)
3888         continue;
3889
3890       thread = find_thread_ptid (event_ptid);
3891
3892       if (ws.kind == TARGET_WAITKIND_STOPPED)
3893         {
3894           enum gdb_signal sig = ws.value.sig;
3895
3896           /* Stubs traditionally report SIGTRAP as initial signal,
3897              instead of signal 0.  Suppress it.  */
3898           if (sig == GDB_SIGNAL_TRAP)
3899             sig = GDB_SIGNAL_0;
3900           thread->suspend.stop_signal = sig;
3901           ws.value.sig = sig;
3902         }
3903
3904       thread->suspend.waitstatus = ws;
3905
3906       if (ws.kind != TARGET_WAITKIND_STOPPED
3907           || ws.value.sig != GDB_SIGNAL_0)
3908         thread->suspend.waitstatus_pending_p = 1;
3909
3910       set_executing (event_ptid, 0);
3911       set_running (event_ptid, 0);
3912     }
3913
3914   /* "Notice" the new inferiors before anything related to
3915      registers/memory.  */
3916   ALL_INFERIORS (inf)
3917     {
3918       if (inf->pid == 0)
3919         continue;
3920
3921       inf->needs_setup = 1;
3922
3923       if (non_stop)
3924         {
3925           thread = any_live_thread_of_process (inf->pid);
3926           notice_new_inferior (thread->ptid,
3927                                thread->state == THREAD_RUNNING,
3928                                from_tty);
3929         }
3930     }
3931
3932   /* If all-stop on top of non-stop, pause all threads.  Note this
3933      records the threads' stop pc, so must be done after "noticing"
3934      the inferiors.  */
3935   if (!non_stop)
3936     {
3937       stop_all_threads ();
3938
3939       /* If all threads of an inferior were already stopped, we
3940          haven't setup the inferior yet.  */
3941       ALL_INFERIORS (inf)
3942         {
3943           if (inf->pid == 0)
3944             continue;
3945
3946           if (inf->needs_setup)
3947             {
3948               thread = any_live_thread_of_process (inf->pid);
3949               switch_to_thread_no_regs (thread);
3950               setup_inferior (0);
3951             }
3952         }
3953     }
3954
3955   /* Now go over all threads that are stopped, and print their current
3956      frame.  If all-stop, then if there's a signalled thread, pick
3957      that as current.  */
3958   ALL_NON_EXITED_THREADS (thread)
3959     {
3960       if (first == NULL)
3961         first = thread;
3962
3963       if (!non_stop)
3964         set_running (thread->ptid, 0);
3965       else if (thread->state != THREAD_STOPPED)
3966         continue;
3967
3968       if (selected == NULL
3969           && thread->suspend.waitstatus_pending_p)
3970         selected = thread;
3971
3972       if (lowest_stopped == NULL
3973           || thread->inf->num < lowest_stopped->inf->num
3974           || thread->per_inf_num < lowest_stopped->per_inf_num)
3975         lowest_stopped = thread;
3976
3977       if (non_stop)
3978         print_one_stopped_thread (thread);
3979     }
3980
3981   /* In all-stop, we only print the status of one thread, and leave
3982      others with their status pending.  */
3983   if (!non_stop)
3984     {
3985       thread = selected;
3986       if (thread == NULL)
3987         thread = lowest_stopped;
3988       if (thread == NULL)
3989         thread = first;
3990
3991       print_one_stopped_thread (thread);
3992     }
3993
3994   /* For "info program".  */
3995   thread = inferior_thread ();
3996   if (thread->state == THREAD_STOPPED)
3997     set_last_target_status (inferior_ptid, thread->suspend.waitstatus);
3998 }
3999
4000 /* Start the remote connection and sync state.  */
4001
4002 static void
4003 remote_start_remote (int from_tty, struct target_ops *target, int extended_p)
4004 {
4005   struct remote_state *rs = get_remote_state ();
4006   struct packet_config *noack_config;
4007   char *wait_status = NULL;
4008
4009   /* Signal other parts that we're going through the initial setup,
4010      and so things may not be stable yet.  E.g., we don't try to
4011      install tracepoints until we've relocated symbols.  Also, a
4012      Ctrl-C before we're connected and synced up can't interrupt the
4013      target.  Instead, it offers to drop the (potentially wedged)
4014      connection.  */
4015   rs->starting_up = 1;
4016
4017   QUIT;
4018
4019   if (interrupt_on_connect)
4020     send_interrupt_sequence ();
4021
4022   /* Ack any packet which the remote side has already sent.  */
4023   remote_serial_write ("+", 1);
4024
4025   /* The first packet we send to the target is the optional "supported
4026      packets" request.  If the target can answer this, it will tell us
4027      which later probes to skip.  */
4028   remote_query_supported ();
4029
4030   /* If the stub wants to get a QAllow, compose one and send it.  */
4031   if (packet_support (PACKET_QAllow) != PACKET_DISABLE)
4032     remote_set_permissions (target);
4033
4034   /* gdbserver < 7.7 (before its fix from 2013-12-11) did reply to any
4035      unknown 'v' packet with string "OK".  "OK" gets interpreted by GDB
4036      as a reply to known packet.  For packet "vFile:setfs:" it is an
4037      invalid reply and GDB would return error in
4038      remote_hostio_set_filesystem, making remote files access impossible.
4039      Disable "vFile:setfs:" in such case.  Do not disable other 'v' packets as
4040      other "vFile" packets get correctly detected even on gdbserver < 7.7.  */
4041   {
4042     const char v_mustreplyempty[] = "vMustReplyEmpty";
4043
4044     putpkt (v_mustreplyempty);
4045     getpkt (&rs->buf, &rs->buf_size, 0);
4046     if (strcmp (rs->buf, "OK") == 0)
4047       remote_protocol_packets[PACKET_vFile_setfs].support = PACKET_DISABLE;
4048     else if (strcmp (rs->buf, "") != 0)
4049       error (_("Remote replied unexpectedly to '%s': %s"), v_mustreplyempty,
4050              rs->buf);
4051   }
4052
4053   /* Next, we possibly activate noack mode.
4054
4055      If the QStartNoAckMode packet configuration is set to AUTO,
4056      enable noack mode if the stub reported a wish for it with
4057      qSupported.
4058
4059      If set to TRUE, then enable noack mode even if the stub didn't
4060      report it in qSupported.  If the stub doesn't reply OK, the
4061      session ends with an error.
4062
4063      If FALSE, then don't activate noack mode, regardless of what the
4064      stub claimed should be the default with qSupported.  */
4065
4066   noack_config = &remote_protocol_packets[PACKET_QStartNoAckMode];
4067   if (packet_config_support (noack_config) != PACKET_DISABLE)
4068     {
4069       putpkt ("QStartNoAckMode");
4070       getpkt (&rs->buf, &rs->buf_size, 0);
4071       if (packet_ok (rs->buf, noack_config) == PACKET_OK)
4072         rs->noack_mode = 1;
4073     }
4074
4075   if (extended_p)
4076     {
4077       /* Tell the remote that we are using the extended protocol.  */
4078       putpkt ("!");
4079       getpkt (&rs->buf, &rs->buf_size, 0);
4080     }
4081
4082   /* Let the target know which signals it is allowed to pass down to
4083      the program.  */
4084   update_signals_program_target ();
4085
4086   /* Next, if the target can specify a description, read it.  We do
4087      this before anything involving memory or registers.  */
4088   target_find_description ();
4089
4090   /* Next, now that we know something about the target, update the
4091      address spaces in the program spaces.  */
4092   update_address_spaces ();
4093
4094   /* On OSs where the list of libraries is global to all
4095      processes, we fetch them early.  */
4096   if (gdbarch_has_global_solist (target_gdbarch ()))
4097     solib_add (NULL, from_tty, target, auto_solib_add);
4098
4099   if (target_is_non_stop_p ())
4100     {
4101       if (packet_support (PACKET_QNonStop) != PACKET_ENABLE)
4102         error (_("Non-stop mode requested, but remote "
4103                  "does not support non-stop"));
4104
4105       putpkt ("QNonStop:1");
4106       getpkt (&rs->buf, &rs->buf_size, 0);
4107
4108       if (strcmp (rs->buf, "OK") != 0)
4109         error (_("Remote refused setting non-stop mode with: %s"), rs->buf);
4110
4111       /* Find about threads and processes the stub is already
4112          controlling.  We default to adding them in the running state.
4113          The '?' query below will then tell us about which threads are
4114          stopped.  */
4115       remote_update_thread_list (target);
4116     }
4117   else if (packet_support (PACKET_QNonStop) == PACKET_ENABLE)
4118     {
4119       /* Don't assume that the stub can operate in all-stop mode.
4120          Request it explicitly.  */
4121       putpkt ("QNonStop:0");
4122       getpkt (&rs->buf, &rs->buf_size, 0);
4123
4124       if (strcmp (rs->buf, "OK") != 0)
4125         error (_("Remote refused setting all-stop mode with: %s"), rs->buf);
4126     }
4127
4128   /* Upload TSVs regardless of whether the target is running or not.  The
4129      remote stub, such as GDBserver, may have some predefined or builtin
4130      TSVs, even if the target is not running.  */
4131   if (remote_get_trace_status (target, current_trace_status ()) != -1)
4132     {
4133       struct uploaded_tsv *uploaded_tsvs = NULL;
4134
4135       remote_upload_trace_state_variables (target, &uploaded_tsvs);
4136       merge_uploaded_trace_state_variables (&uploaded_tsvs);
4137     }
4138
4139   /* Check whether the target is running now.  */
4140   putpkt ("?");
4141   getpkt (&rs->buf, &rs->buf_size, 0);
4142
4143   if (!target_is_non_stop_p ())
4144     {
4145       if (rs->buf[0] == 'W' || rs->buf[0] == 'X')
4146         {
4147           if (!extended_p)
4148             error (_("The target is not running (try extended-remote?)"));
4149
4150           /* We're connected, but not running.  Drop out before we
4151              call start_remote.  */
4152           rs->starting_up = 0;
4153           return;
4154         }
4155       else
4156         {
4157           /* Save the reply for later.  */
4158           wait_status = (char *) alloca (strlen (rs->buf) + 1);
4159           strcpy (wait_status, rs->buf);
4160         }
4161
4162       /* Fetch thread list.  */
4163       target_update_thread_list ();
4164
4165       /* Let the stub know that we want it to return the thread.  */
4166       set_continue_thread (minus_one_ptid);
4167
4168       if (thread_count () == 0)
4169         {
4170           /* Target has no concept of threads at all.  GDB treats
4171              non-threaded target as single-threaded; add a main
4172              thread.  */
4173           add_current_inferior_and_thread (wait_status);
4174         }
4175       else
4176         {
4177           /* We have thread information; select the thread the target
4178              says should be current.  If we're reconnecting to a
4179              multi-threaded program, this will ideally be the thread
4180              that last reported an event before GDB disconnected.  */
4181           inferior_ptid = get_current_thread (wait_status);
4182           if (ptid_equal (inferior_ptid, null_ptid))
4183             {
4184               /* Odd... The target was able to list threads, but not
4185                  tell us which thread was current (no "thread"
4186                  register in T stop reply?).  Just pick the first
4187                  thread in the thread list then.  */
4188               
4189               if (remote_debug)
4190                 fprintf_unfiltered (gdb_stdlog,
4191                                     "warning: couldn't determine remote "
4192                                     "current thread; picking first in list.\n");
4193
4194               inferior_ptid = thread_list->ptid;
4195             }
4196         }
4197
4198       /* init_wait_for_inferior should be called before get_offsets in order
4199          to manage `inserted' flag in bp loc in a correct state.
4200          breakpoint_init_inferior, called from init_wait_for_inferior, set
4201          `inserted' flag to 0, while before breakpoint_re_set, called from
4202          start_remote, set `inserted' flag to 1.  In the initialization of
4203          inferior, breakpoint_init_inferior should be called first, and then
4204          breakpoint_re_set can be called.  If this order is broken, state of
4205          `inserted' flag is wrong, and cause some problems on breakpoint
4206          manipulation.  */
4207       init_wait_for_inferior ();
4208
4209       get_offsets ();           /* Get text, data & bss offsets.  */
4210
4211       /* If we could not find a description using qXfer, and we know
4212          how to do it some other way, try again.  This is not
4213          supported for non-stop; it could be, but it is tricky if
4214          there are no stopped threads when we connect.  */
4215       if (remote_read_description_p (target)
4216           && gdbarch_target_desc (target_gdbarch ()) == NULL)
4217         {
4218           target_clear_description ();
4219           target_find_description ();
4220         }
4221
4222       /* Use the previously fetched status.  */
4223       gdb_assert (wait_status != NULL);
4224       strcpy (rs->buf, wait_status);
4225       rs->cached_wait_status = 1;
4226
4227       start_remote (from_tty); /* Initialize gdb process mechanisms.  */
4228     }
4229   else
4230     {
4231       /* Clear WFI global state.  Do this before finding about new
4232          threads and inferiors, and setting the current inferior.
4233          Otherwise we would clear the proceed status of the current
4234          inferior when we want its stop_soon state to be preserved
4235          (see notice_new_inferior).  */
4236       init_wait_for_inferior ();
4237
4238       /* In non-stop, we will either get an "OK", meaning that there
4239          are no stopped threads at this time; or, a regular stop
4240          reply.  In the latter case, there may be more than one thread
4241          stopped --- we pull them all out using the vStopped
4242          mechanism.  */
4243       if (strcmp (rs->buf, "OK") != 0)
4244         {
4245           struct notif_client *notif = &notif_client_stop;
4246
4247           /* remote_notif_get_pending_replies acks this one, and gets
4248              the rest out.  */
4249           rs->notif_state->pending_event[notif_client_stop.id]
4250             = remote_notif_parse (notif, rs->buf);
4251           remote_notif_get_pending_events (notif);
4252         }
4253
4254       if (thread_count () == 0)
4255         {
4256           if (!extended_p)
4257             error (_("The target is not running (try extended-remote?)"));
4258
4259           /* We're connected, but not running.  Drop out before we
4260              call start_remote.  */
4261           rs->starting_up = 0;
4262           return;
4263         }
4264
4265       /* In non-stop mode, any cached wait status will be stored in
4266          the stop reply queue.  */
4267       gdb_assert (wait_status == NULL);
4268
4269       /* Report all signals during attach/startup.  */
4270       remote_pass_signals (target, 0, NULL);
4271
4272       /* If there are already stopped threads, mark them stopped and
4273          report their stops before giving the prompt to the user.  */
4274       process_initial_stop_replies (from_tty);
4275
4276       if (target_can_async_p ())
4277         target_async (1);
4278     }
4279
4280   /* If we connected to a live target, do some additional setup.  */
4281   if (target_has_execution)
4282     {
4283       if (symfile_objfile)      /* No use without a symbol-file.  */
4284         remote_check_symbols ();
4285     }
4286
4287   /* Possibly the target has been engaged in a trace run started
4288      previously; find out where things are at.  */
4289   if (remote_get_trace_status (target, current_trace_status ()) != -1)
4290     {
4291       struct uploaded_tp *uploaded_tps = NULL;
4292
4293       if (current_trace_status ()->running)
4294         printf_filtered (_("Trace is already running on the target.\n"));
4295
4296       remote_upload_tracepoints (target, &uploaded_tps);
4297
4298       merge_uploaded_tracepoints (&uploaded_tps);
4299     }
4300
4301   /* The thread and inferior lists are now synchronized with the
4302      target, our symbols have been relocated, and we're merged the
4303      target's tracepoints with ours.  We're done with basic start
4304      up.  */
4305   rs->starting_up = 0;
4306
4307   /* Maybe breakpoints are global and need to be inserted now.  */
4308   if (breakpoints_should_be_inserted_now ())
4309     insert_breakpoints ();
4310 }
4311
4312 /* Open a connection to a remote debugger.
4313    NAME is the filename used for communication.  */
4314
4315 static void
4316 remote_open (const char *name, int from_tty)
4317 {
4318   remote_open_1 (name, from_tty, &remote_ops, 0);
4319 }
4320
4321 /* Open a connection to a remote debugger using the extended
4322    remote gdb protocol.  NAME is the filename used for communication.  */
4323
4324 static void
4325 extended_remote_open (const char *name, int from_tty)
4326 {
4327   remote_open_1 (name, from_tty, &extended_remote_ops, 1 /*extended_p */);
4328 }
4329
4330 /* Reset all packets back to "unknown support".  Called when opening a
4331    new connection to a remote target.  */
4332
4333 static void
4334 reset_all_packet_configs_support (void)
4335 {
4336   int i;
4337
4338   for (i = 0; i < PACKET_MAX; i++)
4339     remote_protocol_packets[i].support = PACKET_SUPPORT_UNKNOWN;
4340 }
4341
4342 /* Initialize all packet configs.  */
4343
4344 static void
4345 init_all_packet_configs (void)
4346 {
4347   int i;
4348
4349   for (i = 0; i < PACKET_MAX; i++)
4350     {
4351       remote_protocol_packets[i].detect = AUTO_BOOLEAN_AUTO;
4352       remote_protocol_packets[i].support = PACKET_SUPPORT_UNKNOWN;
4353     }
4354 }
4355
4356 /* Symbol look-up.  */
4357
4358 static void
4359 remote_check_symbols (void)
4360 {
4361   struct remote_state *rs = get_remote_state ();
4362   char *msg, *reply, *tmp;
4363   int end;
4364   long reply_size;
4365   struct cleanup *old_chain;
4366
4367   /* The remote side has no concept of inferiors that aren't running
4368      yet, it only knows about running processes.  If we're connected
4369      but our current inferior is not running, we should not invite the
4370      remote target to request symbol lookups related to its
4371      (unrelated) current process.  */
4372   if (!target_has_execution)
4373     return;
4374
4375   if (packet_support (PACKET_qSymbol) == PACKET_DISABLE)
4376     return;
4377
4378   /* Make sure the remote is pointing at the right process.  Note
4379      there's no way to select "no process".  */
4380   set_general_process ();
4381
4382   /* Allocate a message buffer.  We can't reuse the input buffer in RS,
4383      because we need both at the same time.  */
4384   msg = (char *) xmalloc (get_remote_packet_size ());
4385   old_chain = make_cleanup (xfree, msg);
4386   reply = (char *) xmalloc (get_remote_packet_size ());
4387   make_cleanup (free_current_contents, &reply);
4388   reply_size = get_remote_packet_size ();
4389
4390   /* Invite target to request symbol lookups.  */
4391
4392   putpkt ("qSymbol::");
4393   getpkt (&reply, &reply_size, 0);
4394   packet_ok (reply, &remote_protocol_packets[PACKET_qSymbol]);
4395
4396   while (startswith (reply, "qSymbol:"))
4397     {
4398       struct bound_minimal_symbol sym;
4399
4400       tmp = &reply[8];
4401       end = hex2bin (tmp, (gdb_byte *) msg, strlen (tmp) / 2);
4402       msg[end] = '\0';
4403       sym = lookup_minimal_symbol (msg, NULL, NULL);
4404       if (sym.minsym == NULL)
4405         xsnprintf (msg, get_remote_packet_size (), "qSymbol::%s", &reply[8]);
4406       else
4407         {
4408           int addr_size = gdbarch_addr_bit (target_gdbarch ()) / 8;
4409           CORE_ADDR sym_addr = BMSYMBOL_VALUE_ADDRESS (sym);
4410
4411           /* If this is a function address, return the start of code
4412              instead of any data function descriptor.  */
4413           sym_addr = gdbarch_convert_from_func_ptr_addr (target_gdbarch (),
4414                                                          sym_addr,
4415                                                          &current_target);
4416
4417           xsnprintf (msg, get_remote_packet_size (), "qSymbol:%s:%s",
4418                      phex_nz (sym_addr, addr_size), &reply[8]);
4419         }
4420   
4421       putpkt (msg);
4422       getpkt (&reply, &reply_size, 0);
4423     }
4424
4425   do_cleanups (old_chain);
4426 }
4427
4428 static struct serial *
4429 remote_serial_open (const char *name)
4430 {
4431   static int udp_warning = 0;
4432
4433   /* FIXME: Parsing NAME here is a hack.  But we want to warn here instead
4434      of in ser-tcp.c, because it is the remote protocol assuming that the
4435      serial connection is reliable and not the serial connection promising
4436      to be.  */
4437   if (!udp_warning && startswith (name, "udp:"))
4438     {
4439       warning (_("The remote protocol may be unreliable over UDP.\n"
4440                  "Some events may be lost, rendering further debugging "
4441                  "impossible."));
4442       udp_warning = 1;
4443     }
4444
4445   return serial_open (name);
4446 }
4447
4448 /* Inform the target of our permission settings.  The permission flags
4449    work without this, but if the target knows the settings, it can do
4450    a couple things.  First, it can add its own check, to catch cases
4451    that somehow manage to get by the permissions checks in target
4452    methods.  Second, if the target is wired to disallow particular
4453    settings (for instance, a system in the field that is not set up to
4454    be able to stop at a breakpoint), it can object to any unavailable
4455    permissions.  */
4456
4457 void
4458 remote_set_permissions (struct target_ops *self)
4459 {
4460   struct remote_state *rs = get_remote_state ();
4461
4462   xsnprintf (rs->buf, get_remote_packet_size (), "QAllow:"
4463              "WriteReg:%x;WriteMem:%x;"
4464              "InsertBreak:%x;InsertTrace:%x;"
4465              "InsertFastTrace:%x;Stop:%x",
4466              may_write_registers, may_write_memory,
4467              may_insert_breakpoints, may_insert_tracepoints,
4468              may_insert_fast_tracepoints, may_stop);
4469   putpkt (rs->buf);
4470   getpkt (&rs->buf, &rs->buf_size, 0);
4471
4472   /* If the target didn't like the packet, warn the user.  Do not try
4473      to undo the user's settings, that would just be maddening.  */
4474   if (strcmp (rs->buf, "OK") != 0)
4475     warning (_("Remote refused setting permissions with: %s"), rs->buf);
4476 }
4477
4478 /* This type describes each known response to the qSupported
4479    packet.  */
4480 struct protocol_feature
4481 {
4482   /* The name of this protocol feature.  */
4483   const char *name;
4484
4485   /* The default for this protocol feature.  */
4486   enum packet_support default_support;
4487
4488   /* The function to call when this feature is reported, or after
4489      qSupported processing if the feature is not supported.
4490      The first argument points to this structure.  The second
4491      argument indicates whether the packet requested support be
4492      enabled, disabled, or probed (or the default, if this function
4493      is being called at the end of processing and this feature was
4494      not reported).  The third argument may be NULL; if not NULL, it
4495      is a NUL-terminated string taken from the packet following
4496      this feature's name and an equals sign.  */
4497   void (*func) (const struct protocol_feature *, enum packet_support,
4498                 const char *);
4499
4500   /* The corresponding packet for this feature.  Only used if
4501      FUNC is remote_supported_packet.  */
4502   int packet;
4503 };
4504
4505 static void
4506 remote_supported_packet (const struct protocol_feature *feature,
4507                          enum packet_support support,
4508                          const char *argument)
4509 {
4510   if (argument)
4511     {
4512       warning (_("Remote qSupported response supplied an unexpected value for"
4513                  " \"%s\"."), feature->name);
4514       return;
4515     }
4516
4517   remote_protocol_packets[feature->packet].support = support;
4518 }
4519
4520 static void
4521 remote_packet_size (const struct protocol_feature *feature,
4522                     enum packet_support support, const char *value)
4523 {
4524   struct remote_state *rs = get_remote_state ();
4525
4526   int packet_size;
4527   char *value_end;
4528
4529   if (support != PACKET_ENABLE)
4530     return;
4531
4532   if (value == NULL || *value == '\0')
4533     {
4534       warning (_("Remote target reported \"%s\" without a size."),
4535                feature->name);
4536       return;
4537     }
4538
4539   errno = 0;
4540   packet_size = strtol (value, &value_end, 16);
4541   if (errno != 0 || *value_end != '\0' || packet_size < 0)
4542     {
4543       warning (_("Remote target reported \"%s\" with a bad size: \"%s\"."),
4544                feature->name, value);
4545       return;
4546     }
4547
4548   /* Record the new maximum packet size.  */
4549   rs->explicit_packet_size = packet_size;
4550 }
4551
4552 static const struct protocol_feature remote_protocol_features[] = {
4553   { "PacketSize", PACKET_DISABLE, remote_packet_size, -1 },
4554   { "qXfer:auxv:read", PACKET_DISABLE, remote_supported_packet,
4555     PACKET_qXfer_auxv },
4556   { "qXfer:exec-file:read", PACKET_DISABLE, remote_supported_packet,
4557     PACKET_qXfer_exec_file },
4558   { "qXfer:features:read", PACKET_DISABLE, remote_supported_packet,
4559     PACKET_qXfer_features },
4560   { "qXfer:libraries:read", PACKET_DISABLE, remote_supported_packet,
4561     PACKET_qXfer_libraries },
4562   { "qXfer:libraries-svr4:read", PACKET_DISABLE, remote_supported_packet,
4563     PACKET_qXfer_libraries_svr4 },
4564   { "augmented-libraries-svr4-read", PACKET_DISABLE,
4565     remote_supported_packet, PACKET_augmented_libraries_svr4_read_feature },
4566   { "qXfer:memory-map:read", PACKET_DISABLE, remote_supported_packet,
4567     PACKET_qXfer_memory_map },
4568   { "qXfer:spu:read", PACKET_DISABLE, remote_supported_packet,
4569     PACKET_qXfer_spu_read },
4570   { "qXfer:spu:write", PACKET_DISABLE, remote_supported_packet,
4571     PACKET_qXfer_spu_write },
4572   { "qXfer:osdata:read", PACKET_DISABLE, remote_supported_packet,
4573     PACKET_qXfer_osdata },
4574   { "qXfer:threads:read", PACKET_DISABLE, remote_supported_packet,
4575     PACKET_qXfer_threads },
4576   { "qXfer:traceframe-info:read", PACKET_DISABLE, remote_supported_packet,
4577     PACKET_qXfer_traceframe_info },
4578   { "QPassSignals", PACKET_DISABLE, remote_supported_packet,
4579     PACKET_QPassSignals },
4580   { "QCatchSyscalls", PACKET_DISABLE, remote_supported_packet,
4581     PACKET_QCatchSyscalls },
4582   { "QProgramSignals", PACKET_DISABLE, remote_supported_packet,
4583     PACKET_QProgramSignals },
4584   { "QStartNoAckMode", PACKET_DISABLE, remote_supported_packet,
4585     PACKET_QStartNoAckMode },
4586   { "multiprocess", PACKET_DISABLE, remote_supported_packet,
4587     PACKET_multiprocess_feature },
4588   { "QNonStop", PACKET_DISABLE, remote_supported_packet, PACKET_QNonStop },
4589   { "qXfer:siginfo:read", PACKET_DISABLE, remote_supported_packet,
4590     PACKET_qXfer_siginfo_read },
4591   { "qXfer:siginfo:write", PACKET_DISABLE, remote_supported_packet,
4592     PACKET_qXfer_siginfo_write },
4593   { "ConditionalTracepoints", PACKET_DISABLE, remote_supported_packet,
4594     PACKET_ConditionalTracepoints },
4595   { "ConditionalBreakpoints", PACKET_DISABLE, remote_supported_packet,
4596     PACKET_ConditionalBreakpoints },
4597   { "BreakpointCommands", PACKET_DISABLE, remote_supported_packet,
4598     PACKET_BreakpointCommands },
4599   { "FastTracepoints", PACKET_DISABLE, remote_supported_packet,
4600     PACKET_FastTracepoints },
4601   { "StaticTracepoints", PACKET_DISABLE, remote_supported_packet,
4602     PACKET_StaticTracepoints },
4603   {"InstallInTrace", PACKET_DISABLE, remote_supported_packet,
4604    PACKET_InstallInTrace},
4605   { "DisconnectedTracing", PACKET_DISABLE, remote_supported_packet,
4606     PACKET_DisconnectedTracing_feature },
4607   { "ReverseContinue", PACKET_DISABLE, remote_supported_packet,
4608     PACKET_bc },
4609   { "ReverseStep", PACKET_DISABLE, remote_supported_packet,
4610     PACKET_bs },
4611   { "TracepointSource", PACKET_DISABLE, remote_supported_packet,
4612     PACKET_TracepointSource },
4613   { "QAllow", PACKET_DISABLE, remote_supported_packet,
4614     PACKET_QAllow },
4615   { "EnableDisableTracepoints", PACKET_DISABLE, remote_supported_packet,
4616     PACKET_EnableDisableTracepoints_feature },
4617   { "qXfer:fdpic:read", PACKET_DISABLE, remote_supported_packet,
4618     PACKET_qXfer_fdpic },
4619   { "qXfer:uib:read", PACKET_DISABLE, remote_supported_packet,
4620     PACKET_qXfer_uib },
4621   { "QDisableRandomization", PACKET_DISABLE, remote_supported_packet,
4622     PACKET_QDisableRandomization },
4623   { "QAgent", PACKET_DISABLE, remote_supported_packet, PACKET_QAgent},
4624   { "QTBuffer:size", PACKET_DISABLE,
4625     remote_supported_packet, PACKET_QTBuffer_size},
4626   { "tracenz", PACKET_DISABLE, remote_supported_packet, PACKET_tracenz_feature },
4627   { "Qbtrace:off", PACKET_DISABLE, remote_supported_packet, PACKET_Qbtrace_off },
4628   { "Qbtrace:bts", PACKET_DISABLE, remote_supported_packet, PACKET_Qbtrace_bts },
4629   { "Qbtrace:pt", PACKET_DISABLE, remote_supported_packet, PACKET_Qbtrace_pt },
4630   { "qXfer:btrace:read", PACKET_DISABLE, remote_supported_packet,
4631     PACKET_qXfer_btrace },
4632   { "qXfer:btrace-conf:read", PACKET_DISABLE, remote_supported_packet,
4633     PACKET_qXfer_btrace_conf },
4634   { "Qbtrace-conf:bts:size", PACKET_DISABLE, remote_supported_packet,
4635     PACKET_Qbtrace_conf_bts_size },
4636   { "swbreak", PACKET_DISABLE, remote_supported_packet, PACKET_swbreak_feature },
4637   { "hwbreak", PACKET_DISABLE, remote_supported_packet, PACKET_hwbreak_feature },
4638   { "fork-events", PACKET_DISABLE, remote_supported_packet,
4639     PACKET_fork_event_feature },
4640   { "vfork-events", PACKET_DISABLE, remote_supported_packet,
4641     PACKET_vfork_event_feature },
4642   { "exec-events", PACKET_DISABLE, remote_supported_packet,
4643     PACKET_exec_event_feature },
4644   { "Qbtrace-conf:pt:size", PACKET_DISABLE, remote_supported_packet,
4645     PACKET_Qbtrace_conf_pt_size },
4646   { "vContSupported", PACKET_DISABLE, remote_supported_packet, PACKET_vContSupported },
4647   { "QThreadEvents", PACKET_DISABLE, remote_supported_packet, PACKET_QThreadEvents },
4648   { "no-resumed", PACKET_DISABLE, remote_supported_packet, PACKET_no_resumed },
4649 };
4650
4651 static char *remote_support_xml;
4652
4653 /* Register string appended to "xmlRegisters=" in qSupported query.  */
4654
4655 void
4656 register_remote_support_xml (const char *xml)
4657 {
4658 #if defined(HAVE_LIBEXPAT)
4659   if (remote_support_xml == NULL)
4660     remote_support_xml = concat ("xmlRegisters=", xml, (char *) NULL);
4661   else
4662     {
4663       char *copy = xstrdup (remote_support_xml + 13);
4664       char *p = strtok (copy, ",");
4665
4666       do
4667         {
4668           if (strcmp (p, xml) == 0)
4669             {
4670               /* already there */
4671               xfree (copy);
4672               return;
4673             }
4674         }
4675       while ((p = strtok (NULL, ",")) != NULL);
4676       xfree (copy);
4677
4678       remote_support_xml = reconcat (remote_support_xml,
4679                                      remote_support_xml, ",", xml,
4680                                      (char *) NULL);
4681     }
4682 #endif
4683 }
4684
4685 static char *
4686 remote_query_supported_append (char *msg, const char *append)
4687 {
4688   if (msg)
4689     return reconcat (msg, msg, ";", append, (char *) NULL);
4690   else
4691     return xstrdup (append);
4692 }
4693
4694 static void
4695 remote_query_supported (void)
4696 {
4697   struct remote_state *rs = get_remote_state ();
4698   char *next;
4699   int i;
4700   unsigned char seen [ARRAY_SIZE (remote_protocol_features)];
4701
4702   /* The packet support flags are handled differently for this packet
4703      than for most others.  We treat an error, a disabled packet, and
4704      an empty response identically: any features which must be reported
4705      to be used will be automatically disabled.  An empty buffer
4706      accomplishes this, since that is also the representation for a list
4707      containing no features.  */
4708
4709   rs->buf[0] = 0;
4710   if (packet_support (PACKET_qSupported) != PACKET_DISABLE)
4711     {
4712       char *q = NULL;
4713       struct cleanup *old_chain = make_cleanup (free_current_contents, &q);
4714
4715       if (packet_set_cmd_state (PACKET_multiprocess_feature) != AUTO_BOOLEAN_FALSE)
4716         q = remote_query_supported_append (q, "multiprocess+");
4717
4718       if (packet_set_cmd_state (PACKET_swbreak_feature) != AUTO_BOOLEAN_FALSE)
4719         q = remote_query_supported_append (q, "swbreak+");
4720       if (packet_set_cmd_state (PACKET_hwbreak_feature) != AUTO_BOOLEAN_FALSE)
4721         q = remote_query_supported_append (q, "hwbreak+");
4722
4723       q = remote_query_supported_append (q, "qRelocInsn+");
4724
4725       if (packet_set_cmd_state (PACKET_fork_event_feature)
4726           != AUTO_BOOLEAN_FALSE)
4727         q = remote_query_supported_append (q, "fork-events+");
4728       if (packet_set_cmd_state (PACKET_vfork_event_feature)
4729           != AUTO_BOOLEAN_FALSE)
4730         q = remote_query_supported_append (q, "vfork-events+");
4731       if (packet_set_cmd_state (PACKET_exec_event_feature)
4732           != AUTO_BOOLEAN_FALSE)
4733         q = remote_query_supported_append (q, "exec-events+");
4734
4735       if (packet_set_cmd_state (PACKET_vContSupported) != AUTO_BOOLEAN_FALSE)
4736         q = remote_query_supported_append (q, "vContSupported+");
4737
4738       if (packet_set_cmd_state (PACKET_QThreadEvents) != AUTO_BOOLEAN_FALSE)
4739         q = remote_query_supported_append (q, "QThreadEvents+");
4740
4741       if (packet_set_cmd_state (PACKET_no_resumed) != AUTO_BOOLEAN_FALSE)
4742         q = remote_query_supported_append (q, "no-resumed+");
4743
4744       /* Keep this one last to work around a gdbserver <= 7.10 bug in
4745          the qSupported:xmlRegisters=i386 handling.  */
4746       if (remote_support_xml != NULL)
4747         q = remote_query_supported_append (q, remote_support_xml);
4748
4749       q = reconcat (q, "qSupported:", q, (char *) NULL);
4750       putpkt (q);
4751
4752       do_cleanups (old_chain);
4753
4754       getpkt (&rs->buf, &rs->buf_size, 0);
4755
4756       /* If an error occured, warn, but do not return - just reset the
4757          buffer to empty and go on to disable features.  */
4758       if (packet_ok (rs->buf, &remote_protocol_packets[PACKET_qSupported])
4759           == PACKET_ERROR)
4760         {
4761           warning (_("Remote failure reply: %s"), rs->buf);
4762           rs->buf[0] = 0;
4763         }
4764     }
4765
4766   memset (seen, 0, sizeof (seen));
4767
4768   next = rs->buf;
4769   while (*next)
4770     {
4771       enum packet_support is_supported;
4772       char *p, *end, *name_end, *value;
4773
4774       /* First separate out this item from the rest of the packet.  If
4775          there's another item after this, we overwrite the separator
4776          (terminated strings are much easier to work with).  */
4777       p = next;
4778       end = strchr (p, ';');
4779       if (end == NULL)
4780         {
4781           end = p + strlen (p);
4782           next = end;
4783         }
4784       else
4785         {
4786           *end = '\0';
4787           next = end + 1;
4788
4789           if (end == p)
4790             {
4791               warning (_("empty item in \"qSupported\" response"));
4792               continue;
4793             }
4794         }
4795
4796       name_end = strchr (p, '=');
4797       if (name_end)
4798         {
4799           /* This is a name=value entry.  */
4800           is_supported = PACKET_ENABLE;
4801           value = name_end + 1;
4802           *name_end = '\0';
4803         }
4804       else
4805         {
4806           value = NULL;
4807           switch (end[-1])
4808             {
4809             case '+':
4810               is_supported = PACKET_ENABLE;
4811               break;
4812
4813             case '-':
4814               is_supported = PACKET_DISABLE;
4815               break;
4816
4817             case '?':
4818               is_supported = PACKET_SUPPORT_UNKNOWN;
4819               break;
4820
4821             default:
4822               warning (_("unrecognized item \"%s\" "
4823                          "in \"qSupported\" response"), p);
4824               continue;
4825             }
4826           end[-1] = '\0';
4827         }
4828
4829       for (i = 0; i < ARRAY_SIZE (remote_protocol_features); i++)
4830         if (strcmp (remote_protocol_features[i].name, p) == 0)
4831           {
4832             const struct protocol_feature *feature;
4833
4834             seen[i] = 1;
4835             feature = &remote_protocol_features[i];
4836             feature->func (feature, is_supported, value);
4837             break;
4838           }
4839     }
4840
4841   /* If we increased the packet size, make sure to increase the global
4842      buffer size also.  We delay this until after parsing the entire
4843      qSupported packet, because this is the same buffer we were
4844      parsing.  */
4845   if (rs->buf_size < rs->explicit_packet_size)
4846     {
4847       rs->buf_size = rs->explicit_packet_size;
4848       rs->buf = (char *) xrealloc (rs->buf, rs->buf_size);
4849     }
4850
4851   /* Handle the defaults for unmentioned features.  */
4852   for (i = 0; i < ARRAY_SIZE (remote_protocol_features); i++)
4853     if (!seen[i])
4854       {
4855         const struct protocol_feature *feature;
4856
4857         feature = &remote_protocol_features[i];
4858         feature->func (feature, feature->default_support, NULL);
4859       }
4860 }
4861
4862 /* Serial QUIT handler for the remote serial descriptor.
4863
4864    Defers handling a Ctrl-C until we're done with the current
4865    command/response packet sequence, unless:
4866
4867    - We're setting up the connection.  Don't send a remote interrupt
4868      request, as we're not fully synced yet.  Quit immediately
4869      instead.
4870
4871    - The target has been resumed in the foreground
4872      (target_terminal_is_ours is false) with a synchronous resume
4873      packet, and we're blocked waiting for the stop reply, thus a
4874      Ctrl-C should be immediately sent to the target.
4875
4876    - We get a second Ctrl-C while still within the same serial read or
4877      write.  In that case the serial is seemingly wedged --- offer to
4878      quit/disconnect.
4879
4880    - We see a second Ctrl-C without target response, after having
4881      previously interrupted the target.  In that case the target/stub
4882      is probably wedged --- offer to quit/disconnect.
4883 */
4884
4885 static void
4886 remote_serial_quit_handler (void)
4887 {
4888   struct remote_state *rs = get_remote_state ();
4889
4890   if (check_quit_flag ())
4891     {
4892       /* If we're starting up, we're not fully synced yet.  Quit
4893          immediately.  */
4894       if (rs->starting_up)
4895         quit ();
4896       else if (rs->got_ctrlc_during_io)
4897         {
4898           if (query (_("The target is not responding to GDB commands.\n"
4899                        "Stop debugging it? ")))
4900             remote_unpush_and_throw ();
4901         }
4902       /* If ^C has already been sent once, offer to disconnect.  */
4903       else if (!target_terminal_is_ours () && rs->ctrlc_pending_p)
4904         interrupt_query ();
4905       /* All-stop protocol, and blocked waiting for stop reply.  Send
4906          an interrupt request.  */
4907       else if (!target_terminal_is_ours () && rs->waiting_for_stop_reply)
4908         target_interrupt (inferior_ptid);
4909       else
4910         rs->got_ctrlc_during_io = 1;
4911     }
4912 }
4913
4914 /* Remove any of the remote.c targets from target stack.  Upper targets depend
4915    on it so remove them first.  */
4916
4917 static void
4918 remote_unpush_target (void)
4919 {
4920   pop_all_targets_at_and_above (process_stratum);
4921 }
4922
4923 static void
4924 remote_unpush_and_throw (void)
4925 {
4926   remote_unpush_target ();
4927   throw_error (TARGET_CLOSE_ERROR, _("Disconnected from target."));
4928 }
4929
4930 static void
4931 remote_open_1 (const char *name, int from_tty,
4932                struct target_ops *target, int extended_p)
4933 {
4934   struct remote_state *rs = get_remote_state ();
4935
4936   if (name == 0)
4937     error (_("To open a remote debug connection, you need to specify what\n"
4938            "serial device is attached to the remote system\n"
4939            "(e.g. /dev/ttyS0, /dev/ttya, COM1, etc.)."));
4940
4941   /* See FIXME above.  */
4942   if (!target_async_permitted)
4943     wait_forever_enabled_p = 1;
4944
4945   /* If we're connected to a running target, target_preopen will kill it.
4946      Ask this question first, before target_preopen has a chance to kill
4947      anything.  */
4948   if (rs->remote_desc != NULL && !have_inferiors ())
4949     {
4950       if (from_tty
4951           && !query (_("Already connected to a remote target.  Disconnect? ")))
4952         error (_("Still connected."));
4953     }
4954
4955   /* Here the possibly existing remote target gets unpushed.  */
4956   target_preopen (from_tty);
4957
4958   /* Make sure we send the passed signals list the next time we resume.  */
4959   xfree (rs->last_pass_packet);
4960   rs->last_pass_packet = NULL;
4961
4962   /* Make sure we send the program signals list the next time we
4963      resume.  */
4964   xfree (rs->last_program_signals_packet);
4965   rs->last_program_signals_packet = NULL;
4966
4967   remote_fileio_reset ();
4968   reopen_exec_file ();
4969   reread_symbols ();
4970
4971   rs->remote_desc = remote_serial_open (name);
4972   if (!rs->remote_desc)
4973     perror_with_name (name);
4974
4975   if (baud_rate != -1)
4976     {
4977       if (serial_setbaudrate (rs->remote_desc, baud_rate))
4978         {
4979           /* The requested speed could not be set.  Error out to
4980              top level after closing remote_desc.  Take care to
4981              set remote_desc to NULL to avoid closing remote_desc
4982              more than once.  */
4983           serial_close (rs->remote_desc);
4984           rs->remote_desc = NULL;
4985           perror_with_name (name);
4986         }
4987     }
4988
4989   serial_setparity (rs->remote_desc, serial_parity);
4990   serial_raw (rs->remote_desc);
4991
4992   /* If there is something sitting in the buffer we might take it as a
4993      response to a command, which would be bad.  */
4994   serial_flush_input (rs->remote_desc);
4995
4996   if (from_tty)
4997     {
4998       puts_filtered ("Remote debugging using ");
4999       puts_filtered (name);
5000       puts_filtered ("\n");
5001     }
5002   push_target (target);         /* Switch to using remote target now.  */
5003
5004   /* Register extra event sources in the event loop.  */
5005   remote_async_inferior_event_token
5006     = create_async_event_handler (remote_async_inferior_event_handler,
5007                                   NULL);
5008   rs->notif_state = remote_notif_state_allocate ();
5009
5010   /* Reset the target state; these things will be queried either by
5011      remote_query_supported or as they are needed.  */
5012   reset_all_packet_configs_support ();
5013   rs->cached_wait_status = 0;
5014   rs->explicit_packet_size = 0;
5015   rs->noack_mode = 0;
5016   rs->extended = extended_p;
5017   rs->waiting_for_stop_reply = 0;
5018   rs->ctrlc_pending_p = 0;
5019   rs->got_ctrlc_during_io = 0;
5020
5021   rs->general_thread = not_sent_ptid;
5022   rs->continue_thread = not_sent_ptid;
5023   rs->remote_traceframe_number = -1;
5024
5025   rs->last_resume_exec_dir = EXEC_FORWARD;
5026
5027   /* Probe for ability to use "ThreadInfo" query, as required.  */
5028   rs->use_threadinfo_query = 1;
5029   rs->use_threadextra_query = 1;
5030
5031   readahead_cache_invalidate ();
5032
5033   /* Start out by owning the terminal.  */
5034   remote_async_terminal_ours_p = 1;
5035
5036   if (target_async_permitted)
5037     {
5038       /* FIXME: cagney/1999-09-23: During the initial connection it is
5039          assumed that the target is already ready and able to respond to
5040          requests.  Unfortunately remote_start_remote() eventually calls
5041          wait_for_inferior() with no timeout.  wait_forever_enabled_p gets
5042          around this.  Eventually a mechanism that allows
5043          wait_for_inferior() to expect/get timeouts will be
5044          implemented.  */
5045       wait_forever_enabled_p = 0;
5046     }
5047
5048   /* First delete any symbols previously loaded from shared libraries.  */
5049   no_shared_libraries (NULL, 0);
5050
5051   /* Start afresh.  */
5052   init_thread_list ();
5053
5054   /* Start the remote connection.  If error() or QUIT, discard this
5055      target (we'd otherwise be in an inconsistent state) and then
5056      propogate the error on up the exception chain.  This ensures that
5057      the caller doesn't stumble along blindly assuming that the
5058      function succeeded.  The CLI doesn't have this problem but other
5059      UI's, such as MI do.
5060
5061      FIXME: cagney/2002-05-19: Instead of re-throwing the exception,
5062      this function should return an error indication letting the
5063      caller restore the previous state.  Unfortunately the command
5064      ``target remote'' is directly wired to this function making that
5065      impossible.  On a positive note, the CLI side of this problem has
5066      been fixed - the function set_cmd_context() makes it possible for
5067      all the ``target ....'' commands to share a common callback
5068      function.  See cli-dump.c.  */
5069   {
5070
5071     TRY
5072       {
5073         remote_start_remote (from_tty, target, extended_p);
5074       }
5075     CATCH (ex, RETURN_MASK_ALL)
5076       {
5077         /* Pop the partially set up target - unless something else did
5078            already before throwing the exception.  */
5079         if (rs->remote_desc != NULL)
5080           remote_unpush_target ();
5081         if (target_async_permitted)
5082           wait_forever_enabled_p = 1;
5083         throw_exception (ex);
5084       }
5085     END_CATCH
5086   }
5087
5088   remote_btrace_reset ();
5089
5090   if (target_async_permitted)
5091     wait_forever_enabled_p = 1;
5092 }
5093
5094 /* Detach the specified process.  */
5095
5096 static void
5097 remote_detach_pid (int pid)
5098 {
5099   struct remote_state *rs = get_remote_state ();
5100
5101   if (remote_multi_process_p (rs))
5102     xsnprintf (rs->buf, get_remote_packet_size (), "D;%x", pid);
5103   else
5104     strcpy (rs->buf, "D");
5105
5106   putpkt (rs->buf);
5107   getpkt (&rs->buf, &rs->buf_size, 0);
5108
5109   if (rs->buf[0] == 'O' && rs->buf[1] == 'K')
5110     ;
5111   else if (rs->buf[0] == '\0')
5112     error (_("Remote doesn't know how to detach"));
5113   else
5114     error (_("Can't detach process."));
5115 }
5116
5117 /* This detaches a program to which we previously attached, using
5118    inferior_ptid to identify the process.  After this is done, GDB
5119    can be used to debug some other program.  We better not have left
5120    any breakpoints in the target program or it'll die when it hits
5121    one.  */
5122
5123 static void
5124 remote_detach_1 (const char *args, int from_tty)
5125 {
5126   int pid = ptid_get_pid (inferior_ptid);
5127   struct remote_state *rs = get_remote_state ();
5128   struct thread_info *tp = find_thread_ptid (inferior_ptid);
5129   int is_fork_parent;
5130
5131   if (args)
5132     error (_("Argument given to \"detach\" when remotely debugging."));
5133
5134   if (!target_has_execution)
5135     error (_("No process to detach from."));
5136
5137   if (from_tty)
5138     {
5139       char *exec_file = get_exec_file (0);
5140       if (exec_file == NULL)
5141         exec_file = "";
5142       printf_unfiltered (_("Detaching from program: %s, %s\n"), exec_file,
5143                          target_pid_to_str (pid_to_ptid (pid)));
5144       gdb_flush (gdb_stdout);
5145     }
5146
5147   /* Tell the remote target to detach.  */
5148   remote_detach_pid (pid);
5149
5150   /* Exit only if this is the only active inferior.  */
5151   if (from_tty && !rs->extended && number_of_live_inferiors () == 1)
5152     puts_filtered (_("Ending remote debugging.\n"));
5153
5154   /* Check to see if we are detaching a fork parent.  Note that if we
5155      are detaching a fork child, tp == NULL.  */
5156   is_fork_parent = (tp != NULL
5157                     && tp->pending_follow.kind == TARGET_WAITKIND_FORKED);
5158
5159   /* If doing detach-on-fork, we don't mourn, because that will delete
5160      breakpoints that should be available for the followed inferior.  */
5161   if (!is_fork_parent)
5162     target_mourn_inferior ();
5163   else
5164     {
5165       inferior_ptid = null_ptid;
5166       detach_inferior (pid);
5167     }
5168 }
5169
5170 static void
5171 remote_detach (struct target_ops *ops, const char *args, int from_tty)
5172 {
5173   remote_detach_1 (args, from_tty);
5174 }
5175
5176 static void
5177 extended_remote_detach (struct target_ops *ops, const char *args, int from_tty)
5178 {
5179   remote_detach_1 (args, from_tty);
5180 }
5181
5182 /* Target follow-fork function for remote targets.  On entry, and
5183    at return, the current inferior is the fork parent.
5184
5185    Note that although this is currently only used for extended-remote,
5186    it is named remote_follow_fork in anticipation of using it for the
5187    remote target as well.  */
5188
5189 static int
5190 remote_follow_fork (struct target_ops *ops, int follow_child,
5191                     int detach_fork)
5192 {
5193   struct remote_state *rs = get_remote_state ();
5194   enum target_waitkind kind = inferior_thread ()->pending_follow.kind;
5195
5196   if ((kind == TARGET_WAITKIND_FORKED && remote_fork_event_p (rs))
5197       || (kind == TARGET_WAITKIND_VFORKED && remote_vfork_event_p (rs)))
5198     {
5199       /* When following the parent and detaching the child, we detach
5200          the child here.  For the case of following the child and
5201          detaching the parent, the detach is done in the target-
5202          independent follow fork code in infrun.c.  We can't use
5203          target_detach when detaching an unfollowed child because
5204          the client side doesn't know anything about the child.  */
5205       if (detach_fork && !follow_child)
5206         {
5207           /* Detach the fork child.  */
5208           ptid_t child_ptid;
5209           pid_t child_pid;
5210
5211           child_ptid = inferior_thread ()->pending_follow.value.related_pid;
5212           child_pid = ptid_get_pid (child_ptid);
5213
5214           remote_detach_pid (child_pid);
5215           detach_inferior (child_pid);
5216         }
5217     }
5218   return 0;
5219 }
5220
5221 /* Target follow-exec function for remote targets.  Save EXECD_PATHNAME
5222    in the program space of the new inferior.  On entry and at return the
5223    current inferior is the exec'ing inferior.  INF is the new exec'd
5224    inferior, which may be the same as the exec'ing inferior unless
5225    follow-exec-mode is "new".  */
5226
5227 static void
5228 remote_follow_exec (struct target_ops *ops,
5229                     struct inferior *inf, char *execd_pathname)
5230 {
5231   /* We know that this is a target file name, so if it has the "target:"
5232      prefix we strip it off before saving it in the program space.  */
5233   if (is_target_filename (execd_pathname))
5234     execd_pathname += strlen (TARGET_SYSROOT_PREFIX);
5235
5236   set_pspace_remote_exec_file (inf->pspace, execd_pathname);
5237 }
5238
5239 /* Same as remote_detach, but don't send the "D" packet; just disconnect.  */
5240
5241 static void
5242 remote_disconnect (struct target_ops *target, const char *args, int from_tty)
5243 {
5244   if (args)
5245     error (_("Argument given to \"disconnect\" when remotely debugging."));
5246
5247   /* Make sure we unpush even the extended remote targets.  Calling
5248      target_mourn_inferior won't unpush, and remote_mourn won't
5249      unpush if there is more than one inferior left.  */
5250   unpush_target (target);
5251   generic_mourn_inferior ();
5252
5253   if (from_tty)
5254     puts_filtered ("Ending remote debugging.\n");
5255 }
5256
5257 /* Attach to the process specified by ARGS.  If FROM_TTY is non-zero,
5258    be chatty about it.  */
5259
5260 static void
5261 extended_remote_attach (struct target_ops *target, const char *args,
5262                         int from_tty)
5263 {
5264   struct remote_state *rs = get_remote_state ();
5265   int pid;
5266   char *wait_status = NULL;
5267
5268   pid = parse_pid_to_attach (args);
5269
5270   /* Remote PID can be freely equal to getpid, do not check it here the same
5271      way as in other targets.  */
5272
5273   if (packet_support (PACKET_vAttach) == PACKET_DISABLE)
5274     error (_("This target does not support attaching to a process"));
5275
5276   if (from_tty)
5277     {
5278       char *exec_file = get_exec_file (0);
5279
5280       if (exec_file)
5281         printf_unfiltered (_("Attaching to program: %s, %s\n"), exec_file,
5282                            target_pid_to_str (pid_to_ptid (pid)));
5283       else
5284         printf_unfiltered (_("Attaching to %s\n"),
5285                            target_pid_to_str (pid_to_ptid (pid)));
5286
5287       gdb_flush (gdb_stdout);
5288     }
5289
5290   xsnprintf (rs->buf, get_remote_packet_size (), "vAttach;%x", pid);
5291   putpkt (rs->buf);
5292   getpkt (&rs->buf, &rs->buf_size, 0);
5293
5294   switch (packet_ok (rs->buf,
5295                      &remote_protocol_packets[PACKET_vAttach]))
5296     {
5297     case PACKET_OK:
5298       if (!target_is_non_stop_p ())
5299         {
5300           /* Save the reply for later.  */
5301           wait_status = (char *) alloca (strlen (rs->buf) + 1);
5302           strcpy (wait_status, rs->buf);
5303         }
5304       else if (strcmp (rs->buf, "OK") != 0)
5305         error (_("Attaching to %s failed with: %s"),
5306                target_pid_to_str (pid_to_ptid (pid)),
5307                rs->buf);
5308       break;
5309     case PACKET_UNKNOWN:
5310       error (_("This target does not support attaching to a process"));
5311     default:
5312       error (_("Attaching to %s failed"),
5313              target_pid_to_str (pid_to_ptid (pid)));
5314     }
5315
5316   set_current_inferior (remote_add_inferior (0, pid, 1, 0));
5317
5318   inferior_ptid = pid_to_ptid (pid);
5319
5320   if (target_is_non_stop_p ())
5321     {
5322       struct thread_info *thread;
5323
5324       /* Get list of threads.  */
5325       remote_update_thread_list (target);
5326
5327       thread = first_thread_of_process (pid);
5328       if (thread)
5329         inferior_ptid = thread->ptid;
5330       else
5331         inferior_ptid = pid_to_ptid (pid);
5332
5333       /* Invalidate our notion of the remote current thread.  */
5334       record_currthread (rs, minus_one_ptid);
5335     }
5336   else
5337     {
5338       /* Now, if we have thread information, update inferior_ptid.  */
5339       inferior_ptid = remote_current_thread (inferior_ptid);
5340
5341       /* Add the main thread to the thread list.  */
5342       add_thread_silent (inferior_ptid);
5343     }
5344
5345   /* Next, if the target can specify a description, read it.  We do
5346      this before anything involving memory or registers.  */
5347   target_find_description ();
5348
5349   if (!target_is_non_stop_p ())
5350     {
5351       /* Use the previously fetched status.  */
5352       gdb_assert (wait_status != NULL);
5353
5354       if (target_can_async_p ())
5355         {
5356           struct notif_event *reply
5357             =  remote_notif_parse (&notif_client_stop, wait_status);
5358
5359           push_stop_reply ((struct stop_reply *) reply);
5360
5361           target_async (1);
5362         }
5363       else
5364         {
5365           gdb_assert (wait_status != NULL);
5366           strcpy (rs->buf, wait_status);
5367           rs->cached_wait_status = 1;
5368         }
5369     }
5370   else
5371     gdb_assert (wait_status == NULL);
5372 }
5373
5374 /* Implementation of the to_post_attach method.  */
5375
5376 static void
5377 extended_remote_post_attach (struct target_ops *ops, int pid)
5378 {
5379   /* Get text, data & bss offsets.  */
5380   get_offsets ();
5381
5382   /* In certain cases GDB might not have had the chance to start
5383      symbol lookup up until now.  This could happen if the debugged
5384      binary is not using shared libraries, the vsyscall page is not
5385      present (on Linux) and the binary itself hadn't changed since the
5386      debugging process was started.  */
5387   if (symfile_objfile != NULL)
5388     remote_check_symbols();
5389 }
5390
5391 \f
5392 /* Check for the availability of vCont.  This function should also check
5393    the response.  */
5394
5395 static void
5396 remote_vcont_probe (struct remote_state *rs)
5397 {
5398   char *buf;
5399
5400   strcpy (rs->buf, "vCont?");
5401   putpkt (rs->buf);
5402   getpkt (&rs->buf, &rs->buf_size, 0);
5403   buf = rs->buf;
5404
5405   /* Make sure that the features we assume are supported.  */
5406   if (startswith (buf, "vCont"))
5407     {
5408       char *p = &buf[5];
5409       int support_c, support_C;
5410
5411       rs->supports_vCont.s = 0;
5412       rs->supports_vCont.S = 0;
5413       support_c = 0;
5414       support_C = 0;
5415       rs->supports_vCont.t = 0;
5416       rs->supports_vCont.r = 0;
5417       while (p && *p == ';')
5418         {
5419           p++;
5420           if (*p == 's' && (*(p + 1) == ';' || *(p + 1) == 0))
5421             rs->supports_vCont.s = 1;
5422           else if (*p == 'S' && (*(p + 1) == ';' || *(p + 1) == 0))
5423             rs->supports_vCont.S = 1;
5424           else if (*p == 'c' && (*(p + 1) == ';' || *(p + 1) == 0))
5425             support_c = 1;
5426           else if (*p == 'C' && (*(p + 1) == ';' || *(p + 1) == 0))
5427             support_C = 1;
5428           else if (*p == 't' && (*(p + 1) == ';' || *(p + 1) == 0))
5429             rs->supports_vCont.t = 1;
5430           else if (*p == 'r' && (*(p + 1) == ';' || *(p + 1) == 0))
5431             rs->supports_vCont.r = 1;
5432
5433           p = strchr (p, ';');
5434         }
5435
5436       /* If c, and C are not all supported, we can't use vCont.  Clearing
5437          BUF will make packet_ok disable the packet.  */
5438       if (!support_c || !support_C)
5439         buf[0] = 0;
5440     }
5441
5442   packet_ok (buf, &remote_protocol_packets[PACKET_vCont]);
5443 }
5444
5445 /* Helper function for building "vCont" resumptions.  Write a
5446    resumption to P.  ENDP points to one-passed-the-end of the buffer
5447    we're allowed to write to.  Returns BUF+CHARACTERS_WRITTEN.  The
5448    thread to be resumed is PTID; STEP and SIGGNAL indicate whether the
5449    resumed thread should be single-stepped and/or signalled.  If PTID
5450    equals minus_one_ptid, then all threads are resumed; if PTID
5451    represents a process, then all threads of the process are resumed;
5452    the thread to be stepped and/or signalled is given in the global
5453    INFERIOR_PTID.  */
5454
5455 static char *
5456 append_resumption (char *p, char *endp,
5457                    ptid_t ptid, int step, enum gdb_signal siggnal)
5458 {
5459   struct remote_state *rs = get_remote_state ();
5460
5461   if (step && siggnal != GDB_SIGNAL_0)
5462     p += xsnprintf (p, endp - p, ";S%02x", siggnal);
5463   else if (step
5464            /* GDB is willing to range step.  */
5465            && use_range_stepping
5466            /* Target supports range stepping.  */
5467            && rs->supports_vCont.r
5468            /* We don't currently support range stepping multiple
5469               threads with a wildcard (though the protocol allows it,
5470               so stubs shouldn't make an active effort to forbid
5471               it).  */
5472            && !(remote_multi_process_p (rs) && ptid_is_pid (ptid)))
5473     {
5474       struct thread_info *tp;
5475
5476       if (ptid_equal (ptid, minus_one_ptid))
5477         {
5478           /* If we don't know about the target thread's tid, then
5479              we're resuming magic_null_ptid (see caller).  */
5480           tp = find_thread_ptid (magic_null_ptid);
5481         }
5482       else
5483         tp = find_thread_ptid (ptid);
5484       gdb_assert (tp != NULL);
5485
5486       if (tp->control.may_range_step)
5487         {
5488           int addr_size = gdbarch_addr_bit (target_gdbarch ()) / 8;
5489
5490           p += xsnprintf (p, endp - p, ";r%s,%s",
5491                           phex_nz (tp->control.step_range_start,
5492                                    addr_size),
5493                           phex_nz (tp->control.step_range_end,
5494                                    addr_size));
5495         }
5496       else
5497         p += xsnprintf (p, endp - p, ";s");
5498     }
5499   else if (step)
5500     p += xsnprintf (p, endp - p, ";s");
5501   else if (siggnal != GDB_SIGNAL_0)
5502     p += xsnprintf (p, endp - p, ";C%02x", siggnal);
5503   else
5504     p += xsnprintf (p, endp - p, ";c");
5505
5506   if (remote_multi_process_p (rs) && ptid_is_pid (ptid))
5507     {
5508       ptid_t nptid;
5509
5510       /* All (-1) threads of process.  */
5511       nptid = ptid_build (ptid_get_pid (ptid), -1, 0);
5512
5513       p += xsnprintf (p, endp - p, ":");
5514       p = write_ptid (p, endp, nptid);
5515     }
5516   else if (!ptid_equal (ptid, minus_one_ptid))
5517     {
5518       p += xsnprintf (p, endp - p, ":");
5519       p = write_ptid (p, endp, ptid);
5520     }
5521
5522   return p;
5523 }
5524
5525 /* Clear the thread's private info on resume.  */
5526
5527 static void
5528 resume_clear_thread_private_info (struct thread_info *thread)
5529 {
5530   if (thread->priv != NULL)
5531     {
5532       thread->priv->stop_reason = TARGET_STOPPED_BY_NO_REASON;
5533       thread->priv->watch_data_address = 0;
5534     }
5535 }
5536
5537 /* Append a vCont continue-with-signal action for threads that have a
5538    non-zero stop signal.  */
5539
5540 static char *
5541 append_pending_thread_resumptions (char *p, char *endp, ptid_t ptid)
5542 {
5543   struct thread_info *thread;
5544
5545   ALL_NON_EXITED_THREADS (thread)
5546     if (ptid_match (thread->ptid, ptid)
5547         && !ptid_equal (inferior_ptid, thread->ptid)
5548         && thread->suspend.stop_signal != GDB_SIGNAL_0)
5549       {
5550         p = append_resumption (p, endp, thread->ptid,
5551                                0, thread->suspend.stop_signal);
5552         thread->suspend.stop_signal = GDB_SIGNAL_0;
5553         resume_clear_thread_private_info (thread);
5554       }
5555
5556   return p;
5557 }
5558
5559 /* Resume the remote inferior by using a "vCont" packet.  The thread
5560    to be resumed is PTID; STEP and SIGGNAL indicate whether the
5561    resumed thread should be single-stepped and/or signalled.  If PTID
5562    equals minus_one_ptid, then all threads are resumed; the thread to
5563    be stepped and/or signalled is given in the global INFERIOR_PTID.
5564    This function returns non-zero iff it resumes the inferior.
5565
5566    This function issues a strict subset of all possible vCont commands at the
5567    moment.  */
5568
5569 static int
5570 remote_vcont_resume (ptid_t ptid, int step, enum gdb_signal siggnal)
5571 {
5572   struct remote_state *rs = get_remote_state ();
5573   char *p;
5574   char *endp;
5575
5576   if (packet_support (PACKET_vCont) == PACKET_SUPPORT_UNKNOWN)
5577     remote_vcont_probe (rs);
5578
5579   if (packet_support (PACKET_vCont) == PACKET_DISABLE)
5580     return 0;
5581
5582   p = rs->buf;
5583   endp = rs->buf + get_remote_packet_size ();
5584
5585   /* If we could generate a wider range of packets, we'd have to worry
5586      about overflowing BUF.  Should there be a generic
5587      "multi-part-packet" packet?  */
5588
5589   p += xsnprintf (p, endp - p, "vCont");
5590
5591   if (ptid_equal (ptid, magic_null_ptid))
5592     {
5593       /* MAGIC_NULL_PTID means that we don't have any active threads,
5594          so we don't have any TID numbers the inferior will
5595          understand.  Make sure to only send forms that do not specify
5596          a TID.  */
5597       append_resumption (p, endp, minus_one_ptid, step, siggnal);
5598     }
5599   else if (ptid_equal (ptid, minus_one_ptid) || ptid_is_pid (ptid))
5600     {
5601       /* Resume all threads (of all processes, or of a single
5602          process), with preference for INFERIOR_PTID.  This assumes
5603          inferior_ptid belongs to the set of all threads we are about
5604          to resume.  */
5605       if (step || siggnal != GDB_SIGNAL_0)
5606         {
5607           /* Step inferior_ptid, with or without signal.  */
5608           p = append_resumption (p, endp, inferior_ptid, step, siggnal);
5609         }
5610
5611       /* Also pass down any pending signaled resumption for other
5612          threads not the current.  */
5613       p = append_pending_thread_resumptions (p, endp, ptid);
5614
5615       /* And continue others without a signal.  */
5616       append_resumption (p, endp, ptid, /*step=*/ 0, GDB_SIGNAL_0);
5617     }
5618   else
5619     {
5620       /* Scheduler locking; resume only PTID.  */
5621       append_resumption (p, endp, ptid, step, siggnal);
5622     }
5623
5624   gdb_assert (strlen (rs->buf) < get_remote_packet_size ());
5625   putpkt (rs->buf);
5626
5627   if (target_is_non_stop_p ())
5628     {
5629       /* In non-stop, the stub replies to vCont with "OK".  The stop
5630          reply will be reported asynchronously by means of a `%Stop'
5631          notification.  */
5632       getpkt (&rs->buf, &rs->buf_size, 0);
5633       if (strcmp (rs->buf, "OK") != 0)
5634         error (_("Unexpected vCont reply in non-stop mode: %s"), rs->buf);
5635     }
5636
5637   return 1;
5638 }
5639
5640 /* Tell the remote machine to resume.  */
5641
5642 static void
5643 remote_resume (struct target_ops *ops,
5644                ptid_t ptid, int step, enum gdb_signal siggnal)
5645 {
5646   struct remote_state *rs = get_remote_state ();
5647   char *buf;
5648   struct thread_info *thread;
5649
5650   /* In all-stop, we can't mark REMOTE_ASYNC_GET_PENDING_EVENTS_TOKEN
5651      (explained in remote-notif.c:handle_notification) so
5652      remote_notif_process is not called.  We need find a place where
5653      it is safe to start a 'vNotif' sequence.  It is good to do it
5654      before resuming inferior, because inferior was stopped and no RSP
5655      traffic at that moment.  */
5656   if (!target_is_non_stop_p ())
5657     remote_notif_process (rs->notif_state, &notif_client_stop);
5658
5659   rs->last_sent_signal = siggnal;
5660   rs->last_sent_step = step;
5661
5662   rs->last_resume_exec_dir = execution_direction;
5663
5664   /* The vCont packet doesn't need to specify threads via Hc.  */
5665   /* No reverse support (yet) for vCont.  */
5666   if (execution_direction != EXEC_REVERSE)
5667     if (remote_vcont_resume (ptid, step, siggnal))
5668       goto done;
5669
5670   /* All other supported resume packets do use Hc, so set the continue
5671      thread.  */
5672   if (ptid_equal (ptid, minus_one_ptid))
5673     set_continue_thread (any_thread_ptid);
5674   else
5675     set_continue_thread (ptid);
5676
5677   ALL_NON_EXITED_THREADS (thread)
5678     resume_clear_thread_private_info (thread);
5679
5680   buf = rs->buf;
5681   if (execution_direction == EXEC_REVERSE)
5682     {
5683       /* We don't pass signals to the target in reverse exec mode.  */
5684       if (info_verbose && siggnal != GDB_SIGNAL_0)
5685         warning (_(" - Can't pass signal %d to target in reverse: ignored."),
5686                  siggnal);
5687
5688       if (step && packet_support (PACKET_bs) == PACKET_DISABLE)
5689         error (_("Remote reverse-step not supported."));
5690       if (!step && packet_support (PACKET_bc) == PACKET_DISABLE)
5691         error (_("Remote reverse-continue not supported."));
5692
5693       strcpy (buf, step ? "bs" : "bc");
5694     }
5695   else if (siggnal != GDB_SIGNAL_0)
5696     {
5697       buf[0] = step ? 'S' : 'C';
5698       buf[1] = tohex (((int) siggnal >> 4) & 0xf);
5699       buf[2] = tohex (((int) siggnal) & 0xf);
5700       buf[3] = '\0';
5701     }
5702   else
5703     strcpy (buf, step ? "s" : "c");
5704
5705   putpkt (buf);
5706
5707  done:
5708   /* We are about to start executing the inferior, let's register it
5709      with the event loop.  NOTE: this is the one place where all the
5710      execution commands end up.  We could alternatively do this in each
5711      of the execution commands in infcmd.c.  */
5712   /* FIXME: ezannoni 1999-09-28: We may need to move this out of here
5713      into infcmd.c in order to allow inferior function calls to work
5714      NOT asynchronously.  */
5715   if (target_can_async_p ())
5716     target_async (1);
5717
5718   /* We've just told the target to resume.  The remote server will
5719      wait for the inferior to stop, and then send a stop reply.  In
5720      the mean time, we can't start another command/query ourselves
5721      because the stub wouldn't be ready to process it.  This applies
5722      only to the base all-stop protocol, however.  In non-stop (which
5723      only supports vCont), the stub replies with an "OK", and is
5724      immediate able to process further serial input.  */
5725   if (!target_is_non_stop_p ())
5726     rs->waiting_for_stop_reply = 1;
5727 }
5728 \f
5729
5730 /* Non-stop version of target_stop.  Uses `vCont;t' to stop a remote
5731    thread, all threads of a remote process, or all threads of all
5732    processes.  */
5733
5734 static void
5735 remote_stop_ns (ptid_t ptid)
5736 {
5737   struct remote_state *rs = get_remote_state ();
5738   char *p = rs->buf;
5739   char *endp = rs->buf + get_remote_packet_size ();
5740
5741   if (packet_support (PACKET_vCont) == PACKET_SUPPORT_UNKNOWN)
5742     remote_vcont_probe (rs);
5743
5744   if (!rs->supports_vCont.t)
5745     error (_("Remote server does not support stopping threads"));
5746
5747   if (ptid_equal (ptid, minus_one_ptid)
5748       || (!remote_multi_process_p (rs) && ptid_is_pid (ptid)))
5749     p += xsnprintf (p, endp - p, "vCont;t");
5750   else
5751     {
5752       ptid_t nptid;
5753
5754       p += xsnprintf (p, endp - p, "vCont;t:");
5755
5756       if (ptid_is_pid (ptid))
5757           /* All (-1) threads of process.  */
5758         nptid = ptid_build (ptid_get_pid (ptid), -1, 0);
5759       else
5760         {
5761           /* Small optimization: if we already have a stop reply for
5762              this thread, no use in telling the stub we want this
5763              stopped.  */
5764           if (peek_stop_reply (ptid))
5765             return;
5766
5767           nptid = ptid;
5768         }
5769
5770       write_ptid (p, endp, nptid);
5771     }
5772
5773   /* In non-stop, we get an immediate OK reply.  The stop reply will
5774      come in asynchronously by notification.  */
5775   putpkt (rs->buf);
5776   getpkt (&rs->buf, &rs->buf_size, 0);
5777   if (strcmp (rs->buf, "OK") != 0)
5778     error (_("Stopping %s failed: %s"), target_pid_to_str (ptid), rs->buf);
5779 }
5780
5781 /* All-stop version of target_interrupt.  Sends a break or a ^C to
5782    interrupt the remote target.  It is undefined which thread of which
5783    process reports the interrupt.  */
5784
5785 static void
5786 remote_interrupt_as (void)
5787 {
5788   struct remote_state *rs = get_remote_state ();
5789
5790   rs->ctrlc_pending_p = 1;
5791
5792   /* If the inferior is stopped already, but the core didn't know
5793      about it yet, just ignore the request.  The cached wait status
5794      will be collected in remote_wait.  */
5795   if (rs->cached_wait_status)
5796     return;
5797
5798   /* Send interrupt_sequence to remote target.  */
5799   send_interrupt_sequence ();
5800 }
5801
5802 /* Non-stop version of target_interrupt.  Uses `vCtrlC' to interrupt
5803    the remote target.  It is undefined which thread of which process
5804    reports the interrupt.  Throws an error if the packet is not
5805    supported by the server.  */
5806
5807 static void
5808 remote_interrupt_ns (void)
5809 {
5810   struct remote_state *rs = get_remote_state ();
5811   char *p = rs->buf;
5812   char *endp = rs->buf + get_remote_packet_size ();
5813
5814   xsnprintf (p, endp - p, "vCtrlC");
5815
5816   /* In non-stop, we get an immediate OK reply.  The stop reply will
5817      come in asynchronously by notification.  */
5818   putpkt (rs->buf);
5819   getpkt (&rs->buf, &rs->buf_size, 0);
5820
5821   switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_vCtrlC]))
5822     {
5823     case PACKET_OK:
5824       break;
5825     case PACKET_UNKNOWN:
5826       error (_("No support for interrupting the remote target."));
5827     case PACKET_ERROR:
5828       error (_("Interrupting target failed: %s"), rs->buf);
5829     }
5830 }
5831
5832 /* Implement the to_stop function for the remote targets.  */
5833
5834 static void
5835 remote_stop (struct target_ops *self, ptid_t ptid)
5836 {
5837   if (remote_debug)
5838     fprintf_unfiltered (gdb_stdlog, "remote_stop called\n");
5839
5840   if (target_is_non_stop_p ())
5841     remote_stop_ns (ptid);
5842   else
5843     {
5844       /* We don't currently have a way to transparently pause the
5845          remote target in all-stop mode.  Interrupt it instead.  */
5846       remote_interrupt_as ();
5847     }
5848 }
5849
5850 /* Implement the to_interrupt function for the remote targets.  */
5851
5852 static void
5853 remote_interrupt (struct target_ops *self, ptid_t ptid)
5854 {
5855   struct remote_state *rs = get_remote_state ();
5856
5857   if (remote_debug)
5858     fprintf_unfiltered (gdb_stdlog, "remote_interrupt called\n");
5859
5860   if (target_is_non_stop_p ())
5861     remote_interrupt_ns ();
5862   else
5863     remote_interrupt_as ();
5864 }
5865
5866 /* Implement the to_pass_ctrlc function for the remote targets.  */
5867
5868 static void
5869 remote_pass_ctrlc (struct target_ops *self)
5870 {
5871   struct remote_state *rs = get_remote_state ();
5872
5873   if (remote_debug)
5874     fprintf_unfiltered (gdb_stdlog, "remote_pass_ctrlc called\n");
5875
5876   /* If we're starting up, we're not fully synced yet.  Quit
5877      immediately.  */
5878   if (rs->starting_up)
5879     quit ();
5880   /* If ^C has already been sent once, offer to disconnect.  */
5881   else if (rs->ctrlc_pending_p)
5882     interrupt_query ();
5883   else
5884     target_interrupt (inferior_ptid);
5885 }
5886
5887 /* Ask the user what to do when an interrupt is received.  */
5888
5889 static void
5890 interrupt_query (void)
5891 {
5892   struct remote_state *rs = get_remote_state ();
5893
5894   if (rs->waiting_for_stop_reply && rs->ctrlc_pending_p)
5895     {
5896       if (query (_("The target is not responding to interrupt requests.\n"
5897                    "Stop debugging it? ")))
5898         {
5899           remote_unpush_target ();
5900           throw_error (TARGET_CLOSE_ERROR, _("Disconnected from target."));
5901         }
5902     }
5903   else
5904     {
5905       if (query (_("Interrupted while waiting for the program.\n"
5906                    "Give up waiting? ")))
5907         quit ();
5908     }
5909 }
5910
5911 /* Enable/disable target terminal ownership.  Most targets can use
5912    terminal groups to control terminal ownership.  Remote targets are
5913    different in that explicit transfer of ownership to/from GDB/target
5914    is required.  */
5915
5916 static void
5917 remote_terminal_inferior (struct target_ops *self)
5918 {
5919   /* FIXME: cagney/1999-09-27: Make calls to target_terminal_*()
5920      idempotent.  The event-loop GDB talking to an asynchronous target
5921      with a synchronous command calls this function from both
5922      event-top.c and infrun.c/infcmd.c.  Once GDB stops trying to
5923      transfer the terminal to the target when it shouldn't this guard
5924      can go away.  */
5925   if (!remote_async_terminal_ours_p)
5926     return;
5927   delete_file_handler (input_fd);
5928   remote_async_terminal_ours_p = 0;
5929   /* NOTE: At this point we could also register our selves as the
5930      recipient of all input.  Any characters typed could then be
5931      passed on down to the target.  */
5932 }
5933
5934 static void
5935 remote_terminal_ours (struct target_ops *self)
5936 {
5937   /* See FIXME in remote_terminal_inferior.  */
5938   if (remote_async_terminal_ours_p)
5939     return;
5940   add_file_handler (input_fd, stdin_event_handler, 0);
5941   remote_async_terminal_ours_p = 1;
5942 }
5943
5944 static void
5945 remote_console_output (char *msg)
5946 {
5947   char *p;
5948
5949   for (p = msg; p[0] && p[1]; p += 2)
5950     {
5951       char tb[2];
5952       char c = fromhex (p[0]) * 16 + fromhex (p[1]);
5953
5954       tb[0] = c;
5955       tb[1] = 0;
5956       fputs_unfiltered (tb, gdb_stdtarg);
5957     }
5958   gdb_flush (gdb_stdtarg);
5959 }
5960
5961 typedef struct cached_reg
5962 {
5963   int num;
5964   gdb_byte data[MAX_REGISTER_SIZE];
5965 } cached_reg_t;
5966
5967 DEF_VEC_O(cached_reg_t);
5968
5969 typedef struct stop_reply
5970 {
5971   struct notif_event base;
5972
5973   /* The identifier of the thread about this event  */
5974   ptid_t ptid;
5975
5976   /* The remote state this event is associated with.  When the remote
5977      connection, represented by a remote_state object, is closed,
5978      all the associated stop_reply events should be released.  */
5979   struct remote_state *rs;
5980
5981   struct target_waitstatus ws;
5982
5983   /* Expedited registers.  This makes remote debugging a bit more
5984      efficient for those targets that provide critical registers as
5985      part of their normal status mechanism (as another roundtrip to
5986      fetch them is avoided).  */
5987   VEC(cached_reg_t) *regcache;
5988
5989   enum target_stop_reason stop_reason;
5990
5991   CORE_ADDR watch_data_address;
5992
5993   int core;
5994 } *stop_reply_p;
5995
5996 DECLARE_QUEUE_P (stop_reply_p);
5997 DEFINE_QUEUE_P (stop_reply_p);
5998 /* The list of already fetched and acknowledged stop events.  This
5999    queue is used for notification Stop, and other notifications
6000    don't need queue for their events, because the notification events
6001    of Stop can't be consumed immediately, so that events should be
6002    queued first, and be consumed by remote_wait_{ns,as} one per
6003    time.  Other notifications can consume their events immediately,
6004    so queue is not needed for them.  */
6005 static QUEUE (stop_reply_p) *stop_reply_queue;
6006
6007 static void
6008 stop_reply_xfree (struct stop_reply *r)
6009 {
6010   notif_event_xfree ((struct notif_event *) r);
6011 }
6012
6013 /* Return the length of the stop reply queue.  */
6014
6015 static int
6016 stop_reply_queue_length (void)
6017 {
6018   return QUEUE_length (stop_reply_p, stop_reply_queue);
6019 }
6020
6021 static void
6022 remote_notif_stop_parse (struct notif_client *self, char *buf,
6023                          struct notif_event *event)
6024 {
6025   remote_parse_stop_reply (buf, (struct stop_reply *) event);
6026 }
6027
6028 static void
6029 remote_notif_stop_ack (struct notif_client *self, char *buf,
6030                        struct notif_event *event)
6031 {
6032   struct stop_reply *stop_reply = (struct stop_reply *) event;
6033
6034   /* acknowledge */
6035   putpkt ((char *) self->ack_command);
6036
6037   if (stop_reply->ws.kind == TARGET_WAITKIND_IGNORE)
6038       /* We got an unknown stop reply.  */
6039       error (_("Unknown stop reply"));
6040
6041   push_stop_reply (stop_reply);
6042 }
6043
6044 static int
6045 remote_notif_stop_can_get_pending_events (struct notif_client *self)
6046 {
6047   /* We can't get pending events in remote_notif_process for
6048      notification stop, and we have to do this in remote_wait_ns
6049      instead.  If we fetch all queued events from stub, remote stub
6050      may exit and we have no chance to process them back in
6051      remote_wait_ns.  */
6052   mark_async_event_handler (remote_async_inferior_event_token);
6053   return 0;
6054 }
6055
6056 static void
6057 stop_reply_dtr (struct notif_event *event)
6058 {
6059   struct stop_reply *r = (struct stop_reply *) event;
6060
6061   VEC_free (cached_reg_t, r->regcache);
6062 }
6063
6064 static struct notif_event *
6065 remote_notif_stop_alloc_reply (void)
6066 {
6067   /* We cast to a pointer to the "base class".  */
6068   struct notif_event *r = (struct notif_event *) XNEW (struct stop_reply);
6069
6070   r->dtr = stop_reply_dtr;
6071
6072   return r;
6073 }
6074
6075 /* A client of notification Stop.  */
6076
6077 struct notif_client notif_client_stop =
6078 {
6079   "Stop",
6080   "vStopped",
6081   remote_notif_stop_parse,
6082   remote_notif_stop_ack,
6083   remote_notif_stop_can_get_pending_events,
6084   remote_notif_stop_alloc_reply,
6085   REMOTE_NOTIF_STOP,
6086 };
6087
6088 /* A parameter to pass data in and out.  */
6089
6090 struct queue_iter_param
6091 {
6092   void *input;
6093   struct stop_reply *output;
6094 };
6095
6096 /* Determine if THREAD is a pending fork parent thread.  ARG contains
6097    the pid of the process that owns the threads we want to check, or
6098    -1 if we want to check all threads.  */
6099
6100 static int
6101 is_pending_fork_parent (struct target_waitstatus *ws, int event_pid,
6102                         ptid_t thread_ptid)
6103 {
6104   if (ws->kind == TARGET_WAITKIND_FORKED
6105       || ws->kind == TARGET_WAITKIND_VFORKED)
6106     {
6107       if (event_pid == -1 || event_pid == ptid_get_pid (thread_ptid))
6108         return 1;
6109     }
6110
6111   return 0;
6112 }
6113
6114 /* Check whether EVENT is a fork event, and if it is, remove the
6115    fork child from the context list passed in DATA.  */
6116
6117 static int
6118 remove_child_of_pending_fork (QUEUE (stop_reply_p) *q,
6119                               QUEUE_ITER (stop_reply_p) *iter,
6120                               stop_reply_p event,
6121                               void *data)
6122 {
6123   struct queue_iter_param *param = (struct queue_iter_param *) data;
6124   struct threads_listing_context *context
6125     = (struct threads_listing_context *) param->input;
6126
6127   if (event->ws.kind == TARGET_WAITKIND_FORKED
6128       || event->ws.kind == TARGET_WAITKIND_VFORKED
6129       || event->ws.kind == TARGET_WAITKIND_THREAD_EXITED)
6130     threads_listing_context_remove (&event->ws, context);
6131
6132   return 1;
6133 }
6134
6135 /* If CONTEXT contains any fork child threads that have not been
6136    reported yet, remove them from the CONTEXT list.  If such a
6137    thread exists it is because we are stopped at a fork catchpoint
6138    and have not yet called follow_fork, which will set up the
6139    host-side data structures for the new process.  */
6140
6141 static void
6142 remove_new_fork_children (struct threads_listing_context *context)
6143 {
6144   struct thread_info * thread;
6145   int pid = -1;
6146   struct notif_client *notif = &notif_client_stop;
6147   struct queue_iter_param param;
6148
6149   /* For any threads stopped at a fork event, remove the corresponding
6150      fork child threads from the CONTEXT list.  */
6151   ALL_NON_EXITED_THREADS (thread)
6152     {
6153       struct target_waitstatus *ws;
6154
6155       if (thread->suspend.waitstatus_pending_p)
6156         ws = &thread->suspend.waitstatus;
6157       else
6158         ws = &thread->pending_follow;
6159
6160       if (is_pending_fork_parent (ws, pid, thread->ptid))
6161         {
6162           threads_listing_context_remove (ws, context);
6163         }
6164     }
6165
6166   /* Check for any pending fork events (not reported or processed yet)
6167      in process PID and remove those fork child threads from the
6168      CONTEXT list as well.  */
6169   remote_notif_get_pending_events (notif);
6170   param.input = context;
6171   param.output = NULL;
6172   QUEUE_iterate (stop_reply_p, stop_reply_queue,
6173                  remove_child_of_pending_fork, &param);
6174 }
6175
6176 /* Remove stop replies in the queue if its pid is equal to the given
6177    inferior's pid.  */
6178
6179 static int
6180 remove_stop_reply_for_inferior (QUEUE (stop_reply_p) *q,
6181                                 QUEUE_ITER (stop_reply_p) *iter,
6182                                 stop_reply_p event,
6183                                 void *data)
6184 {
6185   struct queue_iter_param *param = (struct queue_iter_param *) data;
6186   struct inferior *inf = (struct inferior *) param->input;
6187
6188   if (ptid_get_pid (event->ptid) == inf->pid)
6189     {
6190       stop_reply_xfree (event);
6191       QUEUE_remove_elem (stop_reply_p, q, iter);
6192     }
6193
6194   return 1;
6195 }
6196
6197 /* Discard all pending stop replies of inferior INF.  */
6198
6199 static void
6200 discard_pending_stop_replies (struct inferior *inf)
6201 {
6202   struct queue_iter_param param;
6203   struct stop_reply *reply;
6204   struct remote_state *rs = get_remote_state ();
6205   struct remote_notif_state *rns = rs->notif_state;
6206
6207   /* This function can be notified when an inferior exists.  When the
6208      target is not remote, the notification state is NULL.  */
6209   if (rs->remote_desc == NULL)
6210     return;
6211
6212   reply = (struct stop_reply *) rns->pending_event[notif_client_stop.id];
6213
6214   /* Discard the in-flight notification.  */
6215   if (reply != NULL && ptid_get_pid (reply->ptid) == inf->pid)
6216     {
6217       stop_reply_xfree (reply);
6218       rns->pending_event[notif_client_stop.id] = NULL;
6219     }
6220
6221   param.input = inf;
6222   param.output = NULL;
6223   /* Discard the stop replies we have already pulled with
6224      vStopped.  */
6225   QUEUE_iterate (stop_reply_p, stop_reply_queue,
6226                  remove_stop_reply_for_inferior, &param);
6227 }
6228
6229 /* If its remote state is equal to the given remote state,
6230    remove EVENT from the stop reply queue.  */
6231
6232 static int
6233 remove_stop_reply_of_remote_state (QUEUE (stop_reply_p) *q,
6234                                    QUEUE_ITER (stop_reply_p) *iter,
6235                                    stop_reply_p event,
6236                                    void *data)
6237 {
6238   struct queue_iter_param *param = (struct queue_iter_param *) data;
6239   struct remote_state *rs = (struct remote_state *) param->input;
6240
6241   if (event->rs == rs)
6242     {
6243       stop_reply_xfree (event);
6244       QUEUE_remove_elem (stop_reply_p, q, iter);
6245     }
6246
6247   return 1;
6248 }
6249
6250 /* Discard the stop replies for RS in stop_reply_queue.  */
6251
6252 static void
6253 discard_pending_stop_replies_in_queue (struct remote_state *rs)
6254 {
6255   struct queue_iter_param param;
6256
6257   param.input = rs;
6258   param.output = NULL;
6259   /* Discard the stop replies we have already pulled with
6260      vStopped.  */
6261   QUEUE_iterate (stop_reply_p, stop_reply_queue,
6262                  remove_stop_reply_of_remote_state, &param);
6263 }
6264
6265 /* A parameter to pass data in and out.  */
6266
6267 static int
6268 remote_notif_remove_once_on_match (QUEUE (stop_reply_p) *q,
6269                                    QUEUE_ITER (stop_reply_p) *iter,
6270                                    stop_reply_p event,
6271                                    void *data)
6272 {
6273   struct queue_iter_param *param = (struct queue_iter_param *) data;
6274   ptid_t *ptid = (ptid_t *) param->input;
6275
6276   if (ptid_match (event->ptid, *ptid))
6277     {
6278       param->output = event;
6279       QUEUE_remove_elem (stop_reply_p, q, iter);
6280       return 0;
6281     }
6282
6283   return 1;
6284 }
6285
6286 /* Remove the first reply in 'stop_reply_queue' which matches
6287    PTID.  */
6288
6289 static struct stop_reply *
6290 remote_notif_remove_queued_reply (ptid_t ptid)
6291 {
6292   struct queue_iter_param param;
6293
6294   param.input = &ptid;
6295   param.output = NULL;
6296
6297   QUEUE_iterate (stop_reply_p, stop_reply_queue,
6298                  remote_notif_remove_once_on_match, &param);
6299   if (notif_debug)
6300     fprintf_unfiltered (gdb_stdlog,
6301                         "notif: discard queued event: 'Stop' in %s\n",
6302                         target_pid_to_str (ptid));
6303
6304   return param.output;
6305 }
6306
6307 /* Look for a queued stop reply belonging to PTID.  If one is found,
6308    remove it from the queue, and return it.  Returns NULL if none is
6309    found.  If there are still queued events left to process, tell the
6310    event loop to get back to target_wait soon.  */
6311
6312 static struct stop_reply *
6313 queued_stop_reply (ptid_t ptid)
6314 {
6315   struct stop_reply *r = remote_notif_remove_queued_reply (ptid);
6316
6317   if (!QUEUE_is_empty (stop_reply_p, stop_reply_queue))
6318     /* There's still at least an event left.  */
6319     mark_async_event_handler (remote_async_inferior_event_token);
6320
6321   return r;
6322 }
6323
6324 /* Push a fully parsed stop reply in the stop reply queue.  Since we
6325    know that we now have at least one queued event left to pass to the
6326    core side, tell the event loop to get back to target_wait soon.  */
6327
6328 static void
6329 push_stop_reply (struct stop_reply *new_event)
6330 {
6331   QUEUE_enque (stop_reply_p, stop_reply_queue, new_event);
6332
6333   if (notif_debug)
6334     fprintf_unfiltered (gdb_stdlog,
6335                         "notif: push 'Stop' %s to queue %d\n",
6336                         target_pid_to_str (new_event->ptid),
6337                         QUEUE_length (stop_reply_p,
6338                                       stop_reply_queue));
6339
6340   mark_async_event_handler (remote_async_inferior_event_token);
6341 }
6342
6343 static int
6344 stop_reply_match_ptid_and_ws (QUEUE (stop_reply_p) *q,
6345                               QUEUE_ITER (stop_reply_p) *iter,
6346                               struct stop_reply *event,
6347                               void *data)
6348 {
6349   ptid_t *ptid = (ptid_t *) data;
6350
6351   return !(ptid_equal (*ptid, event->ptid)
6352            && event->ws.kind == TARGET_WAITKIND_STOPPED);
6353 }
6354
6355 /* Returns true if we have a stop reply for PTID.  */
6356
6357 static int
6358 peek_stop_reply (ptid_t ptid)
6359 {
6360   return !QUEUE_iterate (stop_reply_p, stop_reply_queue,
6361                          stop_reply_match_ptid_and_ws, &ptid);
6362 }
6363
6364 /* Helper for remote_parse_stop_reply.  Return nonzero if the substring
6365    starting with P and ending with PEND matches PREFIX.  */
6366
6367 static int
6368 strprefix (const char *p, const char *pend, const char *prefix)
6369 {
6370   for ( ; p < pend; p++, prefix++)
6371     if (*p != *prefix)
6372       return 0;
6373   return *prefix == '\0';
6374 }
6375
6376 /* Parse the stop reply in BUF.  Either the function succeeds, and the
6377    result is stored in EVENT, or throws an error.  */
6378
6379 static void
6380 remote_parse_stop_reply (char *buf, struct stop_reply *event)
6381 {
6382   struct remote_arch_state *rsa = get_remote_arch_state ();
6383   ULONGEST addr;
6384   char *p;
6385   int skipregs = 0;
6386
6387   event->ptid = null_ptid;
6388   event->rs = get_remote_state ();
6389   event->ws.kind = TARGET_WAITKIND_IGNORE;
6390   event->ws.value.integer = 0;
6391   event->stop_reason = TARGET_STOPPED_BY_NO_REASON;
6392   event->regcache = NULL;
6393   event->core = -1;
6394
6395   switch (buf[0])
6396     {
6397     case 'T':           /* Status with PC, SP, FP, ...  */
6398       /* Expedited reply, containing Signal, {regno, reg} repeat.  */
6399       /*  format is:  'Tssn...:r...;n...:r...;n...:r...;#cc', where
6400             ss = signal number
6401             n... = register number
6402             r... = register contents
6403       */
6404
6405       p = &buf[3];      /* after Txx */
6406       while (*p)
6407         {
6408           char *p1;
6409           int fieldsize;
6410
6411           p1 = strchr (p, ':');
6412           if (p1 == NULL)
6413             error (_("Malformed packet(a) (missing colon): %s\n\
6414 Packet: '%s'\n"),
6415                    p, buf);
6416           if (p == p1)
6417             error (_("Malformed packet(a) (missing register number): %s\n\
6418 Packet: '%s'\n"),
6419                    p, buf);
6420
6421           /* Some "registers" are actually extended stop information.
6422              Note if you're adding a new entry here: GDB 7.9 and
6423              earlier assume that all register "numbers" that start
6424              with an hex digit are real register numbers.  Make sure
6425              the server only sends such a packet if it knows the
6426              client understands it.  */
6427
6428           if (strprefix (p, p1, "thread"))
6429             event->ptid = read_ptid (++p1, &p);
6430           else if (strprefix (p, p1, "syscall_entry"))
6431             {
6432               ULONGEST sysno;
6433
6434               event->ws.kind = TARGET_WAITKIND_SYSCALL_ENTRY;
6435               p = unpack_varlen_hex (++p1, &sysno);
6436               event->ws.value.syscall_number = (int) sysno;
6437             }
6438           else if (strprefix (p, p1, "syscall_return"))
6439             {
6440               ULONGEST sysno;
6441
6442               event->ws.kind = TARGET_WAITKIND_SYSCALL_RETURN;
6443               p = unpack_varlen_hex (++p1, &sysno);
6444               event->ws.value.syscall_number = (int) sysno;
6445             }
6446           else if (strprefix (p, p1, "watch")
6447                    || strprefix (p, p1, "rwatch")
6448                    || strprefix (p, p1, "awatch"))
6449             {
6450               event->stop_reason = TARGET_STOPPED_BY_WATCHPOINT;
6451               p = unpack_varlen_hex (++p1, &addr);
6452               event->watch_data_address = (CORE_ADDR) addr;
6453             }
6454           else if (strprefix (p, p1, "swbreak"))
6455             {
6456               event->stop_reason = TARGET_STOPPED_BY_SW_BREAKPOINT;
6457
6458               /* Make sure the stub doesn't forget to indicate support
6459                  with qSupported.  */
6460               if (packet_support (PACKET_swbreak_feature) != PACKET_ENABLE)
6461                 error (_("Unexpected swbreak stop reason"));
6462
6463               /* The value part is documented as "must be empty",
6464                  though we ignore it, in case we ever decide to make
6465                  use of it in a backward compatible way.  */
6466               p = strchrnul (p1 + 1, ';');
6467             }
6468           else if (strprefix (p, p1, "hwbreak"))
6469             {
6470               event->stop_reason = TARGET_STOPPED_BY_HW_BREAKPOINT;
6471
6472               /* Make sure the stub doesn't forget to indicate support
6473                  with qSupported.  */
6474               if (packet_support (PACKET_hwbreak_feature) != PACKET_ENABLE)
6475                 error (_("Unexpected hwbreak stop reason"));
6476
6477               /* See above.  */
6478               p = strchrnul (p1 + 1, ';');
6479             }
6480           else if (strprefix (p, p1, "library"))
6481             {
6482               event->ws.kind = TARGET_WAITKIND_LOADED;
6483               p = strchrnul (p1 + 1, ';');
6484             }
6485           else if (strprefix (p, p1, "replaylog"))
6486             {
6487               event->ws.kind = TARGET_WAITKIND_NO_HISTORY;
6488               /* p1 will indicate "begin" or "end", but it makes
6489                  no difference for now, so ignore it.  */
6490               p = strchrnul (p1 + 1, ';');
6491             }
6492           else if (strprefix (p, p1, "core"))
6493             {
6494               ULONGEST c;
6495
6496               p = unpack_varlen_hex (++p1, &c);
6497               event->core = c;
6498             }
6499           else if (strprefix (p, p1, "fork"))
6500             {
6501               event->ws.value.related_pid = read_ptid (++p1, &p);
6502               event->ws.kind = TARGET_WAITKIND_FORKED;
6503             }
6504           else if (strprefix (p, p1, "vfork"))
6505             {
6506               event->ws.value.related_pid = read_ptid (++p1, &p);
6507               event->ws.kind = TARGET_WAITKIND_VFORKED;
6508             }
6509           else if (strprefix (p, p1, "vforkdone"))
6510             {
6511               event->ws.kind = TARGET_WAITKIND_VFORK_DONE;
6512               p = strchrnul (p1 + 1, ';');
6513             }
6514           else if (strprefix (p, p1, "exec"))
6515             {
6516               ULONGEST ignored;
6517               char pathname[PATH_MAX];
6518               int pathlen;
6519
6520               /* Determine the length of the execd pathname.  */
6521               p = unpack_varlen_hex (++p1, &ignored);
6522               pathlen = (p - p1) / 2;
6523
6524               /* Save the pathname for event reporting and for
6525                  the next run command.  */
6526               hex2bin (p1, (gdb_byte *) pathname, pathlen);
6527               pathname[pathlen] = '\0';
6528
6529               /* This is freed during event handling.  */
6530               event->ws.value.execd_pathname = xstrdup (pathname);
6531               event->ws.kind = TARGET_WAITKIND_EXECD;
6532
6533               /* Skip the registers included in this packet, since
6534                  they may be for an architecture different from the
6535                  one used by the original program.  */
6536               skipregs = 1;
6537             }
6538           else if (strprefix (p, p1, "create"))
6539             {
6540               event->ws.kind = TARGET_WAITKIND_THREAD_CREATED;
6541               p = strchrnul (p1 + 1, ';');
6542             }
6543           else
6544             {
6545               ULONGEST pnum;
6546               char *p_temp;
6547
6548               if (skipregs)
6549                 {
6550                   p = strchrnul (p1 + 1, ';');
6551                   p++;
6552                   continue;
6553                 }
6554
6555               /* Maybe a real ``P'' register number.  */
6556               p_temp = unpack_varlen_hex (p, &pnum);
6557               /* If the first invalid character is the colon, we got a
6558                  register number.  Otherwise, it's an unknown stop
6559                  reason.  */
6560               if (p_temp == p1)
6561                 {
6562                   struct packet_reg *reg = packet_reg_from_pnum (rsa, pnum);
6563                   cached_reg_t cached_reg;
6564
6565                   if (reg == NULL)
6566                     error (_("Remote sent bad register number %s: %s\n\
6567 Packet: '%s'\n"),
6568                            hex_string (pnum), p, buf);
6569
6570                   cached_reg.num = reg->regnum;
6571
6572                   p = p1 + 1;
6573                   fieldsize = hex2bin (p, cached_reg.data,
6574                                        register_size (target_gdbarch (),
6575                                                       reg->regnum));
6576                   p += 2 * fieldsize;
6577                   if (fieldsize < register_size (target_gdbarch (),
6578                                                  reg->regnum))
6579                     warning (_("Remote reply is too short: %s"), buf);
6580
6581                   VEC_safe_push (cached_reg_t, event->regcache, &cached_reg);
6582                 }
6583               else
6584                 {
6585                   /* Not a number.  Silently skip unknown optional
6586                      info.  */
6587                   p = strchrnul (p1 + 1, ';');
6588                 }
6589             }
6590
6591           if (*p != ';')
6592             error (_("Remote register badly formatted: %s\nhere: %s"),
6593                    buf, p);
6594           ++p;
6595         }
6596
6597       if (event->ws.kind != TARGET_WAITKIND_IGNORE)
6598         break;
6599
6600       /* fall through */
6601     case 'S':           /* Old style status, just signal only.  */
6602       {
6603         int sig;
6604
6605         event->ws.kind = TARGET_WAITKIND_STOPPED;
6606         sig = (fromhex (buf[1]) << 4) + fromhex (buf[2]);
6607         if (GDB_SIGNAL_FIRST <= sig && sig < GDB_SIGNAL_LAST)
6608           event->ws.value.sig = (enum gdb_signal) sig;
6609         else
6610           event->ws.value.sig = GDB_SIGNAL_UNKNOWN;
6611       }
6612       break;
6613     case 'w':           /* Thread exited.  */
6614       {
6615         char *p;
6616         ULONGEST value;
6617
6618         event->ws.kind = TARGET_WAITKIND_THREAD_EXITED;
6619         p = unpack_varlen_hex (&buf[1], &value);
6620         event->ws.value.integer = value;
6621         if (*p != ';')
6622           error (_("stop reply packet badly formatted: %s"), buf);
6623         event->ptid = read_ptid (++p, NULL);
6624         break;
6625       }
6626     case 'W':           /* Target exited.  */
6627     case 'X':
6628       {
6629         char *p;
6630         int pid;
6631         ULONGEST value;
6632
6633         /* GDB used to accept only 2 hex chars here.  Stubs should
6634            only send more if they detect GDB supports multi-process
6635            support.  */
6636         p = unpack_varlen_hex (&buf[1], &value);
6637
6638         if (buf[0] == 'W')
6639           {
6640             /* The remote process exited.  */
6641             event->ws.kind = TARGET_WAITKIND_EXITED;
6642             event->ws.value.integer = value;
6643           }
6644         else
6645           {
6646             /* The remote process exited with a signal.  */
6647             event->ws.kind = TARGET_WAITKIND_SIGNALLED;
6648             if (GDB_SIGNAL_FIRST <= value && value < GDB_SIGNAL_LAST)
6649               event->ws.value.sig = (enum gdb_signal) value;
6650             else
6651               event->ws.value.sig = GDB_SIGNAL_UNKNOWN;
6652           }
6653
6654         /* If no process is specified, assume inferior_ptid.  */
6655         pid = ptid_get_pid (inferior_ptid);
6656         if (*p == '\0')
6657           ;
6658         else if (*p == ';')
6659           {
6660             p++;
6661
6662             if (*p == '\0')
6663               ;
6664             else if (startswith (p, "process:"))
6665               {
6666                 ULONGEST upid;
6667
6668                 p += sizeof ("process:") - 1;
6669                 unpack_varlen_hex (p, &upid);
6670                 pid = upid;
6671               }
6672             else
6673               error (_("unknown stop reply packet: %s"), buf);
6674           }
6675         else
6676           error (_("unknown stop reply packet: %s"), buf);
6677         event->ptid = pid_to_ptid (pid);
6678       }
6679       break;
6680     case 'N':
6681       event->ws.kind = TARGET_WAITKIND_NO_RESUMED;
6682       event->ptid = minus_one_ptid;
6683       break;
6684     }
6685
6686   if (target_is_non_stop_p () && ptid_equal (event->ptid, null_ptid))
6687     error (_("No process or thread specified in stop reply: %s"), buf);
6688 }
6689
6690 /* When the stub wants to tell GDB about a new notification reply, it
6691    sends a notification (%Stop, for example).  Those can come it at
6692    any time, hence, we have to make sure that any pending
6693    putpkt/getpkt sequence we're making is finished, before querying
6694    the stub for more events with the corresponding ack command
6695    (vStopped, for example).  E.g., if we started a vStopped sequence
6696    immediately upon receiving the notification, something like this
6697    could happen:
6698
6699     1.1) --> Hg 1
6700     1.2) <-- OK
6701     1.3) --> g
6702     1.4) <-- %Stop
6703     1.5) --> vStopped
6704     1.6) <-- (registers reply to step #1.3)
6705
6706    Obviously, the reply in step #1.6 would be unexpected to a vStopped
6707    query.
6708
6709    To solve this, whenever we parse a %Stop notification successfully,
6710    we mark the REMOTE_ASYNC_GET_PENDING_EVENTS_TOKEN, and carry on
6711    doing whatever we were doing:
6712
6713     2.1) --> Hg 1
6714     2.2) <-- OK
6715     2.3) --> g
6716     2.4) <-- %Stop
6717       <GDB marks the REMOTE_ASYNC_GET_PENDING_EVENTS_TOKEN>
6718     2.5) <-- (registers reply to step #2.3)
6719
6720    Eventualy after step #2.5, we return to the event loop, which
6721    notices there's an event on the
6722    REMOTE_ASYNC_GET_PENDING_EVENTS_TOKEN event and calls the
6723    associated callback --- the function below.  At this point, we're
6724    always safe to start a vStopped sequence. :
6725
6726     2.6) --> vStopped
6727     2.7) <-- T05 thread:2
6728     2.8) --> vStopped
6729     2.9) --> OK
6730 */
6731
6732 void
6733 remote_notif_get_pending_events (struct notif_client *nc)
6734 {
6735   struct remote_state *rs = get_remote_state ();
6736
6737   if (rs->notif_state->pending_event[nc->id] != NULL)
6738     {
6739       if (notif_debug)
6740         fprintf_unfiltered (gdb_stdlog,
6741                             "notif: process: '%s' ack pending event\n",
6742                             nc->name);
6743
6744       /* acknowledge */
6745       nc->ack (nc, rs->buf, rs->notif_state->pending_event[nc->id]);
6746       rs->notif_state->pending_event[nc->id] = NULL;
6747
6748       while (1)
6749         {
6750           getpkt (&rs->buf, &rs->buf_size, 0);
6751           if (strcmp (rs->buf, "OK") == 0)
6752             break;
6753           else
6754             remote_notif_ack (nc, rs->buf);
6755         }
6756     }
6757   else
6758     {
6759       if (notif_debug)
6760         fprintf_unfiltered (gdb_stdlog,
6761                             "notif: process: '%s' no pending reply\n",
6762                             nc->name);
6763     }
6764 }
6765
6766 /* Called when it is decided that STOP_REPLY holds the info of the
6767    event that is to be returned to the core.  This function always
6768    destroys STOP_REPLY.  */
6769
6770 static ptid_t
6771 process_stop_reply (struct stop_reply *stop_reply,
6772                     struct target_waitstatus *status)
6773 {
6774   ptid_t ptid;
6775
6776   *status = stop_reply->ws;
6777   ptid = stop_reply->ptid;
6778
6779   /* If no thread/process was reported by the stub, assume the current
6780      inferior.  */
6781   if (ptid_equal (ptid, null_ptid))
6782     ptid = inferior_ptid;
6783
6784   if (status->kind != TARGET_WAITKIND_EXITED
6785       && status->kind != TARGET_WAITKIND_SIGNALLED
6786       && status->kind != TARGET_WAITKIND_NO_RESUMED)
6787     {
6788       struct private_thread_info *remote_thr;
6789
6790       /* Expedited registers.  */
6791       if (stop_reply->regcache)
6792         {
6793           struct regcache *regcache
6794             = get_thread_arch_regcache (ptid, target_gdbarch ());
6795           cached_reg_t *reg;
6796           int ix;
6797
6798           for (ix = 0;
6799                VEC_iterate(cached_reg_t, stop_reply->regcache, ix, reg);
6800                ix++)
6801             regcache_raw_supply (regcache, reg->num, reg->data);
6802           VEC_free (cached_reg_t, stop_reply->regcache);
6803         }
6804
6805       remote_notice_new_inferior (ptid, 0);
6806       remote_thr = demand_private_info (ptid);
6807       remote_thr->core = stop_reply->core;
6808       remote_thr->stop_reason = stop_reply->stop_reason;
6809       remote_thr->watch_data_address = stop_reply->watch_data_address;
6810     }
6811
6812   stop_reply_xfree (stop_reply);
6813   return ptid;
6814 }
6815
6816 /* The non-stop mode version of target_wait.  */
6817
6818 static ptid_t
6819 remote_wait_ns (ptid_t ptid, struct target_waitstatus *status, int options)
6820 {
6821   struct remote_state *rs = get_remote_state ();
6822   struct stop_reply *stop_reply;
6823   int ret;
6824   int is_notif = 0;
6825
6826   /* If in non-stop mode, get out of getpkt even if a
6827      notification is received.  */
6828
6829   ret = getpkt_or_notif_sane (&rs->buf, &rs->buf_size,
6830                               0 /* forever */, &is_notif);
6831   while (1)
6832     {
6833       if (ret != -1 && !is_notif)
6834         switch (rs->buf[0])
6835           {
6836           case 'E':             /* Error of some sort.  */
6837             /* We're out of sync with the target now.  Did it continue
6838                or not?  We can't tell which thread it was in non-stop,
6839                so just ignore this.  */
6840             warning (_("Remote failure reply: %s"), rs->buf);
6841             break;
6842           case 'O':             /* Console output.  */
6843             remote_console_output (rs->buf + 1);
6844             break;
6845           default:
6846             warning (_("Invalid remote reply: %s"), rs->buf);
6847             break;
6848           }
6849
6850       /* Acknowledge a pending stop reply that may have arrived in the
6851          mean time.  */
6852       if (rs->notif_state->pending_event[notif_client_stop.id] != NULL)
6853         remote_notif_get_pending_events (&notif_client_stop);
6854
6855       /* If indeed we noticed a stop reply, we're done.  */
6856       stop_reply = queued_stop_reply (ptid);
6857       if (stop_reply != NULL)
6858         return process_stop_reply (stop_reply, status);
6859
6860       /* Still no event.  If we're just polling for an event, then
6861          return to the event loop.  */
6862       if (options & TARGET_WNOHANG)
6863         {
6864           status->kind = TARGET_WAITKIND_IGNORE;
6865           return minus_one_ptid;
6866         }
6867
6868       /* Otherwise do a blocking wait.  */
6869       ret = getpkt_or_notif_sane (&rs->buf, &rs->buf_size,
6870                                   1 /* forever */, &is_notif);
6871     }
6872 }
6873
6874 /* Wait until the remote machine stops, then return, storing status in
6875    STATUS just as `wait' would.  */
6876
6877 static ptid_t
6878 remote_wait_as (ptid_t ptid, struct target_waitstatus *status, int options)
6879 {
6880   struct remote_state *rs = get_remote_state ();
6881   ptid_t event_ptid = null_ptid;
6882   char *buf;
6883   struct stop_reply *stop_reply;
6884
6885  again:
6886
6887   status->kind = TARGET_WAITKIND_IGNORE;
6888   status->value.integer = 0;
6889
6890   stop_reply = queued_stop_reply (ptid);
6891   if (stop_reply != NULL)
6892     return process_stop_reply (stop_reply, status);
6893
6894   if (rs->cached_wait_status)
6895     /* Use the cached wait status, but only once.  */
6896     rs->cached_wait_status = 0;
6897   else
6898     {
6899       int ret;
6900       int is_notif;
6901       int forever = ((options & TARGET_WNOHANG) == 0
6902                      && wait_forever_enabled_p);
6903
6904       if (!rs->waiting_for_stop_reply)
6905         {
6906           status->kind = TARGET_WAITKIND_NO_RESUMED;
6907           return minus_one_ptid;
6908         }
6909
6910       /* FIXME: cagney/1999-09-27: If we're in async mode we should
6911          _never_ wait for ever -> test on target_is_async_p().
6912          However, before we do that we need to ensure that the caller
6913          knows how to take the target into/out of async mode.  */
6914       ret = getpkt_or_notif_sane (&rs->buf, &rs->buf_size,
6915                                   forever, &is_notif);
6916
6917       /* GDB gets a notification.  Return to core as this event is
6918          not interesting.  */
6919       if (ret != -1 && is_notif)
6920         return minus_one_ptid;
6921
6922       if (ret == -1 && (options & TARGET_WNOHANG) != 0)
6923         return minus_one_ptid;
6924     }
6925
6926   buf = rs->buf;
6927
6928   /* Assume that the target has acknowledged Ctrl-C unless we receive
6929      an 'F' or 'O' packet.  */
6930   if (buf[0] != 'F' && buf[0] != 'O')
6931     rs->ctrlc_pending_p = 0;
6932
6933   switch (buf[0])
6934     {
6935     case 'E':           /* Error of some sort.  */
6936       /* We're out of sync with the target now.  Did it continue or
6937          not?  Not is more likely, so report a stop.  */
6938       rs->waiting_for_stop_reply = 0;
6939
6940       warning (_("Remote failure reply: %s"), buf);
6941       status->kind = TARGET_WAITKIND_STOPPED;
6942       status->value.sig = GDB_SIGNAL_0;
6943       break;
6944     case 'F':           /* File-I/O request.  */
6945       /* GDB may access the inferior memory while handling the File-I/O
6946          request, but we don't want GDB accessing memory while waiting
6947          for a stop reply.  See the comments in putpkt_binary.  Set
6948          waiting_for_stop_reply to 0 temporarily.  */
6949       rs->waiting_for_stop_reply = 0;
6950       remote_fileio_request (buf, rs->ctrlc_pending_p);
6951       rs->ctrlc_pending_p = 0;
6952       /* GDB handled the File-I/O request, and the target is running
6953          again.  Keep waiting for events.  */
6954       rs->waiting_for_stop_reply = 1;
6955       break;
6956     case 'N': case 'T': case 'S': case 'X': case 'W':
6957       {
6958         struct stop_reply *stop_reply;
6959
6960         /* There is a stop reply to handle.  */
6961         rs->waiting_for_stop_reply = 0;
6962
6963         stop_reply
6964           = (struct stop_reply *) remote_notif_parse (&notif_client_stop,
6965                                                       rs->buf);
6966
6967         event_ptid = process_stop_reply (stop_reply, status);
6968         break;
6969       }
6970     case 'O':           /* Console output.  */
6971       remote_console_output (buf + 1);
6972       break;
6973     case '\0':
6974       if (rs->last_sent_signal != GDB_SIGNAL_0)
6975         {
6976           /* Zero length reply means that we tried 'S' or 'C' and the
6977              remote system doesn't support it.  */
6978           target_terminal_ours_for_output ();
6979           printf_filtered
6980             ("Can't send signals to this remote system.  %s not sent.\n",
6981              gdb_signal_to_name (rs->last_sent_signal));
6982           rs->last_sent_signal = GDB_SIGNAL_0;
6983           target_terminal_inferior ();
6984
6985           strcpy ((char *) buf, rs->last_sent_step ? "s" : "c");
6986           putpkt ((char *) buf);
6987           break;
6988         }
6989       /* else fallthrough */
6990     default:
6991       warning (_("Invalid remote reply: %s"), buf);
6992       break;
6993     }
6994
6995   if (status->kind == TARGET_WAITKIND_NO_RESUMED)
6996     return minus_one_ptid;
6997   else if (status->kind == TARGET_WAITKIND_IGNORE)
6998     {
6999       /* Nothing interesting happened.  If we're doing a non-blocking
7000          poll, we're done.  Otherwise, go back to waiting.  */
7001       if (options & TARGET_WNOHANG)
7002         return minus_one_ptid;
7003       else
7004         goto again;
7005     }
7006   else if (status->kind != TARGET_WAITKIND_EXITED
7007            && status->kind != TARGET_WAITKIND_SIGNALLED)
7008     {
7009       if (!ptid_equal (event_ptid, null_ptid))
7010         record_currthread (rs, event_ptid);
7011       else
7012         event_ptid = inferior_ptid;
7013     }
7014   else
7015     /* A process exit.  Invalidate our notion of current thread.  */
7016     record_currthread (rs, minus_one_ptid);
7017
7018   return event_ptid;
7019 }
7020
7021 /* Wait until the remote machine stops, then return, storing status in
7022    STATUS just as `wait' would.  */
7023
7024 static ptid_t
7025 remote_wait (struct target_ops *ops,
7026              ptid_t ptid, struct target_waitstatus *status, int options)
7027 {
7028   ptid_t event_ptid;
7029
7030   if (target_is_non_stop_p ())
7031     event_ptid = remote_wait_ns (ptid, status, options);
7032   else
7033     event_ptid = remote_wait_as (ptid, status, options);
7034
7035   if (target_is_async_p ())
7036     {
7037       /* If there are are events left in the queue tell the event loop
7038          to return here.  */
7039       if (!QUEUE_is_empty (stop_reply_p, stop_reply_queue))
7040         mark_async_event_handler (remote_async_inferior_event_token);
7041     }
7042
7043   return event_ptid;
7044 }
7045
7046 /* Fetch a single register using a 'p' packet.  */
7047
7048 static int
7049 fetch_register_using_p (struct regcache *regcache, struct packet_reg *reg)
7050 {
7051   struct remote_state *rs = get_remote_state ();
7052   char *buf, *p;
7053   char regp[MAX_REGISTER_SIZE];
7054   int i;
7055
7056   if (packet_support (PACKET_p) == PACKET_DISABLE)
7057     return 0;
7058
7059   if (reg->pnum == -1)
7060     return 0;
7061
7062   p = rs->buf;
7063   *p++ = 'p';
7064   p += hexnumstr (p, reg->pnum);
7065   *p++ = '\0';
7066   putpkt (rs->buf);
7067   getpkt (&rs->buf, &rs->buf_size, 0);
7068
7069   buf = rs->buf;
7070
7071   switch (packet_ok (buf, &remote_protocol_packets[PACKET_p]))
7072     {
7073     case PACKET_OK:
7074       break;
7075     case PACKET_UNKNOWN:
7076       return 0;
7077     case PACKET_ERROR:
7078       error (_("Could not fetch register \"%s\"; remote failure reply '%s'"),
7079              gdbarch_register_name (get_regcache_arch (regcache), 
7080                                     reg->regnum), 
7081              buf);
7082     }
7083
7084   /* If this register is unfetchable, tell the regcache.  */
7085   if (buf[0] == 'x')
7086     {
7087       regcache_raw_supply (regcache, reg->regnum, NULL);
7088       return 1;
7089     }
7090
7091   /* Otherwise, parse and supply the value.  */
7092   p = buf;
7093   i = 0;
7094   while (p[0] != 0)
7095     {
7096       if (p[1] == 0)
7097         error (_("fetch_register_using_p: early buf termination"));
7098
7099       regp[i++] = fromhex (p[0]) * 16 + fromhex (p[1]);
7100       p += 2;
7101     }
7102   regcache_raw_supply (regcache, reg->regnum, regp);
7103   return 1;
7104 }
7105
7106 /* Fetch the registers included in the target's 'g' packet.  */
7107
7108 static int
7109 send_g_packet (void)
7110 {
7111   struct remote_state *rs = get_remote_state ();
7112   int buf_len;
7113
7114   xsnprintf (rs->buf, get_remote_packet_size (), "g");
7115   remote_send (&rs->buf, &rs->buf_size);
7116
7117   /* We can get out of synch in various cases.  If the first character
7118      in the buffer is not a hex character, assume that has happened
7119      and try to fetch another packet to read.  */
7120   while ((rs->buf[0] < '0' || rs->buf[0] > '9')
7121          && (rs->buf[0] < 'A' || rs->buf[0] > 'F')
7122          && (rs->buf[0] < 'a' || rs->buf[0] > 'f')
7123          && rs->buf[0] != 'x')  /* New: unavailable register value.  */
7124     {
7125       if (remote_debug)
7126         fprintf_unfiltered (gdb_stdlog,
7127                             "Bad register packet; fetching a new packet\n");
7128       getpkt (&rs->buf, &rs->buf_size, 0);
7129     }
7130
7131   buf_len = strlen (rs->buf);
7132
7133   /* Sanity check the received packet.  */
7134   if (buf_len % 2 != 0)
7135     error (_("Remote 'g' packet reply is of odd length: %s"), rs->buf);
7136
7137   return buf_len / 2;
7138 }
7139
7140 static void
7141 process_g_packet (struct regcache *regcache)
7142 {
7143   struct gdbarch *gdbarch = get_regcache_arch (regcache);
7144   struct remote_state *rs = get_remote_state ();
7145   struct remote_arch_state *rsa = get_remote_arch_state ();
7146   int i, buf_len;
7147   char *p;
7148   char *regs;
7149
7150   buf_len = strlen (rs->buf);
7151
7152   /* Further sanity checks, with knowledge of the architecture.  */
7153   if (buf_len > 2 * rsa->sizeof_g_packet)
7154     error (_("Remote 'g' packet reply is too long: %s"), rs->buf);
7155
7156   /* Save the size of the packet sent to us by the target.  It is used
7157      as a heuristic when determining the max size of packets that the
7158      target can safely receive.  */
7159   if (rsa->actual_register_packet_size == 0)
7160     rsa->actual_register_packet_size = buf_len;
7161
7162   /* If this is smaller than we guessed the 'g' packet would be,
7163      update our records.  A 'g' reply that doesn't include a register's
7164      value implies either that the register is not available, or that
7165      the 'p' packet must be used.  */
7166   if (buf_len < 2 * rsa->sizeof_g_packet)
7167     {
7168       rsa->sizeof_g_packet = buf_len / 2;
7169
7170       for (i = 0; i < gdbarch_num_regs (gdbarch); i++)
7171         {
7172           if (rsa->regs[i].pnum == -1)
7173             continue;
7174
7175           if (rsa->regs[i].offset >= rsa->sizeof_g_packet)
7176             rsa->regs[i].in_g_packet = 0;
7177           else
7178             rsa->regs[i].in_g_packet = 1;
7179         }
7180     }
7181
7182   regs = (char *) alloca (rsa->sizeof_g_packet);
7183
7184   /* Unimplemented registers read as all bits zero.  */
7185   memset (regs, 0, rsa->sizeof_g_packet);
7186
7187   /* Reply describes registers byte by byte, each byte encoded as two
7188      hex characters.  Suck them all up, then supply them to the
7189      register cacheing/storage mechanism.  */
7190
7191   p = rs->buf;
7192   for (i = 0; i < rsa->sizeof_g_packet; i++)
7193     {
7194       if (p[0] == 0 || p[1] == 0)
7195         /* This shouldn't happen - we adjusted sizeof_g_packet above.  */
7196         internal_error (__FILE__, __LINE__,
7197                         _("unexpected end of 'g' packet reply"));
7198
7199       if (p[0] == 'x' && p[1] == 'x')
7200         regs[i] = 0;            /* 'x' */
7201       else
7202         regs[i] = fromhex (p[0]) * 16 + fromhex (p[1]);
7203       p += 2;
7204     }
7205
7206   for (i = 0; i < gdbarch_num_regs (gdbarch); i++)
7207     {
7208       struct packet_reg *r = &rsa->regs[i];
7209
7210       if (r->in_g_packet)
7211         {
7212           if (r->offset * 2 >= strlen (rs->buf))
7213             /* This shouldn't happen - we adjusted in_g_packet above.  */
7214             internal_error (__FILE__, __LINE__,
7215                             _("unexpected end of 'g' packet reply"));
7216           else if (rs->buf[r->offset * 2] == 'x')
7217             {
7218               gdb_assert (r->offset * 2 < strlen (rs->buf));
7219               /* The register isn't available, mark it as such (at
7220                  the same time setting the value to zero).  */
7221               regcache_raw_supply (regcache, r->regnum, NULL);
7222             }
7223           else
7224             regcache_raw_supply (regcache, r->regnum,
7225                                  regs + r->offset);
7226         }
7227     }
7228 }
7229
7230 static void
7231 fetch_registers_using_g (struct regcache *regcache)
7232 {
7233   send_g_packet ();
7234   process_g_packet (regcache);
7235 }
7236
7237 /* Make the remote selected traceframe match GDB's selected
7238    traceframe.  */
7239
7240 static void
7241 set_remote_traceframe (void)
7242 {
7243   int newnum;
7244   struct remote_state *rs = get_remote_state ();
7245
7246   if (rs->remote_traceframe_number == get_traceframe_number ())
7247     return;
7248
7249   /* Avoid recursion, remote_trace_find calls us again.  */
7250   rs->remote_traceframe_number = get_traceframe_number ();
7251
7252   newnum = target_trace_find (tfind_number,
7253                               get_traceframe_number (), 0, 0, NULL);
7254
7255   /* Should not happen.  If it does, all bets are off.  */
7256   if (newnum != get_traceframe_number ())
7257     warning (_("could not set remote traceframe"));
7258 }
7259
7260 static void
7261 remote_fetch_registers (struct target_ops *ops,
7262                         struct regcache *regcache, int regnum)
7263 {
7264   struct remote_arch_state *rsa = get_remote_arch_state ();
7265   int i;
7266
7267   set_remote_traceframe ();
7268   set_general_thread (inferior_ptid);
7269
7270   if (regnum >= 0)
7271     {
7272       struct packet_reg *reg = packet_reg_from_regnum (rsa, regnum);
7273
7274       gdb_assert (reg != NULL);
7275
7276       /* If this register might be in the 'g' packet, try that first -
7277          we are likely to read more than one register.  If this is the
7278          first 'g' packet, we might be overly optimistic about its
7279          contents, so fall back to 'p'.  */
7280       if (reg->in_g_packet)
7281         {
7282           fetch_registers_using_g (regcache);
7283           if (reg->in_g_packet)
7284             return;
7285         }
7286
7287       if (fetch_register_using_p (regcache, reg))
7288         return;
7289
7290       /* This register is not available.  */
7291       regcache_raw_supply (regcache, reg->regnum, NULL);
7292
7293       return;
7294     }
7295
7296   fetch_registers_using_g (regcache);
7297
7298   for (i = 0; i < gdbarch_num_regs (get_regcache_arch (regcache)); i++)
7299     if (!rsa->regs[i].in_g_packet)
7300       if (!fetch_register_using_p (regcache, &rsa->regs[i]))
7301         {
7302           /* This register is not available.  */
7303           regcache_raw_supply (regcache, i, NULL);
7304         }
7305 }
7306
7307 /* Prepare to store registers.  Since we may send them all (using a
7308    'G' request), we have to read out the ones we don't want to change
7309    first.  */
7310
7311 static void
7312 remote_prepare_to_store (struct target_ops *self, struct regcache *regcache)
7313 {
7314   struct remote_arch_state *rsa = get_remote_arch_state ();
7315   int i;
7316   gdb_byte buf[MAX_REGISTER_SIZE];
7317
7318   /* Make sure the entire registers array is valid.  */
7319   switch (packet_support (PACKET_P))
7320     {
7321     case PACKET_DISABLE:
7322     case PACKET_SUPPORT_UNKNOWN:
7323       /* Make sure all the necessary registers are cached.  */
7324       for (i = 0; i < gdbarch_num_regs (get_regcache_arch (regcache)); i++)
7325         if (rsa->regs[i].in_g_packet)
7326           regcache_raw_read (regcache, rsa->regs[i].regnum, buf);
7327       break;
7328     case PACKET_ENABLE:
7329       break;
7330     }
7331 }
7332
7333 /* Helper: Attempt to store REGNUM using the P packet.  Return fail IFF
7334    packet was not recognized.  */
7335
7336 static int
7337 store_register_using_P (const struct regcache *regcache, 
7338                         struct packet_reg *reg)
7339 {
7340   struct gdbarch *gdbarch = get_regcache_arch (regcache);
7341   struct remote_state *rs = get_remote_state ();
7342   /* Try storing a single register.  */
7343   char *buf = rs->buf;
7344   gdb_byte regp[MAX_REGISTER_SIZE];
7345   char *p;
7346
7347   if (packet_support (PACKET_P) == PACKET_DISABLE)
7348     return 0;
7349
7350   if (reg->pnum == -1)
7351     return 0;
7352
7353   xsnprintf (buf, get_remote_packet_size (), "P%s=", phex_nz (reg->pnum, 0));
7354   p = buf + strlen (buf);
7355   regcache_raw_collect (regcache, reg->regnum, regp);
7356   bin2hex (regp, p, register_size (gdbarch, reg->regnum));
7357   putpkt (rs->buf);
7358   getpkt (&rs->buf, &rs->buf_size, 0);
7359
7360   switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_P]))
7361     {
7362     case PACKET_OK:
7363       return 1;
7364     case PACKET_ERROR:
7365       error (_("Could not write register \"%s\"; remote failure reply '%s'"),
7366              gdbarch_register_name (gdbarch, reg->regnum), rs->buf);
7367     case PACKET_UNKNOWN:
7368       return 0;
7369     default:
7370       internal_error (__FILE__, __LINE__, _("Bad result from packet_ok"));
7371     }
7372 }
7373
7374 /* Store register REGNUM, or all registers if REGNUM == -1, from the
7375    contents of the register cache buffer.  FIXME: ignores errors.  */
7376
7377 static void
7378 store_registers_using_G (const struct regcache *regcache)
7379 {
7380   struct remote_state *rs = get_remote_state ();
7381   struct remote_arch_state *rsa = get_remote_arch_state ();
7382   gdb_byte *regs;
7383   char *p;
7384
7385   /* Extract all the registers in the regcache copying them into a
7386      local buffer.  */
7387   {
7388     int i;
7389
7390     regs = (gdb_byte *) alloca (rsa->sizeof_g_packet);
7391     memset (regs, 0, rsa->sizeof_g_packet);
7392     for (i = 0; i < gdbarch_num_regs (get_regcache_arch (regcache)); i++)
7393       {
7394         struct packet_reg *r = &rsa->regs[i];
7395
7396         if (r->in_g_packet)
7397           regcache_raw_collect (regcache, r->regnum, regs + r->offset);
7398       }
7399   }
7400
7401   /* Command describes registers byte by byte,
7402      each byte encoded as two hex characters.  */
7403   p = rs->buf;
7404   *p++ = 'G';
7405   /* remote_prepare_to_store insures that rsa->sizeof_g_packet gets
7406      updated.  */
7407   bin2hex (regs, p, rsa->sizeof_g_packet);
7408   putpkt (rs->buf);
7409   getpkt (&rs->buf, &rs->buf_size, 0);
7410   if (packet_check_result (rs->buf) == PACKET_ERROR)
7411     error (_("Could not write registers; remote failure reply '%s'"), 
7412            rs->buf);
7413 }
7414
7415 /* Store register REGNUM, or all registers if REGNUM == -1, from the contents
7416    of the register cache buffer.  FIXME: ignores errors.  */
7417
7418 static void
7419 remote_store_registers (struct target_ops *ops,
7420                         struct regcache *regcache, int regnum)
7421 {
7422   struct remote_arch_state *rsa = get_remote_arch_state ();
7423   int i;
7424
7425   set_remote_traceframe ();
7426   set_general_thread (inferior_ptid);
7427
7428   if (regnum >= 0)
7429     {
7430       struct packet_reg *reg = packet_reg_from_regnum (rsa, regnum);
7431
7432       gdb_assert (reg != NULL);
7433
7434       /* Always prefer to store registers using the 'P' packet if
7435          possible; we often change only a small number of registers.
7436          Sometimes we change a larger number; we'd need help from a
7437          higher layer to know to use 'G'.  */
7438       if (store_register_using_P (regcache, reg))
7439         return;
7440
7441       /* For now, don't complain if we have no way to write the
7442          register.  GDB loses track of unavailable registers too
7443          easily.  Some day, this may be an error.  We don't have
7444          any way to read the register, either...  */
7445       if (!reg->in_g_packet)
7446         return;
7447
7448       store_registers_using_G (regcache);
7449       return;
7450     }
7451
7452   store_registers_using_G (regcache);
7453
7454   for (i = 0; i < gdbarch_num_regs (get_regcache_arch (regcache)); i++)
7455     if (!rsa->regs[i].in_g_packet)
7456       if (!store_register_using_P (regcache, &rsa->regs[i]))
7457         /* See above for why we do not issue an error here.  */
7458         continue;
7459 }
7460 \f
7461
7462 /* Return the number of hex digits in num.  */
7463
7464 static int
7465 hexnumlen (ULONGEST num)
7466 {
7467   int i;
7468
7469   for (i = 0; num != 0; i++)
7470     num >>= 4;
7471
7472   return max (i, 1);
7473 }
7474
7475 /* Set BUF to the minimum number of hex digits representing NUM.  */
7476
7477 static int
7478 hexnumstr (char *buf, ULONGEST num)
7479 {
7480   int len = hexnumlen (num);
7481
7482   return hexnumnstr (buf, num, len);
7483 }
7484
7485
7486 /* Set BUF to the hex digits representing NUM, padded to WIDTH characters.  */
7487
7488 static int
7489 hexnumnstr (char *buf, ULONGEST num, int width)
7490 {
7491   int i;
7492
7493   buf[width] = '\0';
7494
7495   for (i = width - 1; i >= 0; i--)
7496     {
7497       buf[i] = "0123456789abcdef"[(num & 0xf)];
7498       num >>= 4;
7499     }
7500
7501   return width;
7502 }
7503
7504 /* Mask all but the least significant REMOTE_ADDRESS_SIZE bits.  */
7505
7506 static CORE_ADDR
7507 remote_address_masked (CORE_ADDR addr)
7508 {
7509   unsigned int address_size = remote_address_size;
7510
7511   /* If "remoteaddresssize" was not set, default to target address size.  */
7512   if (!address_size)
7513     address_size = gdbarch_addr_bit (target_gdbarch ());
7514
7515   if (address_size > 0
7516       && address_size < (sizeof (ULONGEST) * 8))
7517     {
7518       /* Only create a mask when that mask can safely be constructed
7519          in a ULONGEST variable.  */
7520       ULONGEST mask = 1;
7521
7522       mask = (mask << address_size) - 1;
7523       addr &= mask;
7524     }
7525   return addr;
7526 }
7527
7528 /* Determine whether the remote target supports binary downloading.
7529    This is accomplished by sending a no-op memory write of zero length
7530    to the target at the specified address. It does not suffice to send
7531    the whole packet, since many stubs strip the eighth bit and
7532    subsequently compute a wrong checksum, which causes real havoc with
7533    remote_write_bytes.
7534
7535    NOTE: This can still lose if the serial line is not eight-bit
7536    clean.  In cases like this, the user should clear "remote
7537    X-packet".  */
7538
7539 static void
7540 check_binary_download (CORE_ADDR addr)
7541 {
7542   struct remote_state *rs = get_remote_state ();
7543
7544   switch (packet_support (PACKET_X))
7545     {
7546     case PACKET_DISABLE:
7547       break;
7548     case PACKET_ENABLE:
7549       break;
7550     case PACKET_SUPPORT_UNKNOWN:
7551       {
7552         char *p;
7553
7554         p = rs->buf;
7555         *p++ = 'X';
7556         p += hexnumstr (p, (ULONGEST) addr);
7557         *p++ = ',';
7558         p += hexnumstr (p, (ULONGEST) 0);
7559         *p++ = ':';
7560         *p = '\0';
7561
7562         putpkt_binary (rs->buf, (int) (p - rs->buf));
7563         getpkt (&rs->buf, &rs->buf_size, 0);
7564
7565         if (rs->buf[0] == '\0')
7566           {
7567             if (remote_debug)
7568               fprintf_unfiltered (gdb_stdlog,
7569                                   "binary downloading NOT "
7570                                   "supported by target\n");
7571             remote_protocol_packets[PACKET_X].support = PACKET_DISABLE;
7572           }
7573         else
7574           {
7575             if (remote_debug)
7576               fprintf_unfiltered (gdb_stdlog,
7577                                   "binary downloading supported by target\n");
7578             remote_protocol_packets[PACKET_X].support = PACKET_ENABLE;
7579           }
7580         break;
7581       }
7582     }
7583 }
7584
7585 /* Helper function to resize the payload in order to try to get a good
7586    alignment.  We try to write an amount of data such that the next write will
7587    start on an address aligned on REMOTE_ALIGN_WRITES.  */
7588
7589 static int
7590 align_for_efficient_write (int todo, CORE_ADDR memaddr)
7591 {
7592   return ((memaddr + todo) & ~(REMOTE_ALIGN_WRITES - 1)) - memaddr;
7593 }
7594
7595 /* Write memory data directly to the remote machine.
7596    This does not inform the data cache; the data cache uses this.
7597    HEADER is the starting part of the packet.
7598    MEMADDR is the address in the remote memory space.
7599    MYADDR is the address of the buffer in our space.
7600    LEN_UNITS is the number of addressable units to write.
7601    UNIT_SIZE is the length in bytes of an addressable unit.
7602    PACKET_FORMAT should be either 'X' or 'M', and indicates if we
7603    should send data as binary ('X'), or hex-encoded ('M').
7604
7605    The function creates packet of the form
7606        <HEADER><ADDRESS>,<LENGTH>:<DATA>
7607
7608    where encoding of <DATA> is terminated by PACKET_FORMAT.
7609
7610    If USE_LENGTH is 0, then the <LENGTH> field and the preceding comma
7611    are omitted.
7612
7613    Return the transferred status, error or OK (an
7614    'enum target_xfer_status' value).  Save the number of addressable units
7615    transferred in *XFERED_LEN_UNITS.  Only transfer a single packet.
7616
7617    On a platform with an addressable memory size of 2 bytes (UNIT_SIZE == 2), an
7618    exchange between gdb and the stub could look like (?? in place of the
7619    checksum):
7620
7621    -> $m1000,4#??
7622    <- aaaabbbbccccdddd
7623
7624    -> $M1000,3:eeeeffffeeee#??
7625    <- OK
7626
7627    -> $m1000,4#??
7628    <- eeeeffffeeeedddd  */
7629
7630 static enum target_xfer_status
7631 remote_write_bytes_aux (const char *header, CORE_ADDR memaddr,
7632                         const gdb_byte *myaddr, ULONGEST len_units,
7633                         int unit_size, ULONGEST *xfered_len_units,
7634                         char packet_format, int use_length)
7635 {
7636   struct remote_state *rs = get_remote_state ();
7637   char *p;
7638   char *plen = NULL;
7639   int plenlen = 0;
7640   int todo_units;
7641   int units_written;
7642   int payload_capacity_bytes;
7643   int payload_length_bytes;
7644
7645   if (packet_format != 'X' && packet_format != 'M')
7646     internal_error (__FILE__, __LINE__,
7647                     _("remote_write_bytes_aux: bad packet format"));
7648
7649   if (len_units == 0)
7650     return TARGET_XFER_EOF;
7651
7652   payload_capacity_bytes = get_memory_write_packet_size ();
7653
7654   /* The packet buffer will be large enough for the payload;
7655      get_memory_packet_size ensures this.  */
7656   rs->buf[0] = '\0';
7657
7658   /* Compute the size of the actual payload by subtracting out the
7659      packet header and footer overhead: "$M<memaddr>,<len>:...#nn".  */
7660
7661   payload_capacity_bytes -= strlen ("$,:#NN");
7662   if (!use_length)
7663     /* The comma won't be used.  */
7664     payload_capacity_bytes += 1;
7665   payload_capacity_bytes -= strlen (header);
7666   payload_capacity_bytes -= hexnumlen (memaddr);
7667
7668   /* Construct the packet excluding the data: "<header><memaddr>,<len>:".  */
7669
7670   strcat (rs->buf, header);
7671   p = rs->buf + strlen (header);
7672
7673   /* Compute a best guess of the number of bytes actually transfered.  */
7674   if (packet_format == 'X')
7675     {
7676       /* Best guess at number of bytes that will fit.  */
7677       todo_units = min (len_units, payload_capacity_bytes / unit_size);
7678       if (use_length)
7679         payload_capacity_bytes -= hexnumlen (todo_units);
7680       todo_units = min (todo_units, payload_capacity_bytes / unit_size);
7681     }
7682   else
7683     {
7684       /* Number of bytes that will fit.  */
7685       todo_units = min (len_units, (payload_capacity_bytes / unit_size) / 2);
7686       if (use_length)
7687         payload_capacity_bytes -= hexnumlen (todo_units);
7688       todo_units = min (todo_units, (payload_capacity_bytes / unit_size) / 2);
7689     }
7690
7691   if (todo_units <= 0)
7692     internal_error (__FILE__, __LINE__,
7693                     _("minimum packet size too small to write data"));
7694
7695   /* If we already need another packet, then try to align the end
7696      of this packet to a useful boundary.  */
7697   if (todo_units > 2 * REMOTE_ALIGN_WRITES && todo_units < len_units)
7698     todo_units = align_for_efficient_write (todo_units, memaddr);
7699
7700   /* Append "<memaddr>".  */
7701   memaddr = remote_address_masked (memaddr);
7702   p += hexnumstr (p, (ULONGEST) memaddr);
7703
7704   if (use_length)
7705     {
7706       /* Append ",".  */
7707       *p++ = ',';
7708
7709       /* Append the length and retain its location and size.  It may need to be
7710          adjusted once the packet body has been created.  */
7711       plen = p;
7712       plenlen = hexnumstr (p, (ULONGEST) todo_units);
7713       p += plenlen;
7714     }
7715
7716   /* Append ":".  */
7717   *p++ = ':';
7718   *p = '\0';
7719
7720   /* Append the packet body.  */
7721   if (packet_format == 'X')
7722     {
7723       /* Binary mode.  Send target system values byte by byte, in
7724          increasing byte addresses.  Only escape certain critical
7725          characters.  */
7726       payload_length_bytes =
7727           remote_escape_output (myaddr, todo_units, unit_size, (gdb_byte *) p,
7728                                 &units_written, payload_capacity_bytes);
7729
7730       /* If not all TODO units fit, then we'll need another packet.  Make
7731          a second try to keep the end of the packet aligned.  Don't do
7732          this if the packet is tiny.  */
7733       if (units_written < todo_units && units_written > 2 * REMOTE_ALIGN_WRITES)
7734         {
7735           int new_todo_units;
7736
7737           new_todo_units = align_for_efficient_write (units_written, memaddr);
7738
7739           if (new_todo_units != units_written)
7740             payload_length_bytes =
7741                 remote_escape_output (myaddr, new_todo_units, unit_size,
7742                                       (gdb_byte *) p, &units_written,
7743                                       payload_capacity_bytes);
7744         }
7745
7746       p += payload_length_bytes;
7747       if (use_length && units_written < todo_units)
7748         {
7749           /* Escape chars have filled up the buffer prematurely,
7750              and we have actually sent fewer units than planned.
7751              Fix-up the length field of the packet.  Use the same
7752              number of characters as before.  */
7753           plen += hexnumnstr (plen, (ULONGEST) units_written,
7754                               plenlen);
7755           *plen = ':';  /* overwrite \0 from hexnumnstr() */
7756         }
7757     }
7758   else
7759     {
7760       /* Normal mode: Send target system values byte by byte, in
7761          increasing byte addresses.  Each byte is encoded as a two hex
7762          value.  */
7763       p += 2 * bin2hex (myaddr, p, todo_units * unit_size);
7764       units_written = todo_units;
7765     }
7766
7767   putpkt_binary (rs->buf, (int) (p - rs->buf));
7768   getpkt (&rs->buf, &rs->buf_size, 0);
7769
7770   if (rs->buf[0] == 'E')
7771     return TARGET_XFER_E_IO;
7772
7773   /* Return UNITS_WRITTEN, not TODO_UNITS, in case escape chars caused us to
7774      send fewer units than we'd planned.  */
7775   *xfered_len_units = (ULONGEST) units_written;
7776   return TARGET_XFER_OK;
7777 }
7778
7779 /* Write memory data directly to the remote machine.
7780    This does not inform the data cache; the data cache uses this.
7781    MEMADDR is the address in the remote memory space.
7782    MYADDR is the address of the buffer in our space.
7783    LEN is the number of bytes.
7784
7785    Return the transferred status, error or OK (an
7786    'enum target_xfer_status' value).  Save the number of bytes
7787    transferred in *XFERED_LEN.  Only transfer a single packet.  */
7788
7789 static enum target_xfer_status
7790 remote_write_bytes (CORE_ADDR memaddr, const gdb_byte *myaddr, ULONGEST len,
7791                     int unit_size, ULONGEST *xfered_len)
7792 {
7793   char *packet_format = 0;
7794
7795   /* Check whether the target supports binary download.  */
7796   check_binary_download (memaddr);
7797
7798   switch (packet_support (PACKET_X))
7799     {
7800     case PACKET_ENABLE:
7801       packet_format = "X";
7802       break;
7803     case PACKET_DISABLE:
7804       packet_format = "M";
7805       break;
7806     case PACKET_SUPPORT_UNKNOWN:
7807       internal_error (__FILE__, __LINE__,
7808                       _("remote_write_bytes: bad internal state"));
7809     default:
7810       internal_error (__FILE__, __LINE__, _("bad switch"));
7811     }
7812
7813   return remote_write_bytes_aux (packet_format,
7814                                  memaddr, myaddr, len, unit_size, xfered_len,
7815                                  packet_format[0], 1);
7816 }
7817
7818 /* Read memory data directly from the remote machine.
7819    This does not use the data cache; the data cache uses this.
7820    MEMADDR is the address in the remote memory space.
7821    MYADDR is the address of the buffer in our space.
7822    LEN_UNITS is the number of addressable memory units to read..
7823    UNIT_SIZE is the length in bytes of an addressable unit.
7824
7825    Return the transferred status, error or OK (an
7826    'enum target_xfer_status' value).  Save the number of bytes
7827    transferred in *XFERED_LEN_UNITS.
7828
7829    See the comment of remote_write_bytes_aux for an example of
7830    memory read/write exchange between gdb and the stub.  */
7831
7832 static enum target_xfer_status
7833 remote_read_bytes_1 (CORE_ADDR memaddr, gdb_byte *myaddr, ULONGEST len_units,
7834                      int unit_size, ULONGEST *xfered_len_units)
7835 {
7836   struct remote_state *rs = get_remote_state ();
7837   int buf_size_bytes;           /* Max size of packet output buffer.  */
7838   char *p;
7839   int todo_units;
7840   int decoded_bytes;
7841
7842   buf_size_bytes = get_memory_read_packet_size ();
7843   /* The packet buffer will be large enough for the payload;
7844      get_memory_packet_size ensures this.  */
7845
7846   /* Number of units that will fit.  */
7847   todo_units = min (len_units, (buf_size_bytes / unit_size) / 2);
7848
7849   /* Construct "m"<memaddr>","<len>".  */
7850   memaddr = remote_address_masked (memaddr);
7851   p = rs->buf;
7852   *p++ = 'm';
7853   p += hexnumstr (p, (ULONGEST) memaddr);
7854   *p++ = ',';
7855   p += hexnumstr (p, (ULONGEST) todo_units);
7856   *p = '\0';
7857   putpkt (rs->buf);
7858   getpkt (&rs->buf, &rs->buf_size, 0);
7859   if (rs->buf[0] == 'E'
7860       && isxdigit (rs->buf[1]) && isxdigit (rs->buf[2])
7861       && rs->buf[3] == '\0')
7862     return TARGET_XFER_E_IO;
7863   /* Reply describes memory byte by byte, each byte encoded as two hex
7864      characters.  */
7865   p = rs->buf;
7866   decoded_bytes = hex2bin (p, myaddr, todo_units * unit_size);
7867   /* Return what we have.  Let higher layers handle partial reads.  */
7868   *xfered_len_units = (ULONGEST) (decoded_bytes / unit_size);
7869   return TARGET_XFER_OK;
7870 }
7871
7872 /* Using the set of read-only target sections of remote, read live
7873    read-only memory.
7874
7875    For interface/parameters/return description see target.h,
7876    to_xfer_partial.  */
7877
7878 static enum target_xfer_status
7879 remote_xfer_live_readonly_partial (struct target_ops *ops, gdb_byte *readbuf,
7880                                    ULONGEST memaddr, ULONGEST len,
7881                                    int unit_size, ULONGEST *xfered_len)
7882 {
7883   struct target_section *secp;
7884   struct target_section_table *table;
7885
7886   secp = target_section_by_addr (ops, memaddr);
7887   if (secp != NULL
7888       && (bfd_get_section_flags (secp->the_bfd_section->owner,
7889                                  secp->the_bfd_section)
7890           & SEC_READONLY))
7891     {
7892       struct target_section *p;
7893       ULONGEST memend = memaddr + len;
7894
7895       table = target_get_section_table (ops);
7896
7897       for (p = table->sections; p < table->sections_end; p++)
7898         {
7899           if (memaddr >= p->addr)
7900             {
7901               if (memend <= p->endaddr)
7902                 {
7903                   /* Entire transfer is within this section.  */
7904                   return remote_read_bytes_1 (memaddr, readbuf, len, unit_size,
7905                                               xfered_len);
7906                 }
7907               else if (memaddr >= p->endaddr)
7908                 {
7909                   /* This section ends before the transfer starts.  */
7910                   continue;
7911                 }
7912               else
7913                 {
7914                   /* This section overlaps the transfer.  Just do half.  */
7915                   len = p->endaddr - memaddr;
7916                   return remote_read_bytes_1 (memaddr, readbuf, len, unit_size,
7917                                               xfered_len);
7918                 }
7919             }
7920         }
7921     }
7922
7923   return TARGET_XFER_EOF;
7924 }
7925
7926 /* Similar to remote_read_bytes_1, but it reads from the remote stub
7927    first if the requested memory is unavailable in traceframe.
7928    Otherwise, fall back to remote_read_bytes_1.  */
7929
7930 static enum target_xfer_status
7931 remote_read_bytes (struct target_ops *ops, CORE_ADDR memaddr,
7932                    gdb_byte *myaddr, ULONGEST len, int unit_size,
7933                    ULONGEST *xfered_len)
7934 {
7935   if (len == 0)
7936     return TARGET_XFER_EOF;
7937
7938   if (get_traceframe_number () != -1)
7939     {
7940       VEC(mem_range_s) *available;
7941
7942       /* If we fail to get the set of available memory, then the
7943          target does not support querying traceframe info, and so we
7944          attempt reading from the traceframe anyway (assuming the
7945          target implements the old QTro packet then).  */
7946       if (traceframe_available_memory (&available, memaddr, len))
7947         {
7948           struct cleanup *old_chain;
7949
7950           old_chain = make_cleanup (VEC_cleanup(mem_range_s), &available);
7951
7952           if (VEC_empty (mem_range_s, available)
7953               || VEC_index (mem_range_s, available, 0)->start != memaddr)
7954             {
7955               enum target_xfer_status res;
7956
7957               /* Don't read into the traceframe's available
7958                  memory.  */
7959               if (!VEC_empty (mem_range_s, available))
7960                 {
7961                   LONGEST oldlen = len;
7962
7963                   len = VEC_index (mem_range_s, available, 0)->start - memaddr;
7964                   gdb_assert (len <= oldlen);
7965                 }
7966
7967               do_cleanups (old_chain);
7968
7969               /* This goes through the topmost target again.  */
7970               res = remote_xfer_live_readonly_partial (ops, myaddr, memaddr,
7971                                                        len, unit_size, xfered_len);
7972               if (res == TARGET_XFER_OK)
7973                 return TARGET_XFER_OK;
7974               else
7975                 {
7976                   /* No use trying further, we know some memory starting
7977                      at MEMADDR isn't available.  */
7978                   *xfered_len = len;
7979                   return TARGET_XFER_UNAVAILABLE;
7980                 }
7981             }
7982
7983           /* Don't try to read more than how much is available, in
7984              case the target implements the deprecated QTro packet to
7985              cater for older GDBs (the target's knowledge of read-only
7986              sections may be outdated by now).  */
7987           len = VEC_index (mem_range_s, available, 0)->length;
7988
7989           do_cleanups (old_chain);
7990         }
7991     }
7992
7993   return remote_read_bytes_1 (memaddr, myaddr, len, unit_size, xfered_len);
7994 }
7995
7996 \f
7997
7998 /* Sends a packet with content determined by the printf format string
7999    FORMAT and the remaining arguments, then gets the reply.  Returns
8000    whether the packet was a success, a failure, or unknown.  */
8001
8002 static enum packet_result remote_send_printf (const char *format, ...)
8003   ATTRIBUTE_PRINTF (1, 2);
8004
8005 static enum packet_result
8006 remote_send_printf (const char *format, ...)
8007 {
8008   struct remote_state *rs = get_remote_state ();
8009   int max_size = get_remote_packet_size ();
8010   va_list ap;
8011
8012   va_start (ap, format);
8013
8014   rs->buf[0] = '\0';
8015   if (vsnprintf (rs->buf, max_size, format, ap) >= max_size)
8016     internal_error (__FILE__, __LINE__, _("Too long remote packet."));
8017
8018   if (putpkt (rs->buf) < 0)
8019     error (_("Communication problem with target."));
8020
8021   rs->buf[0] = '\0';
8022   getpkt (&rs->buf, &rs->buf_size, 0);
8023
8024   return packet_check_result (rs->buf);
8025 }
8026
8027 static void
8028 restore_remote_timeout (void *p)
8029 {
8030   int value = *(int *)p;
8031
8032   remote_timeout = value;
8033 }
8034
8035 /* Flash writing can take quite some time.  We'll set
8036    effectively infinite timeout for flash operations.
8037    In future, we'll need to decide on a better approach.  */
8038 static const int remote_flash_timeout = 1000;
8039
8040 static void
8041 remote_flash_erase (struct target_ops *ops,
8042                     ULONGEST address, LONGEST length)
8043 {
8044   int addr_size = gdbarch_addr_bit (target_gdbarch ()) / 8;
8045   int saved_remote_timeout = remote_timeout;
8046   enum packet_result ret;
8047   struct cleanup *back_to = make_cleanup (restore_remote_timeout,
8048                                           &saved_remote_timeout);
8049
8050   remote_timeout = remote_flash_timeout;
8051
8052   ret = remote_send_printf ("vFlashErase:%s,%s",
8053                             phex (address, addr_size),
8054                             phex (length, 4));
8055   switch (ret)
8056     {
8057     case PACKET_UNKNOWN:
8058       error (_("Remote target does not support flash erase"));
8059     case PACKET_ERROR:
8060       error (_("Error erasing flash with vFlashErase packet"));
8061     default:
8062       break;
8063     }
8064
8065   do_cleanups (back_to);
8066 }
8067
8068 static enum target_xfer_status
8069 remote_flash_write (struct target_ops *ops, ULONGEST address,
8070                     ULONGEST length, ULONGEST *xfered_len,
8071                     const gdb_byte *data)
8072 {
8073   int saved_remote_timeout = remote_timeout;
8074   enum target_xfer_status ret;
8075   struct cleanup *back_to = make_cleanup (restore_remote_timeout,
8076                                           &saved_remote_timeout);
8077
8078   remote_timeout = remote_flash_timeout;
8079   ret = remote_write_bytes_aux ("vFlashWrite:", address, data, length, 1,
8080                                 xfered_len,'X', 0);
8081   do_cleanups (back_to);
8082
8083   return ret;
8084 }
8085
8086 static void
8087 remote_flash_done (struct target_ops *ops)
8088 {
8089   int saved_remote_timeout = remote_timeout;
8090   int ret;
8091   struct cleanup *back_to = make_cleanup (restore_remote_timeout,
8092                                           &saved_remote_timeout);
8093
8094   remote_timeout = remote_flash_timeout;
8095   ret = remote_send_printf ("vFlashDone");
8096   do_cleanups (back_to);
8097
8098   switch (ret)
8099     {
8100     case PACKET_UNKNOWN:
8101       error (_("Remote target does not support vFlashDone"));
8102     case PACKET_ERROR:
8103       error (_("Error finishing flash operation"));
8104     default:
8105       break;
8106     }
8107 }
8108
8109 static void
8110 remote_files_info (struct target_ops *ignore)
8111 {
8112   puts_filtered ("Debugging a target over a serial line.\n");
8113 }
8114 \f
8115 /* Stuff for dealing with the packets which are part of this protocol.
8116    See comment at top of file for details.  */
8117
8118 /* Close/unpush the remote target, and throw a TARGET_CLOSE_ERROR
8119    error to higher layers.  Called when a serial error is detected.
8120    The exception message is STRING, followed by a colon and a blank,
8121    the system error message for errno at function entry and final dot
8122    for output compatibility with throw_perror_with_name.  */
8123
8124 static void
8125 unpush_and_perror (const char *string)
8126 {
8127   int saved_errno = errno;
8128
8129   remote_unpush_target ();
8130   throw_error (TARGET_CLOSE_ERROR, "%s: %s.", string,
8131                safe_strerror (saved_errno));
8132 }
8133
8134 /* Read a single character from the remote end.  The current quit
8135    handler is overridden to avoid quitting in the middle of packet
8136    sequence, as that would break communication with the remote server.
8137    See remote_serial_quit_handler for more detail.  */
8138
8139 static int
8140 readchar (int timeout)
8141 {
8142   int ch;
8143   struct remote_state *rs = get_remote_state ();
8144   struct cleanup *old_chain;
8145
8146   old_chain = make_cleanup_override_quit_handler (remote_serial_quit_handler);
8147
8148   rs->got_ctrlc_during_io = 0;
8149
8150   ch = serial_readchar (rs->remote_desc, timeout);
8151
8152   if (rs->got_ctrlc_during_io)
8153     set_quit_flag ();
8154
8155   do_cleanups (old_chain);
8156
8157   if (ch >= 0)
8158     return ch;
8159
8160   switch ((enum serial_rc) ch)
8161     {
8162     case SERIAL_EOF:
8163       remote_unpush_target ();
8164       throw_error (TARGET_CLOSE_ERROR, _("Remote connection closed"));
8165       /* no return */
8166     case SERIAL_ERROR:
8167       unpush_and_perror (_("Remote communication error.  "
8168                            "Target disconnected."));
8169       /* no return */
8170     case SERIAL_TIMEOUT:
8171       break;
8172     }
8173   return ch;
8174 }
8175
8176 /* Wrapper for serial_write that closes the target and throws if
8177    writing fails.  The current quit handler is overridden to avoid
8178    quitting in the middle of packet sequence, as that would break
8179    communication with the remote server.  See
8180    remote_serial_quit_handler for more detail.  */
8181
8182 static void
8183 remote_serial_write (const char *str, int len)
8184 {
8185   struct remote_state *rs = get_remote_state ();
8186   struct cleanup *old_chain;
8187
8188   old_chain = make_cleanup_override_quit_handler (remote_serial_quit_handler);
8189
8190   rs->got_ctrlc_during_io = 0;
8191
8192   if (serial_write (rs->remote_desc, str, len))
8193     {
8194       unpush_and_perror (_("Remote communication error.  "
8195                            "Target disconnected."));
8196     }
8197
8198   if (rs->got_ctrlc_during_io)
8199     set_quit_flag ();
8200
8201   do_cleanups (old_chain);
8202 }
8203
8204 /* Send the command in *BUF to the remote machine, and read the reply
8205    into *BUF.  Report an error if we get an error reply.  Resize
8206    *BUF using xrealloc if necessary to hold the result, and update
8207    *SIZEOF_BUF.  */
8208
8209 static void
8210 remote_send (char **buf,
8211              long *sizeof_buf)
8212 {
8213   putpkt (*buf);
8214   getpkt (buf, sizeof_buf, 0);
8215
8216   if ((*buf)[0] == 'E')
8217     error (_("Remote failure reply: %s"), *buf);
8218 }
8219
8220 /* Return a pointer to an xmalloc'ed string representing an escaped
8221    version of BUF, of len N.  E.g. \n is converted to \\n, \t to \\t,
8222    etc.  The caller is responsible for releasing the returned
8223    memory.  */
8224
8225 static char *
8226 escape_buffer (const char *buf, int n)
8227 {
8228   struct cleanup *old_chain;
8229   struct ui_file *stb;
8230   char *str;
8231
8232   stb = mem_fileopen ();
8233   old_chain = make_cleanup_ui_file_delete (stb);
8234
8235   fputstrn_unfiltered (buf, n, '\\', stb);
8236   str = ui_file_xstrdup (stb, NULL);
8237   do_cleanups (old_chain);
8238   return str;
8239 }
8240
8241 /* Display a null-terminated packet on stdout, for debugging, using C
8242    string notation.  */
8243
8244 static void
8245 print_packet (const char *buf)
8246 {
8247   puts_filtered ("\"");
8248   fputstr_filtered (buf, '"', gdb_stdout);
8249   puts_filtered ("\"");
8250 }
8251
8252 int
8253 putpkt (const char *buf)
8254 {
8255   return putpkt_binary (buf, strlen (buf));
8256 }
8257
8258 /* Send a packet to the remote machine, with error checking.  The data
8259    of the packet is in BUF.  The string in BUF can be at most
8260    get_remote_packet_size () - 5 to account for the $, # and checksum,
8261    and for a possible /0 if we are debugging (remote_debug) and want
8262    to print the sent packet as a string.  */
8263
8264 static int
8265 putpkt_binary (const char *buf, int cnt)
8266 {
8267   struct remote_state *rs = get_remote_state ();
8268   int i;
8269   unsigned char csum = 0;
8270   char *buf2 = (char *) xmalloc (cnt + 6);
8271   struct cleanup *old_chain = make_cleanup (xfree, buf2);
8272
8273   int ch;
8274   int tcount = 0;
8275   char *p;
8276
8277   /* Catch cases like trying to read memory or listing threads while
8278      we're waiting for a stop reply.  The remote server wouldn't be
8279      ready to handle this request, so we'd hang and timeout.  We don't
8280      have to worry about this in synchronous mode, because in that
8281      case it's not possible to issue a command while the target is
8282      running.  This is not a problem in non-stop mode, because in that
8283      case, the stub is always ready to process serial input.  */
8284   if (!target_is_non_stop_p ()
8285       && target_is_async_p ()
8286       && rs->waiting_for_stop_reply)
8287     {
8288       error (_("Cannot execute this command while the target is running.\n"
8289                "Use the \"interrupt\" command to stop the target\n"
8290                "and then try again."));
8291     }
8292
8293   /* We're sending out a new packet.  Make sure we don't look at a
8294      stale cached response.  */
8295   rs->cached_wait_status = 0;
8296
8297   /* Copy the packet into buffer BUF2, encapsulating it
8298      and giving it a checksum.  */
8299
8300   p = buf2;
8301   *p++ = '$';
8302
8303   for (i = 0; i < cnt; i++)
8304     {
8305       csum += buf[i];
8306       *p++ = buf[i];
8307     }
8308   *p++ = '#';
8309   *p++ = tohex ((csum >> 4) & 0xf);
8310   *p++ = tohex (csum & 0xf);
8311
8312   /* Send it over and over until we get a positive ack.  */
8313
8314   while (1)
8315     {
8316       int started_error_output = 0;
8317
8318       if (remote_debug)
8319         {
8320           struct cleanup *old_chain;
8321           char *str;
8322
8323           *p = '\0';
8324           str = escape_buffer (buf2, p - buf2);
8325           old_chain = make_cleanup (xfree, str);
8326           fprintf_unfiltered (gdb_stdlog, "Sending packet: %s...", str);
8327           gdb_flush (gdb_stdlog);
8328           do_cleanups (old_chain);
8329         }
8330       remote_serial_write (buf2, p - buf2);
8331
8332       /* If this is a no acks version of the remote protocol, send the
8333          packet and move on.  */
8334       if (rs->noack_mode)
8335         break;
8336
8337       /* Read until either a timeout occurs (-2) or '+' is read.
8338          Handle any notification that arrives in the mean time.  */
8339       while (1)
8340         {
8341           ch = readchar (remote_timeout);
8342
8343           if (remote_debug)
8344             {
8345               switch (ch)
8346                 {
8347                 case '+':
8348                 case '-':
8349                 case SERIAL_TIMEOUT:
8350                 case '$':
8351                 case '%':
8352                   if (started_error_output)
8353                     {
8354                       putchar_unfiltered ('\n');
8355                       started_error_output = 0;
8356                     }
8357                 }
8358             }
8359
8360           switch (ch)
8361             {
8362             case '+':
8363               if (remote_debug)
8364                 fprintf_unfiltered (gdb_stdlog, "Ack\n");
8365               do_cleanups (old_chain);
8366               return 1;
8367             case '-':
8368               if (remote_debug)
8369                 fprintf_unfiltered (gdb_stdlog, "Nak\n");
8370               /* FALLTHROUGH */
8371             case SERIAL_TIMEOUT:
8372               tcount++;
8373               if (tcount > 3)
8374                 {
8375                   do_cleanups (old_chain);
8376                   return 0;
8377                 }
8378               break;            /* Retransmit buffer.  */
8379             case '$':
8380               {
8381                 if (remote_debug)
8382                   fprintf_unfiltered (gdb_stdlog,
8383                                       "Packet instead of Ack, ignoring it\n");
8384                 /* It's probably an old response sent because an ACK
8385                    was lost.  Gobble up the packet and ack it so it
8386                    doesn't get retransmitted when we resend this
8387                    packet.  */
8388                 skip_frame ();
8389                 remote_serial_write ("+", 1);
8390                 continue;       /* Now, go look for +.  */
8391               }
8392
8393             case '%':
8394               {
8395                 int val;
8396
8397                 /* If we got a notification, handle it, and go back to looking
8398                    for an ack.  */
8399                 /* We've found the start of a notification.  Now
8400                    collect the data.  */
8401                 val = read_frame (&rs->buf, &rs->buf_size);
8402                 if (val >= 0)
8403                   {
8404                     if (remote_debug)
8405                       {
8406                         struct cleanup *old_chain;
8407                         char *str;
8408
8409                         str = escape_buffer (rs->buf, val);
8410                         old_chain = make_cleanup (xfree, str);
8411                         fprintf_unfiltered (gdb_stdlog,
8412                                             "  Notification received: %s\n",
8413                                             str);
8414                         do_cleanups (old_chain);
8415                       }
8416                     handle_notification (rs->notif_state, rs->buf);
8417                     /* We're in sync now, rewait for the ack.  */
8418                     tcount = 0;
8419                   }
8420                 else
8421                   {
8422                     if (remote_debug)
8423                       {
8424                         if (!started_error_output)
8425                           {
8426                             started_error_output = 1;
8427                             fprintf_unfiltered (gdb_stdlog, "putpkt: Junk: ");
8428                           }
8429                         fputc_unfiltered (ch & 0177, gdb_stdlog);
8430                         fprintf_unfiltered (gdb_stdlog, "%s", rs->buf);
8431                       }
8432                   }
8433                 continue;
8434               }
8435               /* fall-through */
8436             default:
8437               if (remote_debug)
8438                 {
8439                   if (!started_error_output)
8440                     {
8441                       started_error_output = 1;
8442                       fprintf_unfiltered (gdb_stdlog, "putpkt: Junk: ");
8443                     }
8444                   fputc_unfiltered (ch & 0177, gdb_stdlog);
8445                 }
8446               continue;
8447             }
8448           break;                /* Here to retransmit.  */
8449         }
8450
8451 #if 0
8452       /* This is wrong.  If doing a long backtrace, the user should be
8453          able to get out next time we call QUIT, without anything as
8454          violent as interrupt_query.  If we want to provide a way out of
8455          here without getting to the next QUIT, it should be based on
8456          hitting ^C twice as in remote_wait.  */
8457       if (quit_flag)
8458         {
8459           quit_flag = 0;
8460           interrupt_query ();
8461         }
8462 #endif
8463     }
8464
8465   do_cleanups (old_chain);
8466   return 0;
8467 }
8468
8469 /* Come here after finding the start of a frame when we expected an
8470    ack.  Do our best to discard the rest of this packet.  */
8471
8472 static void
8473 skip_frame (void)
8474 {
8475   int c;
8476
8477   while (1)
8478     {
8479       c = readchar (remote_timeout);
8480       switch (c)
8481         {
8482         case SERIAL_TIMEOUT:
8483           /* Nothing we can do.  */
8484           return;
8485         case '#':
8486           /* Discard the two bytes of checksum and stop.  */
8487           c = readchar (remote_timeout);
8488           if (c >= 0)
8489             c = readchar (remote_timeout);
8490
8491           return;
8492         case '*':               /* Run length encoding.  */
8493           /* Discard the repeat count.  */
8494           c = readchar (remote_timeout);
8495           if (c < 0)
8496             return;
8497           break;
8498         default:
8499           /* A regular character.  */
8500           break;
8501         }
8502     }
8503 }
8504
8505 /* Come here after finding the start of the frame.  Collect the rest
8506    into *BUF, verifying the checksum, length, and handling run-length
8507    compression.  NUL terminate the buffer.  If there is not enough room,
8508    expand *BUF using xrealloc.
8509
8510    Returns -1 on error, number of characters in buffer (ignoring the
8511    trailing NULL) on success. (could be extended to return one of the
8512    SERIAL status indications).  */
8513
8514 static long
8515 read_frame (char **buf_p,
8516             long *sizeof_buf)
8517 {
8518   unsigned char csum;
8519   long bc;
8520   int c;
8521   char *buf = *buf_p;
8522   struct remote_state *rs = get_remote_state ();
8523
8524   csum = 0;
8525   bc = 0;
8526
8527   while (1)
8528     {
8529       c = readchar (remote_timeout);
8530       switch (c)
8531         {
8532         case SERIAL_TIMEOUT:
8533           if (remote_debug)
8534             fputs_filtered ("Timeout in mid-packet, retrying\n", gdb_stdlog);
8535           return -1;
8536         case '$':
8537           if (remote_debug)
8538             fputs_filtered ("Saw new packet start in middle of old one\n",
8539                             gdb_stdlog);
8540           return -1;            /* Start a new packet, count retries.  */
8541         case '#':
8542           {
8543             unsigned char pktcsum;
8544             int check_0 = 0;
8545             int check_1 = 0;
8546
8547             buf[bc] = '\0';
8548
8549             check_0 = readchar (remote_timeout);
8550             if (check_0 >= 0)
8551               check_1 = readchar (remote_timeout);
8552
8553             if (check_0 == SERIAL_TIMEOUT || check_1 == SERIAL_TIMEOUT)
8554               {
8555                 if (remote_debug)
8556                   fputs_filtered ("Timeout in checksum, retrying\n",
8557                                   gdb_stdlog);
8558                 return -1;
8559               }
8560             else if (check_0 < 0 || check_1 < 0)
8561               {
8562                 if (remote_debug)
8563                   fputs_filtered ("Communication error in checksum\n",
8564                                   gdb_stdlog);
8565                 return -1;
8566               }
8567
8568             /* Don't recompute the checksum; with no ack packets we
8569                don't have any way to indicate a packet retransmission
8570                is necessary.  */
8571             if (rs->noack_mode)
8572               return bc;
8573
8574             pktcsum = (fromhex (check_0) << 4) | fromhex (check_1);
8575             if (csum == pktcsum)
8576               return bc;
8577
8578             if (remote_debug)
8579               {
8580                 struct cleanup *old_chain;
8581                 char *str;
8582
8583                 str = escape_buffer (buf, bc);
8584                 old_chain = make_cleanup (xfree, str);
8585                 fprintf_unfiltered (gdb_stdlog,
8586                                     "Bad checksum, sentsum=0x%x, "
8587                                     "csum=0x%x, buf=%s\n",
8588                                     pktcsum, csum, str);
8589                 do_cleanups (old_chain);
8590               }
8591             /* Number of characters in buffer ignoring trailing
8592                NULL.  */
8593             return -1;
8594           }
8595         case '*':               /* Run length encoding.  */
8596           {
8597             int repeat;
8598
8599             csum += c;
8600             c = readchar (remote_timeout);
8601             csum += c;
8602             repeat = c - ' ' + 3;       /* Compute repeat count.  */
8603
8604             /* The character before ``*'' is repeated.  */
8605
8606             if (repeat > 0 && repeat <= 255 && bc > 0)
8607               {
8608                 if (bc + repeat - 1 >= *sizeof_buf - 1)
8609                   {
8610                     /* Make some more room in the buffer.  */
8611                     *sizeof_buf += repeat;
8612                     *buf_p = (char *) xrealloc (*buf_p, *sizeof_buf);
8613                     buf = *buf_p;
8614                   }
8615
8616                 memset (&buf[bc], buf[bc - 1], repeat);
8617                 bc += repeat;
8618                 continue;
8619               }
8620
8621             buf[bc] = '\0';
8622             printf_filtered (_("Invalid run length encoding: %s\n"), buf);
8623             return -1;
8624           }
8625         default:
8626           if (bc >= *sizeof_buf - 1)
8627             {
8628               /* Make some more room in the buffer.  */
8629               *sizeof_buf *= 2;
8630               *buf_p = (char *) xrealloc (*buf_p, *sizeof_buf);
8631               buf = *buf_p;
8632             }
8633
8634           buf[bc++] = c;
8635           csum += c;
8636           continue;
8637         }
8638     }
8639 }
8640
8641 /* Read a packet from the remote machine, with error checking, and
8642    store it in *BUF.  Resize *BUF using xrealloc if necessary to hold
8643    the result, and update *SIZEOF_BUF.  If FOREVER, wait forever
8644    rather than timing out; this is used (in synchronous mode) to wait
8645    for a target that is is executing user code to stop.  */
8646 /* FIXME: ezannoni 2000-02-01 this wrapper is necessary so that we
8647    don't have to change all the calls to getpkt to deal with the
8648    return value, because at the moment I don't know what the right
8649    thing to do it for those.  */
8650 void
8651 getpkt (char **buf,
8652         long *sizeof_buf,
8653         int forever)
8654 {
8655   getpkt_sane (buf, sizeof_buf, forever);
8656 }
8657
8658
8659 /* Read a packet from the remote machine, with error checking, and
8660    store it in *BUF.  Resize *BUF using xrealloc if necessary to hold
8661    the result, and update *SIZEOF_BUF.  If FOREVER, wait forever
8662    rather than timing out; this is used (in synchronous mode) to wait
8663    for a target that is is executing user code to stop.  If FOREVER ==
8664    0, this function is allowed to time out gracefully and return an
8665    indication of this to the caller.  Otherwise return the number of
8666    bytes read.  If EXPECTING_NOTIF, consider receiving a notification
8667    enough reason to return to the caller.  *IS_NOTIF is an output
8668    boolean that indicates whether *BUF holds a notification or not
8669    (a regular packet).  */
8670
8671 static int
8672 getpkt_or_notif_sane_1 (char **buf, long *sizeof_buf, int forever,
8673                         int expecting_notif, int *is_notif)
8674 {
8675   struct remote_state *rs = get_remote_state ();
8676   int c;
8677   int tries;
8678   int timeout;
8679   int val = -1;
8680
8681   /* We're reading a new response.  Make sure we don't look at a
8682      previously cached response.  */
8683   rs->cached_wait_status = 0;
8684
8685   strcpy (*buf, "timeout");
8686
8687   if (forever)
8688     timeout = watchdog > 0 ? watchdog : -1;
8689   else if (expecting_notif)
8690     timeout = 0; /* There should already be a char in the buffer.  If
8691                     not, bail out.  */
8692   else
8693     timeout = remote_timeout;
8694
8695 #define MAX_TRIES 3
8696
8697   /* Process any number of notifications, and then return when
8698      we get a packet.  */
8699   for (;;)
8700     {
8701       /* If we get a timeout or bad checksum, retry up to MAX_TRIES
8702          times.  */
8703       for (tries = 1; tries <= MAX_TRIES; tries++)
8704         {
8705           /* This can loop forever if the remote side sends us
8706              characters continuously, but if it pauses, we'll get
8707              SERIAL_TIMEOUT from readchar because of timeout.  Then
8708              we'll count that as a retry.
8709
8710              Note that even when forever is set, we will only wait
8711              forever prior to the start of a packet.  After that, we
8712              expect characters to arrive at a brisk pace.  They should
8713              show up within remote_timeout intervals.  */
8714           do
8715             c = readchar (timeout);
8716           while (c != SERIAL_TIMEOUT && c != '$' && c != '%');
8717
8718           if (c == SERIAL_TIMEOUT)
8719             {
8720               if (expecting_notif)
8721                 return -1; /* Don't complain, it's normal to not get
8722                               anything in this case.  */
8723
8724               if (forever)      /* Watchdog went off?  Kill the target.  */
8725                 {
8726                   remote_unpush_target ();
8727                   throw_error (TARGET_CLOSE_ERROR,
8728                                _("Watchdog timeout has expired.  "
8729                                  "Target detached."));
8730                 }
8731               if (remote_debug)
8732                 fputs_filtered ("Timed out.\n", gdb_stdlog);
8733             }
8734           else
8735             {
8736               /* We've found the start of a packet or notification.
8737                  Now collect the data.  */
8738               val = read_frame (buf, sizeof_buf);
8739               if (val >= 0)
8740                 break;
8741             }
8742
8743           remote_serial_write ("-", 1);
8744         }
8745
8746       if (tries > MAX_TRIES)
8747         {
8748           /* We have tried hard enough, and just can't receive the
8749              packet/notification.  Give up.  */
8750           printf_unfiltered (_("Ignoring packet error, continuing...\n"));
8751
8752           /* Skip the ack char if we're in no-ack mode.  */
8753           if (!rs->noack_mode)
8754             remote_serial_write ("+", 1);
8755           return -1;
8756         }
8757
8758       /* If we got an ordinary packet, return that to our caller.  */
8759       if (c == '$')
8760         {
8761           if (remote_debug)
8762             {
8763              struct cleanup *old_chain;
8764              char *str;
8765
8766              str = escape_buffer (*buf, val);
8767              old_chain = make_cleanup (xfree, str);
8768              fprintf_unfiltered (gdb_stdlog, "Packet received: %s\n", str);
8769              do_cleanups (old_chain);
8770             }
8771
8772           /* Skip the ack char if we're in no-ack mode.  */
8773           if (!rs->noack_mode)
8774             remote_serial_write ("+", 1);
8775           if (is_notif != NULL)
8776             *is_notif = 0;
8777           return val;
8778         }
8779
8780        /* If we got a notification, handle it, and go back to looking
8781          for a packet.  */
8782       else
8783         {
8784           gdb_assert (c == '%');
8785
8786           if (remote_debug)
8787             {
8788               struct cleanup *old_chain;
8789               char *str;
8790
8791               str = escape_buffer (*buf, val);
8792               old_chain = make_cleanup (xfree, str);
8793               fprintf_unfiltered (gdb_stdlog,
8794                                   "  Notification received: %s\n",
8795                                   str);
8796               do_cleanups (old_chain);
8797             }
8798           if (is_notif != NULL)
8799             *is_notif = 1;
8800
8801           handle_notification (rs->notif_state, *buf);
8802
8803           /* Notifications require no acknowledgement.  */
8804
8805           if (expecting_notif)
8806             return val;
8807         }
8808     }
8809 }
8810
8811 static int
8812 getpkt_sane (char **buf, long *sizeof_buf, int forever)
8813 {
8814   return getpkt_or_notif_sane_1 (buf, sizeof_buf, forever, 0, NULL);
8815 }
8816
8817 static int
8818 getpkt_or_notif_sane (char **buf, long *sizeof_buf, int forever,
8819                       int *is_notif)
8820 {
8821   return getpkt_or_notif_sane_1 (buf, sizeof_buf, forever, 1,
8822                                  is_notif);
8823 }
8824
8825 /* Check whether EVENT is a fork event for the process specified
8826    by the pid passed in DATA, and if it is, kill the fork child.  */
8827
8828 static int
8829 kill_child_of_pending_fork (QUEUE (stop_reply_p) *q,
8830                             QUEUE_ITER (stop_reply_p) *iter,
8831                             stop_reply_p event,
8832                             void *data)
8833 {
8834   struct queue_iter_param *param = (struct queue_iter_param *) data;
8835   int parent_pid = *(int *) param->input;
8836
8837   if (is_pending_fork_parent (&event->ws, parent_pid, event->ptid))
8838     {
8839       struct remote_state *rs = get_remote_state ();
8840       int child_pid = ptid_get_pid (event->ws.value.related_pid);
8841       int res;
8842
8843       res = remote_vkill (child_pid, rs);
8844       if (res != 0)
8845         error (_("Can't kill fork child process %d"), child_pid);
8846     }
8847
8848   return 1;
8849 }
8850
8851 /* Kill any new fork children of process PID that haven't been
8852    processed by follow_fork.  */
8853
8854 static void
8855 kill_new_fork_children (int pid, struct remote_state *rs)
8856 {
8857   struct thread_info *thread;
8858   struct notif_client *notif = &notif_client_stop;
8859   struct queue_iter_param param;
8860
8861   /* Kill the fork child threads of any threads in process PID
8862      that are stopped at a fork event.  */
8863   ALL_NON_EXITED_THREADS (thread)
8864     {
8865       struct target_waitstatus *ws = &thread->pending_follow;
8866
8867       if (is_pending_fork_parent (ws, pid, thread->ptid))
8868         {
8869           struct remote_state *rs = get_remote_state ();
8870           int child_pid = ptid_get_pid (ws->value.related_pid);
8871           int res;
8872
8873           res = remote_vkill (child_pid, rs);
8874           if (res != 0)
8875             error (_("Can't kill fork child process %d"), child_pid);
8876         }
8877     }
8878
8879   /* Check for any pending fork events (not reported or processed yet)
8880      in process PID and kill those fork child threads as well.  */
8881   remote_notif_get_pending_events (notif);
8882   param.input = &pid;
8883   param.output = NULL;
8884   QUEUE_iterate (stop_reply_p, stop_reply_queue,
8885                  kill_child_of_pending_fork, &param);
8886 }
8887
8888 \f
8889 /* Target hook to kill the current inferior.  */
8890
8891 static void
8892 remote_kill (struct target_ops *ops)
8893 {
8894   int res = -1;
8895   int pid = ptid_get_pid (inferior_ptid);
8896   struct remote_state *rs = get_remote_state ();
8897
8898   if (packet_support (PACKET_vKill) != PACKET_DISABLE)
8899     {
8900       /* If we're stopped while forking and we haven't followed yet,
8901          kill the child task.  We need to do this before killing the
8902          parent task because if this is a vfork then the parent will
8903          be sleeping.  */
8904       kill_new_fork_children (pid, rs);
8905
8906       res = remote_vkill (pid, rs);
8907       if (res == 0)
8908         {
8909           target_mourn_inferior ();
8910           return;
8911         }
8912     }
8913
8914   /* If we are in 'target remote' mode and we are killing the only
8915      inferior, then we will tell gdbserver to exit and unpush the
8916      target.  */
8917   if (res == -1 && !remote_multi_process_p (rs)
8918       && number_of_live_inferiors () == 1)
8919     {
8920       remote_kill_k ();
8921
8922       /* We've killed the remote end, we get to mourn it.  If we are
8923          not in extended mode, mourning the inferior also unpushes
8924          remote_ops from the target stack, which closes the remote
8925          connection.  */
8926       target_mourn_inferior ();
8927
8928       return;
8929     }
8930
8931   error (_("Can't kill process"));
8932 }
8933
8934 /* Send a kill request to the target using the 'vKill' packet.  */
8935
8936 static int
8937 remote_vkill (int pid, struct remote_state *rs)
8938 {
8939   if (packet_support (PACKET_vKill) == PACKET_DISABLE)
8940     return -1;
8941
8942   /* Tell the remote target to detach.  */
8943   xsnprintf (rs->buf, get_remote_packet_size (), "vKill;%x", pid);
8944   putpkt (rs->buf);
8945   getpkt (&rs->buf, &rs->buf_size, 0);
8946
8947   switch (packet_ok (rs->buf,
8948                      &remote_protocol_packets[PACKET_vKill]))
8949     {
8950     case PACKET_OK:
8951       return 0;
8952     case PACKET_ERROR:
8953       return 1;
8954     case PACKET_UNKNOWN:
8955       return -1;
8956     default:
8957       internal_error (__FILE__, __LINE__, _("Bad result from packet_ok"));
8958     }
8959 }
8960
8961 /* Send a kill request to the target using the 'k' packet.  */
8962
8963 static void
8964 remote_kill_k (void)
8965 {
8966   /* Catch errors so the user can quit from gdb even when we
8967      aren't on speaking terms with the remote system.  */
8968   TRY
8969     {
8970       putpkt ("k");
8971     }
8972   CATCH (ex, RETURN_MASK_ERROR)
8973     {
8974       if (ex.error == TARGET_CLOSE_ERROR)
8975         {
8976           /* If we got an (EOF) error that caused the target
8977              to go away, then we're done, that's what we wanted.
8978              "k" is susceptible to cause a premature EOF, given
8979              that the remote server isn't actually required to
8980              reply to "k", and it can happen that it doesn't
8981              even get to reply ACK to the "k".  */
8982           return;
8983         }
8984
8985       /* Otherwise, something went wrong.  We didn't actually kill
8986          the target.  Just propagate the exception, and let the
8987          user or higher layers decide what to do.  */
8988       throw_exception (ex);
8989     }
8990   END_CATCH
8991 }
8992
8993 static void
8994 remote_mourn (struct target_ops *target)
8995 {
8996   struct remote_state *rs = get_remote_state ();
8997
8998   /* In 'target remote' mode with one inferior, we close the connection.  */
8999   if (!rs->extended && number_of_live_inferiors () <= 1)
9000     {
9001       unpush_target (target);
9002
9003       /* remote_close takes care of doing most of the clean up.  */
9004       generic_mourn_inferior ();
9005       return;
9006     }
9007
9008   /* In case we got here due to an error, but we're going to stay
9009      connected.  */
9010   rs->waiting_for_stop_reply = 0;
9011
9012   /* If the current general thread belonged to the process we just
9013      detached from or has exited, the remote side current general
9014      thread becomes undefined.  Considering a case like this:
9015
9016      - We just got here due to a detach.
9017      - The process that we're detaching from happens to immediately
9018        report a global breakpoint being hit in non-stop mode, in the
9019        same thread we had selected before.
9020      - GDB attaches to this process again.
9021      - This event happens to be the next event we handle.
9022
9023      GDB would consider that the current general thread didn't need to
9024      be set on the stub side (with Hg), since for all it knew,
9025      GENERAL_THREAD hadn't changed.
9026
9027      Notice that although in all-stop mode, the remote server always
9028      sets the current thread to the thread reporting the stop event,
9029      that doesn't happen in non-stop mode; in non-stop, the stub *must
9030      not* change the current thread when reporting a breakpoint hit,
9031      due to the decoupling of event reporting and event handling.
9032
9033      To keep things simple, we always invalidate our notion of the
9034      current thread.  */
9035   record_currthread (rs, minus_one_ptid);
9036
9037   /* Call common code to mark the inferior as not running.  */
9038   generic_mourn_inferior ();
9039
9040   if (!have_inferiors ())
9041     {
9042       if (!remote_multi_process_p (rs))
9043         {
9044           /* Check whether the target is running now - some remote stubs
9045              automatically restart after kill.  */
9046           putpkt ("?");
9047           getpkt (&rs->buf, &rs->buf_size, 0);
9048
9049           if (rs->buf[0] == 'S' || rs->buf[0] == 'T')
9050             {
9051               /* Assume that the target has been restarted.  Set
9052                  inferior_ptid so that bits of core GDB realizes
9053                  there's something here, e.g., so that the user can
9054                  say "kill" again.  */
9055               inferior_ptid = magic_null_ptid;
9056             }
9057         }
9058     }
9059 }
9060
9061 static int
9062 extended_remote_supports_disable_randomization (struct target_ops *self)
9063 {
9064   return packet_support (PACKET_QDisableRandomization) == PACKET_ENABLE;
9065 }
9066
9067 static void
9068 extended_remote_disable_randomization (int val)
9069 {
9070   struct remote_state *rs = get_remote_state ();
9071   char *reply;
9072
9073   xsnprintf (rs->buf, get_remote_packet_size (), "QDisableRandomization:%x",
9074              val);
9075   putpkt (rs->buf);
9076   reply = remote_get_noisy_reply (&target_buf, &target_buf_size);
9077   if (*reply == '\0')
9078     error (_("Target does not support QDisableRandomization."));
9079   if (strcmp (reply, "OK") != 0)
9080     error (_("Bogus QDisableRandomization reply from target: %s"), reply);
9081 }
9082
9083 static int
9084 extended_remote_run (char *args)
9085 {
9086   struct remote_state *rs = get_remote_state ();
9087   int len;
9088   const char *remote_exec_file = get_remote_exec_file ();
9089
9090   /* If the user has disabled vRun support, or we have detected that
9091      support is not available, do not try it.  */
9092   if (packet_support (PACKET_vRun) == PACKET_DISABLE)
9093     return -1;
9094
9095   strcpy (rs->buf, "vRun;");
9096   len = strlen (rs->buf);
9097
9098   if (strlen (remote_exec_file) * 2 + len >= get_remote_packet_size ())
9099     error (_("Remote file name too long for run packet"));
9100   len += 2 * bin2hex ((gdb_byte *) remote_exec_file, rs->buf + len,
9101                       strlen (remote_exec_file));
9102
9103   gdb_assert (args != NULL);
9104   if (*args)
9105     {
9106       struct cleanup *back_to;
9107       int i;
9108       char **argv;
9109
9110       argv = gdb_buildargv (args);
9111       back_to = make_cleanup_freeargv (argv);
9112       for (i = 0; argv[i] != NULL; i++)
9113         {
9114           if (strlen (argv[i]) * 2 + 1 + len >= get_remote_packet_size ())
9115             error (_("Argument list too long for run packet"));
9116           rs->buf[len++] = ';';
9117           len += 2 * bin2hex ((gdb_byte *) argv[i], rs->buf + len,
9118                               strlen (argv[i]));
9119         }
9120       do_cleanups (back_to);
9121     }
9122
9123   rs->buf[len++] = '\0';
9124
9125   putpkt (rs->buf);
9126   getpkt (&rs->buf, &rs->buf_size, 0);
9127
9128   switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_vRun]))
9129     {
9130     case PACKET_OK:
9131       /* We have a wait response.  All is well.  */
9132       return 0;
9133     case PACKET_UNKNOWN:
9134       return -1;
9135     case PACKET_ERROR:
9136       if (remote_exec_file[0] == '\0')
9137         error (_("Running the default executable on the remote target failed; "
9138                  "try \"set remote exec-file\"?"));
9139       else
9140         error (_("Running \"%s\" on the remote target failed"),
9141                remote_exec_file);
9142     default:
9143       gdb_assert_not_reached (_("bad switch"));
9144     }
9145 }
9146
9147 /* In the extended protocol we want to be able to do things like
9148    "run" and have them basically work as expected.  So we need
9149    a special create_inferior function.  We support changing the
9150    executable file and the command line arguments, but not the
9151    environment.  */
9152
9153 static void
9154 extended_remote_create_inferior (struct target_ops *ops,
9155                                  char *exec_file, char *args,
9156                                  char **env, int from_tty)
9157 {
9158   int run_worked;
9159   char *stop_reply;
9160   struct remote_state *rs = get_remote_state ();
9161   const char *remote_exec_file = get_remote_exec_file ();
9162
9163   /* If running asynchronously, register the target file descriptor
9164      with the event loop.  */
9165   if (target_can_async_p ())
9166     target_async (1);
9167
9168   /* Disable address space randomization if requested (and supported).  */
9169   if (extended_remote_supports_disable_randomization (ops))
9170     extended_remote_disable_randomization (disable_randomization);
9171
9172   /* Now restart the remote server.  */
9173   run_worked = extended_remote_run (args) != -1;
9174   if (!run_worked)
9175     {
9176       /* vRun was not supported.  Fail if we need it to do what the
9177          user requested.  */
9178       if (remote_exec_file[0])
9179         error (_("Remote target does not support \"set remote exec-file\""));
9180       if (args[0])
9181         error (_("Remote target does not support \"set args\" or run <ARGS>"));
9182
9183       /* Fall back to "R".  */
9184       extended_remote_restart ();
9185     }
9186
9187   if (!have_inferiors ())
9188     {
9189       /* Clean up from the last time we ran, before we mark the target
9190          running again.  This will mark breakpoints uninserted, and
9191          get_offsets may insert breakpoints.  */
9192       init_thread_list ();
9193       init_wait_for_inferior ();
9194     }
9195
9196   /* vRun's success return is a stop reply.  */
9197   stop_reply = run_worked ? rs->buf : NULL;
9198   add_current_inferior_and_thread (stop_reply);
9199
9200   /* Get updated offsets, if the stub uses qOffsets.  */
9201   get_offsets ();
9202 }
9203 \f
9204
9205 /* Given a location's target info BP_TGT and the packet buffer BUF,  output
9206    the list of conditions (in agent expression bytecode format), if any, the
9207    target needs to evaluate.  The output is placed into the packet buffer
9208    started from BUF and ended at BUF_END.  */
9209
9210 static int
9211 remote_add_target_side_condition (struct gdbarch *gdbarch,
9212                                   struct bp_target_info *bp_tgt, char *buf,
9213                                   char *buf_end)
9214 {
9215   struct agent_expr *aexpr = NULL;
9216   int i, ix;
9217
9218   if (VEC_empty (agent_expr_p, bp_tgt->conditions))
9219     return 0;
9220
9221   buf += strlen (buf);
9222   xsnprintf (buf, buf_end - buf, "%s", ";");
9223   buf++;
9224
9225   /* Send conditions to the target and free the vector.  */
9226   for (ix = 0;
9227        VEC_iterate (agent_expr_p, bp_tgt->conditions, ix, aexpr);
9228        ix++)
9229     {
9230       xsnprintf (buf, buf_end - buf, "X%x,", aexpr->len);
9231       buf += strlen (buf);
9232       for (i = 0; i < aexpr->len; ++i)
9233         buf = pack_hex_byte (buf, aexpr->buf[i]);
9234       *buf = '\0';
9235     }
9236   return 0;
9237 }
9238
9239 static void
9240 remote_add_target_side_commands (struct gdbarch *gdbarch,
9241                                  struct bp_target_info *bp_tgt, char *buf)
9242 {
9243   struct agent_expr *aexpr = NULL;
9244   int i, ix;
9245
9246   if (VEC_empty (agent_expr_p, bp_tgt->tcommands))
9247     return;
9248
9249   buf += strlen (buf);
9250
9251   sprintf (buf, ";cmds:%x,", bp_tgt->persist);
9252   buf += strlen (buf);
9253
9254   /* Concatenate all the agent expressions that are commands into the
9255      cmds parameter.  */
9256   for (ix = 0;
9257        VEC_iterate (agent_expr_p, bp_tgt->tcommands, ix, aexpr);
9258        ix++)
9259     {
9260       sprintf (buf, "X%x,", aexpr->len);
9261       buf += strlen (buf);
9262       for (i = 0; i < aexpr->len; ++i)
9263         buf = pack_hex_byte (buf, aexpr->buf[i]);
9264       *buf = '\0';
9265     }
9266 }
9267
9268 /* Insert a breakpoint.  On targets that have software breakpoint
9269    support, we ask the remote target to do the work; on targets
9270    which don't, we insert a traditional memory breakpoint.  */
9271
9272 static int
9273 remote_insert_breakpoint (struct target_ops *ops,
9274                           struct gdbarch *gdbarch,
9275                           struct bp_target_info *bp_tgt)
9276 {
9277   /* Try the "Z" s/w breakpoint packet if it is not already disabled.
9278      If it succeeds, then set the support to PACKET_ENABLE.  If it
9279      fails, and the user has explicitly requested the Z support then
9280      report an error, otherwise, mark it disabled and go on.  */
9281
9282   if (packet_support (PACKET_Z0) != PACKET_DISABLE)
9283     {
9284       CORE_ADDR addr = bp_tgt->reqstd_address;
9285       struct remote_state *rs;
9286       char *p, *endbuf;
9287       int bpsize;
9288
9289       /* Make sure the remote is pointing at the right process, if
9290          necessary.  */
9291       if (!gdbarch_has_global_breakpoints (target_gdbarch ()))
9292         set_general_process ();
9293
9294       gdbarch_remote_breakpoint_from_pc (gdbarch, &addr, &bpsize);
9295
9296       rs = get_remote_state ();
9297       p = rs->buf;
9298       endbuf = rs->buf + get_remote_packet_size ();
9299
9300       *(p++) = 'Z';
9301       *(p++) = '0';
9302       *(p++) = ',';
9303       addr = (ULONGEST) remote_address_masked (addr);
9304       p += hexnumstr (p, addr);
9305       xsnprintf (p, endbuf - p, ",%d", bpsize);
9306
9307       if (remote_supports_cond_breakpoints (ops))
9308         remote_add_target_side_condition (gdbarch, bp_tgt, p, endbuf);
9309
9310       if (remote_can_run_breakpoint_commands (ops))
9311         remote_add_target_side_commands (gdbarch, bp_tgt, p);
9312
9313       putpkt (rs->buf);
9314       getpkt (&rs->buf, &rs->buf_size, 0);
9315
9316       switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_Z0]))
9317         {
9318         case PACKET_ERROR:
9319           return -1;
9320         case PACKET_OK:
9321           bp_tgt->placed_address = addr;
9322           bp_tgt->placed_size = bpsize;
9323           return 0;
9324         case PACKET_UNKNOWN:
9325           break;
9326         }
9327     }
9328
9329   /* If this breakpoint has target-side commands but this stub doesn't
9330      support Z0 packets, throw error.  */
9331   if (!VEC_empty (agent_expr_p, bp_tgt->tcommands))
9332     throw_error (NOT_SUPPORTED_ERROR, _("\
9333 Target doesn't support breakpoints that have target side commands."));
9334
9335   return memory_insert_breakpoint (ops, gdbarch, bp_tgt);
9336 }
9337
9338 static int
9339 remote_remove_breakpoint (struct target_ops *ops,
9340                           struct gdbarch *gdbarch,
9341                           struct bp_target_info *bp_tgt)
9342 {
9343   CORE_ADDR addr = bp_tgt->placed_address;
9344   struct remote_state *rs = get_remote_state ();
9345
9346   if (packet_support (PACKET_Z0) != PACKET_DISABLE)
9347     {
9348       char *p = rs->buf;
9349       char *endbuf = rs->buf + get_remote_packet_size ();
9350
9351       /* Make sure the remote is pointing at the right process, if
9352          necessary.  */
9353       if (!gdbarch_has_global_breakpoints (target_gdbarch ()))
9354         set_general_process ();
9355
9356       *(p++) = 'z';
9357       *(p++) = '0';
9358       *(p++) = ',';
9359
9360       addr = (ULONGEST) remote_address_masked (bp_tgt->placed_address);
9361       p += hexnumstr (p, addr);
9362       xsnprintf (p, endbuf - p, ",%d", bp_tgt->placed_size);
9363
9364       putpkt (rs->buf);
9365       getpkt (&rs->buf, &rs->buf_size, 0);
9366
9367       return (rs->buf[0] == 'E');
9368     }
9369
9370   return memory_remove_breakpoint (ops, gdbarch, bp_tgt);
9371 }
9372
9373 static enum Z_packet_type
9374 watchpoint_to_Z_packet (int type)
9375 {
9376   switch (type)
9377     {
9378     case hw_write:
9379       return Z_PACKET_WRITE_WP;
9380       break;
9381     case hw_read:
9382       return Z_PACKET_READ_WP;
9383       break;
9384     case hw_access:
9385       return Z_PACKET_ACCESS_WP;
9386       break;
9387     default:
9388       internal_error (__FILE__, __LINE__,
9389                       _("hw_bp_to_z: bad watchpoint type %d"), type);
9390     }
9391 }
9392
9393 static int
9394 remote_insert_watchpoint (struct target_ops *self, CORE_ADDR addr, int len,
9395                           enum target_hw_bp_type type, struct expression *cond)
9396 {
9397   struct remote_state *rs = get_remote_state ();
9398   char *endbuf = rs->buf + get_remote_packet_size ();
9399   char *p;
9400   enum Z_packet_type packet = watchpoint_to_Z_packet (type);
9401
9402   if (packet_support (PACKET_Z0 + packet) == PACKET_DISABLE)
9403     return 1;
9404
9405   /* Make sure the remote is pointing at the right process, if
9406      necessary.  */
9407   if (!gdbarch_has_global_breakpoints (target_gdbarch ()))
9408     set_general_process ();
9409
9410   xsnprintf (rs->buf, endbuf - rs->buf, "Z%x,", packet);
9411   p = strchr (rs->buf, '\0');
9412   addr = remote_address_masked (addr);
9413   p += hexnumstr (p, (ULONGEST) addr);
9414   xsnprintf (p, endbuf - p, ",%x", len);
9415
9416   putpkt (rs->buf);
9417   getpkt (&rs->buf, &rs->buf_size, 0);
9418
9419   switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_Z0 + packet]))
9420     {
9421     case PACKET_ERROR:
9422       return -1;
9423     case PACKET_UNKNOWN:
9424       return 1;
9425     case PACKET_OK:
9426       return 0;
9427     }
9428   internal_error (__FILE__, __LINE__,
9429                   _("remote_insert_watchpoint: reached end of function"));
9430 }
9431
9432 static int
9433 remote_watchpoint_addr_within_range (struct target_ops *target, CORE_ADDR addr,
9434                                      CORE_ADDR start, int length)
9435 {
9436   CORE_ADDR diff = remote_address_masked (addr - start);
9437
9438   return diff < length;
9439 }
9440
9441
9442 static int
9443 remote_remove_watchpoint (struct target_ops *self, CORE_ADDR addr, int len,
9444                           enum target_hw_bp_type type, struct expression *cond)
9445 {
9446   struct remote_state *rs = get_remote_state ();
9447   char *endbuf = rs->buf + get_remote_packet_size ();
9448   char *p;
9449   enum Z_packet_type packet = watchpoint_to_Z_packet (type);
9450
9451   if (packet_support (PACKET_Z0 + packet) == PACKET_DISABLE)
9452     return -1;
9453
9454   /* Make sure the remote is pointing at the right process, if
9455      necessary.  */
9456   if (!gdbarch_has_global_breakpoints (target_gdbarch ()))
9457     set_general_process ();
9458
9459   xsnprintf (rs->buf, endbuf - rs->buf, "z%x,", packet);
9460   p = strchr (rs->buf, '\0');
9461   addr = remote_address_masked (addr);
9462   p += hexnumstr (p, (ULONGEST) addr);
9463   xsnprintf (p, endbuf - p, ",%x", len);
9464   putpkt (rs->buf);
9465   getpkt (&rs->buf, &rs->buf_size, 0);
9466
9467   switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_Z0 + packet]))
9468     {
9469     case PACKET_ERROR:
9470     case PACKET_UNKNOWN:
9471       return -1;
9472     case PACKET_OK:
9473       return 0;
9474     }
9475   internal_error (__FILE__, __LINE__,
9476                   _("remote_remove_watchpoint: reached end of function"));
9477 }
9478
9479
9480 int remote_hw_watchpoint_limit = -1;
9481 int remote_hw_watchpoint_length_limit = -1;
9482 int remote_hw_breakpoint_limit = -1;
9483
9484 static int
9485 remote_region_ok_for_hw_watchpoint (struct target_ops *self,
9486                                     CORE_ADDR addr, int len)
9487 {
9488   if (remote_hw_watchpoint_length_limit == 0)
9489     return 0;
9490   else if (remote_hw_watchpoint_length_limit < 0)
9491     return 1;
9492   else if (len <= remote_hw_watchpoint_length_limit)
9493     return 1;
9494   else
9495     return 0;
9496 }
9497
9498 static int
9499 remote_check_watch_resources (struct target_ops *self,
9500                               enum bptype type, int cnt, int ot)
9501 {
9502   if (type == bp_hardware_breakpoint)
9503     {
9504       if (remote_hw_breakpoint_limit == 0)
9505         return 0;
9506       else if (remote_hw_breakpoint_limit < 0)
9507         return 1;
9508       else if (cnt <= remote_hw_breakpoint_limit)
9509         return 1;
9510     }
9511   else
9512     {
9513       if (remote_hw_watchpoint_limit == 0)
9514         return 0;
9515       else if (remote_hw_watchpoint_limit < 0)
9516         return 1;
9517       else if (ot)
9518         return -1;
9519       else if (cnt <= remote_hw_watchpoint_limit)
9520         return 1;
9521     }
9522   return -1;
9523 }
9524
9525 /* The to_stopped_by_sw_breakpoint method of target remote.  */
9526
9527 static int
9528 remote_stopped_by_sw_breakpoint (struct target_ops *ops)
9529 {
9530   struct thread_info *thread = inferior_thread ();
9531
9532   return (thread->priv != NULL
9533           && thread->priv->stop_reason == TARGET_STOPPED_BY_SW_BREAKPOINT);
9534 }
9535
9536 /* The to_supports_stopped_by_sw_breakpoint method of target
9537    remote.  */
9538
9539 static int
9540 remote_supports_stopped_by_sw_breakpoint (struct target_ops *ops)
9541 {
9542   return (packet_support (PACKET_swbreak_feature) == PACKET_ENABLE);
9543 }
9544
9545 /* The to_stopped_by_hw_breakpoint method of target remote.  */
9546
9547 static int
9548 remote_stopped_by_hw_breakpoint (struct target_ops *ops)
9549 {
9550   struct thread_info *thread = inferior_thread ();
9551
9552   return (thread->priv != NULL
9553           && thread->priv->stop_reason == TARGET_STOPPED_BY_HW_BREAKPOINT);
9554 }
9555
9556 /* The to_supports_stopped_by_hw_breakpoint method of target
9557    remote.  */
9558
9559 static int
9560 remote_supports_stopped_by_hw_breakpoint (struct target_ops *ops)
9561 {
9562   return (packet_support (PACKET_hwbreak_feature) == PACKET_ENABLE);
9563 }
9564
9565 static int
9566 remote_stopped_by_watchpoint (struct target_ops *ops)
9567 {
9568   struct thread_info *thread = inferior_thread ();
9569
9570   return (thread->priv != NULL
9571           && thread->priv->stop_reason == TARGET_STOPPED_BY_WATCHPOINT);
9572 }
9573
9574 static int
9575 remote_stopped_data_address (struct target_ops *target, CORE_ADDR *addr_p)
9576 {
9577   struct thread_info *thread = inferior_thread ();
9578
9579   if (thread->priv != NULL
9580       && thread->priv->stop_reason == TARGET_STOPPED_BY_WATCHPOINT)
9581     {
9582       *addr_p = thread->priv->watch_data_address;
9583       return 1;
9584     }
9585
9586   return 0;
9587 }
9588
9589
9590 static int
9591 remote_insert_hw_breakpoint (struct target_ops *self, struct gdbarch *gdbarch,
9592                              struct bp_target_info *bp_tgt)
9593 {
9594   CORE_ADDR addr = bp_tgt->reqstd_address;
9595   struct remote_state *rs;
9596   char *p, *endbuf;
9597   char *message;
9598   int bpsize;
9599
9600   /* The length field should be set to the size of a breakpoint
9601      instruction, even though we aren't inserting one ourselves.  */
9602
9603   gdbarch_remote_breakpoint_from_pc (gdbarch, &addr, &bpsize);
9604
9605   if (packet_support (PACKET_Z1) == PACKET_DISABLE)
9606     return -1;
9607
9608   /* Make sure the remote is pointing at the right process, if
9609      necessary.  */
9610   if (!gdbarch_has_global_breakpoints (target_gdbarch ()))
9611     set_general_process ();
9612
9613   rs = get_remote_state ();
9614   p = rs->buf;
9615   endbuf = rs->buf + get_remote_packet_size ();
9616
9617   *(p++) = 'Z';
9618   *(p++) = '1';
9619   *(p++) = ',';
9620
9621   addr = remote_address_masked (addr);
9622   p += hexnumstr (p, (ULONGEST) addr);
9623   xsnprintf (p, endbuf - p, ",%x", bpsize);
9624
9625   if (remote_supports_cond_breakpoints (self))
9626     remote_add_target_side_condition (gdbarch, bp_tgt, p, endbuf);
9627
9628   if (remote_can_run_breakpoint_commands (self))
9629     remote_add_target_side_commands (gdbarch, bp_tgt, p);
9630
9631   putpkt (rs->buf);
9632   getpkt (&rs->buf, &rs->buf_size, 0);
9633
9634   switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_Z1]))
9635     {
9636     case PACKET_ERROR:
9637       if (rs->buf[1] == '.')
9638         {
9639           message = strchr (rs->buf + 2, '.');
9640           if (message)
9641             error (_("Remote failure reply: %s"), message + 1);
9642         }
9643       return -1;
9644     case PACKET_UNKNOWN:
9645       return -1;
9646     case PACKET_OK:
9647       bp_tgt->placed_address = addr;
9648       bp_tgt->placed_size = bpsize;
9649       return 0;
9650     }
9651   internal_error (__FILE__, __LINE__,
9652                   _("remote_insert_hw_breakpoint: reached end of function"));
9653 }
9654
9655
9656 static int
9657 remote_remove_hw_breakpoint (struct target_ops *self, struct gdbarch *gdbarch,
9658                              struct bp_target_info *bp_tgt)
9659 {
9660   CORE_ADDR addr;
9661   struct remote_state *rs = get_remote_state ();
9662   char *p = rs->buf;
9663   char *endbuf = rs->buf + get_remote_packet_size ();
9664
9665   if (packet_support (PACKET_Z1) == PACKET_DISABLE)
9666     return -1;
9667
9668   /* Make sure the remote is pointing at the right process, if
9669      necessary.  */
9670   if (!gdbarch_has_global_breakpoints (target_gdbarch ()))
9671     set_general_process ();
9672
9673   *(p++) = 'z';
9674   *(p++) = '1';
9675   *(p++) = ',';
9676
9677   addr = remote_address_masked (bp_tgt->placed_address);
9678   p += hexnumstr (p, (ULONGEST) addr);
9679   xsnprintf (p, endbuf  - p, ",%x", bp_tgt->placed_size);
9680
9681   putpkt (rs->buf);
9682   getpkt (&rs->buf, &rs->buf_size, 0);
9683
9684   switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_Z1]))
9685     {
9686     case PACKET_ERROR:
9687     case PACKET_UNKNOWN:
9688       return -1;
9689     case PACKET_OK:
9690       return 0;
9691     }
9692   internal_error (__FILE__, __LINE__,
9693                   _("remote_remove_hw_breakpoint: reached end of function"));
9694 }
9695
9696 /* Verify memory using the "qCRC:" request.  */
9697
9698 static int
9699 remote_verify_memory (struct target_ops *ops,
9700                       const gdb_byte *data, CORE_ADDR lma, ULONGEST size)
9701 {
9702   struct remote_state *rs = get_remote_state ();
9703   unsigned long host_crc, target_crc;
9704   char *tmp;
9705
9706   /* It doesn't make sense to use qCRC if the remote target is
9707      connected but not running.  */
9708   if (target_has_execution && packet_support (PACKET_qCRC) != PACKET_DISABLE)
9709     {
9710       enum packet_result result;
9711
9712       /* Make sure the remote is pointing at the right process.  */
9713       set_general_process ();
9714
9715       /* FIXME: assumes lma can fit into long.  */
9716       xsnprintf (rs->buf, get_remote_packet_size (), "qCRC:%lx,%lx",
9717                  (long) lma, (long) size);
9718       putpkt (rs->buf);
9719
9720       /* Be clever; compute the host_crc before waiting for target
9721          reply.  */
9722       host_crc = xcrc32 (data, size, 0xffffffff);
9723
9724       getpkt (&rs->buf, &rs->buf_size, 0);
9725
9726       result = packet_ok (rs->buf,
9727                           &remote_protocol_packets[PACKET_qCRC]);
9728       if (result == PACKET_ERROR)
9729         return -1;
9730       else if (result == PACKET_OK)
9731         {
9732           for (target_crc = 0, tmp = &rs->buf[1]; *tmp; tmp++)
9733             target_crc = target_crc * 16 + fromhex (*tmp);
9734
9735           return (host_crc == target_crc);
9736         }
9737     }
9738
9739   return simple_verify_memory (ops, data, lma, size);
9740 }
9741
9742 /* compare-sections command
9743
9744    With no arguments, compares each loadable section in the exec bfd
9745    with the same memory range on the target, and reports mismatches.
9746    Useful for verifying the image on the target against the exec file.  */
9747
9748 static void
9749 compare_sections_command (char *args, int from_tty)
9750 {
9751   asection *s;
9752   struct cleanup *old_chain;
9753   gdb_byte *sectdata;
9754   const char *sectname;
9755   bfd_size_type size;
9756   bfd_vma lma;
9757   int matched = 0;
9758   int mismatched = 0;
9759   int res;
9760   int read_only = 0;
9761
9762   if (!exec_bfd)
9763     error (_("command cannot be used without an exec file"));
9764
9765   /* Make sure the remote is pointing at the right process.  */
9766   set_general_process ();
9767
9768   if (args != NULL && strcmp (args, "-r") == 0)
9769     {
9770       read_only = 1;
9771       args = NULL;
9772     }
9773
9774   for (s = exec_bfd->sections; s; s = s->next)
9775     {
9776       if (!(s->flags & SEC_LOAD))
9777         continue;               /* Skip non-loadable section.  */
9778
9779       if (read_only && (s->flags & SEC_READONLY) == 0)
9780         continue;               /* Skip writeable sections */
9781
9782       size = bfd_get_section_size (s);
9783       if (size == 0)
9784         continue;               /* Skip zero-length section.  */
9785
9786       sectname = bfd_get_section_name (exec_bfd, s);
9787       if (args && strcmp (args, sectname) != 0)
9788         continue;               /* Not the section selected by user.  */
9789
9790       matched = 1;              /* Do this section.  */
9791       lma = s->lma;
9792
9793       sectdata = (gdb_byte *) xmalloc (size);
9794       old_chain = make_cleanup (xfree, sectdata);
9795       bfd_get_section_contents (exec_bfd, s, sectdata, 0, size);
9796
9797       res = target_verify_memory (sectdata, lma, size);
9798
9799       if (res == -1)
9800         error (_("target memory fault, section %s, range %s -- %s"), sectname,
9801                paddress (target_gdbarch (), lma),
9802                paddress (target_gdbarch (), lma + size));
9803
9804       printf_filtered ("Section %s, range %s -- %s: ", sectname,
9805                        paddress (target_gdbarch (), lma),
9806                        paddress (target_gdbarch (), lma + size));
9807       if (res)
9808         printf_filtered ("matched.\n");
9809       else
9810         {
9811           printf_filtered ("MIS-MATCHED!\n");
9812           mismatched++;
9813         }
9814
9815       do_cleanups (old_chain);
9816     }
9817   if (mismatched > 0)
9818     warning (_("One or more sections of the target image does not match\n\
9819 the loaded file\n"));
9820   if (args && !matched)
9821     printf_filtered (_("No loaded section named '%s'.\n"), args);
9822 }
9823
9824 /* Write LEN bytes from WRITEBUF into OBJECT_NAME/ANNEX at OFFSET
9825    into remote target.  The number of bytes written to the remote
9826    target is returned, or -1 for error.  */
9827
9828 static enum target_xfer_status
9829 remote_write_qxfer (struct target_ops *ops, const char *object_name,
9830                     const char *annex, const gdb_byte *writebuf, 
9831                     ULONGEST offset, LONGEST len, ULONGEST *xfered_len,
9832                     struct packet_config *packet)
9833 {
9834   int i, buf_len;
9835   ULONGEST n;
9836   struct remote_state *rs = get_remote_state ();
9837   int max_size = get_memory_write_packet_size (); 
9838
9839   if (packet->support == PACKET_DISABLE)
9840     return TARGET_XFER_E_IO;
9841
9842   /* Insert header.  */
9843   i = snprintf (rs->buf, max_size, 
9844                 "qXfer:%s:write:%s:%s:",
9845                 object_name, annex ? annex : "",
9846                 phex_nz (offset, sizeof offset));
9847   max_size -= (i + 1);
9848
9849   /* Escape as much data as fits into rs->buf.  */
9850   buf_len = remote_escape_output 
9851     (writebuf, len, 1, (gdb_byte *) rs->buf + i, &max_size, max_size);
9852
9853   if (putpkt_binary (rs->buf, i + buf_len) < 0
9854       || getpkt_sane (&rs->buf, &rs->buf_size, 0) < 0
9855       || packet_ok (rs->buf, packet) != PACKET_OK)
9856     return TARGET_XFER_E_IO;
9857
9858   unpack_varlen_hex (rs->buf, &n);
9859
9860   *xfered_len = n;
9861   return TARGET_XFER_OK;
9862 }
9863
9864 /* Read OBJECT_NAME/ANNEX from the remote target using a qXfer packet.
9865    Data at OFFSET, of up to LEN bytes, is read into READBUF; the
9866    number of bytes read is returned, or 0 for EOF, or -1 for error.
9867    The number of bytes read may be less than LEN without indicating an
9868    EOF.  PACKET is checked and updated to indicate whether the remote
9869    target supports this object.  */
9870
9871 static enum target_xfer_status
9872 remote_read_qxfer (struct target_ops *ops, const char *object_name,
9873                    const char *annex,
9874                    gdb_byte *readbuf, ULONGEST offset, LONGEST len,
9875                    ULONGEST *xfered_len,
9876                    struct packet_config *packet)
9877 {
9878   struct remote_state *rs = get_remote_state ();
9879   LONGEST i, n, packet_len;
9880
9881   if (packet->support == PACKET_DISABLE)
9882     return TARGET_XFER_E_IO;
9883
9884   /* Check whether we've cached an end-of-object packet that matches
9885      this request.  */
9886   if (rs->finished_object)
9887     {
9888       if (strcmp (object_name, rs->finished_object) == 0
9889           && strcmp (annex ? annex : "", rs->finished_annex) == 0
9890           && offset == rs->finished_offset)
9891         return TARGET_XFER_EOF;
9892
9893
9894       /* Otherwise, we're now reading something different.  Discard
9895          the cache.  */
9896       xfree (rs->finished_object);
9897       xfree (rs->finished_annex);
9898       rs->finished_object = NULL;
9899       rs->finished_annex = NULL;
9900     }
9901
9902   /* Request only enough to fit in a single packet.  The actual data
9903      may not, since we don't know how much of it will need to be escaped;
9904      the target is free to respond with slightly less data.  We subtract
9905      five to account for the response type and the protocol frame.  */
9906   n = min (get_remote_packet_size () - 5, len);
9907   snprintf (rs->buf, get_remote_packet_size () - 4, "qXfer:%s:read:%s:%s,%s",
9908             object_name, annex ? annex : "",
9909             phex_nz (offset, sizeof offset),
9910             phex_nz (n, sizeof n));
9911   i = putpkt (rs->buf);
9912   if (i < 0)
9913     return TARGET_XFER_E_IO;
9914
9915   rs->buf[0] = '\0';
9916   packet_len = getpkt_sane (&rs->buf, &rs->buf_size, 0);
9917   if (packet_len < 0 || packet_ok (rs->buf, packet) != PACKET_OK)
9918     return TARGET_XFER_E_IO;
9919
9920   if (rs->buf[0] != 'l' && rs->buf[0] != 'm')
9921     error (_("Unknown remote qXfer reply: %s"), rs->buf);
9922
9923   /* 'm' means there is (or at least might be) more data after this
9924      batch.  That does not make sense unless there's at least one byte
9925      of data in this reply.  */
9926   if (rs->buf[0] == 'm' && packet_len == 1)
9927     error (_("Remote qXfer reply contained no data."));
9928
9929   /* Got some data.  */
9930   i = remote_unescape_input ((gdb_byte *) rs->buf + 1,
9931                              packet_len - 1, readbuf, n);
9932
9933   /* 'l' is an EOF marker, possibly including a final block of data,
9934      or possibly empty.  If we have the final block of a non-empty
9935      object, record this fact to bypass a subsequent partial read.  */
9936   if (rs->buf[0] == 'l' && offset + i > 0)
9937     {
9938       rs->finished_object = xstrdup (object_name);
9939       rs->finished_annex = xstrdup (annex ? annex : "");
9940       rs->finished_offset = offset + i;
9941     }
9942
9943   if (i == 0)
9944     return TARGET_XFER_EOF;
9945   else
9946     {
9947       *xfered_len = i;
9948       return TARGET_XFER_OK;
9949     }
9950 }
9951
9952 static enum target_xfer_status
9953 remote_xfer_partial (struct target_ops *ops, enum target_object object,
9954                      const char *annex, gdb_byte *readbuf,
9955                      const gdb_byte *writebuf, ULONGEST offset, ULONGEST len,
9956                      ULONGEST *xfered_len)
9957 {
9958   struct remote_state *rs;
9959   int i;
9960   char *p2;
9961   char query_type;
9962   int unit_size = gdbarch_addressable_memory_unit_size (target_gdbarch ());
9963
9964   set_remote_traceframe ();
9965   set_general_thread (inferior_ptid);
9966
9967   rs = get_remote_state ();
9968
9969   /* Handle memory using the standard memory routines.  */
9970   if (object == TARGET_OBJECT_MEMORY)
9971     {
9972       /* If the remote target is connected but not running, we should
9973          pass this request down to a lower stratum (e.g. the executable
9974          file).  */
9975       if (!target_has_execution)
9976         return TARGET_XFER_EOF;
9977
9978       if (writebuf != NULL)
9979         return remote_write_bytes (offset, writebuf, len, unit_size,
9980                                    xfered_len);
9981       else
9982         return remote_read_bytes (ops, offset, readbuf, len, unit_size,
9983                                   xfered_len);
9984     }
9985
9986   /* Handle SPU memory using qxfer packets.  */
9987   if (object == TARGET_OBJECT_SPU)
9988     {
9989       if (readbuf)
9990         return remote_read_qxfer (ops, "spu", annex, readbuf, offset, len,
9991                                   xfered_len, &remote_protocol_packets
9992                                   [PACKET_qXfer_spu_read]);
9993       else
9994         return remote_write_qxfer (ops, "spu", annex, writebuf, offset, len,
9995                                    xfered_len, &remote_protocol_packets
9996                                    [PACKET_qXfer_spu_write]);
9997     }
9998
9999   /* Handle extra signal info using qxfer packets.  */
10000   if (object == TARGET_OBJECT_SIGNAL_INFO)
10001     {
10002       if (readbuf)
10003         return remote_read_qxfer (ops, "siginfo", annex, readbuf, offset, len,
10004                                   xfered_len, &remote_protocol_packets
10005                                   [PACKET_qXfer_siginfo_read]);
10006       else
10007         return remote_write_qxfer (ops, "siginfo", annex,
10008                                    writebuf, offset, len, xfered_len,
10009                                    &remote_protocol_packets
10010                                    [PACKET_qXfer_siginfo_write]);
10011     }
10012
10013   if (object == TARGET_OBJECT_STATIC_TRACE_DATA)
10014     {
10015       if (readbuf)
10016         return remote_read_qxfer (ops, "statictrace", annex,
10017                                   readbuf, offset, len, xfered_len,
10018                                   &remote_protocol_packets
10019                                   [PACKET_qXfer_statictrace_read]);
10020       else
10021         return TARGET_XFER_E_IO;
10022     }
10023
10024   /* Only handle flash writes.  */
10025   if (writebuf != NULL)
10026     {
10027       switch (object)
10028         {
10029         case TARGET_OBJECT_FLASH:
10030           return remote_flash_write (ops, offset, len, xfered_len,
10031                                      writebuf);
10032
10033         default:
10034           return TARGET_XFER_E_IO;
10035         }
10036     }
10037
10038   /* Map pre-existing objects onto letters.  DO NOT do this for new
10039      objects!!!  Instead specify new query packets.  */
10040   switch (object)
10041     {
10042     case TARGET_OBJECT_AVR:
10043       query_type = 'R';
10044       break;
10045
10046     case TARGET_OBJECT_AUXV:
10047       gdb_assert (annex == NULL);
10048       return remote_read_qxfer (ops, "auxv", annex, readbuf, offset, len,
10049                                 xfered_len,
10050                                 &remote_protocol_packets[PACKET_qXfer_auxv]);
10051
10052     case TARGET_OBJECT_AVAILABLE_FEATURES:
10053       return remote_read_qxfer
10054         (ops, "features", annex, readbuf, offset, len, xfered_len,
10055          &remote_protocol_packets[PACKET_qXfer_features]);
10056
10057     case TARGET_OBJECT_LIBRARIES:
10058       return remote_read_qxfer
10059         (ops, "libraries", annex, readbuf, offset, len, xfered_len,
10060          &remote_protocol_packets[PACKET_qXfer_libraries]);
10061
10062     case TARGET_OBJECT_LIBRARIES_SVR4:
10063       return remote_read_qxfer
10064         (ops, "libraries-svr4", annex, readbuf, offset, len, xfered_len,
10065          &remote_protocol_packets[PACKET_qXfer_libraries_svr4]);
10066
10067     case TARGET_OBJECT_MEMORY_MAP:
10068       gdb_assert (annex == NULL);
10069       return remote_read_qxfer (ops, "memory-map", annex, readbuf, offset, len,
10070                                  xfered_len,
10071                                 &remote_protocol_packets[PACKET_qXfer_memory_map]);
10072
10073     case TARGET_OBJECT_OSDATA:
10074       /* Should only get here if we're connected.  */
10075       gdb_assert (rs->remote_desc);
10076       return remote_read_qxfer
10077         (ops, "osdata", annex, readbuf, offset, len, xfered_len,
10078         &remote_protocol_packets[PACKET_qXfer_osdata]);
10079
10080     case TARGET_OBJECT_THREADS:
10081       gdb_assert (annex == NULL);
10082       return remote_read_qxfer (ops, "threads", annex, readbuf, offset, len,
10083                                 xfered_len,
10084                                 &remote_protocol_packets[PACKET_qXfer_threads]);
10085
10086     case TARGET_OBJECT_TRACEFRAME_INFO:
10087       gdb_assert (annex == NULL);
10088       return remote_read_qxfer
10089         (ops, "traceframe-info", annex, readbuf, offset, len, xfered_len,
10090          &remote_protocol_packets[PACKET_qXfer_traceframe_info]);
10091
10092     case TARGET_OBJECT_FDPIC:
10093       return remote_read_qxfer (ops, "fdpic", annex, readbuf, offset, len,
10094                                 xfered_len,
10095                                 &remote_protocol_packets[PACKET_qXfer_fdpic]);
10096
10097     case TARGET_OBJECT_OPENVMS_UIB:
10098       return remote_read_qxfer (ops, "uib", annex, readbuf, offset, len,
10099                                 xfered_len,
10100                                 &remote_protocol_packets[PACKET_qXfer_uib]);
10101
10102     case TARGET_OBJECT_BTRACE:
10103       return remote_read_qxfer (ops, "btrace", annex, readbuf, offset, len,
10104                                 xfered_len,
10105         &remote_protocol_packets[PACKET_qXfer_btrace]);
10106
10107     case TARGET_OBJECT_BTRACE_CONF:
10108       return remote_read_qxfer (ops, "btrace-conf", annex, readbuf, offset,
10109                                 len, xfered_len,
10110         &remote_protocol_packets[PACKET_qXfer_btrace_conf]);
10111
10112     case TARGET_OBJECT_EXEC_FILE:
10113       return remote_read_qxfer (ops, "exec-file", annex, readbuf, offset,
10114                                 len, xfered_len,
10115         &remote_protocol_packets[PACKET_qXfer_exec_file]);
10116
10117     default:
10118       return TARGET_XFER_E_IO;
10119     }
10120
10121   /* Minimum outbuf size is get_remote_packet_size ().  If LEN is not
10122      large enough let the caller deal with it.  */
10123   if (len < get_remote_packet_size ())
10124     return TARGET_XFER_E_IO;
10125   len = get_remote_packet_size ();
10126
10127   /* Except for querying the minimum buffer size, target must be open.  */
10128   if (!rs->remote_desc)
10129     error (_("remote query is only available after target open"));
10130
10131   gdb_assert (annex != NULL);
10132   gdb_assert (readbuf != NULL);
10133
10134   p2 = rs->buf;
10135   *p2++ = 'q';
10136   *p2++ = query_type;
10137
10138   /* We used one buffer char for the remote protocol q command and
10139      another for the query type.  As the remote protocol encapsulation
10140      uses 4 chars plus one extra in case we are debugging
10141      (remote_debug), we have PBUFZIZ - 7 left to pack the query
10142      string.  */
10143   i = 0;
10144   while (annex[i] && (i < (get_remote_packet_size () - 8)))
10145     {
10146       /* Bad caller may have sent forbidden characters.  */
10147       gdb_assert (isprint (annex[i]) && annex[i] != '$' && annex[i] != '#');
10148       *p2++ = annex[i];
10149       i++;
10150     }
10151   *p2 = '\0';
10152   gdb_assert (annex[i] == '\0');
10153
10154   i = putpkt (rs->buf);
10155   if (i < 0)
10156     return TARGET_XFER_E_IO;
10157
10158   getpkt (&rs->buf, &rs->buf_size, 0);
10159   strcpy ((char *) readbuf, rs->buf);
10160
10161   *xfered_len = strlen ((char *) readbuf);
10162   return TARGET_XFER_OK;
10163 }
10164
10165 static int
10166 remote_search_memory (struct target_ops* ops,
10167                       CORE_ADDR start_addr, ULONGEST search_space_len,
10168                       const gdb_byte *pattern, ULONGEST pattern_len,
10169                       CORE_ADDR *found_addrp)
10170 {
10171   int addr_size = gdbarch_addr_bit (target_gdbarch ()) / 8;
10172   struct remote_state *rs = get_remote_state ();
10173   int max_size = get_memory_write_packet_size ();
10174   struct packet_config *packet =
10175     &remote_protocol_packets[PACKET_qSearch_memory];
10176   /* Number of packet bytes used to encode the pattern;
10177      this could be more than PATTERN_LEN due to escape characters.  */
10178   int escaped_pattern_len;
10179   /* Amount of pattern that was encodable in the packet.  */
10180   int used_pattern_len;
10181   int i;
10182   int found;
10183   ULONGEST found_addr;
10184
10185   /* Don't go to the target if we don't have to.
10186      This is done before checking packet->support to avoid the possibility that
10187      a success for this edge case means the facility works in general.  */
10188   if (pattern_len > search_space_len)
10189     return 0;
10190   if (pattern_len == 0)
10191     {
10192       *found_addrp = start_addr;
10193       return 1;
10194     }
10195
10196   /* If we already know the packet isn't supported, fall back to the simple
10197      way of searching memory.  */
10198
10199   if (packet_config_support (packet) == PACKET_DISABLE)
10200     {
10201       /* Target doesn't provided special support, fall back and use the
10202          standard support (copy memory and do the search here).  */
10203       return simple_search_memory (ops, start_addr, search_space_len,
10204                                    pattern, pattern_len, found_addrp);
10205     }
10206
10207   /* Make sure the remote is pointing at the right process.  */
10208   set_general_process ();
10209
10210   /* Insert header.  */
10211   i = snprintf (rs->buf, max_size, 
10212                 "qSearch:memory:%s;%s;",
10213                 phex_nz (start_addr, addr_size),
10214                 phex_nz (search_space_len, sizeof (search_space_len)));
10215   max_size -= (i + 1);
10216
10217   /* Escape as much data as fits into rs->buf.  */
10218   escaped_pattern_len =
10219     remote_escape_output (pattern, pattern_len, 1, (gdb_byte *) rs->buf + i,
10220                           &used_pattern_len, max_size);
10221
10222   /* Bail if the pattern is too large.  */
10223   if (used_pattern_len != pattern_len)
10224     error (_("Pattern is too large to transmit to remote target."));
10225
10226   if (putpkt_binary (rs->buf, i + escaped_pattern_len) < 0
10227       || getpkt_sane (&rs->buf, &rs->buf_size, 0) < 0
10228       || packet_ok (rs->buf, packet) != PACKET_OK)
10229     {
10230       /* The request may not have worked because the command is not
10231          supported.  If so, fall back to the simple way.  */
10232       if (packet->support == PACKET_DISABLE)
10233         {
10234           return simple_search_memory (ops, start_addr, search_space_len,
10235                                        pattern, pattern_len, found_addrp);
10236         }
10237       return -1;
10238     }
10239
10240   if (rs->buf[0] == '0')
10241     found = 0;
10242   else if (rs->buf[0] == '1')
10243     {
10244       found = 1;
10245       if (rs->buf[1] != ',')
10246         error (_("Unknown qSearch:memory reply: %s"), rs->buf);
10247       unpack_varlen_hex (rs->buf + 2, &found_addr);
10248       *found_addrp = found_addr;
10249     }
10250   else
10251     error (_("Unknown qSearch:memory reply: %s"), rs->buf);
10252
10253   return found;
10254 }
10255
10256 static void
10257 remote_rcmd (struct target_ops *self, const char *command,
10258              struct ui_file *outbuf)
10259 {
10260   struct remote_state *rs = get_remote_state ();
10261   char *p = rs->buf;
10262
10263   if (!rs->remote_desc)
10264     error (_("remote rcmd is only available after target open"));
10265
10266   /* Send a NULL command across as an empty command.  */
10267   if (command == NULL)
10268     command = "";
10269
10270   /* The query prefix.  */
10271   strcpy (rs->buf, "qRcmd,");
10272   p = strchr (rs->buf, '\0');
10273
10274   if ((strlen (rs->buf) + strlen (command) * 2 + 8/*misc*/)
10275       > get_remote_packet_size ())
10276     error (_("\"monitor\" command ``%s'' is too long."), command);
10277
10278   /* Encode the actual command.  */
10279   bin2hex ((const gdb_byte *) command, p, strlen (command));
10280
10281   if (putpkt (rs->buf) < 0)
10282     error (_("Communication problem with target."));
10283
10284   /* get/display the response */
10285   while (1)
10286     {
10287       char *buf;
10288
10289       /* XXX - see also remote_get_noisy_reply().  */
10290       QUIT;                     /* Allow user to bail out with ^C.  */
10291       rs->buf[0] = '\0';
10292       if (getpkt_sane (&rs->buf, &rs->buf_size, 0) == -1)
10293         { 
10294           /* Timeout.  Continue to (try to) read responses.
10295              This is better than stopping with an error, assuming the stub
10296              is still executing the (long) monitor command.
10297              If needed, the user can interrupt gdb using C-c, obtaining
10298              an effect similar to stop on timeout.  */
10299           continue;
10300         }
10301       buf = rs->buf;
10302       if (buf[0] == '\0')
10303         error (_("Target does not support this command."));
10304       if (buf[0] == 'O' && buf[1] != 'K')
10305         {
10306           remote_console_output (buf + 1); /* 'O' message from stub.  */
10307           continue;
10308         }
10309       if (strcmp (buf, "OK") == 0)
10310         break;
10311       if (strlen (buf) == 3 && buf[0] == 'E'
10312           && isdigit (buf[1]) && isdigit (buf[2]))
10313         {
10314           error (_("Protocol error with Rcmd"));
10315         }
10316       for (p = buf; p[0] != '\0' && p[1] != '\0'; p += 2)
10317         {
10318           char c = (fromhex (p[0]) << 4) + fromhex (p[1]);
10319
10320           fputc_unfiltered (c, outbuf);
10321         }
10322       break;
10323     }
10324 }
10325
10326 static VEC(mem_region_s) *
10327 remote_memory_map (struct target_ops *ops)
10328 {
10329   VEC(mem_region_s) *result = NULL;
10330   char *text = target_read_stralloc (&current_target,
10331                                      TARGET_OBJECT_MEMORY_MAP, NULL);
10332
10333   if (text)
10334     {
10335       struct cleanup *back_to = make_cleanup (xfree, text);
10336
10337       result = parse_memory_map (text);
10338       do_cleanups (back_to);
10339     }
10340
10341   return result;
10342 }
10343
10344 static void
10345 packet_command (char *args, int from_tty)
10346 {
10347   struct remote_state *rs = get_remote_state ();
10348
10349   if (!rs->remote_desc)
10350     error (_("command can only be used with remote target"));
10351
10352   if (!args)
10353     error (_("remote-packet command requires packet text as argument"));
10354
10355   puts_filtered ("sending: ");
10356   print_packet (args);
10357   puts_filtered ("\n");
10358   putpkt (args);
10359
10360   getpkt (&rs->buf, &rs->buf_size, 0);
10361   puts_filtered ("received: ");
10362   print_packet (rs->buf);
10363   puts_filtered ("\n");
10364 }
10365
10366 #if 0
10367 /* --------- UNIT_TEST for THREAD oriented PACKETS ------------------- */
10368
10369 static void display_thread_info (struct gdb_ext_thread_info *info);
10370
10371 static void threadset_test_cmd (char *cmd, int tty);
10372
10373 static void threadalive_test (char *cmd, int tty);
10374
10375 static void threadlist_test_cmd (char *cmd, int tty);
10376
10377 int get_and_display_threadinfo (threadref *ref);
10378
10379 static void threadinfo_test_cmd (char *cmd, int tty);
10380
10381 static int thread_display_step (threadref *ref, void *context);
10382
10383 static void threadlist_update_test_cmd (char *cmd, int tty);
10384
10385 static void init_remote_threadtests (void);
10386
10387 #define SAMPLE_THREAD  0x05060708       /* Truncated 64 bit threadid.  */
10388
10389 static void
10390 threadset_test_cmd (char *cmd, int tty)
10391 {
10392   int sample_thread = SAMPLE_THREAD;
10393
10394   printf_filtered (_("Remote threadset test\n"));
10395   set_general_thread (sample_thread);
10396 }
10397
10398
10399 static void
10400 threadalive_test (char *cmd, int tty)
10401 {
10402   int sample_thread = SAMPLE_THREAD;
10403   int pid = ptid_get_pid (inferior_ptid);
10404   ptid_t ptid = ptid_build (pid, sample_thread, 0);
10405
10406   if (remote_thread_alive (ptid))
10407     printf_filtered ("PASS: Thread alive test\n");
10408   else
10409     printf_filtered ("FAIL: Thread alive test\n");
10410 }
10411
10412 void output_threadid (char *title, threadref *ref);
10413
10414 void
10415 output_threadid (char *title, threadref *ref)
10416 {
10417   char hexid[20];
10418
10419   pack_threadid (&hexid[0], ref);       /* Convert threead id into hex.  */
10420   hexid[16] = 0;
10421   printf_filtered ("%s  %s\n", title, (&hexid[0]));
10422 }
10423
10424 static void
10425 threadlist_test_cmd (char *cmd, int tty)
10426 {
10427   int startflag = 1;
10428   threadref nextthread;
10429   int done, result_count;
10430   threadref threadlist[3];
10431
10432   printf_filtered ("Remote Threadlist test\n");
10433   if (!remote_get_threadlist (startflag, &nextthread, 3, &done,
10434                               &result_count, &threadlist[0]))
10435     printf_filtered ("FAIL: threadlist test\n");
10436   else
10437     {
10438       threadref *scan = threadlist;
10439       threadref *limit = scan + result_count;
10440
10441       while (scan < limit)
10442         output_threadid (" thread ", scan++);
10443     }
10444 }
10445
10446 void
10447 display_thread_info (struct gdb_ext_thread_info *info)
10448 {
10449   output_threadid ("Threadid: ", &info->threadid);
10450   printf_filtered ("Name: %s\n ", info->shortname);
10451   printf_filtered ("State: %s\n", info->display);
10452   printf_filtered ("other: %s\n\n", info->more_display);
10453 }
10454
10455 int
10456 get_and_display_threadinfo (threadref *ref)
10457 {
10458   int result;
10459   int set;
10460   struct gdb_ext_thread_info threadinfo;
10461
10462   set = TAG_THREADID | TAG_EXISTS | TAG_THREADNAME
10463     | TAG_MOREDISPLAY | TAG_DISPLAY;
10464   if (0 != (result = remote_get_threadinfo (ref, set, &threadinfo)))
10465     display_thread_info (&threadinfo);
10466   return result;
10467 }
10468
10469 static void
10470 threadinfo_test_cmd (char *cmd, int tty)
10471 {
10472   int athread = SAMPLE_THREAD;
10473   threadref thread;
10474   int set;
10475
10476   int_to_threadref (&thread, athread);
10477   printf_filtered ("Remote Threadinfo test\n");
10478   if (!get_and_display_threadinfo (&thread))
10479     printf_filtered ("FAIL cannot get thread info\n");
10480 }
10481
10482 static int
10483 thread_display_step (threadref *ref, void *context)
10484 {
10485   /* output_threadid(" threadstep ",ref); *//* simple test */
10486   return get_and_display_threadinfo (ref);
10487 }
10488
10489 static void
10490 threadlist_update_test_cmd (char *cmd, int tty)
10491 {
10492   printf_filtered ("Remote Threadlist update test\n");
10493   remote_threadlist_iterator (thread_display_step, 0, CRAZY_MAX_THREADS);
10494 }
10495
10496 static void
10497 init_remote_threadtests (void)
10498 {
10499   add_com ("tlist", class_obscure, threadlist_test_cmd,
10500            _("Fetch and print the remote list of "
10501              "thread identifiers, one pkt only"));
10502   add_com ("tinfo", class_obscure, threadinfo_test_cmd,
10503            _("Fetch and display info about one thread"));
10504   add_com ("tset", class_obscure, threadset_test_cmd,
10505            _("Test setting to a different thread"));
10506   add_com ("tupd", class_obscure, threadlist_update_test_cmd,
10507            _("Iterate through updating all remote thread info"));
10508   add_com ("talive", class_obscure, threadalive_test,
10509            _(" Remote thread alive test "));
10510 }
10511
10512 #endif /* 0 */
10513
10514 /* Convert a thread ID to a string.  Returns the string in a static
10515    buffer.  */
10516
10517 static char *
10518 remote_pid_to_str (struct target_ops *ops, ptid_t ptid)
10519 {
10520   static char buf[64];
10521   struct remote_state *rs = get_remote_state ();
10522
10523   if (ptid_equal (ptid, null_ptid))
10524     return normal_pid_to_str (ptid);
10525   else if (ptid_is_pid (ptid))
10526     {
10527       /* Printing an inferior target id.  */
10528
10529       /* When multi-process extensions are off, there's no way in the
10530          remote protocol to know the remote process id, if there's any
10531          at all.  There's one exception --- when we're connected with
10532          target extended-remote, and we manually attached to a process
10533          with "attach PID".  We don't record anywhere a flag that
10534          allows us to distinguish that case from the case of
10535          connecting with extended-remote and the stub already being
10536          attached to a process, and reporting yes to qAttached, hence
10537          no smart special casing here.  */
10538       if (!remote_multi_process_p (rs))
10539         {
10540           xsnprintf (buf, sizeof buf, "Remote target");
10541           return buf;
10542         }
10543
10544       return normal_pid_to_str (ptid);
10545     }
10546   else
10547     {
10548       if (ptid_equal (magic_null_ptid, ptid))
10549         xsnprintf (buf, sizeof buf, "Thread <main>");
10550       else if (remote_multi_process_p (rs))
10551         if (ptid_get_lwp (ptid) == 0)
10552           return normal_pid_to_str (ptid);
10553         else
10554           xsnprintf (buf, sizeof buf, "Thread %d.%ld",
10555                      ptid_get_pid (ptid), ptid_get_lwp (ptid));
10556       else
10557         xsnprintf (buf, sizeof buf, "Thread %ld",
10558                    ptid_get_lwp (ptid));
10559       return buf;
10560     }
10561 }
10562
10563 /* Get the address of the thread local variable in OBJFILE which is
10564    stored at OFFSET within the thread local storage for thread PTID.  */
10565
10566 static CORE_ADDR
10567 remote_get_thread_local_address (struct target_ops *ops,
10568                                  ptid_t ptid, CORE_ADDR lm, CORE_ADDR offset)
10569 {
10570   if (packet_support (PACKET_qGetTLSAddr) != PACKET_DISABLE)
10571     {
10572       struct remote_state *rs = get_remote_state ();
10573       char *p = rs->buf;
10574       char *endp = rs->buf + get_remote_packet_size ();
10575       enum packet_result result;
10576
10577       strcpy (p, "qGetTLSAddr:");
10578       p += strlen (p);
10579       p = write_ptid (p, endp, ptid);
10580       *p++ = ',';
10581       p += hexnumstr (p, offset);
10582       *p++ = ',';
10583       p += hexnumstr (p, lm);
10584       *p++ = '\0';
10585
10586       putpkt (rs->buf);
10587       getpkt (&rs->buf, &rs->buf_size, 0);
10588       result = packet_ok (rs->buf,
10589                           &remote_protocol_packets[PACKET_qGetTLSAddr]);
10590       if (result == PACKET_OK)
10591         {
10592           ULONGEST result;
10593
10594           unpack_varlen_hex (rs->buf, &result);
10595           return result;
10596         }
10597       else if (result == PACKET_UNKNOWN)
10598         throw_error (TLS_GENERIC_ERROR,
10599                      _("Remote target doesn't support qGetTLSAddr packet"));
10600       else
10601         throw_error (TLS_GENERIC_ERROR,
10602                      _("Remote target failed to process qGetTLSAddr request"));
10603     }
10604   else
10605     throw_error (TLS_GENERIC_ERROR,
10606                  _("TLS not supported or disabled on this target"));
10607   /* Not reached.  */
10608   return 0;
10609 }
10610
10611 /* Provide thread local base, i.e. Thread Information Block address.
10612    Returns 1 if ptid is found and thread_local_base is non zero.  */
10613
10614 static int
10615 remote_get_tib_address (struct target_ops *self, ptid_t ptid, CORE_ADDR *addr)
10616 {
10617   if (packet_support (PACKET_qGetTIBAddr) != PACKET_DISABLE)
10618     {
10619       struct remote_state *rs = get_remote_state ();
10620       char *p = rs->buf;
10621       char *endp = rs->buf + get_remote_packet_size ();
10622       enum packet_result result;
10623
10624       strcpy (p, "qGetTIBAddr:");
10625       p += strlen (p);
10626       p = write_ptid (p, endp, ptid);
10627       *p++ = '\0';
10628
10629       putpkt (rs->buf);
10630       getpkt (&rs->buf, &rs->buf_size, 0);
10631       result = packet_ok (rs->buf,
10632                           &remote_protocol_packets[PACKET_qGetTIBAddr]);
10633       if (result == PACKET_OK)
10634         {
10635           ULONGEST result;
10636
10637           unpack_varlen_hex (rs->buf, &result);
10638           if (addr)
10639             *addr = (CORE_ADDR) result;
10640           return 1;
10641         }
10642       else if (result == PACKET_UNKNOWN)
10643         error (_("Remote target doesn't support qGetTIBAddr packet"));
10644       else
10645         error (_("Remote target failed to process qGetTIBAddr request"));
10646     }
10647   else
10648     error (_("qGetTIBAddr not supported or disabled on this target"));
10649   /* Not reached.  */
10650   return 0;
10651 }
10652
10653 /* Support for inferring a target description based on the current
10654    architecture and the size of a 'g' packet.  While the 'g' packet
10655    can have any size (since optional registers can be left off the
10656    end), some sizes are easily recognizable given knowledge of the
10657    approximate architecture.  */
10658
10659 struct remote_g_packet_guess
10660 {
10661   int bytes;
10662   const struct target_desc *tdesc;
10663 };
10664 typedef struct remote_g_packet_guess remote_g_packet_guess_s;
10665 DEF_VEC_O(remote_g_packet_guess_s);
10666
10667 struct remote_g_packet_data
10668 {
10669   VEC(remote_g_packet_guess_s) *guesses;
10670 };
10671
10672 static struct gdbarch_data *remote_g_packet_data_handle;
10673
10674 static void *
10675 remote_g_packet_data_init (struct obstack *obstack)
10676 {
10677   return OBSTACK_ZALLOC (obstack, struct remote_g_packet_data);
10678 }
10679
10680 void
10681 register_remote_g_packet_guess (struct gdbarch *gdbarch, int bytes,
10682                                 const struct target_desc *tdesc)
10683 {
10684   struct remote_g_packet_data *data
10685     = ((struct remote_g_packet_data *)
10686        gdbarch_data (gdbarch, remote_g_packet_data_handle));
10687   struct remote_g_packet_guess new_guess, *guess;
10688   int ix;
10689
10690   gdb_assert (tdesc != NULL);
10691
10692   for (ix = 0;
10693        VEC_iterate (remote_g_packet_guess_s, data->guesses, ix, guess);
10694        ix++)
10695     if (guess->bytes == bytes)
10696       internal_error (__FILE__, __LINE__,
10697                       _("Duplicate g packet description added for size %d"),
10698                       bytes);
10699
10700   new_guess.bytes = bytes;
10701   new_guess.tdesc = tdesc;
10702   VEC_safe_push (remote_g_packet_guess_s, data->guesses, &new_guess);
10703 }
10704
10705 /* Return 1 if remote_read_description would do anything on this target
10706    and architecture, 0 otherwise.  */
10707
10708 static int
10709 remote_read_description_p (struct target_ops *target)
10710 {
10711   struct remote_g_packet_data *data
10712     = ((struct remote_g_packet_data *)
10713        gdbarch_data (target_gdbarch (), remote_g_packet_data_handle));
10714
10715   if (!VEC_empty (remote_g_packet_guess_s, data->guesses))
10716     return 1;
10717
10718   return 0;
10719 }
10720
10721 static const struct target_desc *
10722 remote_read_description (struct target_ops *target)
10723 {
10724   struct remote_g_packet_data *data
10725     = ((struct remote_g_packet_data *)
10726        gdbarch_data (target_gdbarch (), remote_g_packet_data_handle));
10727
10728   /* Do not try this during initial connection, when we do not know
10729      whether there is a running but stopped thread.  */
10730   if (!target_has_execution || ptid_equal (inferior_ptid, null_ptid))
10731     return target->beneath->to_read_description (target->beneath);
10732
10733   if (!VEC_empty (remote_g_packet_guess_s, data->guesses))
10734     {
10735       struct remote_g_packet_guess *guess;
10736       int ix;
10737       int bytes = send_g_packet ();
10738
10739       for (ix = 0;
10740            VEC_iterate (remote_g_packet_guess_s, data->guesses, ix, guess);
10741            ix++)
10742         if (guess->bytes == bytes)
10743           return guess->tdesc;
10744
10745       /* We discard the g packet.  A minor optimization would be to
10746          hold on to it, and fill the register cache once we have selected
10747          an architecture, but it's too tricky to do safely.  */
10748     }
10749
10750   return target->beneath->to_read_description (target->beneath);
10751 }
10752
10753 /* Remote file transfer support.  This is host-initiated I/O, not
10754    target-initiated; for target-initiated, see remote-fileio.c.  */
10755
10756 /* If *LEFT is at least the length of STRING, copy STRING to
10757    *BUFFER, update *BUFFER to point to the new end of the buffer, and
10758    decrease *LEFT.  Otherwise raise an error.  */
10759
10760 static void
10761 remote_buffer_add_string (char **buffer, int *left, char *string)
10762 {
10763   int len = strlen (string);
10764
10765   if (len > *left)
10766     error (_("Packet too long for target."));
10767
10768   memcpy (*buffer, string, len);
10769   *buffer += len;
10770   *left -= len;
10771
10772   /* NUL-terminate the buffer as a convenience, if there is
10773      room.  */
10774   if (*left)
10775     **buffer = '\0';
10776 }
10777
10778 /* If *LEFT is large enough, hex encode LEN bytes from BYTES into
10779    *BUFFER, update *BUFFER to point to the new end of the buffer, and
10780    decrease *LEFT.  Otherwise raise an error.  */
10781
10782 static void
10783 remote_buffer_add_bytes (char **buffer, int *left, const gdb_byte *bytes,
10784                          int len)
10785 {
10786   if (2 * len > *left)
10787     error (_("Packet too long for target."));
10788
10789   bin2hex (bytes, *buffer, len);
10790   *buffer += 2 * len;
10791   *left -= 2 * len;
10792
10793   /* NUL-terminate the buffer as a convenience, if there is
10794      room.  */
10795   if (*left)
10796     **buffer = '\0';
10797 }
10798
10799 /* If *LEFT is large enough, convert VALUE to hex and add it to
10800    *BUFFER, update *BUFFER to point to the new end of the buffer, and
10801    decrease *LEFT.  Otherwise raise an error.  */
10802
10803 static void
10804 remote_buffer_add_int (char **buffer, int *left, ULONGEST value)
10805 {
10806   int len = hexnumlen (value);
10807
10808   if (len > *left)
10809     error (_("Packet too long for target."));
10810
10811   hexnumstr (*buffer, value);
10812   *buffer += len;
10813   *left -= len;
10814
10815   /* NUL-terminate the buffer as a convenience, if there is
10816      room.  */
10817   if (*left)
10818     **buffer = '\0';
10819 }
10820
10821 /* Parse an I/O result packet from BUFFER.  Set RETCODE to the return
10822    value, *REMOTE_ERRNO to the remote error number or zero if none
10823    was included, and *ATTACHMENT to point to the start of the annex
10824    if any.  The length of the packet isn't needed here; there may
10825    be NUL bytes in BUFFER, but they will be after *ATTACHMENT.
10826
10827    Return 0 if the packet could be parsed, -1 if it could not.  If
10828    -1 is returned, the other variables may not be initialized.  */
10829
10830 static int
10831 remote_hostio_parse_result (char *buffer, int *retcode,
10832                             int *remote_errno, char **attachment)
10833 {
10834   char *p, *p2;
10835
10836   *remote_errno = 0;
10837   *attachment = NULL;
10838
10839   if (buffer[0] != 'F')
10840     return -1;
10841
10842   errno = 0;
10843   *retcode = strtol (&buffer[1], &p, 16);
10844   if (errno != 0 || p == &buffer[1])
10845     return -1;
10846
10847   /* Check for ",errno".  */
10848   if (*p == ',')
10849     {
10850       errno = 0;
10851       *remote_errno = strtol (p + 1, &p2, 16);
10852       if (errno != 0 || p + 1 == p2)
10853         return -1;
10854       p = p2;
10855     }
10856
10857   /* Check for ";attachment".  If there is no attachment, the
10858      packet should end here.  */
10859   if (*p == ';')
10860     {
10861       *attachment = p + 1;
10862       return 0;
10863     }
10864   else if (*p == '\0')
10865     return 0;
10866   else
10867     return -1;
10868 }
10869
10870 /* Send a prepared I/O packet to the target and read its response.
10871    The prepared packet is in the global RS->BUF before this function
10872    is called, and the answer is there when we return.
10873
10874    COMMAND_BYTES is the length of the request to send, which may include
10875    binary data.  WHICH_PACKET is the packet configuration to check
10876    before attempting a packet.  If an error occurs, *REMOTE_ERRNO
10877    is set to the error number and -1 is returned.  Otherwise the value
10878    returned by the function is returned.
10879
10880    ATTACHMENT and ATTACHMENT_LEN should be non-NULL if and only if an
10881    attachment is expected; an error will be reported if there's a
10882    mismatch.  If one is found, *ATTACHMENT will be set to point into
10883    the packet buffer and *ATTACHMENT_LEN will be set to the
10884    attachment's length.  */
10885
10886 static int
10887 remote_hostio_send_command (int command_bytes, int which_packet,
10888                             int *remote_errno, char **attachment,
10889                             int *attachment_len)
10890 {
10891   struct remote_state *rs = get_remote_state ();
10892   int ret, bytes_read;
10893   char *attachment_tmp;
10894
10895   if (!rs->remote_desc
10896       || packet_support (which_packet) == PACKET_DISABLE)
10897     {
10898       *remote_errno = FILEIO_ENOSYS;
10899       return -1;
10900     }
10901
10902   putpkt_binary (rs->buf, command_bytes);
10903   bytes_read = getpkt_sane (&rs->buf, &rs->buf_size, 0);
10904
10905   /* If it timed out, something is wrong.  Don't try to parse the
10906      buffer.  */
10907   if (bytes_read < 0)
10908     {
10909       *remote_errno = FILEIO_EINVAL;
10910       return -1;
10911     }
10912
10913   switch (packet_ok (rs->buf, &remote_protocol_packets[which_packet]))
10914     {
10915     case PACKET_ERROR:
10916       *remote_errno = FILEIO_EINVAL;
10917       return -1;
10918     case PACKET_UNKNOWN:
10919       *remote_errno = FILEIO_ENOSYS;
10920       return -1;
10921     case PACKET_OK:
10922       break;
10923     }
10924
10925   if (remote_hostio_parse_result (rs->buf, &ret, remote_errno,
10926                                   &attachment_tmp))
10927     {
10928       *remote_errno = FILEIO_EINVAL;
10929       return -1;
10930     }
10931
10932   /* Make sure we saw an attachment if and only if we expected one.  */
10933   if ((attachment_tmp == NULL && attachment != NULL)
10934       || (attachment_tmp != NULL && attachment == NULL))
10935     {
10936       *remote_errno = FILEIO_EINVAL;
10937       return -1;
10938     }
10939
10940   /* If an attachment was found, it must point into the packet buffer;
10941      work out how many bytes there were.  */
10942   if (attachment_tmp != NULL)
10943     {
10944       *attachment = attachment_tmp;
10945       *attachment_len = bytes_read - (*attachment - rs->buf);
10946     }
10947
10948   return ret;
10949 }
10950
10951 /* Invalidate the readahead cache.  */
10952
10953 static void
10954 readahead_cache_invalidate (void)
10955 {
10956   struct remote_state *rs = get_remote_state ();
10957
10958   rs->readahead_cache.fd = -1;
10959 }
10960
10961 /* Invalidate the readahead cache if it is holding data for FD.  */
10962
10963 static void
10964 readahead_cache_invalidate_fd (int fd)
10965 {
10966   struct remote_state *rs = get_remote_state ();
10967
10968   if (rs->readahead_cache.fd == fd)
10969     rs->readahead_cache.fd = -1;
10970 }
10971
10972 /* Set the filesystem remote_hostio functions that take FILENAME
10973    arguments will use.  Return 0 on success, or -1 if an error
10974    occurs (and set *REMOTE_ERRNO).  */
10975
10976 static int
10977 remote_hostio_set_filesystem (struct inferior *inf, int *remote_errno)
10978 {
10979   struct remote_state *rs = get_remote_state ();
10980   int required_pid = (inf == NULL || inf->fake_pid_p) ? 0 : inf->pid;
10981   char *p = rs->buf;
10982   int left = get_remote_packet_size () - 1;
10983   char arg[9];
10984   int ret;
10985
10986   if (packet_support (PACKET_vFile_setfs) == PACKET_DISABLE)
10987     return 0;
10988
10989   if (rs->fs_pid != -1 && required_pid == rs->fs_pid)
10990     return 0;
10991
10992   remote_buffer_add_string (&p, &left, "vFile:setfs:");
10993
10994   xsnprintf (arg, sizeof (arg), "%x", required_pid);
10995   remote_buffer_add_string (&p, &left, arg);
10996
10997   ret = remote_hostio_send_command (p - rs->buf, PACKET_vFile_setfs,
10998                                     remote_errno, NULL, NULL);
10999
11000   if (packet_support (PACKET_vFile_setfs) == PACKET_DISABLE)
11001     return 0;
11002
11003   if (ret == 0)
11004     rs->fs_pid = required_pid;
11005
11006   return ret;
11007 }
11008
11009 /* Implementation of to_fileio_open.  */
11010
11011 static int
11012 remote_hostio_open (struct target_ops *self,
11013                     struct inferior *inf, const char *filename,
11014                     int flags, int mode, int warn_if_slow,
11015                     int *remote_errno)
11016 {
11017   struct remote_state *rs = get_remote_state ();
11018   char *p = rs->buf;
11019   int left = get_remote_packet_size () - 1;
11020
11021   if (warn_if_slow)
11022     {
11023       static int warning_issued = 0;
11024
11025       printf_unfiltered (_("Reading %s from remote target...\n"),
11026                          filename);
11027
11028       if (!warning_issued)
11029         {
11030           warning (_("File transfers from remote targets can be slow."
11031                      " Use \"set sysroot\" to access files locally"
11032                      " instead."));
11033           warning_issued = 1;
11034         }
11035     }
11036
11037   if (remote_hostio_set_filesystem (inf, remote_errno) != 0)
11038     return -1;
11039
11040   remote_buffer_add_string (&p, &left, "vFile:open:");
11041
11042   remote_buffer_add_bytes (&p, &left, (const gdb_byte *) filename,
11043                            strlen (filename));
11044   remote_buffer_add_string (&p, &left, ",");
11045
11046   remote_buffer_add_int (&p, &left, flags);
11047   remote_buffer_add_string (&p, &left, ",");
11048
11049   remote_buffer_add_int (&p, &left, mode);
11050
11051   return remote_hostio_send_command (p - rs->buf, PACKET_vFile_open,
11052                                      remote_errno, NULL, NULL);
11053 }
11054
11055 /* Implementation of to_fileio_pwrite.  */
11056
11057 static int
11058 remote_hostio_pwrite (struct target_ops *self,
11059                       int fd, const gdb_byte *write_buf, int len,
11060                       ULONGEST offset, int *remote_errno)
11061 {
11062   struct remote_state *rs = get_remote_state ();
11063   char *p = rs->buf;
11064   int left = get_remote_packet_size ();
11065   int out_len;
11066
11067   readahead_cache_invalidate_fd (fd);
11068
11069   remote_buffer_add_string (&p, &left, "vFile:pwrite:");
11070
11071   remote_buffer_add_int (&p, &left, fd);
11072   remote_buffer_add_string (&p, &left, ",");
11073
11074   remote_buffer_add_int (&p, &left, offset);
11075   remote_buffer_add_string (&p, &left, ",");
11076
11077   p += remote_escape_output (write_buf, len, 1, (gdb_byte *) p, &out_len,
11078                              get_remote_packet_size () - (p - rs->buf));
11079
11080   return remote_hostio_send_command (p - rs->buf, PACKET_vFile_pwrite,
11081                                      remote_errno, NULL, NULL);
11082 }
11083
11084 /* Helper for the implementation of to_fileio_pread.  Read the file
11085    from the remote side with vFile:pread.  */
11086
11087 static int
11088 remote_hostio_pread_vFile (struct target_ops *self,
11089                            int fd, gdb_byte *read_buf, int len,
11090                            ULONGEST offset, int *remote_errno)
11091 {
11092   struct remote_state *rs = get_remote_state ();
11093   char *p = rs->buf;
11094   char *attachment;
11095   int left = get_remote_packet_size ();
11096   int ret, attachment_len;
11097   int read_len;
11098
11099   remote_buffer_add_string (&p, &left, "vFile:pread:");
11100
11101   remote_buffer_add_int (&p, &left, fd);
11102   remote_buffer_add_string (&p, &left, ",");
11103
11104   remote_buffer_add_int (&p, &left, len);
11105   remote_buffer_add_string (&p, &left, ",");
11106
11107   remote_buffer_add_int (&p, &left, offset);
11108
11109   ret = remote_hostio_send_command (p - rs->buf, PACKET_vFile_pread,
11110                                     remote_errno, &attachment,
11111                                     &attachment_len);
11112
11113   if (ret < 0)
11114     return ret;
11115
11116   read_len = remote_unescape_input ((gdb_byte *) attachment, attachment_len,
11117                                     read_buf, len);
11118   if (read_len != ret)
11119     error (_("Read returned %d, but %d bytes."), ret, (int) read_len);
11120
11121   return ret;
11122 }
11123
11124 /* Serve pread from the readahead cache.  Returns number of bytes
11125    read, or 0 if the request can't be served from the cache.  */
11126
11127 static int
11128 remote_hostio_pread_from_cache (struct remote_state *rs,
11129                                 int fd, gdb_byte *read_buf, size_t len,
11130                                 ULONGEST offset)
11131 {
11132   struct readahead_cache *cache = &rs->readahead_cache;
11133
11134   if (cache->fd == fd
11135       && cache->offset <= offset
11136       && offset < cache->offset + cache->bufsize)
11137     {
11138       ULONGEST max = cache->offset + cache->bufsize;
11139
11140       if (offset + len > max)
11141         len = max - offset;
11142
11143       memcpy (read_buf, cache->buf + offset - cache->offset, len);
11144       return len;
11145     }
11146
11147   return 0;
11148 }
11149
11150 /* Implementation of to_fileio_pread.  */
11151
11152 static int
11153 remote_hostio_pread (struct target_ops *self,
11154                      int fd, gdb_byte *read_buf, int len,
11155                      ULONGEST offset, int *remote_errno)
11156 {
11157   int ret;
11158   struct remote_state *rs = get_remote_state ();
11159   struct readahead_cache *cache = &rs->readahead_cache;
11160
11161   ret = remote_hostio_pread_from_cache (rs, fd, read_buf, len, offset);
11162   if (ret > 0)
11163     {
11164       cache->hit_count++;
11165
11166       if (remote_debug)
11167         fprintf_unfiltered (gdb_stdlog, "readahead cache hit %s\n",
11168                             pulongest (cache->hit_count));
11169       return ret;
11170     }
11171
11172   cache->miss_count++;
11173   if (remote_debug)
11174     fprintf_unfiltered (gdb_stdlog, "readahead cache miss %s\n",
11175                         pulongest (cache->miss_count));
11176
11177   cache->fd = fd;
11178   cache->offset = offset;
11179   cache->bufsize = get_remote_packet_size ();
11180   cache->buf = (gdb_byte *) xrealloc (cache->buf, cache->bufsize);
11181
11182   ret = remote_hostio_pread_vFile (self, cache->fd, cache->buf, cache->bufsize,
11183                                    cache->offset, remote_errno);
11184   if (ret <= 0)
11185     {
11186       readahead_cache_invalidate_fd (fd);
11187       return ret;
11188     }
11189
11190   cache->bufsize = ret;
11191   return remote_hostio_pread_from_cache (rs, fd, read_buf, len, offset);
11192 }
11193
11194 /* Implementation of to_fileio_close.  */
11195
11196 static int
11197 remote_hostio_close (struct target_ops *self, int fd, int *remote_errno)
11198 {
11199   struct remote_state *rs = get_remote_state ();
11200   char *p = rs->buf;
11201   int left = get_remote_packet_size () - 1;
11202
11203   readahead_cache_invalidate_fd (fd);
11204
11205   remote_buffer_add_string (&p, &left, "vFile:close:");
11206
11207   remote_buffer_add_int (&p, &left, fd);
11208
11209   return remote_hostio_send_command (p - rs->buf, PACKET_vFile_close,
11210                                      remote_errno, NULL, NULL);
11211 }
11212
11213 /* Implementation of to_fileio_unlink.  */
11214
11215 static int
11216 remote_hostio_unlink (struct target_ops *self,
11217                       struct inferior *inf, const char *filename,
11218                       int *remote_errno)
11219 {
11220   struct remote_state *rs = get_remote_state ();
11221   char *p = rs->buf;
11222   int left = get_remote_packet_size () - 1;
11223
11224   if (remote_hostio_set_filesystem (inf, remote_errno) != 0)
11225     return -1;
11226
11227   remote_buffer_add_string (&p, &left, "vFile:unlink:");
11228
11229   remote_buffer_add_bytes (&p, &left, (const gdb_byte *) filename,
11230                            strlen (filename));
11231
11232   return remote_hostio_send_command (p - rs->buf, PACKET_vFile_unlink,
11233                                      remote_errno, NULL, NULL);
11234 }
11235
11236 /* Implementation of to_fileio_readlink.  */
11237
11238 static char *
11239 remote_hostio_readlink (struct target_ops *self,
11240                         struct inferior *inf, const char *filename,
11241                         int *remote_errno)
11242 {
11243   struct remote_state *rs = get_remote_state ();
11244   char *p = rs->buf;
11245   char *attachment;
11246   int left = get_remote_packet_size ();
11247   int len, attachment_len;
11248   int read_len;
11249   char *ret;
11250
11251   if (remote_hostio_set_filesystem (inf, remote_errno) != 0)
11252     return NULL;
11253
11254   remote_buffer_add_string (&p, &left, "vFile:readlink:");
11255
11256   remote_buffer_add_bytes (&p, &left, (const gdb_byte *) filename,
11257                            strlen (filename));
11258
11259   len = remote_hostio_send_command (p - rs->buf, PACKET_vFile_readlink,
11260                                     remote_errno, &attachment,
11261                                     &attachment_len);
11262
11263   if (len < 0)
11264     return NULL;
11265
11266   ret = (char *) xmalloc (len + 1);
11267
11268   read_len = remote_unescape_input ((gdb_byte *) attachment, attachment_len,
11269                                     (gdb_byte *) ret, len);
11270   if (read_len != len)
11271     error (_("Readlink returned %d, but %d bytes."), len, read_len);
11272
11273   ret[len] = '\0';
11274   return ret;
11275 }
11276
11277 /* Implementation of to_fileio_fstat.  */
11278
11279 static int
11280 remote_hostio_fstat (struct target_ops *self,
11281                      int fd, struct stat *st,
11282                      int *remote_errno)
11283 {
11284   struct remote_state *rs = get_remote_state ();
11285   char *p = rs->buf;
11286   int left = get_remote_packet_size ();
11287   int attachment_len, ret;
11288   char *attachment;
11289   struct fio_stat fst;
11290   int read_len;
11291
11292   remote_buffer_add_string (&p, &left, "vFile:fstat:");
11293
11294   remote_buffer_add_int (&p, &left, fd);
11295
11296   ret = remote_hostio_send_command (p - rs->buf, PACKET_vFile_fstat,
11297                                     remote_errno, &attachment,
11298                                     &attachment_len);
11299   if (ret < 0)
11300     {
11301       if (*remote_errno != FILEIO_ENOSYS)
11302         return ret;
11303
11304       /* Strictly we should return -1, ENOSYS here, but when
11305          "set sysroot remote:" was implemented in August 2008
11306          BFD's need for a stat function was sidestepped with
11307          this hack.  This was not remedied until March 2015
11308          so we retain the previous behavior to avoid breaking
11309          compatibility.
11310
11311          Note that the memset is a March 2015 addition; older
11312          GDBs set st_size *and nothing else* so the structure
11313          would have garbage in all other fields.  This might
11314          break something but retaining the previous behavior
11315          here would be just too wrong.  */
11316
11317       memset (st, 0, sizeof (struct stat));
11318       st->st_size = INT_MAX;
11319       return 0;
11320     }
11321
11322   read_len = remote_unescape_input ((gdb_byte *) attachment, attachment_len,
11323                                     (gdb_byte *) &fst, sizeof (fst));
11324
11325   if (read_len != ret)
11326     error (_("vFile:fstat returned %d, but %d bytes."), ret, read_len);
11327
11328   if (read_len != sizeof (fst))
11329     error (_("vFile:fstat returned %d bytes, but expecting %d."),
11330            read_len, (int) sizeof (fst));
11331
11332   remote_fileio_to_host_stat (&fst, st);
11333
11334   return 0;
11335 }
11336
11337 /* Implementation of to_filesystem_is_local.  */
11338
11339 static int
11340 remote_filesystem_is_local (struct target_ops *self)
11341 {
11342   /* Valgrind GDB presents itself as a remote target but works
11343      on the local filesystem: it does not implement remote get
11344      and users are not expected to set a sysroot.  To handle
11345      this case we treat the remote filesystem as local if the
11346      sysroot is exactly TARGET_SYSROOT_PREFIX and if the stub
11347      does not support vFile:open.  */
11348   if (strcmp (gdb_sysroot, TARGET_SYSROOT_PREFIX) == 0)
11349     {
11350       enum packet_support ps = packet_support (PACKET_vFile_open);
11351
11352       if (ps == PACKET_SUPPORT_UNKNOWN)
11353         {
11354           int fd, remote_errno;
11355
11356           /* Try opening a file to probe support.  The supplied
11357              filename is irrelevant, we only care about whether
11358              the stub recognizes the packet or not.  */
11359           fd = remote_hostio_open (self, NULL, "just probing",
11360                                    FILEIO_O_RDONLY, 0700, 0,
11361                                    &remote_errno);
11362
11363           if (fd >= 0)
11364             remote_hostio_close (self, fd, &remote_errno);
11365
11366           ps = packet_support (PACKET_vFile_open);
11367         }
11368
11369       if (ps == PACKET_DISABLE)
11370         {
11371           static int warning_issued = 0;
11372
11373           if (!warning_issued)
11374             {
11375               warning (_("remote target does not support file"
11376                          " transfer, attempting to access files"
11377                          " from local filesystem."));
11378               warning_issued = 1;
11379             }
11380
11381           return 1;
11382         }
11383     }
11384
11385   return 0;
11386 }
11387
11388 static int
11389 remote_fileio_errno_to_host (int errnum)
11390 {
11391   switch (errnum)
11392     {
11393       case FILEIO_EPERM:
11394         return EPERM;
11395       case FILEIO_ENOENT:
11396         return ENOENT;
11397       case FILEIO_EINTR:
11398         return EINTR;
11399       case FILEIO_EIO:
11400         return EIO;
11401       case FILEIO_EBADF:
11402         return EBADF;
11403       case FILEIO_EACCES:
11404         return EACCES;
11405       case FILEIO_EFAULT:
11406         return EFAULT;
11407       case FILEIO_EBUSY:
11408         return EBUSY;
11409       case FILEIO_EEXIST:
11410         return EEXIST;
11411       case FILEIO_ENODEV:
11412         return ENODEV;
11413       case FILEIO_ENOTDIR:
11414         return ENOTDIR;
11415       case FILEIO_EISDIR:
11416         return EISDIR;
11417       case FILEIO_EINVAL:
11418         return EINVAL;
11419       case FILEIO_ENFILE:
11420         return ENFILE;
11421       case FILEIO_EMFILE:
11422         return EMFILE;
11423       case FILEIO_EFBIG:
11424         return EFBIG;
11425       case FILEIO_ENOSPC:
11426         return ENOSPC;
11427       case FILEIO_ESPIPE:
11428         return ESPIPE;
11429       case FILEIO_EROFS:
11430         return EROFS;
11431       case FILEIO_ENOSYS:
11432         return ENOSYS;
11433       case FILEIO_ENAMETOOLONG:
11434         return ENAMETOOLONG;
11435     }
11436   return -1;
11437 }
11438
11439 static char *
11440 remote_hostio_error (int errnum)
11441 {
11442   int host_error = remote_fileio_errno_to_host (errnum);
11443
11444   if (host_error == -1)
11445     error (_("Unknown remote I/O error %d"), errnum);
11446   else
11447     error (_("Remote I/O error: %s"), safe_strerror (host_error));
11448 }
11449
11450 static void
11451 remote_hostio_close_cleanup (void *opaque)
11452 {
11453   int fd = *(int *) opaque;
11454   int remote_errno;
11455
11456   remote_hostio_close (find_target_at (process_stratum), fd, &remote_errno);
11457 }
11458
11459 void
11460 remote_file_put (const char *local_file, const char *remote_file, int from_tty)
11461 {
11462   struct cleanup *back_to, *close_cleanup;
11463   int retcode, fd, remote_errno, bytes, io_size;
11464   FILE *file;
11465   gdb_byte *buffer;
11466   int bytes_in_buffer;
11467   int saw_eof;
11468   ULONGEST offset;
11469   struct remote_state *rs = get_remote_state ();
11470
11471   if (!rs->remote_desc)
11472     error (_("command can only be used with remote target"));
11473
11474   file = gdb_fopen_cloexec (local_file, "rb");
11475   if (file == NULL)
11476     perror_with_name (local_file);
11477   back_to = make_cleanup_fclose (file);
11478
11479   fd = remote_hostio_open (find_target_at (process_stratum), NULL,
11480                            remote_file, (FILEIO_O_WRONLY | FILEIO_O_CREAT
11481                                          | FILEIO_O_TRUNC),
11482                            0700, 0, &remote_errno);
11483   if (fd == -1)
11484     remote_hostio_error (remote_errno);
11485
11486   /* Send up to this many bytes at once.  They won't all fit in the
11487      remote packet limit, so we'll transfer slightly fewer.  */
11488   io_size = get_remote_packet_size ();
11489   buffer = (gdb_byte *) xmalloc (io_size);
11490   make_cleanup (xfree, buffer);
11491
11492   close_cleanup = make_cleanup (remote_hostio_close_cleanup, &fd);
11493
11494   bytes_in_buffer = 0;
11495   saw_eof = 0;
11496   offset = 0;
11497   while (bytes_in_buffer || !saw_eof)
11498     {
11499       if (!saw_eof)
11500         {
11501           bytes = fread (buffer + bytes_in_buffer, 1,
11502                          io_size - bytes_in_buffer,
11503                          file);
11504           if (bytes == 0)
11505             {
11506               if (ferror (file))
11507                 error (_("Error reading %s."), local_file);
11508               else
11509                 {
11510                   /* EOF.  Unless there is something still in the
11511                      buffer from the last iteration, we are done.  */
11512                   saw_eof = 1;
11513                   if (bytes_in_buffer == 0)
11514                     break;
11515                 }
11516             }
11517         }
11518       else
11519         bytes = 0;
11520
11521       bytes += bytes_in_buffer;
11522       bytes_in_buffer = 0;
11523
11524       retcode = remote_hostio_pwrite (find_target_at (process_stratum),
11525                                       fd, buffer, bytes,
11526                                       offset, &remote_errno);
11527
11528       if (retcode < 0)
11529         remote_hostio_error (remote_errno);
11530       else if (retcode == 0)
11531         error (_("Remote write of %d bytes returned 0!"), bytes);
11532       else if (retcode < bytes)
11533         {
11534           /* Short write.  Save the rest of the read data for the next
11535              write.  */
11536           bytes_in_buffer = bytes - retcode;
11537           memmove (buffer, buffer + retcode, bytes_in_buffer);
11538         }
11539
11540       offset += retcode;
11541     }
11542
11543   discard_cleanups (close_cleanup);
11544   if (remote_hostio_close (find_target_at (process_stratum), fd, &remote_errno))
11545     remote_hostio_error (remote_errno);
11546
11547   if (from_tty)
11548     printf_filtered (_("Successfully sent file \"%s\".\n"), local_file);
11549   do_cleanups (back_to);
11550 }
11551
11552 void
11553 remote_file_get (const char *remote_file, const char *local_file, int from_tty)
11554 {
11555   struct cleanup *back_to, *close_cleanup;
11556   int fd, remote_errno, bytes, io_size;
11557   FILE *file;
11558   gdb_byte *buffer;
11559   ULONGEST offset;
11560   struct remote_state *rs = get_remote_state ();
11561
11562   if (!rs->remote_desc)
11563     error (_("command can only be used with remote target"));
11564
11565   fd = remote_hostio_open (find_target_at (process_stratum), NULL,
11566                            remote_file, FILEIO_O_RDONLY, 0, 0,
11567                            &remote_errno);
11568   if (fd == -1)
11569     remote_hostio_error (remote_errno);
11570
11571   file = gdb_fopen_cloexec (local_file, "wb");
11572   if (file == NULL)
11573     perror_with_name (local_file);
11574   back_to = make_cleanup_fclose (file);
11575
11576   /* Send up to this many bytes at once.  They won't all fit in the
11577      remote packet limit, so we'll transfer slightly fewer.  */
11578   io_size = get_remote_packet_size ();
11579   buffer = (gdb_byte *) xmalloc (io_size);
11580   make_cleanup (xfree, buffer);
11581
11582   close_cleanup = make_cleanup (remote_hostio_close_cleanup, &fd);
11583
11584   offset = 0;
11585   while (1)
11586     {
11587       bytes = remote_hostio_pread (find_target_at (process_stratum),
11588                                    fd, buffer, io_size, offset, &remote_errno);
11589       if (bytes == 0)
11590         /* Success, but no bytes, means end-of-file.  */
11591         break;
11592       if (bytes == -1)
11593         remote_hostio_error (remote_errno);
11594
11595       offset += bytes;
11596
11597       bytes = fwrite (buffer, 1, bytes, file);
11598       if (bytes == 0)
11599         perror_with_name (local_file);
11600     }
11601
11602   discard_cleanups (close_cleanup);
11603   if (remote_hostio_close (find_target_at (process_stratum), fd, &remote_errno))
11604     remote_hostio_error (remote_errno);
11605
11606   if (from_tty)
11607     printf_filtered (_("Successfully fetched file \"%s\".\n"), remote_file);
11608   do_cleanups (back_to);
11609 }
11610
11611 void
11612 remote_file_delete (const char *remote_file, int from_tty)
11613 {
11614   int retcode, remote_errno;
11615   struct remote_state *rs = get_remote_state ();
11616
11617   if (!rs->remote_desc)
11618     error (_("command can only be used with remote target"));
11619
11620   retcode = remote_hostio_unlink (find_target_at (process_stratum),
11621                                   NULL, remote_file, &remote_errno);
11622   if (retcode == -1)
11623     remote_hostio_error (remote_errno);
11624
11625   if (from_tty)
11626     printf_filtered (_("Successfully deleted file \"%s\".\n"), remote_file);
11627 }
11628
11629 static void
11630 remote_put_command (char *args, int from_tty)
11631 {
11632   struct cleanup *back_to;
11633   char **argv;
11634
11635   if (args == NULL)
11636     error_no_arg (_("file to put"));
11637
11638   argv = gdb_buildargv (args);
11639   back_to = make_cleanup_freeargv (argv);
11640   if (argv[0] == NULL || argv[1] == NULL || argv[2] != NULL)
11641     error (_("Invalid parameters to remote put"));
11642
11643   remote_file_put (argv[0], argv[1], from_tty);
11644
11645   do_cleanups (back_to);
11646 }
11647
11648 static void
11649 remote_get_command (char *args, int from_tty)
11650 {
11651   struct cleanup *back_to;
11652   char **argv;
11653
11654   if (args == NULL)
11655     error_no_arg (_("file to get"));
11656
11657   argv = gdb_buildargv (args);
11658   back_to = make_cleanup_freeargv (argv);
11659   if (argv[0] == NULL || argv[1] == NULL || argv[2] != NULL)
11660     error (_("Invalid parameters to remote get"));
11661
11662   remote_file_get (argv[0], argv[1], from_tty);
11663
11664   do_cleanups (back_to);
11665 }
11666
11667 static void
11668 remote_delete_command (char *args, int from_tty)
11669 {
11670   struct cleanup *back_to;
11671   char **argv;
11672
11673   if (args == NULL)
11674     error_no_arg (_("file to delete"));
11675
11676   argv = gdb_buildargv (args);
11677   back_to = make_cleanup_freeargv (argv);
11678   if (argv[0] == NULL || argv[1] != NULL)
11679     error (_("Invalid parameters to remote delete"));
11680
11681   remote_file_delete (argv[0], from_tty);
11682
11683   do_cleanups (back_to);
11684 }
11685
11686 static void
11687 remote_command (char *args, int from_tty)
11688 {
11689   help_list (remote_cmdlist, "remote ", all_commands, gdb_stdout);
11690 }
11691
11692 static int
11693 remote_can_execute_reverse (struct target_ops *self)
11694 {
11695   if (packet_support (PACKET_bs) == PACKET_ENABLE
11696       || packet_support (PACKET_bc) == PACKET_ENABLE)
11697     return 1;
11698   else
11699     return 0;
11700 }
11701
11702 static int
11703 remote_supports_non_stop (struct target_ops *self)
11704 {
11705   return 1;
11706 }
11707
11708 static int
11709 remote_supports_disable_randomization (struct target_ops *self)
11710 {
11711   /* Only supported in extended mode.  */
11712   return 0;
11713 }
11714
11715 static int
11716 remote_supports_multi_process (struct target_ops *self)
11717 {
11718   struct remote_state *rs = get_remote_state ();
11719
11720   return remote_multi_process_p (rs);
11721 }
11722
11723 static int
11724 remote_supports_cond_tracepoints (void)
11725 {
11726   return packet_support (PACKET_ConditionalTracepoints) == PACKET_ENABLE;
11727 }
11728
11729 static int
11730 remote_supports_cond_breakpoints (struct target_ops *self)
11731 {
11732   return packet_support (PACKET_ConditionalBreakpoints) == PACKET_ENABLE;
11733 }
11734
11735 static int
11736 remote_supports_fast_tracepoints (void)
11737 {
11738   return packet_support (PACKET_FastTracepoints) == PACKET_ENABLE;
11739 }
11740
11741 static int
11742 remote_supports_static_tracepoints (void)
11743 {
11744   return packet_support (PACKET_StaticTracepoints) == PACKET_ENABLE;
11745 }
11746
11747 static int
11748 remote_supports_install_in_trace (void)
11749 {
11750   return packet_support (PACKET_InstallInTrace) == PACKET_ENABLE;
11751 }
11752
11753 static int
11754 remote_supports_enable_disable_tracepoint (struct target_ops *self)
11755 {
11756   return (packet_support (PACKET_EnableDisableTracepoints_feature)
11757           == PACKET_ENABLE);
11758 }
11759
11760 static int
11761 remote_supports_string_tracing (struct target_ops *self)
11762 {
11763   return packet_support (PACKET_tracenz_feature) == PACKET_ENABLE;
11764 }
11765
11766 static int
11767 remote_can_run_breakpoint_commands (struct target_ops *self)
11768 {
11769   return packet_support (PACKET_BreakpointCommands) == PACKET_ENABLE;
11770 }
11771
11772 static void
11773 remote_trace_init (struct target_ops *self)
11774 {
11775   putpkt ("QTinit");
11776   remote_get_noisy_reply (&target_buf, &target_buf_size);
11777   if (strcmp (target_buf, "OK") != 0)
11778     error (_("Target does not support this command."));
11779 }
11780
11781 static void free_actions_list (char **actions_list);
11782 static void free_actions_list_cleanup_wrapper (void *);
11783 static void
11784 free_actions_list_cleanup_wrapper (void *al)
11785 {
11786   free_actions_list ((char **) al);
11787 }
11788
11789 static void
11790 free_actions_list (char **actions_list)
11791 {
11792   int ndx;
11793
11794   if (actions_list == 0)
11795     return;
11796
11797   for (ndx = 0; actions_list[ndx]; ndx++)
11798     xfree (actions_list[ndx]);
11799
11800   xfree (actions_list);
11801 }
11802
11803 /* Recursive routine to walk through command list including loops, and
11804    download packets for each command.  */
11805
11806 static void
11807 remote_download_command_source (int num, ULONGEST addr,
11808                                 struct command_line *cmds)
11809 {
11810   struct remote_state *rs = get_remote_state ();
11811   struct command_line *cmd;
11812
11813   for (cmd = cmds; cmd; cmd = cmd->next)
11814     {
11815       QUIT;     /* Allow user to bail out with ^C.  */
11816       strcpy (rs->buf, "QTDPsrc:");
11817       encode_source_string (num, addr, "cmd", cmd->line,
11818                             rs->buf + strlen (rs->buf),
11819                             rs->buf_size - strlen (rs->buf));
11820       putpkt (rs->buf);
11821       remote_get_noisy_reply (&target_buf, &target_buf_size);
11822       if (strcmp (target_buf, "OK"))
11823         warning (_("Target does not support source download."));
11824
11825       if (cmd->control_type == while_control
11826           || cmd->control_type == while_stepping_control)
11827         {
11828           remote_download_command_source (num, addr, *cmd->body_list);
11829
11830           QUIT; /* Allow user to bail out with ^C.  */
11831           strcpy (rs->buf, "QTDPsrc:");
11832           encode_source_string (num, addr, "cmd", "end",
11833                                 rs->buf + strlen (rs->buf),
11834                                 rs->buf_size - strlen (rs->buf));
11835           putpkt (rs->buf);
11836           remote_get_noisy_reply (&target_buf, &target_buf_size);
11837           if (strcmp (target_buf, "OK"))
11838             warning (_("Target does not support source download."));
11839         }
11840     }
11841 }
11842
11843 static void
11844 remote_download_tracepoint (struct target_ops *self, struct bp_location *loc)
11845 {
11846 #define BUF_SIZE 2048
11847
11848   CORE_ADDR tpaddr;
11849   char addrbuf[40];
11850   char buf[BUF_SIZE];
11851   char **tdp_actions;
11852   char **stepping_actions;
11853   int ndx;
11854   struct cleanup *old_chain = NULL;
11855   struct agent_expr *aexpr;
11856   struct cleanup *aexpr_chain = NULL;
11857   char *pkt;
11858   struct breakpoint *b = loc->owner;
11859   struct tracepoint *t = (struct tracepoint *) b;
11860
11861   encode_actions_rsp (loc, &tdp_actions, &stepping_actions);
11862   old_chain = make_cleanup (free_actions_list_cleanup_wrapper,
11863                             tdp_actions);
11864   (void) make_cleanup (free_actions_list_cleanup_wrapper,
11865                        stepping_actions);
11866
11867   tpaddr = loc->address;
11868   sprintf_vma (addrbuf, tpaddr);
11869   xsnprintf (buf, BUF_SIZE, "QTDP:%x:%s:%c:%lx:%x", b->number,
11870              addrbuf, /* address */
11871              (b->enable_state == bp_enabled ? 'E' : 'D'),
11872              t->step_count, t->pass_count);
11873   /* Fast tracepoints are mostly handled by the target, but we can
11874      tell the target how big of an instruction block should be moved
11875      around.  */
11876   if (b->type == bp_fast_tracepoint)
11877     {
11878       /* Only test for support at download time; we may not know
11879          target capabilities at definition time.  */
11880       if (remote_supports_fast_tracepoints ())
11881         {
11882           if (gdbarch_fast_tracepoint_valid_at (loc->gdbarch, tpaddr,
11883                                                 NULL))
11884             xsnprintf (buf + strlen (buf), BUF_SIZE - strlen (buf), ":F%x",
11885                        gdb_insn_length (loc->gdbarch, tpaddr));
11886           else
11887             /* If it passed validation at definition but fails now,
11888                something is very wrong.  */
11889             internal_error (__FILE__, __LINE__,
11890                             _("Fast tracepoint not "
11891                               "valid during download"));
11892         }
11893       else
11894         /* Fast tracepoints are functionally identical to regular
11895            tracepoints, so don't take lack of support as a reason to
11896            give up on the trace run.  */
11897         warning (_("Target does not support fast tracepoints, "
11898                    "downloading %d as regular tracepoint"), b->number);
11899     }
11900   else if (b->type == bp_static_tracepoint)
11901     {
11902       /* Only test for support at download time; we may not know
11903          target capabilities at definition time.  */
11904       if (remote_supports_static_tracepoints ())
11905         {
11906           struct static_tracepoint_marker marker;
11907
11908           if (target_static_tracepoint_marker_at (tpaddr, &marker))
11909             strcat (buf, ":S");
11910           else
11911             error (_("Static tracepoint not valid during download"));
11912         }
11913       else
11914         /* Fast tracepoints are functionally identical to regular
11915            tracepoints, so don't take lack of support as a reason
11916            to give up on the trace run.  */
11917         error (_("Target does not support static tracepoints"));
11918     }
11919   /* If the tracepoint has a conditional, make it into an agent
11920      expression and append to the definition.  */
11921   if (loc->cond)
11922     {
11923       /* Only test support at download time, we may not know target
11924          capabilities at definition time.  */
11925       if (remote_supports_cond_tracepoints ())
11926         {
11927           aexpr = gen_eval_for_expr (tpaddr, loc->cond);
11928           aexpr_chain = make_cleanup_free_agent_expr (aexpr);
11929           xsnprintf (buf + strlen (buf), BUF_SIZE - strlen (buf), ":X%x,",
11930                      aexpr->len);
11931           pkt = buf + strlen (buf);
11932           for (ndx = 0; ndx < aexpr->len; ++ndx)
11933             pkt = pack_hex_byte (pkt, aexpr->buf[ndx]);
11934           *pkt = '\0';
11935           do_cleanups (aexpr_chain);
11936         }
11937       else
11938         warning (_("Target does not support conditional tracepoints, "
11939                    "ignoring tp %d cond"), b->number);
11940     }
11941
11942   if (b->commands || *default_collect)
11943     strcat (buf, "-");
11944   putpkt (buf);
11945   remote_get_noisy_reply (&target_buf, &target_buf_size);
11946   if (strcmp (target_buf, "OK"))
11947     error (_("Target does not support tracepoints."));
11948
11949   /* do_single_steps (t); */
11950   if (tdp_actions)
11951     {
11952       for (ndx = 0; tdp_actions[ndx]; ndx++)
11953         {
11954           QUIT; /* Allow user to bail out with ^C.  */
11955           xsnprintf (buf, BUF_SIZE, "QTDP:-%x:%s:%s%c",
11956                      b->number, addrbuf, /* address */
11957                      tdp_actions[ndx],
11958                      ((tdp_actions[ndx + 1] || stepping_actions)
11959                       ? '-' : 0));
11960           putpkt (buf);
11961           remote_get_noisy_reply (&target_buf,
11962                                   &target_buf_size);
11963           if (strcmp (target_buf, "OK"))
11964             error (_("Error on target while setting tracepoints."));
11965         }
11966     }
11967   if (stepping_actions)
11968     {
11969       for (ndx = 0; stepping_actions[ndx]; ndx++)
11970         {
11971           QUIT; /* Allow user to bail out with ^C.  */
11972           xsnprintf (buf, BUF_SIZE, "QTDP:-%x:%s:%s%s%s",
11973                      b->number, addrbuf, /* address */
11974                      ((ndx == 0) ? "S" : ""),
11975                      stepping_actions[ndx],
11976                      (stepping_actions[ndx + 1] ? "-" : ""));
11977           putpkt (buf);
11978           remote_get_noisy_reply (&target_buf,
11979                                   &target_buf_size);
11980           if (strcmp (target_buf, "OK"))
11981             error (_("Error on target while setting tracepoints."));
11982         }
11983     }
11984
11985   if (packet_support (PACKET_TracepointSource) == PACKET_ENABLE)
11986     {
11987       if (b->location != NULL)
11988         {
11989           strcpy (buf, "QTDPsrc:");
11990           encode_source_string (b->number, loc->address, "at",
11991                                 event_location_to_string (b->location),
11992                                 buf + strlen (buf), 2048 - strlen (buf));
11993           putpkt (buf);
11994           remote_get_noisy_reply (&target_buf, &target_buf_size);
11995           if (strcmp (target_buf, "OK"))
11996             warning (_("Target does not support source download."));
11997         }
11998       if (b->cond_string)
11999         {
12000           strcpy (buf, "QTDPsrc:");
12001           encode_source_string (b->number, loc->address,
12002                                 "cond", b->cond_string, buf + strlen (buf),
12003                                 2048 - strlen (buf));
12004           putpkt (buf);
12005           remote_get_noisy_reply (&target_buf, &target_buf_size);
12006           if (strcmp (target_buf, "OK"))
12007             warning (_("Target does not support source download."));
12008         }
12009       remote_download_command_source (b->number, loc->address,
12010                                       breakpoint_commands (b));
12011     }
12012
12013   do_cleanups (old_chain);
12014 }
12015
12016 static int
12017 remote_can_download_tracepoint (struct target_ops *self)
12018 {
12019   struct remote_state *rs = get_remote_state ();
12020   struct trace_status *ts;
12021   int status;
12022
12023   /* Don't try to install tracepoints until we've relocated our
12024      symbols, and fetched and merged the target's tracepoint list with
12025      ours.  */
12026   if (rs->starting_up)
12027     return 0;
12028
12029   ts = current_trace_status ();
12030   status = remote_get_trace_status (self, ts);
12031
12032   if (status == -1 || !ts->running_known || !ts->running)
12033     return 0;
12034
12035   /* If we are in a tracing experiment, but remote stub doesn't support
12036      installing tracepoint in trace, we have to return.  */
12037   if (!remote_supports_install_in_trace ())
12038     return 0;
12039
12040   return 1;
12041 }
12042
12043
12044 static void
12045 remote_download_trace_state_variable (struct target_ops *self,
12046                                       struct trace_state_variable *tsv)
12047 {
12048   struct remote_state *rs = get_remote_state ();
12049   char *p;
12050
12051   xsnprintf (rs->buf, get_remote_packet_size (), "QTDV:%x:%s:%x:",
12052              tsv->number, phex ((ULONGEST) tsv->initial_value, 8),
12053              tsv->builtin);
12054   p = rs->buf + strlen (rs->buf);
12055   if ((p - rs->buf) + strlen (tsv->name) * 2 >= get_remote_packet_size ())
12056     error (_("Trace state variable name too long for tsv definition packet"));
12057   p += 2 * bin2hex ((gdb_byte *) (tsv->name), p, strlen (tsv->name));
12058   *p++ = '\0';
12059   putpkt (rs->buf);
12060   remote_get_noisy_reply (&target_buf, &target_buf_size);
12061   if (*target_buf == '\0')
12062     error (_("Target does not support this command."));
12063   if (strcmp (target_buf, "OK") != 0)
12064     error (_("Error on target while downloading trace state variable."));
12065 }
12066
12067 static void
12068 remote_enable_tracepoint (struct target_ops *self,
12069                           struct bp_location *location)
12070 {
12071   struct remote_state *rs = get_remote_state ();
12072   char addr_buf[40];
12073
12074   sprintf_vma (addr_buf, location->address);
12075   xsnprintf (rs->buf, get_remote_packet_size (), "QTEnable:%x:%s",
12076              location->owner->number, addr_buf);
12077   putpkt (rs->buf);
12078   remote_get_noisy_reply (&rs->buf, &rs->buf_size);
12079   if (*rs->buf == '\0')
12080     error (_("Target does not support enabling tracepoints while a trace run is ongoing."));
12081   if (strcmp (rs->buf, "OK") != 0)
12082     error (_("Error on target while enabling tracepoint."));
12083 }
12084
12085 static void
12086 remote_disable_tracepoint (struct target_ops *self,
12087                            struct bp_location *location)
12088 {
12089   struct remote_state *rs = get_remote_state ();
12090   char addr_buf[40];
12091
12092   sprintf_vma (addr_buf, location->address);
12093   xsnprintf (rs->buf, get_remote_packet_size (), "QTDisable:%x:%s",
12094              location->owner->number, addr_buf);
12095   putpkt (rs->buf);
12096   remote_get_noisy_reply (&rs->buf, &rs->buf_size);
12097   if (*rs->buf == '\0')
12098     error (_("Target does not support disabling tracepoints while a trace run is ongoing."));
12099   if (strcmp (rs->buf, "OK") != 0)
12100     error (_("Error on target while disabling tracepoint."));
12101 }
12102
12103 static void
12104 remote_trace_set_readonly_regions (struct target_ops *self)
12105 {
12106   asection *s;
12107   bfd *abfd = NULL;
12108   bfd_size_type size;
12109   bfd_vma vma;
12110   int anysecs = 0;
12111   int offset = 0;
12112
12113   if (!exec_bfd)
12114     return;                     /* No information to give.  */
12115
12116   strcpy (target_buf, "QTro");
12117   offset = strlen (target_buf);
12118   for (s = exec_bfd->sections; s; s = s->next)
12119     {
12120       char tmp1[40], tmp2[40];
12121       int sec_length;
12122
12123       if ((s->flags & SEC_LOAD) == 0 ||
12124       /*  (s->flags & SEC_CODE) == 0 || */
12125           (s->flags & SEC_READONLY) == 0)
12126         continue;
12127
12128       anysecs = 1;
12129       vma = bfd_get_section_vma (abfd, s);
12130       size = bfd_get_section_size (s);
12131       sprintf_vma (tmp1, vma);
12132       sprintf_vma (tmp2, vma + size);
12133       sec_length = 1 + strlen (tmp1) + 1 + strlen (tmp2);
12134       if (offset + sec_length + 1 > target_buf_size)
12135         {
12136           if (packet_support (PACKET_qXfer_traceframe_info) != PACKET_ENABLE)
12137             warning (_("\
12138 Too many sections for read-only sections definition packet."));
12139           break;
12140         }
12141       xsnprintf (target_buf + offset, target_buf_size - offset, ":%s,%s",
12142                  tmp1, tmp2);
12143       offset += sec_length;
12144     }
12145   if (anysecs)
12146     {
12147       putpkt (target_buf);
12148       getpkt (&target_buf, &target_buf_size, 0);
12149     }
12150 }
12151
12152 static void
12153 remote_trace_start (struct target_ops *self)
12154 {
12155   putpkt ("QTStart");
12156   remote_get_noisy_reply (&target_buf, &target_buf_size);
12157   if (*target_buf == '\0')
12158     error (_("Target does not support this command."));
12159   if (strcmp (target_buf, "OK") != 0)
12160     error (_("Bogus reply from target: %s"), target_buf);
12161 }
12162
12163 static int
12164 remote_get_trace_status (struct target_ops *self, struct trace_status *ts)
12165 {
12166   /* Initialize it just to avoid a GCC false warning.  */
12167   char *p = NULL;
12168   /* FIXME we need to get register block size some other way.  */
12169   extern int trace_regblock_size;
12170   enum packet_result result;
12171
12172   if (packet_support (PACKET_qTStatus) == PACKET_DISABLE)
12173     return -1;
12174
12175   trace_regblock_size = get_remote_arch_state ()->sizeof_g_packet;
12176
12177   putpkt ("qTStatus");
12178
12179   TRY
12180     {
12181       p = remote_get_noisy_reply (&target_buf, &target_buf_size);
12182     }
12183   CATCH (ex, RETURN_MASK_ERROR)
12184     {
12185       if (ex.error != TARGET_CLOSE_ERROR)
12186         {
12187           exception_fprintf (gdb_stderr, ex, "qTStatus: ");
12188           return -1;
12189         }
12190       throw_exception (ex);
12191     }
12192   END_CATCH
12193
12194   result = packet_ok (p, &remote_protocol_packets[PACKET_qTStatus]);
12195
12196   /* If the remote target doesn't do tracing, flag it.  */
12197   if (result == PACKET_UNKNOWN)
12198     return -1;
12199
12200   /* We're working with a live target.  */
12201   ts->filename = NULL;
12202
12203   if (*p++ != 'T')
12204     error (_("Bogus trace status reply from target: %s"), target_buf);
12205
12206   /* Function 'parse_trace_status' sets default value of each field of
12207      'ts' at first, so we don't have to do it here.  */
12208   parse_trace_status (p, ts);
12209
12210   return ts->running;
12211 }
12212
12213 static void
12214 remote_get_tracepoint_status (struct target_ops *self, struct breakpoint *bp,
12215                               struct uploaded_tp *utp)
12216 {
12217   struct remote_state *rs = get_remote_state ();
12218   char *reply;
12219   struct bp_location *loc;
12220   struct tracepoint *tp = (struct tracepoint *) bp;
12221   size_t size = get_remote_packet_size ();
12222
12223   if (tp)
12224     {
12225       tp->base.hit_count = 0;
12226       tp->traceframe_usage = 0;
12227       for (loc = tp->base.loc; loc; loc = loc->next)
12228         {
12229           /* If the tracepoint was never downloaded, don't go asking for
12230              any status.  */
12231           if (tp->number_on_target == 0)
12232             continue;
12233           xsnprintf (rs->buf, size, "qTP:%x:%s", tp->number_on_target,
12234                      phex_nz (loc->address, 0));
12235           putpkt (rs->buf);
12236           reply = remote_get_noisy_reply (&target_buf, &target_buf_size);
12237           if (reply && *reply)
12238             {
12239               if (*reply == 'V')
12240                 parse_tracepoint_status (reply + 1, bp, utp);
12241             }
12242         }
12243     }
12244   else if (utp)
12245     {
12246       utp->hit_count = 0;
12247       utp->traceframe_usage = 0;
12248       xsnprintf (rs->buf, size, "qTP:%x:%s", utp->number,
12249                  phex_nz (utp->addr, 0));
12250       putpkt (rs->buf);
12251       reply = remote_get_noisy_reply (&target_buf, &target_buf_size);
12252       if (reply && *reply)
12253         {
12254           if (*reply == 'V')
12255             parse_tracepoint_status (reply + 1, bp, utp);
12256         }
12257     }
12258 }
12259
12260 static void
12261 remote_trace_stop (struct target_ops *self)
12262 {
12263   putpkt ("QTStop");
12264   remote_get_noisy_reply (&target_buf, &target_buf_size);
12265   if (*target_buf == '\0')
12266     error (_("Target does not support this command."));
12267   if (strcmp (target_buf, "OK") != 0)
12268     error (_("Bogus reply from target: %s"), target_buf);
12269 }
12270
12271 static int
12272 remote_trace_find (struct target_ops *self,
12273                    enum trace_find_type type, int num,
12274                    CORE_ADDR addr1, CORE_ADDR addr2,
12275                    int *tpp)
12276 {
12277   struct remote_state *rs = get_remote_state ();
12278   char *endbuf = rs->buf + get_remote_packet_size ();
12279   char *p, *reply;
12280   int target_frameno = -1, target_tracept = -1;
12281
12282   /* Lookups other than by absolute frame number depend on the current
12283      trace selected, so make sure it is correct on the remote end
12284      first.  */
12285   if (type != tfind_number)
12286     set_remote_traceframe ();
12287
12288   p = rs->buf;
12289   strcpy (p, "QTFrame:");
12290   p = strchr (p, '\0');
12291   switch (type)
12292     {
12293     case tfind_number:
12294       xsnprintf (p, endbuf - p, "%x", num);
12295       break;
12296     case tfind_pc:
12297       xsnprintf (p, endbuf - p, "pc:%s", phex_nz (addr1, 0));
12298       break;
12299     case tfind_tp:
12300       xsnprintf (p, endbuf - p, "tdp:%x", num);
12301       break;
12302     case tfind_range:
12303       xsnprintf (p, endbuf - p, "range:%s:%s", phex_nz (addr1, 0),
12304                  phex_nz (addr2, 0));
12305       break;
12306     case tfind_outside:
12307       xsnprintf (p, endbuf - p, "outside:%s:%s", phex_nz (addr1, 0),
12308                  phex_nz (addr2, 0));
12309       break;
12310     default:
12311       error (_("Unknown trace find type %d"), type);
12312     }
12313
12314   putpkt (rs->buf);
12315   reply = remote_get_noisy_reply (&(rs->buf), &rs->buf_size);
12316   if (*reply == '\0')
12317     error (_("Target does not support this command."));
12318
12319   while (reply && *reply)
12320     switch (*reply)
12321       {
12322       case 'F':
12323         p = ++reply;
12324         target_frameno = (int) strtol (p, &reply, 16);
12325         if (reply == p)
12326           error (_("Unable to parse trace frame number"));
12327         /* Don't update our remote traceframe number cache on failure
12328            to select a remote traceframe.  */
12329         if (target_frameno == -1)
12330           return -1;
12331         break;
12332       case 'T':
12333         p = ++reply;
12334         target_tracept = (int) strtol (p, &reply, 16);
12335         if (reply == p)
12336           error (_("Unable to parse tracepoint number"));
12337         break;
12338       case 'O':         /* "OK"? */
12339         if (reply[1] == 'K' && reply[2] == '\0')
12340           reply += 2;
12341         else
12342           error (_("Bogus reply from target: %s"), reply);
12343         break;
12344       default:
12345         error (_("Bogus reply from target: %s"), reply);
12346       }
12347   if (tpp)
12348     *tpp = target_tracept;
12349
12350   rs->remote_traceframe_number = target_frameno;
12351   return target_frameno;
12352 }
12353
12354 static int
12355 remote_get_trace_state_variable_value (struct target_ops *self,
12356                                        int tsvnum, LONGEST *val)
12357 {
12358   struct remote_state *rs = get_remote_state ();
12359   char *reply;
12360   ULONGEST uval;
12361
12362   set_remote_traceframe ();
12363
12364   xsnprintf (rs->buf, get_remote_packet_size (), "qTV:%x", tsvnum);
12365   putpkt (rs->buf);
12366   reply = remote_get_noisy_reply (&target_buf, &target_buf_size);
12367   if (reply && *reply)
12368     {
12369       if (*reply == 'V')
12370         {
12371           unpack_varlen_hex (reply + 1, &uval);
12372           *val = (LONGEST) uval;
12373           return 1;
12374         }
12375     }
12376   return 0;
12377 }
12378
12379 static int
12380 remote_save_trace_data (struct target_ops *self, const char *filename)
12381 {
12382   struct remote_state *rs = get_remote_state ();
12383   char *p, *reply;
12384
12385   p = rs->buf;
12386   strcpy (p, "QTSave:");
12387   p += strlen (p);
12388   if ((p - rs->buf) + strlen (filename) * 2 >= get_remote_packet_size ())
12389     error (_("Remote file name too long for trace save packet"));
12390   p += 2 * bin2hex ((gdb_byte *) filename, p, strlen (filename));
12391   *p++ = '\0';
12392   putpkt (rs->buf);
12393   reply = remote_get_noisy_reply (&target_buf, &target_buf_size);
12394   if (*reply == '\0')
12395     error (_("Target does not support this command."));
12396   if (strcmp (reply, "OK") != 0)
12397     error (_("Bogus reply from target: %s"), reply);
12398   return 0;
12399 }
12400
12401 /* This is basically a memory transfer, but needs to be its own packet
12402    because we don't know how the target actually organizes its trace
12403    memory, plus we want to be able to ask for as much as possible, but
12404    not be unhappy if we don't get as much as we ask for.  */
12405
12406 static LONGEST
12407 remote_get_raw_trace_data (struct target_ops *self,
12408                            gdb_byte *buf, ULONGEST offset, LONGEST len)
12409 {
12410   struct remote_state *rs = get_remote_state ();
12411   char *reply;
12412   char *p;
12413   int rslt;
12414
12415   p = rs->buf;
12416   strcpy (p, "qTBuffer:");
12417   p += strlen (p);
12418   p += hexnumstr (p, offset);
12419   *p++ = ',';
12420   p += hexnumstr (p, len);
12421   *p++ = '\0';
12422
12423   putpkt (rs->buf);
12424   reply = remote_get_noisy_reply (&target_buf, &target_buf_size);
12425   if (reply && *reply)
12426     {
12427       /* 'l' by itself means we're at the end of the buffer and
12428          there is nothing more to get.  */
12429       if (*reply == 'l')
12430         return 0;
12431
12432       /* Convert the reply into binary.  Limit the number of bytes to
12433          convert according to our passed-in buffer size, rather than
12434          what was returned in the packet; if the target is
12435          unexpectedly generous and gives us a bigger reply than we
12436          asked for, we don't want to crash.  */
12437       rslt = hex2bin (target_buf, buf, len);
12438       return rslt;
12439     }
12440
12441   /* Something went wrong, flag as an error.  */
12442   return -1;
12443 }
12444
12445 static void
12446 remote_set_disconnected_tracing (struct target_ops *self, int val)
12447 {
12448   struct remote_state *rs = get_remote_state ();
12449
12450   if (packet_support (PACKET_DisconnectedTracing_feature) == PACKET_ENABLE)
12451     {
12452       char *reply;
12453
12454       xsnprintf (rs->buf, get_remote_packet_size (), "QTDisconnected:%x", val);
12455       putpkt (rs->buf);
12456       reply = remote_get_noisy_reply (&target_buf, &target_buf_size);
12457       if (*reply == '\0')
12458         error (_("Target does not support this command."));
12459       if (strcmp (reply, "OK") != 0)
12460         error (_("Bogus reply from target: %s"), reply);
12461     }
12462   else if (val)
12463     warning (_("Target does not support disconnected tracing."));
12464 }
12465
12466 static int
12467 remote_core_of_thread (struct target_ops *ops, ptid_t ptid)
12468 {
12469   struct thread_info *info = find_thread_ptid (ptid);
12470
12471   if (info && info->priv)
12472     return info->priv->core;
12473   return -1;
12474 }
12475
12476 static void
12477 remote_set_circular_trace_buffer (struct target_ops *self, int val)
12478 {
12479   struct remote_state *rs = get_remote_state ();
12480   char *reply;
12481
12482   xsnprintf (rs->buf, get_remote_packet_size (), "QTBuffer:circular:%x", val);
12483   putpkt (rs->buf);
12484   reply = remote_get_noisy_reply (&target_buf, &target_buf_size);
12485   if (*reply == '\0')
12486     error (_("Target does not support this command."));
12487   if (strcmp (reply, "OK") != 0)
12488     error (_("Bogus reply from target: %s"), reply);
12489 }
12490
12491 static struct traceframe_info *
12492 remote_traceframe_info (struct target_ops *self)
12493 {
12494   char *text;
12495
12496   text = target_read_stralloc (&current_target,
12497                                TARGET_OBJECT_TRACEFRAME_INFO, NULL);
12498   if (text != NULL)
12499     {
12500       struct traceframe_info *info;
12501       struct cleanup *back_to = make_cleanup (xfree, text);
12502
12503       info = parse_traceframe_info (text);
12504       do_cleanups (back_to);
12505       return info;
12506     }
12507
12508   return NULL;
12509 }
12510
12511 /* Handle the qTMinFTPILen packet.  Returns the minimum length of
12512    instruction on which a fast tracepoint may be placed.  Returns -1
12513    if the packet is not supported, and 0 if the minimum instruction
12514    length is unknown.  */
12515
12516 static int
12517 remote_get_min_fast_tracepoint_insn_len (struct target_ops *self)
12518 {
12519   struct remote_state *rs = get_remote_state ();
12520   char *reply;
12521
12522   /* If we're not debugging a process yet, the IPA can't be
12523      loaded.  */
12524   if (!target_has_execution)
12525     return 0;
12526
12527   /* Make sure the remote is pointing at the right process.  */
12528   set_general_process ();
12529
12530   xsnprintf (rs->buf, get_remote_packet_size (), "qTMinFTPILen");
12531   putpkt (rs->buf);
12532   reply = remote_get_noisy_reply (&target_buf, &target_buf_size);
12533   if (*reply == '\0')
12534     return -1;
12535   else
12536     {
12537       ULONGEST min_insn_len;
12538
12539       unpack_varlen_hex (reply, &min_insn_len);
12540
12541       return (int) min_insn_len;
12542     }
12543 }
12544
12545 static void
12546 remote_set_trace_buffer_size (struct target_ops *self, LONGEST val)
12547 {
12548   if (packet_support (PACKET_QTBuffer_size) != PACKET_DISABLE)
12549     {
12550       struct remote_state *rs = get_remote_state ();
12551       char *buf = rs->buf;
12552       char *endbuf = rs->buf + get_remote_packet_size ();
12553       enum packet_result result;
12554
12555       gdb_assert (val >= 0 || val == -1);
12556       buf += xsnprintf (buf, endbuf - buf, "QTBuffer:size:");
12557       /* Send -1 as literal "-1" to avoid host size dependency.  */
12558       if (val < 0)
12559         {
12560           *buf++ = '-';
12561           buf += hexnumstr (buf, (ULONGEST) -val);
12562         }
12563       else
12564         buf += hexnumstr (buf, (ULONGEST) val);
12565
12566       putpkt (rs->buf);
12567       remote_get_noisy_reply (&rs->buf, &rs->buf_size);
12568       result = packet_ok (rs->buf,
12569                   &remote_protocol_packets[PACKET_QTBuffer_size]);
12570
12571       if (result != PACKET_OK)
12572         warning (_("Bogus reply from target: %s"), rs->buf);
12573     }
12574 }
12575
12576 static int
12577 remote_set_trace_notes (struct target_ops *self,
12578                         const char *user, const char *notes,
12579                         const char *stop_notes)
12580 {
12581   struct remote_state *rs = get_remote_state ();
12582   char *reply;
12583   char *buf = rs->buf;
12584   char *endbuf = rs->buf + get_remote_packet_size ();
12585   int nbytes;
12586
12587   buf += xsnprintf (buf, endbuf - buf, "QTNotes:");
12588   if (user)
12589     {
12590       buf += xsnprintf (buf, endbuf - buf, "user:");
12591       nbytes = bin2hex ((gdb_byte *) user, buf, strlen (user));
12592       buf += 2 * nbytes;
12593       *buf++ = ';';
12594     }
12595   if (notes)
12596     {
12597       buf += xsnprintf (buf, endbuf - buf, "notes:");
12598       nbytes = bin2hex ((gdb_byte *) notes, buf, strlen (notes));
12599       buf += 2 * nbytes;
12600       *buf++ = ';';
12601     }
12602   if (stop_notes)
12603     {
12604       buf += xsnprintf (buf, endbuf - buf, "tstop:");
12605       nbytes = bin2hex ((gdb_byte *) stop_notes, buf, strlen (stop_notes));
12606       buf += 2 * nbytes;
12607       *buf++ = ';';
12608     }
12609   /* Ensure the buffer is terminated.  */
12610   *buf = '\0';
12611
12612   putpkt (rs->buf);
12613   reply = remote_get_noisy_reply (&target_buf, &target_buf_size);
12614   if (*reply == '\0')
12615     return 0;
12616
12617   if (strcmp (reply, "OK") != 0)
12618     error (_("Bogus reply from target: %s"), reply);
12619
12620   return 1;
12621 }
12622
12623 static int
12624 remote_use_agent (struct target_ops *self, int use)
12625 {
12626   if (packet_support (PACKET_QAgent) != PACKET_DISABLE)
12627     {
12628       struct remote_state *rs = get_remote_state ();
12629
12630       /* If the stub supports QAgent.  */
12631       xsnprintf (rs->buf, get_remote_packet_size (), "QAgent:%d", use);
12632       putpkt (rs->buf);
12633       getpkt (&rs->buf, &rs->buf_size, 0);
12634
12635       if (strcmp (rs->buf, "OK") == 0)
12636         {
12637           use_agent = use;
12638           return 1;
12639         }
12640     }
12641
12642   return 0;
12643 }
12644
12645 static int
12646 remote_can_use_agent (struct target_ops *self)
12647 {
12648   return (packet_support (PACKET_QAgent) != PACKET_DISABLE);
12649 }
12650
12651 struct btrace_target_info
12652 {
12653   /* The ptid of the traced thread.  */
12654   ptid_t ptid;
12655
12656   /* The obtained branch trace configuration.  */
12657   struct btrace_config conf;
12658 };
12659
12660 /* Reset our idea of our target's btrace configuration.  */
12661
12662 static void
12663 remote_btrace_reset (void)
12664 {
12665   struct remote_state *rs = get_remote_state ();
12666
12667   memset (&rs->btrace_config, 0, sizeof (rs->btrace_config));
12668 }
12669
12670 /* Check whether the target supports branch tracing.  */
12671
12672 static int
12673 remote_supports_btrace (struct target_ops *self, enum btrace_format format)
12674 {
12675   if (packet_support (PACKET_Qbtrace_off) != PACKET_ENABLE)
12676     return 0;
12677   if (packet_support (PACKET_qXfer_btrace) != PACKET_ENABLE)
12678     return 0;
12679
12680   switch (format)
12681     {
12682       case BTRACE_FORMAT_NONE:
12683         return 0;
12684
12685       case BTRACE_FORMAT_BTS:
12686         return (packet_support (PACKET_Qbtrace_bts) == PACKET_ENABLE);
12687
12688       case BTRACE_FORMAT_PT:
12689         /* The trace is decoded on the host.  Even if our target supports it,
12690            we still need to have libipt to decode the trace.  */
12691 #if defined (HAVE_LIBIPT)
12692         return (packet_support (PACKET_Qbtrace_pt) == PACKET_ENABLE);
12693 #else /* !defined (HAVE_LIBIPT)  */
12694         return 0;
12695 #endif /* !defined (HAVE_LIBIPT)  */
12696     }
12697
12698   internal_error (__FILE__, __LINE__, _("Unknown branch trace format"));
12699 }
12700
12701 /* Synchronize the configuration with the target.  */
12702
12703 static void
12704 btrace_sync_conf (const struct btrace_config *conf)
12705 {
12706   struct packet_config *packet;
12707   struct remote_state *rs;
12708   char *buf, *pos, *endbuf;
12709
12710   rs = get_remote_state ();
12711   buf = rs->buf;
12712   endbuf = buf + get_remote_packet_size ();
12713
12714   packet = &remote_protocol_packets[PACKET_Qbtrace_conf_bts_size];
12715   if (packet_config_support (packet) == PACKET_ENABLE
12716       && conf->bts.size != rs->btrace_config.bts.size)
12717     {
12718       pos = buf;
12719       pos += xsnprintf (pos, endbuf - pos, "%s=0x%x", packet->name,
12720                         conf->bts.size);
12721
12722       putpkt (buf);
12723       getpkt (&buf, &rs->buf_size, 0);
12724
12725       if (packet_ok (buf, packet) == PACKET_ERROR)
12726         {
12727           if (buf[0] == 'E' && buf[1] == '.')
12728             error (_("Failed to configure the BTS buffer size: %s"), buf + 2);
12729           else
12730             error (_("Failed to configure the BTS buffer size."));
12731         }
12732
12733       rs->btrace_config.bts.size = conf->bts.size;
12734     }
12735
12736   packet = &remote_protocol_packets[PACKET_Qbtrace_conf_pt_size];
12737   if (packet_config_support (packet) == PACKET_ENABLE
12738       && conf->pt.size != rs->btrace_config.pt.size)
12739     {
12740       pos = buf;
12741       pos += xsnprintf (pos, endbuf - pos, "%s=0x%x", packet->name,
12742                         conf->pt.size);
12743
12744       putpkt (buf);
12745       getpkt (&buf, &rs->buf_size, 0);
12746
12747       if (packet_ok (buf, packet) == PACKET_ERROR)
12748         {
12749           if (buf[0] == 'E' && buf[1] == '.')
12750             error (_("Failed to configure the trace buffer size: %s"), buf + 2);
12751           else
12752             error (_("Failed to configure the trace buffer size."));
12753         }
12754
12755       rs->btrace_config.pt.size = conf->pt.size;
12756     }
12757 }
12758
12759 /* Read the current thread's btrace configuration from the target and
12760    store it into CONF.  */
12761
12762 static void
12763 btrace_read_config (struct btrace_config *conf)
12764 {
12765   char *xml;
12766
12767   xml = target_read_stralloc (&current_target,
12768                               TARGET_OBJECT_BTRACE_CONF, "");
12769   if (xml != NULL)
12770     {
12771       struct cleanup *cleanup;
12772
12773       cleanup = make_cleanup (xfree, xml);
12774       parse_xml_btrace_conf (conf, xml);
12775       do_cleanups (cleanup);
12776     }
12777 }
12778
12779 /* Enable branch tracing.  */
12780
12781 static struct btrace_target_info *
12782 remote_enable_btrace (struct target_ops *self, ptid_t ptid,
12783                       const struct btrace_config *conf)
12784 {
12785   struct btrace_target_info *tinfo = NULL;
12786   struct packet_config *packet = NULL;
12787   struct remote_state *rs = get_remote_state ();
12788   char *buf = rs->buf;
12789   char *endbuf = rs->buf + get_remote_packet_size ();
12790
12791   switch (conf->format)
12792     {
12793       case BTRACE_FORMAT_BTS:
12794         packet = &remote_protocol_packets[PACKET_Qbtrace_bts];
12795         break;
12796
12797       case BTRACE_FORMAT_PT:
12798         packet = &remote_protocol_packets[PACKET_Qbtrace_pt];
12799         break;
12800     }
12801
12802   if (packet == NULL || packet_config_support (packet) != PACKET_ENABLE)
12803     error (_("Target does not support branch tracing."));
12804
12805   btrace_sync_conf (conf);
12806
12807   set_general_thread (ptid);
12808
12809   buf += xsnprintf (buf, endbuf - buf, "%s", packet->name);
12810   putpkt (rs->buf);
12811   getpkt (&rs->buf, &rs->buf_size, 0);
12812
12813   if (packet_ok (rs->buf, packet) == PACKET_ERROR)
12814     {
12815       if (rs->buf[0] == 'E' && rs->buf[1] == '.')
12816         error (_("Could not enable branch tracing for %s: %s"),
12817                target_pid_to_str (ptid), rs->buf + 2);
12818       else
12819         error (_("Could not enable branch tracing for %s."),
12820                target_pid_to_str (ptid));
12821     }
12822
12823   tinfo = XCNEW (struct btrace_target_info);
12824   tinfo->ptid = ptid;
12825
12826   /* If we fail to read the configuration, we lose some information, but the
12827      tracing itself is not impacted.  */
12828   TRY
12829     {
12830       btrace_read_config (&tinfo->conf);
12831     }
12832   CATCH (err, RETURN_MASK_ERROR)
12833     {
12834       if (err.message != NULL)
12835         warning ("%s", err.message);
12836     }
12837   END_CATCH
12838
12839   return tinfo;
12840 }
12841
12842 /* Disable branch tracing.  */
12843
12844 static void
12845 remote_disable_btrace (struct target_ops *self,
12846                        struct btrace_target_info *tinfo)
12847 {
12848   struct packet_config *packet = &remote_protocol_packets[PACKET_Qbtrace_off];
12849   struct remote_state *rs = get_remote_state ();
12850   char *buf = rs->buf;
12851   char *endbuf = rs->buf + get_remote_packet_size ();
12852
12853   if (packet_config_support (packet) != PACKET_ENABLE)
12854     error (_("Target does not support branch tracing."));
12855
12856   set_general_thread (tinfo->ptid);
12857
12858   buf += xsnprintf (buf, endbuf - buf, "%s", packet->name);
12859   putpkt (rs->buf);
12860   getpkt (&rs->buf, &rs->buf_size, 0);
12861
12862   if (packet_ok (rs->buf, packet) == PACKET_ERROR)
12863     {
12864       if (rs->buf[0] == 'E' && rs->buf[1] == '.')
12865         error (_("Could not disable branch tracing for %s: %s"),
12866                target_pid_to_str (tinfo->ptid), rs->buf + 2);
12867       else
12868         error (_("Could not disable branch tracing for %s."),
12869                target_pid_to_str (tinfo->ptid));
12870     }
12871
12872   xfree (tinfo);
12873 }
12874
12875 /* Teardown branch tracing.  */
12876
12877 static void
12878 remote_teardown_btrace (struct target_ops *self,
12879                         struct btrace_target_info *tinfo)
12880 {
12881   /* We must not talk to the target during teardown.  */
12882   xfree (tinfo);
12883 }
12884
12885 /* Read the branch trace.  */
12886
12887 static enum btrace_error
12888 remote_read_btrace (struct target_ops *self,
12889                     struct btrace_data *btrace,
12890                     struct btrace_target_info *tinfo,
12891                     enum btrace_read_type type)
12892 {
12893   struct packet_config *packet = &remote_protocol_packets[PACKET_qXfer_btrace];
12894   struct cleanup *cleanup;
12895   const char *annex;
12896   char *xml;
12897
12898   if (packet_config_support (packet) != PACKET_ENABLE)
12899     error (_("Target does not support branch tracing."));
12900
12901 #if !defined(HAVE_LIBEXPAT)
12902   error (_("Cannot process branch tracing result. XML parsing not supported."));
12903 #endif
12904
12905   switch (type)
12906     {
12907     case BTRACE_READ_ALL:
12908       annex = "all";
12909       break;
12910     case BTRACE_READ_NEW:
12911       annex = "new";
12912       break;
12913     case BTRACE_READ_DELTA:
12914       annex = "delta";
12915       break;
12916     default:
12917       internal_error (__FILE__, __LINE__,
12918                       _("Bad branch tracing read type: %u."),
12919                       (unsigned int) type);
12920     }
12921
12922   xml = target_read_stralloc (&current_target,
12923                               TARGET_OBJECT_BTRACE, annex);
12924   if (xml == NULL)
12925     return BTRACE_ERR_UNKNOWN;
12926
12927   cleanup = make_cleanup (xfree, xml);
12928   parse_xml_btrace (btrace, xml);
12929   do_cleanups (cleanup);
12930
12931   return BTRACE_ERR_NONE;
12932 }
12933
12934 static const struct btrace_config *
12935 remote_btrace_conf (struct target_ops *self,
12936                     const struct btrace_target_info *tinfo)
12937 {
12938   return &tinfo->conf;
12939 }
12940
12941 static int
12942 remote_augmented_libraries_svr4_read (struct target_ops *self)
12943 {
12944   return (packet_support (PACKET_augmented_libraries_svr4_read_feature)
12945           == PACKET_ENABLE);
12946 }
12947
12948 /* Implementation of to_load.  */
12949
12950 static void
12951 remote_load (struct target_ops *self, const char *name, int from_tty)
12952 {
12953   generic_load (name, from_tty);
12954 }
12955
12956 /* Accepts an integer PID; returns a string representing a file that
12957    can be opened on the remote side to get the symbols for the child
12958    process.  Returns NULL if the operation is not supported.  */
12959
12960 static char *
12961 remote_pid_to_exec_file (struct target_ops *self, int pid)
12962 {
12963   static char *filename = NULL;
12964   struct inferior *inf;
12965   char *annex = NULL;
12966
12967   if (packet_support (PACKET_qXfer_exec_file) != PACKET_ENABLE)
12968     return NULL;
12969
12970   if (filename != NULL)
12971     xfree (filename);
12972
12973   inf = find_inferior_pid (pid);
12974   if (inf == NULL)
12975     internal_error (__FILE__, __LINE__,
12976                     _("not currently attached to process %d"), pid);
12977
12978   if (!inf->fake_pid_p)
12979     {
12980       const int annex_size = 9;
12981
12982       annex = (char *) alloca (annex_size);
12983       xsnprintf (annex, annex_size, "%x", pid);
12984     }
12985
12986   filename = target_read_stralloc (&current_target,
12987                                    TARGET_OBJECT_EXEC_FILE, annex);
12988
12989   return filename;
12990 }
12991
12992 /* Implement the to_can_do_single_step target_ops method.  */
12993
12994 static int
12995 remote_can_do_single_step (struct target_ops *ops)
12996 {
12997   /* We can only tell whether target supports single step or not by
12998      supported s and S vCont actions if the stub supports vContSupported
12999      feature.  If the stub doesn't support vContSupported feature,
13000      we have conservatively to think target doesn't supports single
13001      step.  */
13002   if (packet_support (PACKET_vContSupported) == PACKET_ENABLE)
13003     {
13004       struct remote_state *rs = get_remote_state ();
13005
13006       if (packet_support (PACKET_vCont) == PACKET_SUPPORT_UNKNOWN)
13007         remote_vcont_probe (rs);
13008
13009       return rs->supports_vCont.s && rs->supports_vCont.S;
13010     }
13011   else
13012     return 0;
13013 }
13014
13015 /* Implementation of the to_execution_direction method for the remote
13016    target.  */
13017
13018 static enum exec_direction_kind
13019 remote_execution_direction (struct target_ops *self)
13020 {
13021   struct remote_state *rs = get_remote_state ();
13022
13023   return rs->last_resume_exec_dir;
13024 }
13025
13026 static void
13027 init_remote_ops (void)
13028 {
13029   remote_ops.to_shortname = "remote";
13030   remote_ops.to_longname = "Remote serial target in gdb-specific protocol";
13031   remote_ops.to_doc =
13032     "Use a remote computer via a serial line, using a gdb-specific protocol.\n\
13033 Specify the serial device it is connected to\n\
13034 (e.g. /dev/ttyS0, /dev/ttya, COM1, etc.).";
13035   remote_ops.to_open = remote_open;
13036   remote_ops.to_close = remote_close;
13037   remote_ops.to_detach = remote_detach;
13038   remote_ops.to_disconnect = remote_disconnect;
13039   remote_ops.to_resume = remote_resume;
13040   remote_ops.to_wait = remote_wait;
13041   remote_ops.to_fetch_registers = remote_fetch_registers;
13042   remote_ops.to_store_registers = remote_store_registers;
13043   remote_ops.to_prepare_to_store = remote_prepare_to_store;
13044   remote_ops.to_files_info = remote_files_info;
13045   remote_ops.to_insert_breakpoint = remote_insert_breakpoint;
13046   remote_ops.to_remove_breakpoint = remote_remove_breakpoint;
13047   remote_ops.to_stopped_by_sw_breakpoint = remote_stopped_by_sw_breakpoint;
13048   remote_ops.to_supports_stopped_by_sw_breakpoint = remote_supports_stopped_by_sw_breakpoint;
13049   remote_ops.to_stopped_by_hw_breakpoint = remote_stopped_by_hw_breakpoint;
13050   remote_ops.to_supports_stopped_by_hw_breakpoint = remote_supports_stopped_by_hw_breakpoint;
13051   remote_ops.to_stopped_by_watchpoint = remote_stopped_by_watchpoint;
13052   remote_ops.to_stopped_data_address = remote_stopped_data_address;
13053   remote_ops.to_watchpoint_addr_within_range =
13054     remote_watchpoint_addr_within_range;
13055   remote_ops.to_can_use_hw_breakpoint = remote_check_watch_resources;
13056   remote_ops.to_insert_hw_breakpoint = remote_insert_hw_breakpoint;
13057   remote_ops.to_remove_hw_breakpoint = remote_remove_hw_breakpoint;
13058   remote_ops.to_region_ok_for_hw_watchpoint
13059      = remote_region_ok_for_hw_watchpoint;
13060   remote_ops.to_insert_watchpoint = remote_insert_watchpoint;
13061   remote_ops.to_remove_watchpoint = remote_remove_watchpoint;
13062   remote_ops.to_kill = remote_kill;
13063   remote_ops.to_load = remote_load;
13064   remote_ops.to_mourn_inferior = remote_mourn;
13065   remote_ops.to_pass_signals = remote_pass_signals;
13066   remote_ops.to_set_syscall_catchpoint = remote_set_syscall_catchpoint;
13067   remote_ops.to_program_signals = remote_program_signals;
13068   remote_ops.to_thread_alive = remote_thread_alive;
13069   remote_ops.to_thread_name = remote_thread_name;
13070   remote_ops.to_update_thread_list = remote_update_thread_list;
13071   remote_ops.to_pid_to_str = remote_pid_to_str;
13072   remote_ops.to_extra_thread_info = remote_threads_extra_info;
13073   remote_ops.to_get_ada_task_ptid = remote_get_ada_task_ptid;
13074   remote_ops.to_stop = remote_stop;
13075   remote_ops.to_interrupt = remote_interrupt;
13076   remote_ops.to_pass_ctrlc = remote_pass_ctrlc;
13077   remote_ops.to_xfer_partial = remote_xfer_partial;
13078   remote_ops.to_rcmd = remote_rcmd;
13079   remote_ops.to_pid_to_exec_file = remote_pid_to_exec_file;
13080   remote_ops.to_log_command = serial_log_command;
13081   remote_ops.to_get_thread_local_address = remote_get_thread_local_address;
13082   remote_ops.to_stratum = process_stratum;
13083   remote_ops.to_has_all_memory = default_child_has_all_memory;
13084   remote_ops.to_has_memory = default_child_has_memory;
13085   remote_ops.to_has_stack = default_child_has_stack;
13086   remote_ops.to_has_registers = default_child_has_registers;
13087   remote_ops.to_has_execution = default_child_has_execution;
13088   remote_ops.to_has_thread_control = tc_schedlock;    /* can lock scheduler */
13089   remote_ops.to_can_execute_reverse = remote_can_execute_reverse;
13090   remote_ops.to_magic = OPS_MAGIC;
13091   remote_ops.to_memory_map = remote_memory_map;
13092   remote_ops.to_flash_erase = remote_flash_erase;
13093   remote_ops.to_flash_done = remote_flash_done;
13094   remote_ops.to_read_description = remote_read_description;
13095   remote_ops.to_search_memory = remote_search_memory;
13096   remote_ops.to_can_async_p = remote_can_async_p;
13097   remote_ops.to_is_async_p = remote_is_async_p;
13098   remote_ops.to_async = remote_async;
13099   remote_ops.to_thread_events = remote_thread_events;
13100   remote_ops.to_can_do_single_step = remote_can_do_single_step;
13101   remote_ops.to_terminal_inferior = remote_terminal_inferior;
13102   remote_ops.to_terminal_ours = remote_terminal_ours;
13103   remote_ops.to_supports_non_stop = remote_supports_non_stop;
13104   remote_ops.to_supports_multi_process = remote_supports_multi_process;
13105   remote_ops.to_supports_disable_randomization
13106     = remote_supports_disable_randomization;
13107   remote_ops.to_filesystem_is_local = remote_filesystem_is_local;
13108   remote_ops.to_fileio_open = remote_hostio_open;
13109   remote_ops.to_fileio_pwrite = remote_hostio_pwrite;
13110   remote_ops.to_fileio_pread = remote_hostio_pread;
13111   remote_ops.to_fileio_fstat = remote_hostio_fstat;
13112   remote_ops.to_fileio_close = remote_hostio_close;
13113   remote_ops.to_fileio_unlink = remote_hostio_unlink;
13114   remote_ops.to_fileio_readlink = remote_hostio_readlink;
13115   remote_ops.to_supports_enable_disable_tracepoint = remote_supports_enable_disable_tracepoint;
13116   remote_ops.to_supports_string_tracing = remote_supports_string_tracing;
13117   remote_ops.to_supports_evaluation_of_breakpoint_conditions = remote_supports_cond_breakpoints;
13118   remote_ops.to_can_run_breakpoint_commands = remote_can_run_breakpoint_commands;
13119   remote_ops.to_trace_init = remote_trace_init;
13120   remote_ops.to_download_tracepoint = remote_download_tracepoint;
13121   remote_ops.to_can_download_tracepoint = remote_can_download_tracepoint;
13122   remote_ops.to_download_trace_state_variable
13123     = remote_download_trace_state_variable;
13124   remote_ops.to_enable_tracepoint = remote_enable_tracepoint;
13125   remote_ops.to_disable_tracepoint = remote_disable_tracepoint;
13126   remote_ops.to_trace_set_readonly_regions = remote_trace_set_readonly_regions;
13127   remote_ops.to_trace_start = remote_trace_start;
13128   remote_ops.to_get_trace_status = remote_get_trace_status;
13129   remote_ops.to_get_tracepoint_status = remote_get_tracepoint_status;
13130   remote_ops.to_trace_stop = remote_trace_stop;
13131   remote_ops.to_trace_find = remote_trace_find;
13132   remote_ops.to_get_trace_state_variable_value
13133     = remote_get_trace_state_variable_value;
13134   remote_ops.to_save_trace_data = remote_save_trace_data;
13135   remote_ops.to_upload_tracepoints = remote_upload_tracepoints;
13136   remote_ops.to_upload_trace_state_variables
13137     = remote_upload_trace_state_variables;
13138   remote_ops.to_get_raw_trace_data = remote_get_raw_trace_data;
13139   remote_ops.to_get_min_fast_tracepoint_insn_len = remote_get_min_fast_tracepoint_insn_len;
13140   remote_ops.to_set_disconnected_tracing = remote_set_disconnected_tracing;
13141   remote_ops.to_set_circular_trace_buffer = remote_set_circular_trace_buffer;
13142   remote_ops.to_set_trace_buffer_size = remote_set_trace_buffer_size;
13143   remote_ops.to_set_trace_notes = remote_set_trace_notes;
13144   remote_ops.to_core_of_thread = remote_core_of_thread;
13145   remote_ops.to_verify_memory = remote_verify_memory;
13146   remote_ops.to_get_tib_address = remote_get_tib_address;
13147   remote_ops.to_set_permissions = remote_set_permissions;
13148   remote_ops.to_static_tracepoint_marker_at
13149     = remote_static_tracepoint_marker_at;
13150   remote_ops.to_static_tracepoint_markers_by_strid
13151     = remote_static_tracepoint_markers_by_strid;
13152   remote_ops.to_traceframe_info = remote_traceframe_info;
13153   remote_ops.to_use_agent = remote_use_agent;
13154   remote_ops.to_can_use_agent = remote_can_use_agent;
13155   remote_ops.to_supports_btrace = remote_supports_btrace;
13156   remote_ops.to_enable_btrace = remote_enable_btrace;
13157   remote_ops.to_disable_btrace = remote_disable_btrace;
13158   remote_ops.to_teardown_btrace = remote_teardown_btrace;
13159   remote_ops.to_read_btrace = remote_read_btrace;
13160   remote_ops.to_btrace_conf = remote_btrace_conf;
13161   remote_ops.to_augmented_libraries_svr4_read =
13162     remote_augmented_libraries_svr4_read;
13163   remote_ops.to_follow_fork = remote_follow_fork;
13164   remote_ops.to_follow_exec = remote_follow_exec;
13165   remote_ops.to_insert_fork_catchpoint = remote_insert_fork_catchpoint;
13166   remote_ops.to_remove_fork_catchpoint = remote_remove_fork_catchpoint;
13167   remote_ops.to_insert_vfork_catchpoint = remote_insert_vfork_catchpoint;
13168   remote_ops.to_remove_vfork_catchpoint = remote_remove_vfork_catchpoint;
13169   remote_ops.to_insert_exec_catchpoint = remote_insert_exec_catchpoint;
13170   remote_ops.to_remove_exec_catchpoint = remote_remove_exec_catchpoint;
13171   remote_ops.to_execution_direction = remote_execution_direction;
13172 }
13173
13174 /* Set up the extended remote vector by making a copy of the standard
13175    remote vector and adding to it.  */
13176
13177 static void
13178 init_extended_remote_ops (void)
13179 {
13180   extended_remote_ops = remote_ops;
13181
13182   extended_remote_ops.to_shortname = "extended-remote";
13183   extended_remote_ops.to_longname =
13184     "Extended remote serial target in gdb-specific protocol";
13185   extended_remote_ops.to_doc =
13186     "Use a remote computer via a serial line, using a gdb-specific protocol.\n\
13187 Specify the serial device it is connected to (e.g. /dev/ttya).";
13188   extended_remote_ops.to_open = extended_remote_open;
13189   extended_remote_ops.to_create_inferior = extended_remote_create_inferior;
13190   extended_remote_ops.to_detach = extended_remote_detach;
13191   extended_remote_ops.to_attach = extended_remote_attach;
13192   extended_remote_ops.to_post_attach = extended_remote_post_attach;
13193   extended_remote_ops.to_supports_disable_randomization
13194     = extended_remote_supports_disable_randomization;
13195 }
13196
13197 static int
13198 remote_can_async_p (struct target_ops *ops)
13199 {
13200   struct remote_state *rs = get_remote_state ();
13201
13202   if (!target_async_permitted)
13203     /* We only enable async when the user specifically asks for it.  */
13204     return 0;
13205
13206   /* We're async whenever the serial device is.  */
13207   return serial_can_async_p (rs->remote_desc);
13208 }
13209
13210 static int
13211 remote_is_async_p (struct target_ops *ops)
13212 {
13213   struct remote_state *rs = get_remote_state ();
13214
13215   if (!target_async_permitted)
13216     /* We only enable async when the user specifically asks for it.  */
13217     return 0;
13218
13219   /* We're async whenever the serial device is.  */
13220   return serial_is_async_p (rs->remote_desc);
13221 }
13222
13223 /* Pass the SERIAL event on and up to the client.  One day this code
13224    will be able to delay notifying the client of an event until the
13225    point where an entire packet has been received.  */
13226
13227 static serial_event_ftype remote_async_serial_handler;
13228
13229 static void
13230 remote_async_serial_handler (struct serial *scb, void *context)
13231 {
13232   /* Don't propogate error information up to the client.  Instead let
13233      the client find out about the error by querying the target.  */
13234   inferior_event_handler (INF_REG_EVENT, NULL);
13235 }
13236
13237 static void
13238 remote_async_inferior_event_handler (gdb_client_data data)
13239 {
13240   inferior_event_handler (INF_REG_EVENT, NULL);
13241 }
13242
13243 static void
13244 remote_async (struct target_ops *ops, int enable)
13245 {
13246   struct remote_state *rs = get_remote_state ();
13247
13248   if (enable)
13249     {
13250       serial_async (rs->remote_desc, remote_async_serial_handler, rs);
13251
13252       /* If there are pending events in the stop reply queue tell the
13253          event loop to process them.  */
13254       if (!QUEUE_is_empty (stop_reply_p, stop_reply_queue))
13255         mark_async_event_handler (remote_async_inferior_event_token);
13256       /* For simplicity, below we clear the pending events token
13257          without remembering whether it is marked, so here we always
13258          mark it.  If there's actually no pending notification to
13259          process, this ends up being a no-op (other than a spurious
13260          event-loop wakeup).  */
13261       if (target_is_non_stop_p ())
13262         mark_async_event_handler (rs->notif_state->get_pending_events_token);
13263     }
13264   else
13265     {
13266       serial_async (rs->remote_desc, NULL, NULL);
13267       /* If the core is disabling async, it doesn't want to be
13268          disturbed with target events.  Clear all async event sources
13269          too.  */
13270       clear_async_event_handler (remote_async_inferior_event_token);
13271       if (target_is_non_stop_p ())
13272         clear_async_event_handler (rs->notif_state->get_pending_events_token);
13273     }
13274 }
13275
13276 /* Implementation of the to_thread_events method.  */
13277
13278 static void
13279 remote_thread_events (struct target_ops *ops, int enable)
13280 {
13281   struct remote_state *rs = get_remote_state ();
13282   size_t size = get_remote_packet_size ();
13283
13284   if (packet_support (PACKET_QThreadEvents) == PACKET_DISABLE)
13285     return;
13286
13287   xsnprintf (rs->buf, size, "QThreadEvents:%x", enable ? 1 : 0);
13288   putpkt (rs->buf);
13289   getpkt (&rs->buf, &rs->buf_size, 0);
13290
13291   switch (packet_ok (rs->buf,
13292                      &remote_protocol_packets[PACKET_QThreadEvents]))
13293     {
13294     case PACKET_OK:
13295       if (strcmp (rs->buf, "OK") != 0)
13296         error (_("Remote refused setting thread events: %s"), rs->buf);
13297       break;
13298     case PACKET_ERROR:
13299       warning (_("Remote failure reply: %s"), rs->buf);
13300       break;
13301     case PACKET_UNKNOWN:
13302       break;
13303     }
13304 }
13305
13306 static void
13307 set_remote_cmd (char *args, int from_tty)
13308 {
13309   help_list (remote_set_cmdlist, "set remote ", all_commands, gdb_stdout);
13310 }
13311
13312 static void
13313 show_remote_cmd (char *args, int from_tty)
13314 {
13315   /* We can't just use cmd_show_list here, because we want to skip
13316      the redundant "show remote Z-packet" and the legacy aliases.  */
13317   struct cleanup *showlist_chain;
13318   struct cmd_list_element *list = remote_show_cmdlist;
13319   struct ui_out *uiout = current_uiout;
13320
13321   showlist_chain = make_cleanup_ui_out_tuple_begin_end (uiout, "showlist");
13322   for (; list != NULL; list = list->next)
13323     if (strcmp (list->name, "Z-packet") == 0)
13324       continue;
13325     else if (list->type == not_set_cmd)
13326       /* Alias commands are exactly like the original, except they
13327          don't have the normal type.  */
13328       continue;
13329     else
13330       {
13331         struct cleanup *option_chain
13332           = make_cleanup_ui_out_tuple_begin_end (uiout, "option");
13333
13334         ui_out_field_string (uiout, "name", list->name);
13335         ui_out_text (uiout, ":  ");
13336         if (list->type == show_cmd)
13337           do_show_command ((char *) NULL, from_tty, list);
13338         else
13339           cmd_func (list, NULL, from_tty);
13340         /* Close the tuple.  */
13341         do_cleanups (option_chain);
13342       }
13343
13344   /* Close the tuple.  */
13345   do_cleanups (showlist_chain);
13346 }
13347
13348
13349 /* Function to be called whenever a new objfile (shlib) is detected.  */
13350 static void
13351 remote_new_objfile (struct objfile *objfile)
13352 {
13353   struct remote_state *rs = get_remote_state ();
13354
13355   if (rs->remote_desc != 0)             /* Have a remote connection.  */
13356     remote_check_symbols ();
13357 }
13358
13359 /* Pull all the tracepoints defined on the target and create local
13360    data structures representing them.  We don't want to create real
13361    tracepoints yet, we don't want to mess up the user's existing
13362    collection.  */
13363   
13364 static int
13365 remote_upload_tracepoints (struct target_ops *self, struct uploaded_tp **utpp)
13366 {
13367   struct remote_state *rs = get_remote_state ();
13368   char *p;
13369
13370   /* Ask for a first packet of tracepoint definition.  */
13371   putpkt ("qTfP");
13372   getpkt (&rs->buf, &rs->buf_size, 0);
13373   p = rs->buf;
13374   while (*p && *p != 'l')
13375     {
13376       parse_tracepoint_definition (p, utpp);
13377       /* Ask for another packet of tracepoint definition.  */
13378       putpkt ("qTsP");
13379       getpkt (&rs->buf, &rs->buf_size, 0);
13380       p = rs->buf;
13381     }
13382   return 0;
13383 }
13384
13385 static int
13386 remote_upload_trace_state_variables (struct target_ops *self,
13387                                      struct uploaded_tsv **utsvp)
13388 {
13389   struct remote_state *rs = get_remote_state ();
13390   char *p;
13391
13392   /* Ask for a first packet of variable definition.  */
13393   putpkt ("qTfV");
13394   getpkt (&rs->buf, &rs->buf_size, 0);
13395   p = rs->buf;
13396   while (*p && *p != 'l')
13397     {
13398       parse_tsv_definition (p, utsvp);
13399       /* Ask for another packet of variable definition.  */
13400       putpkt ("qTsV");
13401       getpkt (&rs->buf, &rs->buf_size, 0);
13402       p = rs->buf;
13403     }
13404   return 0;
13405 }
13406
13407 /* The "set/show range-stepping" show hook.  */
13408
13409 static void
13410 show_range_stepping (struct ui_file *file, int from_tty,
13411                      struct cmd_list_element *c,
13412                      const char *value)
13413 {
13414   fprintf_filtered (file,
13415                     _("Debugger's willingness to use range stepping "
13416                       "is %s.\n"), value);
13417 }
13418
13419 /* The "set/show range-stepping" set hook.  */
13420
13421 static void
13422 set_range_stepping (char *ignore_args, int from_tty,
13423                     struct cmd_list_element *c)
13424 {
13425   struct remote_state *rs = get_remote_state ();
13426
13427   /* Whene enabling, check whether range stepping is actually
13428      supported by the target, and warn if not.  */
13429   if (use_range_stepping)
13430     {
13431       if (rs->remote_desc != NULL)
13432         {
13433           if (packet_support (PACKET_vCont) == PACKET_SUPPORT_UNKNOWN)
13434             remote_vcont_probe (rs);
13435
13436           if (packet_support (PACKET_vCont) == PACKET_ENABLE
13437               && rs->supports_vCont.r)
13438             return;
13439         }
13440
13441       warning (_("Range stepping is not supported by the current target"));
13442     }
13443 }
13444
13445 void
13446 _initialize_remote (void)
13447 {
13448   struct cmd_list_element *cmd;
13449   const char *cmd_name;
13450
13451   /* architecture specific data */
13452   remote_gdbarch_data_handle =
13453     gdbarch_data_register_post_init (init_remote_state);
13454   remote_g_packet_data_handle =
13455     gdbarch_data_register_pre_init (remote_g_packet_data_init);
13456
13457   remote_pspace_data
13458     = register_program_space_data_with_cleanup (NULL,
13459                                                 remote_pspace_data_cleanup);
13460
13461   /* Initialize the per-target state.  At the moment there is only one
13462      of these, not one per target.  Only one target is active at a
13463      time.  */
13464   remote_state = new_remote_state ();
13465
13466   init_remote_ops ();
13467   add_target (&remote_ops);
13468
13469   init_extended_remote_ops ();
13470   add_target (&extended_remote_ops);
13471
13472   /* Hook into new objfile notification.  */
13473   observer_attach_new_objfile (remote_new_objfile);
13474   /* We're no longer interested in notification events of an inferior
13475      when it exits.  */
13476   observer_attach_inferior_exit (discard_pending_stop_replies);
13477
13478 #if 0
13479   init_remote_threadtests ();
13480 #endif
13481
13482   stop_reply_queue = QUEUE_alloc (stop_reply_p, stop_reply_xfree);
13483   /* set/show remote ...  */
13484
13485   add_prefix_cmd ("remote", class_maintenance, set_remote_cmd, _("\
13486 Remote protocol specific variables\n\
13487 Configure various remote-protocol specific variables such as\n\
13488 the packets being used"),
13489                   &remote_set_cmdlist, "set remote ",
13490                   0 /* allow-unknown */, &setlist);
13491   add_prefix_cmd ("remote", class_maintenance, show_remote_cmd, _("\
13492 Remote protocol specific variables\n\
13493 Configure various remote-protocol specific variables such as\n\
13494 the packets being used"),
13495                   &remote_show_cmdlist, "show remote ",
13496                   0 /* allow-unknown */, &showlist);
13497
13498   add_cmd ("compare-sections", class_obscure, compare_sections_command, _("\
13499 Compare section data on target to the exec file.\n\
13500 Argument is a single section name (default: all loaded sections).\n\
13501 To compare only read-only loaded sections, specify the -r option."),
13502            &cmdlist);
13503
13504   add_cmd ("packet", class_maintenance, packet_command, _("\
13505 Send an arbitrary packet to a remote target.\n\
13506    maintenance packet TEXT\n\
13507 If GDB is talking to an inferior via the GDB serial protocol, then\n\
13508 this command sends the string TEXT to the inferior, and displays the\n\
13509 response packet.  GDB supplies the initial `$' character, and the\n\
13510 terminating `#' character and checksum."),
13511            &maintenancelist);
13512
13513   add_setshow_boolean_cmd ("remotebreak", no_class, &remote_break, _("\
13514 Set whether to send break if interrupted."), _("\
13515 Show whether to send break if interrupted."), _("\
13516 If set, a break, instead of a cntrl-c, is sent to the remote target."),
13517                            set_remotebreak, show_remotebreak,
13518                            &setlist, &showlist);
13519   cmd_name = "remotebreak";
13520   cmd = lookup_cmd (&cmd_name, setlist, "", -1, 1);
13521   deprecate_cmd (cmd, "set remote interrupt-sequence");
13522   cmd_name = "remotebreak"; /* needed because lookup_cmd updates the pointer */
13523   cmd = lookup_cmd (&cmd_name, showlist, "", -1, 1);
13524   deprecate_cmd (cmd, "show remote interrupt-sequence");
13525
13526   add_setshow_enum_cmd ("interrupt-sequence", class_support,
13527                         interrupt_sequence_modes, &interrupt_sequence_mode,
13528                         _("\
13529 Set interrupt sequence to remote target."), _("\
13530 Show interrupt sequence to remote target."), _("\
13531 Valid value is \"Ctrl-C\", \"BREAK\" or \"BREAK-g\". The default is \"Ctrl-C\"."),
13532                         NULL, show_interrupt_sequence,
13533                         &remote_set_cmdlist,
13534                         &remote_show_cmdlist);
13535
13536   add_setshow_boolean_cmd ("interrupt-on-connect", class_support,
13537                            &interrupt_on_connect, _("\
13538 Set whether interrupt-sequence is sent to remote target when gdb connects to."), _("            \
13539 Show whether interrupt-sequence is sent to remote target when gdb connects to."), _("           \
13540 If set, interrupt sequence is sent to remote target."),
13541                            NULL, NULL,
13542                            &remote_set_cmdlist, &remote_show_cmdlist);
13543
13544   /* Install commands for configuring memory read/write packets.  */
13545
13546   add_cmd ("remotewritesize", no_class, set_memory_write_packet_size, _("\
13547 Set the maximum number of bytes per memory write packet (deprecated)."),
13548            &setlist);
13549   add_cmd ("remotewritesize", no_class, show_memory_write_packet_size, _("\
13550 Show the maximum number of bytes per memory write packet (deprecated)."),
13551            &showlist);
13552   add_cmd ("memory-write-packet-size", no_class,
13553            set_memory_write_packet_size, _("\
13554 Set the maximum number of bytes per memory-write packet.\n\
13555 Specify the number of bytes in a packet or 0 (zero) for the\n\
13556 default packet size.  The actual limit is further reduced\n\
13557 dependent on the target.  Specify ``fixed'' to disable the\n\
13558 further restriction and ``limit'' to enable that restriction."),
13559            &remote_set_cmdlist);
13560   add_cmd ("memory-read-packet-size", no_class,
13561            set_memory_read_packet_size, _("\
13562 Set the maximum number of bytes per memory-read packet.\n\
13563 Specify the number of bytes in a packet or 0 (zero) for the\n\
13564 default packet size.  The actual limit is further reduced\n\
13565 dependent on the target.  Specify ``fixed'' to disable the\n\
13566 further restriction and ``limit'' to enable that restriction."),
13567            &remote_set_cmdlist);
13568   add_cmd ("memory-write-packet-size", no_class,
13569            show_memory_write_packet_size,
13570            _("Show the maximum number of bytes per memory-write packet."),
13571            &remote_show_cmdlist);
13572   add_cmd ("memory-read-packet-size", no_class,
13573            show_memory_read_packet_size,
13574            _("Show the maximum number of bytes per memory-read packet."),
13575            &remote_show_cmdlist);
13576
13577   add_setshow_zinteger_cmd ("hardware-watchpoint-limit", no_class,
13578                             &remote_hw_watchpoint_limit, _("\
13579 Set the maximum number of target hardware watchpoints."), _("\
13580 Show the maximum number of target hardware watchpoints."), _("\
13581 Specify a negative limit for unlimited."),
13582                             NULL, NULL, /* FIXME: i18n: The maximum
13583                                            number of target hardware
13584                                            watchpoints is %s.  */
13585                             &remote_set_cmdlist, &remote_show_cmdlist);
13586   add_setshow_zinteger_cmd ("hardware-watchpoint-length-limit", no_class,
13587                             &remote_hw_watchpoint_length_limit, _("\
13588 Set the maximum length (in bytes) of a target hardware watchpoint."), _("\
13589 Show the maximum length (in bytes) of a target hardware watchpoint."), _("\
13590 Specify a negative limit for unlimited."),
13591                             NULL, NULL, /* FIXME: i18n: The maximum
13592                                            length (in bytes) of a target
13593                                            hardware watchpoint is %s.  */
13594                             &remote_set_cmdlist, &remote_show_cmdlist);
13595   add_setshow_zinteger_cmd ("hardware-breakpoint-limit", no_class,
13596                             &remote_hw_breakpoint_limit, _("\
13597 Set the maximum number of target hardware breakpoints."), _("\
13598 Show the maximum number of target hardware breakpoints."), _("\
13599 Specify a negative limit for unlimited."),
13600                             NULL, NULL, /* FIXME: i18n: The maximum
13601                                            number of target hardware
13602                                            breakpoints is %s.  */
13603                             &remote_set_cmdlist, &remote_show_cmdlist);
13604
13605   add_setshow_zuinteger_cmd ("remoteaddresssize", class_obscure,
13606                              &remote_address_size, _("\
13607 Set the maximum size of the address (in bits) in a memory packet."), _("\
13608 Show the maximum size of the address (in bits) in a memory packet."), NULL,
13609                              NULL,
13610                              NULL, /* FIXME: i18n: */
13611                              &setlist, &showlist);
13612
13613   init_all_packet_configs ();
13614
13615   add_packet_config_cmd (&remote_protocol_packets[PACKET_X],
13616                          "X", "binary-download", 1);
13617
13618   add_packet_config_cmd (&remote_protocol_packets[PACKET_vCont],
13619                          "vCont", "verbose-resume", 0);
13620
13621   add_packet_config_cmd (&remote_protocol_packets[PACKET_QPassSignals],
13622                          "QPassSignals", "pass-signals", 0);
13623
13624   add_packet_config_cmd (&remote_protocol_packets[PACKET_QCatchSyscalls],
13625                          "QCatchSyscalls", "catch-syscalls", 0);
13626
13627   add_packet_config_cmd (&remote_protocol_packets[PACKET_QProgramSignals],
13628                          "QProgramSignals", "program-signals", 0);
13629
13630   add_packet_config_cmd (&remote_protocol_packets[PACKET_qSymbol],
13631                          "qSymbol", "symbol-lookup", 0);
13632
13633   add_packet_config_cmd (&remote_protocol_packets[PACKET_P],
13634                          "P", "set-register", 1);
13635
13636   add_packet_config_cmd (&remote_protocol_packets[PACKET_p],
13637                          "p", "fetch-register", 1);
13638
13639   add_packet_config_cmd (&remote_protocol_packets[PACKET_Z0],
13640                          "Z0", "software-breakpoint", 0);
13641
13642   add_packet_config_cmd (&remote_protocol_packets[PACKET_Z1],
13643                          "Z1", "hardware-breakpoint", 0);
13644
13645   add_packet_config_cmd (&remote_protocol_packets[PACKET_Z2],
13646                          "Z2", "write-watchpoint", 0);
13647
13648   add_packet_config_cmd (&remote_protocol_packets[PACKET_Z3],
13649                          "Z3", "read-watchpoint", 0);
13650
13651   add_packet_config_cmd (&remote_protocol_packets[PACKET_Z4],
13652                          "Z4", "access-watchpoint", 0);
13653
13654   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_auxv],
13655                          "qXfer:auxv:read", "read-aux-vector", 0);
13656
13657   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_exec_file],
13658                          "qXfer:exec-file:read", "pid-to-exec-file", 0);
13659
13660   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_features],
13661                          "qXfer:features:read", "target-features", 0);
13662
13663   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_libraries],
13664                          "qXfer:libraries:read", "library-info", 0);
13665
13666   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_libraries_svr4],
13667                          "qXfer:libraries-svr4:read", "library-info-svr4", 0);
13668
13669   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_memory_map],
13670                          "qXfer:memory-map:read", "memory-map", 0);
13671
13672   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_spu_read],
13673                          "qXfer:spu:read", "read-spu-object", 0);
13674
13675   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_spu_write],
13676                          "qXfer:spu:write", "write-spu-object", 0);
13677
13678   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_osdata],
13679                         "qXfer:osdata:read", "osdata", 0);
13680
13681   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_threads],
13682                          "qXfer:threads:read", "threads", 0);
13683
13684   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_siginfo_read],
13685                          "qXfer:siginfo:read", "read-siginfo-object", 0);
13686
13687   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_siginfo_write],
13688                          "qXfer:siginfo:write", "write-siginfo-object", 0);
13689
13690   add_packet_config_cmd
13691     (&remote_protocol_packets[PACKET_qXfer_traceframe_info],
13692      "qXfer:traceframe-info:read", "traceframe-info", 0);
13693
13694   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_uib],
13695                          "qXfer:uib:read", "unwind-info-block", 0);
13696
13697   add_packet_config_cmd (&remote_protocol_packets[PACKET_qGetTLSAddr],
13698                          "qGetTLSAddr", "get-thread-local-storage-address",
13699                          0);
13700
13701   add_packet_config_cmd (&remote_protocol_packets[PACKET_qGetTIBAddr],
13702                          "qGetTIBAddr", "get-thread-information-block-address",
13703                          0);
13704
13705   add_packet_config_cmd (&remote_protocol_packets[PACKET_bc],
13706                          "bc", "reverse-continue", 0);
13707
13708   add_packet_config_cmd (&remote_protocol_packets[PACKET_bs],
13709                          "bs", "reverse-step", 0);
13710
13711   add_packet_config_cmd (&remote_protocol_packets[PACKET_qSupported],
13712                          "qSupported", "supported-packets", 0);
13713
13714   add_packet_config_cmd (&remote_protocol_packets[PACKET_qSearch_memory],
13715                          "qSearch:memory", "search-memory", 0);
13716
13717   add_packet_config_cmd (&remote_protocol_packets[PACKET_qTStatus],
13718                          "qTStatus", "trace-status", 0);
13719
13720   add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_setfs],
13721                          "vFile:setfs", "hostio-setfs", 0);
13722
13723   add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_open],
13724                          "vFile:open", "hostio-open", 0);
13725
13726   add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_pread],
13727                          "vFile:pread", "hostio-pread", 0);
13728
13729   add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_pwrite],
13730                          "vFile:pwrite", "hostio-pwrite", 0);
13731
13732   add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_close],
13733                          "vFile:close", "hostio-close", 0);
13734
13735   add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_unlink],
13736                          "vFile:unlink", "hostio-unlink", 0);
13737
13738   add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_readlink],
13739                          "vFile:readlink", "hostio-readlink", 0);
13740
13741   add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_fstat],
13742                          "vFile:fstat", "hostio-fstat", 0);
13743
13744   add_packet_config_cmd (&remote_protocol_packets[PACKET_vAttach],
13745                          "vAttach", "attach", 0);
13746
13747   add_packet_config_cmd (&remote_protocol_packets[PACKET_vRun],
13748                          "vRun", "run", 0);
13749
13750   add_packet_config_cmd (&remote_protocol_packets[PACKET_QStartNoAckMode],
13751                          "QStartNoAckMode", "noack", 0);
13752
13753   add_packet_config_cmd (&remote_protocol_packets[PACKET_vKill],
13754                          "vKill", "kill", 0);
13755
13756   add_packet_config_cmd (&remote_protocol_packets[PACKET_qAttached],
13757                          "qAttached", "query-attached", 0);
13758
13759   add_packet_config_cmd (&remote_protocol_packets[PACKET_ConditionalTracepoints],
13760                          "ConditionalTracepoints",
13761                          "conditional-tracepoints", 0);
13762
13763   add_packet_config_cmd (&remote_protocol_packets[PACKET_ConditionalBreakpoints],
13764                          "ConditionalBreakpoints",
13765                          "conditional-breakpoints", 0);
13766
13767   add_packet_config_cmd (&remote_protocol_packets[PACKET_BreakpointCommands],
13768                          "BreakpointCommands",
13769                          "breakpoint-commands", 0);
13770
13771   add_packet_config_cmd (&remote_protocol_packets[PACKET_FastTracepoints],
13772                          "FastTracepoints", "fast-tracepoints", 0);
13773
13774   add_packet_config_cmd (&remote_protocol_packets[PACKET_TracepointSource],
13775                          "TracepointSource", "TracepointSource", 0);
13776
13777   add_packet_config_cmd (&remote_protocol_packets[PACKET_QAllow],
13778                          "QAllow", "allow", 0);
13779
13780   add_packet_config_cmd (&remote_protocol_packets[PACKET_StaticTracepoints],
13781                          "StaticTracepoints", "static-tracepoints", 0);
13782
13783   add_packet_config_cmd (&remote_protocol_packets[PACKET_InstallInTrace],
13784                          "InstallInTrace", "install-in-trace", 0);
13785
13786   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_statictrace_read],
13787                          "qXfer:statictrace:read", "read-sdata-object", 0);
13788
13789   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_fdpic],
13790                          "qXfer:fdpic:read", "read-fdpic-loadmap", 0);
13791
13792   add_packet_config_cmd (&remote_protocol_packets[PACKET_QDisableRandomization],
13793                          "QDisableRandomization", "disable-randomization", 0);
13794
13795   add_packet_config_cmd (&remote_protocol_packets[PACKET_QAgent],
13796                          "QAgent", "agent", 0);
13797
13798   add_packet_config_cmd (&remote_protocol_packets[PACKET_QTBuffer_size],
13799                          "QTBuffer:size", "trace-buffer-size", 0);
13800
13801   add_packet_config_cmd (&remote_protocol_packets[PACKET_Qbtrace_off],
13802        "Qbtrace:off", "disable-btrace", 0);
13803
13804   add_packet_config_cmd (&remote_protocol_packets[PACKET_Qbtrace_bts],
13805        "Qbtrace:bts", "enable-btrace-bts", 0);
13806
13807   add_packet_config_cmd (&remote_protocol_packets[PACKET_Qbtrace_pt],
13808        "Qbtrace:pt", "enable-btrace-pt", 0);
13809
13810   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_btrace],
13811        "qXfer:btrace", "read-btrace", 0);
13812
13813   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_btrace_conf],
13814        "qXfer:btrace-conf", "read-btrace-conf", 0);
13815
13816   add_packet_config_cmd (&remote_protocol_packets[PACKET_Qbtrace_conf_bts_size],
13817        "Qbtrace-conf:bts:size", "btrace-conf-bts-size", 0);
13818
13819   add_packet_config_cmd (&remote_protocol_packets[PACKET_multiprocess_feature],
13820        "multiprocess-feature", "multiprocess-feature", 0);
13821
13822   add_packet_config_cmd (&remote_protocol_packets[PACKET_swbreak_feature],
13823                          "swbreak-feature", "swbreak-feature", 0);
13824
13825   add_packet_config_cmd (&remote_protocol_packets[PACKET_hwbreak_feature],
13826                          "hwbreak-feature", "hwbreak-feature", 0);
13827
13828   add_packet_config_cmd (&remote_protocol_packets[PACKET_fork_event_feature],
13829                          "fork-event-feature", "fork-event-feature", 0);
13830
13831   add_packet_config_cmd (&remote_protocol_packets[PACKET_vfork_event_feature],
13832                          "vfork-event-feature", "vfork-event-feature", 0);
13833
13834   add_packet_config_cmd (&remote_protocol_packets[PACKET_Qbtrace_conf_pt_size],
13835        "Qbtrace-conf:pt:size", "btrace-conf-pt-size", 0);
13836
13837   add_packet_config_cmd (&remote_protocol_packets[PACKET_vContSupported],
13838                          "vContSupported", "verbose-resume-supported", 0);
13839
13840   add_packet_config_cmd (&remote_protocol_packets[PACKET_exec_event_feature],
13841                          "exec-event-feature", "exec-event-feature", 0);
13842
13843   add_packet_config_cmd (&remote_protocol_packets[PACKET_vCtrlC],
13844                          "vCtrlC", "ctrl-c", 0);
13845
13846   add_packet_config_cmd (&remote_protocol_packets[PACKET_QThreadEvents],
13847                          "QThreadEvents", "thread-events", 0);
13848
13849   add_packet_config_cmd (&remote_protocol_packets[PACKET_no_resumed],
13850                          "N stop reply", "no-resumed-stop-reply", 0);
13851
13852   /* Assert that we've registered "set remote foo-packet" commands
13853      for all packet configs.  */
13854   {
13855     int i;
13856
13857     for (i = 0; i < PACKET_MAX; i++)
13858       {
13859         /* Ideally all configs would have a command associated.  Some
13860            still don't though.  */
13861         int excepted;
13862
13863         switch (i)
13864           {
13865           case PACKET_QNonStop:
13866           case PACKET_EnableDisableTracepoints_feature:
13867           case PACKET_tracenz_feature:
13868           case PACKET_DisconnectedTracing_feature:
13869           case PACKET_augmented_libraries_svr4_read_feature:
13870           case PACKET_qCRC:
13871             /* Additions to this list need to be well justified:
13872                pre-existing packets are OK; new packets are not.  */
13873             excepted = 1;
13874             break;
13875           default:
13876             excepted = 0;
13877             break;
13878           }
13879
13880         /* This catches both forgetting to add a config command, and
13881            forgetting to remove a packet from the exception list.  */
13882         gdb_assert (excepted == (remote_protocol_packets[i].name == NULL));
13883       }
13884   }
13885
13886   /* Keep the old ``set remote Z-packet ...'' working.  Each individual
13887      Z sub-packet has its own set and show commands, but users may
13888      have sets to this variable in their .gdbinit files (or in their
13889      documentation).  */
13890   add_setshow_auto_boolean_cmd ("Z-packet", class_obscure,
13891                                 &remote_Z_packet_detect, _("\
13892 Set use of remote protocol `Z' packets"), _("\
13893 Show use of remote protocol `Z' packets "), _("\
13894 When set, GDB will attempt to use the remote breakpoint and watchpoint\n\
13895 packets."),
13896                                 set_remote_protocol_Z_packet_cmd,
13897                                 show_remote_protocol_Z_packet_cmd,
13898                                 /* FIXME: i18n: Use of remote protocol
13899                                    `Z' packets is %s.  */
13900                                 &remote_set_cmdlist, &remote_show_cmdlist);
13901
13902   add_prefix_cmd ("remote", class_files, remote_command, _("\
13903 Manipulate files on the remote system\n\
13904 Transfer files to and from the remote target system."),
13905                   &remote_cmdlist, "remote ",
13906                   0 /* allow-unknown */, &cmdlist);
13907
13908   add_cmd ("put", class_files, remote_put_command,
13909            _("Copy a local file to the remote system."),
13910            &remote_cmdlist);
13911
13912   add_cmd ("get", class_files, remote_get_command,
13913            _("Copy a remote file to the local system."),
13914            &remote_cmdlist);
13915
13916   add_cmd ("delete", class_files, remote_delete_command,
13917            _("Delete a remote file."),
13918            &remote_cmdlist);
13919
13920   add_setshow_string_noescape_cmd ("exec-file", class_files,
13921                                    &remote_exec_file_var, _("\
13922 Set the remote pathname for \"run\""), _("\
13923 Show the remote pathname for \"run\""), NULL,
13924                                    set_remote_exec_file,
13925                                    show_remote_exec_file,
13926                                    &remote_set_cmdlist,
13927                                    &remote_show_cmdlist);
13928
13929   add_setshow_boolean_cmd ("range-stepping", class_run,
13930                            &use_range_stepping, _("\
13931 Enable or disable range stepping."), _("\
13932 Show whether target-assisted range stepping is enabled."), _("\
13933 If on, and the target supports it, when stepping a source line, GDB\n\
13934 tells the target to step the corresponding range of addresses itself instead\n\
13935 of issuing multiple single-steps.  This speeds up source level\n\
13936 stepping.  If off, GDB always issues single-steps, even if range\n\
13937 stepping is supported by the target.  The default is on."),
13938                            set_range_stepping,
13939                            show_range_stepping,
13940                            &setlist,
13941                            &showlist);
13942
13943   /* Eventually initialize fileio.  See fileio.c */
13944   initialize_remote_fileio (remote_set_cmdlist, remote_show_cmdlist);
13945
13946   /* Take advantage of the fact that the TID field is not used, to tag
13947      special ptids with it set to != 0.  */
13948   magic_null_ptid = ptid_build (42000, -1, 1);
13949   not_sent_ptid = ptid_build (42000, -2, 1);
13950   any_thread_ptid = ptid_build (42000, 0, 1);
13951
13952   target_buf_size = 2048;
13953   target_buf = (char *) xmalloc (target_buf_size);
13954 }
13955