Remove unnecessary function prototypes.
[external/binutils.git] / gdb / remote.c
1 /* Remote target communications for serial-line targets in custom GDB protocol
2
3    Copyright (C) 1988-2017 Free Software Foundation, Inc.
4
5    This file is part of GDB.
6
7    This program is free software; you can redistribute it and/or modify
8    it under the terms of the GNU General Public License as published by
9    the Free Software Foundation; either version 3 of the License, or
10    (at your option) any later version.
11
12    This program is distributed in the hope that it will be useful,
13    but WITHOUT ANY WARRANTY; without even the implied warranty of
14    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15    GNU General Public License for more details.
16
17    You should have received a copy of the GNU General Public License
18    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
19
20 /* See the GDB User Guide for details of the GDB remote protocol.  */
21
22 #include "defs.h"
23 #include <ctype.h>
24 #include <fcntl.h>
25 #include "inferior.h"
26 #include "infrun.h"
27 #include "bfd.h"
28 #include "symfile.h"
29 #include "target.h"
30 /*#include "terminal.h" */
31 #include "gdbcmd.h"
32 #include "objfiles.h"
33 #include "gdb-stabs.h"
34 #include "gdbthread.h"
35 #include "remote.h"
36 #include "remote-notif.h"
37 #include "regcache.h"
38 #include "value.h"
39 #include "observer.h"
40 #include "solib.h"
41 #include "cli/cli-decode.h"
42 #include "cli/cli-setshow.h"
43 #include "target-descriptions.h"
44 #include "gdb_bfd.h"
45 #include "filestuff.h"
46 #include "rsp-low.h"
47 #include "disasm.h"
48 #include "location.h"
49
50 #include "gdb_sys_time.h"
51
52 #include "event-loop.h"
53 #include "event-top.h"
54 #include "inf-loop.h"
55
56 #include <signal.h>
57 #include "serial.h"
58
59 #include "gdbcore.h" /* for exec_bfd */
60
61 #include "remote-fileio.h"
62 #include "gdb/fileio.h"
63 #include <sys/stat.h>
64 #include "xml-support.h"
65
66 #include "memory-map.h"
67
68 #include "tracepoint.h"
69 #include "ax.h"
70 #include "ax-gdb.h"
71 #include "agent.h"
72 #include "btrace.h"
73 #include "record-btrace.h"
74 #include <algorithm>
75 #include "common/scoped_restore.h"
76 #include "environ.h"
77
78 /* Temp hacks for tracepoint encoding migration.  */
79 static char *target_buf;
80 static long target_buf_size;
81
82 /* Per-program-space data key.  */
83 static const struct program_space_data *remote_pspace_data;
84
85 /* The variable registered as the control variable used by the
86    remote exec-file commands.  While the remote exec-file setting is
87    per-program-space, the set/show machinery uses this as the 
88    location of the remote exec-file value.  */
89 static char *remote_exec_file_var;
90
91 /* The size to align memory write packets, when practical.  The protocol
92    does not guarantee any alignment, and gdb will generate short
93    writes and unaligned writes, but even as a best-effort attempt this
94    can improve bulk transfers.  For instance, if a write is misaligned
95    relative to the target's data bus, the stub may need to make an extra
96    round trip fetching data from the target.  This doesn't make a
97    huge difference, but it's easy to do, so we try to be helpful.
98
99    The alignment chosen is arbitrary; usually data bus width is
100    important here, not the possibly larger cache line size.  */
101 enum { REMOTE_ALIGN_WRITES = 16 };
102
103 /* Prototypes for local functions.  */
104 static int getpkt_sane (char **buf, long *sizeof_buf, int forever);
105 static int getpkt_or_notif_sane (char **buf, long *sizeof_buf,
106                                  int forever, int *is_notif);
107
108 static void remote_files_info (struct target_ops *ignore);
109
110 static void remote_prepare_to_store (struct target_ops *self,
111                                      struct regcache *regcache);
112
113 static void remote_open_1 (const char *, int, struct target_ops *,
114                            int extended_p);
115
116 static void remote_close (struct target_ops *self);
117
118 struct remote_state;
119
120 static int remote_vkill (int pid, struct remote_state *rs);
121
122 static void remote_kill_k (void);
123
124 static void remote_mourn (struct target_ops *ops);
125
126 static void extended_remote_restart (void);
127
128 static void remote_send (char **buf, long *sizeof_buf_p);
129
130 static int readchar (int timeout);
131
132 static void remote_serial_write (const char *str, int len);
133
134 static void remote_kill (struct target_ops *ops);
135
136 static int remote_can_async_p (struct target_ops *);
137
138 static int remote_is_async_p (struct target_ops *);
139
140 static void remote_async (struct target_ops *ops, int enable);
141
142 static void remote_thread_events (struct target_ops *ops, int enable);
143
144 static void interrupt_query (void);
145
146 static void set_general_thread (ptid_t ptid);
147 static void set_continue_thread (ptid_t ptid);
148
149 static void get_offsets (void);
150
151 static void skip_frame (void);
152
153 static long read_frame (char **buf_p, long *sizeof_buf);
154
155 static int hexnumlen (ULONGEST num);
156
157 static void init_remote_ops (void);
158
159 static void init_extended_remote_ops (void);
160
161 static void remote_stop (struct target_ops *self, ptid_t);
162
163 static int stubhex (int ch);
164
165 static int hexnumstr (char *, ULONGEST);
166
167 static int hexnumnstr (char *, ULONGEST, int);
168
169 static CORE_ADDR remote_address_masked (CORE_ADDR);
170
171 static void print_packet (const char *);
172
173 static void compare_sections_command (char *, int);
174
175 static void packet_command (char *, int);
176
177 static int stub_unpack_int (char *buff, int fieldlength);
178
179 static ptid_t remote_current_thread (ptid_t oldptid);
180
181 static int putpkt_binary (const char *buf, int cnt);
182
183 static void check_binary_download (CORE_ADDR addr);
184
185 struct packet_config;
186
187 static void show_packet_config_cmd (struct packet_config *config);
188
189 static void show_remote_protocol_packet_cmd (struct ui_file *file,
190                                              int from_tty,
191                                              struct cmd_list_element *c,
192                                              const char *value);
193
194 static char *write_ptid (char *buf, const char *endbuf, ptid_t ptid);
195 static ptid_t read_ptid (char *buf, char **obuf);
196
197 static void remote_set_permissions (struct target_ops *self);
198
199 static int remote_get_trace_status (struct target_ops *self,
200                                     struct trace_status *ts);
201
202 static int remote_upload_tracepoints (struct target_ops *self,
203                                       struct uploaded_tp **utpp);
204
205 static int remote_upload_trace_state_variables (struct target_ops *self,
206                                                 struct uploaded_tsv **utsvp);
207   
208 static void remote_query_supported (void);
209
210 static void remote_check_symbols (void);
211
212 struct stop_reply;
213 static void stop_reply_xfree (struct stop_reply *);
214 static void remote_parse_stop_reply (char *, struct stop_reply *);
215 static void push_stop_reply (struct stop_reply *);
216 static void discard_pending_stop_replies_in_queue (struct remote_state *);
217 static int peek_stop_reply (ptid_t ptid);
218
219 struct threads_listing_context;
220 static void remove_new_fork_children (struct threads_listing_context *);
221
222 static void remote_async_inferior_event_handler (gdb_client_data);
223
224 static void remote_terminal_ours (struct target_ops *self);
225
226 static int remote_read_description_p (struct target_ops *target);
227
228 static void remote_console_output (char *msg);
229
230 static int remote_supports_cond_breakpoints (struct target_ops *self);
231
232 static int remote_can_run_breakpoint_commands (struct target_ops *self);
233
234 static void remote_btrace_reset (void);
235
236 static void remote_btrace_maybe_reopen (void);
237
238 static int stop_reply_queue_length (void);
239
240 static void readahead_cache_invalidate (void);
241
242 static void remote_unpush_and_throw (void);
243
244 /* For "remote".  */
245
246 static struct cmd_list_element *remote_cmdlist;
247
248 /* For "set remote" and "show remote".  */
249
250 static struct cmd_list_element *remote_set_cmdlist;
251 static struct cmd_list_element *remote_show_cmdlist;
252
253 /* Stub vCont actions support.
254
255    Each field is a boolean flag indicating whether the stub reports
256    support for the corresponding action.  */
257
258 struct vCont_action_support
259 {
260   /* vCont;t */
261   int t;
262
263   /* vCont;r */
264   int r;
265
266   /* vCont;s */
267   int s;
268
269   /* vCont;S */
270   int S;
271 };
272
273 /* Controls whether GDB is willing to use range stepping.  */
274
275 static int use_range_stepping = 1;
276
277 #define OPAQUETHREADBYTES 8
278
279 /* a 64 bit opaque identifier */
280 typedef unsigned char threadref[OPAQUETHREADBYTES];
281
282 /* About this many threadisds fit in a packet.  */
283
284 #define MAXTHREADLISTRESULTS 32
285
286 /* The max number of chars in debug output.  The rest of chars are
287    omitted.  */
288
289 #define REMOTE_DEBUG_MAX_CHAR 512
290
291 /* Data for the vFile:pread readahead cache.  */
292
293 struct readahead_cache
294 {
295   /* The file descriptor for the file that is being cached.  -1 if the
296      cache is invalid.  */
297   int fd;
298
299   /* The offset into the file that the cache buffer corresponds
300      to.  */
301   ULONGEST offset;
302
303   /* The buffer holding the cache contents.  */
304   gdb_byte *buf;
305   /* The buffer's size.  We try to read as much as fits into a packet
306      at a time.  */
307   size_t bufsize;
308
309   /* Cache hit and miss counters.  */
310   ULONGEST hit_count;
311   ULONGEST miss_count;
312 };
313
314 /* Description of the remote protocol state for the currently
315    connected target.  This is per-target state, and independent of the
316    selected architecture.  */
317
318 struct remote_state
319 {
320   /* A buffer to use for incoming packets, and its current size.  The
321      buffer is grown dynamically for larger incoming packets.
322      Outgoing packets may also be constructed in this buffer.
323      BUF_SIZE is always at least REMOTE_PACKET_SIZE;
324      REMOTE_PACKET_SIZE should be used to limit the length of outgoing
325      packets.  */
326   char *buf;
327   long buf_size;
328
329   /* True if we're going through initial connection setup (finding out
330      about the remote side's threads, relocating symbols, etc.).  */
331   int starting_up;
332
333   /* If we negotiated packet size explicitly (and thus can bypass
334      heuristics for the largest packet size that will not overflow
335      a buffer in the stub), this will be set to that packet size.
336      Otherwise zero, meaning to use the guessed size.  */
337   long explicit_packet_size;
338
339   /* remote_wait is normally called when the target is running and
340      waits for a stop reply packet.  But sometimes we need to call it
341      when the target is already stopped.  We can send a "?" packet
342      and have remote_wait read the response.  Or, if we already have
343      the response, we can stash it in BUF and tell remote_wait to
344      skip calling getpkt.  This flag is set when BUF contains a
345      stop reply packet and the target is not waiting.  */
346   int cached_wait_status;
347
348   /* True, if in no ack mode.  That is, neither GDB nor the stub will
349      expect acks from each other.  The connection is assumed to be
350      reliable.  */
351   int noack_mode;
352
353   /* True if we're connected in extended remote mode.  */
354   int extended;
355
356   /* True if we resumed the target and we're waiting for the target to
357      stop.  In the mean time, we can't start another command/query.
358      The remote server wouldn't be ready to process it, so we'd
359      timeout waiting for a reply that would never come and eventually
360      we'd close the connection.  This can happen in asynchronous mode
361      because we allow GDB commands while the target is running.  */
362   int waiting_for_stop_reply;
363
364   /* The status of the stub support for the various vCont actions.  */
365   struct vCont_action_support supports_vCont;
366
367   /* Nonzero if the user has pressed Ctrl-C, but the target hasn't
368      responded to that.  */
369   int ctrlc_pending_p;
370
371   /* True if we saw a Ctrl-C while reading or writing from/to the
372      remote descriptor.  At that point it is not safe to send a remote
373      interrupt packet, so we instead remember we saw the Ctrl-C and
374      process it once we're done with sending/receiving the current
375      packet, which should be shortly.  If however that takes too long,
376      and the user presses Ctrl-C again, we offer to disconnect.  */
377   int got_ctrlc_during_io;
378
379   /* Descriptor for I/O to remote machine.  Initialize it to NULL so that
380      remote_open knows that we don't have a file open when the program
381      starts.  */
382   struct serial *remote_desc;
383
384   /* These are the threads which we last sent to the remote system.  The
385      TID member will be -1 for all or -2 for not sent yet.  */
386   ptid_t general_thread;
387   ptid_t continue_thread;
388
389   /* This is the traceframe which we last selected on the remote system.
390      It will be -1 if no traceframe is selected.  */
391   int remote_traceframe_number;
392
393   char *last_pass_packet;
394
395   /* The last QProgramSignals packet sent to the target.  We bypass
396      sending a new program signals list down to the target if the new
397      packet is exactly the same as the last we sent.  IOW, we only let
398      the target know about program signals list changes.  */
399   char *last_program_signals_packet;
400
401   enum gdb_signal last_sent_signal;
402
403   int last_sent_step;
404
405   /* The execution direction of the last resume we got.  */
406   enum exec_direction_kind last_resume_exec_dir;
407
408   char *finished_object;
409   char *finished_annex;
410   ULONGEST finished_offset;
411
412   /* Should we try the 'ThreadInfo' query packet?
413
414      This variable (NOT available to the user: auto-detect only!)
415      determines whether GDB will use the new, simpler "ThreadInfo"
416      query or the older, more complex syntax for thread queries.
417      This is an auto-detect variable (set to true at each connect,
418      and set to false when the target fails to recognize it).  */
419   int use_threadinfo_query;
420   int use_threadextra_query;
421
422   threadref echo_nextthread;
423   threadref nextthread;
424   threadref resultthreadlist[MAXTHREADLISTRESULTS];
425
426   /* The state of remote notification.  */
427   struct remote_notif_state *notif_state;
428
429   /* The branch trace configuration.  */
430   struct btrace_config btrace_config;
431
432   /* The argument to the last "vFile:setfs:" packet we sent, used
433      to avoid sending repeated unnecessary "vFile:setfs:" packets.
434      Initialized to -1 to indicate that no "vFile:setfs:" packet
435      has yet been sent.  */
436   int fs_pid;
437
438   /* A readahead cache for vFile:pread.  Often, reading a binary
439      involves a sequence of small reads.  E.g., when parsing an ELF
440      file.  A readahead cache helps mostly the case of remote
441      debugging on a connection with higher latency, due to the
442      request/reply nature of the RSP.  We only cache data for a single
443      file descriptor at a time.  */
444   struct readahead_cache readahead_cache;
445 };
446
447 /* Private data that we'll store in (struct thread_info)->private.  */
448 struct private_thread_info
449 {
450   char *extra;
451   char *name;
452   int core;
453
454   /* Whether the target stopped for a breakpoint/watchpoint.  */
455   enum target_stop_reason stop_reason;
456
457   /* This is set to the data address of the access causing the target
458      to stop for a watchpoint.  */
459   CORE_ADDR watch_data_address;
460
461   /* Fields used by the vCont action coalescing implemented in
462      remote_resume / remote_commit_resume.  remote_resume stores each
463      thread's last resume request in these fields, so that a later
464      remote_commit_resume knows which is the proper action for this
465      thread to include in the vCont packet.  */
466
467   /* True if the last target_resume call for this thread was a step
468      request, false if a continue request.  */
469   int last_resume_step;
470
471   /* The signal specified in the last target_resume call for this
472      thread.  */
473   enum gdb_signal last_resume_sig;
474
475   /* Whether this thread was already vCont-resumed on the remote
476      side.  */
477   int vcont_resumed;
478 };
479
480 static void
481 free_private_thread_info (struct private_thread_info *info)
482 {
483   xfree (info->extra);
484   xfree (info->name);
485   xfree (info);
486 }
487
488 /* This data could be associated with a target, but we do not always
489    have access to the current target when we need it, so for now it is
490    static.  This will be fine for as long as only one target is in use
491    at a time.  */
492 static struct remote_state *remote_state;
493
494 static struct remote_state *
495 get_remote_state_raw (void)
496 {
497   return remote_state;
498 }
499
500 /* Allocate a new struct remote_state with xmalloc, initialize it, and
501    return it.  */
502
503 static struct remote_state *
504 new_remote_state (void)
505 {
506   struct remote_state *result = XCNEW (struct remote_state);
507
508   /* The default buffer size is unimportant; it will be expanded
509      whenever a larger buffer is needed. */
510   result->buf_size = 400;
511   result->buf = (char *) xmalloc (result->buf_size);
512   result->remote_traceframe_number = -1;
513   result->last_sent_signal = GDB_SIGNAL_0;
514   result->last_resume_exec_dir = EXEC_FORWARD;
515   result->fs_pid = -1;
516
517   return result;
518 }
519
520 /* Description of the remote protocol for a given architecture.  */
521
522 struct packet_reg
523 {
524   long offset; /* Offset into G packet.  */
525   long regnum; /* GDB's internal register number.  */
526   LONGEST pnum; /* Remote protocol register number.  */
527   int in_g_packet; /* Always part of G packet.  */
528   /* long size in bytes;  == register_size (target_gdbarch (), regnum);
529      at present.  */
530   /* char *name; == gdbarch_register_name (target_gdbarch (), regnum);
531      at present.  */
532 };
533
534 struct remote_arch_state
535 {
536   /* Description of the remote protocol registers.  */
537   long sizeof_g_packet;
538
539   /* Description of the remote protocol registers indexed by REGNUM
540      (making an array gdbarch_num_regs in size).  */
541   struct packet_reg *regs;
542
543   /* This is the size (in chars) of the first response to the ``g''
544      packet.  It is used as a heuristic when determining the maximum
545      size of memory-read and memory-write packets.  A target will
546      typically only reserve a buffer large enough to hold the ``g''
547      packet.  The size does not include packet overhead (headers and
548      trailers).  */
549   long actual_register_packet_size;
550
551   /* This is the maximum size (in chars) of a non read/write packet.
552      It is also used as a cap on the size of read/write packets.  */
553   long remote_packet_size;
554 };
555
556 /* Utility: generate error from an incoming stub packet.  */
557 static void
558 trace_error (char *buf)
559 {
560   if (*buf++ != 'E')
561     return;                     /* not an error msg */
562   switch (*buf)
563     {
564     case '1':                   /* malformed packet error */
565       if (*++buf == '0')        /*   general case: */
566         error (_("remote.c: error in outgoing packet."));
567       else
568         error (_("remote.c: error in outgoing packet at field #%ld."),
569                strtol (buf, NULL, 16));
570     default:
571       error (_("Target returns error code '%s'."), buf);
572     }
573 }
574
575 /* Utility: wait for reply from stub, while accepting "O" packets.  */
576 static char *
577 remote_get_noisy_reply (char **buf_p,
578                         long *sizeof_buf)
579 {
580   do                            /* Loop on reply from remote stub.  */
581     {
582       char *buf;
583
584       QUIT;                     /* Allow user to bail out with ^C.  */
585       getpkt (buf_p, sizeof_buf, 0);
586       buf = *buf_p;
587       if (buf[0] == 'E')
588         trace_error (buf);
589       else if (startswith (buf, "qRelocInsn:"))
590         {
591           ULONGEST ul;
592           CORE_ADDR from, to, org_to;
593           char *p, *pp;
594           int adjusted_size = 0;
595           int relocated = 0;
596
597           p = buf + strlen ("qRelocInsn:");
598           pp = unpack_varlen_hex (p, &ul);
599           if (*pp != ';')
600             error (_("invalid qRelocInsn packet: %s"), buf);
601           from = ul;
602
603           p = pp + 1;
604           unpack_varlen_hex (p, &ul);
605           to = ul;
606
607           org_to = to;
608
609           TRY
610             {
611               gdbarch_relocate_instruction (target_gdbarch (), &to, from);
612               relocated = 1;
613             }
614           CATCH (ex, RETURN_MASK_ALL)
615             {
616               if (ex.error == MEMORY_ERROR)
617                 {
618                   /* Propagate memory errors silently back to the
619                      target.  The stub may have limited the range of
620                      addresses we can write to, for example.  */
621                 }
622               else
623                 {
624                   /* Something unexpectedly bad happened.  Be verbose
625                      so we can tell what, and propagate the error back
626                      to the stub, so it doesn't get stuck waiting for
627                      a response.  */
628                   exception_fprintf (gdb_stderr, ex,
629                                      _("warning: relocating instruction: "));
630                 }
631               putpkt ("E01");
632             }
633           END_CATCH
634
635           if (relocated)
636             {
637               adjusted_size = to - org_to;
638
639               xsnprintf (buf, *sizeof_buf, "qRelocInsn:%x", adjusted_size);
640               putpkt (buf);
641             }
642         }
643       else if (buf[0] == 'O' && buf[1] != 'K')
644         remote_console_output (buf + 1);        /* 'O' message from stub */
645       else
646         return buf;             /* Here's the actual reply.  */
647     }
648   while (1);
649 }
650
651 /* Handle for retreving the remote protocol data from gdbarch.  */
652 static struct gdbarch_data *remote_gdbarch_data_handle;
653
654 static struct remote_arch_state *
655 get_remote_arch_state (void)
656 {
657   gdb_assert (target_gdbarch () != NULL);
658   return ((struct remote_arch_state *)
659           gdbarch_data (target_gdbarch (), remote_gdbarch_data_handle));
660 }
661
662 /* Fetch the global remote target state.  */
663
664 static struct remote_state *
665 get_remote_state (void)
666 {
667   /* Make sure that the remote architecture state has been
668      initialized, because doing so might reallocate rs->buf.  Any
669      function which calls getpkt also needs to be mindful of changes
670      to rs->buf, but this call limits the number of places which run
671      into trouble.  */
672   get_remote_arch_state ();
673
674   return get_remote_state_raw ();
675 }
676
677 /* Cleanup routine for the remote module's pspace data.  */
678
679 static void
680 remote_pspace_data_cleanup (struct program_space *pspace, void *arg)
681 {
682   char *remote_exec_file = (char *) arg;
683
684   xfree (remote_exec_file);
685 }
686
687 /* Fetch the remote exec-file from the current program space.  */
688
689 static const char *
690 get_remote_exec_file (void)
691 {
692   char *remote_exec_file;
693
694   remote_exec_file
695     = (char *) program_space_data (current_program_space,
696                                    remote_pspace_data);
697   if (remote_exec_file == NULL)
698     return "";
699
700   return remote_exec_file;
701 }
702
703 /* Set the remote exec file for PSPACE.  */
704
705 static void
706 set_pspace_remote_exec_file (struct program_space *pspace,
707                         char *remote_exec_file)
708 {
709   char *old_file = (char *) program_space_data (pspace, remote_pspace_data);
710
711   xfree (old_file);
712   set_program_space_data (pspace, remote_pspace_data,
713                           xstrdup (remote_exec_file));
714 }
715
716 /* The "set/show remote exec-file" set command hook.  */
717
718 static void
719 set_remote_exec_file (char *ignored, int from_tty,
720                       struct cmd_list_element *c)
721 {
722   gdb_assert (remote_exec_file_var != NULL);
723   set_pspace_remote_exec_file (current_program_space, remote_exec_file_var);
724 }
725
726 /* The "set/show remote exec-file" show command hook.  */
727
728 static void
729 show_remote_exec_file (struct ui_file *file, int from_tty,
730                        struct cmd_list_element *cmd, const char *value)
731 {
732   fprintf_filtered (file, "%s\n", remote_exec_file_var);
733 }
734
735 static int
736 compare_pnums (const void *lhs_, const void *rhs_)
737 {
738   const struct packet_reg * const *lhs
739     = (const struct packet_reg * const *) lhs_;
740   const struct packet_reg * const *rhs
741     = (const struct packet_reg * const *) rhs_;
742
743   if ((*lhs)->pnum < (*rhs)->pnum)
744     return -1;
745   else if ((*lhs)->pnum == (*rhs)->pnum)
746     return 0;
747   else
748     return 1;
749 }
750
751 static int
752 map_regcache_remote_table (struct gdbarch *gdbarch, struct packet_reg *regs)
753 {
754   int regnum, num_remote_regs, offset;
755   struct packet_reg **remote_regs;
756
757   for (regnum = 0; regnum < gdbarch_num_regs (gdbarch); regnum++)
758     {
759       struct packet_reg *r = &regs[regnum];
760
761       if (register_size (gdbarch, regnum) == 0)
762         /* Do not try to fetch zero-sized (placeholder) registers.  */
763         r->pnum = -1;
764       else
765         r->pnum = gdbarch_remote_register_number (gdbarch, regnum);
766
767       r->regnum = regnum;
768     }
769
770   /* Define the g/G packet format as the contents of each register
771      with a remote protocol number, in order of ascending protocol
772      number.  */
773
774   remote_regs = XALLOCAVEC (struct packet_reg *, gdbarch_num_regs (gdbarch));
775   for (num_remote_regs = 0, regnum = 0;
776        regnum < gdbarch_num_regs (gdbarch);
777        regnum++)
778     if (regs[regnum].pnum != -1)
779       remote_regs[num_remote_regs++] = &regs[regnum];
780
781   qsort (remote_regs, num_remote_regs, sizeof (struct packet_reg *),
782          compare_pnums);
783
784   for (regnum = 0, offset = 0; regnum < num_remote_regs; regnum++)
785     {
786       remote_regs[regnum]->in_g_packet = 1;
787       remote_regs[regnum]->offset = offset;
788       offset += register_size (gdbarch, remote_regs[regnum]->regnum);
789     }
790
791   return offset;
792 }
793
794 /* Given the architecture described by GDBARCH, return the remote
795    protocol register's number and the register's offset in the g/G
796    packets of GDB register REGNUM, in PNUM and POFFSET respectively.
797    If the target does not have a mapping for REGNUM, return false,
798    otherwise, return true.  */
799
800 int
801 remote_register_number_and_offset (struct gdbarch *gdbarch, int regnum,
802                                    int *pnum, int *poffset)
803 {
804   struct packet_reg *regs;
805   struct cleanup *old_chain;
806
807   gdb_assert (regnum < gdbarch_num_regs (gdbarch));
808
809   regs = XCNEWVEC (struct packet_reg, gdbarch_num_regs (gdbarch));
810   old_chain = make_cleanup (xfree, regs);
811
812   map_regcache_remote_table (gdbarch, regs);
813
814   *pnum = regs[regnum].pnum;
815   *poffset = regs[regnum].offset;
816
817   do_cleanups (old_chain);
818
819   return *pnum != -1;
820 }
821
822 static void *
823 init_remote_state (struct gdbarch *gdbarch)
824 {
825   struct remote_state *rs = get_remote_state_raw ();
826   struct remote_arch_state *rsa;
827
828   rsa = GDBARCH_OBSTACK_ZALLOC (gdbarch, struct remote_arch_state);
829
830   /* Use the architecture to build a regnum<->pnum table, which will be
831      1:1 unless a feature set specifies otherwise.  */
832   rsa->regs = GDBARCH_OBSTACK_CALLOC (gdbarch,
833                                       gdbarch_num_regs (gdbarch),
834                                       struct packet_reg);
835
836   /* Record the maximum possible size of the g packet - it may turn out
837      to be smaller.  */
838   rsa->sizeof_g_packet = map_regcache_remote_table (gdbarch, rsa->regs);
839
840   /* Default maximum number of characters in a packet body.  Many
841      remote stubs have a hardwired buffer size of 400 bytes
842      (c.f. BUFMAX in m68k-stub.c and i386-stub.c).  BUFMAX-1 is used
843      as the maximum packet-size to ensure that the packet and an extra
844      NUL character can always fit in the buffer.  This stops GDB
845      trashing stubs that try to squeeze an extra NUL into what is
846      already a full buffer (As of 1999-12-04 that was most stubs).  */
847   rsa->remote_packet_size = 400 - 1;
848
849   /* This one is filled in when a ``g'' packet is received.  */
850   rsa->actual_register_packet_size = 0;
851
852   /* Should rsa->sizeof_g_packet needs more space than the
853      default, adjust the size accordingly.  Remember that each byte is
854      encoded as two characters.  32 is the overhead for the packet
855      header / footer.  NOTE: cagney/1999-10-26: I suspect that 8
856      (``$NN:G...#NN'') is a better guess, the below has been padded a
857      little.  */
858   if (rsa->sizeof_g_packet > ((rsa->remote_packet_size - 32) / 2))
859     rsa->remote_packet_size = (rsa->sizeof_g_packet * 2 + 32);
860
861   /* Make sure that the packet buffer is plenty big enough for
862      this architecture.  */
863   if (rs->buf_size < rsa->remote_packet_size)
864     {
865       rs->buf_size = 2 * rsa->remote_packet_size;
866       rs->buf = (char *) xrealloc (rs->buf, rs->buf_size);
867     }
868
869   return rsa;
870 }
871
872 /* Return the current allowed size of a remote packet.  This is
873    inferred from the current architecture, and should be used to
874    limit the length of outgoing packets.  */
875 static long
876 get_remote_packet_size (void)
877 {
878   struct remote_state *rs = get_remote_state ();
879   struct remote_arch_state *rsa = get_remote_arch_state ();
880
881   if (rs->explicit_packet_size)
882     return rs->explicit_packet_size;
883
884   return rsa->remote_packet_size;
885 }
886
887 static struct packet_reg *
888 packet_reg_from_regnum (struct remote_arch_state *rsa, long regnum)
889 {
890   if (regnum < 0 && regnum >= gdbarch_num_regs (target_gdbarch ()))
891     return NULL;
892   else
893     {
894       struct packet_reg *r = &rsa->regs[regnum];
895
896       gdb_assert (r->regnum == regnum);
897       return r;
898     }
899 }
900
901 static struct packet_reg *
902 packet_reg_from_pnum (struct remote_arch_state *rsa, LONGEST pnum)
903 {
904   int i;
905
906   for (i = 0; i < gdbarch_num_regs (target_gdbarch ()); i++)
907     {
908       struct packet_reg *r = &rsa->regs[i];
909
910       if (r->pnum == pnum)
911         return r;
912     }
913   return NULL;
914 }
915
916 static struct target_ops remote_ops;
917
918 static struct target_ops extended_remote_ops;
919
920 /* FIXME: cagney/1999-09-23: Even though getpkt was called with
921    ``forever'' still use the normal timeout mechanism.  This is
922    currently used by the ASYNC code to guarentee that target reads
923    during the initial connect always time-out.  Once getpkt has been
924    modified to return a timeout indication and, in turn
925    remote_wait()/wait_for_inferior() have gained a timeout parameter
926    this can go away.  */
927 static int wait_forever_enabled_p = 1;
928
929 /* Allow the user to specify what sequence to send to the remote
930    when he requests a program interruption: Although ^C is usually
931    what remote systems expect (this is the default, here), it is
932    sometimes preferable to send a break.  On other systems such
933    as the Linux kernel, a break followed by g, which is Magic SysRq g
934    is required in order to interrupt the execution.  */
935 const char interrupt_sequence_control_c[] = "Ctrl-C";
936 const char interrupt_sequence_break[] = "BREAK";
937 const char interrupt_sequence_break_g[] = "BREAK-g";
938 static const char *const interrupt_sequence_modes[] =
939   {
940     interrupt_sequence_control_c,
941     interrupt_sequence_break,
942     interrupt_sequence_break_g,
943     NULL
944   };
945 static const char *interrupt_sequence_mode = interrupt_sequence_control_c;
946
947 static void
948 show_interrupt_sequence (struct ui_file *file, int from_tty,
949                          struct cmd_list_element *c,
950                          const char *value)
951 {
952   if (interrupt_sequence_mode == interrupt_sequence_control_c)
953     fprintf_filtered (file,
954                       _("Send the ASCII ETX character (Ctrl-c) "
955                         "to the remote target to interrupt the "
956                         "execution of the program.\n"));
957   else if (interrupt_sequence_mode == interrupt_sequence_break)
958     fprintf_filtered (file,
959                       _("send a break signal to the remote target "
960                         "to interrupt the execution of the program.\n"));
961   else if (interrupt_sequence_mode == interrupt_sequence_break_g)
962     fprintf_filtered (file,
963                       _("Send a break signal and 'g' a.k.a. Magic SysRq g to "
964                         "the remote target to interrupt the execution "
965                         "of Linux kernel.\n"));
966   else
967     internal_error (__FILE__, __LINE__,
968                     _("Invalid value for interrupt_sequence_mode: %s."),
969                     interrupt_sequence_mode);
970 }
971
972 /* This boolean variable specifies whether interrupt_sequence is sent
973    to the remote target when gdb connects to it.
974    This is mostly needed when you debug the Linux kernel: The Linux kernel
975    expects BREAK g which is Magic SysRq g for connecting gdb.  */
976 static int interrupt_on_connect = 0;
977
978 /* This variable is used to implement the "set/show remotebreak" commands.
979    Since these commands are now deprecated in favor of "set/show remote
980    interrupt-sequence", it no longer has any effect on the code.  */
981 static int remote_break;
982
983 static void
984 set_remotebreak (char *args, int from_tty, struct cmd_list_element *c)
985 {
986   if (remote_break)
987     interrupt_sequence_mode = interrupt_sequence_break;
988   else
989     interrupt_sequence_mode = interrupt_sequence_control_c;
990 }
991
992 static void
993 show_remotebreak (struct ui_file *file, int from_tty,
994                   struct cmd_list_element *c,
995                   const char *value)
996 {
997 }
998
999 /* This variable sets the number of bits in an address that are to be
1000    sent in a memory ("M" or "m") packet.  Normally, after stripping
1001    leading zeros, the entire address would be sent.  This variable
1002    restricts the address to REMOTE_ADDRESS_SIZE bits.  HISTORY: The
1003    initial implementation of remote.c restricted the address sent in
1004    memory packets to ``host::sizeof long'' bytes - (typically 32
1005    bits).  Consequently, for 64 bit targets, the upper 32 bits of an
1006    address was never sent.  Since fixing this bug may cause a break in
1007    some remote targets this variable is principly provided to
1008    facilitate backward compatibility.  */
1009
1010 static unsigned int remote_address_size;
1011
1012 /* Temporary to track who currently owns the terminal.  See
1013    remote_terminal_* for more details.  */
1014
1015 static int remote_async_terminal_ours_p;
1016
1017 \f
1018 /* User configurable variables for the number of characters in a
1019    memory read/write packet.  MIN (rsa->remote_packet_size,
1020    rsa->sizeof_g_packet) is the default.  Some targets need smaller
1021    values (fifo overruns, et.al.) and some users need larger values
1022    (speed up transfers).  The variables ``preferred_*'' (the user
1023    request), ``current_*'' (what was actually set) and ``forced_*''
1024    (Positive - a soft limit, negative - a hard limit).  */
1025
1026 struct memory_packet_config
1027 {
1028   const char *name;
1029   long size;
1030   int fixed_p;
1031 };
1032
1033 /* The default max memory-write-packet-size.  The 16k is historical.
1034    (It came from older GDB's using alloca for buffers and the
1035    knowledge (folklore?) that some hosts don't cope very well with
1036    large alloca calls.)  */
1037 #define DEFAULT_MAX_MEMORY_PACKET_SIZE 16384
1038
1039 /* The minimum remote packet size for memory transfers.  Ensures we
1040    can write at least one byte.  */
1041 #define MIN_MEMORY_PACKET_SIZE 20
1042
1043 /* Compute the current size of a read/write packet.  Since this makes
1044    use of ``actual_register_packet_size'' the computation is dynamic.  */
1045
1046 static long
1047 get_memory_packet_size (struct memory_packet_config *config)
1048 {
1049   struct remote_state *rs = get_remote_state ();
1050   struct remote_arch_state *rsa = get_remote_arch_state ();
1051
1052   long what_they_get;
1053   if (config->fixed_p)
1054     {
1055       if (config->size <= 0)
1056         what_they_get = DEFAULT_MAX_MEMORY_PACKET_SIZE;
1057       else
1058         what_they_get = config->size;
1059     }
1060   else
1061     {
1062       what_they_get = get_remote_packet_size ();
1063       /* Limit the packet to the size specified by the user.  */
1064       if (config->size > 0
1065           && what_they_get > config->size)
1066         what_they_get = config->size;
1067
1068       /* Limit it to the size of the targets ``g'' response unless we have
1069          permission from the stub to use a larger packet size.  */
1070       if (rs->explicit_packet_size == 0
1071           && rsa->actual_register_packet_size > 0
1072           && what_they_get > rsa->actual_register_packet_size)
1073         what_they_get = rsa->actual_register_packet_size;
1074     }
1075   if (what_they_get < MIN_MEMORY_PACKET_SIZE)
1076     what_they_get = MIN_MEMORY_PACKET_SIZE;
1077
1078   /* Make sure there is room in the global buffer for this packet
1079      (including its trailing NUL byte).  */
1080   if (rs->buf_size < what_they_get + 1)
1081     {
1082       rs->buf_size = 2 * what_they_get;
1083       rs->buf = (char *) xrealloc (rs->buf, 2 * what_they_get);
1084     }
1085
1086   return what_they_get;
1087 }
1088
1089 /* Update the size of a read/write packet.  If they user wants
1090    something really big then do a sanity check.  */
1091
1092 static void
1093 set_memory_packet_size (char *args, struct memory_packet_config *config)
1094 {
1095   int fixed_p = config->fixed_p;
1096   long size = config->size;
1097
1098   if (args == NULL)
1099     error (_("Argument required (integer, `fixed' or `limited')."));
1100   else if (strcmp (args, "hard") == 0
1101       || strcmp (args, "fixed") == 0)
1102     fixed_p = 1;
1103   else if (strcmp (args, "soft") == 0
1104            || strcmp (args, "limit") == 0)
1105     fixed_p = 0;
1106   else
1107     {
1108       char *end;
1109
1110       size = strtoul (args, &end, 0);
1111       if (args == end)
1112         error (_("Invalid %s (bad syntax)."), config->name);
1113
1114       /* Instead of explicitly capping the size of a packet to or
1115          disallowing it, the user is allowed to set the size to
1116          something arbitrarily large.  */
1117     }
1118
1119   /* So that the query shows the correct value.  */
1120   if (size <= 0)
1121     size = DEFAULT_MAX_MEMORY_PACKET_SIZE;
1122
1123   /* Extra checks?  */
1124   if (fixed_p && !config->fixed_p)
1125     {
1126       if (! query (_("The target may not be able to correctly handle a %s\n"
1127                    "of %ld bytes. Change the packet size? "),
1128                    config->name, size))
1129         error (_("Packet size not changed."));
1130     }
1131   /* Update the config.  */
1132   config->fixed_p = fixed_p;
1133   config->size = size;
1134 }
1135
1136 static void
1137 show_memory_packet_size (struct memory_packet_config *config)
1138 {
1139   printf_filtered (_("The %s is %ld. "), config->name, config->size);
1140   if (config->fixed_p)
1141     printf_filtered (_("Packets are fixed at %ld bytes.\n"),
1142                      get_memory_packet_size (config));
1143   else
1144     printf_filtered (_("Packets are limited to %ld bytes.\n"),
1145                      get_memory_packet_size (config));
1146 }
1147
1148 static struct memory_packet_config memory_write_packet_config =
1149 {
1150   "memory-write-packet-size",
1151 };
1152
1153 static void
1154 set_memory_write_packet_size (char *args, int from_tty)
1155 {
1156   set_memory_packet_size (args, &memory_write_packet_config);
1157 }
1158
1159 static void
1160 show_memory_write_packet_size (char *args, int from_tty)
1161 {
1162   show_memory_packet_size (&memory_write_packet_config);
1163 }
1164
1165 static long
1166 get_memory_write_packet_size (void)
1167 {
1168   return get_memory_packet_size (&memory_write_packet_config);
1169 }
1170
1171 static struct memory_packet_config memory_read_packet_config =
1172 {
1173   "memory-read-packet-size",
1174 };
1175
1176 static void
1177 set_memory_read_packet_size (char *args, int from_tty)
1178 {
1179   set_memory_packet_size (args, &memory_read_packet_config);
1180 }
1181
1182 static void
1183 show_memory_read_packet_size (char *args, int from_tty)
1184 {
1185   show_memory_packet_size (&memory_read_packet_config);
1186 }
1187
1188 static long
1189 get_memory_read_packet_size (void)
1190 {
1191   long size = get_memory_packet_size (&memory_read_packet_config);
1192
1193   /* FIXME: cagney/1999-11-07: Functions like getpkt() need to get an
1194      extra buffer size argument before the memory read size can be
1195      increased beyond this.  */
1196   if (size > get_remote_packet_size ())
1197     size = get_remote_packet_size ();
1198   return size;
1199 }
1200
1201 \f
1202 /* Generic configuration support for packets the stub optionally
1203    supports.  Allows the user to specify the use of the packet as well
1204    as allowing GDB to auto-detect support in the remote stub.  */
1205
1206 enum packet_support
1207   {
1208     PACKET_SUPPORT_UNKNOWN = 0,
1209     PACKET_ENABLE,
1210     PACKET_DISABLE
1211   };
1212
1213 struct packet_config
1214   {
1215     const char *name;
1216     const char *title;
1217
1218     /* If auto, GDB auto-detects support for this packet or feature,
1219        either through qSupported, or by trying the packet and looking
1220        at the response.  If true, GDB assumes the target supports this
1221        packet.  If false, the packet is disabled.  Configs that don't
1222        have an associated command always have this set to auto.  */
1223     enum auto_boolean detect;
1224
1225     /* Does the target support this packet?  */
1226     enum packet_support support;
1227   };
1228
1229 /* Analyze a packet's return value and update the packet config
1230    accordingly.  */
1231
1232 enum packet_result
1233 {
1234   PACKET_ERROR,
1235   PACKET_OK,
1236   PACKET_UNKNOWN
1237 };
1238
1239 static enum packet_support packet_config_support (struct packet_config *config);
1240 static enum packet_support packet_support (int packet);
1241
1242 static void
1243 show_packet_config_cmd (struct packet_config *config)
1244 {
1245   const char *support = "internal-error";
1246
1247   switch (packet_config_support (config))
1248     {
1249     case PACKET_ENABLE:
1250       support = "enabled";
1251       break;
1252     case PACKET_DISABLE:
1253       support = "disabled";
1254       break;
1255     case PACKET_SUPPORT_UNKNOWN:
1256       support = "unknown";
1257       break;
1258     }
1259   switch (config->detect)
1260     {
1261     case AUTO_BOOLEAN_AUTO:
1262       printf_filtered (_("Support for the `%s' packet "
1263                          "is auto-detected, currently %s.\n"),
1264                        config->name, support);
1265       break;
1266     case AUTO_BOOLEAN_TRUE:
1267     case AUTO_BOOLEAN_FALSE:
1268       printf_filtered (_("Support for the `%s' packet is currently %s.\n"),
1269                        config->name, support);
1270       break;
1271     }
1272 }
1273
1274 static void
1275 add_packet_config_cmd (struct packet_config *config, const char *name,
1276                        const char *title, int legacy)
1277 {
1278   char *set_doc;
1279   char *show_doc;
1280   char *cmd_name;
1281
1282   config->name = name;
1283   config->title = title;
1284   set_doc = xstrprintf ("Set use of remote protocol `%s' (%s) packet",
1285                         name, title);
1286   show_doc = xstrprintf ("Show current use of remote "
1287                          "protocol `%s' (%s) packet",
1288                          name, title);
1289   /* set/show TITLE-packet {auto,on,off} */
1290   cmd_name = xstrprintf ("%s-packet", title);
1291   add_setshow_auto_boolean_cmd (cmd_name, class_obscure,
1292                                 &config->detect, set_doc,
1293                                 show_doc, NULL, /* help_doc */
1294                                 NULL,
1295                                 show_remote_protocol_packet_cmd,
1296                                 &remote_set_cmdlist, &remote_show_cmdlist);
1297   /* The command code copies the documentation strings.  */
1298   xfree (set_doc);
1299   xfree (show_doc);
1300   /* set/show remote NAME-packet {auto,on,off} -- legacy.  */
1301   if (legacy)
1302     {
1303       char *legacy_name;
1304
1305       legacy_name = xstrprintf ("%s-packet", name);
1306       add_alias_cmd (legacy_name, cmd_name, class_obscure, 0,
1307                      &remote_set_cmdlist);
1308       add_alias_cmd (legacy_name, cmd_name, class_obscure, 0,
1309                      &remote_show_cmdlist);
1310     }
1311 }
1312
1313 static enum packet_result
1314 packet_check_result (const char *buf)
1315 {
1316   if (buf[0] != '\0')
1317     {
1318       /* The stub recognized the packet request.  Check that the
1319          operation succeeded.  */
1320       if (buf[0] == 'E'
1321           && isxdigit (buf[1]) && isxdigit (buf[2])
1322           && buf[3] == '\0')
1323         /* "Enn"  - definitly an error.  */
1324         return PACKET_ERROR;
1325
1326       /* Always treat "E." as an error.  This will be used for
1327          more verbose error messages, such as E.memtypes.  */
1328       if (buf[0] == 'E' && buf[1] == '.')
1329         return PACKET_ERROR;
1330
1331       /* The packet may or may not be OK.  Just assume it is.  */
1332       return PACKET_OK;
1333     }
1334   else
1335     /* The stub does not support the packet.  */
1336     return PACKET_UNKNOWN;
1337 }
1338
1339 static enum packet_result
1340 packet_ok (const char *buf, struct packet_config *config)
1341 {
1342   enum packet_result result;
1343
1344   if (config->detect != AUTO_BOOLEAN_TRUE
1345       && config->support == PACKET_DISABLE)
1346     internal_error (__FILE__, __LINE__,
1347                     _("packet_ok: attempt to use a disabled packet"));
1348
1349   result = packet_check_result (buf);
1350   switch (result)
1351     {
1352     case PACKET_OK:
1353     case PACKET_ERROR:
1354       /* The stub recognized the packet request.  */
1355       if (config->support == PACKET_SUPPORT_UNKNOWN)
1356         {
1357           if (remote_debug)
1358             fprintf_unfiltered (gdb_stdlog,
1359                                 "Packet %s (%s) is supported\n",
1360                                 config->name, config->title);
1361           config->support = PACKET_ENABLE;
1362         }
1363       break;
1364     case PACKET_UNKNOWN:
1365       /* The stub does not support the packet.  */
1366       if (config->detect == AUTO_BOOLEAN_AUTO
1367           && config->support == PACKET_ENABLE)
1368         {
1369           /* If the stub previously indicated that the packet was
1370              supported then there is a protocol error.  */
1371           error (_("Protocol error: %s (%s) conflicting enabled responses."),
1372                  config->name, config->title);
1373         }
1374       else if (config->detect == AUTO_BOOLEAN_TRUE)
1375         {
1376           /* The user set it wrong.  */
1377           error (_("Enabled packet %s (%s) not recognized by stub"),
1378                  config->name, config->title);
1379         }
1380
1381       if (remote_debug)
1382         fprintf_unfiltered (gdb_stdlog,
1383                             "Packet %s (%s) is NOT supported\n",
1384                             config->name, config->title);
1385       config->support = PACKET_DISABLE;
1386       break;
1387     }
1388
1389   return result;
1390 }
1391
1392 enum {
1393   PACKET_vCont = 0,
1394   PACKET_X,
1395   PACKET_qSymbol,
1396   PACKET_P,
1397   PACKET_p,
1398   PACKET_Z0,
1399   PACKET_Z1,
1400   PACKET_Z2,
1401   PACKET_Z3,
1402   PACKET_Z4,
1403   PACKET_vFile_setfs,
1404   PACKET_vFile_open,
1405   PACKET_vFile_pread,
1406   PACKET_vFile_pwrite,
1407   PACKET_vFile_close,
1408   PACKET_vFile_unlink,
1409   PACKET_vFile_readlink,
1410   PACKET_vFile_fstat,
1411   PACKET_qXfer_auxv,
1412   PACKET_qXfer_features,
1413   PACKET_qXfer_exec_file,
1414   PACKET_qXfer_libraries,
1415   PACKET_qXfer_libraries_svr4,
1416   PACKET_qXfer_memory_map,
1417   PACKET_qXfer_spu_read,
1418   PACKET_qXfer_spu_write,
1419   PACKET_qXfer_osdata,
1420   PACKET_qXfer_threads,
1421   PACKET_qXfer_statictrace_read,
1422   PACKET_qXfer_traceframe_info,
1423   PACKET_qXfer_uib,
1424   PACKET_qGetTIBAddr,
1425   PACKET_qGetTLSAddr,
1426   PACKET_qSupported,
1427   PACKET_qTStatus,
1428   PACKET_QPassSignals,
1429   PACKET_QCatchSyscalls,
1430   PACKET_QProgramSignals,
1431   PACKET_QStartupWithShell,
1432   PACKET_QEnvironmentHexEncoded,
1433   PACKET_QEnvironmentReset,
1434   PACKET_QEnvironmentUnset,
1435   PACKET_qCRC,
1436   PACKET_qSearch_memory,
1437   PACKET_vAttach,
1438   PACKET_vRun,
1439   PACKET_QStartNoAckMode,
1440   PACKET_vKill,
1441   PACKET_qXfer_siginfo_read,
1442   PACKET_qXfer_siginfo_write,
1443   PACKET_qAttached,
1444
1445   /* Support for conditional tracepoints.  */
1446   PACKET_ConditionalTracepoints,
1447
1448   /* Support for target-side breakpoint conditions.  */
1449   PACKET_ConditionalBreakpoints,
1450
1451   /* Support for target-side breakpoint commands.  */
1452   PACKET_BreakpointCommands,
1453
1454   /* Support for fast tracepoints.  */
1455   PACKET_FastTracepoints,
1456
1457   /* Support for static tracepoints.  */
1458   PACKET_StaticTracepoints,
1459
1460   /* Support for installing tracepoints while a trace experiment is
1461      running.  */
1462   PACKET_InstallInTrace,
1463
1464   PACKET_bc,
1465   PACKET_bs,
1466   PACKET_TracepointSource,
1467   PACKET_QAllow,
1468   PACKET_qXfer_fdpic,
1469   PACKET_QDisableRandomization,
1470   PACKET_QAgent,
1471   PACKET_QTBuffer_size,
1472   PACKET_Qbtrace_off,
1473   PACKET_Qbtrace_bts,
1474   PACKET_Qbtrace_pt,
1475   PACKET_qXfer_btrace,
1476
1477   /* Support for the QNonStop packet.  */
1478   PACKET_QNonStop,
1479
1480   /* Support for the QThreadEvents packet.  */
1481   PACKET_QThreadEvents,
1482
1483   /* Support for multi-process extensions.  */
1484   PACKET_multiprocess_feature,
1485
1486   /* Support for enabling and disabling tracepoints while a trace
1487      experiment is running.  */
1488   PACKET_EnableDisableTracepoints_feature,
1489
1490   /* Support for collecting strings using the tracenz bytecode.  */
1491   PACKET_tracenz_feature,
1492
1493   /* Support for continuing to run a trace experiment while GDB is
1494      disconnected.  */
1495   PACKET_DisconnectedTracing_feature,
1496
1497   /* Support for qXfer:libraries-svr4:read with a non-empty annex.  */
1498   PACKET_augmented_libraries_svr4_read_feature,
1499
1500   /* Support for the qXfer:btrace-conf:read packet.  */
1501   PACKET_qXfer_btrace_conf,
1502
1503   /* Support for the Qbtrace-conf:bts:size packet.  */
1504   PACKET_Qbtrace_conf_bts_size,
1505
1506   /* Support for swbreak+ feature.  */
1507   PACKET_swbreak_feature,
1508
1509   /* Support for hwbreak+ feature.  */
1510   PACKET_hwbreak_feature,
1511
1512   /* Support for fork events.  */
1513   PACKET_fork_event_feature,
1514
1515   /* Support for vfork events.  */
1516   PACKET_vfork_event_feature,
1517
1518   /* Support for the Qbtrace-conf:pt:size packet.  */
1519   PACKET_Qbtrace_conf_pt_size,
1520
1521   /* Support for exec events.  */
1522   PACKET_exec_event_feature,
1523
1524   /* Support for query supported vCont actions.  */
1525   PACKET_vContSupported,
1526
1527   /* Support remote CTRL-C.  */
1528   PACKET_vCtrlC,
1529
1530   /* Support TARGET_WAITKIND_NO_RESUMED.  */
1531   PACKET_no_resumed,
1532
1533   PACKET_MAX
1534 };
1535
1536 static struct packet_config remote_protocol_packets[PACKET_MAX];
1537
1538 /* Returns the packet's corresponding "set remote foo-packet" command
1539    state.  See struct packet_config for more details.  */
1540
1541 static enum auto_boolean
1542 packet_set_cmd_state (int packet)
1543 {
1544   return remote_protocol_packets[packet].detect;
1545 }
1546
1547 /* Returns whether a given packet or feature is supported.  This takes
1548    into account the state of the corresponding "set remote foo-packet"
1549    command, which may be used to bypass auto-detection.  */
1550
1551 static enum packet_support
1552 packet_config_support (struct packet_config *config)
1553 {
1554   switch (config->detect)
1555     {
1556     case AUTO_BOOLEAN_TRUE:
1557       return PACKET_ENABLE;
1558     case AUTO_BOOLEAN_FALSE:
1559       return PACKET_DISABLE;
1560     case AUTO_BOOLEAN_AUTO:
1561       return config->support;
1562     default:
1563       gdb_assert_not_reached (_("bad switch"));
1564     }
1565 }
1566
1567 /* Same as packet_config_support, but takes the packet's enum value as
1568    argument.  */
1569
1570 static enum packet_support
1571 packet_support (int packet)
1572 {
1573   struct packet_config *config = &remote_protocol_packets[packet];
1574
1575   return packet_config_support (config);
1576 }
1577
1578 static void
1579 show_remote_protocol_packet_cmd (struct ui_file *file, int from_tty,
1580                                  struct cmd_list_element *c,
1581                                  const char *value)
1582 {
1583   struct packet_config *packet;
1584
1585   for (packet = remote_protocol_packets;
1586        packet < &remote_protocol_packets[PACKET_MAX];
1587        packet++)
1588     {
1589       if (&packet->detect == c->var)
1590         {
1591           show_packet_config_cmd (packet);
1592           return;
1593         }
1594     }
1595   internal_error (__FILE__, __LINE__, _("Could not find config for %s"),
1596                   c->name);
1597 }
1598
1599 /* Should we try one of the 'Z' requests?  */
1600
1601 enum Z_packet_type
1602 {
1603   Z_PACKET_SOFTWARE_BP,
1604   Z_PACKET_HARDWARE_BP,
1605   Z_PACKET_WRITE_WP,
1606   Z_PACKET_READ_WP,
1607   Z_PACKET_ACCESS_WP,
1608   NR_Z_PACKET_TYPES
1609 };
1610
1611 /* For compatibility with older distributions.  Provide a ``set remote
1612    Z-packet ...'' command that updates all the Z packet types.  */
1613
1614 static enum auto_boolean remote_Z_packet_detect;
1615
1616 static void
1617 set_remote_protocol_Z_packet_cmd (char *args, int from_tty,
1618                                   struct cmd_list_element *c)
1619 {
1620   int i;
1621
1622   for (i = 0; i < NR_Z_PACKET_TYPES; i++)
1623     remote_protocol_packets[PACKET_Z0 + i].detect = remote_Z_packet_detect;
1624 }
1625
1626 static void
1627 show_remote_protocol_Z_packet_cmd (struct ui_file *file, int from_tty,
1628                                    struct cmd_list_element *c,
1629                                    const char *value)
1630 {
1631   int i;
1632
1633   for (i = 0; i < NR_Z_PACKET_TYPES; i++)
1634     {
1635       show_packet_config_cmd (&remote_protocol_packets[PACKET_Z0 + i]);
1636     }
1637 }
1638
1639 /* Returns true if the multi-process extensions are in effect.  */
1640
1641 static int
1642 remote_multi_process_p (struct remote_state *rs)
1643 {
1644   return packet_support (PACKET_multiprocess_feature) == PACKET_ENABLE;
1645 }
1646
1647 /* Returns true if fork events are supported.  */
1648
1649 static int
1650 remote_fork_event_p (struct remote_state *rs)
1651 {
1652   return packet_support (PACKET_fork_event_feature) == PACKET_ENABLE;
1653 }
1654
1655 /* Returns true if vfork events are supported.  */
1656
1657 static int
1658 remote_vfork_event_p (struct remote_state *rs)
1659 {
1660   return packet_support (PACKET_vfork_event_feature) == PACKET_ENABLE;
1661 }
1662
1663 /* Returns true if exec events are supported.  */
1664
1665 static int
1666 remote_exec_event_p (struct remote_state *rs)
1667 {
1668   return packet_support (PACKET_exec_event_feature) == PACKET_ENABLE;
1669 }
1670
1671 /* Insert fork catchpoint target routine.  If fork events are enabled
1672    then return success, nothing more to do.  */
1673
1674 static int
1675 remote_insert_fork_catchpoint (struct target_ops *ops, int pid)
1676 {
1677   struct remote_state *rs = get_remote_state ();
1678
1679   return !remote_fork_event_p (rs);
1680 }
1681
1682 /* Remove fork catchpoint target routine.  Nothing to do, just
1683    return success.  */
1684
1685 static int
1686 remote_remove_fork_catchpoint (struct target_ops *ops, int pid)
1687 {
1688   return 0;
1689 }
1690
1691 /* Insert vfork catchpoint target routine.  If vfork events are enabled
1692    then return success, nothing more to do.  */
1693
1694 static int
1695 remote_insert_vfork_catchpoint (struct target_ops *ops, int pid)
1696 {
1697   struct remote_state *rs = get_remote_state ();
1698
1699   return !remote_vfork_event_p (rs);
1700 }
1701
1702 /* Remove vfork catchpoint target routine.  Nothing to do, just
1703    return success.  */
1704
1705 static int
1706 remote_remove_vfork_catchpoint (struct target_ops *ops, int pid)
1707 {
1708   return 0;
1709 }
1710
1711 /* Insert exec catchpoint target routine.  If exec events are
1712    enabled, just return success.  */
1713
1714 static int
1715 remote_insert_exec_catchpoint (struct target_ops *ops, int pid)
1716 {
1717   struct remote_state *rs = get_remote_state ();
1718
1719   return !remote_exec_event_p (rs);
1720 }
1721
1722 /* Remove exec catchpoint target routine.  Nothing to do, just
1723    return success.  */
1724
1725 static int
1726 remote_remove_exec_catchpoint (struct target_ops *ops, int pid)
1727 {
1728   return 0;
1729 }
1730
1731 \f
1732 /* Asynchronous signal handle registered as event loop source for
1733    when we have pending events ready to be passed to the core.  */
1734
1735 static struct async_event_handler *remote_async_inferior_event_token;
1736
1737 \f
1738
1739 static ptid_t magic_null_ptid;
1740 static ptid_t not_sent_ptid;
1741 static ptid_t any_thread_ptid;
1742
1743 /* Find out if the stub attached to PID (and hence GDB should offer to
1744    detach instead of killing it when bailing out).  */
1745
1746 static int
1747 remote_query_attached (int pid)
1748 {
1749   struct remote_state *rs = get_remote_state ();
1750   size_t size = get_remote_packet_size ();
1751
1752   if (packet_support (PACKET_qAttached) == PACKET_DISABLE)
1753     return 0;
1754
1755   if (remote_multi_process_p (rs))
1756     xsnprintf (rs->buf, size, "qAttached:%x", pid);
1757   else
1758     xsnprintf (rs->buf, size, "qAttached");
1759
1760   putpkt (rs->buf);
1761   getpkt (&rs->buf, &rs->buf_size, 0);
1762
1763   switch (packet_ok (rs->buf,
1764                      &remote_protocol_packets[PACKET_qAttached]))
1765     {
1766     case PACKET_OK:
1767       if (strcmp (rs->buf, "1") == 0)
1768         return 1;
1769       break;
1770     case PACKET_ERROR:
1771       warning (_("Remote failure reply: %s"), rs->buf);
1772       break;
1773     case PACKET_UNKNOWN:
1774       break;
1775     }
1776
1777   return 0;
1778 }
1779
1780 /* Add PID to GDB's inferior table.  If FAKE_PID_P is true, then PID
1781    has been invented by GDB, instead of reported by the target.  Since
1782    we can be connected to a remote system before before knowing about
1783    any inferior, mark the target with execution when we find the first
1784    inferior.  If ATTACHED is 1, then we had just attached to this
1785    inferior.  If it is 0, then we just created this inferior.  If it
1786    is -1, then try querying the remote stub to find out if it had
1787    attached to the inferior or not.  If TRY_OPEN_EXEC is true then
1788    attempt to open this inferior's executable as the main executable
1789    if no main executable is open already.  */
1790
1791 static struct inferior *
1792 remote_add_inferior (int fake_pid_p, int pid, int attached,
1793                      int try_open_exec)
1794 {
1795   struct inferior *inf;
1796
1797   /* Check whether this process we're learning about is to be
1798      considered attached, or if is to be considered to have been
1799      spawned by the stub.  */
1800   if (attached == -1)
1801     attached = remote_query_attached (pid);
1802
1803   if (gdbarch_has_global_solist (target_gdbarch ()))
1804     {
1805       /* If the target shares code across all inferiors, then every
1806          attach adds a new inferior.  */
1807       inf = add_inferior (pid);
1808
1809       /* ... and every inferior is bound to the same program space.
1810          However, each inferior may still have its own address
1811          space.  */
1812       inf->aspace = maybe_new_address_space ();
1813       inf->pspace = current_program_space;
1814     }
1815   else
1816     {
1817       /* In the traditional debugging scenario, there's a 1-1 match
1818          between program/address spaces.  We simply bind the inferior
1819          to the program space's address space.  */
1820       inf = current_inferior ();
1821       inferior_appeared (inf, pid);
1822     }
1823
1824   inf->attach_flag = attached;
1825   inf->fake_pid_p = fake_pid_p;
1826
1827   /* If no main executable is currently open then attempt to
1828      open the file that was executed to create this inferior.  */
1829   if (try_open_exec && get_exec_file (0) == NULL)
1830     exec_file_locate_attach (pid, 0, 1);
1831
1832   return inf;
1833 }
1834
1835 static struct private_thread_info *
1836   get_private_info_thread (struct thread_info *info);
1837
1838 /* Add thread PTID to GDB's thread list.  Tag it as executing/running
1839    according to RUNNING.  */
1840
1841 static void
1842 remote_add_thread (ptid_t ptid, int running, int executing)
1843 {
1844   struct remote_state *rs = get_remote_state ();
1845   struct thread_info *thread;
1846
1847   /* GDB historically didn't pull threads in the initial connection
1848      setup.  If the remote target doesn't even have a concept of
1849      threads (e.g., a bare-metal target), even if internally we
1850      consider that a single-threaded target, mentioning a new thread
1851      might be confusing to the user.  Be silent then, preserving the
1852      age old behavior.  */
1853   if (rs->starting_up)
1854     thread = add_thread_silent (ptid);
1855   else
1856     thread = add_thread (ptid);
1857
1858   get_private_info_thread (thread)->vcont_resumed = executing;
1859   set_executing (ptid, executing);
1860   set_running (ptid, running);
1861 }
1862
1863 /* Come here when we learn about a thread id from the remote target.
1864    It may be the first time we hear about such thread, so take the
1865    opportunity to add it to GDB's thread list.  In case this is the
1866    first time we're noticing its corresponding inferior, add it to
1867    GDB's inferior list as well.  EXECUTING indicates whether the
1868    thread is (internally) executing or stopped.  */
1869
1870 static void
1871 remote_notice_new_inferior (ptid_t currthread, int executing)
1872 {
1873   /* In non-stop mode, we assume new found threads are (externally)
1874      running until proven otherwise with a stop reply.  In all-stop,
1875      we can only get here if all threads are stopped.  */
1876   int running = target_is_non_stop_p () ? 1 : 0;
1877
1878   /* If this is a new thread, add it to GDB's thread list.
1879      If we leave it up to WFI to do this, bad things will happen.  */
1880
1881   if (in_thread_list (currthread) && is_exited (currthread))
1882     {
1883       /* We're seeing an event on a thread id we knew had exited.
1884          This has to be a new thread reusing the old id.  Add it.  */
1885       remote_add_thread (currthread, running, executing);
1886       return;
1887     }
1888
1889   if (!in_thread_list (currthread))
1890     {
1891       struct inferior *inf = NULL;
1892       int pid = ptid_get_pid (currthread);
1893
1894       if (ptid_is_pid (inferior_ptid)
1895           && pid == ptid_get_pid (inferior_ptid))
1896         {
1897           /* inferior_ptid has no thread member yet.  This can happen
1898              with the vAttach -> remote_wait,"TAAthread:" path if the
1899              stub doesn't support qC.  This is the first stop reported
1900              after an attach, so this is the main thread.  Update the
1901              ptid in the thread list.  */
1902           if (in_thread_list (pid_to_ptid (pid)))
1903             thread_change_ptid (inferior_ptid, currthread);
1904           else
1905             {
1906               remote_add_thread (currthread, running, executing);
1907               inferior_ptid = currthread;
1908             }
1909           return;
1910         }
1911
1912       if (ptid_equal (magic_null_ptid, inferior_ptid))
1913         {
1914           /* inferior_ptid is not set yet.  This can happen with the
1915              vRun -> remote_wait,"TAAthread:" path if the stub
1916              doesn't support qC.  This is the first stop reported
1917              after an attach, so this is the main thread.  Update the
1918              ptid in the thread list.  */
1919           thread_change_ptid (inferior_ptid, currthread);
1920           return;
1921         }
1922
1923       /* When connecting to a target remote, or to a target
1924          extended-remote which already was debugging an inferior, we
1925          may not know about it yet.  Add it before adding its child
1926          thread, so notifications are emitted in a sensible order.  */
1927       if (!in_inferior_list (ptid_get_pid (currthread)))
1928         {
1929           struct remote_state *rs = get_remote_state ();
1930           int fake_pid_p = !remote_multi_process_p (rs);
1931
1932           inf = remote_add_inferior (fake_pid_p,
1933                                      ptid_get_pid (currthread), -1, 1);
1934         }
1935
1936       /* This is really a new thread.  Add it.  */
1937       remote_add_thread (currthread, running, executing);
1938
1939       /* If we found a new inferior, let the common code do whatever
1940          it needs to with it (e.g., read shared libraries, insert
1941          breakpoints), unless we're just setting up an all-stop
1942          connection.  */
1943       if (inf != NULL)
1944         {
1945           struct remote_state *rs = get_remote_state ();
1946
1947           if (!rs->starting_up)
1948             notice_new_inferior (currthread, executing, 0);
1949         }
1950     }
1951 }
1952
1953 /* Return THREAD's private thread data, creating it if necessary.  */
1954
1955 static struct private_thread_info *
1956 get_private_info_thread (struct thread_info *thread)
1957 {
1958   gdb_assert (thread != NULL);
1959
1960   if (thread->priv == NULL)
1961     {
1962       struct private_thread_info *priv = XNEW (struct private_thread_info);
1963
1964       thread->private_dtor = free_private_thread_info;
1965       thread->priv = priv;
1966
1967       priv->core = -1;
1968       priv->extra = NULL;
1969       priv->name = NULL;
1970       priv->name = NULL;
1971       priv->last_resume_step = 0;
1972       priv->last_resume_sig = GDB_SIGNAL_0;
1973       priv->vcont_resumed = 0;
1974     }
1975
1976   return thread->priv;
1977 }
1978
1979 /* Return PTID's private thread data, creating it if necessary.  */
1980
1981 static struct private_thread_info *
1982 get_private_info_ptid (ptid_t ptid)
1983 {
1984   struct thread_info *info = find_thread_ptid (ptid);
1985
1986   return get_private_info_thread (info);
1987 }
1988
1989 /* Call this function as a result of
1990    1) A halt indication (T packet) containing a thread id
1991    2) A direct query of currthread
1992    3) Successful execution of set thread */
1993
1994 static void
1995 record_currthread (struct remote_state *rs, ptid_t currthread)
1996 {
1997   rs->general_thread = currthread;
1998 }
1999
2000 /* If 'QPassSignals' is supported, tell the remote stub what signals
2001    it can simply pass through to the inferior without reporting.  */
2002
2003 static void
2004 remote_pass_signals (struct target_ops *self,
2005                      int numsigs, unsigned char *pass_signals)
2006 {
2007   if (packet_support (PACKET_QPassSignals) != PACKET_DISABLE)
2008     {
2009       char *pass_packet, *p;
2010       int count = 0, i;
2011       struct remote_state *rs = get_remote_state ();
2012
2013       gdb_assert (numsigs < 256);
2014       for (i = 0; i < numsigs; i++)
2015         {
2016           if (pass_signals[i])
2017             count++;
2018         }
2019       pass_packet = (char *) xmalloc (count * 3 + strlen ("QPassSignals:") + 1);
2020       strcpy (pass_packet, "QPassSignals:");
2021       p = pass_packet + strlen (pass_packet);
2022       for (i = 0; i < numsigs; i++)
2023         {
2024           if (pass_signals[i])
2025             {
2026               if (i >= 16)
2027                 *p++ = tohex (i >> 4);
2028               *p++ = tohex (i & 15);
2029               if (count)
2030                 *p++ = ';';
2031               else
2032                 break;
2033               count--;
2034             }
2035         }
2036       *p = 0;
2037       if (!rs->last_pass_packet || strcmp (rs->last_pass_packet, pass_packet))
2038         {
2039           putpkt (pass_packet);
2040           getpkt (&rs->buf, &rs->buf_size, 0);
2041           packet_ok (rs->buf, &remote_protocol_packets[PACKET_QPassSignals]);
2042           if (rs->last_pass_packet)
2043             xfree (rs->last_pass_packet);
2044           rs->last_pass_packet = pass_packet;
2045         }
2046       else
2047         xfree (pass_packet);
2048     }
2049 }
2050
2051 /* If 'QCatchSyscalls' is supported, tell the remote stub
2052    to report syscalls to GDB.  */
2053
2054 static int
2055 remote_set_syscall_catchpoint (struct target_ops *self,
2056                                int pid, int needed, int any_count,
2057                                int table_size, int *table)
2058 {
2059   char *catch_packet;
2060   enum packet_result result;
2061   int n_sysno = 0;
2062
2063   if (packet_support (PACKET_QCatchSyscalls) == PACKET_DISABLE)
2064     {
2065       /* Not supported.  */
2066       return 1;
2067     }
2068
2069   if (needed && !any_count)
2070     {
2071       int i;
2072
2073       /* Count how many syscalls are to be caught (table[sysno] != 0).  */
2074       for (i = 0; i < table_size; i++)
2075         {
2076           if (table[i] != 0)
2077             n_sysno++;
2078         }
2079     }
2080
2081   if (remote_debug)
2082     {
2083       fprintf_unfiltered (gdb_stdlog,
2084                           "remote_set_syscall_catchpoint "
2085                           "pid %d needed %d any_count %d n_sysno %d\n",
2086                           pid, needed, any_count, n_sysno);
2087     }
2088
2089   if (needed)
2090     {
2091       /* Prepare a packet with the sysno list, assuming max 8+1
2092          characters for a sysno.  If the resulting packet size is too
2093          big, fallback on the non-selective packet.  */
2094       const int maxpktsz = strlen ("QCatchSyscalls:1") + n_sysno * 9 + 1;
2095
2096       catch_packet = (char *) xmalloc (maxpktsz);
2097       strcpy (catch_packet, "QCatchSyscalls:1");
2098       if (!any_count)
2099         {
2100           int i;
2101           char *p;
2102
2103           p = catch_packet;
2104           p += strlen (p);
2105
2106           /* Add in catch_packet each syscall to be caught (table[i] != 0).  */
2107           for (i = 0; i < table_size; i++)
2108             {
2109               if (table[i] != 0)
2110                 p += xsnprintf (p, catch_packet + maxpktsz - p, ";%x", i);
2111             }
2112         }
2113       if (strlen (catch_packet) > get_remote_packet_size ())
2114         {
2115           /* catch_packet too big.  Fallback to less efficient
2116              non selective mode, with GDB doing the filtering.  */
2117           catch_packet[sizeof ("QCatchSyscalls:1") - 1] = 0;
2118         }
2119     }
2120   else
2121     catch_packet = xstrdup ("QCatchSyscalls:0");
2122
2123   {
2124     struct cleanup *old_chain = make_cleanup (xfree, catch_packet);
2125     struct remote_state *rs = get_remote_state ();
2126
2127     putpkt (catch_packet);
2128     getpkt (&rs->buf, &rs->buf_size, 0);
2129     result = packet_ok (rs->buf, &remote_protocol_packets[PACKET_QCatchSyscalls]);
2130     do_cleanups (old_chain);
2131     if (result == PACKET_OK)
2132       return 0;
2133     else
2134       return -1;
2135   }
2136 }
2137
2138 /* If 'QProgramSignals' is supported, tell the remote stub what
2139    signals it should pass through to the inferior when detaching.  */
2140
2141 static void
2142 remote_program_signals (struct target_ops *self,
2143                         int numsigs, unsigned char *signals)
2144 {
2145   if (packet_support (PACKET_QProgramSignals) != PACKET_DISABLE)
2146     {
2147       char *packet, *p;
2148       int count = 0, i;
2149       struct remote_state *rs = get_remote_state ();
2150
2151       gdb_assert (numsigs < 256);
2152       for (i = 0; i < numsigs; i++)
2153         {
2154           if (signals[i])
2155             count++;
2156         }
2157       packet = (char *) xmalloc (count * 3 + strlen ("QProgramSignals:") + 1);
2158       strcpy (packet, "QProgramSignals:");
2159       p = packet + strlen (packet);
2160       for (i = 0; i < numsigs; i++)
2161         {
2162           if (signal_pass_state (i))
2163             {
2164               if (i >= 16)
2165                 *p++ = tohex (i >> 4);
2166               *p++ = tohex (i & 15);
2167               if (count)
2168                 *p++ = ';';
2169               else
2170                 break;
2171               count--;
2172             }
2173         }
2174       *p = 0;
2175       if (!rs->last_program_signals_packet
2176           || strcmp (rs->last_program_signals_packet, packet) != 0)
2177         {
2178           putpkt (packet);
2179           getpkt (&rs->buf, &rs->buf_size, 0);
2180           packet_ok (rs->buf, &remote_protocol_packets[PACKET_QProgramSignals]);
2181           xfree (rs->last_program_signals_packet);
2182           rs->last_program_signals_packet = packet;
2183         }
2184       else
2185         xfree (packet);
2186     }
2187 }
2188
2189 /* If PTID is MAGIC_NULL_PTID, don't set any thread.  If PTID is
2190    MINUS_ONE_PTID, set the thread to -1, so the stub returns the
2191    thread.  If GEN is set, set the general thread, if not, then set
2192    the step/continue thread.  */
2193 static void
2194 set_thread (ptid_t ptid, int gen)
2195 {
2196   struct remote_state *rs = get_remote_state ();
2197   ptid_t state = gen ? rs->general_thread : rs->continue_thread;
2198   char *buf = rs->buf;
2199   char *endbuf = rs->buf + get_remote_packet_size ();
2200
2201   if (ptid_equal (state, ptid))
2202     return;
2203
2204   *buf++ = 'H';
2205   *buf++ = gen ? 'g' : 'c';
2206   if (ptid_equal (ptid, magic_null_ptid))
2207     xsnprintf (buf, endbuf - buf, "0");
2208   else if (ptid_equal (ptid, any_thread_ptid))
2209     xsnprintf (buf, endbuf - buf, "0");
2210   else if (ptid_equal (ptid, minus_one_ptid))
2211     xsnprintf (buf, endbuf - buf, "-1");
2212   else
2213     write_ptid (buf, endbuf, ptid);
2214   putpkt (rs->buf);
2215   getpkt (&rs->buf, &rs->buf_size, 0);
2216   if (gen)
2217     rs->general_thread = ptid;
2218   else
2219     rs->continue_thread = ptid;
2220 }
2221
2222 static void
2223 set_general_thread (ptid_t ptid)
2224 {
2225   set_thread (ptid, 1);
2226 }
2227
2228 static void
2229 set_continue_thread (ptid_t ptid)
2230 {
2231   set_thread (ptid, 0);
2232 }
2233
2234 /* Change the remote current process.  Which thread within the process
2235    ends up selected isn't important, as long as it is the same process
2236    as what INFERIOR_PTID points to.
2237
2238    This comes from that fact that there is no explicit notion of
2239    "selected process" in the protocol.  The selected process for
2240    general operations is the process the selected general thread
2241    belongs to.  */
2242
2243 static void
2244 set_general_process (void)
2245 {
2246   struct remote_state *rs = get_remote_state ();
2247
2248   /* If the remote can't handle multiple processes, don't bother.  */
2249   if (!remote_multi_process_p (rs))
2250     return;
2251
2252   /* We only need to change the remote current thread if it's pointing
2253      at some other process.  */
2254   if (ptid_get_pid (rs->general_thread) != ptid_get_pid (inferior_ptid))
2255     set_general_thread (inferior_ptid);
2256 }
2257
2258 \f
2259 /* Return nonzero if this is the main thread that we made up ourselves
2260    to model non-threaded targets as single-threaded.  */
2261
2262 static int
2263 remote_thread_always_alive (struct target_ops *ops, ptid_t ptid)
2264 {
2265   if (ptid_equal (ptid, magic_null_ptid))
2266     /* The main thread is always alive.  */
2267     return 1;
2268
2269   if (ptid_get_pid (ptid) != 0 && ptid_get_lwp (ptid) == 0)
2270     /* The main thread is always alive.  This can happen after a
2271        vAttach, if the remote side doesn't support
2272        multi-threading.  */
2273     return 1;
2274
2275   return 0;
2276 }
2277
2278 /* Return nonzero if the thread PTID is still alive on the remote
2279    system.  */
2280
2281 static int
2282 remote_thread_alive (struct target_ops *ops, ptid_t ptid)
2283 {
2284   struct remote_state *rs = get_remote_state ();
2285   char *p, *endp;
2286
2287   /* Check if this is a thread that we made up ourselves to model
2288      non-threaded targets as single-threaded.  */
2289   if (remote_thread_always_alive (ops, ptid))
2290     return 1;
2291
2292   p = rs->buf;
2293   endp = rs->buf + get_remote_packet_size ();
2294
2295   *p++ = 'T';
2296   write_ptid (p, endp, ptid);
2297
2298   putpkt (rs->buf);
2299   getpkt (&rs->buf, &rs->buf_size, 0);
2300   return (rs->buf[0] == 'O' && rs->buf[1] == 'K');
2301 }
2302
2303 /* Return a pointer to a thread name if we know it and NULL otherwise.
2304    The thread_info object owns the memory for the name.  */
2305
2306 static const char *
2307 remote_thread_name (struct target_ops *ops, struct thread_info *info)
2308 {
2309   if (info->priv != NULL)
2310     return info->priv->name;
2311
2312   return NULL;
2313 }
2314
2315 /* About these extended threadlist and threadinfo packets.  They are
2316    variable length packets but, the fields within them are often fixed
2317    length.  They are redundent enough to send over UDP as is the
2318    remote protocol in general.  There is a matching unit test module
2319    in libstub.  */
2320
2321 /* WARNING: This threadref data structure comes from the remote O.S.,
2322    libstub protocol encoding, and remote.c.  It is not particularly
2323    changable.  */
2324
2325 /* Right now, the internal structure is int. We want it to be bigger.
2326    Plan to fix this.  */
2327
2328 typedef int gdb_threadref;      /* Internal GDB thread reference.  */
2329
2330 /* gdb_ext_thread_info is an internal GDB data structure which is
2331    equivalent to the reply of the remote threadinfo packet.  */
2332
2333 struct gdb_ext_thread_info
2334   {
2335     threadref threadid;         /* External form of thread reference.  */
2336     int active;                 /* Has state interesting to GDB?
2337                                    regs, stack.  */
2338     char display[256];          /* Brief state display, name,
2339                                    blocked/suspended.  */
2340     char shortname[32];         /* To be used to name threads.  */
2341     char more_display[256];     /* Long info, statistics, queue depth,
2342                                    whatever.  */
2343   };
2344
2345 /* The volume of remote transfers can be limited by submitting
2346    a mask containing bits specifying the desired information.
2347    Use a union of these values as the 'selection' parameter to
2348    get_thread_info.  FIXME: Make these TAG names more thread specific.  */
2349
2350 #define TAG_THREADID 1
2351 #define TAG_EXISTS 2
2352 #define TAG_DISPLAY 4
2353 #define TAG_THREADNAME 8
2354 #define TAG_MOREDISPLAY 16
2355
2356 #define BUF_THREAD_ID_SIZE (OPAQUETHREADBYTES * 2)
2357
2358 static char *unpack_nibble (char *buf, int *val);
2359
2360 static char *unpack_byte (char *buf, int *value);
2361
2362 static char *pack_int (char *buf, int value);
2363
2364 static char *unpack_int (char *buf, int *value);
2365
2366 static char *unpack_string (char *src, char *dest, int length);
2367
2368 static char *pack_threadid (char *pkt, threadref *id);
2369
2370 static char *unpack_threadid (char *inbuf, threadref *id);
2371
2372 void int_to_threadref (threadref *id, int value);
2373
2374 static int threadref_to_int (threadref *ref);
2375
2376 static void copy_threadref (threadref *dest, threadref *src);
2377
2378 static int threadmatch (threadref *dest, threadref *src);
2379
2380 static char *pack_threadinfo_request (char *pkt, int mode,
2381                                       threadref *id);
2382
2383 static int remote_unpack_thread_info_response (char *pkt,
2384                                                threadref *expectedref,
2385                                                struct gdb_ext_thread_info
2386                                                *info);
2387
2388
2389 static int remote_get_threadinfo (threadref *threadid,
2390                                   int fieldset, /*TAG mask */
2391                                   struct gdb_ext_thread_info *info);
2392
2393 static char *pack_threadlist_request (char *pkt, int startflag,
2394                                       int threadcount,
2395                                       threadref *nextthread);
2396
2397 static int parse_threadlist_response (char *pkt,
2398                                       int result_limit,
2399                                       threadref *original_echo,
2400                                       threadref *resultlist,
2401                                       int *doneflag);
2402
2403 static int remote_get_threadlist (int startflag,
2404                                   threadref *nextthread,
2405                                   int result_limit,
2406                                   int *done,
2407                                   int *result_count,
2408                                   threadref *threadlist);
2409
2410 typedef int (*rmt_thread_action) (threadref *ref, void *context);
2411
2412 static int remote_threadlist_iterator (rmt_thread_action stepfunction,
2413                                        void *context, int looplimit);
2414
2415 static int remote_newthread_step (threadref *ref, void *context);
2416
2417
2418 /* Write a PTID to BUF.  ENDBUF points to one-passed-the-end of the
2419    buffer we're allowed to write to.  Returns
2420    BUF+CHARACTERS_WRITTEN.  */
2421
2422 static char *
2423 write_ptid (char *buf, const char *endbuf, ptid_t ptid)
2424 {
2425   int pid, tid;
2426   struct remote_state *rs = get_remote_state ();
2427
2428   if (remote_multi_process_p (rs))
2429     {
2430       pid = ptid_get_pid (ptid);
2431       if (pid < 0)
2432         buf += xsnprintf (buf, endbuf - buf, "p-%x.", -pid);
2433       else
2434         buf += xsnprintf (buf, endbuf - buf, "p%x.", pid);
2435     }
2436   tid = ptid_get_lwp (ptid);
2437   if (tid < 0)
2438     buf += xsnprintf (buf, endbuf - buf, "-%x", -tid);
2439   else
2440     buf += xsnprintf (buf, endbuf - buf, "%x", tid);
2441
2442   return buf;
2443 }
2444
2445 /* Extract a PTID from BUF.  If non-null, OBUF is set to the to one
2446    passed the last parsed char.  Returns null_ptid on error.  */
2447
2448 static ptid_t
2449 read_ptid (char *buf, char **obuf)
2450 {
2451   char *p = buf;
2452   char *pp;
2453   ULONGEST pid = 0, tid = 0;
2454
2455   if (*p == 'p')
2456     {
2457       /* Multi-process ptid.  */
2458       pp = unpack_varlen_hex (p + 1, &pid);
2459       if (*pp != '.')
2460         error (_("invalid remote ptid: %s"), p);
2461
2462       p = pp;
2463       pp = unpack_varlen_hex (p + 1, &tid);
2464       if (obuf)
2465         *obuf = pp;
2466       return ptid_build (pid, tid, 0);
2467     }
2468
2469   /* No multi-process.  Just a tid.  */
2470   pp = unpack_varlen_hex (p, &tid);
2471
2472   /* Return null_ptid when no thread id is found.  */
2473   if (p == pp)
2474     {
2475       if (obuf)
2476         *obuf = pp;
2477       return null_ptid;
2478     }
2479
2480   /* Since the stub is not sending a process id, then default to
2481      what's in inferior_ptid, unless it's null at this point.  If so,
2482      then since there's no way to know the pid of the reported
2483      threads, use the magic number.  */
2484   if (ptid_equal (inferior_ptid, null_ptid))
2485     pid = ptid_get_pid (magic_null_ptid);
2486   else
2487     pid = ptid_get_pid (inferior_ptid);
2488
2489   if (obuf)
2490     *obuf = pp;
2491   return ptid_build (pid, tid, 0);
2492 }
2493
2494 static int
2495 stubhex (int ch)
2496 {
2497   if (ch >= 'a' && ch <= 'f')
2498     return ch - 'a' + 10;
2499   if (ch >= '0' && ch <= '9')
2500     return ch - '0';
2501   if (ch >= 'A' && ch <= 'F')
2502     return ch - 'A' + 10;
2503   return -1;
2504 }
2505
2506 static int
2507 stub_unpack_int (char *buff, int fieldlength)
2508 {
2509   int nibble;
2510   int retval = 0;
2511
2512   while (fieldlength)
2513     {
2514       nibble = stubhex (*buff++);
2515       retval |= nibble;
2516       fieldlength--;
2517       if (fieldlength)
2518         retval = retval << 4;
2519     }
2520   return retval;
2521 }
2522
2523 static char *
2524 unpack_nibble (char *buf, int *val)
2525 {
2526   *val = fromhex (*buf++);
2527   return buf;
2528 }
2529
2530 static char *
2531 unpack_byte (char *buf, int *value)
2532 {
2533   *value = stub_unpack_int (buf, 2);
2534   return buf + 2;
2535 }
2536
2537 static char *
2538 pack_int (char *buf, int value)
2539 {
2540   buf = pack_hex_byte (buf, (value >> 24) & 0xff);
2541   buf = pack_hex_byte (buf, (value >> 16) & 0xff);
2542   buf = pack_hex_byte (buf, (value >> 8) & 0x0ff);
2543   buf = pack_hex_byte (buf, (value & 0xff));
2544   return buf;
2545 }
2546
2547 static char *
2548 unpack_int (char *buf, int *value)
2549 {
2550   *value = stub_unpack_int (buf, 8);
2551   return buf + 8;
2552 }
2553
2554 #if 0                   /* Currently unused, uncomment when needed.  */
2555 static char *pack_string (char *pkt, char *string);
2556
2557 static char *
2558 pack_string (char *pkt, char *string)
2559 {
2560   char ch;
2561   int len;
2562
2563   len = strlen (string);
2564   if (len > 200)
2565     len = 200;          /* Bigger than most GDB packets, junk???  */
2566   pkt = pack_hex_byte (pkt, len);
2567   while (len-- > 0)
2568     {
2569       ch = *string++;
2570       if ((ch == '\0') || (ch == '#'))
2571         ch = '*';               /* Protect encapsulation.  */
2572       *pkt++ = ch;
2573     }
2574   return pkt;
2575 }
2576 #endif /* 0 (unused) */
2577
2578 static char *
2579 unpack_string (char *src, char *dest, int length)
2580 {
2581   while (length--)
2582     *dest++ = *src++;
2583   *dest = '\0';
2584   return src;
2585 }
2586
2587 static char *
2588 pack_threadid (char *pkt, threadref *id)
2589 {
2590   char *limit;
2591   unsigned char *altid;
2592
2593   altid = (unsigned char *) id;
2594   limit = pkt + BUF_THREAD_ID_SIZE;
2595   while (pkt < limit)
2596     pkt = pack_hex_byte (pkt, *altid++);
2597   return pkt;
2598 }
2599
2600
2601 static char *
2602 unpack_threadid (char *inbuf, threadref *id)
2603 {
2604   char *altref;
2605   char *limit = inbuf + BUF_THREAD_ID_SIZE;
2606   int x, y;
2607
2608   altref = (char *) id;
2609
2610   while (inbuf < limit)
2611     {
2612       x = stubhex (*inbuf++);
2613       y = stubhex (*inbuf++);
2614       *altref++ = (x << 4) | y;
2615     }
2616   return inbuf;
2617 }
2618
2619 /* Externally, threadrefs are 64 bits but internally, they are still
2620    ints.  This is due to a mismatch of specifications.  We would like
2621    to use 64bit thread references internally.  This is an adapter
2622    function.  */
2623
2624 void
2625 int_to_threadref (threadref *id, int value)
2626 {
2627   unsigned char *scan;
2628
2629   scan = (unsigned char *) id;
2630   {
2631     int i = 4;
2632     while (i--)
2633       *scan++ = 0;
2634   }
2635   *scan++ = (value >> 24) & 0xff;
2636   *scan++ = (value >> 16) & 0xff;
2637   *scan++ = (value >> 8) & 0xff;
2638   *scan++ = (value & 0xff);
2639 }
2640
2641 static int
2642 threadref_to_int (threadref *ref)
2643 {
2644   int i, value = 0;
2645   unsigned char *scan;
2646
2647   scan = *ref;
2648   scan += 4;
2649   i = 4;
2650   while (i-- > 0)
2651     value = (value << 8) | ((*scan++) & 0xff);
2652   return value;
2653 }
2654
2655 static void
2656 copy_threadref (threadref *dest, threadref *src)
2657 {
2658   int i;
2659   unsigned char *csrc, *cdest;
2660
2661   csrc = (unsigned char *) src;
2662   cdest = (unsigned char *) dest;
2663   i = 8;
2664   while (i--)
2665     *cdest++ = *csrc++;
2666 }
2667
2668 static int
2669 threadmatch (threadref *dest, threadref *src)
2670 {
2671   /* Things are broken right now, so just assume we got a match.  */
2672 #if 0
2673   unsigned char *srcp, *destp;
2674   int i, result;
2675   srcp = (char *) src;
2676   destp = (char *) dest;
2677
2678   result = 1;
2679   while (i-- > 0)
2680     result &= (*srcp++ == *destp++) ? 1 : 0;
2681   return result;
2682 #endif
2683   return 1;
2684 }
2685
2686 /*
2687    threadid:1,        # always request threadid
2688    context_exists:2,
2689    display:4,
2690    unique_name:8,
2691    more_display:16
2692  */
2693
2694 /* Encoding:  'Q':8,'P':8,mask:32,threadid:64 */
2695
2696 static char *
2697 pack_threadinfo_request (char *pkt, int mode, threadref *id)
2698 {
2699   *pkt++ = 'q';                         /* Info Query */
2700   *pkt++ = 'P';                         /* process or thread info */
2701   pkt = pack_int (pkt, mode);           /* mode */
2702   pkt = pack_threadid (pkt, id);        /* threadid */
2703   *pkt = '\0';                          /* terminate */
2704   return pkt;
2705 }
2706
2707 /* These values tag the fields in a thread info response packet.  */
2708 /* Tagging the fields allows us to request specific fields and to
2709    add more fields as time goes by.  */
2710
2711 #define TAG_THREADID 1          /* Echo the thread identifier.  */
2712 #define TAG_EXISTS 2            /* Is this process defined enough to
2713                                    fetch registers and its stack?  */
2714 #define TAG_DISPLAY 4           /* A short thing maybe to put on a window */
2715 #define TAG_THREADNAME 8        /* string, maps 1-to-1 with a thread is.  */
2716 #define TAG_MOREDISPLAY 16      /* Whatever the kernel wants to say about
2717                                    the process.  */
2718
2719 static int
2720 remote_unpack_thread_info_response (char *pkt, threadref *expectedref,
2721                                     struct gdb_ext_thread_info *info)
2722 {
2723   struct remote_state *rs = get_remote_state ();
2724   int mask, length;
2725   int tag;
2726   threadref ref;
2727   char *limit = pkt + rs->buf_size; /* Plausible parsing limit.  */
2728   int retval = 1;
2729
2730   /* info->threadid = 0; FIXME: implement zero_threadref.  */
2731   info->active = 0;
2732   info->display[0] = '\0';
2733   info->shortname[0] = '\0';
2734   info->more_display[0] = '\0';
2735
2736   /* Assume the characters indicating the packet type have been
2737      stripped.  */
2738   pkt = unpack_int (pkt, &mask);        /* arg mask */
2739   pkt = unpack_threadid (pkt, &ref);
2740
2741   if (mask == 0)
2742     warning (_("Incomplete response to threadinfo request."));
2743   if (!threadmatch (&ref, expectedref))
2744     {                   /* This is an answer to a different request.  */
2745       warning (_("ERROR RMT Thread info mismatch."));
2746       return 0;
2747     }
2748   copy_threadref (&info->threadid, &ref);
2749
2750   /* Loop on tagged fields , try to bail if somthing goes wrong.  */
2751
2752   /* Packets are terminated with nulls.  */
2753   while ((pkt < limit) && mask && *pkt)
2754     {
2755       pkt = unpack_int (pkt, &tag);     /* tag */
2756       pkt = unpack_byte (pkt, &length); /* length */
2757       if (!(tag & mask))                /* Tags out of synch with mask.  */
2758         {
2759           warning (_("ERROR RMT: threadinfo tag mismatch."));
2760           retval = 0;
2761           break;
2762         }
2763       if (tag == TAG_THREADID)
2764         {
2765           if (length != 16)
2766             {
2767               warning (_("ERROR RMT: length of threadid is not 16."));
2768               retval = 0;
2769               break;
2770             }
2771           pkt = unpack_threadid (pkt, &ref);
2772           mask = mask & ~TAG_THREADID;
2773           continue;
2774         }
2775       if (tag == TAG_EXISTS)
2776         {
2777           info->active = stub_unpack_int (pkt, length);
2778           pkt += length;
2779           mask = mask & ~(TAG_EXISTS);
2780           if (length > 8)
2781             {
2782               warning (_("ERROR RMT: 'exists' length too long."));
2783               retval = 0;
2784               break;
2785             }
2786           continue;
2787         }
2788       if (tag == TAG_THREADNAME)
2789         {
2790           pkt = unpack_string (pkt, &info->shortname[0], length);
2791           mask = mask & ~TAG_THREADNAME;
2792           continue;
2793         }
2794       if (tag == TAG_DISPLAY)
2795         {
2796           pkt = unpack_string (pkt, &info->display[0], length);
2797           mask = mask & ~TAG_DISPLAY;
2798           continue;
2799         }
2800       if (tag == TAG_MOREDISPLAY)
2801         {
2802           pkt = unpack_string (pkt, &info->more_display[0], length);
2803           mask = mask & ~TAG_MOREDISPLAY;
2804           continue;
2805         }
2806       warning (_("ERROR RMT: unknown thread info tag."));
2807       break;                    /* Not a tag we know about.  */
2808     }
2809   return retval;
2810 }
2811
2812 static int
2813 remote_get_threadinfo (threadref *threadid, int fieldset,       /* TAG mask */
2814                        struct gdb_ext_thread_info *info)
2815 {
2816   struct remote_state *rs = get_remote_state ();
2817   int result;
2818
2819   pack_threadinfo_request (rs->buf, fieldset, threadid);
2820   putpkt (rs->buf);
2821   getpkt (&rs->buf, &rs->buf_size, 0);
2822
2823   if (rs->buf[0] == '\0')
2824     return 0;
2825
2826   result = remote_unpack_thread_info_response (rs->buf + 2,
2827                                                threadid, info);
2828   return result;
2829 }
2830
2831 /*    Format: i'Q':8,i"L":8,initflag:8,batchsize:16,lastthreadid:32   */
2832
2833 static char *
2834 pack_threadlist_request (char *pkt, int startflag, int threadcount,
2835                          threadref *nextthread)
2836 {
2837   *pkt++ = 'q';                 /* info query packet */
2838   *pkt++ = 'L';                 /* Process LIST or threadLIST request */
2839   pkt = pack_nibble (pkt, startflag);           /* initflag 1 bytes */
2840   pkt = pack_hex_byte (pkt, threadcount);       /* threadcount 2 bytes */
2841   pkt = pack_threadid (pkt, nextthread);        /* 64 bit thread identifier */
2842   *pkt = '\0';
2843   return pkt;
2844 }
2845
2846 /* Encoding:   'q':8,'M':8,count:16,done:8,argthreadid:64,(threadid:64)* */
2847
2848 static int
2849 parse_threadlist_response (char *pkt, int result_limit,
2850                            threadref *original_echo, threadref *resultlist,
2851                            int *doneflag)
2852 {
2853   struct remote_state *rs = get_remote_state ();
2854   char *limit;
2855   int count, resultcount, done;
2856
2857   resultcount = 0;
2858   /* Assume the 'q' and 'M chars have been stripped.  */
2859   limit = pkt + (rs->buf_size - BUF_THREAD_ID_SIZE);
2860   /* done parse past here */
2861   pkt = unpack_byte (pkt, &count);      /* count field */
2862   pkt = unpack_nibble (pkt, &done);
2863   /* The first threadid is the argument threadid.  */
2864   pkt = unpack_threadid (pkt, original_echo);   /* should match query packet */
2865   while ((count-- > 0) && (pkt < limit))
2866     {
2867       pkt = unpack_threadid (pkt, resultlist++);
2868       if (resultcount++ >= result_limit)
2869         break;
2870     }
2871   if (doneflag)
2872     *doneflag = done;
2873   return resultcount;
2874 }
2875
2876 /* Fetch the next batch of threads from the remote.  Returns -1 if the
2877    qL packet is not supported, 0 on error and 1 on success.  */
2878
2879 static int
2880 remote_get_threadlist (int startflag, threadref *nextthread, int result_limit,
2881                        int *done, int *result_count, threadref *threadlist)
2882 {
2883   struct remote_state *rs = get_remote_state ();
2884   int result = 1;
2885
2886   /* Trancate result limit to be smaller than the packet size.  */
2887   if ((((result_limit + 1) * BUF_THREAD_ID_SIZE) + 10)
2888       >= get_remote_packet_size ())
2889     result_limit = (get_remote_packet_size () / BUF_THREAD_ID_SIZE) - 2;
2890
2891   pack_threadlist_request (rs->buf, startflag, result_limit, nextthread);
2892   putpkt (rs->buf);
2893   getpkt (&rs->buf, &rs->buf_size, 0);
2894   if (*rs->buf == '\0')
2895     {
2896       /* Packet not supported.  */
2897       return -1;
2898     }
2899
2900   *result_count =
2901     parse_threadlist_response (rs->buf + 2, result_limit,
2902                                &rs->echo_nextthread, threadlist, done);
2903
2904   if (!threadmatch (&rs->echo_nextthread, nextthread))
2905     {
2906       /* FIXME: This is a good reason to drop the packet.  */
2907       /* Possably, there is a duplicate response.  */
2908       /* Possabilities :
2909          retransmit immediatly - race conditions
2910          retransmit after timeout - yes
2911          exit
2912          wait for packet, then exit
2913        */
2914       warning (_("HMM: threadlist did not echo arg thread, dropping it."));
2915       return 0;                 /* I choose simply exiting.  */
2916     }
2917   if (*result_count <= 0)
2918     {
2919       if (*done != 1)
2920         {
2921           warning (_("RMT ERROR : failed to get remote thread list."));
2922           result = 0;
2923         }
2924       return result;            /* break; */
2925     }
2926   if (*result_count > result_limit)
2927     {
2928       *result_count = 0;
2929       warning (_("RMT ERROR: threadlist response longer than requested."));
2930       return 0;
2931     }
2932   return result;
2933 }
2934
2935 /* Fetch the list of remote threads, with the qL packet, and call
2936    STEPFUNCTION for each thread found.  Stops iterating and returns 1
2937    if STEPFUNCTION returns true.  Stops iterating and returns 0 if the
2938    STEPFUNCTION returns false.  If the packet is not supported,
2939    returns -1.  */
2940
2941 static int
2942 remote_threadlist_iterator (rmt_thread_action stepfunction, void *context,
2943                             int looplimit)
2944 {
2945   struct remote_state *rs = get_remote_state ();
2946   int done, i, result_count;
2947   int startflag = 1;
2948   int result = 1;
2949   int loopcount = 0;
2950
2951   done = 0;
2952   while (!done)
2953     {
2954       if (loopcount++ > looplimit)
2955         {
2956           result = 0;
2957           warning (_("Remote fetch threadlist -infinite loop-."));
2958           break;
2959         }
2960       result = remote_get_threadlist (startflag, &rs->nextthread,
2961                                       MAXTHREADLISTRESULTS,
2962                                       &done, &result_count,
2963                                       rs->resultthreadlist);
2964       if (result <= 0)
2965         break;
2966       /* Clear for later iterations.  */
2967       startflag = 0;
2968       /* Setup to resume next batch of thread references, set nextthread.  */
2969       if (result_count >= 1)
2970         copy_threadref (&rs->nextthread,
2971                         &rs->resultthreadlist[result_count - 1]);
2972       i = 0;
2973       while (result_count--)
2974         {
2975           if (!(*stepfunction) (&rs->resultthreadlist[i++], context))
2976             {
2977               result = 0;
2978               break;
2979             }
2980         }
2981     }
2982   return result;
2983 }
2984
2985 /* A thread found on the remote target.  */
2986
2987 typedef struct thread_item
2988 {
2989   /* The thread's PTID.  */
2990   ptid_t ptid;
2991
2992   /* The thread's extra info.  May be NULL.  */
2993   char *extra;
2994
2995   /* The thread's name.  May be NULL.  */
2996   char *name;
2997
2998   /* The core the thread was running on.  -1 if not known.  */
2999   int core;
3000 } thread_item_t;
3001 DEF_VEC_O(thread_item_t);
3002
3003 /* Context passed around to the various methods listing remote
3004    threads.  As new threads are found, they're added to the ITEMS
3005    vector.  */
3006
3007 struct threads_listing_context
3008 {
3009   /* The threads found on the remote target.  */
3010   VEC (thread_item_t) *items;
3011 };
3012
3013 /* Discard the contents of the constructed thread listing context.  */
3014
3015 static void
3016 clear_threads_listing_context (void *p)
3017 {
3018   struct threads_listing_context *context
3019     = (struct threads_listing_context *) p;
3020   int i;
3021   struct thread_item *item;
3022
3023   for (i = 0; VEC_iterate (thread_item_t, context->items, i, item); ++i)
3024     {
3025       xfree (item->extra);
3026       xfree (item->name);
3027     }
3028
3029   VEC_free (thread_item_t, context->items);
3030 }
3031
3032 /* Remove the thread specified as the related_pid field of WS
3033    from the CONTEXT list.  */
3034
3035 static void
3036 threads_listing_context_remove (struct target_waitstatus *ws,
3037                                 struct threads_listing_context *context)
3038 {
3039   struct thread_item *item;
3040   int i;
3041   ptid_t child_ptid = ws->value.related_pid;
3042
3043   for (i = 0; VEC_iterate (thread_item_t, context->items, i, item); ++i)
3044     {
3045       if (ptid_equal (item->ptid, child_ptid))
3046         {
3047           VEC_ordered_remove (thread_item_t, context->items, i);
3048           break;
3049         }
3050     }
3051 }
3052
3053 static int
3054 remote_newthread_step (threadref *ref, void *data)
3055 {
3056   struct threads_listing_context *context
3057     = (struct threads_listing_context *) data;
3058   struct thread_item item;
3059   int pid = ptid_get_pid (inferior_ptid);
3060
3061   item.ptid = ptid_build (pid, threadref_to_int (ref), 0);
3062   item.core = -1;
3063   item.name = NULL;
3064   item.extra = NULL;
3065
3066   VEC_safe_push (thread_item_t, context->items, &item);
3067
3068   return 1;                     /* continue iterator */
3069 }
3070
3071 #define CRAZY_MAX_THREADS 1000
3072
3073 static ptid_t
3074 remote_current_thread (ptid_t oldpid)
3075 {
3076   struct remote_state *rs = get_remote_state ();
3077
3078   putpkt ("qC");
3079   getpkt (&rs->buf, &rs->buf_size, 0);
3080   if (rs->buf[0] == 'Q' && rs->buf[1] == 'C')
3081     {
3082       char *obuf;
3083       ptid_t result;
3084
3085       result = read_ptid (&rs->buf[2], &obuf);
3086       if (*obuf != '\0' && remote_debug)
3087         fprintf_unfiltered (gdb_stdlog,
3088                             "warning: garbage in qC reply\n");
3089
3090       return result;
3091     }
3092   else
3093     return oldpid;
3094 }
3095
3096 /* List remote threads using the deprecated qL packet.  */
3097
3098 static int
3099 remote_get_threads_with_ql (struct target_ops *ops,
3100                             struct threads_listing_context *context)
3101 {
3102   if (remote_threadlist_iterator (remote_newthread_step, context,
3103                                   CRAZY_MAX_THREADS) >= 0)
3104     return 1;
3105
3106   return 0;
3107 }
3108
3109 #if defined(HAVE_LIBEXPAT)
3110
3111 static void
3112 start_thread (struct gdb_xml_parser *parser,
3113               const struct gdb_xml_element *element,
3114               void *user_data, VEC(gdb_xml_value_s) *attributes)
3115 {
3116   struct threads_listing_context *data
3117     = (struct threads_listing_context *) user_data;
3118
3119   struct thread_item item;
3120   char *id;
3121   struct gdb_xml_value *attr;
3122
3123   id = (char *) xml_find_attribute (attributes, "id")->value;
3124   item.ptid = read_ptid (id, NULL);
3125
3126   attr = xml_find_attribute (attributes, "core");
3127   if (attr != NULL)
3128     item.core = *(ULONGEST *) attr->value;
3129   else
3130     item.core = -1;
3131
3132   attr = xml_find_attribute (attributes, "name");
3133   item.name = attr != NULL ? xstrdup ((const char *) attr->value) : NULL;
3134
3135   item.extra = 0;
3136
3137   VEC_safe_push (thread_item_t, data->items, &item);
3138 }
3139
3140 static void
3141 end_thread (struct gdb_xml_parser *parser,
3142             const struct gdb_xml_element *element,
3143             void *user_data, const char *body_text)
3144 {
3145   struct threads_listing_context *data
3146     = (struct threads_listing_context *) user_data;
3147
3148   if (body_text && *body_text)
3149     VEC_last (thread_item_t, data->items)->extra = xstrdup (body_text);
3150 }
3151
3152 const struct gdb_xml_attribute thread_attributes[] = {
3153   { "id", GDB_XML_AF_NONE, NULL, NULL },
3154   { "core", GDB_XML_AF_OPTIONAL, gdb_xml_parse_attr_ulongest, NULL },
3155   { "name", GDB_XML_AF_OPTIONAL, NULL, NULL },
3156   { NULL, GDB_XML_AF_NONE, NULL, NULL }
3157 };
3158
3159 const struct gdb_xml_element thread_children[] = {
3160   { NULL, NULL, NULL, GDB_XML_EF_NONE, NULL, NULL }
3161 };
3162
3163 const struct gdb_xml_element threads_children[] = {
3164   { "thread", thread_attributes, thread_children,
3165     GDB_XML_EF_REPEATABLE | GDB_XML_EF_OPTIONAL,
3166     start_thread, end_thread },
3167   { NULL, NULL, NULL, GDB_XML_EF_NONE, NULL, NULL }
3168 };
3169
3170 const struct gdb_xml_element threads_elements[] = {
3171   { "threads", NULL, threads_children,
3172     GDB_XML_EF_NONE, NULL, NULL },
3173   { NULL, NULL, NULL, GDB_XML_EF_NONE, NULL, NULL }
3174 };
3175
3176 #endif
3177
3178 /* List remote threads using qXfer:threads:read.  */
3179
3180 static int
3181 remote_get_threads_with_qxfer (struct target_ops *ops,
3182                                struct threads_listing_context *context)
3183 {
3184 #if defined(HAVE_LIBEXPAT)
3185   if (packet_support (PACKET_qXfer_threads) == PACKET_ENABLE)
3186     {
3187       char *xml = target_read_stralloc (ops, TARGET_OBJECT_THREADS, NULL);
3188       struct cleanup *back_to = make_cleanup (xfree, xml);
3189
3190       if (xml != NULL && *xml != '\0')
3191         {
3192           gdb_xml_parse_quick (_("threads"), "threads.dtd",
3193                                threads_elements, xml, context);
3194         }
3195
3196       do_cleanups (back_to);
3197       return 1;
3198     }
3199 #endif
3200
3201   return 0;
3202 }
3203
3204 /* List remote threads using qfThreadInfo/qsThreadInfo.  */
3205
3206 static int
3207 remote_get_threads_with_qthreadinfo (struct target_ops *ops,
3208                                      struct threads_listing_context *context)
3209 {
3210   struct remote_state *rs = get_remote_state ();
3211
3212   if (rs->use_threadinfo_query)
3213     {
3214       char *bufp;
3215
3216       putpkt ("qfThreadInfo");
3217       getpkt (&rs->buf, &rs->buf_size, 0);
3218       bufp = rs->buf;
3219       if (bufp[0] != '\0')              /* q packet recognized */
3220         {
3221           while (*bufp++ == 'm')        /* reply contains one or more TID */
3222             {
3223               do
3224                 {
3225                   struct thread_item item;
3226
3227                   item.ptid = read_ptid (bufp, &bufp);
3228                   item.core = -1;
3229                   item.name = NULL;
3230                   item.extra = NULL;
3231
3232                   VEC_safe_push (thread_item_t, context->items, &item);
3233                 }
3234               while (*bufp++ == ',');   /* comma-separated list */
3235               putpkt ("qsThreadInfo");
3236               getpkt (&rs->buf, &rs->buf_size, 0);
3237               bufp = rs->buf;
3238             }
3239           return 1;
3240         }
3241       else
3242         {
3243           /* Packet not recognized.  */
3244           rs->use_threadinfo_query = 0;
3245         }
3246     }
3247
3248   return 0;
3249 }
3250
3251 /* Implement the to_update_thread_list function for the remote
3252    targets.  */
3253
3254 static void
3255 remote_update_thread_list (struct target_ops *ops)
3256 {
3257   struct threads_listing_context context;
3258   struct cleanup *old_chain;
3259   int got_list = 0;
3260
3261   context.items = NULL;
3262   old_chain = make_cleanup (clear_threads_listing_context, &context);
3263
3264   /* We have a few different mechanisms to fetch the thread list.  Try
3265      them all, starting with the most preferred one first, falling
3266      back to older methods.  */
3267   if (remote_get_threads_with_qxfer (ops, &context)
3268       || remote_get_threads_with_qthreadinfo (ops, &context)
3269       || remote_get_threads_with_ql (ops, &context))
3270     {
3271       int i;
3272       struct thread_item *item;
3273       struct thread_info *tp, *tmp;
3274
3275       got_list = 1;
3276
3277       if (VEC_empty (thread_item_t, context.items)
3278           && remote_thread_always_alive (ops, inferior_ptid))
3279         {
3280           /* Some targets don't really support threads, but still
3281              reply an (empty) thread list in response to the thread
3282              listing packets, instead of replying "packet not
3283              supported".  Exit early so we don't delete the main
3284              thread.  */
3285           do_cleanups (old_chain);
3286           return;
3287         }
3288
3289       /* CONTEXT now holds the current thread list on the remote
3290          target end.  Delete GDB-side threads no longer found on the
3291          target.  */
3292       ALL_THREADS_SAFE (tp, tmp)
3293         {
3294           for (i = 0;
3295                VEC_iterate (thread_item_t, context.items, i, item);
3296                ++i)
3297             {
3298               if (ptid_equal (item->ptid, tp->ptid))
3299                 break;
3300             }
3301
3302           if (i == VEC_length (thread_item_t, context.items))
3303             {
3304               /* Not found.  */
3305               delete_thread (tp->ptid);
3306             }
3307         }
3308
3309       /* Remove any unreported fork child threads from CONTEXT so
3310          that we don't interfere with follow fork, which is where
3311          creation of such threads is handled.  */
3312       remove_new_fork_children (&context);
3313
3314       /* And now add threads we don't know about yet to our list.  */
3315       for (i = 0;
3316            VEC_iterate (thread_item_t, context.items, i, item);
3317            ++i)
3318         {
3319           if (!ptid_equal (item->ptid, null_ptid))
3320             {
3321               struct private_thread_info *info;
3322               /* In non-stop mode, we assume new found threads are
3323                  executing until proven otherwise with a stop reply.
3324                  In all-stop, we can only get here if all threads are
3325                  stopped.  */
3326               int executing = target_is_non_stop_p () ? 1 : 0;
3327
3328               remote_notice_new_inferior (item->ptid, executing);
3329
3330               info = get_private_info_ptid (item->ptid);
3331               info->core = item->core;
3332               info->extra = item->extra;
3333               item->extra = NULL;
3334               info->name = item->name;
3335               item->name = NULL;
3336             }
3337         }
3338     }
3339
3340   if (!got_list)
3341     {
3342       /* If no thread listing method is supported, then query whether
3343          each known thread is alive, one by one, with the T packet.
3344          If the target doesn't support threads at all, then this is a
3345          no-op.  See remote_thread_alive.  */
3346       prune_threads ();
3347     }
3348
3349   do_cleanups (old_chain);
3350 }
3351
3352 /*
3353  * Collect a descriptive string about the given thread.
3354  * The target may say anything it wants to about the thread
3355  * (typically info about its blocked / runnable state, name, etc.).
3356  * This string will appear in the info threads display.
3357  *
3358  * Optional: targets are not required to implement this function.
3359  */
3360
3361 static const char *
3362 remote_threads_extra_info (struct target_ops *self, struct thread_info *tp)
3363 {
3364   struct remote_state *rs = get_remote_state ();
3365   int result;
3366   int set;
3367   threadref id;
3368   struct gdb_ext_thread_info threadinfo;
3369   static char display_buf[100]; /* arbitrary...  */
3370   int n = 0;                    /* position in display_buf */
3371
3372   if (rs->remote_desc == 0)             /* paranoia */
3373     internal_error (__FILE__, __LINE__,
3374                     _("remote_threads_extra_info"));
3375
3376   if (ptid_equal (tp->ptid, magic_null_ptid)
3377       || (ptid_get_pid (tp->ptid) != 0 && ptid_get_lwp (tp->ptid) == 0))
3378     /* This is the main thread which was added by GDB.  The remote
3379        server doesn't know about it.  */
3380     return NULL;
3381
3382   if (packet_support (PACKET_qXfer_threads) == PACKET_ENABLE)
3383     {
3384       struct thread_info *info = find_thread_ptid (tp->ptid);
3385
3386       if (info && info->priv)
3387         return info->priv->extra;
3388       else
3389         return NULL;
3390     }
3391
3392   if (rs->use_threadextra_query)
3393     {
3394       char *b = rs->buf;
3395       char *endb = rs->buf + get_remote_packet_size ();
3396
3397       xsnprintf (b, endb - b, "qThreadExtraInfo,");
3398       b += strlen (b);
3399       write_ptid (b, endb, tp->ptid);
3400
3401       putpkt (rs->buf);
3402       getpkt (&rs->buf, &rs->buf_size, 0);
3403       if (rs->buf[0] != 0)
3404         {
3405           n = std::min (strlen (rs->buf) / 2, sizeof (display_buf));
3406           result = hex2bin (rs->buf, (gdb_byte *) display_buf, n);
3407           display_buf [result] = '\0';
3408           return display_buf;
3409         }
3410     }
3411
3412   /* If the above query fails, fall back to the old method.  */
3413   rs->use_threadextra_query = 0;
3414   set = TAG_THREADID | TAG_EXISTS | TAG_THREADNAME
3415     | TAG_MOREDISPLAY | TAG_DISPLAY;
3416   int_to_threadref (&id, ptid_get_lwp (tp->ptid));
3417   if (remote_get_threadinfo (&id, set, &threadinfo))
3418     if (threadinfo.active)
3419       {
3420         if (*threadinfo.shortname)
3421           n += xsnprintf (&display_buf[0], sizeof (display_buf) - n,
3422                           " Name: %s,", threadinfo.shortname);
3423         if (*threadinfo.display)
3424           n += xsnprintf (&display_buf[n], sizeof (display_buf) - n,
3425                           " State: %s,", threadinfo.display);
3426         if (*threadinfo.more_display)
3427           n += xsnprintf (&display_buf[n], sizeof (display_buf) - n,
3428                           " Priority: %s", threadinfo.more_display);
3429
3430         if (n > 0)
3431           {
3432             /* For purely cosmetic reasons, clear up trailing commas.  */
3433             if (',' == display_buf[n-1])
3434               display_buf[n-1] = ' ';
3435             return display_buf;
3436           }
3437       }
3438   return NULL;
3439 }
3440 \f
3441
3442 static int
3443 remote_static_tracepoint_marker_at (struct target_ops *self, CORE_ADDR addr,
3444                                     struct static_tracepoint_marker *marker)
3445 {
3446   struct remote_state *rs = get_remote_state ();
3447   char *p = rs->buf;
3448
3449   xsnprintf (p, get_remote_packet_size (), "qTSTMat:");
3450   p += strlen (p);
3451   p += hexnumstr (p, addr);
3452   putpkt (rs->buf);
3453   getpkt (&rs->buf, &rs->buf_size, 0);
3454   p = rs->buf;
3455
3456   if (*p == 'E')
3457     error (_("Remote failure reply: %s"), p);
3458
3459   if (*p++ == 'm')
3460     {
3461       parse_static_tracepoint_marker_definition (p, &p, marker);
3462       return 1;
3463     }
3464
3465   return 0;
3466 }
3467
3468 static VEC(static_tracepoint_marker_p) *
3469 remote_static_tracepoint_markers_by_strid (struct target_ops *self,
3470                                            const char *strid)
3471 {
3472   struct remote_state *rs = get_remote_state ();
3473   VEC(static_tracepoint_marker_p) *markers = NULL;
3474   struct static_tracepoint_marker *marker = NULL;
3475   struct cleanup *old_chain;
3476   char *p;
3477
3478   /* Ask for a first packet of static tracepoint marker
3479      definition.  */
3480   putpkt ("qTfSTM");
3481   getpkt (&rs->buf, &rs->buf_size, 0);
3482   p = rs->buf;
3483   if (*p == 'E')
3484     error (_("Remote failure reply: %s"), p);
3485
3486   old_chain = make_cleanup (free_current_marker, &marker);
3487
3488   while (*p++ == 'm')
3489     {
3490       if (marker == NULL)
3491         marker = XCNEW (struct static_tracepoint_marker);
3492
3493       do
3494         {
3495           parse_static_tracepoint_marker_definition (p, &p, marker);
3496
3497           if (strid == NULL || strcmp (strid, marker->str_id) == 0)
3498             {
3499               VEC_safe_push (static_tracepoint_marker_p,
3500                              markers, marker);
3501               marker = NULL;
3502             }
3503           else
3504             {
3505               release_static_tracepoint_marker (marker);
3506               memset (marker, 0, sizeof (*marker));
3507             }
3508         }
3509       while (*p++ == ',');      /* comma-separated list */
3510       /* Ask for another packet of static tracepoint definition.  */
3511       putpkt ("qTsSTM");
3512       getpkt (&rs->buf, &rs->buf_size, 0);
3513       p = rs->buf;
3514     }
3515
3516   do_cleanups (old_chain);
3517   return markers;
3518 }
3519
3520 \f
3521 /* Implement the to_get_ada_task_ptid function for the remote targets.  */
3522
3523 static ptid_t
3524 remote_get_ada_task_ptid (struct target_ops *self, long lwp, long thread)
3525 {
3526   return ptid_build (ptid_get_pid (inferior_ptid), lwp, 0);
3527 }
3528 \f
3529
3530 /* Restart the remote side; this is an extended protocol operation.  */
3531
3532 static void
3533 extended_remote_restart (void)
3534 {
3535   struct remote_state *rs = get_remote_state ();
3536
3537   /* Send the restart command; for reasons I don't understand the
3538      remote side really expects a number after the "R".  */
3539   xsnprintf (rs->buf, get_remote_packet_size (), "R%x", 0);
3540   putpkt (rs->buf);
3541
3542   remote_fileio_reset ();
3543 }
3544 \f
3545 /* Clean up connection to a remote debugger.  */
3546
3547 static void
3548 remote_close (struct target_ops *self)
3549 {
3550   struct remote_state *rs = get_remote_state ();
3551
3552   if (rs->remote_desc == NULL)
3553     return; /* already closed */
3554
3555   /* Make sure we leave stdin registered in the event loop.  */
3556   remote_terminal_ours (self);
3557
3558   serial_close (rs->remote_desc);
3559   rs->remote_desc = NULL;
3560
3561   /* We don't have a connection to the remote stub anymore.  Get rid
3562      of all the inferiors and their threads we were controlling.
3563      Reset inferior_ptid to null_ptid first, as otherwise has_stack_frame
3564      will be unable to find the thread corresponding to (pid, 0, 0).  */
3565   inferior_ptid = null_ptid;
3566   discard_all_inferiors ();
3567
3568   /* We are closing the remote target, so we should discard
3569      everything of this target.  */
3570   discard_pending_stop_replies_in_queue (rs);
3571
3572   if (remote_async_inferior_event_token)
3573     delete_async_event_handler (&remote_async_inferior_event_token);
3574
3575   remote_notif_state_xfree (rs->notif_state);
3576
3577   trace_reset_local_state ();
3578 }
3579
3580 /* Query the remote side for the text, data and bss offsets.  */
3581
3582 static void
3583 get_offsets (void)
3584 {
3585   struct remote_state *rs = get_remote_state ();
3586   char *buf;
3587   char *ptr;
3588   int lose, num_segments = 0, do_sections, do_segments;
3589   CORE_ADDR text_addr, data_addr, bss_addr, segments[2];
3590   struct section_offsets *offs;
3591   struct symfile_segment_data *data;
3592
3593   if (symfile_objfile == NULL)
3594     return;
3595
3596   putpkt ("qOffsets");
3597   getpkt (&rs->buf, &rs->buf_size, 0);
3598   buf = rs->buf;
3599
3600   if (buf[0] == '\000')
3601     return;                     /* Return silently.  Stub doesn't support
3602                                    this command.  */
3603   if (buf[0] == 'E')
3604     {
3605       warning (_("Remote failure reply: %s"), buf);
3606       return;
3607     }
3608
3609   /* Pick up each field in turn.  This used to be done with scanf, but
3610      scanf will make trouble if CORE_ADDR size doesn't match
3611      conversion directives correctly.  The following code will work
3612      with any size of CORE_ADDR.  */
3613   text_addr = data_addr = bss_addr = 0;
3614   ptr = buf;
3615   lose = 0;
3616
3617   if (startswith (ptr, "Text="))
3618     {
3619       ptr += 5;
3620       /* Don't use strtol, could lose on big values.  */
3621       while (*ptr && *ptr != ';')
3622         text_addr = (text_addr << 4) + fromhex (*ptr++);
3623
3624       if (startswith (ptr, ";Data="))
3625         {
3626           ptr += 6;
3627           while (*ptr && *ptr != ';')
3628             data_addr = (data_addr << 4) + fromhex (*ptr++);
3629         }
3630       else
3631         lose = 1;
3632
3633       if (!lose && startswith (ptr, ";Bss="))
3634         {
3635           ptr += 5;
3636           while (*ptr && *ptr != ';')
3637             bss_addr = (bss_addr << 4) + fromhex (*ptr++);
3638
3639           if (bss_addr != data_addr)
3640             warning (_("Target reported unsupported offsets: %s"), buf);
3641         }
3642       else
3643         lose = 1;
3644     }
3645   else if (startswith (ptr, "TextSeg="))
3646     {
3647       ptr += 8;
3648       /* Don't use strtol, could lose on big values.  */
3649       while (*ptr && *ptr != ';')
3650         text_addr = (text_addr << 4) + fromhex (*ptr++);
3651       num_segments = 1;
3652
3653       if (startswith (ptr, ";DataSeg="))
3654         {
3655           ptr += 9;
3656           while (*ptr && *ptr != ';')
3657             data_addr = (data_addr << 4) + fromhex (*ptr++);
3658           num_segments++;
3659         }
3660     }
3661   else
3662     lose = 1;
3663
3664   if (lose)
3665     error (_("Malformed response to offset query, %s"), buf);
3666   else if (*ptr != '\0')
3667     warning (_("Target reported unsupported offsets: %s"), buf);
3668
3669   offs = ((struct section_offsets *)
3670           alloca (SIZEOF_N_SECTION_OFFSETS (symfile_objfile->num_sections)));
3671   memcpy (offs, symfile_objfile->section_offsets,
3672           SIZEOF_N_SECTION_OFFSETS (symfile_objfile->num_sections));
3673
3674   data = get_symfile_segment_data (symfile_objfile->obfd);
3675   do_segments = (data != NULL);
3676   do_sections = num_segments == 0;
3677
3678   if (num_segments > 0)
3679     {
3680       segments[0] = text_addr;
3681       segments[1] = data_addr;
3682     }
3683   /* If we have two segments, we can still try to relocate everything
3684      by assuming that the .text and .data offsets apply to the whole
3685      text and data segments.  Convert the offsets given in the packet
3686      to base addresses for symfile_map_offsets_to_segments.  */
3687   else if (data && data->num_segments == 2)
3688     {
3689       segments[0] = data->segment_bases[0] + text_addr;
3690       segments[1] = data->segment_bases[1] + data_addr;
3691       num_segments = 2;
3692     }
3693   /* If the object file has only one segment, assume that it is text
3694      rather than data; main programs with no writable data are rare,
3695      but programs with no code are useless.  Of course the code might
3696      have ended up in the data segment... to detect that we would need
3697      the permissions here.  */
3698   else if (data && data->num_segments == 1)
3699     {
3700       segments[0] = data->segment_bases[0] + text_addr;
3701       num_segments = 1;
3702     }
3703   /* There's no way to relocate by segment.  */
3704   else
3705     do_segments = 0;
3706
3707   if (do_segments)
3708     {
3709       int ret = symfile_map_offsets_to_segments (symfile_objfile->obfd, data,
3710                                                  offs, num_segments, segments);
3711
3712       if (ret == 0 && !do_sections)
3713         error (_("Can not handle qOffsets TextSeg "
3714                  "response with this symbol file"));
3715
3716       if (ret > 0)
3717         do_sections = 0;
3718     }
3719
3720   if (data)
3721     free_symfile_segment_data (data);
3722
3723   if (do_sections)
3724     {
3725       offs->offsets[SECT_OFF_TEXT (symfile_objfile)] = text_addr;
3726
3727       /* This is a temporary kludge to force data and bss to use the
3728          same offsets because that's what nlmconv does now.  The real
3729          solution requires changes to the stub and remote.c that I
3730          don't have time to do right now.  */
3731
3732       offs->offsets[SECT_OFF_DATA (symfile_objfile)] = data_addr;
3733       offs->offsets[SECT_OFF_BSS (symfile_objfile)] = data_addr;
3734     }
3735
3736   objfile_relocate (symfile_objfile, offs);
3737 }
3738
3739 /* Send interrupt_sequence to remote target.  */
3740 static void
3741 send_interrupt_sequence (void)
3742 {
3743   struct remote_state *rs = get_remote_state ();
3744
3745   if (interrupt_sequence_mode == interrupt_sequence_control_c)
3746     remote_serial_write ("\x03", 1);
3747   else if (interrupt_sequence_mode == interrupt_sequence_break)
3748     serial_send_break (rs->remote_desc);
3749   else if (interrupt_sequence_mode == interrupt_sequence_break_g)
3750     {
3751       serial_send_break (rs->remote_desc);
3752       remote_serial_write ("g", 1);
3753     }
3754   else
3755     internal_error (__FILE__, __LINE__,
3756                     _("Invalid value for interrupt_sequence_mode: %s."),
3757                     interrupt_sequence_mode);
3758 }
3759
3760
3761 /* If STOP_REPLY is a T stop reply, look for the "thread" register,
3762    and extract the PTID.  Returns NULL_PTID if not found.  */
3763
3764 static ptid_t
3765 stop_reply_extract_thread (char *stop_reply)
3766 {
3767   if (stop_reply[0] == 'T' && strlen (stop_reply) > 3)
3768     {
3769       char *p;
3770
3771       /* Txx r:val ; r:val (...)  */
3772       p = &stop_reply[3];
3773
3774       /* Look for "register" named "thread".  */
3775       while (*p != '\0')
3776         {
3777           char *p1;
3778
3779           p1 = strchr (p, ':');
3780           if (p1 == NULL)
3781             return null_ptid;
3782
3783           if (strncmp (p, "thread", p1 - p) == 0)
3784             return read_ptid (++p1, &p);
3785
3786           p1 = strchr (p, ';');
3787           if (p1 == NULL)
3788             return null_ptid;
3789           p1++;
3790
3791           p = p1;
3792         }
3793     }
3794
3795   return null_ptid;
3796 }
3797
3798 /* Determine the remote side's current thread.  If we have a stop
3799    reply handy (in WAIT_STATUS), maybe it's a T stop reply with a
3800    "thread" register we can extract the current thread from.  If not,
3801    ask the remote which is the current thread with qC.  The former
3802    method avoids a roundtrip.  */
3803
3804 static ptid_t
3805 get_current_thread (char *wait_status)
3806 {
3807   ptid_t ptid = null_ptid;
3808
3809   /* Note we don't use remote_parse_stop_reply as that makes use of
3810      the target architecture, which we haven't yet fully determined at
3811      this point.  */
3812   if (wait_status != NULL)
3813     ptid = stop_reply_extract_thread (wait_status);
3814   if (ptid_equal (ptid, null_ptid))
3815     ptid = remote_current_thread (inferior_ptid);
3816
3817   return ptid;
3818 }
3819
3820 /* Query the remote target for which is the current thread/process,
3821    add it to our tables, and update INFERIOR_PTID.  The caller is
3822    responsible for setting the state such that the remote end is ready
3823    to return the current thread.
3824
3825    This function is called after handling the '?' or 'vRun' packets,
3826    whose response is a stop reply from which we can also try
3827    extracting the thread.  If the target doesn't support the explicit
3828    qC query, we infer the current thread from that stop reply, passed
3829    in in WAIT_STATUS, which may be NULL.  */
3830
3831 static void
3832 add_current_inferior_and_thread (char *wait_status)
3833 {
3834   struct remote_state *rs = get_remote_state ();
3835   int fake_pid_p = 0;
3836
3837   inferior_ptid = null_ptid;
3838
3839   /* Now, if we have thread information, update inferior_ptid.  */
3840   ptid_t curr_ptid = get_current_thread (wait_status);
3841
3842   if (curr_ptid != null_ptid)
3843     {
3844       if (!remote_multi_process_p (rs))
3845         fake_pid_p = 1;
3846     }
3847   else
3848     {
3849       /* Without this, some commands which require an active target
3850          (such as kill) won't work.  This variable serves (at least)
3851          double duty as both the pid of the target process (if it has
3852          such), and as a flag indicating that a target is active.  */
3853       curr_ptid = magic_null_ptid;
3854       fake_pid_p = 1;
3855     }
3856
3857   remote_add_inferior (fake_pid_p, ptid_get_pid (curr_ptid), -1, 1);
3858
3859   /* Add the main thread and switch to it.  Don't try reading
3860      registers yet, since we haven't fetched the target description
3861      yet.  */
3862   thread_info *tp = add_thread_silent (curr_ptid);
3863   switch_to_thread_no_regs (tp);
3864 }
3865
3866 /* Print info about a thread that was found already stopped on
3867    connection.  */
3868
3869 static void
3870 print_one_stopped_thread (struct thread_info *thread)
3871 {
3872   struct target_waitstatus *ws = &thread->suspend.waitstatus;
3873
3874   switch_to_thread (thread->ptid);
3875   stop_pc = get_frame_pc (get_current_frame ());
3876   set_current_sal_from_frame (get_current_frame ());
3877
3878   thread->suspend.waitstatus_pending_p = 0;
3879
3880   if (ws->kind == TARGET_WAITKIND_STOPPED)
3881     {
3882       enum gdb_signal sig = ws->value.sig;
3883
3884       if (signal_print_state (sig))
3885         observer_notify_signal_received (sig);
3886     }
3887   observer_notify_normal_stop (NULL, 1);
3888 }
3889
3890 /* Process all initial stop replies the remote side sent in response
3891    to the ? packet.  These indicate threads that were already stopped
3892    on initial connection.  We mark these threads as stopped and print
3893    their current frame before giving the user the prompt.  */
3894
3895 static void
3896 process_initial_stop_replies (int from_tty)
3897 {
3898   int pending_stop_replies = stop_reply_queue_length ();
3899   struct inferior *inf;
3900   struct thread_info *thread;
3901   struct thread_info *selected = NULL;
3902   struct thread_info *lowest_stopped = NULL;
3903   struct thread_info *first = NULL;
3904
3905   /* Consume the initial pending events.  */
3906   while (pending_stop_replies-- > 0)
3907     {
3908       ptid_t waiton_ptid = minus_one_ptid;
3909       ptid_t event_ptid;
3910       struct target_waitstatus ws;
3911       int ignore_event = 0;
3912       struct thread_info *thread;
3913
3914       memset (&ws, 0, sizeof (ws));
3915       event_ptid = target_wait (waiton_ptid, &ws, TARGET_WNOHANG);
3916       if (remote_debug)
3917         print_target_wait_results (waiton_ptid, event_ptid, &ws);
3918
3919       switch (ws.kind)
3920         {
3921         case TARGET_WAITKIND_IGNORE:
3922         case TARGET_WAITKIND_NO_RESUMED:
3923         case TARGET_WAITKIND_SIGNALLED:
3924         case TARGET_WAITKIND_EXITED:
3925           /* We shouldn't see these, but if we do, just ignore.  */
3926           if (remote_debug)
3927             fprintf_unfiltered (gdb_stdlog, "remote: event ignored\n");
3928           ignore_event = 1;
3929           break;
3930
3931         case TARGET_WAITKIND_EXECD:
3932           xfree (ws.value.execd_pathname);
3933           break;
3934         default:
3935           break;
3936         }
3937
3938       if (ignore_event)
3939         continue;
3940
3941       thread = find_thread_ptid (event_ptid);
3942
3943       if (ws.kind == TARGET_WAITKIND_STOPPED)
3944         {
3945           enum gdb_signal sig = ws.value.sig;
3946
3947           /* Stubs traditionally report SIGTRAP as initial signal,
3948              instead of signal 0.  Suppress it.  */
3949           if (sig == GDB_SIGNAL_TRAP)
3950             sig = GDB_SIGNAL_0;
3951           thread->suspend.stop_signal = sig;
3952           ws.value.sig = sig;
3953         }
3954
3955       thread->suspend.waitstatus = ws;
3956
3957       if (ws.kind != TARGET_WAITKIND_STOPPED
3958           || ws.value.sig != GDB_SIGNAL_0)
3959         thread->suspend.waitstatus_pending_p = 1;
3960
3961       set_executing (event_ptid, 0);
3962       set_running (event_ptid, 0);
3963       thread->priv->vcont_resumed = 0;
3964     }
3965
3966   /* "Notice" the new inferiors before anything related to
3967      registers/memory.  */
3968   ALL_INFERIORS (inf)
3969     {
3970       if (inf->pid == 0)
3971         continue;
3972
3973       inf->needs_setup = 1;
3974
3975       if (non_stop)
3976         {
3977           thread = any_live_thread_of_process (inf->pid);
3978           notice_new_inferior (thread->ptid,
3979                                thread->state == THREAD_RUNNING,
3980                                from_tty);
3981         }
3982     }
3983
3984   /* If all-stop on top of non-stop, pause all threads.  Note this
3985      records the threads' stop pc, so must be done after "noticing"
3986      the inferiors.  */
3987   if (!non_stop)
3988     {
3989       stop_all_threads ();
3990
3991       /* If all threads of an inferior were already stopped, we
3992          haven't setup the inferior yet.  */
3993       ALL_INFERIORS (inf)
3994         {
3995           if (inf->pid == 0)
3996             continue;
3997
3998           if (inf->needs_setup)
3999             {
4000               thread = any_live_thread_of_process (inf->pid);
4001               switch_to_thread_no_regs (thread);
4002               setup_inferior (0);
4003             }
4004         }
4005     }
4006
4007   /* Now go over all threads that are stopped, and print their current
4008      frame.  If all-stop, then if there's a signalled thread, pick
4009      that as current.  */
4010   ALL_NON_EXITED_THREADS (thread)
4011     {
4012       if (first == NULL)
4013         first = thread;
4014
4015       if (!non_stop)
4016         set_running (thread->ptid, 0);
4017       else if (thread->state != THREAD_STOPPED)
4018         continue;
4019
4020       if (selected == NULL
4021           && thread->suspend.waitstatus_pending_p)
4022         selected = thread;
4023
4024       if (lowest_stopped == NULL
4025           || thread->inf->num < lowest_stopped->inf->num
4026           || thread->per_inf_num < lowest_stopped->per_inf_num)
4027         lowest_stopped = thread;
4028
4029       if (non_stop)
4030         print_one_stopped_thread (thread);
4031     }
4032
4033   /* In all-stop, we only print the status of one thread, and leave
4034      others with their status pending.  */
4035   if (!non_stop)
4036     {
4037       thread = selected;
4038       if (thread == NULL)
4039         thread = lowest_stopped;
4040       if (thread == NULL)
4041         thread = first;
4042
4043       print_one_stopped_thread (thread);
4044     }
4045
4046   /* For "info program".  */
4047   thread = inferior_thread ();
4048   if (thread->state == THREAD_STOPPED)
4049     set_last_target_status (inferior_ptid, thread->suspend.waitstatus);
4050 }
4051
4052 /* Start the remote connection and sync state.  */
4053
4054 static void
4055 remote_start_remote (int from_tty, struct target_ops *target, int extended_p)
4056 {
4057   struct remote_state *rs = get_remote_state ();
4058   struct packet_config *noack_config;
4059   char *wait_status = NULL;
4060
4061   /* Signal other parts that we're going through the initial setup,
4062      and so things may not be stable yet.  E.g., we don't try to
4063      install tracepoints until we've relocated symbols.  Also, a
4064      Ctrl-C before we're connected and synced up can't interrupt the
4065      target.  Instead, it offers to drop the (potentially wedged)
4066      connection.  */
4067   rs->starting_up = 1;
4068
4069   QUIT;
4070
4071   if (interrupt_on_connect)
4072     send_interrupt_sequence ();
4073
4074   /* Ack any packet which the remote side has already sent.  */
4075   remote_serial_write ("+", 1);
4076
4077   /* The first packet we send to the target is the optional "supported
4078      packets" request.  If the target can answer this, it will tell us
4079      which later probes to skip.  */
4080   remote_query_supported ();
4081
4082   /* If the stub wants to get a QAllow, compose one and send it.  */
4083   if (packet_support (PACKET_QAllow) != PACKET_DISABLE)
4084     remote_set_permissions (target);
4085
4086   /* gdbserver < 7.7 (before its fix from 2013-12-11) did reply to any
4087      unknown 'v' packet with string "OK".  "OK" gets interpreted by GDB
4088      as a reply to known packet.  For packet "vFile:setfs:" it is an
4089      invalid reply and GDB would return error in
4090      remote_hostio_set_filesystem, making remote files access impossible.
4091      Disable "vFile:setfs:" in such case.  Do not disable other 'v' packets as
4092      other "vFile" packets get correctly detected even on gdbserver < 7.7.  */
4093   {
4094     const char v_mustreplyempty[] = "vMustReplyEmpty";
4095
4096     putpkt (v_mustreplyempty);
4097     getpkt (&rs->buf, &rs->buf_size, 0);
4098     if (strcmp (rs->buf, "OK") == 0)
4099       remote_protocol_packets[PACKET_vFile_setfs].support = PACKET_DISABLE;
4100     else if (strcmp (rs->buf, "") != 0)
4101       error (_("Remote replied unexpectedly to '%s': %s"), v_mustreplyempty,
4102              rs->buf);
4103   }
4104
4105   /* Next, we possibly activate noack mode.
4106
4107      If the QStartNoAckMode packet configuration is set to AUTO,
4108      enable noack mode if the stub reported a wish for it with
4109      qSupported.
4110
4111      If set to TRUE, then enable noack mode even if the stub didn't
4112      report it in qSupported.  If the stub doesn't reply OK, the
4113      session ends with an error.
4114
4115      If FALSE, then don't activate noack mode, regardless of what the
4116      stub claimed should be the default with qSupported.  */
4117
4118   noack_config = &remote_protocol_packets[PACKET_QStartNoAckMode];
4119   if (packet_config_support (noack_config) != PACKET_DISABLE)
4120     {
4121       putpkt ("QStartNoAckMode");
4122       getpkt (&rs->buf, &rs->buf_size, 0);
4123       if (packet_ok (rs->buf, noack_config) == PACKET_OK)
4124         rs->noack_mode = 1;
4125     }
4126
4127   if (extended_p)
4128     {
4129       /* Tell the remote that we are using the extended protocol.  */
4130       putpkt ("!");
4131       getpkt (&rs->buf, &rs->buf_size, 0);
4132     }
4133
4134   /* Let the target know which signals it is allowed to pass down to
4135      the program.  */
4136   update_signals_program_target ();
4137
4138   /* Next, if the target can specify a description, read it.  We do
4139      this before anything involving memory or registers.  */
4140   target_find_description ();
4141
4142   /* Next, now that we know something about the target, update the
4143      address spaces in the program spaces.  */
4144   update_address_spaces ();
4145
4146   /* On OSs where the list of libraries is global to all
4147      processes, we fetch them early.  */
4148   if (gdbarch_has_global_solist (target_gdbarch ()))
4149     solib_add (NULL, from_tty, auto_solib_add);
4150
4151   if (target_is_non_stop_p ())
4152     {
4153       if (packet_support (PACKET_QNonStop) != PACKET_ENABLE)
4154         error (_("Non-stop mode requested, but remote "
4155                  "does not support non-stop"));
4156
4157       putpkt ("QNonStop:1");
4158       getpkt (&rs->buf, &rs->buf_size, 0);
4159
4160       if (strcmp (rs->buf, "OK") != 0)
4161         error (_("Remote refused setting non-stop mode with: %s"), rs->buf);
4162
4163       /* Find about threads and processes the stub is already
4164          controlling.  We default to adding them in the running state.
4165          The '?' query below will then tell us about which threads are
4166          stopped.  */
4167       remote_update_thread_list (target);
4168     }
4169   else if (packet_support (PACKET_QNonStop) == PACKET_ENABLE)
4170     {
4171       /* Don't assume that the stub can operate in all-stop mode.
4172          Request it explicitly.  */
4173       putpkt ("QNonStop:0");
4174       getpkt (&rs->buf, &rs->buf_size, 0);
4175
4176       if (strcmp (rs->buf, "OK") != 0)
4177         error (_("Remote refused setting all-stop mode with: %s"), rs->buf);
4178     }
4179
4180   /* Upload TSVs regardless of whether the target is running or not.  The
4181      remote stub, such as GDBserver, may have some predefined or builtin
4182      TSVs, even if the target is not running.  */
4183   if (remote_get_trace_status (target, current_trace_status ()) != -1)
4184     {
4185       struct uploaded_tsv *uploaded_tsvs = NULL;
4186
4187       remote_upload_trace_state_variables (target, &uploaded_tsvs);
4188       merge_uploaded_trace_state_variables (&uploaded_tsvs);
4189     }
4190
4191   /* Check whether the target is running now.  */
4192   putpkt ("?");
4193   getpkt (&rs->buf, &rs->buf_size, 0);
4194
4195   if (!target_is_non_stop_p ())
4196     {
4197       if (rs->buf[0] == 'W' || rs->buf[0] == 'X')
4198         {
4199           if (!extended_p)
4200             error (_("The target is not running (try extended-remote?)"));
4201
4202           /* We're connected, but not running.  Drop out before we
4203              call start_remote.  */
4204           rs->starting_up = 0;
4205           return;
4206         }
4207       else
4208         {
4209           /* Save the reply for later.  */
4210           wait_status = (char *) alloca (strlen (rs->buf) + 1);
4211           strcpy (wait_status, rs->buf);
4212         }
4213
4214       /* Fetch thread list.  */
4215       target_update_thread_list ();
4216
4217       /* Let the stub know that we want it to return the thread.  */
4218       set_continue_thread (minus_one_ptid);
4219
4220       if (thread_count () == 0)
4221         {
4222           /* Target has no concept of threads at all.  GDB treats
4223              non-threaded target as single-threaded; add a main
4224              thread.  */
4225           add_current_inferior_and_thread (wait_status);
4226         }
4227       else
4228         {
4229           /* We have thread information; select the thread the target
4230              says should be current.  If we're reconnecting to a
4231              multi-threaded program, this will ideally be the thread
4232              that last reported an event before GDB disconnected.  */
4233           inferior_ptid = get_current_thread (wait_status);
4234           if (ptid_equal (inferior_ptid, null_ptid))
4235             {
4236               /* Odd... The target was able to list threads, but not
4237                  tell us which thread was current (no "thread"
4238                  register in T stop reply?).  Just pick the first
4239                  thread in the thread list then.  */
4240               
4241               if (remote_debug)
4242                 fprintf_unfiltered (gdb_stdlog,
4243                                     "warning: couldn't determine remote "
4244                                     "current thread; picking first in list.\n");
4245
4246               inferior_ptid = thread_list->ptid;
4247             }
4248         }
4249
4250       /* init_wait_for_inferior should be called before get_offsets in order
4251          to manage `inserted' flag in bp loc in a correct state.
4252          breakpoint_init_inferior, called from init_wait_for_inferior, set
4253          `inserted' flag to 0, while before breakpoint_re_set, called from
4254          start_remote, set `inserted' flag to 1.  In the initialization of
4255          inferior, breakpoint_init_inferior should be called first, and then
4256          breakpoint_re_set can be called.  If this order is broken, state of
4257          `inserted' flag is wrong, and cause some problems on breakpoint
4258          manipulation.  */
4259       init_wait_for_inferior ();
4260
4261       get_offsets ();           /* Get text, data & bss offsets.  */
4262
4263       /* If we could not find a description using qXfer, and we know
4264          how to do it some other way, try again.  This is not
4265          supported for non-stop; it could be, but it is tricky if
4266          there are no stopped threads when we connect.  */
4267       if (remote_read_description_p (target)
4268           && gdbarch_target_desc (target_gdbarch ()) == NULL)
4269         {
4270           target_clear_description ();
4271           target_find_description ();
4272         }
4273
4274       /* Use the previously fetched status.  */
4275       gdb_assert (wait_status != NULL);
4276       strcpy (rs->buf, wait_status);
4277       rs->cached_wait_status = 1;
4278
4279       start_remote (from_tty); /* Initialize gdb process mechanisms.  */
4280     }
4281   else
4282     {
4283       /* Clear WFI global state.  Do this before finding about new
4284          threads and inferiors, and setting the current inferior.
4285          Otherwise we would clear the proceed status of the current
4286          inferior when we want its stop_soon state to be preserved
4287          (see notice_new_inferior).  */
4288       init_wait_for_inferior ();
4289
4290       /* In non-stop, we will either get an "OK", meaning that there
4291          are no stopped threads at this time; or, a regular stop
4292          reply.  In the latter case, there may be more than one thread
4293          stopped --- we pull them all out using the vStopped
4294          mechanism.  */
4295       if (strcmp (rs->buf, "OK") != 0)
4296         {
4297           struct notif_client *notif = &notif_client_stop;
4298
4299           /* remote_notif_get_pending_replies acks this one, and gets
4300              the rest out.  */
4301           rs->notif_state->pending_event[notif_client_stop.id]
4302             = remote_notif_parse (notif, rs->buf);
4303           remote_notif_get_pending_events (notif);
4304         }
4305
4306       if (thread_count () == 0)
4307         {
4308           if (!extended_p)
4309             error (_("The target is not running (try extended-remote?)"));
4310
4311           /* We're connected, but not running.  Drop out before we
4312              call start_remote.  */
4313           rs->starting_up = 0;
4314           return;
4315         }
4316
4317       /* In non-stop mode, any cached wait status will be stored in
4318          the stop reply queue.  */
4319       gdb_assert (wait_status == NULL);
4320
4321       /* Report all signals during attach/startup.  */
4322       remote_pass_signals (target, 0, NULL);
4323
4324       /* If there are already stopped threads, mark them stopped and
4325          report their stops before giving the prompt to the user.  */
4326       process_initial_stop_replies (from_tty);
4327
4328       if (target_can_async_p ())
4329         target_async (1);
4330     }
4331
4332   /* If we connected to a live target, do some additional setup.  */
4333   if (target_has_execution)
4334     {
4335       if (symfile_objfile)      /* No use without a symbol-file.  */
4336         remote_check_symbols ();
4337     }
4338
4339   /* Possibly the target has been engaged in a trace run started
4340      previously; find out where things are at.  */
4341   if (remote_get_trace_status (target, current_trace_status ()) != -1)
4342     {
4343       struct uploaded_tp *uploaded_tps = NULL;
4344
4345       if (current_trace_status ()->running)
4346         printf_filtered (_("Trace is already running on the target.\n"));
4347
4348       remote_upload_tracepoints (target, &uploaded_tps);
4349
4350       merge_uploaded_tracepoints (&uploaded_tps);
4351     }
4352
4353   /* Possibly the target has been engaged in a btrace record started
4354      previously; find out where things are at.  */
4355   remote_btrace_maybe_reopen ();
4356
4357   /* The thread and inferior lists are now synchronized with the
4358      target, our symbols have been relocated, and we're merged the
4359      target's tracepoints with ours.  We're done with basic start
4360      up.  */
4361   rs->starting_up = 0;
4362
4363   /* Maybe breakpoints are global and need to be inserted now.  */
4364   if (breakpoints_should_be_inserted_now ())
4365     insert_breakpoints ();
4366 }
4367
4368 /* Open a connection to a remote debugger.
4369    NAME is the filename used for communication.  */
4370
4371 static void
4372 remote_open (const char *name, int from_tty)
4373 {
4374   remote_open_1 (name, from_tty, &remote_ops, 0);
4375 }
4376
4377 /* Open a connection to a remote debugger using the extended
4378    remote gdb protocol.  NAME is the filename used for communication.  */
4379
4380 static void
4381 extended_remote_open (const char *name, int from_tty)
4382 {
4383   remote_open_1 (name, from_tty, &extended_remote_ops, 1 /*extended_p */);
4384 }
4385
4386 /* Reset all packets back to "unknown support".  Called when opening a
4387    new connection to a remote target.  */
4388
4389 static void
4390 reset_all_packet_configs_support (void)
4391 {
4392   int i;
4393
4394   for (i = 0; i < PACKET_MAX; i++)
4395     remote_protocol_packets[i].support = PACKET_SUPPORT_UNKNOWN;
4396 }
4397
4398 /* Initialize all packet configs.  */
4399
4400 static void
4401 init_all_packet_configs (void)
4402 {
4403   int i;
4404
4405   for (i = 0; i < PACKET_MAX; i++)
4406     {
4407       remote_protocol_packets[i].detect = AUTO_BOOLEAN_AUTO;
4408       remote_protocol_packets[i].support = PACKET_SUPPORT_UNKNOWN;
4409     }
4410 }
4411
4412 /* Symbol look-up.  */
4413
4414 static void
4415 remote_check_symbols (void)
4416 {
4417   struct remote_state *rs = get_remote_state ();
4418   char *msg, *reply, *tmp;
4419   int end;
4420   long reply_size;
4421   struct cleanup *old_chain;
4422
4423   /* The remote side has no concept of inferiors that aren't running
4424      yet, it only knows about running processes.  If we're connected
4425      but our current inferior is not running, we should not invite the
4426      remote target to request symbol lookups related to its
4427      (unrelated) current process.  */
4428   if (!target_has_execution)
4429     return;
4430
4431   if (packet_support (PACKET_qSymbol) == PACKET_DISABLE)
4432     return;
4433
4434   /* Make sure the remote is pointing at the right process.  Note
4435      there's no way to select "no process".  */
4436   set_general_process ();
4437
4438   /* Allocate a message buffer.  We can't reuse the input buffer in RS,
4439      because we need both at the same time.  */
4440   msg = (char *) xmalloc (get_remote_packet_size ());
4441   old_chain = make_cleanup (xfree, msg);
4442   reply = (char *) xmalloc (get_remote_packet_size ());
4443   make_cleanup (free_current_contents, &reply);
4444   reply_size = get_remote_packet_size ();
4445
4446   /* Invite target to request symbol lookups.  */
4447
4448   putpkt ("qSymbol::");
4449   getpkt (&reply, &reply_size, 0);
4450   packet_ok (reply, &remote_protocol_packets[PACKET_qSymbol]);
4451
4452   while (startswith (reply, "qSymbol:"))
4453     {
4454       struct bound_minimal_symbol sym;
4455
4456       tmp = &reply[8];
4457       end = hex2bin (tmp, (gdb_byte *) msg, strlen (tmp) / 2);
4458       msg[end] = '\0';
4459       sym = lookup_minimal_symbol (msg, NULL, NULL);
4460       if (sym.minsym == NULL)
4461         xsnprintf (msg, get_remote_packet_size (), "qSymbol::%s", &reply[8]);
4462       else
4463         {
4464           int addr_size = gdbarch_addr_bit (target_gdbarch ()) / 8;
4465           CORE_ADDR sym_addr = BMSYMBOL_VALUE_ADDRESS (sym);
4466
4467           /* If this is a function address, return the start of code
4468              instead of any data function descriptor.  */
4469           sym_addr = gdbarch_convert_from_func_ptr_addr (target_gdbarch (),
4470                                                          sym_addr,
4471                                                          &current_target);
4472
4473           xsnprintf (msg, get_remote_packet_size (), "qSymbol:%s:%s",
4474                      phex_nz (sym_addr, addr_size), &reply[8]);
4475         }
4476   
4477       putpkt (msg);
4478       getpkt (&reply, &reply_size, 0);
4479     }
4480
4481   do_cleanups (old_chain);
4482 }
4483
4484 static struct serial *
4485 remote_serial_open (const char *name)
4486 {
4487   static int udp_warning = 0;
4488
4489   /* FIXME: Parsing NAME here is a hack.  But we want to warn here instead
4490      of in ser-tcp.c, because it is the remote protocol assuming that the
4491      serial connection is reliable and not the serial connection promising
4492      to be.  */
4493   if (!udp_warning && startswith (name, "udp:"))
4494     {
4495       warning (_("The remote protocol may be unreliable over UDP.\n"
4496                  "Some events may be lost, rendering further debugging "
4497                  "impossible."));
4498       udp_warning = 1;
4499     }
4500
4501   return serial_open (name);
4502 }
4503
4504 /* Inform the target of our permission settings.  The permission flags
4505    work without this, but if the target knows the settings, it can do
4506    a couple things.  First, it can add its own check, to catch cases
4507    that somehow manage to get by the permissions checks in target
4508    methods.  Second, if the target is wired to disallow particular
4509    settings (for instance, a system in the field that is not set up to
4510    be able to stop at a breakpoint), it can object to any unavailable
4511    permissions.  */
4512
4513 void
4514 remote_set_permissions (struct target_ops *self)
4515 {
4516   struct remote_state *rs = get_remote_state ();
4517
4518   xsnprintf (rs->buf, get_remote_packet_size (), "QAllow:"
4519              "WriteReg:%x;WriteMem:%x;"
4520              "InsertBreak:%x;InsertTrace:%x;"
4521              "InsertFastTrace:%x;Stop:%x",
4522              may_write_registers, may_write_memory,
4523              may_insert_breakpoints, may_insert_tracepoints,
4524              may_insert_fast_tracepoints, may_stop);
4525   putpkt (rs->buf);
4526   getpkt (&rs->buf, &rs->buf_size, 0);
4527
4528   /* If the target didn't like the packet, warn the user.  Do not try
4529      to undo the user's settings, that would just be maddening.  */
4530   if (strcmp (rs->buf, "OK") != 0)
4531     warning (_("Remote refused setting permissions with: %s"), rs->buf);
4532 }
4533
4534 /* This type describes each known response to the qSupported
4535    packet.  */
4536 struct protocol_feature
4537 {
4538   /* The name of this protocol feature.  */
4539   const char *name;
4540
4541   /* The default for this protocol feature.  */
4542   enum packet_support default_support;
4543
4544   /* The function to call when this feature is reported, or after
4545      qSupported processing if the feature is not supported.
4546      The first argument points to this structure.  The second
4547      argument indicates whether the packet requested support be
4548      enabled, disabled, or probed (or the default, if this function
4549      is being called at the end of processing and this feature was
4550      not reported).  The third argument may be NULL; if not NULL, it
4551      is a NUL-terminated string taken from the packet following
4552      this feature's name and an equals sign.  */
4553   void (*func) (const struct protocol_feature *, enum packet_support,
4554                 const char *);
4555
4556   /* The corresponding packet for this feature.  Only used if
4557      FUNC is remote_supported_packet.  */
4558   int packet;
4559 };
4560
4561 static void
4562 remote_supported_packet (const struct protocol_feature *feature,
4563                          enum packet_support support,
4564                          const char *argument)
4565 {
4566   if (argument)
4567     {
4568       warning (_("Remote qSupported response supplied an unexpected value for"
4569                  " \"%s\"."), feature->name);
4570       return;
4571     }
4572
4573   remote_protocol_packets[feature->packet].support = support;
4574 }
4575
4576 static void
4577 remote_packet_size (const struct protocol_feature *feature,
4578                     enum packet_support support, const char *value)
4579 {
4580   struct remote_state *rs = get_remote_state ();
4581
4582   int packet_size;
4583   char *value_end;
4584
4585   if (support != PACKET_ENABLE)
4586     return;
4587
4588   if (value == NULL || *value == '\0')
4589     {
4590       warning (_("Remote target reported \"%s\" without a size."),
4591                feature->name);
4592       return;
4593     }
4594
4595   errno = 0;
4596   packet_size = strtol (value, &value_end, 16);
4597   if (errno != 0 || *value_end != '\0' || packet_size < 0)
4598     {
4599       warning (_("Remote target reported \"%s\" with a bad size: \"%s\"."),
4600                feature->name, value);
4601       return;
4602     }
4603
4604   /* Record the new maximum packet size.  */
4605   rs->explicit_packet_size = packet_size;
4606 }
4607
4608 static const struct protocol_feature remote_protocol_features[] = {
4609   { "PacketSize", PACKET_DISABLE, remote_packet_size, -1 },
4610   { "qXfer:auxv:read", PACKET_DISABLE, remote_supported_packet,
4611     PACKET_qXfer_auxv },
4612   { "qXfer:exec-file:read", PACKET_DISABLE, remote_supported_packet,
4613     PACKET_qXfer_exec_file },
4614   { "qXfer:features:read", PACKET_DISABLE, remote_supported_packet,
4615     PACKET_qXfer_features },
4616   { "qXfer:libraries:read", PACKET_DISABLE, remote_supported_packet,
4617     PACKET_qXfer_libraries },
4618   { "qXfer:libraries-svr4:read", PACKET_DISABLE, remote_supported_packet,
4619     PACKET_qXfer_libraries_svr4 },
4620   { "augmented-libraries-svr4-read", PACKET_DISABLE,
4621     remote_supported_packet, PACKET_augmented_libraries_svr4_read_feature },
4622   { "qXfer:memory-map:read", PACKET_DISABLE, remote_supported_packet,
4623     PACKET_qXfer_memory_map },
4624   { "qXfer:spu:read", PACKET_DISABLE, remote_supported_packet,
4625     PACKET_qXfer_spu_read },
4626   { "qXfer:spu:write", PACKET_DISABLE, remote_supported_packet,
4627     PACKET_qXfer_spu_write },
4628   { "qXfer:osdata:read", PACKET_DISABLE, remote_supported_packet,
4629     PACKET_qXfer_osdata },
4630   { "qXfer:threads:read", PACKET_DISABLE, remote_supported_packet,
4631     PACKET_qXfer_threads },
4632   { "qXfer:traceframe-info:read", PACKET_DISABLE, remote_supported_packet,
4633     PACKET_qXfer_traceframe_info },
4634   { "QPassSignals", PACKET_DISABLE, remote_supported_packet,
4635     PACKET_QPassSignals },
4636   { "QCatchSyscalls", PACKET_DISABLE, remote_supported_packet,
4637     PACKET_QCatchSyscalls },
4638   { "QProgramSignals", PACKET_DISABLE, remote_supported_packet,
4639     PACKET_QProgramSignals },
4640   { "QStartupWithShell", PACKET_DISABLE, remote_supported_packet,
4641     PACKET_QStartupWithShell },
4642   { "QEnvironmentHexEncoded", PACKET_DISABLE, remote_supported_packet,
4643     PACKET_QEnvironmentHexEncoded },
4644   { "QEnvironmentReset", PACKET_DISABLE, remote_supported_packet,
4645     PACKET_QEnvironmentReset },
4646   { "QEnvironmentUnset", PACKET_DISABLE, remote_supported_packet,
4647     PACKET_QEnvironmentUnset },
4648   { "QStartNoAckMode", PACKET_DISABLE, remote_supported_packet,
4649     PACKET_QStartNoAckMode },
4650   { "multiprocess", PACKET_DISABLE, remote_supported_packet,
4651     PACKET_multiprocess_feature },
4652   { "QNonStop", PACKET_DISABLE, remote_supported_packet, PACKET_QNonStop },
4653   { "qXfer:siginfo:read", PACKET_DISABLE, remote_supported_packet,
4654     PACKET_qXfer_siginfo_read },
4655   { "qXfer:siginfo:write", PACKET_DISABLE, remote_supported_packet,
4656     PACKET_qXfer_siginfo_write },
4657   { "ConditionalTracepoints", PACKET_DISABLE, remote_supported_packet,
4658     PACKET_ConditionalTracepoints },
4659   { "ConditionalBreakpoints", PACKET_DISABLE, remote_supported_packet,
4660     PACKET_ConditionalBreakpoints },
4661   { "BreakpointCommands", PACKET_DISABLE, remote_supported_packet,
4662     PACKET_BreakpointCommands },
4663   { "FastTracepoints", PACKET_DISABLE, remote_supported_packet,
4664     PACKET_FastTracepoints },
4665   { "StaticTracepoints", PACKET_DISABLE, remote_supported_packet,
4666     PACKET_StaticTracepoints },
4667   {"InstallInTrace", PACKET_DISABLE, remote_supported_packet,
4668    PACKET_InstallInTrace},
4669   { "DisconnectedTracing", PACKET_DISABLE, remote_supported_packet,
4670     PACKET_DisconnectedTracing_feature },
4671   { "ReverseContinue", PACKET_DISABLE, remote_supported_packet,
4672     PACKET_bc },
4673   { "ReverseStep", PACKET_DISABLE, remote_supported_packet,
4674     PACKET_bs },
4675   { "TracepointSource", PACKET_DISABLE, remote_supported_packet,
4676     PACKET_TracepointSource },
4677   { "QAllow", PACKET_DISABLE, remote_supported_packet,
4678     PACKET_QAllow },
4679   { "EnableDisableTracepoints", PACKET_DISABLE, remote_supported_packet,
4680     PACKET_EnableDisableTracepoints_feature },
4681   { "qXfer:fdpic:read", PACKET_DISABLE, remote_supported_packet,
4682     PACKET_qXfer_fdpic },
4683   { "qXfer:uib:read", PACKET_DISABLE, remote_supported_packet,
4684     PACKET_qXfer_uib },
4685   { "QDisableRandomization", PACKET_DISABLE, remote_supported_packet,
4686     PACKET_QDisableRandomization },
4687   { "QAgent", PACKET_DISABLE, remote_supported_packet, PACKET_QAgent},
4688   { "QTBuffer:size", PACKET_DISABLE,
4689     remote_supported_packet, PACKET_QTBuffer_size},
4690   { "tracenz", PACKET_DISABLE, remote_supported_packet, PACKET_tracenz_feature },
4691   { "Qbtrace:off", PACKET_DISABLE, remote_supported_packet, PACKET_Qbtrace_off },
4692   { "Qbtrace:bts", PACKET_DISABLE, remote_supported_packet, PACKET_Qbtrace_bts },
4693   { "Qbtrace:pt", PACKET_DISABLE, remote_supported_packet, PACKET_Qbtrace_pt },
4694   { "qXfer:btrace:read", PACKET_DISABLE, remote_supported_packet,
4695     PACKET_qXfer_btrace },
4696   { "qXfer:btrace-conf:read", PACKET_DISABLE, remote_supported_packet,
4697     PACKET_qXfer_btrace_conf },
4698   { "Qbtrace-conf:bts:size", PACKET_DISABLE, remote_supported_packet,
4699     PACKET_Qbtrace_conf_bts_size },
4700   { "swbreak", PACKET_DISABLE, remote_supported_packet, PACKET_swbreak_feature },
4701   { "hwbreak", PACKET_DISABLE, remote_supported_packet, PACKET_hwbreak_feature },
4702   { "fork-events", PACKET_DISABLE, remote_supported_packet,
4703     PACKET_fork_event_feature },
4704   { "vfork-events", PACKET_DISABLE, remote_supported_packet,
4705     PACKET_vfork_event_feature },
4706   { "exec-events", PACKET_DISABLE, remote_supported_packet,
4707     PACKET_exec_event_feature },
4708   { "Qbtrace-conf:pt:size", PACKET_DISABLE, remote_supported_packet,
4709     PACKET_Qbtrace_conf_pt_size },
4710   { "vContSupported", PACKET_DISABLE, remote_supported_packet, PACKET_vContSupported },
4711   { "QThreadEvents", PACKET_DISABLE, remote_supported_packet, PACKET_QThreadEvents },
4712   { "no-resumed", PACKET_DISABLE, remote_supported_packet, PACKET_no_resumed },
4713 };
4714
4715 static char *remote_support_xml;
4716
4717 /* Register string appended to "xmlRegisters=" in qSupported query.  */
4718
4719 void
4720 register_remote_support_xml (const char *xml)
4721 {
4722 #if defined(HAVE_LIBEXPAT)
4723   if (remote_support_xml == NULL)
4724     remote_support_xml = concat ("xmlRegisters=", xml, (char *) NULL);
4725   else
4726     {
4727       char *copy = xstrdup (remote_support_xml + 13);
4728       char *p = strtok (copy, ",");
4729
4730       do
4731         {
4732           if (strcmp (p, xml) == 0)
4733             {
4734               /* already there */
4735               xfree (copy);
4736               return;
4737             }
4738         }
4739       while ((p = strtok (NULL, ",")) != NULL);
4740       xfree (copy);
4741
4742       remote_support_xml = reconcat (remote_support_xml,
4743                                      remote_support_xml, ",", xml,
4744                                      (char *) NULL);
4745     }
4746 #endif
4747 }
4748
4749 static char *
4750 remote_query_supported_append (char *msg, const char *append)
4751 {
4752   if (msg)
4753     return reconcat (msg, msg, ";", append, (char *) NULL);
4754   else
4755     return xstrdup (append);
4756 }
4757
4758 static void
4759 remote_query_supported (void)
4760 {
4761   struct remote_state *rs = get_remote_state ();
4762   char *next;
4763   int i;
4764   unsigned char seen [ARRAY_SIZE (remote_protocol_features)];
4765
4766   /* The packet support flags are handled differently for this packet
4767      than for most others.  We treat an error, a disabled packet, and
4768      an empty response identically: any features which must be reported
4769      to be used will be automatically disabled.  An empty buffer
4770      accomplishes this, since that is also the representation for a list
4771      containing no features.  */
4772
4773   rs->buf[0] = 0;
4774   if (packet_support (PACKET_qSupported) != PACKET_DISABLE)
4775     {
4776       char *q = NULL;
4777       struct cleanup *old_chain = make_cleanup (free_current_contents, &q);
4778
4779       if (packet_set_cmd_state (PACKET_multiprocess_feature) != AUTO_BOOLEAN_FALSE)
4780         q = remote_query_supported_append (q, "multiprocess+");
4781
4782       if (packet_set_cmd_state (PACKET_swbreak_feature) != AUTO_BOOLEAN_FALSE)
4783         q = remote_query_supported_append (q, "swbreak+");
4784       if (packet_set_cmd_state (PACKET_hwbreak_feature) != AUTO_BOOLEAN_FALSE)
4785         q = remote_query_supported_append (q, "hwbreak+");
4786
4787       q = remote_query_supported_append (q, "qRelocInsn+");
4788
4789       if (packet_set_cmd_state (PACKET_fork_event_feature)
4790           != AUTO_BOOLEAN_FALSE)
4791         q = remote_query_supported_append (q, "fork-events+");
4792       if (packet_set_cmd_state (PACKET_vfork_event_feature)
4793           != AUTO_BOOLEAN_FALSE)
4794         q = remote_query_supported_append (q, "vfork-events+");
4795       if (packet_set_cmd_state (PACKET_exec_event_feature)
4796           != AUTO_BOOLEAN_FALSE)
4797         q = remote_query_supported_append (q, "exec-events+");
4798
4799       if (packet_set_cmd_state (PACKET_vContSupported) != AUTO_BOOLEAN_FALSE)
4800         q = remote_query_supported_append (q, "vContSupported+");
4801
4802       if (packet_set_cmd_state (PACKET_QThreadEvents) != AUTO_BOOLEAN_FALSE)
4803         q = remote_query_supported_append (q, "QThreadEvents+");
4804
4805       if (packet_set_cmd_state (PACKET_no_resumed) != AUTO_BOOLEAN_FALSE)
4806         q = remote_query_supported_append (q, "no-resumed+");
4807
4808       /* Keep this one last to work around a gdbserver <= 7.10 bug in
4809          the qSupported:xmlRegisters=i386 handling.  */
4810       if (remote_support_xml != NULL)
4811         q = remote_query_supported_append (q, remote_support_xml);
4812
4813       q = reconcat (q, "qSupported:", q, (char *) NULL);
4814       putpkt (q);
4815
4816       do_cleanups (old_chain);
4817
4818       getpkt (&rs->buf, &rs->buf_size, 0);
4819
4820       /* If an error occured, warn, but do not return - just reset the
4821          buffer to empty and go on to disable features.  */
4822       if (packet_ok (rs->buf, &remote_protocol_packets[PACKET_qSupported])
4823           == PACKET_ERROR)
4824         {
4825           warning (_("Remote failure reply: %s"), rs->buf);
4826           rs->buf[0] = 0;
4827         }
4828     }
4829
4830   memset (seen, 0, sizeof (seen));
4831
4832   next = rs->buf;
4833   while (*next)
4834     {
4835       enum packet_support is_supported;
4836       char *p, *end, *name_end, *value;
4837
4838       /* First separate out this item from the rest of the packet.  If
4839          there's another item after this, we overwrite the separator
4840          (terminated strings are much easier to work with).  */
4841       p = next;
4842       end = strchr (p, ';');
4843       if (end == NULL)
4844         {
4845           end = p + strlen (p);
4846           next = end;
4847         }
4848       else
4849         {
4850           *end = '\0';
4851           next = end + 1;
4852
4853           if (end == p)
4854             {
4855               warning (_("empty item in \"qSupported\" response"));
4856               continue;
4857             }
4858         }
4859
4860       name_end = strchr (p, '=');
4861       if (name_end)
4862         {
4863           /* This is a name=value entry.  */
4864           is_supported = PACKET_ENABLE;
4865           value = name_end + 1;
4866           *name_end = '\0';
4867         }
4868       else
4869         {
4870           value = NULL;
4871           switch (end[-1])
4872             {
4873             case '+':
4874               is_supported = PACKET_ENABLE;
4875               break;
4876
4877             case '-':
4878               is_supported = PACKET_DISABLE;
4879               break;
4880
4881             case '?':
4882               is_supported = PACKET_SUPPORT_UNKNOWN;
4883               break;
4884
4885             default:
4886               warning (_("unrecognized item \"%s\" "
4887                          "in \"qSupported\" response"), p);
4888               continue;
4889             }
4890           end[-1] = '\0';
4891         }
4892
4893       for (i = 0; i < ARRAY_SIZE (remote_protocol_features); i++)
4894         if (strcmp (remote_protocol_features[i].name, p) == 0)
4895           {
4896             const struct protocol_feature *feature;
4897
4898             seen[i] = 1;
4899             feature = &remote_protocol_features[i];
4900             feature->func (feature, is_supported, value);
4901             break;
4902           }
4903     }
4904
4905   /* If we increased the packet size, make sure to increase the global
4906      buffer size also.  We delay this until after parsing the entire
4907      qSupported packet, because this is the same buffer we were
4908      parsing.  */
4909   if (rs->buf_size < rs->explicit_packet_size)
4910     {
4911       rs->buf_size = rs->explicit_packet_size;
4912       rs->buf = (char *) xrealloc (rs->buf, rs->buf_size);
4913     }
4914
4915   /* Handle the defaults for unmentioned features.  */
4916   for (i = 0; i < ARRAY_SIZE (remote_protocol_features); i++)
4917     if (!seen[i])
4918       {
4919         const struct protocol_feature *feature;
4920
4921         feature = &remote_protocol_features[i];
4922         feature->func (feature, feature->default_support, NULL);
4923       }
4924 }
4925
4926 /* Serial QUIT handler for the remote serial descriptor.
4927
4928    Defers handling a Ctrl-C until we're done with the current
4929    command/response packet sequence, unless:
4930
4931    - We're setting up the connection.  Don't send a remote interrupt
4932      request, as we're not fully synced yet.  Quit immediately
4933      instead.
4934
4935    - The target has been resumed in the foreground
4936      (target_terminal_is_ours is false) with a synchronous resume
4937      packet, and we're blocked waiting for the stop reply, thus a
4938      Ctrl-C should be immediately sent to the target.
4939
4940    - We get a second Ctrl-C while still within the same serial read or
4941      write.  In that case the serial is seemingly wedged --- offer to
4942      quit/disconnect.
4943
4944    - We see a second Ctrl-C without target response, after having
4945      previously interrupted the target.  In that case the target/stub
4946      is probably wedged --- offer to quit/disconnect.
4947 */
4948
4949 static void
4950 remote_serial_quit_handler (void)
4951 {
4952   struct remote_state *rs = get_remote_state ();
4953
4954   if (check_quit_flag ())
4955     {
4956       /* If we're starting up, we're not fully synced yet.  Quit
4957          immediately.  */
4958       if (rs->starting_up)
4959         quit ();
4960       else if (rs->got_ctrlc_during_io)
4961         {
4962           if (query (_("The target is not responding to GDB commands.\n"
4963                        "Stop debugging it? ")))
4964             remote_unpush_and_throw ();
4965         }
4966       /* If ^C has already been sent once, offer to disconnect.  */
4967       else if (!target_terminal_is_ours () && rs->ctrlc_pending_p)
4968         interrupt_query ();
4969       /* All-stop protocol, and blocked waiting for stop reply.  Send
4970          an interrupt request.  */
4971       else if (!target_terminal_is_ours () && rs->waiting_for_stop_reply)
4972         target_interrupt (inferior_ptid);
4973       else
4974         rs->got_ctrlc_during_io = 1;
4975     }
4976 }
4977
4978 /* Remove any of the remote.c targets from target stack.  Upper targets depend
4979    on it so remove them first.  */
4980
4981 static void
4982 remote_unpush_target (void)
4983 {
4984   pop_all_targets_at_and_above (process_stratum);
4985 }
4986
4987 static void
4988 remote_unpush_and_throw (void)
4989 {
4990   remote_unpush_target ();
4991   throw_error (TARGET_CLOSE_ERROR, _("Disconnected from target."));
4992 }
4993
4994 static void
4995 remote_open_1 (const char *name, int from_tty,
4996                struct target_ops *target, int extended_p)
4997 {
4998   struct remote_state *rs = get_remote_state ();
4999
5000   if (name == 0)
5001     error (_("To open a remote debug connection, you need to specify what\n"
5002            "serial device is attached to the remote system\n"
5003            "(e.g. /dev/ttyS0, /dev/ttya, COM1, etc.)."));
5004
5005   /* See FIXME above.  */
5006   if (!target_async_permitted)
5007     wait_forever_enabled_p = 1;
5008
5009   /* If we're connected to a running target, target_preopen will kill it.
5010      Ask this question first, before target_preopen has a chance to kill
5011      anything.  */
5012   if (rs->remote_desc != NULL && !have_inferiors ())
5013     {
5014       if (from_tty
5015           && !query (_("Already connected to a remote target.  Disconnect? ")))
5016         error (_("Still connected."));
5017     }
5018
5019   /* Here the possibly existing remote target gets unpushed.  */
5020   target_preopen (from_tty);
5021
5022   /* Make sure we send the passed signals list the next time we resume.  */
5023   xfree (rs->last_pass_packet);
5024   rs->last_pass_packet = NULL;
5025
5026   /* Make sure we send the program signals list the next time we
5027      resume.  */
5028   xfree (rs->last_program_signals_packet);
5029   rs->last_program_signals_packet = NULL;
5030
5031   remote_fileio_reset ();
5032   reopen_exec_file ();
5033   reread_symbols ();
5034
5035   rs->remote_desc = remote_serial_open (name);
5036   if (!rs->remote_desc)
5037     perror_with_name (name);
5038
5039   if (baud_rate != -1)
5040     {
5041       if (serial_setbaudrate (rs->remote_desc, baud_rate))
5042         {
5043           /* The requested speed could not be set.  Error out to
5044              top level after closing remote_desc.  Take care to
5045              set remote_desc to NULL to avoid closing remote_desc
5046              more than once.  */
5047           serial_close (rs->remote_desc);
5048           rs->remote_desc = NULL;
5049           perror_with_name (name);
5050         }
5051     }
5052
5053   serial_setparity (rs->remote_desc, serial_parity);
5054   serial_raw (rs->remote_desc);
5055
5056   /* If there is something sitting in the buffer we might take it as a
5057      response to a command, which would be bad.  */
5058   serial_flush_input (rs->remote_desc);
5059
5060   if (from_tty)
5061     {
5062       puts_filtered ("Remote debugging using ");
5063       puts_filtered (name);
5064       puts_filtered ("\n");
5065     }
5066   push_target (target);         /* Switch to using remote target now.  */
5067
5068   /* Register extra event sources in the event loop.  */
5069   remote_async_inferior_event_token
5070     = create_async_event_handler (remote_async_inferior_event_handler,
5071                                   NULL);
5072   rs->notif_state = remote_notif_state_allocate ();
5073
5074   /* Reset the target state; these things will be queried either by
5075      remote_query_supported or as they are needed.  */
5076   reset_all_packet_configs_support ();
5077   rs->cached_wait_status = 0;
5078   rs->explicit_packet_size = 0;
5079   rs->noack_mode = 0;
5080   rs->extended = extended_p;
5081   rs->waiting_for_stop_reply = 0;
5082   rs->ctrlc_pending_p = 0;
5083   rs->got_ctrlc_during_io = 0;
5084
5085   rs->general_thread = not_sent_ptid;
5086   rs->continue_thread = not_sent_ptid;
5087   rs->remote_traceframe_number = -1;
5088
5089   rs->last_resume_exec_dir = EXEC_FORWARD;
5090
5091   /* Probe for ability to use "ThreadInfo" query, as required.  */
5092   rs->use_threadinfo_query = 1;
5093   rs->use_threadextra_query = 1;
5094
5095   readahead_cache_invalidate ();
5096
5097   /* Start out by owning the terminal.  */
5098   remote_async_terminal_ours_p = 1;
5099
5100   if (target_async_permitted)
5101     {
5102       /* FIXME: cagney/1999-09-23: During the initial connection it is
5103          assumed that the target is already ready and able to respond to
5104          requests.  Unfortunately remote_start_remote() eventually calls
5105          wait_for_inferior() with no timeout.  wait_forever_enabled_p gets
5106          around this.  Eventually a mechanism that allows
5107          wait_for_inferior() to expect/get timeouts will be
5108          implemented.  */
5109       wait_forever_enabled_p = 0;
5110     }
5111
5112   /* First delete any symbols previously loaded from shared libraries.  */
5113   no_shared_libraries (NULL, 0);
5114
5115   /* Start afresh.  */
5116   init_thread_list ();
5117
5118   /* Start the remote connection.  If error() or QUIT, discard this
5119      target (we'd otherwise be in an inconsistent state) and then
5120      propogate the error on up the exception chain.  This ensures that
5121      the caller doesn't stumble along blindly assuming that the
5122      function succeeded.  The CLI doesn't have this problem but other
5123      UI's, such as MI do.
5124
5125      FIXME: cagney/2002-05-19: Instead of re-throwing the exception,
5126      this function should return an error indication letting the
5127      caller restore the previous state.  Unfortunately the command
5128      ``target remote'' is directly wired to this function making that
5129      impossible.  On a positive note, the CLI side of this problem has
5130      been fixed - the function set_cmd_context() makes it possible for
5131      all the ``target ....'' commands to share a common callback
5132      function.  See cli-dump.c.  */
5133   {
5134
5135     TRY
5136       {
5137         remote_start_remote (from_tty, target, extended_p);
5138       }
5139     CATCH (ex, RETURN_MASK_ALL)
5140       {
5141         /* Pop the partially set up target - unless something else did
5142            already before throwing the exception.  */
5143         if (rs->remote_desc != NULL)
5144           remote_unpush_target ();
5145         if (target_async_permitted)
5146           wait_forever_enabled_p = 1;
5147         throw_exception (ex);
5148       }
5149     END_CATCH
5150   }
5151
5152   remote_btrace_reset ();
5153
5154   if (target_async_permitted)
5155     wait_forever_enabled_p = 1;
5156 }
5157
5158 /* Detach the specified process.  */
5159
5160 static void
5161 remote_detach_pid (int pid)
5162 {
5163   struct remote_state *rs = get_remote_state ();
5164
5165   if (remote_multi_process_p (rs))
5166     xsnprintf (rs->buf, get_remote_packet_size (), "D;%x", pid);
5167   else
5168     strcpy (rs->buf, "D");
5169
5170   putpkt (rs->buf);
5171   getpkt (&rs->buf, &rs->buf_size, 0);
5172
5173   if (rs->buf[0] == 'O' && rs->buf[1] == 'K')
5174     ;
5175   else if (rs->buf[0] == '\0')
5176     error (_("Remote doesn't know how to detach"));
5177   else
5178     error (_("Can't detach process."));
5179 }
5180
5181 /* This detaches a program to which we previously attached, using
5182    inferior_ptid to identify the process.  After this is done, GDB
5183    can be used to debug some other program.  We better not have left
5184    any breakpoints in the target program or it'll die when it hits
5185    one.  */
5186
5187 static void
5188 remote_detach_1 (const char *args, int from_tty)
5189 {
5190   int pid = ptid_get_pid (inferior_ptid);
5191   struct remote_state *rs = get_remote_state ();
5192   struct thread_info *tp = find_thread_ptid (inferior_ptid);
5193   int is_fork_parent;
5194
5195   if (args)
5196     error (_("Argument given to \"detach\" when remotely debugging."));
5197
5198   if (!target_has_execution)
5199     error (_("No process to detach from."));
5200
5201   target_announce_detach (from_tty);
5202
5203   /* Tell the remote target to detach.  */
5204   remote_detach_pid (pid);
5205
5206   /* Exit only if this is the only active inferior.  */
5207   if (from_tty && !rs->extended && number_of_live_inferiors () == 1)
5208     puts_filtered (_("Ending remote debugging.\n"));
5209
5210   /* Check to see if we are detaching a fork parent.  Note that if we
5211      are detaching a fork child, tp == NULL.  */
5212   is_fork_parent = (tp != NULL
5213                     && tp->pending_follow.kind == TARGET_WAITKIND_FORKED);
5214
5215   /* If doing detach-on-fork, we don't mourn, because that will delete
5216      breakpoints that should be available for the followed inferior.  */
5217   if (!is_fork_parent)
5218     target_mourn_inferior (inferior_ptid);
5219   else
5220     {
5221       inferior_ptid = null_ptid;
5222       detach_inferior (pid);
5223     }
5224 }
5225
5226 static void
5227 remote_detach (struct target_ops *ops, const char *args, int from_tty)
5228 {
5229   remote_detach_1 (args, from_tty);
5230 }
5231
5232 static void
5233 extended_remote_detach (struct target_ops *ops, const char *args, int from_tty)
5234 {
5235   remote_detach_1 (args, from_tty);
5236 }
5237
5238 /* Target follow-fork function for remote targets.  On entry, and
5239    at return, the current inferior is the fork parent.
5240
5241    Note that although this is currently only used for extended-remote,
5242    it is named remote_follow_fork in anticipation of using it for the
5243    remote target as well.  */
5244
5245 static int
5246 remote_follow_fork (struct target_ops *ops, int follow_child,
5247                     int detach_fork)
5248 {
5249   struct remote_state *rs = get_remote_state ();
5250   enum target_waitkind kind = inferior_thread ()->pending_follow.kind;
5251
5252   if ((kind == TARGET_WAITKIND_FORKED && remote_fork_event_p (rs))
5253       || (kind == TARGET_WAITKIND_VFORKED && remote_vfork_event_p (rs)))
5254     {
5255       /* When following the parent and detaching the child, we detach
5256          the child here.  For the case of following the child and
5257          detaching the parent, the detach is done in the target-
5258          independent follow fork code in infrun.c.  We can't use
5259          target_detach when detaching an unfollowed child because
5260          the client side doesn't know anything about the child.  */
5261       if (detach_fork && !follow_child)
5262         {
5263           /* Detach the fork child.  */
5264           ptid_t child_ptid;
5265           pid_t child_pid;
5266
5267           child_ptid = inferior_thread ()->pending_follow.value.related_pid;
5268           child_pid = ptid_get_pid (child_ptid);
5269
5270           remote_detach_pid (child_pid);
5271           detach_inferior (child_pid);
5272         }
5273     }
5274   return 0;
5275 }
5276
5277 /* Target follow-exec function for remote targets.  Save EXECD_PATHNAME
5278    in the program space of the new inferior.  On entry and at return the
5279    current inferior is the exec'ing inferior.  INF is the new exec'd
5280    inferior, which may be the same as the exec'ing inferior unless
5281    follow-exec-mode is "new".  */
5282
5283 static void
5284 remote_follow_exec (struct target_ops *ops,
5285                     struct inferior *inf, char *execd_pathname)
5286 {
5287   /* We know that this is a target file name, so if it has the "target:"
5288      prefix we strip it off before saving it in the program space.  */
5289   if (is_target_filename (execd_pathname))
5290     execd_pathname += strlen (TARGET_SYSROOT_PREFIX);
5291
5292   set_pspace_remote_exec_file (inf->pspace, execd_pathname);
5293 }
5294
5295 /* Same as remote_detach, but don't send the "D" packet; just disconnect.  */
5296
5297 static void
5298 remote_disconnect (struct target_ops *target, const char *args, int from_tty)
5299 {
5300   if (args)
5301     error (_("Argument given to \"disconnect\" when remotely debugging."));
5302
5303   /* Make sure we unpush even the extended remote targets.  Calling
5304      target_mourn_inferior won't unpush, and remote_mourn won't
5305      unpush if there is more than one inferior left.  */
5306   unpush_target (target);
5307   generic_mourn_inferior ();
5308
5309   if (from_tty)
5310     puts_filtered ("Ending remote debugging.\n");
5311 }
5312
5313 /* Attach to the process specified by ARGS.  If FROM_TTY is non-zero,
5314    be chatty about it.  */
5315
5316 static void
5317 extended_remote_attach (struct target_ops *target, const char *args,
5318                         int from_tty)
5319 {
5320   struct remote_state *rs = get_remote_state ();
5321   int pid;
5322   char *wait_status = NULL;
5323
5324   pid = parse_pid_to_attach (args);
5325
5326   /* Remote PID can be freely equal to getpid, do not check it here the same
5327      way as in other targets.  */
5328
5329   if (packet_support (PACKET_vAttach) == PACKET_DISABLE)
5330     error (_("This target does not support attaching to a process"));
5331
5332   if (from_tty)
5333     {
5334       char *exec_file = get_exec_file (0);
5335
5336       if (exec_file)
5337         printf_unfiltered (_("Attaching to program: %s, %s\n"), exec_file,
5338                            target_pid_to_str (pid_to_ptid (pid)));
5339       else
5340         printf_unfiltered (_("Attaching to %s\n"),
5341                            target_pid_to_str (pid_to_ptid (pid)));
5342
5343       gdb_flush (gdb_stdout);
5344     }
5345
5346   xsnprintf (rs->buf, get_remote_packet_size (), "vAttach;%x", pid);
5347   putpkt (rs->buf);
5348   getpkt (&rs->buf, &rs->buf_size, 0);
5349
5350   switch (packet_ok (rs->buf,
5351                      &remote_protocol_packets[PACKET_vAttach]))
5352     {
5353     case PACKET_OK:
5354       if (!target_is_non_stop_p ())
5355         {
5356           /* Save the reply for later.  */
5357           wait_status = (char *) alloca (strlen (rs->buf) + 1);
5358           strcpy (wait_status, rs->buf);
5359         }
5360       else if (strcmp (rs->buf, "OK") != 0)
5361         error (_("Attaching to %s failed with: %s"),
5362                target_pid_to_str (pid_to_ptid (pid)),
5363                rs->buf);
5364       break;
5365     case PACKET_UNKNOWN:
5366       error (_("This target does not support attaching to a process"));
5367     default:
5368       error (_("Attaching to %s failed"),
5369              target_pid_to_str (pid_to_ptid (pid)));
5370     }
5371
5372   set_current_inferior (remote_add_inferior (0, pid, 1, 0));
5373
5374   inferior_ptid = pid_to_ptid (pid);
5375
5376   if (target_is_non_stop_p ())
5377     {
5378       struct thread_info *thread;
5379
5380       /* Get list of threads.  */
5381       remote_update_thread_list (target);
5382
5383       thread = first_thread_of_process (pid);
5384       if (thread)
5385         inferior_ptid = thread->ptid;
5386       else
5387         inferior_ptid = pid_to_ptid (pid);
5388
5389       /* Invalidate our notion of the remote current thread.  */
5390       record_currthread (rs, minus_one_ptid);
5391     }
5392   else
5393     {
5394       /* Now, if we have thread information, update inferior_ptid.  */
5395       inferior_ptid = remote_current_thread (inferior_ptid);
5396
5397       /* Add the main thread to the thread list.  */
5398       add_thread_silent (inferior_ptid);
5399     }
5400
5401   /* Next, if the target can specify a description, read it.  We do
5402      this before anything involving memory or registers.  */
5403   target_find_description ();
5404
5405   if (!target_is_non_stop_p ())
5406     {
5407       /* Use the previously fetched status.  */
5408       gdb_assert (wait_status != NULL);
5409
5410       if (target_can_async_p ())
5411         {
5412           struct notif_event *reply
5413             =  remote_notif_parse (&notif_client_stop, wait_status);
5414
5415           push_stop_reply ((struct stop_reply *) reply);
5416
5417           target_async (1);
5418         }
5419       else
5420         {
5421           gdb_assert (wait_status != NULL);
5422           strcpy (rs->buf, wait_status);
5423           rs->cached_wait_status = 1;
5424         }
5425     }
5426   else
5427     gdb_assert (wait_status == NULL);
5428 }
5429
5430 /* Implementation of the to_post_attach method.  */
5431
5432 static void
5433 extended_remote_post_attach (struct target_ops *ops, int pid)
5434 {
5435   /* Get text, data & bss offsets.  */
5436   get_offsets ();
5437
5438   /* In certain cases GDB might not have had the chance to start
5439      symbol lookup up until now.  This could happen if the debugged
5440      binary is not using shared libraries, the vsyscall page is not
5441      present (on Linux) and the binary itself hadn't changed since the
5442      debugging process was started.  */
5443   if (symfile_objfile != NULL)
5444     remote_check_symbols();
5445 }
5446
5447 \f
5448 /* Check for the availability of vCont.  This function should also check
5449    the response.  */
5450
5451 static void
5452 remote_vcont_probe (struct remote_state *rs)
5453 {
5454   char *buf;
5455
5456   strcpy (rs->buf, "vCont?");
5457   putpkt (rs->buf);
5458   getpkt (&rs->buf, &rs->buf_size, 0);
5459   buf = rs->buf;
5460
5461   /* Make sure that the features we assume are supported.  */
5462   if (startswith (buf, "vCont"))
5463     {
5464       char *p = &buf[5];
5465       int support_c, support_C;
5466
5467       rs->supports_vCont.s = 0;
5468       rs->supports_vCont.S = 0;
5469       support_c = 0;
5470       support_C = 0;
5471       rs->supports_vCont.t = 0;
5472       rs->supports_vCont.r = 0;
5473       while (p && *p == ';')
5474         {
5475           p++;
5476           if (*p == 's' && (*(p + 1) == ';' || *(p + 1) == 0))
5477             rs->supports_vCont.s = 1;
5478           else if (*p == 'S' && (*(p + 1) == ';' || *(p + 1) == 0))
5479             rs->supports_vCont.S = 1;
5480           else if (*p == 'c' && (*(p + 1) == ';' || *(p + 1) == 0))
5481             support_c = 1;
5482           else if (*p == 'C' && (*(p + 1) == ';' || *(p + 1) == 0))
5483             support_C = 1;
5484           else if (*p == 't' && (*(p + 1) == ';' || *(p + 1) == 0))
5485             rs->supports_vCont.t = 1;
5486           else if (*p == 'r' && (*(p + 1) == ';' || *(p + 1) == 0))
5487             rs->supports_vCont.r = 1;
5488
5489           p = strchr (p, ';');
5490         }
5491
5492       /* If c, and C are not all supported, we can't use vCont.  Clearing
5493          BUF will make packet_ok disable the packet.  */
5494       if (!support_c || !support_C)
5495         buf[0] = 0;
5496     }
5497
5498   packet_ok (buf, &remote_protocol_packets[PACKET_vCont]);
5499 }
5500
5501 /* Helper function for building "vCont" resumptions.  Write a
5502    resumption to P.  ENDP points to one-passed-the-end of the buffer
5503    we're allowed to write to.  Returns BUF+CHARACTERS_WRITTEN.  The
5504    thread to be resumed is PTID; STEP and SIGGNAL indicate whether the
5505    resumed thread should be single-stepped and/or signalled.  If PTID
5506    equals minus_one_ptid, then all threads are resumed; if PTID
5507    represents a process, then all threads of the process are resumed;
5508    the thread to be stepped and/or signalled is given in the global
5509    INFERIOR_PTID.  */
5510
5511 static char *
5512 append_resumption (char *p, char *endp,
5513                    ptid_t ptid, int step, enum gdb_signal siggnal)
5514 {
5515   struct remote_state *rs = get_remote_state ();
5516
5517   if (step && siggnal != GDB_SIGNAL_0)
5518     p += xsnprintf (p, endp - p, ";S%02x", siggnal);
5519   else if (step
5520            /* GDB is willing to range step.  */
5521            && use_range_stepping
5522            /* Target supports range stepping.  */
5523            && rs->supports_vCont.r
5524            /* We don't currently support range stepping multiple
5525               threads with a wildcard (though the protocol allows it,
5526               so stubs shouldn't make an active effort to forbid
5527               it).  */
5528            && !(remote_multi_process_p (rs) && ptid_is_pid (ptid)))
5529     {
5530       struct thread_info *tp;
5531
5532       if (ptid_equal (ptid, minus_one_ptid))
5533         {
5534           /* If we don't know about the target thread's tid, then
5535              we're resuming magic_null_ptid (see caller).  */
5536           tp = find_thread_ptid (magic_null_ptid);
5537         }
5538       else
5539         tp = find_thread_ptid (ptid);
5540       gdb_assert (tp != NULL);
5541
5542       if (tp->control.may_range_step)
5543         {
5544           int addr_size = gdbarch_addr_bit (target_gdbarch ()) / 8;
5545
5546           p += xsnprintf (p, endp - p, ";r%s,%s",
5547                           phex_nz (tp->control.step_range_start,
5548                                    addr_size),
5549                           phex_nz (tp->control.step_range_end,
5550                                    addr_size));
5551         }
5552       else
5553         p += xsnprintf (p, endp - p, ";s");
5554     }
5555   else if (step)
5556     p += xsnprintf (p, endp - p, ";s");
5557   else if (siggnal != GDB_SIGNAL_0)
5558     p += xsnprintf (p, endp - p, ";C%02x", siggnal);
5559   else
5560     p += xsnprintf (p, endp - p, ";c");
5561
5562   if (remote_multi_process_p (rs) && ptid_is_pid (ptid))
5563     {
5564       ptid_t nptid;
5565
5566       /* All (-1) threads of process.  */
5567       nptid = ptid_build (ptid_get_pid (ptid), -1, 0);
5568
5569       p += xsnprintf (p, endp - p, ":");
5570       p = write_ptid (p, endp, nptid);
5571     }
5572   else if (!ptid_equal (ptid, minus_one_ptid))
5573     {
5574       p += xsnprintf (p, endp - p, ":");
5575       p = write_ptid (p, endp, ptid);
5576     }
5577
5578   return p;
5579 }
5580
5581 /* Clear the thread's private info on resume.  */
5582
5583 static void
5584 resume_clear_thread_private_info (struct thread_info *thread)
5585 {
5586   if (thread->priv != NULL)
5587     {
5588       thread->priv->stop_reason = TARGET_STOPPED_BY_NO_REASON;
5589       thread->priv->watch_data_address = 0;
5590     }
5591 }
5592
5593 /* Append a vCont continue-with-signal action for threads that have a
5594    non-zero stop signal.  */
5595
5596 static char *
5597 append_pending_thread_resumptions (char *p, char *endp, ptid_t ptid)
5598 {
5599   struct thread_info *thread;
5600
5601   ALL_NON_EXITED_THREADS (thread)
5602     if (ptid_match (thread->ptid, ptid)
5603         && !ptid_equal (inferior_ptid, thread->ptid)
5604         && thread->suspend.stop_signal != GDB_SIGNAL_0)
5605       {
5606         p = append_resumption (p, endp, thread->ptid,
5607                                0, thread->suspend.stop_signal);
5608         thread->suspend.stop_signal = GDB_SIGNAL_0;
5609         resume_clear_thread_private_info (thread);
5610       }
5611
5612   return p;
5613 }
5614
5615 /* Set the target running, using the packets that use Hc
5616    (c/s/C/S).  */
5617
5618 static void
5619 remote_resume_with_hc (struct target_ops *ops,
5620                        ptid_t ptid, int step, enum gdb_signal siggnal)
5621 {
5622   struct remote_state *rs = get_remote_state ();
5623   struct thread_info *thread;
5624   char *buf;
5625
5626   rs->last_sent_signal = siggnal;
5627   rs->last_sent_step = step;
5628
5629   /* The c/s/C/S resume packets use Hc, so set the continue
5630      thread.  */
5631   if (ptid_equal (ptid, minus_one_ptid))
5632     set_continue_thread (any_thread_ptid);
5633   else
5634     set_continue_thread (ptid);
5635
5636   ALL_NON_EXITED_THREADS (thread)
5637     resume_clear_thread_private_info (thread);
5638
5639   buf = rs->buf;
5640   if (execution_direction == EXEC_REVERSE)
5641     {
5642       /* We don't pass signals to the target in reverse exec mode.  */
5643       if (info_verbose && siggnal != GDB_SIGNAL_0)
5644         warning (_(" - Can't pass signal %d to target in reverse: ignored."),
5645                  siggnal);
5646
5647       if (step && packet_support (PACKET_bs) == PACKET_DISABLE)
5648         error (_("Remote reverse-step not supported."));
5649       if (!step && packet_support (PACKET_bc) == PACKET_DISABLE)
5650         error (_("Remote reverse-continue not supported."));
5651
5652       strcpy (buf, step ? "bs" : "bc");
5653     }
5654   else if (siggnal != GDB_SIGNAL_0)
5655     {
5656       buf[0] = step ? 'S' : 'C';
5657       buf[1] = tohex (((int) siggnal >> 4) & 0xf);
5658       buf[2] = tohex (((int) siggnal) & 0xf);
5659       buf[3] = '\0';
5660     }
5661   else
5662     strcpy (buf, step ? "s" : "c");
5663
5664   putpkt (buf);
5665 }
5666
5667 /* Resume the remote inferior by using a "vCont" packet.  The thread
5668    to be resumed is PTID; STEP and SIGGNAL indicate whether the
5669    resumed thread should be single-stepped and/or signalled.  If PTID
5670    equals minus_one_ptid, then all threads are resumed; the thread to
5671    be stepped and/or signalled is given in the global INFERIOR_PTID.
5672    This function returns non-zero iff it resumes the inferior.
5673
5674    This function issues a strict subset of all possible vCont commands
5675    at the moment.  */
5676
5677 static int
5678 remote_resume_with_vcont (ptid_t ptid, int step, enum gdb_signal siggnal)
5679 {
5680   struct remote_state *rs = get_remote_state ();
5681   char *p;
5682   char *endp;
5683
5684   /* No reverse execution actions defined for vCont.  */
5685   if (execution_direction == EXEC_REVERSE)
5686     return 0;
5687
5688   if (packet_support (PACKET_vCont) == PACKET_SUPPORT_UNKNOWN)
5689     remote_vcont_probe (rs);
5690
5691   if (packet_support (PACKET_vCont) == PACKET_DISABLE)
5692     return 0;
5693
5694   p = rs->buf;
5695   endp = rs->buf + get_remote_packet_size ();
5696
5697   /* If we could generate a wider range of packets, we'd have to worry
5698      about overflowing BUF.  Should there be a generic
5699      "multi-part-packet" packet?  */
5700
5701   p += xsnprintf (p, endp - p, "vCont");
5702
5703   if (ptid_equal (ptid, magic_null_ptid))
5704     {
5705       /* MAGIC_NULL_PTID means that we don't have any active threads,
5706          so we don't have any TID numbers the inferior will
5707          understand.  Make sure to only send forms that do not specify
5708          a TID.  */
5709       append_resumption (p, endp, minus_one_ptid, step, siggnal);
5710     }
5711   else if (ptid_equal (ptid, minus_one_ptid) || ptid_is_pid (ptid))
5712     {
5713       /* Resume all threads (of all processes, or of a single
5714          process), with preference for INFERIOR_PTID.  This assumes
5715          inferior_ptid belongs to the set of all threads we are about
5716          to resume.  */
5717       if (step || siggnal != GDB_SIGNAL_0)
5718         {
5719           /* Step inferior_ptid, with or without signal.  */
5720           p = append_resumption (p, endp, inferior_ptid, step, siggnal);
5721         }
5722
5723       /* Also pass down any pending signaled resumption for other
5724          threads not the current.  */
5725       p = append_pending_thread_resumptions (p, endp, ptid);
5726
5727       /* And continue others without a signal.  */
5728       append_resumption (p, endp, ptid, /*step=*/ 0, GDB_SIGNAL_0);
5729     }
5730   else
5731     {
5732       /* Scheduler locking; resume only PTID.  */
5733       append_resumption (p, endp, ptid, step, siggnal);
5734     }
5735
5736   gdb_assert (strlen (rs->buf) < get_remote_packet_size ());
5737   putpkt (rs->buf);
5738
5739   if (target_is_non_stop_p ())
5740     {
5741       /* In non-stop, the stub replies to vCont with "OK".  The stop
5742          reply will be reported asynchronously by means of a `%Stop'
5743          notification.  */
5744       getpkt (&rs->buf, &rs->buf_size, 0);
5745       if (strcmp (rs->buf, "OK") != 0)
5746         error (_("Unexpected vCont reply in non-stop mode: %s"), rs->buf);
5747     }
5748
5749   return 1;
5750 }
5751
5752 /* Tell the remote machine to resume.  */
5753
5754 static void
5755 remote_resume (struct target_ops *ops,
5756                ptid_t ptid, int step, enum gdb_signal siggnal)
5757 {
5758   struct remote_state *rs = get_remote_state ();
5759
5760   /* When connected in non-stop mode, the core resumes threads
5761      individually.  Resuming remote threads directly in target_resume
5762      would thus result in sending one packet per thread.  Instead, to
5763      minimize roundtrip latency, here we just store the resume
5764      request; the actual remote resumption will be done in
5765      target_commit_resume / remote_commit_resume, where we'll be able
5766      to do vCont action coalescing.  */
5767   if (target_is_non_stop_p () && execution_direction != EXEC_REVERSE)
5768     {
5769       struct private_thread_info *remote_thr;
5770
5771       if (ptid_equal (minus_one_ptid, ptid) || ptid_is_pid (ptid))
5772         remote_thr = get_private_info_ptid (inferior_ptid);
5773       else
5774         remote_thr = get_private_info_ptid (ptid);
5775       remote_thr->last_resume_step = step;
5776       remote_thr->last_resume_sig = siggnal;
5777       return;
5778     }
5779
5780   /* In all-stop, we can't mark REMOTE_ASYNC_GET_PENDING_EVENTS_TOKEN
5781      (explained in remote-notif.c:handle_notification) so
5782      remote_notif_process is not called.  We need find a place where
5783      it is safe to start a 'vNotif' sequence.  It is good to do it
5784      before resuming inferior, because inferior was stopped and no RSP
5785      traffic at that moment.  */
5786   if (!target_is_non_stop_p ())
5787     remote_notif_process (rs->notif_state, &notif_client_stop);
5788
5789   rs->last_resume_exec_dir = execution_direction;
5790
5791   /* Prefer vCont, and fallback to s/c/S/C, which use Hc.  */
5792   if (!remote_resume_with_vcont (ptid, step, siggnal))
5793     remote_resume_with_hc (ops, ptid, step, siggnal);
5794
5795   /* We are about to start executing the inferior, let's register it
5796      with the event loop.  NOTE: this is the one place where all the
5797      execution commands end up.  We could alternatively do this in each
5798      of the execution commands in infcmd.c.  */
5799   /* FIXME: ezannoni 1999-09-28: We may need to move this out of here
5800      into infcmd.c in order to allow inferior function calls to work
5801      NOT asynchronously.  */
5802   if (target_can_async_p ())
5803     target_async (1);
5804
5805   /* We've just told the target to resume.  The remote server will
5806      wait for the inferior to stop, and then send a stop reply.  In
5807      the mean time, we can't start another command/query ourselves
5808      because the stub wouldn't be ready to process it.  This applies
5809      only to the base all-stop protocol, however.  In non-stop (which
5810      only supports vCont), the stub replies with an "OK", and is
5811      immediate able to process further serial input.  */
5812   if (!target_is_non_stop_p ())
5813     rs->waiting_for_stop_reply = 1;
5814 }
5815
5816 static void check_pending_events_prevent_wildcard_vcont
5817   (int *may_global_wildcard_vcont);
5818 static int is_pending_fork_parent_thread (struct thread_info *thread);
5819
5820 /* Private per-inferior info for target remote processes.  */
5821
5822 struct private_inferior
5823 {
5824   /* Whether we can send a wildcard vCont for this process.  */
5825   int may_wildcard_vcont;
5826 };
5827
5828 /* Structure used to track the construction of a vCont packet in the
5829    outgoing packet buffer.  This is used to send multiple vCont
5830    packets if we have more actions than would fit a single packet.  */
5831
5832 struct vcont_builder
5833 {
5834   /* Pointer to the first action.  P points here if no action has been
5835      appended yet.  */
5836   char *first_action;
5837
5838   /* Where the next action will be appended.  */
5839   char *p;
5840
5841   /* The end of the buffer.  Must never write past this.  */
5842   char *endp;
5843 };
5844
5845 /* Prepare the outgoing buffer for a new vCont packet.  */
5846
5847 static void
5848 vcont_builder_restart (struct vcont_builder *builder)
5849 {
5850   struct remote_state *rs = get_remote_state ();
5851
5852   builder->p = rs->buf;
5853   builder->endp = rs->buf + get_remote_packet_size ();
5854   builder->p += xsnprintf (builder->p, builder->endp - builder->p, "vCont");
5855   builder->first_action = builder->p;
5856 }
5857
5858 /* If the vCont packet being built has any action, send it to the
5859    remote end.  */
5860
5861 static void
5862 vcont_builder_flush (struct vcont_builder *builder)
5863 {
5864   struct remote_state *rs;
5865
5866   if (builder->p == builder->first_action)
5867     return;
5868
5869   rs = get_remote_state ();
5870   putpkt (rs->buf);
5871   getpkt (&rs->buf, &rs->buf_size, 0);
5872   if (strcmp (rs->buf, "OK") != 0)
5873     error (_("Unexpected vCont reply in non-stop mode: %s"), rs->buf);
5874 }
5875
5876 /* The largest action is range-stepping, with its two addresses.  This
5877    is more than sufficient.  If a new, bigger action is created, it'll
5878    quickly trigger a failed assertion in append_resumption (and we'll
5879    just bump this).  */
5880 #define MAX_ACTION_SIZE 200
5881
5882 /* Append a new vCont action in the outgoing packet being built.  If
5883    the action doesn't fit the packet along with previous actions, push
5884    what we've got so far to the remote end and start over a new vCont
5885    packet (with the new action).  */
5886
5887 static void
5888 vcont_builder_push_action (struct vcont_builder *builder,
5889                            ptid_t ptid, int step, enum gdb_signal siggnal)
5890 {
5891   char buf[MAX_ACTION_SIZE + 1];
5892   char *endp;
5893   size_t rsize;
5894
5895   endp = append_resumption (buf, buf + sizeof (buf),
5896                             ptid, step, siggnal);
5897
5898   /* Check whether this new action would fit in the vCont packet along
5899      with previous actions.  If not, send what we've got so far and
5900      start a new vCont packet.  */
5901   rsize = endp - buf;
5902   if (rsize > builder->endp - builder->p)
5903     {
5904       vcont_builder_flush (builder);
5905       vcont_builder_restart (builder);
5906
5907       /* Should now fit.  */
5908       gdb_assert (rsize <= builder->endp - builder->p);
5909     }
5910
5911   memcpy (builder->p, buf, rsize);
5912   builder->p += rsize;
5913   *builder->p = '\0';
5914 }
5915
5916 /* to_commit_resume implementation.  */
5917
5918 static void
5919 remote_commit_resume (struct target_ops *ops)
5920 {
5921   struct remote_state *rs = get_remote_state ();
5922   struct inferior *inf;
5923   struct thread_info *tp;
5924   int any_process_wildcard;
5925   int may_global_wildcard_vcont;
5926   struct vcont_builder vcont_builder;
5927
5928   /* If connected in all-stop mode, we'd send the remote resume
5929      request directly from remote_resume.  Likewise if
5930      reverse-debugging, as there are no defined vCont actions for
5931      reverse execution.  */
5932   if (!target_is_non_stop_p () || execution_direction == EXEC_REVERSE)
5933     return;
5934
5935   /* Try to send wildcard actions ("vCont;c" or "vCont;c:pPID.-1")
5936      instead of resuming all threads of each process individually.
5937      However, if any thread of a process must remain halted, we can't
5938      send wildcard resumes and must send one action per thread.
5939
5940      Care must be taken to not resume threads/processes the server
5941      side already told us are stopped, but the core doesn't know about
5942      yet, because the events are still in the vStopped notification
5943      queue.  For example:
5944
5945        #1 => vCont s:p1.1;c
5946        #2 <= OK
5947        #3 <= %Stopped T05 p1.1
5948        #4 => vStopped
5949        #5 <= T05 p1.2
5950        #6 => vStopped
5951        #7 <= OK
5952        #8 (infrun handles the stop for p1.1 and continues stepping)
5953        #9 => vCont s:p1.1;c
5954
5955      The last vCont above would resume thread p1.2 by mistake, because
5956      the server has no idea that the event for p1.2 had not been
5957      handled yet.
5958
5959      The server side must similarly ignore resume actions for the
5960      thread that has a pending %Stopped notification (and any other
5961      threads with events pending), until GDB acks the notification
5962      with vStopped.  Otherwise, e.g., the following case is
5963      mishandled:
5964
5965        #1 => g  (or any other packet)
5966        #2 <= [registers]
5967        #3 <= %Stopped T05 p1.2
5968        #4 => vCont s:p1.1;c
5969        #5 <= OK
5970
5971      Above, the server must not resume thread p1.2.  GDB can't know
5972      that p1.2 stopped until it acks the %Stopped notification, and
5973      since from GDB's perspective all threads should be running, it
5974      sends a "c" action.
5975
5976      Finally, special care must also be given to handling fork/vfork
5977      events.  A (v)fork event actually tells us that two processes
5978      stopped -- the parent and the child.  Until we follow the fork,
5979      we must not resume the child.  Therefore, if we have a pending
5980      fork follow, we must not send a global wildcard resume action
5981      (vCont;c).  We can still send process-wide wildcards though.  */
5982
5983   /* Start by assuming a global wildcard (vCont;c) is possible.  */
5984   may_global_wildcard_vcont = 1;
5985
5986   /* And assume every process is individually wildcard-able too.  */
5987   ALL_NON_EXITED_INFERIORS (inf)
5988     {
5989       if (inf->priv == NULL)
5990         inf->priv = XNEW (struct private_inferior);
5991       inf->priv->may_wildcard_vcont = 1;
5992     }
5993
5994   /* Check for any pending events (not reported or processed yet) and
5995      disable process and global wildcard resumes appropriately.  */
5996   check_pending_events_prevent_wildcard_vcont (&may_global_wildcard_vcont);
5997
5998   ALL_NON_EXITED_THREADS (tp)
5999     {
6000       /* If a thread of a process is not meant to be resumed, then we
6001          can't wildcard that process.  */
6002       if (!tp->executing)
6003         {
6004           tp->inf->priv->may_wildcard_vcont = 0;
6005
6006           /* And if we can't wildcard a process, we can't wildcard
6007              everything either.  */
6008           may_global_wildcard_vcont = 0;
6009           continue;
6010         }
6011
6012       /* If a thread is the parent of an unfollowed fork, then we
6013          can't do a global wildcard, as that would resume the fork
6014          child.  */
6015       if (is_pending_fork_parent_thread (tp))
6016         may_global_wildcard_vcont = 0;
6017     }
6018
6019   /* Now let's build the vCont packet(s).  Actions must be appended
6020      from narrower to wider scopes (thread -> process -> global).  If
6021      we end up with too many actions for a single packet vcont_builder
6022      flushes the current vCont packet to the remote side and starts a
6023      new one.  */
6024   vcont_builder_restart (&vcont_builder);
6025
6026   /* Threads first.  */
6027   ALL_NON_EXITED_THREADS (tp)
6028     {
6029       struct private_thread_info *remote_thr = tp->priv;
6030
6031       if (!tp->executing || remote_thr->vcont_resumed)
6032         continue;
6033
6034       gdb_assert (!thread_is_in_step_over_chain (tp));
6035
6036       if (!remote_thr->last_resume_step
6037           && remote_thr->last_resume_sig == GDB_SIGNAL_0
6038           && tp->inf->priv->may_wildcard_vcont)
6039         {
6040           /* We'll send a wildcard resume instead.  */
6041           remote_thr->vcont_resumed = 1;
6042           continue;
6043         }
6044
6045       vcont_builder_push_action (&vcont_builder, tp->ptid,
6046                                  remote_thr->last_resume_step,
6047                                  remote_thr->last_resume_sig);
6048       remote_thr->vcont_resumed = 1;
6049     }
6050
6051   /* Now check whether we can send any process-wide wildcard.  This is
6052      to avoid sending a global wildcard in the case nothing is
6053      supposed to be resumed.  */
6054   any_process_wildcard = 0;
6055
6056   ALL_NON_EXITED_INFERIORS (inf)
6057     {
6058       if (inf->priv->may_wildcard_vcont)
6059         {
6060           any_process_wildcard = 1;
6061           break;
6062         }
6063     }
6064
6065   if (any_process_wildcard)
6066     {
6067       /* If all processes are wildcard-able, then send a single "c"
6068          action, otherwise, send an "all (-1) threads of process"
6069          continue action for each running process, if any.  */
6070       if (may_global_wildcard_vcont)
6071         {
6072           vcont_builder_push_action (&vcont_builder, minus_one_ptid,
6073                                      0, GDB_SIGNAL_0);
6074         }
6075       else
6076         {
6077           ALL_NON_EXITED_INFERIORS (inf)
6078             {
6079               if (inf->priv->may_wildcard_vcont)
6080                 {
6081                   vcont_builder_push_action (&vcont_builder,
6082                                              pid_to_ptid (inf->pid),
6083                                              0, GDB_SIGNAL_0);
6084                 }
6085             }
6086         }
6087     }
6088
6089   vcont_builder_flush (&vcont_builder);
6090 }
6091
6092 \f
6093
6094 /* Non-stop version of target_stop.  Uses `vCont;t' to stop a remote
6095    thread, all threads of a remote process, or all threads of all
6096    processes.  */
6097
6098 static void
6099 remote_stop_ns (ptid_t ptid)
6100 {
6101   struct remote_state *rs = get_remote_state ();
6102   char *p = rs->buf;
6103   char *endp = rs->buf + get_remote_packet_size ();
6104
6105   if (packet_support (PACKET_vCont) == PACKET_SUPPORT_UNKNOWN)
6106     remote_vcont_probe (rs);
6107
6108   if (!rs->supports_vCont.t)
6109     error (_("Remote server does not support stopping threads"));
6110
6111   if (ptid_equal (ptid, minus_one_ptid)
6112       || (!remote_multi_process_p (rs) && ptid_is_pid (ptid)))
6113     p += xsnprintf (p, endp - p, "vCont;t");
6114   else
6115     {
6116       ptid_t nptid;
6117
6118       p += xsnprintf (p, endp - p, "vCont;t:");
6119
6120       if (ptid_is_pid (ptid))
6121           /* All (-1) threads of process.  */
6122         nptid = ptid_build (ptid_get_pid (ptid), -1, 0);
6123       else
6124         {
6125           /* Small optimization: if we already have a stop reply for
6126              this thread, no use in telling the stub we want this
6127              stopped.  */
6128           if (peek_stop_reply (ptid))
6129             return;
6130
6131           nptid = ptid;
6132         }
6133
6134       write_ptid (p, endp, nptid);
6135     }
6136
6137   /* In non-stop, we get an immediate OK reply.  The stop reply will
6138      come in asynchronously by notification.  */
6139   putpkt (rs->buf);
6140   getpkt (&rs->buf, &rs->buf_size, 0);
6141   if (strcmp (rs->buf, "OK") != 0)
6142     error (_("Stopping %s failed: %s"), target_pid_to_str (ptid), rs->buf);
6143 }
6144
6145 /* All-stop version of target_interrupt.  Sends a break or a ^C to
6146    interrupt the remote target.  It is undefined which thread of which
6147    process reports the interrupt.  */
6148
6149 static void
6150 remote_interrupt_as (void)
6151 {
6152   struct remote_state *rs = get_remote_state ();
6153
6154   rs->ctrlc_pending_p = 1;
6155
6156   /* If the inferior is stopped already, but the core didn't know
6157      about it yet, just ignore the request.  The cached wait status
6158      will be collected in remote_wait.  */
6159   if (rs->cached_wait_status)
6160     return;
6161
6162   /* Send interrupt_sequence to remote target.  */
6163   send_interrupt_sequence ();
6164 }
6165
6166 /* Non-stop version of target_interrupt.  Uses `vCtrlC' to interrupt
6167    the remote target.  It is undefined which thread of which process
6168    reports the interrupt.  Throws an error if the packet is not
6169    supported by the server.  */
6170
6171 static void
6172 remote_interrupt_ns (void)
6173 {
6174   struct remote_state *rs = get_remote_state ();
6175   char *p = rs->buf;
6176   char *endp = rs->buf + get_remote_packet_size ();
6177
6178   xsnprintf (p, endp - p, "vCtrlC");
6179
6180   /* In non-stop, we get an immediate OK reply.  The stop reply will
6181      come in asynchronously by notification.  */
6182   putpkt (rs->buf);
6183   getpkt (&rs->buf, &rs->buf_size, 0);
6184
6185   switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_vCtrlC]))
6186     {
6187     case PACKET_OK:
6188       break;
6189     case PACKET_UNKNOWN:
6190       error (_("No support for interrupting the remote target."));
6191     case PACKET_ERROR:
6192       error (_("Interrupting target failed: %s"), rs->buf);
6193     }
6194 }
6195
6196 /* Implement the to_stop function for the remote targets.  */
6197
6198 static void
6199 remote_stop (struct target_ops *self, ptid_t ptid)
6200 {
6201   if (remote_debug)
6202     fprintf_unfiltered (gdb_stdlog, "remote_stop called\n");
6203
6204   if (target_is_non_stop_p ())
6205     remote_stop_ns (ptid);
6206   else
6207     {
6208       /* We don't currently have a way to transparently pause the
6209          remote target in all-stop mode.  Interrupt it instead.  */
6210       remote_interrupt_as ();
6211     }
6212 }
6213
6214 /* Implement the to_interrupt function for the remote targets.  */
6215
6216 static void
6217 remote_interrupt (struct target_ops *self, ptid_t ptid)
6218 {
6219   struct remote_state *rs = get_remote_state ();
6220
6221   if (remote_debug)
6222     fprintf_unfiltered (gdb_stdlog, "remote_interrupt called\n");
6223
6224   if (target_is_non_stop_p ())
6225     remote_interrupt_ns ();
6226   else
6227     remote_interrupt_as ();
6228 }
6229
6230 /* Implement the to_pass_ctrlc function for the remote targets.  */
6231
6232 static void
6233 remote_pass_ctrlc (struct target_ops *self)
6234 {
6235   struct remote_state *rs = get_remote_state ();
6236
6237   if (remote_debug)
6238     fprintf_unfiltered (gdb_stdlog, "remote_pass_ctrlc called\n");
6239
6240   /* If we're starting up, we're not fully synced yet.  Quit
6241      immediately.  */
6242   if (rs->starting_up)
6243     quit ();
6244   /* If ^C has already been sent once, offer to disconnect.  */
6245   else if (rs->ctrlc_pending_p)
6246     interrupt_query ();
6247   else
6248     target_interrupt (inferior_ptid);
6249 }
6250
6251 /* Ask the user what to do when an interrupt is received.  */
6252
6253 static void
6254 interrupt_query (void)
6255 {
6256   struct remote_state *rs = get_remote_state ();
6257
6258   if (rs->waiting_for_stop_reply && rs->ctrlc_pending_p)
6259     {
6260       if (query (_("The target is not responding to interrupt requests.\n"
6261                    "Stop debugging it? ")))
6262         {
6263           remote_unpush_target ();
6264           throw_error (TARGET_CLOSE_ERROR, _("Disconnected from target."));
6265         }
6266     }
6267   else
6268     {
6269       if (query (_("Interrupted while waiting for the program.\n"
6270                    "Give up waiting? ")))
6271         quit ();
6272     }
6273 }
6274
6275 /* Enable/disable target terminal ownership.  Most targets can use
6276    terminal groups to control terminal ownership.  Remote targets are
6277    different in that explicit transfer of ownership to/from GDB/target
6278    is required.  */
6279
6280 static void
6281 remote_terminal_inferior (struct target_ops *self)
6282 {
6283   /* FIXME: cagney/1999-09-27: Make calls to target_terminal_*()
6284      idempotent.  The event-loop GDB talking to an asynchronous target
6285      with a synchronous command calls this function from both
6286      event-top.c and infrun.c/infcmd.c.  Once GDB stops trying to
6287      transfer the terminal to the target when it shouldn't this guard
6288      can go away.  */
6289   if (!remote_async_terminal_ours_p)
6290     return;
6291   remote_async_terminal_ours_p = 0;
6292   /* NOTE: At this point we could also register our selves as the
6293      recipient of all input.  Any characters typed could then be
6294      passed on down to the target.  */
6295 }
6296
6297 static void
6298 remote_terminal_ours (struct target_ops *self)
6299 {
6300   /* See FIXME in remote_terminal_inferior.  */
6301   if (remote_async_terminal_ours_p)
6302     return;
6303   remote_async_terminal_ours_p = 1;
6304 }
6305
6306 static void
6307 remote_console_output (char *msg)
6308 {
6309   char *p;
6310
6311   for (p = msg; p[0] && p[1]; p += 2)
6312     {
6313       char tb[2];
6314       char c = fromhex (p[0]) * 16 + fromhex (p[1]);
6315
6316       tb[0] = c;
6317       tb[1] = 0;
6318       fputs_unfiltered (tb, gdb_stdtarg);
6319     }
6320   gdb_flush (gdb_stdtarg);
6321 }
6322
6323 DEF_VEC_O(cached_reg_t);
6324
6325 typedef struct stop_reply
6326 {
6327   struct notif_event base;
6328
6329   /* The identifier of the thread about this event  */
6330   ptid_t ptid;
6331
6332   /* The remote state this event is associated with.  When the remote
6333      connection, represented by a remote_state object, is closed,
6334      all the associated stop_reply events should be released.  */
6335   struct remote_state *rs;
6336
6337   struct target_waitstatus ws;
6338
6339   /* Expedited registers.  This makes remote debugging a bit more
6340      efficient for those targets that provide critical registers as
6341      part of their normal status mechanism (as another roundtrip to
6342      fetch them is avoided).  */
6343   VEC(cached_reg_t) *regcache;
6344
6345   enum target_stop_reason stop_reason;
6346
6347   CORE_ADDR watch_data_address;
6348
6349   int core;
6350 } *stop_reply_p;
6351
6352 DECLARE_QUEUE_P (stop_reply_p);
6353 DEFINE_QUEUE_P (stop_reply_p);
6354 /* The list of already fetched and acknowledged stop events.  This
6355    queue is used for notification Stop, and other notifications
6356    don't need queue for their events, because the notification events
6357    of Stop can't be consumed immediately, so that events should be
6358    queued first, and be consumed by remote_wait_{ns,as} one per
6359    time.  Other notifications can consume their events immediately,
6360    so queue is not needed for them.  */
6361 static QUEUE (stop_reply_p) *stop_reply_queue;
6362
6363 static void
6364 stop_reply_xfree (struct stop_reply *r)
6365 {
6366   notif_event_xfree ((struct notif_event *) r);
6367 }
6368
6369 /* Return the length of the stop reply queue.  */
6370
6371 static int
6372 stop_reply_queue_length (void)
6373 {
6374   return QUEUE_length (stop_reply_p, stop_reply_queue);
6375 }
6376
6377 static void
6378 remote_notif_stop_parse (struct notif_client *self, char *buf,
6379                          struct notif_event *event)
6380 {
6381   remote_parse_stop_reply (buf, (struct stop_reply *) event);
6382 }
6383
6384 static void
6385 remote_notif_stop_ack (struct notif_client *self, char *buf,
6386                        struct notif_event *event)
6387 {
6388   struct stop_reply *stop_reply = (struct stop_reply *) event;
6389
6390   /* acknowledge */
6391   putpkt (self->ack_command);
6392
6393   if (stop_reply->ws.kind == TARGET_WAITKIND_IGNORE)
6394       /* We got an unknown stop reply.  */
6395       error (_("Unknown stop reply"));
6396
6397   push_stop_reply (stop_reply);
6398 }
6399
6400 static int
6401 remote_notif_stop_can_get_pending_events (struct notif_client *self)
6402 {
6403   /* We can't get pending events in remote_notif_process for
6404      notification stop, and we have to do this in remote_wait_ns
6405      instead.  If we fetch all queued events from stub, remote stub
6406      may exit and we have no chance to process them back in
6407      remote_wait_ns.  */
6408   mark_async_event_handler (remote_async_inferior_event_token);
6409   return 0;
6410 }
6411
6412 static void
6413 stop_reply_dtr (struct notif_event *event)
6414 {
6415   struct stop_reply *r = (struct stop_reply *) event;
6416   cached_reg_t *reg;
6417   int ix;
6418
6419   for (ix = 0;
6420        VEC_iterate (cached_reg_t, r->regcache, ix, reg);
6421        ix++)
6422     xfree (reg->data);
6423
6424   VEC_free (cached_reg_t, r->regcache);
6425 }
6426
6427 static struct notif_event *
6428 remote_notif_stop_alloc_reply (void)
6429 {
6430   /* We cast to a pointer to the "base class".  */
6431   struct notif_event *r = (struct notif_event *) XNEW (struct stop_reply);
6432
6433   r->dtr = stop_reply_dtr;
6434
6435   return r;
6436 }
6437
6438 /* A client of notification Stop.  */
6439
6440 struct notif_client notif_client_stop =
6441 {
6442   "Stop",
6443   "vStopped",
6444   remote_notif_stop_parse,
6445   remote_notif_stop_ack,
6446   remote_notif_stop_can_get_pending_events,
6447   remote_notif_stop_alloc_reply,
6448   REMOTE_NOTIF_STOP,
6449 };
6450
6451 /* A parameter to pass data in and out.  */
6452
6453 struct queue_iter_param
6454 {
6455   void *input;
6456   struct stop_reply *output;
6457 };
6458
6459 /* Determine if THREAD_PTID is a pending fork parent thread.  ARG contains
6460    the pid of the process that owns the threads we want to check, or
6461    -1 if we want to check all threads.  */
6462
6463 static int
6464 is_pending_fork_parent (struct target_waitstatus *ws, int event_pid,
6465                         ptid_t thread_ptid)
6466 {
6467   if (ws->kind == TARGET_WAITKIND_FORKED
6468       || ws->kind == TARGET_WAITKIND_VFORKED)
6469     {
6470       if (event_pid == -1 || event_pid == ptid_get_pid (thread_ptid))
6471         return 1;
6472     }
6473
6474   return 0;
6475 }
6476
6477 /* Return the thread's pending status used to determine whether the
6478    thread is a fork parent stopped at a fork event.  */
6479
6480 static struct target_waitstatus *
6481 thread_pending_fork_status (struct thread_info *thread)
6482 {
6483   if (thread->suspend.waitstatus_pending_p)
6484     return &thread->suspend.waitstatus;
6485   else
6486     return &thread->pending_follow;
6487 }
6488
6489 /* Determine if THREAD is a pending fork parent thread.  */
6490
6491 static int
6492 is_pending_fork_parent_thread (struct thread_info *thread)
6493 {
6494   struct target_waitstatus *ws = thread_pending_fork_status (thread);
6495   int pid = -1;
6496
6497   return is_pending_fork_parent (ws, pid, thread->ptid);
6498 }
6499
6500 /* Check whether EVENT is a fork event, and if it is, remove the
6501    fork child from the context list passed in DATA.  */
6502
6503 static int
6504 remove_child_of_pending_fork (QUEUE (stop_reply_p) *q,
6505                               QUEUE_ITER (stop_reply_p) *iter,
6506                               stop_reply_p event,
6507                               void *data)
6508 {
6509   struct queue_iter_param *param = (struct queue_iter_param *) data;
6510   struct threads_listing_context *context
6511     = (struct threads_listing_context *) param->input;
6512
6513   if (event->ws.kind == TARGET_WAITKIND_FORKED
6514       || event->ws.kind == TARGET_WAITKIND_VFORKED
6515       || event->ws.kind == TARGET_WAITKIND_THREAD_EXITED)
6516     threads_listing_context_remove (&event->ws, context);
6517
6518   return 1;
6519 }
6520
6521 /* If CONTEXT contains any fork child threads that have not been
6522    reported yet, remove them from the CONTEXT list.  If such a
6523    thread exists it is because we are stopped at a fork catchpoint
6524    and have not yet called follow_fork, which will set up the
6525    host-side data structures for the new process.  */
6526
6527 static void
6528 remove_new_fork_children (struct threads_listing_context *context)
6529 {
6530   struct thread_info * thread;
6531   int pid = -1;
6532   struct notif_client *notif = &notif_client_stop;
6533   struct queue_iter_param param;
6534
6535   /* For any threads stopped at a fork event, remove the corresponding
6536      fork child threads from the CONTEXT list.  */
6537   ALL_NON_EXITED_THREADS (thread)
6538     {
6539       struct target_waitstatus *ws = thread_pending_fork_status (thread);
6540
6541       if (is_pending_fork_parent (ws, pid, thread->ptid))
6542         {
6543           threads_listing_context_remove (ws, context);
6544         }
6545     }
6546
6547   /* Check for any pending fork events (not reported or processed yet)
6548      in process PID and remove those fork child threads from the
6549      CONTEXT list as well.  */
6550   remote_notif_get_pending_events (notif);
6551   param.input = context;
6552   param.output = NULL;
6553   QUEUE_iterate (stop_reply_p, stop_reply_queue,
6554                  remove_child_of_pending_fork, &param);
6555 }
6556
6557 /* Check whether EVENT would prevent a global or process wildcard
6558    vCont action.  */
6559
6560 static int
6561 check_pending_event_prevents_wildcard_vcont_callback
6562   (QUEUE (stop_reply_p) *q,
6563    QUEUE_ITER (stop_reply_p) *iter,
6564    stop_reply_p event,
6565    void *data)
6566 {
6567   struct inferior *inf;
6568   int *may_global_wildcard_vcont = (int *) data;
6569
6570   if (event->ws.kind == TARGET_WAITKIND_NO_RESUMED
6571       || event->ws.kind == TARGET_WAITKIND_NO_HISTORY)
6572     return 1;
6573
6574   if (event->ws.kind == TARGET_WAITKIND_FORKED
6575       || event->ws.kind == TARGET_WAITKIND_VFORKED)
6576     *may_global_wildcard_vcont = 0;
6577
6578   inf = find_inferior_ptid (event->ptid);
6579
6580   /* This may be the first time we heard about this process.
6581      Regardless, we must not do a global wildcard resume, otherwise
6582      we'd resume this process too.  */
6583   *may_global_wildcard_vcont = 0;
6584   if (inf != NULL)
6585     inf->priv->may_wildcard_vcont = 0;
6586
6587   return 1;
6588 }
6589
6590 /* Check whether any event pending in the vStopped queue would prevent
6591    a global or process wildcard vCont action.  Clear
6592    *may_global_wildcard if we can't do a global wildcard (vCont;c),
6593    and clear the event inferior's may_wildcard_vcont flag if we can't
6594    do a process-wide wildcard resume (vCont;c:pPID.-1).  */
6595
6596 static void
6597 check_pending_events_prevent_wildcard_vcont (int *may_global_wildcard)
6598 {
6599   struct notif_client *notif = &notif_client_stop;
6600
6601   remote_notif_get_pending_events (notif);
6602   QUEUE_iterate (stop_reply_p, stop_reply_queue,
6603                  check_pending_event_prevents_wildcard_vcont_callback,
6604                  may_global_wildcard);
6605 }
6606
6607 /* Remove stop replies in the queue if its pid is equal to the given
6608    inferior's pid.  */
6609
6610 static int
6611 remove_stop_reply_for_inferior (QUEUE (stop_reply_p) *q,
6612                                 QUEUE_ITER (stop_reply_p) *iter,
6613                                 stop_reply_p event,
6614                                 void *data)
6615 {
6616   struct queue_iter_param *param = (struct queue_iter_param *) data;
6617   struct inferior *inf = (struct inferior *) param->input;
6618
6619   if (ptid_get_pid (event->ptid) == inf->pid)
6620     {
6621       stop_reply_xfree (event);
6622       QUEUE_remove_elem (stop_reply_p, q, iter);
6623     }
6624
6625   return 1;
6626 }
6627
6628 /* Discard all pending stop replies of inferior INF.  */
6629
6630 static void
6631 discard_pending_stop_replies (struct inferior *inf)
6632 {
6633   struct queue_iter_param param;
6634   struct stop_reply *reply;
6635   struct remote_state *rs = get_remote_state ();
6636   struct remote_notif_state *rns = rs->notif_state;
6637
6638   /* This function can be notified when an inferior exists.  When the
6639      target is not remote, the notification state is NULL.  */
6640   if (rs->remote_desc == NULL)
6641     return;
6642
6643   reply = (struct stop_reply *) rns->pending_event[notif_client_stop.id];
6644
6645   /* Discard the in-flight notification.  */
6646   if (reply != NULL && ptid_get_pid (reply->ptid) == inf->pid)
6647     {
6648       stop_reply_xfree (reply);
6649       rns->pending_event[notif_client_stop.id] = NULL;
6650     }
6651
6652   param.input = inf;
6653   param.output = NULL;
6654   /* Discard the stop replies we have already pulled with
6655      vStopped.  */
6656   QUEUE_iterate (stop_reply_p, stop_reply_queue,
6657                  remove_stop_reply_for_inferior, &param);
6658 }
6659
6660 /* If its remote state is equal to the given remote state,
6661    remove EVENT from the stop reply queue.  */
6662
6663 static int
6664 remove_stop_reply_of_remote_state (QUEUE (stop_reply_p) *q,
6665                                    QUEUE_ITER (stop_reply_p) *iter,
6666                                    stop_reply_p event,
6667                                    void *data)
6668 {
6669   struct queue_iter_param *param = (struct queue_iter_param *) data;
6670   struct remote_state *rs = (struct remote_state *) param->input;
6671
6672   if (event->rs == rs)
6673     {
6674       stop_reply_xfree (event);
6675       QUEUE_remove_elem (stop_reply_p, q, iter);
6676     }
6677
6678   return 1;
6679 }
6680
6681 /* Discard the stop replies for RS in stop_reply_queue.  */
6682
6683 static void
6684 discard_pending_stop_replies_in_queue (struct remote_state *rs)
6685 {
6686   struct queue_iter_param param;
6687
6688   param.input = rs;
6689   param.output = NULL;
6690   /* Discard the stop replies we have already pulled with
6691      vStopped.  */
6692   QUEUE_iterate (stop_reply_p, stop_reply_queue,
6693                  remove_stop_reply_of_remote_state, &param);
6694 }
6695
6696 /* A parameter to pass data in and out.  */
6697
6698 static int
6699 remote_notif_remove_once_on_match (QUEUE (stop_reply_p) *q,
6700                                    QUEUE_ITER (stop_reply_p) *iter,
6701                                    stop_reply_p event,
6702                                    void *data)
6703 {
6704   struct queue_iter_param *param = (struct queue_iter_param *) data;
6705   ptid_t *ptid = (ptid_t *) param->input;
6706
6707   if (ptid_match (event->ptid, *ptid))
6708     {
6709       param->output = event;
6710       QUEUE_remove_elem (stop_reply_p, q, iter);
6711       return 0;
6712     }
6713
6714   return 1;
6715 }
6716
6717 /* Remove the first reply in 'stop_reply_queue' which matches
6718    PTID.  */
6719
6720 static struct stop_reply *
6721 remote_notif_remove_queued_reply (ptid_t ptid)
6722 {
6723   struct queue_iter_param param;
6724
6725   param.input = &ptid;
6726   param.output = NULL;
6727
6728   QUEUE_iterate (stop_reply_p, stop_reply_queue,
6729                  remote_notif_remove_once_on_match, &param);
6730   if (notif_debug)
6731     fprintf_unfiltered (gdb_stdlog,
6732                         "notif: discard queued event: 'Stop' in %s\n",
6733                         target_pid_to_str (ptid));
6734
6735   return param.output;
6736 }
6737
6738 /* Look for a queued stop reply belonging to PTID.  If one is found,
6739    remove it from the queue, and return it.  Returns NULL if none is
6740    found.  If there are still queued events left to process, tell the
6741    event loop to get back to target_wait soon.  */
6742
6743 static struct stop_reply *
6744 queued_stop_reply (ptid_t ptid)
6745 {
6746   struct stop_reply *r = remote_notif_remove_queued_reply (ptid);
6747
6748   if (!QUEUE_is_empty (stop_reply_p, stop_reply_queue))
6749     /* There's still at least an event left.  */
6750     mark_async_event_handler (remote_async_inferior_event_token);
6751
6752   return r;
6753 }
6754
6755 /* Push a fully parsed stop reply in the stop reply queue.  Since we
6756    know that we now have at least one queued event left to pass to the
6757    core side, tell the event loop to get back to target_wait soon.  */
6758
6759 static void
6760 push_stop_reply (struct stop_reply *new_event)
6761 {
6762   QUEUE_enque (stop_reply_p, stop_reply_queue, new_event);
6763
6764   if (notif_debug)
6765     fprintf_unfiltered (gdb_stdlog,
6766                         "notif: push 'Stop' %s to queue %d\n",
6767                         target_pid_to_str (new_event->ptid),
6768                         QUEUE_length (stop_reply_p,
6769                                       stop_reply_queue));
6770
6771   mark_async_event_handler (remote_async_inferior_event_token);
6772 }
6773
6774 static int
6775 stop_reply_match_ptid_and_ws (QUEUE (stop_reply_p) *q,
6776                               QUEUE_ITER (stop_reply_p) *iter,
6777                               struct stop_reply *event,
6778                               void *data)
6779 {
6780   ptid_t *ptid = (ptid_t *) data;
6781
6782   return !(ptid_equal (*ptid, event->ptid)
6783            && event->ws.kind == TARGET_WAITKIND_STOPPED);
6784 }
6785
6786 /* Returns true if we have a stop reply for PTID.  */
6787
6788 static int
6789 peek_stop_reply (ptid_t ptid)
6790 {
6791   return !QUEUE_iterate (stop_reply_p, stop_reply_queue,
6792                          stop_reply_match_ptid_and_ws, &ptid);
6793 }
6794
6795 /* Helper for remote_parse_stop_reply.  Return nonzero if the substring
6796    starting with P and ending with PEND matches PREFIX.  */
6797
6798 static int
6799 strprefix (const char *p, const char *pend, const char *prefix)
6800 {
6801   for ( ; p < pend; p++, prefix++)
6802     if (*p != *prefix)
6803       return 0;
6804   return *prefix == '\0';
6805 }
6806
6807 /* Parse the stop reply in BUF.  Either the function succeeds, and the
6808    result is stored in EVENT, or throws an error.  */
6809
6810 static void
6811 remote_parse_stop_reply (char *buf, struct stop_reply *event)
6812 {
6813   struct remote_arch_state *rsa = get_remote_arch_state ();
6814   ULONGEST addr;
6815   char *p;
6816   int skipregs = 0;
6817
6818   event->ptid = null_ptid;
6819   event->rs = get_remote_state ();
6820   event->ws.kind = TARGET_WAITKIND_IGNORE;
6821   event->ws.value.integer = 0;
6822   event->stop_reason = TARGET_STOPPED_BY_NO_REASON;
6823   event->regcache = NULL;
6824   event->core = -1;
6825
6826   switch (buf[0])
6827     {
6828     case 'T':           /* Status with PC, SP, FP, ...  */
6829       /* Expedited reply, containing Signal, {regno, reg} repeat.  */
6830       /*  format is:  'Tssn...:r...;n...:r...;n...:r...;#cc', where
6831             ss = signal number
6832             n... = register number
6833             r... = register contents
6834       */
6835
6836       p = &buf[3];      /* after Txx */
6837       while (*p)
6838         {
6839           char *p1;
6840           int fieldsize;
6841
6842           p1 = strchr (p, ':');
6843           if (p1 == NULL)
6844             error (_("Malformed packet(a) (missing colon): %s\n\
6845 Packet: '%s'\n"),
6846                    p, buf);
6847           if (p == p1)
6848             error (_("Malformed packet(a) (missing register number): %s\n\
6849 Packet: '%s'\n"),
6850                    p, buf);
6851
6852           /* Some "registers" are actually extended stop information.
6853              Note if you're adding a new entry here: GDB 7.9 and
6854              earlier assume that all register "numbers" that start
6855              with an hex digit are real register numbers.  Make sure
6856              the server only sends such a packet if it knows the
6857              client understands it.  */
6858
6859           if (strprefix (p, p1, "thread"))
6860             event->ptid = read_ptid (++p1, &p);
6861           else if (strprefix (p, p1, "syscall_entry"))
6862             {
6863               ULONGEST sysno;
6864
6865               event->ws.kind = TARGET_WAITKIND_SYSCALL_ENTRY;
6866               p = unpack_varlen_hex (++p1, &sysno);
6867               event->ws.value.syscall_number = (int) sysno;
6868             }
6869           else if (strprefix (p, p1, "syscall_return"))
6870             {
6871               ULONGEST sysno;
6872
6873               event->ws.kind = TARGET_WAITKIND_SYSCALL_RETURN;
6874               p = unpack_varlen_hex (++p1, &sysno);
6875               event->ws.value.syscall_number = (int) sysno;
6876             }
6877           else if (strprefix (p, p1, "watch")
6878                    || strprefix (p, p1, "rwatch")
6879                    || strprefix (p, p1, "awatch"))
6880             {
6881               event->stop_reason = TARGET_STOPPED_BY_WATCHPOINT;
6882               p = unpack_varlen_hex (++p1, &addr);
6883               event->watch_data_address = (CORE_ADDR) addr;
6884             }
6885           else if (strprefix (p, p1, "swbreak"))
6886             {
6887               event->stop_reason = TARGET_STOPPED_BY_SW_BREAKPOINT;
6888
6889               /* Make sure the stub doesn't forget to indicate support
6890                  with qSupported.  */
6891               if (packet_support (PACKET_swbreak_feature) != PACKET_ENABLE)
6892                 error (_("Unexpected swbreak stop reason"));
6893
6894               /* The value part is documented as "must be empty",
6895                  though we ignore it, in case we ever decide to make
6896                  use of it in a backward compatible way.  */
6897               p = strchrnul (p1 + 1, ';');
6898             }
6899           else if (strprefix (p, p1, "hwbreak"))
6900             {
6901               event->stop_reason = TARGET_STOPPED_BY_HW_BREAKPOINT;
6902
6903               /* Make sure the stub doesn't forget to indicate support
6904                  with qSupported.  */
6905               if (packet_support (PACKET_hwbreak_feature) != PACKET_ENABLE)
6906                 error (_("Unexpected hwbreak stop reason"));
6907
6908               /* See above.  */
6909               p = strchrnul (p1 + 1, ';');
6910             }
6911           else if (strprefix (p, p1, "library"))
6912             {
6913               event->ws.kind = TARGET_WAITKIND_LOADED;
6914               p = strchrnul (p1 + 1, ';');
6915             }
6916           else if (strprefix (p, p1, "replaylog"))
6917             {
6918               event->ws.kind = TARGET_WAITKIND_NO_HISTORY;
6919               /* p1 will indicate "begin" or "end", but it makes
6920                  no difference for now, so ignore it.  */
6921               p = strchrnul (p1 + 1, ';');
6922             }
6923           else if (strprefix (p, p1, "core"))
6924             {
6925               ULONGEST c;
6926
6927               p = unpack_varlen_hex (++p1, &c);
6928               event->core = c;
6929             }
6930           else if (strprefix (p, p1, "fork"))
6931             {
6932               event->ws.value.related_pid = read_ptid (++p1, &p);
6933               event->ws.kind = TARGET_WAITKIND_FORKED;
6934             }
6935           else if (strprefix (p, p1, "vfork"))
6936             {
6937               event->ws.value.related_pid = read_ptid (++p1, &p);
6938               event->ws.kind = TARGET_WAITKIND_VFORKED;
6939             }
6940           else if (strprefix (p, p1, "vforkdone"))
6941             {
6942               event->ws.kind = TARGET_WAITKIND_VFORK_DONE;
6943               p = strchrnul (p1 + 1, ';');
6944             }
6945           else if (strprefix (p, p1, "exec"))
6946             {
6947               ULONGEST ignored;
6948               char pathname[PATH_MAX];
6949               int pathlen;
6950
6951               /* Determine the length of the execd pathname.  */
6952               p = unpack_varlen_hex (++p1, &ignored);
6953               pathlen = (p - p1) / 2;
6954
6955               /* Save the pathname for event reporting and for
6956                  the next run command.  */
6957               hex2bin (p1, (gdb_byte *) pathname, pathlen);
6958               pathname[pathlen] = '\0';
6959
6960               /* This is freed during event handling.  */
6961               event->ws.value.execd_pathname = xstrdup (pathname);
6962               event->ws.kind = TARGET_WAITKIND_EXECD;
6963
6964               /* Skip the registers included in this packet, since
6965                  they may be for an architecture different from the
6966                  one used by the original program.  */
6967               skipregs = 1;
6968             }
6969           else if (strprefix (p, p1, "create"))
6970             {
6971               event->ws.kind = TARGET_WAITKIND_THREAD_CREATED;
6972               p = strchrnul (p1 + 1, ';');
6973             }
6974           else
6975             {
6976               ULONGEST pnum;
6977               char *p_temp;
6978
6979               if (skipregs)
6980                 {
6981                   p = strchrnul (p1 + 1, ';');
6982                   p++;
6983                   continue;
6984                 }
6985
6986               /* Maybe a real ``P'' register number.  */
6987               p_temp = unpack_varlen_hex (p, &pnum);
6988               /* If the first invalid character is the colon, we got a
6989                  register number.  Otherwise, it's an unknown stop
6990                  reason.  */
6991               if (p_temp == p1)
6992                 {
6993                   struct packet_reg *reg = packet_reg_from_pnum (rsa, pnum);
6994                   cached_reg_t cached_reg;
6995                   struct gdbarch *gdbarch = target_gdbarch ();
6996
6997                   if (reg == NULL)
6998                     error (_("Remote sent bad register number %s: %s\n\
6999 Packet: '%s'\n"),
7000                            hex_string (pnum), p, buf);
7001
7002                   cached_reg.num = reg->regnum;
7003                   cached_reg.data = (gdb_byte *)
7004                     xmalloc (register_size (gdbarch, reg->regnum));
7005
7006                   p = p1 + 1;
7007                   fieldsize = hex2bin (p, cached_reg.data,
7008                                        register_size (gdbarch, reg->regnum));
7009                   p += 2 * fieldsize;
7010                   if (fieldsize < register_size (gdbarch, reg->regnum))
7011                     warning (_("Remote reply is too short: %s"), buf);
7012
7013                   VEC_safe_push (cached_reg_t, event->regcache, &cached_reg);
7014                 }
7015               else
7016                 {
7017                   /* Not a number.  Silently skip unknown optional
7018                      info.  */
7019                   p = strchrnul (p1 + 1, ';');
7020                 }
7021             }
7022
7023           if (*p != ';')
7024             error (_("Remote register badly formatted: %s\nhere: %s"),
7025                    buf, p);
7026           ++p;
7027         }
7028
7029       if (event->ws.kind != TARGET_WAITKIND_IGNORE)
7030         break;
7031
7032       /* fall through */
7033     case 'S':           /* Old style status, just signal only.  */
7034       {
7035         int sig;
7036
7037         event->ws.kind = TARGET_WAITKIND_STOPPED;
7038         sig = (fromhex (buf[1]) << 4) + fromhex (buf[2]);
7039         if (GDB_SIGNAL_FIRST <= sig && sig < GDB_SIGNAL_LAST)
7040           event->ws.value.sig = (enum gdb_signal) sig;
7041         else
7042           event->ws.value.sig = GDB_SIGNAL_UNKNOWN;
7043       }
7044       break;
7045     case 'w':           /* Thread exited.  */
7046       {
7047         char *p;
7048         ULONGEST value;
7049
7050         event->ws.kind = TARGET_WAITKIND_THREAD_EXITED;
7051         p = unpack_varlen_hex (&buf[1], &value);
7052         event->ws.value.integer = value;
7053         if (*p != ';')
7054           error (_("stop reply packet badly formatted: %s"), buf);
7055         event->ptid = read_ptid (++p, NULL);
7056         break;
7057       }
7058     case 'W':           /* Target exited.  */
7059     case 'X':
7060       {
7061         char *p;
7062         int pid;
7063         ULONGEST value;
7064
7065         /* GDB used to accept only 2 hex chars here.  Stubs should
7066            only send more if they detect GDB supports multi-process
7067            support.  */
7068         p = unpack_varlen_hex (&buf[1], &value);
7069
7070         if (buf[0] == 'W')
7071           {
7072             /* The remote process exited.  */
7073             event->ws.kind = TARGET_WAITKIND_EXITED;
7074             event->ws.value.integer = value;
7075           }
7076         else
7077           {
7078             /* The remote process exited with a signal.  */
7079             event->ws.kind = TARGET_WAITKIND_SIGNALLED;
7080             if (GDB_SIGNAL_FIRST <= value && value < GDB_SIGNAL_LAST)
7081               event->ws.value.sig = (enum gdb_signal) value;
7082             else
7083               event->ws.value.sig = GDB_SIGNAL_UNKNOWN;
7084           }
7085
7086         /* If no process is specified, assume inferior_ptid.  */
7087         pid = ptid_get_pid (inferior_ptid);
7088         if (*p == '\0')
7089           ;
7090         else if (*p == ';')
7091           {
7092             p++;
7093
7094             if (*p == '\0')
7095               ;
7096             else if (startswith (p, "process:"))
7097               {
7098                 ULONGEST upid;
7099
7100                 p += sizeof ("process:") - 1;
7101                 unpack_varlen_hex (p, &upid);
7102                 pid = upid;
7103               }
7104             else
7105               error (_("unknown stop reply packet: %s"), buf);
7106           }
7107         else
7108           error (_("unknown stop reply packet: %s"), buf);
7109         event->ptid = pid_to_ptid (pid);
7110       }
7111       break;
7112     case 'N':
7113       event->ws.kind = TARGET_WAITKIND_NO_RESUMED;
7114       event->ptid = minus_one_ptid;
7115       break;
7116     }
7117
7118   if (target_is_non_stop_p () && ptid_equal (event->ptid, null_ptid))
7119     error (_("No process or thread specified in stop reply: %s"), buf);
7120 }
7121
7122 /* When the stub wants to tell GDB about a new notification reply, it
7123    sends a notification (%Stop, for example).  Those can come it at
7124    any time, hence, we have to make sure that any pending
7125    putpkt/getpkt sequence we're making is finished, before querying
7126    the stub for more events with the corresponding ack command
7127    (vStopped, for example).  E.g., if we started a vStopped sequence
7128    immediately upon receiving the notification, something like this
7129    could happen:
7130
7131     1.1) --> Hg 1
7132     1.2) <-- OK
7133     1.3) --> g
7134     1.4) <-- %Stop
7135     1.5) --> vStopped
7136     1.6) <-- (registers reply to step #1.3)
7137
7138    Obviously, the reply in step #1.6 would be unexpected to a vStopped
7139    query.
7140
7141    To solve this, whenever we parse a %Stop notification successfully,
7142    we mark the REMOTE_ASYNC_GET_PENDING_EVENTS_TOKEN, and carry on
7143    doing whatever we were doing:
7144
7145     2.1) --> Hg 1
7146     2.2) <-- OK
7147     2.3) --> g
7148     2.4) <-- %Stop
7149       <GDB marks the REMOTE_ASYNC_GET_PENDING_EVENTS_TOKEN>
7150     2.5) <-- (registers reply to step #2.3)
7151
7152    Eventualy after step #2.5, we return to the event loop, which
7153    notices there's an event on the
7154    REMOTE_ASYNC_GET_PENDING_EVENTS_TOKEN event and calls the
7155    associated callback --- the function below.  At this point, we're
7156    always safe to start a vStopped sequence. :
7157
7158     2.6) --> vStopped
7159     2.7) <-- T05 thread:2
7160     2.8) --> vStopped
7161     2.9) --> OK
7162 */
7163
7164 void
7165 remote_notif_get_pending_events (struct notif_client *nc)
7166 {
7167   struct remote_state *rs = get_remote_state ();
7168
7169   if (rs->notif_state->pending_event[nc->id] != NULL)
7170     {
7171       if (notif_debug)
7172         fprintf_unfiltered (gdb_stdlog,
7173                             "notif: process: '%s' ack pending event\n",
7174                             nc->name);
7175
7176       /* acknowledge */
7177       nc->ack (nc, rs->buf, rs->notif_state->pending_event[nc->id]);
7178       rs->notif_state->pending_event[nc->id] = NULL;
7179
7180       while (1)
7181         {
7182           getpkt (&rs->buf, &rs->buf_size, 0);
7183           if (strcmp (rs->buf, "OK") == 0)
7184             break;
7185           else
7186             remote_notif_ack (nc, rs->buf);
7187         }
7188     }
7189   else
7190     {
7191       if (notif_debug)
7192         fprintf_unfiltered (gdb_stdlog,
7193                             "notif: process: '%s' no pending reply\n",
7194                             nc->name);
7195     }
7196 }
7197
7198 /* Called when it is decided that STOP_REPLY holds the info of the
7199    event that is to be returned to the core.  This function always
7200    destroys STOP_REPLY.  */
7201
7202 static ptid_t
7203 process_stop_reply (struct stop_reply *stop_reply,
7204                     struct target_waitstatus *status)
7205 {
7206   ptid_t ptid;
7207
7208   *status = stop_reply->ws;
7209   ptid = stop_reply->ptid;
7210
7211   /* If no thread/process was reported by the stub, assume the current
7212      inferior.  */
7213   if (ptid_equal (ptid, null_ptid))
7214     ptid = inferior_ptid;
7215
7216   if (status->kind != TARGET_WAITKIND_EXITED
7217       && status->kind != TARGET_WAITKIND_SIGNALLED
7218       && status->kind != TARGET_WAITKIND_NO_RESUMED)
7219     {
7220       struct private_thread_info *remote_thr;
7221
7222       /* Expedited registers.  */
7223       if (stop_reply->regcache)
7224         {
7225           struct regcache *regcache
7226             = get_thread_arch_regcache (ptid, target_gdbarch ());
7227           cached_reg_t *reg;
7228           int ix;
7229
7230           for (ix = 0;
7231                VEC_iterate (cached_reg_t, stop_reply->regcache, ix, reg);
7232                ix++)
7233           {
7234             regcache_raw_supply (regcache, reg->num, reg->data);
7235             xfree (reg->data);
7236           }
7237
7238           VEC_free (cached_reg_t, stop_reply->regcache);
7239         }
7240
7241       remote_notice_new_inferior (ptid, 0);
7242       remote_thr = get_private_info_ptid (ptid);
7243       remote_thr->core = stop_reply->core;
7244       remote_thr->stop_reason = stop_reply->stop_reason;
7245       remote_thr->watch_data_address = stop_reply->watch_data_address;
7246       remote_thr->vcont_resumed = 0;
7247     }
7248
7249   stop_reply_xfree (stop_reply);
7250   return ptid;
7251 }
7252
7253 /* The non-stop mode version of target_wait.  */
7254
7255 static ptid_t
7256 remote_wait_ns (ptid_t ptid, struct target_waitstatus *status, int options)
7257 {
7258   struct remote_state *rs = get_remote_state ();
7259   struct stop_reply *stop_reply;
7260   int ret;
7261   int is_notif = 0;
7262
7263   /* If in non-stop mode, get out of getpkt even if a
7264      notification is received.  */
7265
7266   ret = getpkt_or_notif_sane (&rs->buf, &rs->buf_size,
7267                               0 /* forever */, &is_notif);
7268   while (1)
7269     {
7270       if (ret != -1 && !is_notif)
7271         switch (rs->buf[0])
7272           {
7273           case 'E':             /* Error of some sort.  */
7274             /* We're out of sync with the target now.  Did it continue
7275                or not?  We can't tell which thread it was in non-stop,
7276                so just ignore this.  */
7277             warning (_("Remote failure reply: %s"), rs->buf);
7278             break;
7279           case 'O':             /* Console output.  */
7280             remote_console_output (rs->buf + 1);
7281             break;
7282           default:
7283             warning (_("Invalid remote reply: %s"), rs->buf);
7284             break;
7285           }
7286
7287       /* Acknowledge a pending stop reply that may have arrived in the
7288          mean time.  */
7289       if (rs->notif_state->pending_event[notif_client_stop.id] != NULL)
7290         remote_notif_get_pending_events (&notif_client_stop);
7291
7292       /* If indeed we noticed a stop reply, we're done.  */
7293       stop_reply = queued_stop_reply (ptid);
7294       if (stop_reply != NULL)
7295         return process_stop_reply (stop_reply, status);
7296
7297       /* Still no event.  If we're just polling for an event, then
7298          return to the event loop.  */
7299       if (options & TARGET_WNOHANG)
7300         {
7301           status->kind = TARGET_WAITKIND_IGNORE;
7302           return minus_one_ptid;
7303         }
7304
7305       /* Otherwise do a blocking wait.  */
7306       ret = getpkt_or_notif_sane (&rs->buf, &rs->buf_size,
7307                                   1 /* forever */, &is_notif);
7308     }
7309 }
7310
7311 /* Wait until the remote machine stops, then return, storing status in
7312    STATUS just as `wait' would.  */
7313
7314 static ptid_t
7315 remote_wait_as (ptid_t ptid, struct target_waitstatus *status, int options)
7316 {
7317   struct remote_state *rs = get_remote_state ();
7318   ptid_t event_ptid = null_ptid;
7319   char *buf;
7320   struct stop_reply *stop_reply;
7321
7322  again:
7323
7324   status->kind = TARGET_WAITKIND_IGNORE;
7325   status->value.integer = 0;
7326
7327   stop_reply = queued_stop_reply (ptid);
7328   if (stop_reply != NULL)
7329     return process_stop_reply (stop_reply, status);
7330
7331   if (rs->cached_wait_status)
7332     /* Use the cached wait status, but only once.  */
7333     rs->cached_wait_status = 0;
7334   else
7335     {
7336       int ret;
7337       int is_notif;
7338       int forever = ((options & TARGET_WNOHANG) == 0
7339                      && wait_forever_enabled_p);
7340
7341       if (!rs->waiting_for_stop_reply)
7342         {
7343           status->kind = TARGET_WAITKIND_NO_RESUMED;
7344           return minus_one_ptid;
7345         }
7346
7347       /* FIXME: cagney/1999-09-27: If we're in async mode we should
7348          _never_ wait for ever -> test on target_is_async_p().
7349          However, before we do that we need to ensure that the caller
7350          knows how to take the target into/out of async mode.  */
7351       ret = getpkt_or_notif_sane (&rs->buf, &rs->buf_size,
7352                                   forever, &is_notif);
7353
7354       /* GDB gets a notification.  Return to core as this event is
7355          not interesting.  */
7356       if (ret != -1 && is_notif)
7357         return minus_one_ptid;
7358
7359       if (ret == -1 && (options & TARGET_WNOHANG) != 0)
7360         return minus_one_ptid;
7361     }
7362
7363   buf = rs->buf;
7364
7365   /* Assume that the target has acknowledged Ctrl-C unless we receive
7366      an 'F' or 'O' packet.  */
7367   if (buf[0] != 'F' && buf[0] != 'O')
7368     rs->ctrlc_pending_p = 0;
7369
7370   switch (buf[0])
7371     {
7372     case 'E':           /* Error of some sort.  */
7373       /* We're out of sync with the target now.  Did it continue or
7374          not?  Not is more likely, so report a stop.  */
7375       rs->waiting_for_stop_reply = 0;
7376
7377       warning (_("Remote failure reply: %s"), buf);
7378       status->kind = TARGET_WAITKIND_STOPPED;
7379       status->value.sig = GDB_SIGNAL_0;
7380       break;
7381     case 'F':           /* File-I/O request.  */
7382       /* GDB may access the inferior memory while handling the File-I/O
7383          request, but we don't want GDB accessing memory while waiting
7384          for a stop reply.  See the comments in putpkt_binary.  Set
7385          waiting_for_stop_reply to 0 temporarily.  */
7386       rs->waiting_for_stop_reply = 0;
7387       remote_fileio_request (buf, rs->ctrlc_pending_p);
7388       rs->ctrlc_pending_p = 0;
7389       /* GDB handled the File-I/O request, and the target is running
7390          again.  Keep waiting for events.  */
7391       rs->waiting_for_stop_reply = 1;
7392       break;
7393     case 'N': case 'T': case 'S': case 'X': case 'W':
7394       {
7395         struct stop_reply *stop_reply;
7396
7397         /* There is a stop reply to handle.  */
7398         rs->waiting_for_stop_reply = 0;
7399
7400         stop_reply
7401           = (struct stop_reply *) remote_notif_parse (&notif_client_stop,
7402                                                       rs->buf);
7403
7404         event_ptid = process_stop_reply (stop_reply, status);
7405         break;
7406       }
7407     case 'O':           /* Console output.  */
7408       remote_console_output (buf + 1);
7409       break;
7410     case '\0':
7411       if (rs->last_sent_signal != GDB_SIGNAL_0)
7412         {
7413           /* Zero length reply means that we tried 'S' or 'C' and the
7414              remote system doesn't support it.  */
7415           target_terminal_ours_for_output ();
7416           printf_filtered
7417             ("Can't send signals to this remote system.  %s not sent.\n",
7418              gdb_signal_to_name (rs->last_sent_signal));
7419           rs->last_sent_signal = GDB_SIGNAL_0;
7420           target_terminal_inferior ();
7421
7422           strcpy (buf, rs->last_sent_step ? "s" : "c");
7423           putpkt (buf);
7424           break;
7425         }
7426       /* else fallthrough */
7427     default:
7428       warning (_("Invalid remote reply: %s"), buf);
7429       break;
7430     }
7431
7432   if (status->kind == TARGET_WAITKIND_NO_RESUMED)
7433     return minus_one_ptid;
7434   else if (status->kind == TARGET_WAITKIND_IGNORE)
7435     {
7436       /* Nothing interesting happened.  If we're doing a non-blocking
7437          poll, we're done.  Otherwise, go back to waiting.  */
7438       if (options & TARGET_WNOHANG)
7439         return minus_one_ptid;
7440       else
7441         goto again;
7442     }
7443   else if (status->kind != TARGET_WAITKIND_EXITED
7444            && status->kind != TARGET_WAITKIND_SIGNALLED)
7445     {
7446       if (!ptid_equal (event_ptid, null_ptid))
7447         record_currthread (rs, event_ptid);
7448       else
7449         event_ptid = inferior_ptid;
7450     }
7451   else
7452     /* A process exit.  Invalidate our notion of current thread.  */
7453     record_currthread (rs, minus_one_ptid);
7454
7455   return event_ptid;
7456 }
7457
7458 /* Wait until the remote machine stops, then return, storing status in
7459    STATUS just as `wait' would.  */
7460
7461 static ptid_t
7462 remote_wait (struct target_ops *ops,
7463              ptid_t ptid, struct target_waitstatus *status, int options)
7464 {
7465   ptid_t event_ptid;
7466
7467   if (target_is_non_stop_p ())
7468     event_ptid = remote_wait_ns (ptid, status, options);
7469   else
7470     event_ptid = remote_wait_as (ptid, status, options);
7471
7472   if (target_is_async_p ())
7473     {
7474       /* If there are are events left in the queue tell the event loop
7475          to return here.  */
7476       if (!QUEUE_is_empty (stop_reply_p, stop_reply_queue))
7477         mark_async_event_handler (remote_async_inferior_event_token);
7478     }
7479
7480   return event_ptid;
7481 }
7482
7483 /* Fetch a single register using a 'p' packet.  */
7484
7485 static int
7486 fetch_register_using_p (struct regcache *regcache, struct packet_reg *reg)
7487 {
7488   struct gdbarch *gdbarch = get_regcache_arch (regcache);
7489   struct remote_state *rs = get_remote_state ();
7490   char *buf, *p;
7491   gdb_byte *regp = (gdb_byte *) alloca (register_size (gdbarch, reg->regnum));
7492   int i;
7493
7494   if (packet_support (PACKET_p) == PACKET_DISABLE)
7495     return 0;
7496
7497   if (reg->pnum == -1)
7498     return 0;
7499
7500   p = rs->buf;
7501   *p++ = 'p';
7502   p += hexnumstr (p, reg->pnum);
7503   *p++ = '\0';
7504   putpkt (rs->buf);
7505   getpkt (&rs->buf, &rs->buf_size, 0);
7506
7507   buf = rs->buf;
7508
7509   switch (packet_ok (buf, &remote_protocol_packets[PACKET_p]))
7510     {
7511     case PACKET_OK:
7512       break;
7513     case PACKET_UNKNOWN:
7514       return 0;
7515     case PACKET_ERROR:
7516       error (_("Could not fetch register \"%s\"; remote failure reply '%s'"),
7517              gdbarch_register_name (get_regcache_arch (regcache), 
7518                                     reg->regnum), 
7519              buf);
7520     }
7521
7522   /* If this register is unfetchable, tell the regcache.  */
7523   if (buf[0] == 'x')
7524     {
7525       regcache_raw_supply (regcache, reg->regnum, NULL);
7526       return 1;
7527     }
7528
7529   /* Otherwise, parse and supply the value.  */
7530   p = buf;
7531   i = 0;
7532   while (p[0] != 0)
7533     {
7534       if (p[1] == 0)
7535         error (_("fetch_register_using_p: early buf termination"));
7536
7537       regp[i++] = fromhex (p[0]) * 16 + fromhex (p[1]);
7538       p += 2;
7539     }
7540   regcache_raw_supply (regcache, reg->regnum, regp);
7541   return 1;
7542 }
7543
7544 /* Fetch the registers included in the target's 'g' packet.  */
7545
7546 static int
7547 send_g_packet (void)
7548 {
7549   struct remote_state *rs = get_remote_state ();
7550   int buf_len;
7551
7552   xsnprintf (rs->buf, get_remote_packet_size (), "g");
7553   remote_send (&rs->buf, &rs->buf_size);
7554
7555   /* We can get out of synch in various cases.  If the first character
7556      in the buffer is not a hex character, assume that has happened
7557      and try to fetch another packet to read.  */
7558   while ((rs->buf[0] < '0' || rs->buf[0] > '9')
7559          && (rs->buf[0] < 'A' || rs->buf[0] > 'F')
7560          && (rs->buf[0] < 'a' || rs->buf[0] > 'f')
7561          && rs->buf[0] != 'x')  /* New: unavailable register value.  */
7562     {
7563       if (remote_debug)
7564         fprintf_unfiltered (gdb_stdlog,
7565                             "Bad register packet; fetching a new packet\n");
7566       getpkt (&rs->buf, &rs->buf_size, 0);
7567     }
7568
7569   buf_len = strlen (rs->buf);
7570
7571   /* Sanity check the received packet.  */
7572   if (buf_len % 2 != 0)
7573     error (_("Remote 'g' packet reply is of odd length: %s"), rs->buf);
7574
7575   return buf_len / 2;
7576 }
7577
7578 static void
7579 process_g_packet (struct regcache *regcache)
7580 {
7581   struct gdbarch *gdbarch = get_regcache_arch (regcache);
7582   struct remote_state *rs = get_remote_state ();
7583   struct remote_arch_state *rsa = get_remote_arch_state ();
7584   int i, buf_len;
7585   char *p;
7586   char *regs;
7587
7588   buf_len = strlen (rs->buf);
7589
7590   /* Further sanity checks, with knowledge of the architecture.  */
7591   if (buf_len > 2 * rsa->sizeof_g_packet)
7592     error (_("Remote 'g' packet reply is too long (expected %ld bytes, got %d "
7593              "bytes): %s"), rsa->sizeof_g_packet, buf_len / 2, rs->buf);
7594
7595   /* Save the size of the packet sent to us by the target.  It is used
7596      as a heuristic when determining the max size of packets that the
7597      target can safely receive.  */
7598   if (rsa->actual_register_packet_size == 0)
7599     rsa->actual_register_packet_size = buf_len;
7600
7601   /* If this is smaller than we guessed the 'g' packet would be,
7602      update our records.  A 'g' reply that doesn't include a register's
7603      value implies either that the register is not available, or that
7604      the 'p' packet must be used.  */
7605   if (buf_len < 2 * rsa->sizeof_g_packet)
7606     {
7607       long sizeof_g_packet = buf_len / 2;
7608
7609       for (i = 0; i < gdbarch_num_regs (gdbarch); i++)
7610         {
7611           long offset = rsa->regs[i].offset;
7612           long reg_size = register_size (gdbarch, i);
7613
7614           if (rsa->regs[i].pnum == -1)
7615             continue;
7616
7617           if (offset >= sizeof_g_packet)
7618             rsa->regs[i].in_g_packet = 0;
7619           else if (offset + reg_size > sizeof_g_packet)
7620             error (_("Truncated register %d in remote 'g' packet"), i);
7621           else
7622             rsa->regs[i].in_g_packet = 1;
7623         }
7624
7625       /* Looks valid enough, we can assume this is the correct length
7626          for a 'g' packet.  It's important not to adjust
7627          rsa->sizeof_g_packet if we have truncated registers otherwise
7628          this "if" won't be run the next time the method is called
7629          with a packet of the same size and one of the internal errors
7630          below will trigger instead.  */
7631       rsa->sizeof_g_packet = sizeof_g_packet;
7632     }
7633
7634   regs = (char *) alloca (rsa->sizeof_g_packet);
7635
7636   /* Unimplemented registers read as all bits zero.  */
7637   memset (regs, 0, rsa->sizeof_g_packet);
7638
7639   /* Reply describes registers byte by byte, each byte encoded as two
7640      hex characters.  Suck them all up, then supply them to the
7641      register cacheing/storage mechanism.  */
7642
7643   p = rs->buf;
7644   for (i = 0; i < rsa->sizeof_g_packet; i++)
7645     {
7646       if (p[0] == 0 || p[1] == 0)
7647         /* This shouldn't happen - we adjusted sizeof_g_packet above.  */
7648         internal_error (__FILE__, __LINE__,
7649                         _("unexpected end of 'g' packet reply"));
7650
7651       if (p[0] == 'x' && p[1] == 'x')
7652         regs[i] = 0;            /* 'x' */
7653       else
7654         regs[i] = fromhex (p[0]) * 16 + fromhex (p[1]);
7655       p += 2;
7656     }
7657
7658   for (i = 0; i < gdbarch_num_regs (gdbarch); i++)
7659     {
7660       struct packet_reg *r = &rsa->regs[i];
7661       long reg_size = register_size (gdbarch, i);
7662
7663       if (r->in_g_packet)
7664         {
7665           if ((r->offset + reg_size) * 2 > strlen (rs->buf))
7666             /* This shouldn't happen - we adjusted in_g_packet above.  */
7667             internal_error (__FILE__, __LINE__,
7668                             _("unexpected end of 'g' packet reply"));
7669           else if (rs->buf[r->offset * 2] == 'x')
7670             {
7671               gdb_assert (r->offset * 2 < strlen (rs->buf));
7672               /* The register isn't available, mark it as such (at
7673                  the same time setting the value to zero).  */
7674               regcache_raw_supply (regcache, r->regnum, NULL);
7675             }
7676           else
7677             regcache_raw_supply (regcache, r->regnum,
7678                                  regs + r->offset);
7679         }
7680     }
7681 }
7682
7683 static void
7684 fetch_registers_using_g (struct regcache *regcache)
7685 {
7686   send_g_packet ();
7687   process_g_packet (regcache);
7688 }
7689
7690 /* Make the remote selected traceframe match GDB's selected
7691    traceframe.  */
7692
7693 static void
7694 set_remote_traceframe (void)
7695 {
7696   int newnum;
7697   struct remote_state *rs = get_remote_state ();
7698
7699   if (rs->remote_traceframe_number == get_traceframe_number ())
7700     return;
7701
7702   /* Avoid recursion, remote_trace_find calls us again.  */
7703   rs->remote_traceframe_number = get_traceframe_number ();
7704
7705   newnum = target_trace_find (tfind_number,
7706                               get_traceframe_number (), 0, 0, NULL);
7707
7708   /* Should not happen.  If it does, all bets are off.  */
7709   if (newnum != get_traceframe_number ())
7710     warning (_("could not set remote traceframe"));
7711 }
7712
7713 static void
7714 remote_fetch_registers (struct target_ops *ops,
7715                         struct regcache *regcache, int regnum)
7716 {
7717   struct remote_arch_state *rsa = get_remote_arch_state ();
7718   int i;
7719
7720   set_remote_traceframe ();
7721   set_general_thread (regcache_get_ptid (regcache));
7722
7723   if (regnum >= 0)
7724     {
7725       struct packet_reg *reg = packet_reg_from_regnum (rsa, regnum);
7726
7727       gdb_assert (reg != NULL);
7728
7729       /* If this register might be in the 'g' packet, try that first -
7730          we are likely to read more than one register.  If this is the
7731          first 'g' packet, we might be overly optimistic about its
7732          contents, so fall back to 'p'.  */
7733       if (reg->in_g_packet)
7734         {
7735           fetch_registers_using_g (regcache);
7736           if (reg->in_g_packet)
7737             return;
7738         }
7739
7740       if (fetch_register_using_p (regcache, reg))
7741         return;
7742
7743       /* This register is not available.  */
7744       regcache_raw_supply (regcache, reg->regnum, NULL);
7745
7746       return;
7747     }
7748
7749   fetch_registers_using_g (regcache);
7750
7751   for (i = 0; i < gdbarch_num_regs (get_regcache_arch (regcache)); i++)
7752     if (!rsa->regs[i].in_g_packet)
7753       if (!fetch_register_using_p (regcache, &rsa->regs[i]))
7754         {
7755           /* This register is not available.  */
7756           regcache_raw_supply (regcache, i, NULL);
7757         }
7758 }
7759
7760 /* Prepare to store registers.  Since we may send them all (using a
7761    'G' request), we have to read out the ones we don't want to change
7762    first.  */
7763
7764 static void
7765 remote_prepare_to_store (struct target_ops *self, struct regcache *regcache)
7766 {
7767   struct remote_arch_state *rsa = get_remote_arch_state ();
7768   int i;
7769
7770   /* Make sure the entire registers array is valid.  */
7771   switch (packet_support (PACKET_P))
7772     {
7773     case PACKET_DISABLE:
7774     case PACKET_SUPPORT_UNKNOWN:
7775       /* Make sure all the necessary registers are cached.  */
7776       for (i = 0; i < gdbarch_num_regs (get_regcache_arch (regcache)); i++)
7777         if (rsa->regs[i].in_g_packet)
7778           regcache_raw_update (regcache, rsa->regs[i].regnum);
7779       break;
7780     case PACKET_ENABLE:
7781       break;
7782     }
7783 }
7784
7785 /* Helper: Attempt to store REGNUM using the P packet.  Return fail IFF
7786    packet was not recognized.  */
7787
7788 static int
7789 store_register_using_P (const struct regcache *regcache, 
7790                         struct packet_reg *reg)
7791 {
7792   struct gdbarch *gdbarch = get_regcache_arch (regcache);
7793   struct remote_state *rs = get_remote_state ();
7794   /* Try storing a single register.  */
7795   char *buf = rs->buf;
7796   gdb_byte *regp = (gdb_byte *) alloca (register_size (gdbarch, reg->regnum));
7797   char *p;
7798
7799   if (packet_support (PACKET_P) == PACKET_DISABLE)
7800     return 0;
7801
7802   if (reg->pnum == -1)
7803     return 0;
7804
7805   xsnprintf (buf, get_remote_packet_size (), "P%s=", phex_nz (reg->pnum, 0));
7806   p = buf + strlen (buf);
7807   regcache_raw_collect (regcache, reg->regnum, regp);
7808   bin2hex (regp, p, register_size (gdbarch, reg->regnum));
7809   putpkt (rs->buf);
7810   getpkt (&rs->buf, &rs->buf_size, 0);
7811
7812   switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_P]))
7813     {
7814     case PACKET_OK:
7815       return 1;
7816     case PACKET_ERROR:
7817       error (_("Could not write register \"%s\"; remote failure reply '%s'"),
7818              gdbarch_register_name (gdbarch, reg->regnum), rs->buf);
7819     case PACKET_UNKNOWN:
7820       return 0;
7821     default:
7822       internal_error (__FILE__, __LINE__, _("Bad result from packet_ok"));
7823     }
7824 }
7825
7826 /* Store register REGNUM, or all registers if REGNUM == -1, from the
7827    contents of the register cache buffer.  FIXME: ignores errors.  */
7828
7829 static void
7830 store_registers_using_G (const struct regcache *regcache)
7831 {
7832   struct remote_state *rs = get_remote_state ();
7833   struct remote_arch_state *rsa = get_remote_arch_state ();
7834   gdb_byte *regs;
7835   char *p;
7836
7837   /* Extract all the registers in the regcache copying them into a
7838      local buffer.  */
7839   {
7840     int i;
7841
7842     regs = (gdb_byte *) alloca (rsa->sizeof_g_packet);
7843     memset (regs, 0, rsa->sizeof_g_packet);
7844     for (i = 0; i < gdbarch_num_regs (get_regcache_arch (regcache)); i++)
7845       {
7846         struct packet_reg *r = &rsa->regs[i];
7847
7848         if (r->in_g_packet)
7849           regcache_raw_collect (regcache, r->regnum, regs + r->offset);
7850       }
7851   }
7852
7853   /* Command describes registers byte by byte,
7854      each byte encoded as two hex characters.  */
7855   p = rs->buf;
7856   *p++ = 'G';
7857   bin2hex (regs, p, rsa->sizeof_g_packet);
7858   putpkt (rs->buf);
7859   getpkt (&rs->buf, &rs->buf_size, 0);
7860   if (packet_check_result (rs->buf) == PACKET_ERROR)
7861     error (_("Could not write registers; remote failure reply '%s'"), 
7862            rs->buf);
7863 }
7864
7865 /* Store register REGNUM, or all registers if REGNUM == -1, from the contents
7866    of the register cache buffer.  FIXME: ignores errors.  */
7867
7868 static void
7869 remote_store_registers (struct target_ops *ops,
7870                         struct regcache *regcache, int regnum)
7871 {
7872   struct remote_arch_state *rsa = get_remote_arch_state ();
7873   int i;
7874
7875   set_remote_traceframe ();
7876   set_general_thread (regcache_get_ptid (regcache));
7877
7878   if (regnum >= 0)
7879     {
7880       struct packet_reg *reg = packet_reg_from_regnum (rsa, regnum);
7881
7882       gdb_assert (reg != NULL);
7883
7884       /* Always prefer to store registers using the 'P' packet if
7885          possible; we often change only a small number of registers.
7886          Sometimes we change a larger number; we'd need help from a
7887          higher layer to know to use 'G'.  */
7888       if (store_register_using_P (regcache, reg))
7889         return;
7890
7891       /* For now, don't complain if we have no way to write the
7892          register.  GDB loses track of unavailable registers too
7893          easily.  Some day, this may be an error.  We don't have
7894          any way to read the register, either...  */
7895       if (!reg->in_g_packet)
7896         return;
7897
7898       store_registers_using_G (regcache);
7899       return;
7900     }
7901
7902   store_registers_using_G (regcache);
7903
7904   for (i = 0; i < gdbarch_num_regs (get_regcache_arch (regcache)); i++)
7905     if (!rsa->regs[i].in_g_packet)
7906       if (!store_register_using_P (regcache, &rsa->regs[i]))
7907         /* See above for why we do not issue an error here.  */
7908         continue;
7909 }
7910 \f
7911
7912 /* Return the number of hex digits in num.  */
7913
7914 static int
7915 hexnumlen (ULONGEST num)
7916 {
7917   int i;
7918
7919   for (i = 0; num != 0; i++)
7920     num >>= 4;
7921
7922   return std::max (i, 1);
7923 }
7924
7925 /* Set BUF to the minimum number of hex digits representing NUM.  */
7926
7927 static int
7928 hexnumstr (char *buf, ULONGEST num)
7929 {
7930   int len = hexnumlen (num);
7931
7932   return hexnumnstr (buf, num, len);
7933 }
7934
7935
7936 /* Set BUF to the hex digits representing NUM, padded to WIDTH characters.  */
7937
7938 static int
7939 hexnumnstr (char *buf, ULONGEST num, int width)
7940 {
7941   int i;
7942
7943   buf[width] = '\0';
7944
7945   for (i = width - 1; i >= 0; i--)
7946     {
7947       buf[i] = "0123456789abcdef"[(num & 0xf)];
7948       num >>= 4;
7949     }
7950
7951   return width;
7952 }
7953
7954 /* Mask all but the least significant REMOTE_ADDRESS_SIZE bits.  */
7955
7956 static CORE_ADDR
7957 remote_address_masked (CORE_ADDR addr)
7958 {
7959   unsigned int address_size = remote_address_size;
7960
7961   /* If "remoteaddresssize" was not set, default to target address size.  */
7962   if (!address_size)
7963     address_size = gdbarch_addr_bit (target_gdbarch ());
7964
7965   if (address_size > 0
7966       && address_size < (sizeof (ULONGEST) * 8))
7967     {
7968       /* Only create a mask when that mask can safely be constructed
7969          in a ULONGEST variable.  */
7970       ULONGEST mask = 1;
7971
7972       mask = (mask << address_size) - 1;
7973       addr &= mask;
7974     }
7975   return addr;
7976 }
7977
7978 /* Determine whether the remote target supports binary downloading.
7979    This is accomplished by sending a no-op memory write of zero length
7980    to the target at the specified address. It does not suffice to send
7981    the whole packet, since many stubs strip the eighth bit and
7982    subsequently compute a wrong checksum, which causes real havoc with
7983    remote_write_bytes.
7984
7985    NOTE: This can still lose if the serial line is not eight-bit
7986    clean.  In cases like this, the user should clear "remote
7987    X-packet".  */
7988
7989 static void
7990 check_binary_download (CORE_ADDR addr)
7991 {
7992   struct remote_state *rs = get_remote_state ();
7993
7994   switch (packet_support (PACKET_X))
7995     {
7996     case PACKET_DISABLE:
7997       break;
7998     case PACKET_ENABLE:
7999       break;
8000     case PACKET_SUPPORT_UNKNOWN:
8001       {
8002         char *p;
8003
8004         p = rs->buf;
8005         *p++ = 'X';
8006         p += hexnumstr (p, (ULONGEST) addr);
8007         *p++ = ',';
8008         p += hexnumstr (p, (ULONGEST) 0);
8009         *p++ = ':';
8010         *p = '\0';
8011
8012         putpkt_binary (rs->buf, (int) (p - rs->buf));
8013         getpkt (&rs->buf, &rs->buf_size, 0);
8014
8015         if (rs->buf[0] == '\0')
8016           {
8017             if (remote_debug)
8018               fprintf_unfiltered (gdb_stdlog,
8019                                   "binary downloading NOT "
8020                                   "supported by target\n");
8021             remote_protocol_packets[PACKET_X].support = PACKET_DISABLE;
8022           }
8023         else
8024           {
8025             if (remote_debug)
8026               fprintf_unfiltered (gdb_stdlog,
8027                                   "binary downloading supported by target\n");
8028             remote_protocol_packets[PACKET_X].support = PACKET_ENABLE;
8029           }
8030         break;
8031       }
8032     }
8033 }
8034
8035 /* Helper function to resize the payload in order to try to get a good
8036    alignment.  We try to write an amount of data such that the next write will
8037    start on an address aligned on REMOTE_ALIGN_WRITES.  */
8038
8039 static int
8040 align_for_efficient_write (int todo, CORE_ADDR memaddr)
8041 {
8042   return ((memaddr + todo) & ~(REMOTE_ALIGN_WRITES - 1)) - memaddr;
8043 }
8044
8045 /* Write memory data directly to the remote machine.
8046    This does not inform the data cache; the data cache uses this.
8047    HEADER is the starting part of the packet.
8048    MEMADDR is the address in the remote memory space.
8049    MYADDR is the address of the buffer in our space.
8050    LEN_UNITS is the number of addressable units to write.
8051    UNIT_SIZE is the length in bytes of an addressable unit.
8052    PACKET_FORMAT should be either 'X' or 'M', and indicates if we
8053    should send data as binary ('X'), or hex-encoded ('M').
8054
8055    The function creates packet of the form
8056        <HEADER><ADDRESS>,<LENGTH>:<DATA>
8057
8058    where encoding of <DATA> is terminated by PACKET_FORMAT.
8059
8060    If USE_LENGTH is 0, then the <LENGTH> field and the preceding comma
8061    are omitted.
8062
8063    Return the transferred status, error or OK (an
8064    'enum target_xfer_status' value).  Save the number of addressable units
8065    transferred in *XFERED_LEN_UNITS.  Only transfer a single packet.
8066
8067    On a platform with an addressable memory size of 2 bytes (UNIT_SIZE == 2), an
8068    exchange between gdb and the stub could look like (?? in place of the
8069    checksum):
8070
8071    -> $m1000,4#??
8072    <- aaaabbbbccccdddd
8073
8074    -> $M1000,3:eeeeffffeeee#??
8075    <- OK
8076
8077    -> $m1000,4#??
8078    <- eeeeffffeeeedddd  */
8079
8080 static enum target_xfer_status
8081 remote_write_bytes_aux (const char *header, CORE_ADDR memaddr,
8082                         const gdb_byte *myaddr, ULONGEST len_units,
8083                         int unit_size, ULONGEST *xfered_len_units,
8084                         char packet_format, int use_length)
8085 {
8086   struct remote_state *rs = get_remote_state ();
8087   char *p;
8088   char *plen = NULL;
8089   int plenlen = 0;
8090   int todo_units;
8091   int units_written;
8092   int payload_capacity_bytes;
8093   int payload_length_bytes;
8094
8095   if (packet_format != 'X' && packet_format != 'M')
8096     internal_error (__FILE__, __LINE__,
8097                     _("remote_write_bytes_aux: bad packet format"));
8098
8099   if (len_units == 0)
8100     return TARGET_XFER_EOF;
8101
8102   payload_capacity_bytes = get_memory_write_packet_size ();
8103
8104   /* The packet buffer will be large enough for the payload;
8105      get_memory_packet_size ensures this.  */
8106   rs->buf[0] = '\0';
8107
8108   /* Compute the size of the actual payload by subtracting out the
8109      packet header and footer overhead: "$M<memaddr>,<len>:...#nn".  */
8110
8111   payload_capacity_bytes -= strlen ("$,:#NN");
8112   if (!use_length)
8113     /* The comma won't be used.  */
8114     payload_capacity_bytes += 1;
8115   payload_capacity_bytes -= strlen (header);
8116   payload_capacity_bytes -= hexnumlen (memaddr);
8117
8118   /* Construct the packet excluding the data: "<header><memaddr>,<len>:".  */
8119
8120   strcat (rs->buf, header);
8121   p = rs->buf + strlen (header);
8122
8123   /* Compute a best guess of the number of bytes actually transfered.  */
8124   if (packet_format == 'X')
8125     {
8126       /* Best guess at number of bytes that will fit.  */
8127       todo_units = std::min (len_units,
8128                              (ULONGEST) payload_capacity_bytes / unit_size);
8129       if (use_length)
8130         payload_capacity_bytes -= hexnumlen (todo_units);
8131       todo_units = std::min (todo_units, payload_capacity_bytes / unit_size);
8132     }
8133   else
8134     {
8135       /* Number of bytes that will fit.  */
8136       todo_units
8137         = std::min (len_units,
8138                     (ULONGEST) (payload_capacity_bytes / unit_size) / 2);
8139       if (use_length)
8140         payload_capacity_bytes -= hexnumlen (todo_units);
8141       todo_units = std::min (todo_units,
8142                              (payload_capacity_bytes / unit_size) / 2);
8143     }
8144
8145   if (todo_units <= 0)
8146     internal_error (__FILE__, __LINE__,
8147                     _("minimum packet size too small to write data"));
8148
8149   /* If we already need another packet, then try to align the end
8150      of this packet to a useful boundary.  */
8151   if (todo_units > 2 * REMOTE_ALIGN_WRITES && todo_units < len_units)
8152     todo_units = align_for_efficient_write (todo_units, memaddr);
8153
8154   /* Append "<memaddr>".  */
8155   memaddr = remote_address_masked (memaddr);
8156   p += hexnumstr (p, (ULONGEST) memaddr);
8157
8158   if (use_length)
8159     {
8160       /* Append ",".  */
8161       *p++ = ',';
8162
8163       /* Append the length and retain its location and size.  It may need to be
8164          adjusted once the packet body has been created.  */
8165       plen = p;
8166       plenlen = hexnumstr (p, (ULONGEST) todo_units);
8167       p += plenlen;
8168     }
8169
8170   /* Append ":".  */
8171   *p++ = ':';
8172   *p = '\0';
8173
8174   /* Append the packet body.  */
8175   if (packet_format == 'X')
8176     {
8177       /* Binary mode.  Send target system values byte by byte, in
8178          increasing byte addresses.  Only escape certain critical
8179          characters.  */
8180       payload_length_bytes =
8181           remote_escape_output (myaddr, todo_units, unit_size, (gdb_byte *) p,
8182                                 &units_written, payload_capacity_bytes);
8183
8184       /* If not all TODO units fit, then we'll need another packet.  Make
8185          a second try to keep the end of the packet aligned.  Don't do
8186          this if the packet is tiny.  */
8187       if (units_written < todo_units && units_written > 2 * REMOTE_ALIGN_WRITES)
8188         {
8189           int new_todo_units;
8190
8191           new_todo_units = align_for_efficient_write (units_written, memaddr);
8192
8193           if (new_todo_units != units_written)
8194             payload_length_bytes =
8195                 remote_escape_output (myaddr, new_todo_units, unit_size,
8196                                       (gdb_byte *) p, &units_written,
8197                                       payload_capacity_bytes);
8198         }
8199
8200       p += payload_length_bytes;
8201       if (use_length && units_written < todo_units)
8202         {
8203           /* Escape chars have filled up the buffer prematurely,
8204              and we have actually sent fewer units than planned.
8205              Fix-up the length field of the packet.  Use the same
8206              number of characters as before.  */
8207           plen += hexnumnstr (plen, (ULONGEST) units_written,
8208                               plenlen);
8209           *plen = ':';  /* overwrite \0 from hexnumnstr() */
8210         }
8211     }
8212   else
8213     {
8214       /* Normal mode: Send target system values byte by byte, in
8215          increasing byte addresses.  Each byte is encoded as a two hex
8216          value.  */
8217       p += 2 * bin2hex (myaddr, p, todo_units * unit_size);
8218       units_written = todo_units;
8219     }
8220
8221   putpkt_binary (rs->buf, (int) (p - rs->buf));
8222   getpkt (&rs->buf, &rs->buf_size, 0);
8223
8224   if (rs->buf[0] == 'E')
8225     return TARGET_XFER_E_IO;
8226
8227   /* Return UNITS_WRITTEN, not TODO_UNITS, in case escape chars caused us to
8228      send fewer units than we'd planned.  */
8229   *xfered_len_units = (ULONGEST) units_written;
8230   return TARGET_XFER_OK;
8231 }
8232
8233 /* Write memory data directly to the remote machine.
8234    This does not inform the data cache; the data cache uses this.
8235    MEMADDR is the address in the remote memory space.
8236    MYADDR is the address of the buffer in our space.
8237    LEN is the number of bytes.
8238
8239    Return the transferred status, error or OK (an
8240    'enum target_xfer_status' value).  Save the number of bytes
8241    transferred in *XFERED_LEN.  Only transfer a single packet.  */
8242
8243 static enum target_xfer_status
8244 remote_write_bytes (CORE_ADDR memaddr, const gdb_byte *myaddr, ULONGEST len,
8245                     int unit_size, ULONGEST *xfered_len)
8246 {
8247   const char *packet_format = NULL;
8248
8249   /* Check whether the target supports binary download.  */
8250   check_binary_download (memaddr);
8251
8252   switch (packet_support (PACKET_X))
8253     {
8254     case PACKET_ENABLE:
8255       packet_format = "X";
8256       break;
8257     case PACKET_DISABLE:
8258       packet_format = "M";
8259       break;
8260     case PACKET_SUPPORT_UNKNOWN:
8261       internal_error (__FILE__, __LINE__,
8262                       _("remote_write_bytes: bad internal state"));
8263     default:
8264       internal_error (__FILE__, __LINE__, _("bad switch"));
8265     }
8266
8267   return remote_write_bytes_aux (packet_format,
8268                                  memaddr, myaddr, len, unit_size, xfered_len,
8269                                  packet_format[0], 1);
8270 }
8271
8272 /* Read memory data directly from the remote machine.
8273    This does not use the data cache; the data cache uses this.
8274    MEMADDR is the address in the remote memory space.
8275    MYADDR is the address of the buffer in our space.
8276    LEN_UNITS is the number of addressable memory units to read..
8277    UNIT_SIZE is the length in bytes of an addressable unit.
8278
8279    Return the transferred status, error or OK (an
8280    'enum target_xfer_status' value).  Save the number of bytes
8281    transferred in *XFERED_LEN_UNITS.
8282
8283    See the comment of remote_write_bytes_aux for an example of
8284    memory read/write exchange between gdb and the stub.  */
8285
8286 static enum target_xfer_status
8287 remote_read_bytes_1 (CORE_ADDR memaddr, gdb_byte *myaddr, ULONGEST len_units,
8288                      int unit_size, ULONGEST *xfered_len_units)
8289 {
8290   struct remote_state *rs = get_remote_state ();
8291   int buf_size_bytes;           /* Max size of packet output buffer.  */
8292   char *p;
8293   int todo_units;
8294   int decoded_bytes;
8295
8296   buf_size_bytes = get_memory_read_packet_size ();
8297   /* The packet buffer will be large enough for the payload;
8298      get_memory_packet_size ensures this.  */
8299
8300   /* Number of units that will fit.  */
8301   todo_units = std::min (len_units,
8302                          (ULONGEST) (buf_size_bytes / unit_size) / 2);
8303
8304   /* Construct "m"<memaddr>","<len>".  */
8305   memaddr = remote_address_masked (memaddr);
8306   p = rs->buf;
8307   *p++ = 'm';
8308   p += hexnumstr (p, (ULONGEST) memaddr);
8309   *p++ = ',';
8310   p += hexnumstr (p, (ULONGEST) todo_units);
8311   *p = '\0';
8312   putpkt (rs->buf);
8313   getpkt (&rs->buf, &rs->buf_size, 0);
8314   if (rs->buf[0] == 'E'
8315       && isxdigit (rs->buf[1]) && isxdigit (rs->buf[2])
8316       && rs->buf[3] == '\0')
8317     return TARGET_XFER_E_IO;
8318   /* Reply describes memory byte by byte, each byte encoded as two hex
8319      characters.  */
8320   p = rs->buf;
8321   decoded_bytes = hex2bin (p, myaddr, todo_units * unit_size);
8322   /* Return what we have.  Let higher layers handle partial reads.  */
8323   *xfered_len_units = (ULONGEST) (decoded_bytes / unit_size);
8324   return TARGET_XFER_OK;
8325 }
8326
8327 /* Using the set of read-only target sections of remote, read live
8328    read-only memory.
8329
8330    For interface/parameters/return description see target.h,
8331    to_xfer_partial.  */
8332
8333 static enum target_xfer_status
8334 remote_xfer_live_readonly_partial (struct target_ops *ops, gdb_byte *readbuf,
8335                                    ULONGEST memaddr, ULONGEST len,
8336                                    int unit_size, ULONGEST *xfered_len)
8337 {
8338   struct target_section *secp;
8339   struct target_section_table *table;
8340
8341   secp = target_section_by_addr (ops, memaddr);
8342   if (secp != NULL
8343       && (bfd_get_section_flags (secp->the_bfd_section->owner,
8344                                  secp->the_bfd_section)
8345           & SEC_READONLY))
8346     {
8347       struct target_section *p;
8348       ULONGEST memend = memaddr + len;
8349
8350       table = target_get_section_table (ops);
8351
8352       for (p = table->sections; p < table->sections_end; p++)
8353         {
8354           if (memaddr >= p->addr)
8355             {
8356               if (memend <= p->endaddr)
8357                 {
8358                   /* Entire transfer is within this section.  */
8359                   return remote_read_bytes_1 (memaddr, readbuf, len, unit_size,
8360                                               xfered_len);
8361                 }
8362               else if (memaddr >= p->endaddr)
8363                 {
8364                   /* This section ends before the transfer starts.  */
8365                   continue;
8366                 }
8367               else
8368                 {
8369                   /* This section overlaps the transfer.  Just do half.  */
8370                   len = p->endaddr - memaddr;
8371                   return remote_read_bytes_1 (memaddr, readbuf, len, unit_size,
8372                                               xfered_len);
8373                 }
8374             }
8375         }
8376     }
8377
8378   return TARGET_XFER_EOF;
8379 }
8380
8381 /* Similar to remote_read_bytes_1, but it reads from the remote stub
8382    first if the requested memory is unavailable in traceframe.
8383    Otherwise, fall back to remote_read_bytes_1.  */
8384
8385 static enum target_xfer_status
8386 remote_read_bytes (struct target_ops *ops, CORE_ADDR memaddr,
8387                    gdb_byte *myaddr, ULONGEST len, int unit_size,
8388                    ULONGEST *xfered_len)
8389 {
8390   if (len == 0)
8391     return TARGET_XFER_EOF;
8392
8393   if (get_traceframe_number () != -1)
8394     {
8395       VEC(mem_range_s) *available;
8396
8397       /* If we fail to get the set of available memory, then the
8398          target does not support querying traceframe info, and so we
8399          attempt reading from the traceframe anyway (assuming the
8400          target implements the old QTro packet then).  */
8401       if (traceframe_available_memory (&available, memaddr, len))
8402         {
8403           struct cleanup *old_chain;
8404
8405           old_chain = make_cleanup (VEC_cleanup(mem_range_s), &available);
8406
8407           if (VEC_empty (mem_range_s, available)
8408               || VEC_index (mem_range_s, available, 0)->start != memaddr)
8409             {
8410               enum target_xfer_status res;
8411
8412               /* Don't read into the traceframe's available
8413                  memory.  */
8414               if (!VEC_empty (mem_range_s, available))
8415                 {
8416                   LONGEST oldlen = len;
8417
8418                   len = VEC_index (mem_range_s, available, 0)->start - memaddr;
8419                   gdb_assert (len <= oldlen);
8420                 }
8421
8422               do_cleanups (old_chain);
8423
8424               /* This goes through the topmost target again.  */
8425               res = remote_xfer_live_readonly_partial (ops, myaddr, memaddr,
8426                                                        len, unit_size, xfered_len);
8427               if (res == TARGET_XFER_OK)
8428                 return TARGET_XFER_OK;
8429               else
8430                 {
8431                   /* No use trying further, we know some memory starting
8432                      at MEMADDR isn't available.  */
8433                   *xfered_len = len;
8434                   return TARGET_XFER_UNAVAILABLE;
8435                 }
8436             }
8437
8438           /* Don't try to read more than how much is available, in
8439              case the target implements the deprecated QTro packet to
8440              cater for older GDBs (the target's knowledge of read-only
8441              sections may be outdated by now).  */
8442           len = VEC_index (mem_range_s, available, 0)->length;
8443
8444           do_cleanups (old_chain);
8445         }
8446     }
8447
8448   return remote_read_bytes_1 (memaddr, myaddr, len, unit_size, xfered_len);
8449 }
8450
8451 \f
8452
8453 /* Sends a packet with content determined by the printf format string
8454    FORMAT and the remaining arguments, then gets the reply.  Returns
8455    whether the packet was a success, a failure, or unknown.  */
8456
8457 static enum packet_result remote_send_printf (const char *format, ...)
8458   ATTRIBUTE_PRINTF (1, 2);
8459
8460 static enum packet_result
8461 remote_send_printf (const char *format, ...)
8462 {
8463   struct remote_state *rs = get_remote_state ();
8464   int max_size = get_remote_packet_size ();
8465   va_list ap;
8466
8467   va_start (ap, format);
8468
8469   rs->buf[0] = '\0';
8470   if (vsnprintf (rs->buf, max_size, format, ap) >= max_size)
8471     internal_error (__FILE__, __LINE__, _("Too long remote packet."));
8472
8473   if (putpkt (rs->buf) < 0)
8474     error (_("Communication problem with target."));
8475
8476   rs->buf[0] = '\0';
8477   getpkt (&rs->buf, &rs->buf_size, 0);
8478
8479   return packet_check_result (rs->buf);
8480 }
8481
8482 /* Flash writing can take quite some time.  We'll set
8483    effectively infinite timeout for flash operations.
8484    In future, we'll need to decide on a better approach.  */
8485 static const int remote_flash_timeout = 1000;
8486
8487 static void
8488 remote_flash_erase (struct target_ops *ops,
8489                     ULONGEST address, LONGEST length)
8490 {
8491   int addr_size = gdbarch_addr_bit (target_gdbarch ()) / 8;
8492   enum packet_result ret;
8493   scoped_restore restore_timeout
8494     = make_scoped_restore (&remote_timeout, remote_flash_timeout);
8495
8496   ret = remote_send_printf ("vFlashErase:%s,%s",
8497                             phex (address, addr_size),
8498                             phex (length, 4));
8499   switch (ret)
8500     {
8501     case PACKET_UNKNOWN:
8502       error (_("Remote target does not support flash erase"));
8503     case PACKET_ERROR:
8504       error (_("Error erasing flash with vFlashErase packet"));
8505     default:
8506       break;
8507     }
8508 }
8509
8510 static enum target_xfer_status
8511 remote_flash_write (struct target_ops *ops, ULONGEST address,
8512                     ULONGEST length, ULONGEST *xfered_len,
8513                     const gdb_byte *data)
8514 {
8515   scoped_restore restore_timeout
8516     = make_scoped_restore (&remote_timeout, remote_flash_timeout);
8517   return remote_write_bytes_aux ("vFlashWrite:", address, data, length, 1,
8518                                  xfered_len,'X', 0);
8519 }
8520
8521 static void
8522 remote_flash_done (struct target_ops *ops)
8523 {
8524   int ret;
8525
8526   scoped_restore restore_timeout
8527     = make_scoped_restore (&remote_timeout, remote_flash_timeout);
8528
8529   ret = remote_send_printf ("vFlashDone");
8530
8531   switch (ret)
8532     {
8533     case PACKET_UNKNOWN:
8534       error (_("Remote target does not support vFlashDone"));
8535     case PACKET_ERROR:
8536       error (_("Error finishing flash operation"));
8537     default:
8538       break;
8539     }
8540 }
8541
8542 static void
8543 remote_files_info (struct target_ops *ignore)
8544 {
8545   puts_filtered ("Debugging a target over a serial line.\n");
8546 }
8547 \f
8548 /* Stuff for dealing with the packets which are part of this protocol.
8549    See comment at top of file for details.  */
8550
8551 /* Close/unpush the remote target, and throw a TARGET_CLOSE_ERROR
8552    error to higher layers.  Called when a serial error is detected.
8553    The exception message is STRING, followed by a colon and a blank,
8554    the system error message for errno at function entry and final dot
8555    for output compatibility with throw_perror_with_name.  */
8556
8557 static void
8558 unpush_and_perror (const char *string)
8559 {
8560   int saved_errno = errno;
8561
8562   remote_unpush_target ();
8563   throw_error (TARGET_CLOSE_ERROR, "%s: %s.", string,
8564                safe_strerror (saved_errno));
8565 }
8566
8567 /* Read a single character from the remote end.  The current quit
8568    handler is overridden to avoid quitting in the middle of packet
8569    sequence, as that would break communication with the remote server.
8570    See remote_serial_quit_handler for more detail.  */
8571
8572 static int
8573 readchar (int timeout)
8574 {
8575   int ch;
8576   struct remote_state *rs = get_remote_state ();
8577
8578   {
8579     scoped_restore restore_quit
8580       = make_scoped_restore (&quit_handler, remote_serial_quit_handler);
8581
8582     rs->got_ctrlc_during_io = 0;
8583
8584     ch = serial_readchar (rs->remote_desc, timeout);
8585
8586     if (rs->got_ctrlc_during_io)
8587       set_quit_flag ();
8588   }
8589
8590   if (ch >= 0)
8591     return ch;
8592
8593   switch ((enum serial_rc) ch)
8594     {
8595     case SERIAL_EOF:
8596       remote_unpush_target ();
8597       throw_error (TARGET_CLOSE_ERROR, _("Remote connection closed"));
8598       /* no return */
8599     case SERIAL_ERROR:
8600       unpush_and_perror (_("Remote communication error.  "
8601                            "Target disconnected."));
8602       /* no return */
8603     case SERIAL_TIMEOUT:
8604       break;
8605     }
8606   return ch;
8607 }
8608
8609 /* Wrapper for serial_write that closes the target and throws if
8610    writing fails.  The current quit handler is overridden to avoid
8611    quitting in the middle of packet sequence, as that would break
8612    communication with the remote server.  See
8613    remote_serial_quit_handler for more detail.  */
8614
8615 static void
8616 remote_serial_write (const char *str, int len)
8617 {
8618   struct remote_state *rs = get_remote_state ();
8619
8620   scoped_restore restore_quit
8621     = make_scoped_restore (&quit_handler, remote_serial_quit_handler);
8622
8623   rs->got_ctrlc_during_io = 0;
8624
8625   if (serial_write (rs->remote_desc, str, len))
8626     {
8627       unpush_and_perror (_("Remote communication error.  "
8628                            "Target disconnected."));
8629     }
8630
8631   if (rs->got_ctrlc_during_io)
8632     set_quit_flag ();
8633 }
8634
8635 /* Send the command in *BUF to the remote machine, and read the reply
8636    into *BUF.  Report an error if we get an error reply.  Resize
8637    *BUF using xrealloc if necessary to hold the result, and update
8638    *SIZEOF_BUF.  */
8639
8640 static void
8641 remote_send (char **buf,
8642              long *sizeof_buf)
8643 {
8644   putpkt (*buf);
8645   getpkt (buf, sizeof_buf, 0);
8646
8647   if ((*buf)[0] == 'E')
8648     error (_("Remote failure reply: %s"), *buf);
8649 }
8650
8651 /* Return a string representing an escaped version of BUF, of len N.
8652    E.g. \n is converted to \\n, \t to \\t, etc.  */
8653
8654 static std::string
8655 escape_buffer (const char *buf, int n)
8656 {
8657   string_file stb;
8658
8659   stb.putstrn (buf, n, '\\');
8660   return std::move (stb.string ());
8661 }
8662
8663 /* Display a null-terminated packet on stdout, for debugging, using C
8664    string notation.  */
8665
8666 static void
8667 print_packet (const char *buf)
8668 {
8669   puts_filtered ("\"");
8670   fputstr_filtered (buf, '"', gdb_stdout);
8671   puts_filtered ("\"");
8672 }
8673
8674 int
8675 putpkt (const char *buf)
8676 {
8677   return putpkt_binary (buf, strlen (buf));
8678 }
8679
8680 /* Send a packet to the remote machine, with error checking.  The data
8681    of the packet is in BUF.  The string in BUF can be at most
8682    get_remote_packet_size () - 5 to account for the $, # and checksum,
8683    and for a possible /0 if we are debugging (remote_debug) and want
8684    to print the sent packet as a string.  */
8685
8686 static int
8687 putpkt_binary (const char *buf, int cnt)
8688 {
8689   struct remote_state *rs = get_remote_state ();
8690   int i;
8691   unsigned char csum = 0;
8692   char *buf2 = (char *) xmalloc (cnt + 6);
8693   struct cleanup *old_chain = make_cleanup (xfree, buf2);
8694
8695   int ch;
8696   int tcount = 0;
8697   char *p;
8698
8699   /* Catch cases like trying to read memory or listing threads while
8700      we're waiting for a stop reply.  The remote server wouldn't be
8701      ready to handle this request, so we'd hang and timeout.  We don't
8702      have to worry about this in synchronous mode, because in that
8703      case it's not possible to issue a command while the target is
8704      running.  This is not a problem in non-stop mode, because in that
8705      case, the stub is always ready to process serial input.  */
8706   if (!target_is_non_stop_p ()
8707       && target_is_async_p ()
8708       && rs->waiting_for_stop_reply)
8709     {
8710       error (_("Cannot execute this command while the target is running.\n"
8711                "Use the \"interrupt\" command to stop the target\n"
8712                "and then try again."));
8713     }
8714
8715   /* We're sending out a new packet.  Make sure we don't look at a
8716      stale cached response.  */
8717   rs->cached_wait_status = 0;
8718
8719   /* Copy the packet into buffer BUF2, encapsulating it
8720      and giving it a checksum.  */
8721
8722   p = buf2;
8723   *p++ = '$';
8724
8725   for (i = 0; i < cnt; i++)
8726     {
8727       csum += buf[i];
8728       *p++ = buf[i];
8729     }
8730   *p++ = '#';
8731   *p++ = tohex ((csum >> 4) & 0xf);
8732   *p++ = tohex (csum & 0xf);
8733
8734   /* Send it over and over until we get a positive ack.  */
8735
8736   while (1)
8737     {
8738       int started_error_output = 0;
8739
8740       if (remote_debug)
8741         {
8742           *p = '\0';
8743
8744           int len = (int) (p - buf2);
8745
8746           std::string str
8747             = escape_buffer (buf2, std::min (len, REMOTE_DEBUG_MAX_CHAR));
8748
8749           fprintf_unfiltered (gdb_stdlog, "Sending packet: %s", str.c_str ());
8750
8751           if (str.length () > REMOTE_DEBUG_MAX_CHAR)
8752             {
8753               fprintf_unfiltered (gdb_stdlog, "[%zu bytes omitted]",
8754                                   str.length () - REMOTE_DEBUG_MAX_CHAR);
8755             }
8756
8757           fprintf_unfiltered (gdb_stdlog, "...");
8758
8759           gdb_flush (gdb_stdlog);
8760         }
8761       remote_serial_write (buf2, p - buf2);
8762
8763       /* If this is a no acks version of the remote protocol, send the
8764          packet and move on.  */
8765       if (rs->noack_mode)
8766         break;
8767
8768       /* Read until either a timeout occurs (-2) or '+' is read.
8769          Handle any notification that arrives in the mean time.  */
8770       while (1)
8771         {
8772           ch = readchar (remote_timeout);
8773
8774           if (remote_debug)
8775             {
8776               switch (ch)
8777                 {
8778                 case '+':
8779                 case '-':
8780                 case SERIAL_TIMEOUT:
8781                 case '$':
8782                 case '%':
8783                   if (started_error_output)
8784                     {
8785                       putchar_unfiltered ('\n');
8786                       started_error_output = 0;
8787                     }
8788                 }
8789             }
8790
8791           switch (ch)
8792             {
8793             case '+':
8794               if (remote_debug)
8795                 fprintf_unfiltered (gdb_stdlog, "Ack\n");
8796               do_cleanups (old_chain);
8797               return 1;
8798             case '-':
8799               if (remote_debug)
8800                 fprintf_unfiltered (gdb_stdlog, "Nak\n");
8801               /* FALLTHROUGH */
8802             case SERIAL_TIMEOUT:
8803               tcount++;
8804               if (tcount > 3)
8805                 {
8806                   do_cleanups (old_chain);
8807                   return 0;
8808                 }
8809               break;            /* Retransmit buffer.  */
8810             case '$':
8811               {
8812                 if (remote_debug)
8813                   fprintf_unfiltered (gdb_stdlog,
8814                                       "Packet instead of Ack, ignoring it\n");
8815                 /* It's probably an old response sent because an ACK
8816                    was lost.  Gobble up the packet and ack it so it
8817                    doesn't get retransmitted when we resend this
8818                    packet.  */
8819                 skip_frame ();
8820                 remote_serial_write ("+", 1);
8821                 continue;       /* Now, go look for +.  */
8822               }
8823
8824             case '%':
8825               {
8826                 int val;
8827
8828                 /* If we got a notification, handle it, and go back to looking
8829                    for an ack.  */
8830                 /* We've found the start of a notification.  Now
8831                    collect the data.  */
8832                 val = read_frame (&rs->buf, &rs->buf_size);
8833                 if (val >= 0)
8834                   {
8835                     if (remote_debug)
8836                       {
8837                         std::string str = escape_buffer (rs->buf, val);
8838
8839                         fprintf_unfiltered (gdb_stdlog,
8840                                             "  Notification received: %s\n",
8841                                             str.c_str ());
8842                       }
8843                     handle_notification (rs->notif_state, rs->buf);
8844                     /* We're in sync now, rewait for the ack.  */
8845                     tcount = 0;
8846                   }
8847                 else
8848                   {
8849                     if (remote_debug)
8850                       {
8851                         if (!started_error_output)
8852                           {
8853                             started_error_output = 1;
8854                             fprintf_unfiltered (gdb_stdlog, "putpkt: Junk: ");
8855                           }
8856                         fputc_unfiltered (ch & 0177, gdb_stdlog);
8857                         fprintf_unfiltered (gdb_stdlog, "%s", rs->buf);
8858                       }
8859                   }
8860                 continue;
8861               }
8862               /* fall-through */
8863             default:
8864               if (remote_debug)
8865                 {
8866                   if (!started_error_output)
8867                     {
8868                       started_error_output = 1;
8869                       fprintf_unfiltered (gdb_stdlog, "putpkt: Junk: ");
8870                     }
8871                   fputc_unfiltered (ch & 0177, gdb_stdlog);
8872                 }
8873               continue;
8874             }
8875           break;                /* Here to retransmit.  */
8876         }
8877
8878 #if 0
8879       /* This is wrong.  If doing a long backtrace, the user should be
8880          able to get out next time we call QUIT, without anything as
8881          violent as interrupt_query.  If we want to provide a way out of
8882          here without getting to the next QUIT, it should be based on
8883          hitting ^C twice as in remote_wait.  */
8884       if (quit_flag)
8885         {
8886           quit_flag = 0;
8887           interrupt_query ();
8888         }
8889 #endif
8890     }
8891
8892   do_cleanups (old_chain);
8893   return 0;
8894 }
8895
8896 /* Come here after finding the start of a frame when we expected an
8897    ack.  Do our best to discard the rest of this packet.  */
8898
8899 static void
8900 skip_frame (void)
8901 {
8902   int c;
8903
8904   while (1)
8905     {
8906       c = readchar (remote_timeout);
8907       switch (c)
8908         {
8909         case SERIAL_TIMEOUT:
8910           /* Nothing we can do.  */
8911           return;
8912         case '#':
8913           /* Discard the two bytes of checksum and stop.  */
8914           c = readchar (remote_timeout);
8915           if (c >= 0)
8916             c = readchar (remote_timeout);
8917
8918           return;
8919         case '*':               /* Run length encoding.  */
8920           /* Discard the repeat count.  */
8921           c = readchar (remote_timeout);
8922           if (c < 0)
8923             return;
8924           break;
8925         default:
8926           /* A regular character.  */
8927           break;
8928         }
8929     }
8930 }
8931
8932 /* Come here after finding the start of the frame.  Collect the rest
8933    into *BUF, verifying the checksum, length, and handling run-length
8934    compression.  NUL terminate the buffer.  If there is not enough room,
8935    expand *BUF using xrealloc.
8936
8937    Returns -1 on error, number of characters in buffer (ignoring the
8938    trailing NULL) on success. (could be extended to return one of the
8939    SERIAL status indications).  */
8940
8941 static long
8942 read_frame (char **buf_p,
8943             long *sizeof_buf)
8944 {
8945   unsigned char csum;
8946   long bc;
8947   int c;
8948   char *buf = *buf_p;
8949   struct remote_state *rs = get_remote_state ();
8950
8951   csum = 0;
8952   bc = 0;
8953
8954   while (1)
8955     {
8956       c = readchar (remote_timeout);
8957       switch (c)
8958         {
8959         case SERIAL_TIMEOUT:
8960           if (remote_debug)
8961             fputs_filtered ("Timeout in mid-packet, retrying\n", gdb_stdlog);
8962           return -1;
8963         case '$':
8964           if (remote_debug)
8965             fputs_filtered ("Saw new packet start in middle of old one\n",
8966                             gdb_stdlog);
8967           return -1;            /* Start a new packet, count retries.  */
8968         case '#':
8969           {
8970             unsigned char pktcsum;
8971             int check_0 = 0;
8972             int check_1 = 0;
8973
8974             buf[bc] = '\0';
8975
8976             check_0 = readchar (remote_timeout);
8977             if (check_0 >= 0)
8978               check_1 = readchar (remote_timeout);
8979
8980             if (check_0 == SERIAL_TIMEOUT || check_1 == SERIAL_TIMEOUT)
8981               {
8982                 if (remote_debug)
8983                   fputs_filtered ("Timeout in checksum, retrying\n",
8984                                   gdb_stdlog);
8985                 return -1;
8986               }
8987             else if (check_0 < 0 || check_1 < 0)
8988               {
8989                 if (remote_debug)
8990                   fputs_filtered ("Communication error in checksum\n",
8991                                   gdb_stdlog);
8992                 return -1;
8993               }
8994
8995             /* Don't recompute the checksum; with no ack packets we
8996                don't have any way to indicate a packet retransmission
8997                is necessary.  */
8998             if (rs->noack_mode)
8999               return bc;
9000
9001             pktcsum = (fromhex (check_0) << 4) | fromhex (check_1);
9002             if (csum == pktcsum)
9003               return bc;
9004
9005             if (remote_debug)
9006               {
9007                 std::string str = escape_buffer (buf, bc);
9008
9009                 fprintf_unfiltered (gdb_stdlog,
9010                                     "Bad checksum, sentsum=0x%x, "
9011                                     "csum=0x%x, buf=%s\n",
9012                                     pktcsum, csum, str.c_str ());
9013               }
9014             /* Number of characters in buffer ignoring trailing
9015                NULL.  */
9016             return -1;
9017           }
9018         case '*':               /* Run length encoding.  */
9019           {
9020             int repeat;
9021
9022             csum += c;
9023             c = readchar (remote_timeout);
9024             csum += c;
9025             repeat = c - ' ' + 3;       /* Compute repeat count.  */
9026
9027             /* The character before ``*'' is repeated.  */
9028
9029             if (repeat > 0 && repeat <= 255 && bc > 0)
9030               {
9031                 if (bc + repeat - 1 >= *sizeof_buf - 1)
9032                   {
9033                     /* Make some more room in the buffer.  */
9034                     *sizeof_buf += repeat;
9035                     *buf_p = (char *) xrealloc (*buf_p, *sizeof_buf);
9036                     buf = *buf_p;
9037                   }
9038
9039                 memset (&buf[bc], buf[bc - 1], repeat);
9040                 bc += repeat;
9041                 continue;
9042               }
9043
9044             buf[bc] = '\0';
9045             printf_filtered (_("Invalid run length encoding: %s\n"), buf);
9046             return -1;
9047           }
9048         default:
9049           if (bc >= *sizeof_buf - 1)
9050             {
9051               /* Make some more room in the buffer.  */
9052               *sizeof_buf *= 2;
9053               *buf_p = (char *) xrealloc (*buf_p, *sizeof_buf);
9054               buf = *buf_p;
9055             }
9056
9057           buf[bc++] = c;
9058           csum += c;
9059           continue;
9060         }
9061     }
9062 }
9063
9064 /* Read a packet from the remote machine, with error checking, and
9065    store it in *BUF.  Resize *BUF using xrealloc if necessary to hold
9066    the result, and update *SIZEOF_BUF.  If FOREVER, wait forever
9067    rather than timing out; this is used (in synchronous mode) to wait
9068    for a target that is is executing user code to stop.  */
9069 /* FIXME: ezannoni 2000-02-01 this wrapper is necessary so that we
9070    don't have to change all the calls to getpkt to deal with the
9071    return value, because at the moment I don't know what the right
9072    thing to do it for those.  */
9073 void
9074 getpkt (char **buf,
9075         long *sizeof_buf,
9076         int forever)
9077 {
9078   getpkt_sane (buf, sizeof_buf, forever);
9079 }
9080
9081
9082 /* Read a packet from the remote machine, with error checking, and
9083    store it in *BUF.  Resize *BUF using xrealloc if necessary to hold
9084    the result, and update *SIZEOF_BUF.  If FOREVER, wait forever
9085    rather than timing out; this is used (in synchronous mode) to wait
9086    for a target that is is executing user code to stop.  If FOREVER ==
9087    0, this function is allowed to time out gracefully and return an
9088    indication of this to the caller.  Otherwise return the number of
9089    bytes read.  If EXPECTING_NOTIF, consider receiving a notification
9090    enough reason to return to the caller.  *IS_NOTIF is an output
9091    boolean that indicates whether *BUF holds a notification or not
9092    (a regular packet).  */
9093
9094 static int
9095 getpkt_or_notif_sane_1 (char **buf, long *sizeof_buf, int forever,
9096                         int expecting_notif, int *is_notif)
9097 {
9098   struct remote_state *rs = get_remote_state ();
9099   int c;
9100   int tries;
9101   int timeout;
9102   int val = -1;
9103
9104   /* We're reading a new response.  Make sure we don't look at a
9105      previously cached response.  */
9106   rs->cached_wait_status = 0;
9107
9108   strcpy (*buf, "timeout");
9109
9110   if (forever)
9111     timeout = watchdog > 0 ? watchdog : -1;
9112   else if (expecting_notif)
9113     timeout = 0; /* There should already be a char in the buffer.  If
9114                     not, bail out.  */
9115   else
9116     timeout = remote_timeout;
9117
9118 #define MAX_TRIES 3
9119
9120   /* Process any number of notifications, and then return when
9121      we get a packet.  */
9122   for (;;)
9123     {
9124       /* If we get a timeout or bad checksum, retry up to MAX_TRIES
9125          times.  */
9126       for (tries = 1; tries <= MAX_TRIES; tries++)
9127         {
9128           /* This can loop forever if the remote side sends us
9129              characters continuously, but if it pauses, we'll get
9130              SERIAL_TIMEOUT from readchar because of timeout.  Then
9131              we'll count that as a retry.
9132
9133              Note that even when forever is set, we will only wait
9134              forever prior to the start of a packet.  After that, we
9135              expect characters to arrive at a brisk pace.  They should
9136              show up within remote_timeout intervals.  */
9137           do
9138             c = readchar (timeout);
9139           while (c != SERIAL_TIMEOUT && c != '$' && c != '%');
9140
9141           if (c == SERIAL_TIMEOUT)
9142             {
9143               if (expecting_notif)
9144                 return -1; /* Don't complain, it's normal to not get
9145                               anything in this case.  */
9146
9147               if (forever)      /* Watchdog went off?  Kill the target.  */
9148                 {
9149                   remote_unpush_target ();
9150                   throw_error (TARGET_CLOSE_ERROR,
9151                                _("Watchdog timeout has expired.  "
9152                                  "Target detached."));
9153                 }
9154               if (remote_debug)
9155                 fputs_filtered ("Timed out.\n", gdb_stdlog);
9156             }
9157           else
9158             {
9159               /* We've found the start of a packet or notification.
9160                  Now collect the data.  */
9161               val = read_frame (buf, sizeof_buf);
9162               if (val >= 0)
9163                 break;
9164             }
9165
9166           remote_serial_write ("-", 1);
9167         }
9168
9169       if (tries > MAX_TRIES)
9170         {
9171           /* We have tried hard enough, and just can't receive the
9172              packet/notification.  Give up.  */
9173           printf_unfiltered (_("Ignoring packet error, continuing...\n"));
9174
9175           /* Skip the ack char if we're in no-ack mode.  */
9176           if (!rs->noack_mode)
9177             remote_serial_write ("+", 1);
9178           return -1;
9179         }
9180
9181       /* If we got an ordinary packet, return that to our caller.  */
9182       if (c == '$')
9183         {
9184           if (remote_debug)
9185             {
9186               std::string str
9187                 = escape_buffer (*buf,
9188                                  std::min (val, REMOTE_DEBUG_MAX_CHAR));
9189
9190               fprintf_unfiltered (gdb_stdlog, "Packet received: %s",
9191                                   str.c_str ());
9192
9193               if (str.length () >  REMOTE_DEBUG_MAX_CHAR)
9194                 {
9195                   fprintf_unfiltered (gdb_stdlog, "[%zu bytes omitted]",
9196                                       str.length () - REMOTE_DEBUG_MAX_CHAR);
9197                 }
9198
9199               fprintf_unfiltered (gdb_stdlog, "\n");
9200             }
9201
9202           /* Skip the ack char if we're in no-ack mode.  */
9203           if (!rs->noack_mode)
9204             remote_serial_write ("+", 1);
9205           if (is_notif != NULL)
9206             *is_notif = 0;
9207           return val;
9208         }
9209
9210        /* If we got a notification, handle it, and go back to looking
9211          for a packet.  */
9212       else
9213         {
9214           gdb_assert (c == '%');
9215
9216           if (remote_debug)
9217             {
9218               std::string str = escape_buffer (*buf, val);
9219
9220               fprintf_unfiltered (gdb_stdlog,
9221                                   "  Notification received: %s\n",
9222                                   str.c_str ());
9223             }
9224           if (is_notif != NULL)
9225             *is_notif = 1;
9226
9227           handle_notification (rs->notif_state, *buf);
9228
9229           /* Notifications require no acknowledgement.  */
9230
9231           if (expecting_notif)
9232             return val;
9233         }
9234     }
9235 }
9236
9237 static int
9238 getpkt_sane (char **buf, long *sizeof_buf, int forever)
9239 {
9240   return getpkt_or_notif_sane_1 (buf, sizeof_buf, forever, 0, NULL);
9241 }
9242
9243 static int
9244 getpkt_or_notif_sane (char **buf, long *sizeof_buf, int forever,
9245                       int *is_notif)
9246 {
9247   return getpkt_or_notif_sane_1 (buf, sizeof_buf, forever, 1,
9248                                  is_notif);
9249 }
9250
9251 /* Check whether EVENT is a fork event for the process specified
9252    by the pid passed in DATA, and if it is, kill the fork child.  */
9253
9254 static int
9255 kill_child_of_pending_fork (QUEUE (stop_reply_p) *q,
9256                             QUEUE_ITER (stop_reply_p) *iter,
9257                             stop_reply_p event,
9258                             void *data)
9259 {
9260   struct queue_iter_param *param = (struct queue_iter_param *) data;
9261   int parent_pid = *(int *) param->input;
9262
9263   if (is_pending_fork_parent (&event->ws, parent_pid, event->ptid))
9264     {
9265       struct remote_state *rs = get_remote_state ();
9266       int child_pid = ptid_get_pid (event->ws.value.related_pid);
9267       int res;
9268
9269       res = remote_vkill (child_pid, rs);
9270       if (res != 0)
9271         error (_("Can't kill fork child process %d"), child_pid);
9272     }
9273
9274   return 1;
9275 }
9276
9277 /* Kill any new fork children of process PID that haven't been
9278    processed by follow_fork.  */
9279
9280 static void
9281 kill_new_fork_children (int pid, struct remote_state *rs)
9282 {
9283   struct thread_info *thread;
9284   struct notif_client *notif = &notif_client_stop;
9285   struct queue_iter_param param;
9286
9287   /* Kill the fork child threads of any threads in process PID
9288      that are stopped at a fork event.  */
9289   ALL_NON_EXITED_THREADS (thread)
9290     {
9291       struct target_waitstatus *ws = &thread->pending_follow;
9292
9293       if (is_pending_fork_parent (ws, pid, thread->ptid))
9294         {
9295           struct remote_state *rs = get_remote_state ();
9296           int child_pid = ptid_get_pid (ws->value.related_pid);
9297           int res;
9298
9299           res = remote_vkill (child_pid, rs);
9300           if (res != 0)
9301             error (_("Can't kill fork child process %d"), child_pid);
9302         }
9303     }
9304
9305   /* Check for any pending fork events (not reported or processed yet)
9306      in process PID and kill those fork child threads as well.  */
9307   remote_notif_get_pending_events (notif);
9308   param.input = &pid;
9309   param.output = NULL;
9310   QUEUE_iterate (stop_reply_p, stop_reply_queue,
9311                  kill_child_of_pending_fork, &param);
9312 }
9313
9314 \f
9315 /* Target hook to kill the current inferior.  */
9316
9317 static void
9318 remote_kill (struct target_ops *ops)
9319 {
9320   int res = -1;
9321   int pid = ptid_get_pid (inferior_ptid);
9322   struct remote_state *rs = get_remote_state ();
9323
9324   if (packet_support (PACKET_vKill) != PACKET_DISABLE)
9325     {
9326       /* If we're stopped while forking and we haven't followed yet,
9327          kill the child task.  We need to do this before killing the
9328          parent task because if this is a vfork then the parent will
9329          be sleeping.  */
9330       kill_new_fork_children (pid, rs);
9331
9332       res = remote_vkill (pid, rs);
9333       if (res == 0)
9334         {
9335           target_mourn_inferior (inferior_ptid);
9336           return;
9337         }
9338     }
9339
9340   /* If we are in 'target remote' mode and we are killing the only
9341      inferior, then we will tell gdbserver to exit and unpush the
9342      target.  */
9343   if (res == -1 && !remote_multi_process_p (rs)
9344       && number_of_live_inferiors () == 1)
9345     {
9346       remote_kill_k ();
9347
9348       /* We've killed the remote end, we get to mourn it.  If we are
9349          not in extended mode, mourning the inferior also unpushes
9350          remote_ops from the target stack, which closes the remote
9351          connection.  */
9352       target_mourn_inferior (inferior_ptid);
9353
9354       return;
9355     }
9356
9357   error (_("Can't kill process"));
9358 }
9359
9360 /* Send a kill request to the target using the 'vKill' packet.  */
9361
9362 static int
9363 remote_vkill (int pid, struct remote_state *rs)
9364 {
9365   if (packet_support (PACKET_vKill) == PACKET_DISABLE)
9366     return -1;
9367
9368   /* Tell the remote target to detach.  */
9369   xsnprintf (rs->buf, get_remote_packet_size (), "vKill;%x", pid);
9370   putpkt (rs->buf);
9371   getpkt (&rs->buf, &rs->buf_size, 0);
9372
9373   switch (packet_ok (rs->buf,
9374                      &remote_protocol_packets[PACKET_vKill]))
9375     {
9376     case PACKET_OK:
9377       return 0;
9378     case PACKET_ERROR:
9379       return 1;
9380     case PACKET_UNKNOWN:
9381       return -1;
9382     default:
9383       internal_error (__FILE__, __LINE__, _("Bad result from packet_ok"));
9384     }
9385 }
9386
9387 /* Send a kill request to the target using the 'k' packet.  */
9388
9389 static void
9390 remote_kill_k (void)
9391 {
9392   /* Catch errors so the user can quit from gdb even when we
9393      aren't on speaking terms with the remote system.  */
9394   TRY
9395     {
9396       putpkt ("k");
9397     }
9398   CATCH (ex, RETURN_MASK_ERROR)
9399     {
9400       if (ex.error == TARGET_CLOSE_ERROR)
9401         {
9402           /* If we got an (EOF) error that caused the target
9403              to go away, then we're done, that's what we wanted.
9404              "k" is susceptible to cause a premature EOF, given
9405              that the remote server isn't actually required to
9406              reply to "k", and it can happen that it doesn't
9407              even get to reply ACK to the "k".  */
9408           return;
9409         }
9410
9411       /* Otherwise, something went wrong.  We didn't actually kill
9412          the target.  Just propagate the exception, and let the
9413          user or higher layers decide what to do.  */
9414       throw_exception (ex);
9415     }
9416   END_CATCH
9417 }
9418
9419 static void
9420 remote_mourn (struct target_ops *target)
9421 {
9422   struct remote_state *rs = get_remote_state ();
9423
9424   /* In 'target remote' mode with one inferior, we close the connection.  */
9425   if (!rs->extended && number_of_live_inferiors () <= 1)
9426     {
9427       unpush_target (target);
9428
9429       /* remote_close takes care of doing most of the clean up.  */
9430       generic_mourn_inferior ();
9431       return;
9432     }
9433
9434   /* In case we got here due to an error, but we're going to stay
9435      connected.  */
9436   rs->waiting_for_stop_reply = 0;
9437
9438   /* If the current general thread belonged to the process we just
9439      detached from or has exited, the remote side current general
9440      thread becomes undefined.  Considering a case like this:
9441
9442      - We just got here due to a detach.
9443      - The process that we're detaching from happens to immediately
9444        report a global breakpoint being hit in non-stop mode, in the
9445        same thread we had selected before.
9446      - GDB attaches to this process again.
9447      - This event happens to be the next event we handle.
9448
9449      GDB would consider that the current general thread didn't need to
9450      be set on the stub side (with Hg), since for all it knew,
9451      GENERAL_THREAD hadn't changed.
9452
9453      Notice that although in all-stop mode, the remote server always
9454      sets the current thread to the thread reporting the stop event,
9455      that doesn't happen in non-stop mode; in non-stop, the stub *must
9456      not* change the current thread when reporting a breakpoint hit,
9457      due to the decoupling of event reporting and event handling.
9458
9459      To keep things simple, we always invalidate our notion of the
9460      current thread.  */
9461   record_currthread (rs, minus_one_ptid);
9462
9463   /* Call common code to mark the inferior as not running.  */
9464   generic_mourn_inferior ();
9465
9466   if (!have_inferiors ())
9467     {
9468       if (!remote_multi_process_p (rs))
9469         {
9470           /* Check whether the target is running now - some remote stubs
9471              automatically restart after kill.  */
9472           putpkt ("?");
9473           getpkt (&rs->buf, &rs->buf_size, 0);
9474
9475           if (rs->buf[0] == 'S' || rs->buf[0] == 'T')
9476             {
9477               /* Assume that the target has been restarted.  Set
9478                  inferior_ptid so that bits of core GDB realizes
9479                  there's something here, e.g., so that the user can
9480                  say "kill" again.  */
9481               inferior_ptid = magic_null_ptid;
9482             }
9483         }
9484     }
9485 }
9486
9487 static int
9488 extended_remote_supports_disable_randomization (struct target_ops *self)
9489 {
9490   return packet_support (PACKET_QDisableRandomization) == PACKET_ENABLE;
9491 }
9492
9493 static void
9494 extended_remote_disable_randomization (int val)
9495 {
9496   struct remote_state *rs = get_remote_state ();
9497   char *reply;
9498
9499   xsnprintf (rs->buf, get_remote_packet_size (), "QDisableRandomization:%x",
9500              val);
9501   putpkt (rs->buf);
9502   reply = remote_get_noisy_reply (&target_buf, &target_buf_size);
9503   if (*reply == '\0')
9504     error (_("Target does not support QDisableRandomization."));
9505   if (strcmp (reply, "OK") != 0)
9506     error (_("Bogus QDisableRandomization reply from target: %s"), reply);
9507 }
9508
9509 static int
9510 extended_remote_run (const std::string &args)
9511 {
9512   struct remote_state *rs = get_remote_state ();
9513   int len;
9514   const char *remote_exec_file = get_remote_exec_file ();
9515
9516   /* If the user has disabled vRun support, or we have detected that
9517      support is not available, do not try it.  */
9518   if (packet_support (PACKET_vRun) == PACKET_DISABLE)
9519     return -1;
9520
9521   strcpy (rs->buf, "vRun;");
9522   len = strlen (rs->buf);
9523
9524   if (strlen (remote_exec_file) * 2 + len >= get_remote_packet_size ())
9525     error (_("Remote file name too long for run packet"));
9526   len += 2 * bin2hex ((gdb_byte *) remote_exec_file, rs->buf + len,
9527                       strlen (remote_exec_file));
9528
9529   if (!args.empty ())
9530     {
9531       int i;
9532
9533       gdb_argv argv (args.c_str ());
9534       for (i = 0; argv[i] != NULL; i++)
9535         {
9536           if (strlen (argv[i]) * 2 + 1 + len >= get_remote_packet_size ())
9537             error (_("Argument list too long for run packet"));
9538           rs->buf[len++] = ';';
9539           len += 2 * bin2hex ((gdb_byte *) argv[i], rs->buf + len,
9540                               strlen (argv[i]));
9541         }
9542     }
9543
9544   rs->buf[len++] = '\0';
9545
9546   putpkt (rs->buf);
9547   getpkt (&rs->buf, &rs->buf_size, 0);
9548
9549   switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_vRun]))
9550     {
9551     case PACKET_OK:
9552       /* We have a wait response.  All is well.  */
9553       return 0;
9554     case PACKET_UNKNOWN:
9555       return -1;
9556     case PACKET_ERROR:
9557       if (remote_exec_file[0] == '\0')
9558         error (_("Running the default executable on the remote target failed; "
9559                  "try \"set remote exec-file\"?"));
9560       else
9561         error (_("Running \"%s\" on the remote target failed"),
9562                remote_exec_file);
9563     default:
9564       gdb_assert_not_reached (_("bad switch"));
9565     }
9566 }
9567
9568 /* Helper function to send set/unset environment packets.  ACTION is
9569    either "set" or "unset".  PACKET is either "QEnvironmentHexEncoded"
9570    or "QEnvironmentUnsetVariable".  VALUE is the variable to be
9571    sent.  */
9572
9573 static void
9574 send_environment_packet (struct remote_state *rs,
9575                          const char *action,
9576                          const char *packet,
9577                          const char *value)
9578 {
9579   /* Convert the environment variable to an hex string, which
9580      is the best format to be transmitted over the wire.  */
9581   std::string encoded_value = bin2hex ((const gdb_byte *) value,
9582                                          strlen (value));
9583
9584   xsnprintf (rs->buf, get_remote_packet_size (),
9585              "%s:%s", packet, encoded_value.c_str ());
9586
9587   putpkt (rs->buf);
9588   getpkt (&rs->buf, &rs->buf_size, 0);
9589   if (strcmp (rs->buf, "OK") != 0)
9590     warning (_("Unable to %s environment variable '%s' on remote."),
9591              action, value);
9592 }
9593
9594 /* Helper function to handle the QEnvironment* packets.  */
9595
9596 static void
9597 extended_remote_environment_support (struct remote_state *rs)
9598 {
9599   if (packet_support (PACKET_QEnvironmentReset) != PACKET_DISABLE)
9600     {
9601       putpkt ("QEnvironmentReset");
9602       getpkt (&rs->buf, &rs->buf_size, 0);
9603       if (strcmp (rs->buf, "OK") != 0)
9604         warning (_("Unable to reset environment on remote."));
9605     }
9606
9607   gdb_environ *e = &current_inferior ()->environment;
9608
9609   if (packet_support (PACKET_QEnvironmentHexEncoded) != PACKET_DISABLE)
9610     for (const std::string &el : e->user_set_env ())
9611       send_environment_packet (rs, "set", "QEnvironmentHexEncoded",
9612                                el.c_str ());
9613
9614   if (packet_support (PACKET_QEnvironmentUnset) != PACKET_DISABLE)
9615     for (const std::string &el : e->user_unset_env ())
9616       send_environment_packet (rs, "unset", "QEnvironmentUnset", el.c_str ());
9617 }
9618
9619 /* In the extended protocol we want to be able to do things like
9620    "run" and have them basically work as expected.  So we need
9621    a special create_inferior function.  We support changing the
9622    executable file and the command line arguments, but not the
9623    environment.  */
9624
9625 static void
9626 extended_remote_create_inferior (struct target_ops *ops,
9627                                  const char *exec_file,
9628                                  const std::string &args,
9629                                  char **env, int from_tty)
9630 {
9631   int run_worked;
9632   char *stop_reply;
9633   struct remote_state *rs = get_remote_state ();
9634   const char *remote_exec_file = get_remote_exec_file ();
9635
9636   /* If running asynchronously, register the target file descriptor
9637      with the event loop.  */
9638   if (target_can_async_p ())
9639     target_async (1);
9640
9641   /* Disable address space randomization if requested (and supported).  */
9642   if (extended_remote_supports_disable_randomization (ops))
9643     extended_remote_disable_randomization (disable_randomization);
9644
9645   /* If startup-with-shell is on, we inform gdbserver to start the
9646      remote inferior using a shell.  */
9647   if (packet_support (PACKET_QStartupWithShell) != PACKET_DISABLE)
9648     {
9649       xsnprintf (rs->buf, get_remote_packet_size (),
9650                  "QStartupWithShell:%d", startup_with_shell ? 1 : 0);
9651       putpkt (rs->buf);
9652       getpkt (&rs->buf, &rs->buf_size, 0);
9653       if (strcmp (rs->buf, "OK") != 0)
9654         error (_("\
9655 Remote replied unexpectedly while setting startup-with-shell: %s"),
9656                rs->buf);
9657     }
9658
9659   extended_remote_environment_support (rs);
9660
9661   /* Now restart the remote server.  */
9662   run_worked = extended_remote_run (args) != -1;
9663   if (!run_worked)
9664     {
9665       /* vRun was not supported.  Fail if we need it to do what the
9666          user requested.  */
9667       if (remote_exec_file[0])
9668         error (_("Remote target does not support \"set remote exec-file\""));
9669       if (!args.empty ())
9670         error (_("Remote target does not support \"set args\" or run <ARGS>"));
9671
9672       /* Fall back to "R".  */
9673       extended_remote_restart ();
9674     }
9675
9676   if (!have_inferiors ())
9677     {
9678       /* Clean up from the last time we ran, before we mark the target
9679          running again.  This will mark breakpoints uninserted, and
9680          get_offsets may insert breakpoints.  */
9681       init_thread_list ();
9682       init_wait_for_inferior ();
9683     }
9684
9685   /* vRun's success return is a stop reply.  */
9686   stop_reply = run_worked ? rs->buf : NULL;
9687   add_current_inferior_and_thread (stop_reply);
9688
9689   /* Get updated offsets, if the stub uses qOffsets.  */
9690   get_offsets ();
9691 }
9692 \f
9693
9694 /* Given a location's target info BP_TGT and the packet buffer BUF,  output
9695    the list of conditions (in agent expression bytecode format), if any, the
9696    target needs to evaluate.  The output is placed into the packet buffer
9697    started from BUF and ended at BUF_END.  */
9698
9699 static int
9700 remote_add_target_side_condition (struct gdbarch *gdbarch,
9701                                   struct bp_target_info *bp_tgt, char *buf,
9702                                   char *buf_end)
9703 {
9704   if (bp_tgt->conditions.empty ())
9705     return 0;
9706
9707   buf += strlen (buf);
9708   xsnprintf (buf, buf_end - buf, "%s", ";");
9709   buf++;
9710
9711   /* Send conditions to the target.  */
9712   for (agent_expr *aexpr : bp_tgt->conditions)
9713     {
9714       xsnprintf (buf, buf_end - buf, "X%x,", aexpr->len);
9715       buf += strlen (buf);
9716       for (int i = 0; i < aexpr->len; ++i)
9717         buf = pack_hex_byte (buf, aexpr->buf[i]);
9718       *buf = '\0';
9719     }
9720   return 0;
9721 }
9722
9723 static void
9724 remote_add_target_side_commands (struct gdbarch *gdbarch,
9725                                  struct bp_target_info *bp_tgt, char *buf)
9726 {
9727   if (bp_tgt->tcommands.empty ())
9728     return;
9729
9730   buf += strlen (buf);
9731
9732   sprintf (buf, ";cmds:%x,", bp_tgt->persist);
9733   buf += strlen (buf);
9734
9735   /* Concatenate all the agent expressions that are commands into the
9736      cmds parameter.  */
9737   for (agent_expr *aexpr : bp_tgt->tcommands)
9738     {
9739       sprintf (buf, "X%x,", aexpr->len);
9740       buf += strlen (buf);
9741       for (int i = 0; i < aexpr->len; ++i)
9742         buf = pack_hex_byte (buf, aexpr->buf[i]);
9743       *buf = '\0';
9744     }
9745 }
9746
9747 /* Insert a breakpoint.  On targets that have software breakpoint
9748    support, we ask the remote target to do the work; on targets
9749    which don't, we insert a traditional memory breakpoint.  */
9750
9751 static int
9752 remote_insert_breakpoint (struct target_ops *ops,
9753                           struct gdbarch *gdbarch,
9754                           struct bp_target_info *bp_tgt)
9755 {
9756   /* Try the "Z" s/w breakpoint packet if it is not already disabled.
9757      If it succeeds, then set the support to PACKET_ENABLE.  If it
9758      fails, and the user has explicitly requested the Z support then
9759      report an error, otherwise, mark it disabled and go on.  */
9760
9761   if (packet_support (PACKET_Z0) != PACKET_DISABLE)
9762     {
9763       CORE_ADDR addr = bp_tgt->reqstd_address;
9764       struct remote_state *rs;
9765       char *p, *endbuf;
9766       int bpsize;
9767
9768       /* Make sure the remote is pointing at the right process, if
9769          necessary.  */
9770       if (!gdbarch_has_global_breakpoints (target_gdbarch ()))
9771         set_general_process ();
9772
9773       rs = get_remote_state ();
9774       p = rs->buf;
9775       endbuf = rs->buf + get_remote_packet_size ();
9776
9777       *(p++) = 'Z';
9778       *(p++) = '0';
9779       *(p++) = ',';
9780       addr = (ULONGEST) remote_address_masked (addr);
9781       p += hexnumstr (p, addr);
9782       xsnprintf (p, endbuf - p, ",%d", bp_tgt->kind);
9783
9784       if (remote_supports_cond_breakpoints (ops))
9785         remote_add_target_side_condition (gdbarch, bp_tgt, p, endbuf);
9786
9787       if (remote_can_run_breakpoint_commands (ops))
9788         remote_add_target_side_commands (gdbarch, bp_tgt, p);
9789
9790       putpkt (rs->buf);
9791       getpkt (&rs->buf, &rs->buf_size, 0);
9792
9793       switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_Z0]))
9794         {
9795         case PACKET_ERROR:
9796           return -1;
9797         case PACKET_OK:
9798           return 0;
9799         case PACKET_UNKNOWN:
9800           break;
9801         }
9802     }
9803
9804   /* If this breakpoint has target-side commands but this stub doesn't
9805      support Z0 packets, throw error.  */
9806   if (!bp_tgt->tcommands.empty ())
9807     throw_error (NOT_SUPPORTED_ERROR, _("\
9808 Target doesn't support breakpoints that have target side commands."));
9809
9810   return memory_insert_breakpoint (ops, gdbarch, bp_tgt);
9811 }
9812
9813 static int
9814 remote_remove_breakpoint (struct target_ops *ops,
9815                           struct gdbarch *gdbarch,
9816                           struct bp_target_info *bp_tgt,
9817                           enum remove_bp_reason reason)
9818 {
9819   CORE_ADDR addr = bp_tgt->placed_address;
9820   struct remote_state *rs = get_remote_state ();
9821
9822   if (packet_support (PACKET_Z0) != PACKET_DISABLE)
9823     {
9824       char *p = rs->buf;
9825       char *endbuf = rs->buf + get_remote_packet_size ();
9826
9827       /* Make sure the remote is pointing at the right process, if
9828          necessary.  */
9829       if (!gdbarch_has_global_breakpoints (target_gdbarch ()))
9830         set_general_process ();
9831
9832       *(p++) = 'z';
9833       *(p++) = '0';
9834       *(p++) = ',';
9835
9836       addr = (ULONGEST) remote_address_masked (bp_tgt->placed_address);
9837       p += hexnumstr (p, addr);
9838       xsnprintf (p, endbuf - p, ",%d", bp_tgt->kind);
9839
9840       putpkt (rs->buf);
9841       getpkt (&rs->buf, &rs->buf_size, 0);
9842
9843       return (rs->buf[0] == 'E');
9844     }
9845
9846   return memory_remove_breakpoint (ops, gdbarch, bp_tgt, reason);
9847 }
9848
9849 static enum Z_packet_type
9850 watchpoint_to_Z_packet (int type)
9851 {
9852   switch (type)
9853     {
9854     case hw_write:
9855       return Z_PACKET_WRITE_WP;
9856       break;
9857     case hw_read:
9858       return Z_PACKET_READ_WP;
9859       break;
9860     case hw_access:
9861       return Z_PACKET_ACCESS_WP;
9862       break;
9863     default:
9864       internal_error (__FILE__, __LINE__,
9865                       _("hw_bp_to_z: bad watchpoint type %d"), type);
9866     }
9867 }
9868
9869 static int
9870 remote_insert_watchpoint (struct target_ops *self, CORE_ADDR addr, int len,
9871                           enum target_hw_bp_type type, struct expression *cond)
9872 {
9873   struct remote_state *rs = get_remote_state ();
9874   char *endbuf = rs->buf + get_remote_packet_size ();
9875   char *p;
9876   enum Z_packet_type packet = watchpoint_to_Z_packet (type);
9877
9878   if (packet_support (PACKET_Z0 + packet) == PACKET_DISABLE)
9879     return 1;
9880
9881   /* Make sure the remote is pointing at the right process, if
9882      necessary.  */
9883   if (!gdbarch_has_global_breakpoints (target_gdbarch ()))
9884     set_general_process ();
9885
9886   xsnprintf (rs->buf, endbuf - rs->buf, "Z%x,", packet);
9887   p = strchr (rs->buf, '\0');
9888   addr = remote_address_masked (addr);
9889   p += hexnumstr (p, (ULONGEST) addr);
9890   xsnprintf (p, endbuf - p, ",%x", len);
9891
9892   putpkt (rs->buf);
9893   getpkt (&rs->buf, &rs->buf_size, 0);
9894
9895   switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_Z0 + packet]))
9896     {
9897     case PACKET_ERROR:
9898       return -1;
9899     case PACKET_UNKNOWN:
9900       return 1;
9901     case PACKET_OK:
9902       return 0;
9903     }
9904   internal_error (__FILE__, __LINE__,
9905                   _("remote_insert_watchpoint: reached end of function"));
9906 }
9907
9908 static int
9909 remote_watchpoint_addr_within_range (struct target_ops *target, CORE_ADDR addr,
9910                                      CORE_ADDR start, int length)
9911 {
9912   CORE_ADDR diff = remote_address_masked (addr - start);
9913
9914   return diff < length;
9915 }
9916
9917
9918 static int
9919 remote_remove_watchpoint (struct target_ops *self, CORE_ADDR addr, int len,
9920                           enum target_hw_bp_type type, struct expression *cond)
9921 {
9922   struct remote_state *rs = get_remote_state ();
9923   char *endbuf = rs->buf + get_remote_packet_size ();
9924   char *p;
9925   enum Z_packet_type packet = watchpoint_to_Z_packet (type);
9926
9927   if (packet_support (PACKET_Z0 + packet) == PACKET_DISABLE)
9928     return -1;
9929
9930   /* Make sure the remote is pointing at the right process, if
9931      necessary.  */
9932   if (!gdbarch_has_global_breakpoints (target_gdbarch ()))
9933     set_general_process ();
9934
9935   xsnprintf (rs->buf, endbuf - rs->buf, "z%x,", packet);
9936   p = strchr (rs->buf, '\0');
9937   addr = remote_address_masked (addr);
9938   p += hexnumstr (p, (ULONGEST) addr);
9939   xsnprintf (p, endbuf - p, ",%x", len);
9940   putpkt (rs->buf);
9941   getpkt (&rs->buf, &rs->buf_size, 0);
9942
9943   switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_Z0 + packet]))
9944     {
9945     case PACKET_ERROR:
9946     case PACKET_UNKNOWN:
9947       return -1;
9948     case PACKET_OK:
9949       return 0;
9950     }
9951   internal_error (__FILE__, __LINE__,
9952                   _("remote_remove_watchpoint: reached end of function"));
9953 }
9954
9955
9956 int remote_hw_watchpoint_limit = -1;
9957 int remote_hw_watchpoint_length_limit = -1;
9958 int remote_hw_breakpoint_limit = -1;
9959
9960 static int
9961 remote_region_ok_for_hw_watchpoint (struct target_ops *self,
9962                                     CORE_ADDR addr, int len)
9963 {
9964   if (remote_hw_watchpoint_length_limit == 0)
9965     return 0;
9966   else if (remote_hw_watchpoint_length_limit < 0)
9967     return 1;
9968   else if (len <= remote_hw_watchpoint_length_limit)
9969     return 1;
9970   else
9971     return 0;
9972 }
9973
9974 static int
9975 remote_check_watch_resources (struct target_ops *self,
9976                               enum bptype type, int cnt, int ot)
9977 {
9978   if (type == bp_hardware_breakpoint)
9979     {
9980       if (remote_hw_breakpoint_limit == 0)
9981         return 0;
9982       else if (remote_hw_breakpoint_limit < 0)
9983         return 1;
9984       else if (cnt <= remote_hw_breakpoint_limit)
9985         return 1;
9986     }
9987   else
9988     {
9989       if (remote_hw_watchpoint_limit == 0)
9990         return 0;
9991       else if (remote_hw_watchpoint_limit < 0)
9992         return 1;
9993       else if (ot)
9994         return -1;
9995       else if (cnt <= remote_hw_watchpoint_limit)
9996         return 1;
9997     }
9998   return -1;
9999 }
10000
10001 /* The to_stopped_by_sw_breakpoint method of target remote.  */
10002
10003 static int
10004 remote_stopped_by_sw_breakpoint (struct target_ops *ops)
10005 {
10006   struct thread_info *thread = inferior_thread ();
10007
10008   return (thread->priv != NULL
10009           && thread->priv->stop_reason == TARGET_STOPPED_BY_SW_BREAKPOINT);
10010 }
10011
10012 /* The to_supports_stopped_by_sw_breakpoint method of target
10013    remote.  */
10014
10015 static int
10016 remote_supports_stopped_by_sw_breakpoint (struct target_ops *ops)
10017 {
10018   return (packet_support (PACKET_swbreak_feature) == PACKET_ENABLE);
10019 }
10020
10021 /* The to_stopped_by_hw_breakpoint method of target remote.  */
10022
10023 static int
10024 remote_stopped_by_hw_breakpoint (struct target_ops *ops)
10025 {
10026   struct thread_info *thread = inferior_thread ();
10027
10028   return (thread->priv != NULL
10029           && thread->priv->stop_reason == TARGET_STOPPED_BY_HW_BREAKPOINT);
10030 }
10031
10032 /* The to_supports_stopped_by_hw_breakpoint method of target
10033    remote.  */
10034
10035 static int
10036 remote_supports_stopped_by_hw_breakpoint (struct target_ops *ops)
10037 {
10038   return (packet_support (PACKET_hwbreak_feature) == PACKET_ENABLE);
10039 }
10040
10041 static int
10042 remote_stopped_by_watchpoint (struct target_ops *ops)
10043 {
10044   struct thread_info *thread = inferior_thread ();
10045
10046   return (thread->priv != NULL
10047           && thread->priv->stop_reason == TARGET_STOPPED_BY_WATCHPOINT);
10048 }
10049
10050 static int
10051 remote_stopped_data_address (struct target_ops *target, CORE_ADDR *addr_p)
10052 {
10053   struct thread_info *thread = inferior_thread ();
10054
10055   if (thread->priv != NULL
10056       && thread->priv->stop_reason == TARGET_STOPPED_BY_WATCHPOINT)
10057     {
10058       *addr_p = thread->priv->watch_data_address;
10059       return 1;
10060     }
10061
10062   return 0;
10063 }
10064
10065
10066 static int
10067 remote_insert_hw_breakpoint (struct target_ops *self, struct gdbarch *gdbarch,
10068                              struct bp_target_info *bp_tgt)
10069 {
10070   CORE_ADDR addr = bp_tgt->reqstd_address;
10071   struct remote_state *rs;
10072   char *p, *endbuf;
10073   char *message;
10074
10075   if (packet_support (PACKET_Z1) == PACKET_DISABLE)
10076     return -1;
10077
10078   /* Make sure the remote is pointing at the right process, if
10079      necessary.  */
10080   if (!gdbarch_has_global_breakpoints (target_gdbarch ()))
10081     set_general_process ();
10082
10083   rs = get_remote_state ();
10084   p = rs->buf;
10085   endbuf = rs->buf + get_remote_packet_size ();
10086
10087   *(p++) = 'Z';
10088   *(p++) = '1';
10089   *(p++) = ',';
10090
10091   addr = remote_address_masked (addr);
10092   p += hexnumstr (p, (ULONGEST) addr);
10093   xsnprintf (p, endbuf - p, ",%x", bp_tgt->kind);
10094
10095   if (remote_supports_cond_breakpoints (self))
10096     remote_add_target_side_condition (gdbarch, bp_tgt, p, endbuf);
10097
10098   if (remote_can_run_breakpoint_commands (self))
10099     remote_add_target_side_commands (gdbarch, bp_tgt, p);
10100
10101   putpkt (rs->buf);
10102   getpkt (&rs->buf, &rs->buf_size, 0);
10103
10104   switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_Z1]))
10105     {
10106     case PACKET_ERROR:
10107       if (rs->buf[1] == '.')
10108         {
10109           message = strchr (rs->buf + 2, '.');
10110           if (message)
10111             error (_("Remote failure reply: %s"), message + 1);
10112         }
10113       return -1;
10114     case PACKET_UNKNOWN:
10115       return -1;
10116     case PACKET_OK:
10117       return 0;
10118     }
10119   internal_error (__FILE__, __LINE__,
10120                   _("remote_insert_hw_breakpoint: reached end of function"));
10121 }
10122
10123
10124 static int
10125 remote_remove_hw_breakpoint (struct target_ops *self, struct gdbarch *gdbarch,
10126                              struct bp_target_info *bp_tgt)
10127 {
10128   CORE_ADDR addr;
10129   struct remote_state *rs = get_remote_state ();
10130   char *p = rs->buf;
10131   char *endbuf = rs->buf + get_remote_packet_size ();
10132
10133   if (packet_support (PACKET_Z1) == PACKET_DISABLE)
10134     return -1;
10135
10136   /* Make sure the remote is pointing at the right process, if
10137      necessary.  */
10138   if (!gdbarch_has_global_breakpoints (target_gdbarch ()))
10139     set_general_process ();
10140
10141   *(p++) = 'z';
10142   *(p++) = '1';
10143   *(p++) = ',';
10144
10145   addr = remote_address_masked (bp_tgt->placed_address);
10146   p += hexnumstr (p, (ULONGEST) addr);
10147   xsnprintf (p, endbuf  - p, ",%x", bp_tgt->kind);
10148
10149   putpkt (rs->buf);
10150   getpkt (&rs->buf, &rs->buf_size, 0);
10151
10152   switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_Z1]))
10153     {
10154     case PACKET_ERROR:
10155     case PACKET_UNKNOWN:
10156       return -1;
10157     case PACKET_OK:
10158       return 0;
10159     }
10160   internal_error (__FILE__, __LINE__,
10161                   _("remote_remove_hw_breakpoint: reached end of function"));
10162 }
10163
10164 /* Verify memory using the "qCRC:" request.  */
10165
10166 static int
10167 remote_verify_memory (struct target_ops *ops,
10168                       const gdb_byte *data, CORE_ADDR lma, ULONGEST size)
10169 {
10170   struct remote_state *rs = get_remote_state ();
10171   unsigned long host_crc, target_crc;
10172   char *tmp;
10173
10174   /* It doesn't make sense to use qCRC if the remote target is
10175      connected but not running.  */
10176   if (target_has_execution && packet_support (PACKET_qCRC) != PACKET_DISABLE)
10177     {
10178       enum packet_result result;
10179
10180       /* Make sure the remote is pointing at the right process.  */
10181       set_general_process ();
10182
10183       /* FIXME: assumes lma can fit into long.  */
10184       xsnprintf (rs->buf, get_remote_packet_size (), "qCRC:%lx,%lx",
10185                  (long) lma, (long) size);
10186       putpkt (rs->buf);
10187
10188       /* Be clever; compute the host_crc before waiting for target
10189          reply.  */
10190       host_crc = xcrc32 (data, size, 0xffffffff);
10191
10192       getpkt (&rs->buf, &rs->buf_size, 0);
10193
10194       result = packet_ok (rs->buf,
10195                           &remote_protocol_packets[PACKET_qCRC]);
10196       if (result == PACKET_ERROR)
10197         return -1;
10198       else if (result == PACKET_OK)
10199         {
10200           for (target_crc = 0, tmp = &rs->buf[1]; *tmp; tmp++)
10201             target_crc = target_crc * 16 + fromhex (*tmp);
10202
10203           return (host_crc == target_crc);
10204         }
10205     }
10206
10207   return simple_verify_memory (ops, data, lma, size);
10208 }
10209
10210 /* compare-sections command
10211
10212    With no arguments, compares each loadable section in the exec bfd
10213    with the same memory range on the target, and reports mismatches.
10214    Useful for verifying the image on the target against the exec file.  */
10215
10216 static void
10217 compare_sections_command (char *args, int from_tty)
10218 {
10219   asection *s;
10220   struct cleanup *old_chain;
10221   gdb_byte *sectdata;
10222   const char *sectname;
10223   bfd_size_type size;
10224   bfd_vma lma;
10225   int matched = 0;
10226   int mismatched = 0;
10227   int res;
10228   int read_only = 0;
10229
10230   if (!exec_bfd)
10231     error (_("command cannot be used without an exec file"));
10232
10233   /* Make sure the remote is pointing at the right process.  */
10234   set_general_process ();
10235
10236   if (args != NULL && strcmp (args, "-r") == 0)
10237     {
10238       read_only = 1;
10239       args = NULL;
10240     }
10241
10242   for (s = exec_bfd->sections; s; s = s->next)
10243     {
10244       if (!(s->flags & SEC_LOAD))
10245         continue;               /* Skip non-loadable section.  */
10246
10247       if (read_only && (s->flags & SEC_READONLY) == 0)
10248         continue;               /* Skip writeable sections */
10249
10250       size = bfd_get_section_size (s);
10251       if (size == 0)
10252         continue;               /* Skip zero-length section.  */
10253
10254       sectname = bfd_get_section_name (exec_bfd, s);
10255       if (args && strcmp (args, sectname) != 0)
10256         continue;               /* Not the section selected by user.  */
10257
10258       matched = 1;              /* Do this section.  */
10259       lma = s->lma;
10260
10261       sectdata = (gdb_byte *) xmalloc (size);
10262       old_chain = make_cleanup (xfree, sectdata);
10263       bfd_get_section_contents (exec_bfd, s, sectdata, 0, size);
10264
10265       res = target_verify_memory (sectdata, lma, size);
10266
10267       if (res == -1)
10268         error (_("target memory fault, section %s, range %s -- %s"), sectname,
10269                paddress (target_gdbarch (), lma),
10270                paddress (target_gdbarch (), lma + size));
10271
10272       printf_filtered ("Section %s, range %s -- %s: ", sectname,
10273                        paddress (target_gdbarch (), lma),
10274                        paddress (target_gdbarch (), lma + size));
10275       if (res)
10276         printf_filtered ("matched.\n");
10277       else
10278         {
10279           printf_filtered ("MIS-MATCHED!\n");
10280           mismatched++;
10281         }
10282
10283       do_cleanups (old_chain);
10284     }
10285   if (mismatched > 0)
10286     warning (_("One or more sections of the target image does not match\n\
10287 the loaded file\n"));
10288   if (args && !matched)
10289     printf_filtered (_("No loaded section named '%s'.\n"), args);
10290 }
10291
10292 /* Write LEN bytes from WRITEBUF into OBJECT_NAME/ANNEX at OFFSET
10293    into remote target.  The number of bytes written to the remote
10294    target is returned, or -1 for error.  */
10295
10296 static enum target_xfer_status
10297 remote_write_qxfer (struct target_ops *ops, const char *object_name,
10298                     const char *annex, const gdb_byte *writebuf, 
10299                     ULONGEST offset, LONGEST len, ULONGEST *xfered_len,
10300                     struct packet_config *packet)
10301 {
10302   int i, buf_len;
10303   ULONGEST n;
10304   struct remote_state *rs = get_remote_state ();
10305   int max_size = get_memory_write_packet_size (); 
10306
10307   if (packet->support == PACKET_DISABLE)
10308     return TARGET_XFER_E_IO;
10309
10310   /* Insert header.  */
10311   i = snprintf (rs->buf, max_size, 
10312                 "qXfer:%s:write:%s:%s:",
10313                 object_name, annex ? annex : "",
10314                 phex_nz (offset, sizeof offset));
10315   max_size -= (i + 1);
10316
10317   /* Escape as much data as fits into rs->buf.  */
10318   buf_len = remote_escape_output 
10319     (writebuf, len, 1, (gdb_byte *) rs->buf + i, &max_size, max_size);
10320
10321   if (putpkt_binary (rs->buf, i + buf_len) < 0
10322       || getpkt_sane (&rs->buf, &rs->buf_size, 0) < 0
10323       || packet_ok (rs->buf, packet) != PACKET_OK)
10324     return TARGET_XFER_E_IO;
10325
10326   unpack_varlen_hex (rs->buf, &n);
10327
10328   *xfered_len = n;
10329   return TARGET_XFER_OK;
10330 }
10331
10332 /* Read OBJECT_NAME/ANNEX from the remote target using a qXfer packet.
10333    Data at OFFSET, of up to LEN bytes, is read into READBUF; the
10334    number of bytes read is returned, or 0 for EOF, or -1 for error.
10335    The number of bytes read may be less than LEN without indicating an
10336    EOF.  PACKET is checked and updated to indicate whether the remote
10337    target supports this object.  */
10338
10339 static enum target_xfer_status
10340 remote_read_qxfer (struct target_ops *ops, const char *object_name,
10341                    const char *annex,
10342                    gdb_byte *readbuf, ULONGEST offset, LONGEST len,
10343                    ULONGEST *xfered_len,
10344                    struct packet_config *packet)
10345 {
10346   struct remote_state *rs = get_remote_state ();
10347   LONGEST i, n, packet_len;
10348
10349   if (packet->support == PACKET_DISABLE)
10350     return TARGET_XFER_E_IO;
10351
10352   /* Check whether we've cached an end-of-object packet that matches
10353      this request.  */
10354   if (rs->finished_object)
10355     {
10356       if (strcmp (object_name, rs->finished_object) == 0
10357           && strcmp (annex ? annex : "", rs->finished_annex) == 0
10358           && offset == rs->finished_offset)
10359         return TARGET_XFER_EOF;
10360
10361
10362       /* Otherwise, we're now reading something different.  Discard
10363          the cache.  */
10364       xfree (rs->finished_object);
10365       xfree (rs->finished_annex);
10366       rs->finished_object = NULL;
10367       rs->finished_annex = NULL;
10368     }
10369
10370   /* Request only enough to fit in a single packet.  The actual data
10371      may not, since we don't know how much of it will need to be escaped;
10372      the target is free to respond with slightly less data.  We subtract
10373      five to account for the response type and the protocol frame.  */
10374   n = std::min<LONGEST> (get_remote_packet_size () - 5, len);
10375   snprintf (rs->buf, get_remote_packet_size () - 4, "qXfer:%s:read:%s:%s,%s",
10376             object_name, annex ? annex : "",
10377             phex_nz (offset, sizeof offset),
10378             phex_nz (n, sizeof n));
10379   i = putpkt (rs->buf);
10380   if (i < 0)
10381     return TARGET_XFER_E_IO;
10382
10383   rs->buf[0] = '\0';
10384   packet_len = getpkt_sane (&rs->buf, &rs->buf_size, 0);
10385   if (packet_len < 0 || packet_ok (rs->buf, packet) != PACKET_OK)
10386     return TARGET_XFER_E_IO;
10387
10388   if (rs->buf[0] != 'l' && rs->buf[0] != 'm')
10389     error (_("Unknown remote qXfer reply: %s"), rs->buf);
10390
10391   /* 'm' means there is (or at least might be) more data after this
10392      batch.  That does not make sense unless there's at least one byte
10393      of data in this reply.  */
10394   if (rs->buf[0] == 'm' && packet_len == 1)
10395     error (_("Remote qXfer reply contained no data."));
10396
10397   /* Got some data.  */
10398   i = remote_unescape_input ((gdb_byte *) rs->buf + 1,
10399                              packet_len - 1, readbuf, n);
10400
10401   /* 'l' is an EOF marker, possibly including a final block of data,
10402      or possibly empty.  If we have the final block of a non-empty
10403      object, record this fact to bypass a subsequent partial read.  */
10404   if (rs->buf[0] == 'l' && offset + i > 0)
10405     {
10406       rs->finished_object = xstrdup (object_name);
10407       rs->finished_annex = xstrdup (annex ? annex : "");
10408       rs->finished_offset = offset + i;
10409     }
10410
10411   if (i == 0)
10412     return TARGET_XFER_EOF;
10413   else
10414     {
10415       *xfered_len = i;
10416       return TARGET_XFER_OK;
10417     }
10418 }
10419
10420 static enum target_xfer_status
10421 remote_xfer_partial (struct target_ops *ops, enum target_object object,
10422                      const char *annex, gdb_byte *readbuf,
10423                      const gdb_byte *writebuf, ULONGEST offset, ULONGEST len,
10424                      ULONGEST *xfered_len)
10425 {
10426   struct remote_state *rs;
10427   int i;
10428   char *p2;
10429   char query_type;
10430   int unit_size = gdbarch_addressable_memory_unit_size (target_gdbarch ());
10431
10432   set_remote_traceframe ();
10433   set_general_thread (inferior_ptid);
10434
10435   rs = get_remote_state ();
10436
10437   /* Handle memory using the standard memory routines.  */
10438   if (object == TARGET_OBJECT_MEMORY)
10439     {
10440       /* If the remote target is connected but not running, we should
10441          pass this request down to a lower stratum (e.g. the executable
10442          file).  */
10443       if (!target_has_execution)
10444         return TARGET_XFER_EOF;
10445
10446       if (writebuf != NULL)
10447         return remote_write_bytes (offset, writebuf, len, unit_size,
10448                                    xfered_len);
10449       else
10450         return remote_read_bytes (ops, offset, readbuf, len, unit_size,
10451                                   xfered_len);
10452     }
10453
10454   /* Handle SPU memory using qxfer packets.  */
10455   if (object == TARGET_OBJECT_SPU)
10456     {
10457       if (readbuf)
10458         return remote_read_qxfer (ops, "spu", annex, readbuf, offset, len,
10459                                   xfered_len, &remote_protocol_packets
10460                                   [PACKET_qXfer_spu_read]);
10461       else
10462         return remote_write_qxfer (ops, "spu", annex, writebuf, offset, len,
10463                                    xfered_len, &remote_protocol_packets
10464                                    [PACKET_qXfer_spu_write]);
10465     }
10466
10467   /* Handle extra signal info using qxfer packets.  */
10468   if (object == TARGET_OBJECT_SIGNAL_INFO)
10469     {
10470       if (readbuf)
10471         return remote_read_qxfer (ops, "siginfo", annex, readbuf, offset, len,
10472                                   xfered_len, &remote_protocol_packets
10473                                   [PACKET_qXfer_siginfo_read]);
10474       else
10475         return remote_write_qxfer (ops, "siginfo", annex,
10476                                    writebuf, offset, len, xfered_len,
10477                                    &remote_protocol_packets
10478                                    [PACKET_qXfer_siginfo_write]);
10479     }
10480
10481   if (object == TARGET_OBJECT_STATIC_TRACE_DATA)
10482     {
10483       if (readbuf)
10484         return remote_read_qxfer (ops, "statictrace", annex,
10485                                   readbuf, offset, len, xfered_len,
10486                                   &remote_protocol_packets
10487                                   [PACKET_qXfer_statictrace_read]);
10488       else
10489         return TARGET_XFER_E_IO;
10490     }
10491
10492   /* Only handle flash writes.  */
10493   if (writebuf != NULL)
10494     {
10495       switch (object)
10496         {
10497         case TARGET_OBJECT_FLASH:
10498           return remote_flash_write (ops, offset, len, xfered_len,
10499                                      writebuf);
10500
10501         default:
10502           return TARGET_XFER_E_IO;
10503         }
10504     }
10505
10506   /* Map pre-existing objects onto letters.  DO NOT do this for new
10507      objects!!!  Instead specify new query packets.  */
10508   switch (object)
10509     {
10510     case TARGET_OBJECT_AVR:
10511       query_type = 'R';
10512       break;
10513
10514     case TARGET_OBJECT_AUXV:
10515       gdb_assert (annex == NULL);
10516       return remote_read_qxfer (ops, "auxv", annex, readbuf, offset, len,
10517                                 xfered_len,
10518                                 &remote_protocol_packets[PACKET_qXfer_auxv]);
10519
10520     case TARGET_OBJECT_AVAILABLE_FEATURES:
10521       return remote_read_qxfer
10522         (ops, "features", annex, readbuf, offset, len, xfered_len,
10523          &remote_protocol_packets[PACKET_qXfer_features]);
10524
10525     case TARGET_OBJECT_LIBRARIES:
10526       return remote_read_qxfer
10527         (ops, "libraries", annex, readbuf, offset, len, xfered_len,
10528          &remote_protocol_packets[PACKET_qXfer_libraries]);
10529
10530     case TARGET_OBJECT_LIBRARIES_SVR4:
10531       return remote_read_qxfer
10532         (ops, "libraries-svr4", annex, readbuf, offset, len, xfered_len,
10533          &remote_protocol_packets[PACKET_qXfer_libraries_svr4]);
10534
10535     case TARGET_OBJECT_MEMORY_MAP:
10536       gdb_assert (annex == NULL);
10537       return remote_read_qxfer (ops, "memory-map", annex, readbuf, offset, len,
10538                                  xfered_len,
10539                                 &remote_protocol_packets[PACKET_qXfer_memory_map]);
10540
10541     case TARGET_OBJECT_OSDATA:
10542       /* Should only get here if we're connected.  */
10543       gdb_assert (rs->remote_desc);
10544       return remote_read_qxfer
10545         (ops, "osdata", annex, readbuf, offset, len, xfered_len,
10546         &remote_protocol_packets[PACKET_qXfer_osdata]);
10547
10548     case TARGET_OBJECT_THREADS:
10549       gdb_assert (annex == NULL);
10550       return remote_read_qxfer (ops, "threads", annex, readbuf, offset, len,
10551                                 xfered_len,
10552                                 &remote_protocol_packets[PACKET_qXfer_threads]);
10553
10554     case TARGET_OBJECT_TRACEFRAME_INFO:
10555       gdb_assert (annex == NULL);
10556       return remote_read_qxfer
10557         (ops, "traceframe-info", annex, readbuf, offset, len, xfered_len,
10558          &remote_protocol_packets[PACKET_qXfer_traceframe_info]);
10559
10560     case TARGET_OBJECT_FDPIC:
10561       return remote_read_qxfer (ops, "fdpic", annex, readbuf, offset, len,
10562                                 xfered_len,
10563                                 &remote_protocol_packets[PACKET_qXfer_fdpic]);
10564
10565     case TARGET_OBJECT_OPENVMS_UIB:
10566       return remote_read_qxfer (ops, "uib", annex, readbuf, offset, len,
10567                                 xfered_len,
10568                                 &remote_protocol_packets[PACKET_qXfer_uib]);
10569
10570     case TARGET_OBJECT_BTRACE:
10571       return remote_read_qxfer (ops, "btrace", annex, readbuf, offset, len,
10572                                 xfered_len,
10573         &remote_protocol_packets[PACKET_qXfer_btrace]);
10574
10575     case TARGET_OBJECT_BTRACE_CONF:
10576       return remote_read_qxfer (ops, "btrace-conf", annex, readbuf, offset,
10577                                 len, xfered_len,
10578         &remote_protocol_packets[PACKET_qXfer_btrace_conf]);
10579
10580     case TARGET_OBJECT_EXEC_FILE:
10581       return remote_read_qxfer (ops, "exec-file", annex, readbuf, offset,
10582                                 len, xfered_len,
10583         &remote_protocol_packets[PACKET_qXfer_exec_file]);
10584
10585     default:
10586       return TARGET_XFER_E_IO;
10587     }
10588
10589   /* Minimum outbuf size is get_remote_packet_size ().  If LEN is not
10590      large enough let the caller deal with it.  */
10591   if (len < get_remote_packet_size ())
10592     return TARGET_XFER_E_IO;
10593   len = get_remote_packet_size ();
10594
10595   /* Except for querying the minimum buffer size, target must be open.  */
10596   if (!rs->remote_desc)
10597     error (_("remote query is only available after target open"));
10598
10599   gdb_assert (annex != NULL);
10600   gdb_assert (readbuf != NULL);
10601
10602   p2 = rs->buf;
10603   *p2++ = 'q';
10604   *p2++ = query_type;
10605
10606   /* We used one buffer char for the remote protocol q command and
10607      another for the query type.  As the remote protocol encapsulation
10608      uses 4 chars plus one extra in case we are debugging
10609      (remote_debug), we have PBUFZIZ - 7 left to pack the query
10610      string.  */
10611   i = 0;
10612   while (annex[i] && (i < (get_remote_packet_size () - 8)))
10613     {
10614       /* Bad caller may have sent forbidden characters.  */
10615       gdb_assert (isprint (annex[i]) && annex[i] != '$' && annex[i] != '#');
10616       *p2++ = annex[i];
10617       i++;
10618     }
10619   *p2 = '\0';
10620   gdb_assert (annex[i] == '\0');
10621
10622   i = putpkt (rs->buf);
10623   if (i < 0)
10624     return TARGET_XFER_E_IO;
10625
10626   getpkt (&rs->buf, &rs->buf_size, 0);
10627   strcpy ((char *) readbuf, rs->buf);
10628
10629   *xfered_len = strlen ((char *) readbuf);
10630   return TARGET_XFER_OK;
10631 }
10632
10633 /* Implementation of to_get_memory_xfer_limit.  */
10634
10635 static ULONGEST
10636 remote_get_memory_xfer_limit (struct target_ops *ops)
10637 {
10638   return get_memory_write_packet_size ();
10639 }
10640
10641 static int
10642 remote_search_memory (struct target_ops* ops,
10643                       CORE_ADDR start_addr, ULONGEST search_space_len,
10644                       const gdb_byte *pattern, ULONGEST pattern_len,
10645                       CORE_ADDR *found_addrp)
10646 {
10647   int addr_size = gdbarch_addr_bit (target_gdbarch ()) / 8;
10648   struct remote_state *rs = get_remote_state ();
10649   int max_size = get_memory_write_packet_size ();
10650   struct packet_config *packet =
10651     &remote_protocol_packets[PACKET_qSearch_memory];
10652   /* Number of packet bytes used to encode the pattern;
10653      this could be more than PATTERN_LEN due to escape characters.  */
10654   int escaped_pattern_len;
10655   /* Amount of pattern that was encodable in the packet.  */
10656   int used_pattern_len;
10657   int i;
10658   int found;
10659   ULONGEST found_addr;
10660
10661   /* Don't go to the target if we don't have to.
10662      This is done before checking packet->support to avoid the possibility that
10663      a success for this edge case means the facility works in general.  */
10664   if (pattern_len > search_space_len)
10665     return 0;
10666   if (pattern_len == 0)
10667     {
10668       *found_addrp = start_addr;
10669       return 1;
10670     }
10671
10672   /* If we already know the packet isn't supported, fall back to the simple
10673      way of searching memory.  */
10674
10675   if (packet_config_support (packet) == PACKET_DISABLE)
10676     {
10677       /* Target doesn't provided special support, fall back and use the
10678          standard support (copy memory and do the search here).  */
10679       return simple_search_memory (ops, start_addr, search_space_len,
10680                                    pattern, pattern_len, found_addrp);
10681     }
10682
10683   /* Make sure the remote is pointing at the right process.  */
10684   set_general_process ();
10685
10686   /* Insert header.  */
10687   i = snprintf (rs->buf, max_size, 
10688                 "qSearch:memory:%s;%s;",
10689                 phex_nz (start_addr, addr_size),
10690                 phex_nz (search_space_len, sizeof (search_space_len)));
10691   max_size -= (i + 1);
10692
10693   /* Escape as much data as fits into rs->buf.  */
10694   escaped_pattern_len =
10695     remote_escape_output (pattern, pattern_len, 1, (gdb_byte *) rs->buf + i,
10696                           &used_pattern_len, max_size);
10697
10698   /* Bail if the pattern is too large.  */
10699   if (used_pattern_len != pattern_len)
10700     error (_("Pattern is too large to transmit to remote target."));
10701
10702   if (putpkt_binary (rs->buf, i + escaped_pattern_len) < 0
10703       || getpkt_sane (&rs->buf, &rs->buf_size, 0) < 0
10704       || packet_ok (rs->buf, packet) != PACKET_OK)
10705     {
10706       /* The request may not have worked because the command is not
10707          supported.  If so, fall back to the simple way.  */
10708       if (packet->support == PACKET_DISABLE)
10709         {
10710           return simple_search_memory (ops, start_addr, search_space_len,
10711                                        pattern, pattern_len, found_addrp);
10712         }
10713       return -1;
10714     }
10715
10716   if (rs->buf[0] == '0')
10717     found = 0;
10718   else if (rs->buf[0] == '1')
10719     {
10720       found = 1;
10721       if (rs->buf[1] != ',')
10722         error (_("Unknown qSearch:memory reply: %s"), rs->buf);
10723       unpack_varlen_hex (rs->buf + 2, &found_addr);
10724       *found_addrp = found_addr;
10725     }
10726   else
10727     error (_("Unknown qSearch:memory reply: %s"), rs->buf);
10728
10729   return found;
10730 }
10731
10732 static void
10733 remote_rcmd (struct target_ops *self, const char *command,
10734              struct ui_file *outbuf)
10735 {
10736   struct remote_state *rs = get_remote_state ();
10737   char *p = rs->buf;
10738
10739   if (!rs->remote_desc)
10740     error (_("remote rcmd is only available after target open"));
10741
10742   /* Send a NULL command across as an empty command.  */
10743   if (command == NULL)
10744     command = "";
10745
10746   /* The query prefix.  */
10747   strcpy (rs->buf, "qRcmd,");
10748   p = strchr (rs->buf, '\0');
10749
10750   if ((strlen (rs->buf) + strlen (command) * 2 + 8/*misc*/)
10751       > get_remote_packet_size ())
10752     error (_("\"monitor\" command ``%s'' is too long."), command);
10753
10754   /* Encode the actual command.  */
10755   bin2hex ((const gdb_byte *) command, p, strlen (command));
10756
10757   if (putpkt (rs->buf) < 0)
10758     error (_("Communication problem with target."));
10759
10760   /* get/display the response */
10761   while (1)
10762     {
10763       char *buf;
10764
10765       /* XXX - see also remote_get_noisy_reply().  */
10766       QUIT;                     /* Allow user to bail out with ^C.  */
10767       rs->buf[0] = '\0';
10768       if (getpkt_sane (&rs->buf, &rs->buf_size, 0) == -1)
10769         { 
10770           /* Timeout.  Continue to (try to) read responses.
10771              This is better than stopping with an error, assuming the stub
10772              is still executing the (long) monitor command.
10773              If needed, the user can interrupt gdb using C-c, obtaining
10774              an effect similar to stop on timeout.  */
10775           continue;
10776         }
10777       buf = rs->buf;
10778       if (buf[0] == '\0')
10779         error (_("Target does not support this command."));
10780       if (buf[0] == 'O' && buf[1] != 'K')
10781         {
10782           remote_console_output (buf + 1); /* 'O' message from stub.  */
10783           continue;
10784         }
10785       if (strcmp (buf, "OK") == 0)
10786         break;
10787       if (strlen (buf) == 3 && buf[0] == 'E'
10788           && isdigit (buf[1]) && isdigit (buf[2]))
10789         {
10790           error (_("Protocol error with Rcmd"));
10791         }
10792       for (p = buf; p[0] != '\0' && p[1] != '\0'; p += 2)
10793         {
10794           char c = (fromhex (p[0]) << 4) + fromhex (p[1]);
10795
10796           fputc_unfiltered (c, outbuf);
10797         }
10798       break;
10799     }
10800 }
10801
10802 static VEC(mem_region_s) *
10803 remote_memory_map (struct target_ops *ops)
10804 {
10805   VEC(mem_region_s) *result = NULL;
10806   char *text = target_read_stralloc (&current_target,
10807                                      TARGET_OBJECT_MEMORY_MAP, NULL);
10808
10809   if (text)
10810     {
10811       struct cleanup *back_to = make_cleanup (xfree, text);
10812
10813       result = parse_memory_map (text);
10814       do_cleanups (back_to);
10815     }
10816
10817   return result;
10818 }
10819
10820 static void
10821 packet_command (char *args, int from_tty)
10822 {
10823   struct remote_state *rs = get_remote_state ();
10824
10825   if (!rs->remote_desc)
10826     error (_("command can only be used with remote target"));
10827
10828   if (!args)
10829     error (_("remote-packet command requires packet text as argument"));
10830
10831   puts_filtered ("sending: ");
10832   print_packet (args);
10833   puts_filtered ("\n");
10834   putpkt (args);
10835
10836   getpkt (&rs->buf, &rs->buf_size, 0);
10837   puts_filtered ("received: ");
10838   print_packet (rs->buf);
10839   puts_filtered ("\n");
10840 }
10841
10842 #if 0
10843 /* --------- UNIT_TEST for THREAD oriented PACKETS ------------------- */
10844
10845 static void display_thread_info (struct gdb_ext_thread_info *info);
10846
10847 static void threadset_test_cmd (char *cmd, int tty);
10848
10849 static void threadalive_test (char *cmd, int tty);
10850
10851 static void threadlist_test_cmd (char *cmd, int tty);
10852
10853 int get_and_display_threadinfo (threadref *ref);
10854
10855 static void threadinfo_test_cmd (char *cmd, int tty);
10856
10857 static int thread_display_step (threadref *ref, void *context);
10858
10859 static void threadlist_update_test_cmd (char *cmd, int tty);
10860
10861 static void init_remote_threadtests (void);
10862
10863 #define SAMPLE_THREAD  0x05060708       /* Truncated 64 bit threadid.  */
10864
10865 static void
10866 threadset_test_cmd (char *cmd, int tty)
10867 {
10868   int sample_thread = SAMPLE_THREAD;
10869
10870   printf_filtered (_("Remote threadset test\n"));
10871   set_general_thread (sample_thread);
10872 }
10873
10874
10875 static void
10876 threadalive_test (char *cmd, int tty)
10877 {
10878   int sample_thread = SAMPLE_THREAD;
10879   int pid = ptid_get_pid (inferior_ptid);
10880   ptid_t ptid = ptid_build (pid, sample_thread, 0);
10881
10882   if (remote_thread_alive (ptid))
10883     printf_filtered ("PASS: Thread alive test\n");
10884   else
10885     printf_filtered ("FAIL: Thread alive test\n");
10886 }
10887
10888 void output_threadid (char *title, threadref *ref);
10889
10890 void
10891 output_threadid (char *title, threadref *ref)
10892 {
10893   char hexid[20];
10894
10895   pack_threadid (&hexid[0], ref);       /* Convert threead id into hex.  */
10896   hexid[16] = 0;
10897   printf_filtered ("%s  %s\n", title, (&hexid[0]));
10898 }
10899
10900 static void
10901 threadlist_test_cmd (char *cmd, int tty)
10902 {
10903   int startflag = 1;
10904   threadref nextthread;
10905   int done, result_count;
10906   threadref threadlist[3];
10907
10908   printf_filtered ("Remote Threadlist test\n");
10909   if (!remote_get_threadlist (startflag, &nextthread, 3, &done,
10910                               &result_count, &threadlist[0]))
10911     printf_filtered ("FAIL: threadlist test\n");
10912   else
10913     {
10914       threadref *scan = threadlist;
10915       threadref *limit = scan + result_count;
10916
10917       while (scan < limit)
10918         output_threadid (" thread ", scan++);
10919     }
10920 }
10921
10922 void
10923 display_thread_info (struct gdb_ext_thread_info *info)
10924 {
10925   output_threadid ("Threadid: ", &info->threadid);
10926   printf_filtered ("Name: %s\n ", info->shortname);
10927   printf_filtered ("State: %s\n", info->display);
10928   printf_filtered ("other: %s\n\n", info->more_display);
10929 }
10930
10931 int
10932 get_and_display_threadinfo (threadref *ref)
10933 {
10934   int result;
10935   int set;
10936   struct gdb_ext_thread_info threadinfo;
10937
10938   set = TAG_THREADID | TAG_EXISTS | TAG_THREADNAME
10939     | TAG_MOREDISPLAY | TAG_DISPLAY;
10940   if (0 != (result = remote_get_threadinfo (ref, set, &threadinfo)))
10941     display_thread_info (&threadinfo);
10942   return result;
10943 }
10944
10945 static void
10946 threadinfo_test_cmd (char *cmd, int tty)
10947 {
10948   int athread = SAMPLE_THREAD;
10949   threadref thread;
10950   int set;
10951
10952   int_to_threadref (&thread, athread);
10953   printf_filtered ("Remote Threadinfo test\n");
10954   if (!get_and_display_threadinfo (&thread))
10955     printf_filtered ("FAIL cannot get thread info\n");
10956 }
10957
10958 static int
10959 thread_display_step (threadref *ref, void *context)
10960 {
10961   /* output_threadid(" threadstep ",ref); *//* simple test */
10962   return get_and_display_threadinfo (ref);
10963 }
10964
10965 static void
10966 threadlist_update_test_cmd (char *cmd, int tty)
10967 {
10968   printf_filtered ("Remote Threadlist update test\n");
10969   remote_threadlist_iterator (thread_display_step, 0, CRAZY_MAX_THREADS);
10970 }
10971
10972 static void
10973 init_remote_threadtests (void)
10974 {
10975   add_com ("tlist", class_obscure, threadlist_test_cmd,
10976            _("Fetch and print the remote list of "
10977              "thread identifiers, one pkt only"));
10978   add_com ("tinfo", class_obscure, threadinfo_test_cmd,
10979            _("Fetch and display info about one thread"));
10980   add_com ("tset", class_obscure, threadset_test_cmd,
10981            _("Test setting to a different thread"));
10982   add_com ("tupd", class_obscure, threadlist_update_test_cmd,
10983            _("Iterate through updating all remote thread info"));
10984   add_com ("talive", class_obscure, threadalive_test,
10985            _(" Remote thread alive test "));
10986 }
10987
10988 #endif /* 0 */
10989
10990 /* Convert a thread ID to a string.  Returns the string in a static
10991    buffer.  */
10992
10993 static const char *
10994 remote_pid_to_str (struct target_ops *ops, ptid_t ptid)
10995 {
10996   static char buf[64];
10997   struct remote_state *rs = get_remote_state ();
10998
10999   if (ptid_equal (ptid, null_ptid))
11000     return normal_pid_to_str (ptid);
11001   else if (ptid_is_pid (ptid))
11002     {
11003       /* Printing an inferior target id.  */
11004
11005       /* When multi-process extensions are off, there's no way in the
11006          remote protocol to know the remote process id, if there's any
11007          at all.  There's one exception --- when we're connected with
11008          target extended-remote, and we manually attached to a process
11009          with "attach PID".  We don't record anywhere a flag that
11010          allows us to distinguish that case from the case of
11011          connecting with extended-remote and the stub already being
11012          attached to a process, and reporting yes to qAttached, hence
11013          no smart special casing here.  */
11014       if (!remote_multi_process_p (rs))
11015         {
11016           xsnprintf (buf, sizeof buf, "Remote target");
11017           return buf;
11018         }
11019
11020       return normal_pid_to_str (ptid);
11021     }
11022   else
11023     {
11024       if (ptid_equal (magic_null_ptid, ptid))
11025         xsnprintf (buf, sizeof buf, "Thread <main>");
11026       else if (remote_multi_process_p (rs))
11027         if (ptid_get_lwp (ptid) == 0)
11028           return normal_pid_to_str (ptid);
11029         else
11030           xsnprintf (buf, sizeof buf, "Thread %d.%ld",
11031                      ptid_get_pid (ptid), ptid_get_lwp (ptid));
11032       else
11033         xsnprintf (buf, sizeof buf, "Thread %ld",
11034                    ptid_get_lwp (ptid));
11035       return buf;
11036     }
11037 }
11038
11039 /* Get the address of the thread local variable in OBJFILE which is
11040    stored at OFFSET within the thread local storage for thread PTID.  */
11041
11042 static CORE_ADDR
11043 remote_get_thread_local_address (struct target_ops *ops,
11044                                  ptid_t ptid, CORE_ADDR lm, CORE_ADDR offset)
11045 {
11046   if (packet_support (PACKET_qGetTLSAddr) != PACKET_DISABLE)
11047     {
11048       struct remote_state *rs = get_remote_state ();
11049       char *p = rs->buf;
11050       char *endp = rs->buf + get_remote_packet_size ();
11051       enum packet_result result;
11052
11053       strcpy (p, "qGetTLSAddr:");
11054       p += strlen (p);
11055       p = write_ptid (p, endp, ptid);
11056       *p++ = ',';
11057       p += hexnumstr (p, offset);
11058       *p++ = ',';
11059       p += hexnumstr (p, lm);
11060       *p++ = '\0';
11061
11062       putpkt (rs->buf);
11063       getpkt (&rs->buf, &rs->buf_size, 0);
11064       result = packet_ok (rs->buf,
11065                           &remote_protocol_packets[PACKET_qGetTLSAddr]);
11066       if (result == PACKET_OK)
11067         {
11068           ULONGEST result;
11069
11070           unpack_varlen_hex (rs->buf, &result);
11071           return result;
11072         }
11073       else if (result == PACKET_UNKNOWN)
11074         throw_error (TLS_GENERIC_ERROR,
11075                      _("Remote target doesn't support qGetTLSAddr packet"));
11076       else
11077         throw_error (TLS_GENERIC_ERROR,
11078                      _("Remote target failed to process qGetTLSAddr request"));
11079     }
11080   else
11081     throw_error (TLS_GENERIC_ERROR,
11082                  _("TLS not supported or disabled on this target"));
11083   /* Not reached.  */
11084   return 0;
11085 }
11086
11087 /* Provide thread local base, i.e. Thread Information Block address.
11088    Returns 1 if ptid is found and thread_local_base is non zero.  */
11089
11090 static int
11091 remote_get_tib_address (struct target_ops *self, ptid_t ptid, CORE_ADDR *addr)
11092 {
11093   if (packet_support (PACKET_qGetTIBAddr) != PACKET_DISABLE)
11094     {
11095       struct remote_state *rs = get_remote_state ();
11096       char *p = rs->buf;
11097       char *endp = rs->buf + get_remote_packet_size ();
11098       enum packet_result result;
11099
11100       strcpy (p, "qGetTIBAddr:");
11101       p += strlen (p);
11102       p = write_ptid (p, endp, ptid);
11103       *p++ = '\0';
11104
11105       putpkt (rs->buf);
11106       getpkt (&rs->buf, &rs->buf_size, 0);
11107       result = packet_ok (rs->buf,
11108                           &remote_protocol_packets[PACKET_qGetTIBAddr]);
11109       if (result == PACKET_OK)
11110         {
11111           ULONGEST result;
11112
11113           unpack_varlen_hex (rs->buf, &result);
11114           if (addr)
11115             *addr = (CORE_ADDR) result;
11116           return 1;
11117         }
11118       else if (result == PACKET_UNKNOWN)
11119         error (_("Remote target doesn't support qGetTIBAddr packet"));
11120       else
11121         error (_("Remote target failed to process qGetTIBAddr request"));
11122     }
11123   else
11124     error (_("qGetTIBAddr not supported or disabled on this target"));
11125   /* Not reached.  */
11126   return 0;
11127 }
11128
11129 /* Support for inferring a target description based on the current
11130    architecture and the size of a 'g' packet.  While the 'g' packet
11131    can have any size (since optional registers can be left off the
11132    end), some sizes are easily recognizable given knowledge of the
11133    approximate architecture.  */
11134
11135 struct remote_g_packet_guess
11136 {
11137   int bytes;
11138   const struct target_desc *tdesc;
11139 };
11140 typedef struct remote_g_packet_guess remote_g_packet_guess_s;
11141 DEF_VEC_O(remote_g_packet_guess_s);
11142
11143 struct remote_g_packet_data
11144 {
11145   VEC(remote_g_packet_guess_s) *guesses;
11146 };
11147
11148 static struct gdbarch_data *remote_g_packet_data_handle;
11149
11150 static void *
11151 remote_g_packet_data_init (struct obstack *obstack)
11152 {
11153   return OBSTACK_ZALLOC (obstack, struct remote_g_packet_data);
11154 }
11155
11156 void
11157 register_remote_g_packet_guess (struct gdbarch *gdbarch, int bytes,
11158                                 const struct target_desc *tdesc)
11159 {
11160   struct remote_g_packet_data *data
11161     = ((struct remote_g_packet_data *)
11162        gdbarch_data (gdbarch, remote_g_packet_data_handle));
11163   struct remote_g_packet_guess new_guess, *guess;
11164   int ix;
11165
11166   gdb_assert (tdesc != NULL);
11167
11168   for (ix = 0;
11169        VEC_iterate (remote_g_packet_guess_s, data->guesses, ix, guess);
11170        ix++)
11171     if (guess->bytes == bytes)
11172       internal_error (__FILE__, __LINE__,
11173                       _("Duplicate g packet description added for size %d"),
11174                       bytes);
11175
11176   new_guess.bytes = bytes;
11177   new_guess.tdesc = tdesc;
11178   VEC_safe_push (remote_g_packet_guess_s, data->guesses, &new_guess);
11179 }
11180
11181 /* Return 1 if remote_read_description would do anything on this target
11182    and architecture, 0 otherwise.  */
11183
11184 static int
11185 remote_read_description_p (struct target_ops *target)
11186 {
11187   struct remote_g_packet_data *data
11188     = ((struct remote_g_packet_data *)
11189        gdbarch_data (target_gdbarch (), remote_g_packet_data_handle));
11190
11191   if (!VEC_empty (remote_g_packet_guess_s, data->guesses))
11192     return 1;
11193
11194   return 0;
11195 }
11196
11197 static const struct target_desc *
11198 remote_read_description (struct target_ops *target)
11199 {
11200   struct remote_g_packet_data *data
11201     = ((struct remote_g_packet_data *)
11202        gdbarch_data (target_gdbarch (), remote_g_packet_data_handle));
11203
11204   /* Do not try this during initial connection, when we do not know
11205      whether there is a running but stopped thread.  */
11206   if (!target_has_execution || ptid_equal (inferior_ptid, null_ptid))
11207     return target->beneath->to_read_description (target->beneath);
11208
11209   if (!VEC_empty (remote_g_packet_guess_s, data->guesses))
11210     {
11211       struct remote_g_packet_guess *guess;
11212       int ix;
11213       int bytes = send_g_packet ();
11214
11215       for (ix = 0;
11216            VEC_iterate (remote_g_packet_guess_s, data->guesses, ix, guess);
11217            ix++)
11218         if (guess->bytes == bytes)
11219           return guess->tdesc;
11220
11221       /* We discard the g packet.  A minor optimization would be to
11222          hold on to it, and fill the register cache once we have selected
11223          an architecture, but it's too tricky to do safely.  */
11224     }
11225
11226   return target->beneath->to_read_description (target->beneath);
11227 }
11228
11229 /* Remote file transfer support.  This is host-initiated I/O, not
11230    target-initiated; for target-initiated, see remote-fileio.c.  */
11231
11232 /* If *LEFT is at least the length of STRING, copy STRING to
11233    *BUFFER, update *BUFFER to point to the new end of the buffer, and
11234    decrease *LEFT.  Otherwise raise an error.  */
11235
11236 static void
11237 remote_buffer_add_string (char **buffer, int *left, const char *string)
11238 {
11239   int len = strlen (string);
11240
11241   if (len > *left)
11242     error (_("Packet too long for target."));
11243
11244   memcpy (*buffer, string, len);
11245   *buffer += len;
11246   *left -= len;
11247
11248   /* NUL-terminate the buffer as a convenience, if there is
11249      room.  */
11250   if (*left)
11251     **buffer = '\0';
11252 }
11253
11254 /* If *LEFT is large enough, hex encode LEN bytes from BYTES into
11255    *BUFFER, update *BUFFER to point to the new end of the buffer, and
11256    decrease *LEFT.  Otherwise raise an error.  */
11257
11258 static void
11259 remote_buffer_add_bytes (char **buffer, int *left, const gdb_byte *bytes,
11260                          int len)
11261 {
11262   if (2 * len > *left)
11263     error (_("Packet too long for target."));
11264
11265   bin2hex (bytes, *buffer, len);
11266   *buffer += 2 * len;
11267   *left -= 2 * len;
11268
11269   /* NUL-terminate the buffer as a convenience, if there is
11270      room.  */
11271   if (*left)
11272     **buffer = '\0';
11273 }
11274
11275 /* If *LEFT is large enough, convert VALUE to hex and add it to
11276    *BUFFER, update *BUFFER to point to the new end of the buffer, and
11277    decrease *LEFT.  Otherwise raise an error.  */
11278
11279 static void
11280 remote_buffer_add_int (char **buffer, int *left, ULONGEST value)
11281 {
11282   int len = hexnumlen (value);
11283
11284   if (len > *left)
11285     error (_("Packet too long for target."));
11286
11287   hexnumstr (*buffer, value);
11288   *buffer += len;
11289   *left -= len;
11290
11291   /* NUL-terminate the buffer as a convenience, if there is
11292      room.  */
11293   if (*left)
11294     **buffer = '\0';
11295 }
11296
11297 /* Parse an I/O result packet from BUFFER.  Set RETCODE to the return
11298    value, *REMOTE_ERRNO to the remote error number or zero if none
11299    was included, and *ATTACHMENT to point to the start of the annex
11300    if any.  The length of the packet isn't needed here; there may
11301    be NUL bytes in BUFFER, but they will be after *ATTACHMENT.
11302
11303    Return 0 if the packet could be parsed, -1 if it could not.  If
11304    -1 is returned, the other variables may not be initialized.  */
11305
11306 static int
11307 remote_hostio_parse_result (char *buffer, int *retcode,
11308                             int *remote_errno, char **attachment)
11309 {
11310   char *p, *p2;
11311
11312   *remote_errno = 0;
11313   *attachment = NULL;
11314
11315   if (buffer[0] != 'F')
11316     return -1;
11317
11318   errno = 0;
11319   *retcode = strtol (&buffer[1], &p, 16);
11320   if (errno != 0 || p == &buffer[1])
11321     return -1;
11322
11323   /* Check for ",errno".  */
11324   if (*p == ',')
11325     {
11326       errno = 0;
11327       *remote_errno = strtol (p + 1, &p2, 16);
11328       if (errno != 0 || p + 1 == p2)
11329         return -1;
11330       p = p2;
11331     }
11332
11333   /* Check for ";attachment".  If there is no attachment, the
11334      packet should end here.  */
11335   if (*p == ';')
11336     {
11337       *attachment = p + 1;
11338       return 0;
11339     }
11340   else if (*p == '\0')
11341     return 0;
11342   else
11343     return -1;
11344 }
11345
11346 /* Send a prepared I/O packet to the target and read its response.
11347    The prepared packet is in the global RS->BUF before this function
11348    is called, and the answer is there when we return.
11349
11350    COMMAND_BYTES is the length of the request to send, which may include
11351    binary data.  WHICH_PACKET is the packet configuration to check
11352    before attempting a packet.  If an error occurs, *REMOTE_ERRNO
11353    is set to the error number and -1 is returned.  Otherwise the value
11354    returned by the function is returned.
11355
11356    ATTACHMENT and ATTACHMENT_LEN should be non-NULL if and only if an
11357    attachment is expected; an error will be reported if there's a
11358    mismatch.  If one is found, *ATTACHMENT will be set to point into
11359    the packet buffer and *ATTACHMENT_LEN will be set to the
11360    attachment's length.  */
11361
11362 static int
11363 remote_hostio_send_command (int command_bytes, int which_packet,
11364                             int *remote_errno, char **attachment,
11365                             int *attachment_len)
11366 {
11367   struct remote_state *rs = get_remote_state ();
11368   int ret, bytes_read;
11369   char *attachment_tmp;
11370
11371   if (!rs->remote_desc
11372       || packet_support (which_packet) == PACKET_DISABLE)
11373     {
11374       *remote_errno = FILEIO_ENOSYS;
11375       return -1;
11376     }
11377
11378   putpkt_binary (rs->buf, command_bytes);
11379   bytes_read = getpkt_sane (&rs->buf, &rs->buf_size, 0);
11380
11381   /* If it timed out, something is wrong.  Don't try to parse the
11382      buffer.  */
11383   if (bytes_read < 0)
11384     {
11385       *remote_errno = FILEIO_EINVAL;
11386       return -1;
11387     }
11388
11389   switch (packet_ok (rs->buf, &remote_protocol_packets[which_packet]))
11390     {
11391     case PACKET_ERROR:
11392       *remote_errno = FILEIO_EINVAL;
11393       return -1;
11394     case PACKET_UNKNOWN:
11395       *remote_errno = FILEIO_ENOSYS;
11396       return -1;
11397     case PACKET_OK:
11398       break;
11399     }
11400
11401   if (remote_hostio_parse_result (rs->buf, &ret, remote_errno,
11402                                   &attachment_tmp))
11403     {
11404       *remote_errno = FILEIO_EINVAL;
11405       return -1;
11406     }
11407
11408   /* Make sure we saw an attachment if and only if we expected one.  */
11409   if ((attachment_tmp == NULL && attachment != NULL)
11410       || (attachment_tmp != NULL && attachment == NULL))
11411     {
11412       *remote_errno = FILEIO_EINVAL;
11413       return -1;
11414     }
11415
11416   /* If an attachment was found, it must point into the packet buffer;
11417      work out how many bytes there were.  */
11418   if (attachment_tmp != NULL)
11419     {
11420       *attachment = attachment_tmp;
11421       *attachment_len = bytes_read - (*attachment - rs->buf);
11422     }
11423
11424   return ret;
11425 }
11426
11427 /* Invalidate the readahead cache.  */
11428
11429 static void
11430 readahead_cache_invalidate (void)
11431 {
11432   struct remote_state *rs = get_remote_state ();
11433
11434   rs->readahead_cache.fd = -1;
11435 }
11436
11437 /* Invalidate the readahead cache if it is holding data for FD.  */
11438
11439 static void
11440 readahead_cache_invalidate_fd (int fd)
11441 {
11442   struct remote_state *rs = get_remote_state ();
11443
11444   if (rs->readahead_cache.fd == fd)
11445     rs->readahead_cache.fd = -1;
11446 }
11447
11448 /* Set the filesystem remote_hostio functions that take FILENAME
11449    arguments will use.  Return 0 on success, or -1 if an error
11450    occurs (and set *REMOTE_ERRNO).  */
11451
11452 static int
11453 remote_hostio_set_filesystem (struct inferior *inf, int *remote_errno)
11454 {
11455   struct remote_state *rs = get_remote_state ();
11456   int required_pid = (inf == NULL || inf->fake_pid_p) ? 0 : inf->pid;
11457   char *p = rs->buf;
11458   int left = get_remote_packet_size () - 1;
11459   char arg[9];
11460   int ret;
11461
11462   if (packet_support (PACKET_vFile_setfs) == PACKET_DISABLE)
11463     return 0;
11464
11465   if (rs->fs_pid != -1 && required_pid == rs->fs_pid)
11466     return 0;
11467
11468   remote_buffer_add_string (&p, &left, "vFile:setfs:");
11469
11470   xsnprintf (arg, sizeof (arg), "%x", required_pid);
11471   remote_buffer_add_string (&p, &left, arg);
11472
11473   ret = remote_hostio_send_command (p - rs->buf, PACKET_vFile_setfs,
11474                                     remote_errno, NULL, NULL);
11475
11476   if (packet_support (PACKET_vFile_setfs) == PACKET_DISABLE)
11477     return 0;
11478
11479   if (ret == 0)
11480     rs->fs_pid = required_pid;
11481
11482   return ret;
11483 }
11484
11485 /* Implementation of to_fileio_open.  */
11486
11487 static int
11488 remote_hostio_open (struct target_ops *self,
11489                     struct inferior *inf, const char *filename,
11490                     int flags, int mode, int warn_if_slow,
11491                     int *remote_errno)
11492 {
11493   struct remote_state *rs = get_remote_state ();
11494   char *p = rs->buf;
11495   int left = get_remote_packet_size () - 1;
11496
11497   if (warn_if_slow)
11498     {
11499       static int warning_issued = 0;
11500
11501       printf_unfiltered (_("Reading %s from remote target...\n"),
11502                          filename);
11503
11504       if (!warning_issued)
11505         {
11506           warning (_("File transfers from remote targets can be slow."
11507                      " Use \"set sysroot\" to access files locally"
11508                      " instead."));
11509           warning_issued = 1;
11510         }
11511     }
11512
11513   if (remote_hostio_set_filesystem (inf, remote_errno) != 0)
11514     return -1;
11515
11516   remote_buffer_add_string (&p, &left, "vFile:open:");
11517
11518   remote_buffer_add_bytes (&p, &left, (const gdb_byte *) filename,
11519                            strlen (filename));
11520   remote_buffer_add_string (&p, &left, ",");
11521
11522   remote_buffer_add_int (&p, &left, flags);
11523   remote_buffer_add_string (&p, &left, ",");
11524
11525   remote_buffer_add_int (&p, &left, mode);
11526
11527   return remote_hostio_send_command (p - rs->buf, PACKET_vFile_open,
11528                                      remote_errno, NULL, NULL);
11529 }
11530
11531 /* Implementation of to_fileio_pwrite.  */
11532
11533 static int
11534 remote_hostio_pwrite (struct target_ops *self,
11535                       int fd, const gdb_byte *write_buf, int len,
11536                       ULONGEST offset, int *remote_errno)
11537 {
11538   struct remote_state *rs = get_remote_state ();
11539   char *p = rs->buf;
11540   int left = get_remote_packet_size ();
11541   int out_len;
11542
11543   readahead_cache_invalidate_fd (fd);
11544
11545   remote_buffer_add_string (&p, &left, "vFile:pwrite:");
11546
11547   remote_buffer_add_int (&p, &left, fd);
11548   remote_buffer_add_string (&p, &left, ",");
11549
11550   remote_buffer_add_int (&p, &left, offset);
11551   remote_buffer_add_string (&p, &left, ",");
11552
11553   p += remote_escape_output (write_buf, len, 1, (gdb_byte *) p, &out_len,
11554                              get_remote_packet_size () - (p - rs->buf));
11555
11556   return remote_hostio_send_command (p - rs->buf, PACKET_vFile_pwrite,
11557                                      remote_errno, NULL, NULL);
11558 }
11559
11560 /* Helper for the implementation of to_fileio_pread.  Read the file
11561    from the remote side with vFile:pread.  */
11562
11563 static int
11564 remote_hostio_pread_vFile (struct target_ops *self,
11565                            int fd, gdb_byte *read_buf, int len,
11566                            ULONGEST offset, int *remote_errno)
11567 {
11568   struct remote_state *rs = get_remote_state ();
11569   char *p = rs->buf;
11570   char *attachment;
11571   int left = get_remote_packet_size ();
11572   int ret, attachment_len;
11573   int read_len;
11574
11575   remote_buffer_add_string (&p, &left, "vFile:pread:");
11576
11577   remote_buffer_add_int (&p, &left, fd);
11578   remote_buffer_add_string (&p, &left, ",");
11579
11580   remote_buffer_add_int (&p, &left, len);
11581   remote_buffer_add_string (&p, &left, ",");
11582
11583   remote_buffer_add_int (&p, &left, offset);
11584
11585   ret = remote_hostio_send_command (p - rs->buf, PACKET_vFile_pread,
11586                                     remote_errno, &attachment,
11587                                     &attachment_len);
11588
11589   if (ret < 0)
11590     return ret;
11591
11592   read_len = remote_unescape_input ((gdb_byte *) attachment, attachment_len,
11593                                     read_buf, len);
11594   if (read_len != ret)
11595     error (_("Read returned %d, but %d bytes."), ret, (int) read_len);
11596
11597   return ret;
11598 }
11599
11600 /* Serve pread from the readahead cache.  Returns number of bytes
11601    read, or 0 if the request can't be served from the cache.  */
11602
11603 static int
11604 remote_hostio_pread_from_cache (struct remote_state *rs,
11605                                 int fd, gdb_byte *read_buf, size_t len,
11606                                 ULONGEST offset)
11607 {
11608   struct readahead_cache *cache = &rs->readahead_cache;
11609
11610   if (cache->fd == fd
11611       && cache->offset <= offset
11612       && offset < cache->offset + cache->bufsize)
11613     {
11614       ULONGEST max = cache->offset + cache->bufsize;
11615
11616       if (offset + len > max)
11617         len = max - offset;
11618
11619       memcpy (read_buf, cache->buf + offset - cache->offset, len);
11620       return len;
11621     }
11622
11623   return 0;
11624 }
11625
11626 /* Implementation of to_fileio_pread.  */
11627
11628 static int
11629 remote_hostio_pread (struct target_ops *self,
11630                      int fd, gdb_byte *read_buf, int len,
11631                      ULONGEST offset, int *remote_errno)
11632 {
11633   int ret;
11634   struct remote_state *rs = get_remote_state ();
11635   struct readahead_cache *cache = &rs->readahead_cache;
11636
11637   ret = remote_hostio_pread_from_cache (rs, fd, read_buf, len, offset);
11638   if (ret > 0)
11639     {
11640       cache->hit_count++;
11641
11642       if (remote_debug)
11643         fprintf_unfiltered (gdb_stdlog, "readahead cache hit %s\n",
11644                             pulongest (cache->hit_count));
11645       return ret;
11646     }
11647
11648   cache->miss_count++;
11649   if (remote_debug)
11650     fprintf_unfiltered (gdb_stdlog, "readahead cache miss %s\n",
11651                         pulongest (cache->miss_count));
11652
11653   cache->fd = fd;
11654   cache->offset = offset;
11655   cache->bufsize = get_remote_packet_size ();
11656   cache->buf = (gdb_byte *) xrealloc (cache->buf, cache->bufsize);
11657
11658   ret = remote_hostio_pread_vFile (self, cache->fd, cache->buf, cache->bufsize,
11659                                    cache->offset, remote_errno);
11660   if (ret <= 0)
11661     {
11662       readahead_cache_invalidate_fd (fd);
11663       return ret;
11664     }
11665
11666   cache->bufsize = ret;
11667   return remote_hostio_pread_from_cache (rs, fd, read_buf, len, offset);
11668 }
11669
11670 /* Implementation of to_fileio_close.  */
11671
11672 static int
11673 remote_hostio_close (struct target_ops *self, int fd, int *remote_errno)
11674 {
11675   struct remote_state *rs = get_remote_state ();
11676   char *p = rs->buf;
11677   int left = get_remote_packet_size () - 1;
11678
11679   readahead_cache_invalidate_fd (fd);
11680
11681   remote_buffer_add_string (&p, &left, "vFile:close:");
11682
11683   remote_buffer_add_int (&p, &left, fd);
11684
11685   return remote_hostio_send_command (p - rs->buf, PACKET_vFile_close,
11686                                      remote_errno, NULL, NULL);
11687 }
11688
11689 /* Implementation of to_fileio_unlink.  */
11690
11691 static int
11692 remote_hostio_unlink (struct target_ops *self,
11693                       struct inferior *inf, const char *filename,
11694                       int *remote_errno)
11695 {
11696   struct remote_state *rs = get_remote_state ();
11697   char *p = rs->buf;
11698   int left = get_remote_packet_size () - 1;
11699
11700   if (remote_hostio_set_filesystem (inf, remote_errno) != 0)
11701     return -1;
11702
11703   remote_buffer_add_string (&p, &left, "vFile:unlink:");
11704
11705   remote_buffer_add_bytes (&p, &left, (const gdb_byte *) filename,
11706                            strlen (filename));
11707
11708   return remote_hostio_send_command (p - rs->buf, PACKET_vFile_unlink,
11709                                      remote_errno, NULL, NULL);
11710 }
11711
11712 /* Implementation of to_fileio_readlink.  */
11713
11714 static char *
11715 remote_hostio_readlink (struct target_ops *self,
11716                         struct inferior *inf, const char *filename,
11717                         int *remote_errno)
11718 {
11719   struct remote_state *rs = get_remote_state ();
11720   char *p = rs->buf;
11721   char *attachment;
11722   int left = get_remote_packet_size ();
11723   int len, attachment_len;
11724   int read_len;
11725   char *ret;
11726
11727   if (remote_hostio_set_filesystem (inf, remote_errno) != 0)
11728     return NULL;
11729
11730   remote_buffer_add_string (&p, &left, "vFile:readlink:");
11731
11732   remote_buffer_add_bytes (&p, &left, (const gdb_byte *) filename,
11733                            strlen (filename));
11734
11735   len = remote_hostio_send_command (p - rs->buf, PACKET_vFile_readlink,
11736                                     remote_errno, &attachment,
11737                                     &attachment_len);
11738
11739   if (len < 0)
11740     return NULL;
11741
11742   ret = (char *) xmalloc (len + 1);
11743
11744   read_len = remote_unescape_input ((gdb_byte *) attachment, attachment_len,
11745                                     (gdb_byte *) ret, len);
11746   if (read_len != len)
11747     error (_("Readlink returned %d, but %d bytes."), len, read_len);
11748
11749   ret[len] = '\0';
11750   return ret;
11751 }
11752
11753 /* Implementation of to_fileio_fstat.  */
11754
11755 static int
11756 remote_hostio_fstat (struct target_ops *self,
11757                      int fd, struct stat *st,
11758                      int *remote_errno)
11759 {
11760   struct remote_state *rs = get_remote_state ();
11761   char *p = rs->buf;
11762   int left = get_remote_packet_size ();
11763   int attachment_len, ret;
11764   char *attachment;
11765   struct fio_stat fst;
11766   int read_len;
11767
11768   remote_buffer_add_string (&p, &left, "vFile:fstat:");
11769
11770   remote_buffer_add_int (&p, &left, fd);
11771
11772   ret = remote_hostio_send_command (p - rs->buf, PACKET_vFile_fstat,
11773                                     remote_errno, &attachment,
11774                                     &attachment_len);
11775   if (ret < 0)
11776     {
11777       if (*remote_errno != FILEIO_ENOSYS)
11778         return ret;
11779
11780       /* Strictly we should return -1, ENOSYS here, but when
11781          "set sysroot remote:" was implemented in August 2008
11782          BFD's need for a stat function was sidestepped with
11783          this hack.  This was not remedied until March 2015
11784          so we retain the previous behavior to avoid breaking
11785          compatibility.
11786
11787          Note that the memset is a March 2015 addition; older
11788          GDBs set st_size *and nothing else* so the structure
11789          would have garbage in all other fields.  This might
11790          break something but retaining the previous behavior
11791          here would be just too wrong.  */
11792
11793       memset (st, 0, sizeof (struct stat));
11794       st->st_size = INT_MAX;
11795       return 0;
11796     }
11797
11798   read_len = remote_unescape_input ((gdb_byte *) attachment, attachment_len,
11799                                     (gdb_byte *) &fst, sizeof (fst));
11800
11801   if (read_len != ret)
11802     error (_("vFile:fstat returned %d, but %d bytes."), ret, read_len);
11803
11804   if (read_len != sizeof (fst))
11805     error (_("vFile:fstat returned %d bytes, but expecting %d."),
11806            read_len, (int) sizeof (fst));
11807
11808   remote_fileio_to_host_stat (&fst, st);
11809
11810   return 0;
11811 }
11812
11813 /* Implementation of to_filesystem_is_local.  */
11814
11815 static int
11816 remote_filesystem_is_local (struct target_ops *self)
11817 {
11818   /* Valgrind GDB presents itself as a remote target but works
11819      on the local filesystem: it does not implement remote get
11820      and users are not expected to set a sysroot.  To handle
11821      this case we treat the remote filesystem as local if the
11822      sysroot is exactly TARGET_SYSROOT_PREFIX and if the stub
11823      does not support vFile:open.  */
11824   if (strcmp (gdb_sysroot, TARGET_SYSROOT_PREFIX) == 0)
11825     {
11826       enum packet_support ps = packet_support (PACKET_vFile_open);
11827
11828       if (ps == PACKET_SUPPORT_UNKNOWN)
11829         {
11830           int fd, remote_errno;
11831
11832           /* Try opening a file to probe support.  The supplied
11833              filename is irrelevant, we only care about whether
11834              the stub recognizes the packet or not.  */
11835           fd = remote_hostio_open (self, NULL, "just probing",
11836                                    FILEIO_O_RDONLY, 0700, 0,
11837                                    &remote_errno);
11838
11839           if (fd >= 0)
11840             remote_hostio_close (self, fd, &remote_errno);
11841
11842           ps = packet_support (PACKET_vFile_open);
11843         }
11844
11845       if (ps == PACKET_DISABLE)
11846         {
11847           static int warning_issued = 0;
11848
11849           if (!warning_issued)
11850             {
11851               warning (_("remote target does not support file"
11852                          " transfer, attempting to access files"
11853                          " from local filesystem."));
11854               warning_issued = 1;
11855             }
11856
11857           return 1;
11858         }
11859     }
11860
11861   return 0;
11862 }
11863
11864 static int
11865 remote_fileio_errno_to_host (int errnum)
11866 {
11867   switch (errnum)
11868     {
11869       case FILEIO_EPERM:
11870         return EPERM;
11871       case FILEIO_ENOENT:
11872         return ENOENT;
11873       case FILEIO_EINTR:
11874         return EINTR;
11875       case FILEIO_EIO:
11876         return EIO;
11877       case FILEIO_EBADF:
11878         return EBADF;
11879       case FILEIO_EACCES:
11880         return EACCES;
11881       case FILEIO_EFAULT:
11882         return EFAULT;
11883       case FILEIO_EBUSY:
11884         return EBUSY;
11885       case FILEIO_EEXIST:
11886         return EEXIST;
11887       case FILEIO_ENODEV:
11888         return ENODEV;
11889       case FILEIO_ENOTDIR:
11890         return ENOTDIR;
11891       case FILEIO_EISDIR:
11892         return EISDIR;
11893       case FILEIO_EINVAL:
11894         return EINVAL;
11895       case FILEIO_ENFILE:
11896         return ENFILE;
11897       case FILEIO_EMFILE:
11898         return EMFILE;
11899       case FILEIO_EFBIG:
11900         return EFBIG;
11901       case FILEIO_ENOSPC:
11902         return ENOSPC;
11903       case FILEIO_ESPIPE:
11904         return ESPIPE;
11905       case FILEIO_EROFS:
11906         return EROFS;
11907       case FILEIO_ENOSYS:
11908         return ENOSYS;
11909       case FILEIO_ENAMETOOLONG:
11910         return ENAMETOOLONG;
11911     }
11912   return -1;
11913 }
11914
11915 static char *
11916 remote_hostio_error (int errnum)
11917 {
11918   int host_error = remote_fileio_errno_to_host (errnum);
11919
11920   if (host_error == -1)
11921     error (_("Unknown remote I/O error %d"), errnum);
11922   else
11923     error (_("Remote I/O error: %s"), safe_strerror (host_error));
11924 }
11925
11926 static void
11927 remote_hostio_close_cleanup (void *opaque)
11928 {
11929   int fd = *(int *) opaque;
11930   int remote_errno;
11931
11932   remote_hostio_close (find_target_at (process_stratum), fd, &remote_errno);
11933 }
11934
11935 void
11936 remote_file_put (const char *local_file, const char *remote_file, int from_tty)
11937 {
11938   struct cleanup *back_to, *close_cleanup;
11939   int retcode, fd, remote_errno, bytes, io_size;
11940   gdb_byte *buffer;
11941   int bytes_in_buffer;
11942   int saw_eof;
11943   ULONGEST offset;
11944   struct remote_state *rs = get_remote_state ();
11945
11946   if (!rs->remote_desc)
11947     error (_("command can only be used with remote target"));
11948
11949   gdb_file_up file = gdb_fopen_cloexec (local_file, "rb");
11950   if (file == NULL)
11951     perror_with_name (local_file);
11952
11953   fd = remote_hostio_open (find_target_at (process_stratum), NULL,
11954                            remote_file, (FILEIO_O_WRONLY | FILEIO_O_CREAT
11955                                          | FILEIO_O_TRUNC),
11956                            0700, 0, &remote_errno);
11957   if (fd == -1)
11958     remote_hostio_error (remote_errno);
11959
11960   /* Send up to this many bytes at once.  They won't all fit in the
11961      remote packet limit, so we'll transfer slightly fewer.  */
11962   io_size = get_remote_packet_size ();
11963   buffer = (gdb_byte *) xmalloc (io_size);
11964   back_to = make_cleanup (xfree, buffer);
11965
11966   close_cleanup = make_cleanup (remote_hostio_close_cleanup, &fd);
11967
11968   bytes_in_buffer = 0;
11969   saw_eof = 0;
11970   offset = 0;
11971   while (bytes_in_buffer || !saw_eof)
11972     {
11973       if (!saw_eof)
11974         {
11975           bytes = fread (buffer + bytes_in_buffer, 1,
11976                          io_size - bytes_in_buffer,
11977                          file.get ());
11978           if (bytes == 0)
11979             {
11980               if (ferror (file.get ()))
11981                 error (_("Error reading %s."), local_file);
11982               else
11983                 {
11984                   /* EOF.  Unless there is something still in the
11985                      buffer from the last iteration, we are done.  */
11986                   saw_eof = 1;
11987                   if (bytes_in_buffer == 0)
11988                     break;
11989                 }
11990             }
11991         }
11992       else
11993         bytes = 0;
11994
11995       bytes += bytes_in_buffer;
11996       bytes_in_buffer = 0;
11997
11998       retcode = remote_hostio_pwrite (find_target_at (process_stratum),
11999                                       fd, buffer, bytes,
12000                                       offset, &remote_errno);
12001
12002       if (retcode < 0)
12003         remote_hostio_error (remote_errno);
12004       else if (retcode == 0)
12005         error (_("Remote write of %d bytes returned 0!"), bytes);
12006       else if (retcode < bytes)
12007         {
12008           /* Short write.  Save the rest of the read data for the next
12009              write.  */
12010           bytes_in_buffer = bytes - retcode;
12011           memmove (buffer, buffer + retcode, bytes_in_buffer);
12012         }
12013
12014       offset += retcode;
12015     }
12016
12017   discard_cleanups (close_cleanup);
12018   if (remote_hostio_close (find_target_at (process_stratum), fd, &remote_errno))
12019     remote_hostio_error (remote_errno);
12020
12021   if (from_tty)
12022     printf_filtered (_("Successfully sent file \"%s\".\n"), local_file);
12023   do_cleanups (back_to);
12024 }
12025
12026 void
12027 remote_file_get (const char *remote_file, const char *local_file, int from_tty)
12028 {
12029   struct cleanup *back_to, *close_cleanup;
12030   int fd, remote_errno, bytes, io_size;
12031   gdb_byte *buffer;
12032   ULONGEST offset;
12033   struct remote_state *rs = get_remote_state ();
12034
12035   if (!rs->remote_desc)
12036     error (_("command can only be used with remote target"));
12037
12038   fd = remote_hostio_open (find_target_at (process_stratum), NULL,
12039                            remote_file, FILEIO_O_RDONLY, 0, 0,
12040                            &remote_errno);
12041   if (fd == -1)
12042     remote_hostio_error (remote_errno);
12043
12044   gdb_file_up file = gdb_fopen_cloexec (local_file, "wb");
12045   if (file == NULL)
12046     perror_with_name (local_file);
12047
12048   /* Send up to this many bytes at once.  They won't all fit in the
12049      remote packet limit, so we'll transfer slightly fewer.  */
12050   io_size = get_remote_packet_size ();
12051   buffer = (gdb_byte *) xmalloc (io_size);
12052   back_to = make_cleanup (xfree, buffer);
12053
12054   close_cleanup = make_cleanup (remote_hostio_close_cleanup, &fd);
12055
12056   offset = 0;
12057   while (1)
12058     {
12059       bytes = remote_hostio_pread (find_target_at (process_stratum),
12060                                    fd, buffer, io_size, offset, &remote_errno);
12061       if (bytes == 0)
12062         /* Success, but no bytes, means end-of-file.  */
12063         break;
12064       if (bytes == -1)
12065         remote_hostio_error (remote_errno);
12066
12067       offset += bytes;
12068
12069       bytes = fwrite (buffer, 1, bytes, file.get ());
12070       if (bytes == 0)
12071         perror_with_name (local_file);
12072     }
12073
12074   discard_cleanups (close_cleanup);
12075   if (remote_hostio_close (find_target_at (process_stratum), fd, &remote_errno))
12076     remote_hostio_error (remote_errno);
12077
12078   if (from_tty)
12079     printf_filtered (_("Successfully fetched file \"%s\".\n"), remote_file);
12080   do_cleanups (back_to);
12081 }
12082
12083 void
12084 remote_file_delete (const char *remote_file, int from_tty)
12085 {
12086   int retcode, remote_errno;
12087   struct remote_state *rs = get_remote_state ();
12088
12089   if (!rs->remote_desc)
12090     error (_("command can only be used with remote target"));
12091
12092   retcode = remote_hostio_unlink (find_target_at (process_stratum),
12093                                   NULL, remote_file, &remote_errno);
12094   if (retcode == -1)
12095     remote_hostio_error (remote_errno);
12096
12097   if (from_tty)
12098     printf_filtered (_("Successfully deleted file \"%s\".\n"), remote_file);
12099 }
12100
12101 static void
12102 remote_put_command (char *args, int from_tty)
12103 {
12104   if (args == NULL)
12105     error_no_arg (_("file to put"));
12106
12107   gdb_argv argv (args);
12108   if (argv[0] == NULL || argv[1] == NULL || argv[2] != NULL)
12109     error (_("Invalid parameters to remote put"));
12110
12111   remote_file_put (argv[0], argv[1], from_tty);
12112 }
12113
12114 static void
12115 remote_get_command (char *args, int from_tty)
12116 {
12117   if (args == NULL)
12118     error_no_arg (_("file to get"));
12119
12120   gdb_argv argv (args);
12121   if (argv[0] == NULL || argv[1] == NULL || argv[2] != NULL)
12122     error (_("Invalid parameters to remote get"));
12123
12124   remote_file_get (argv[0], argv[1], from_tty);
12125 }
12126
12127 static void
12128 remote_delete_command (char *args, int from_tty)
12129 {
12130   if (args == NULL)
12131     error_no_arg (_("file to delete"));
12132
12133   gdb_argv argv (args);
12134   if (argv[0] == NULL || argv[1] != NULL)
12135     error (_("Invalid parameters to remote delete"));
12136
12137   remote_file_delete (argv[0], from_tty);
12138 }
12139
12140 static void
12141 remote_command (char *args, int from_tty)
12142 {
12143   help_list (remote_cmdlist, "remote ", all_commands, gdb_stdout);
12144 }
12145
12146 static int
12147 remote_can_execute_reverse (struct target_ops *self)
12148 {
12149   if (packet_support (PACKET_bs) == PACKET_ENABLE
12150       || packet_support (PACKET_bc) == PACKET_ENABLE)
12151     return 1;
12152   else
12153     return 0;
12154 }
12155
12156 static int
12157 remote_supports_non_stop (struct target_ops *self)
12158 {
12159   return 1;
12160 }
12161
12162 static int
12163 remote_supports_disable_randomization (struct target_ops *self)
12164 {
12165   /* Only supported in extended mode.  */
12166   return 0;
12167 }
12168
12169 static int
12170 remote_supports_multi_process (struct target_ops *self)
12171 {
12172   struct remote_state *rs = get_remote_state ();
12173
12174   return remote_multi_process_p (rs);
12175 }
12176
12177 static int
12178 remote_supports_cond_tracepoints (void)
12179 {
12180   return packet_support (PACKET_ConditionalTracepoints) == PACKET_ENABLE;
12181 }
12182
12183 static int
12184 remote_supports_cond_breakpoints (struct target_ops *self)
12185 {
12186   return packet_support (PACKET_ConditionalBreakpoints) == PACKET_ENABLE;
12187 }
12188
12189 static int
12190 remote_supports_fast_tracepoints (void)
12191 {
12192   return packet_support (PACKET_FastTracepoints) == PACKET_ENABLE;
12193 }
12194
12195 static int
12196 remote_supports_static_tracepoints (void)
12197 {
12198   return packet_support (PACKET_StaticTracepoints) == PACKET_ENABLE;
12199 }
12200
12201 static int
12202 remote_supports_install_in_trace (void)
12203 {
12204   return packet_support (PACKET_InstallInTrace) == PACKET_ENABLE;
12205 }
12206
12207 static int
12208 remote_supports_enable_disable_tracepoint (struct target_ops *self)
12209 {
12210   return (packet_support (PACKET_EnableDisableTracepoints_feature)
12211           == PACKET_ENABLE);
12212 }
12213
12214 static int
12215 remote_supports_string_tracing (struct target_ops *self)
12216 {
12217   return packet_support (PACKET_tracenz_feature) == PACKET_ENABLE;
12218 }
12219
12220 static int
12221 remote_can_run_breakpoint_commands (struct target_ops *self)
12222 {
12223   return packet_support (PACKET_BreakpointCommands) == PACKET_ENABLE;
12224 }
12225
12226 static void
12227 remote_trace_init (struct target_ops *self)
12228 {
12229   putpkt ("QTinit");
12230   remote_get_noisy_reply (&target_buf, &target_buf_size);
12231   if (strcmp (target_buf, "OK") != 0)
12232     error (_("Target does not support this command."));
12233 }
12234
12235 static void free_actions_list (char **actions_list);
12236 static void free_actions_list_cleanup_wrapper (void *);
12237 static void
12238 free_actions_list_cleanup_wrapper (void *al)
12239 {
12240   free_actions_list ((char **) al);
12241 }
12242
12243 static void
12244 free_actions_list (char **actions_list)
12245 {
12246   int ndx;
12247
12248   if (actions_list == 0)
12249     return;
12250
12251   for (ndx = 0; actions_list[ndx]; ndx++)
12252     xfree (actions_list[ndx]);
12253
12254   xfree (actions_list);
12255 }
12256
12257 /* Recursive routine to walk through command list including loops, and
12258    download packets for each command.  */
12259
12260 static void
12261 remote_download_command_source (int num, ULONGEST addr,
12262                                 struct command_line *cmds)
12263 {
12264   struct remote_state *rs = get_remote_state ();
12265   struct command_line *cmd;
12266
12267   for (cmd = cmds; cmd; cmd = cmd->next)
12268     {
12269       QUIT;     /* Allow user to bail out with ^C.  */
12270       strcpy (rs->buf, "QTDPsrc:");
12271       encode_source_string (num, addr, "cmd", cmd->line,
12272                             rs->buf + strlen (rs->buf),
12273                             rs->buf_size - strlen (rs->buf));
12274       putpkt (rs->buf);
12275       remote_get_noisy_reply (&target_buf, &target_buf_size);
12276       if (strcmp (target_buf, "OK"))
12277         warning (_("Target does not support source download."));
12278
12279       if (cmd->control_type == while_control
12280           || cmd->control_type == while_stepping_control)
12281         {
12282           remote_download_command_source (num, addr, *cmd->body_list);
12283
12284           QUIT; /* Allow user to bail out with ^C.  */
12285           strcpy (rs->buf, "QTDPsrc:");
12286           encode_source_string (num, addr, "cmd", "end",
12287                                 rs->buf + strlen (rs->buf),
12288                                 rs->buf_size - strlen (rs->buf));
12289           putpkt (rs->buf);
12290           remote_get_noisy_reply (&target_buf, &target_buf_size);
12291           if (strcmp (target_buf, "OK"))
12292             warning (_("Target does not support source download."));
12293         }
12294     }
12295 }
12296
12297 static void
12298 remote_download_tracepoint (struct target_ops *self, struct bp_location *loc)
12299 {
12300 #define BUF_SIZE 2048
12301
12302   CORE_ADDR tpaddr;
12303   char addrbuf[40];
12304   char buf[BUF_SIZE];
12305   char **tdp_actions;
12306   char **stepping_actions;
12307   int ndx;
12308   struct cleanup *old_chain = NULL;
12309   char *pkt;
12310   struct breakpoint *b = loc->owner;
12311   struct tracepoint *t = (struct tracepoint *) b;
12312
12313   encode_actions_rsp (loc, &tdp_actions, &stepping_actions);
12314   old_chain = make_cleanup (free_actions_list_cleanup_wrapper,
12315                             tdp_actions);
12316   (void) make_cleanup (free_actions_list_cleanup_wrapper,
12317                        stepping_actions);
12318
12319   tpaddr = loc->address;
12320   sprintf_vma (addrbuf, tpaddr);
12321   xsnprintf (buf, BUF_SIZE, "QTDP:%x:%s:%c:%lx:%x", b->number,
12322              addrbuf, /* address */
12323              (b->enable_state == bp_enabled ? 'E' : 'D'),
12324              t->step_count, t->pass_count);
12325   /* Fast tracepoints are mostly handled by the target, but we can
12326      tell the target how big of an instruction block should be moved
12327      around.  */
12328   if (b->type == bp_fast_tracepoint)
12329     {
12330       /* Only test for support at download time; we may not know
12331          target capabilities at definition time.  */
12332       if (remote_supports_fast_tracepoints ())
12333         {
12334           if (gdbarch_fast_tracepoint_valid_at (loc->gdbarch, tpaddr,
12335                                                 NULL))
12336             xsnprintf (buf + strlen (buf), BUF_SIZE - strlen (buf), ":F%x",
12337                        gdb_insn_length (loc->gdbarch, tpaddr));
12338           else
12339             /* If it passed validation at definition but fails now,
12340                something is very wrong.  */
12341             internal_error (__FILE__, __LINE__,
12342                             _("Fast tracepoint not "
12343                               "valid during download"));
12344         }
12345       else
12346         /* Fast tracepoints are functionally identical to regular
12347            tracepoints, so don't take lack of support as a reason to
12348            give up on the trace run.  */
12349         warning (_("Target does not support fast tracepoints, "
12350                    "downloading %d as regular tracepoint"), b->number);
12351     }
12352   else if (b->type == bp_static_tracepoint)
12353     {
12354       /* Only test for support at download time; we may not know
12355          target capabilities at definition time.  */
12356       if (remote_supports_static_tracepoints ())
12357         {
12358           struct static_tracepoint_marker marker;
12359
12360           if (target_static_tracepoint_marker_at (tpaddr, &marker))
12361             strcat (buf, ":S");
12362           else
12363             error (_("Static tracepoint not valid during download"));
12364         }
12365       else
12366         /* Fast tracepoints are functionally identical to regular
12367            tracepoints, so don't take lack of support as a reason
12368            to give up on the trace run.  */
12369         error (_("Target does not support static tracepoints"));
12370     }
12371   /* If the tracepoint has a conditional, make it into an agent
12372      expression and append to the definition.  */
12373   if (loc->cond)
12374     {
12375       /* Only test support at download time, we may not know target
12376          capabilities at definition time.  */
12377       if (remote_supports_cond_tracepoints ())
12378         {
12379           agent_expr_up aexpr = gen_eval_for_expr (tpaddr, loc->cond.get ());
12380           xsnprintf (buf + strlen (buf), BUF_SIZE - strlen (buf), ":X%x,",
12381                      aexpr->len);
12382           pkt = buf + strlen (buf);
12383           for (ndx = 0; ndx < aexpr->len; ++ndx)
12384             pkt = pack_hex_byte (pkt, aexpr->buf[ndx]);
12385           *pkt = '\0';
12386         }
12387       else
12388         warning (_("Target does not support conditional tracepoints, "
12389                    "ignoring tp %d cond"), b->number);
12390     }
12391
12392   if (b->commands || *default_collect)
12393     strcat (buf, "-");
12394   putpkt (buf);
12395   remote_get_noisy_reply (&target_buf, &target_buf_size);
12396   if (strcmp (target_buf, "OK"))
12397     error (_("Target does not support tracepoints."));
12398
12399   /* do_single_steps (t); */
12400   if (tdp_actions)
12401     {
12402       for (ndx = 0; tdp_actions[ndx]; ndx++)
12403         {
12404           QUIT; /* Allow user to bail out with ^C.  */
12405           xsnprintf (buf, BUF_SIZE, "QTDP:-%x:%s:%s%c",
12406                      b->number, addrbuf, /* address */
12407                      tdp_actions[ndx],
12408                      ((tdp_actions[ndx + 1] || stepping_actions)
12409                       ? '-' : 0));
12410           putpkt (buf);
12411           remote_get_noisy_reply (&target_buf,
12412                                   &target_buf_size);
12413           if (strcmp (target_buf, "OK"))
12414             error (_("Error on target while setting tracepoints."));
12415         }
12416     }
12417   if (stepping_actions)
12418     {
12419       for (ndx = 0; stepping_actions[ndx]; ndx++)
12420         {
12421           QUIT; /* Allow user to bail out with ^C.  */
12422           xsnprintf (buf, BUF_SIZE, "QTDP:-%x:%s:%s%s%s",
12423                      b->number, addrbuf, /* address */
12424                      ((ndx == 0) ? "S" : ""),
12425                      stepping_actions[ndx],
12426                      (stepping_actions[ndx + 1] ? "-" : ""));
12427           putpkt (buf);
12428           remote_get_noisy_reply (&target_buf,
12429                                   &target_buf_size);
12430           if (strcmp (target_buf, "OK"))
12431             error (_("Error on target while setting tracepoints."));
12432         }
12433     }
12434
12435   if (packet_support (PACKET_TracepointSource) == PACKET_ENABLE)
12436     {
12437       if (b->location != NULL)
12438         {
12439           strcpy (buf, "QTDPsrc:");
12440           encode_source_string (b->number, loc->address, "at",
12441                                 event_location_to_string (b->location.get ()),
12442                                 buf + strlen (buf), 2048 - strlen (buf));
12443           putpkt (buf);
12444           remote_get_noisy_reply (&target_buf, &target_buf_size);
12445           if (strcmp (target_buf, "OK"))
12446             warning (_("Target does not support source download."));
12447         }
12448       if (b->cond_string)
12449         {
12450           strcpy (buf, "QTDPsrc:");
12451           encode_source_string (b->number, loc->address,
12452                                 "cond", b->cond_string, buf + strlen (buf),
12453                                 2048 - strlen (buf));
12454           putpkt (buf);
12455           remote_get_noisy_reply (&target_buf, &target_buf_size);
12456           if (strcmp (target_buf, "OK"))
12457             warning (_("Target does not support source download."));
12458         }
12459       remote_download_command_source (b->number, loc->address,
12460                                       breakpoint_commands (b));
12461     }
12462
12463   do_cleanups (old_chain);
12464 }
12465
12466 static int
12467 remote_can_download_tracepoint (struct target_ops *self)
12468 {
12469   struct remote_state *rs = get_remote_state ();
12470   struct trace_status *ts;
12471   int status;
12472
12473   /* Don't try to install tracepoints until we've relocated our
12474      symbols, and fetched and merged the target's tracepoint list with
12475      ours.  */
12476   if (rs->starting_up)
12477     return 0;
12478
12479   ts = current_trace_status ();
12480   status = remote_get_trace_status (self, ts);
12481
12482   if (status == -1 || !ts->running_known || !ts->running)
12483     return 0;
12484
12485   /* If we are in a tracing experiment, but remote stub doesn't support
12486      installing tracepoint in trace, we have to return.  */
12487   if (!remote_supports_install_in_trace ())
12488     return 0;
12489
12490   return 1;
12491 }
12492
12493
12494 static void
12495 remote_download_trace_state_variable (struct target_ops *self,
12496                                       struct trace_state_variable *tsv)
12497 {
12498   struct remote_state *rs = get_remote_state ();
12499   char *p;
12500
12501   xsnprintf (rs->buf, get_remote_packet_size (), "QTDV:%x:%s:%x:",
12502              tsv->number, phex ((ULONGEST) tsv->initial_value, 8),
12503              tsv->builtin);
12504   p = rs->buf + strlen (rs->buf);
12505   if ((p - rs->buf) + strlen (tsv->name) * 2 >= get_remote_packet_size ())
12506     error (_("Trace state variable name too long for tsv definition packet"));
12507   p += 2 * bin2hex ((gdb_byte *) (tsv->name), p, strlen (tsv->name));
12508   *p++ = '\0';
12509   putpkt (rs->buf);
12510   remote_get_noisy_reply (&target_buf, &target_buf_size);
12511   if (*target_buf == '\0')
12512     error (_("Target does not support this command."));
12513   if (strcmp (target_buf, "OK") != 0)
12514     error (_("Error on target while downloading trace state variable."));
12515 }
12516
12517 static void
12518 remote_enable_tracepoint (struct target_ops *self,
12519                           struct bp_location *location)
12520 {
12521   struct remote_state *rs = get_remote_state ();
12522   char addr_buf[40];
12523
12524   sprintf_vma (addr_buf, location->address);
12525   xsnprintf (rs->buf, get_remote_packet_size (), "QTEnable:%x:%s",
12526              location->owner->number, addr_buf);
12527   putpkt (rs->buf);
12528   remote_get_noisy_reply (&rs->buf, &rs->buf_size);
12529   if (*rs->buf == '\0')
12530     error (_("Target does not support enabling tracepoints while a trace run is ongoing."));
12531   if (strcmp (rs->buf, "OK") != 0)
12532     error (_("Error on target while enabling tracepoint."));
12533 }
12534
12535 static void
12536 remote_disable_tracepoint (struct target_ops *self,
12537                            struct bp_location *location)
12538 {
12539   struct remote_state *rs = get_remote_state ();
12540   char addr_buf[40];
12541
12542   sprintf_vma (addr_buf, location->address);
12543   xsnprintf (rs->buf, get_remote_packet_size (), "QTDisable:%x:%s",
12544              location->owner->number, addr_buf);
12545   putpkt (rs->buf);
12546   remote_get_noisy_reply (&rs->buf, &rs->buf_size);
12547   if (*rs->buf == '\0')
12548     error (_("Target does not support disabling tracepoints while a trace run is ongoing."));
12549   if (strcmp (rs->buf, "OK") != 0)
12550     error (_("Error on target while disabling tracepoint."));
12551 }
12552
12553 static void
12554 remote_trace_set_readonly_regions (struct target_ops *self)
12555 {
12556   asection *s;
12557   bfd *abfd = NULL;
12558   bfd_size_type size;
12559   bfd_vma vma;
12560   int anysecs = 0;
12561   int offset = 0;
12562
12563   if (!exec_bfd)
12564     return;                     /* No information to give.  */
12565
12566   strcpy (target_buf, "QTro");
12567   offset = strlen (target_buf);
12568   for (s = exec_bfd->sections; s; s = s->next)
12569     {
12570       char tmp1[40], tmp2[40];
12571       int sec_length;
12572
12573       if ((s->flags & SEC_LOAD) == 0 ||
12574       /*  (s->flags & SEC_CODE) == 0 || */
12575           (s->flags & SEC_READONLY) == 0)
12576         continue;
12577
12578       anysecs = 1;
12579       vma = bfd_get_section_vma (abfd, s);
12580       size = bfd_get_section_size (s);
12581       sprintf_vma (tmp1, vma);
12582       sprintf_vma (tmp2, vma + size);
12583       sec_length = 1 + strlen (tmp1) + 1 + strlen (tmp2);
12584       if (offset + sec_length + 1 > target_buf_size)
12585         {
12586           if (packet_support (PACKET_qXfer_traceframe_info) != PACKET_ENABLE)
12587             warning (_("\
12588 Too many sections for read-only sections definition packet."));
12589           break;
12590         }
12591       xsnprintf (target_buf + offset, target_buf_size - offset, ":%s,%s",
12592                  tmp1, tmp2);
12593       offset += sec_length;
12594     }
12595   if (anysecs)
12596     {
12597       putpkt (target_buf);
12598       getpkt (&target_buf, &target_buf_size, 0);
12599     }
12600 }
12601
12602 static void
12603 remote_trace_start (struct target_ops *self)
12604 {
12605   putpkt ("QTStart");
12606   remote_get_noisy_reply (&target_buf, &target_buf_size);
12607   if (*target_buf == '\0')
12608     error (_("Target does not support this command."));
12609   if (strcmp (target_buf, "OK") != 0)
12610     error (_("Bogus reply from target: %s"), target_buf);
12611 }
12612
12613 static int
12614 remote_get_trace_status (struct target_ops *self, struct trace_status *ts)
12615 {
12616   /* Initialize it just to avoid a GCC false warning.  */
12617   char *p = NULL;
12618   /* FIXME we need to get register block size some other way.  */
12619   extern int trace_regblock_size;
12620   enum packet_result result;
12621
12622   if (packet_support (PACKET_qTStatus) == PACKET_DISABLE)
12623     return -1;
12624
12625   trace_regblock_size = get_remote_arch_state ()->sizeof_g_packet;
12626
12627   putpkt ("qTStatus");
12628
12629   TRY
12630     {
12631       p = remote_get_noisy_reply (&target_buf, &target_buf_size);
12632     }
12633   CATCH (ex, RETURN_MASK_ERROR)
12634     {
12635       if (ex.error != TARGET_CLOSE_ERROR)
12636         {
12637           exception_fprintf (gdb_stderr, ex, "qTStatus: ");
12638           return -1;
12639         }
12640       throw_exception (ex);
12641     }
12642   END_CATCH
12643
12644   result = packet_ok (p, &remote_protocol_packets[PACKET_qTStatus]);
12645
12646   /* If the remote target doesn't do tracing, flag it.  */
12647   if (result == PACKET_UNKNOWN)
12648     return -1;
12649
12650   /* We're working with a live target.  */
12651   ts->filename = NULL;
12652
12653   if (*p++ != 'T')
12654     error (_("Bogus trace status reply from target: %s"), target_buf);
12655
12656   /* Function 'parse_trace_status' sets default value of each field of
12657      'ts' at first, so we don't have to do it here.  */
12658   parse_trace_status (p, ts);
12659
12660   return ts->running;
12661 }
12662
12663 static void
12664 remote_get_tracepoint_status (struct target_ops *self, struct breakpoint *bp,
12665                               struct uploaded_tp *utp)
12666 {
12667   struct remote_state *rs = get_remote_state ();
12668   char *reply;
12669   struct bp_location *loc;
12670   struct tracepoint *tp = (struct tracepoint *) bp;
12671   size_t size = get_remote_packet_size ();
12672
12673   if (tp)
12674     {
12675       tp->hit_count = 0;
12676       tp->traceframe_usage = 0;
12677       for (loc = tp->loc; loc; loc = loc->next)
12678         {
12679           /* If the tracepoint was never downloaded, don't go asking for
12680              any status.  */
12681           if (tp->number_on_target == 0)
12682             continue;
12683           xsnprintf (rs->buf, size, "qTP:%x:%s", tp->number_on_target,
12684                      phex_nz (loc->address, 0));
12685           putpkt (rs->buf);
12686           reply = remote_get_noisy_reply (&target_buf, &target_buf_size);
12687           if (reply && *reply)
12688             {
12689               if (*reply == 'V')
12690                 parse_tracepoint_status (reply + 1, bp, utp);
12691             }
12692         }
12693     }
12694   else if (utp)
12695     {
12696       utp->hit_count = 0;
12697       utp->traceframe_usage = 0;
12698       xsnprintf (rs->buf, size, "qTP:%x:%s", utp->number,
12699                  phex_nz (utp->addr, 0));
12700       putpkt (rs->buf);
12701       reply = remote_get_noisy_reply (&target_buf, &target_buf_size);
12702       if (reply && *reply)
12703         {
12704           if (*reply == 'V')
12705             parse_tracepoint_status (reply + 1, bp, utp);
12706         }
12707     }
12708 }
12709
12710 static void
12711 remote_trace_stop (struct target_ops *self)
12712 {
12713   putpkt ("QTStop");
12714   remote_get_noisy_reply (&target_buf, &target_buf_size);
12715   if (*target_buf == '\0')
12716     error (_("Target does not support this command."));
12717   if (strcmp (target_buf, "OK") != 0)
12718     error (_("Bogus reply from target: %s"), target_buf);
12719 }
12720
12721 static int
12722 remote_trace_find (struct target_ops *self,
12723                    enum trace_find_type type, int num,
12724                    CORE_ADDR addr1, CORE_ADDR addr2,
12725                    int *tpp)
12726 {
12727   struct remote_state *rs = get_remote_state ();
12728   char *endbuf = rs->buf + get_remote_packet_size ();
12729   char *p, *reply;
12730   int target_frameno = -1, target_tracept = -1;
12731
12732   /* Lookups other than by absolute frame number depend on the current
12733      trace selected, so make sure it is correct on the remote end
12734      first.  */
12735   if (type != tfind_number)
12736     set_remote_traceframe ();
12737
12738   p = rs->buf;
12739   strcpy (p, "QTFrame:");
12740   p = strchr (p, '\0');
12741   switch (type)
12742     {
12743     case tfind_number:
12744       xsnprintf (p, endbuf - p, "%x", num);
12745       break;
12746     case tfind_pc:
12747       xsnprintf (p, endbuf - p, "pc:%s", phex_nz (addr1, 0));
12748       break;
12749     case tfind_tp:
12750       xsnprintf (p, endbuf - p, "tdp:%x", num);
12751       break;
12752     case tfind_range:
12753       xsnprintf (p, endbuf - p, "range:%s:%s", phex_nz (addr1, 0),
12754                  phex_nz (addr2, 0));
12755       break;
12756     case tfind_outside:
12757       xsnprintf (p, endbuf - p, "outside:%s:%s", phex_nz (addr1, 0),
12758                  phex_nz (addr2, 0));
12759       break;
12760     default:
12761       error (_("Unknown trace find type %d"), type);
12762     }
12763
12764   putpkt (rs->buf);
12765   reply = remote_get_noisy_reply (&(rs->buf), &rs->buf_size);
12766   if (*reply == '\0')
12767     error (_("Target does not support this command."));
12768
12769   while (reply && *reply)
12770     switch (*reply)
12771       {
12772       case 'F':
12773         p = ++reply;
12774         target_frameno = (int) strtol (p, &reply, 16);
12775         if (reply == p)
12776           error (_("Unable to parse trace frame number"));
12777         /* Don't update our remote traceframe number cache on failure
12778            to select a remote traceframe.  */
12779         if (target_frameno == -1)
12780           return -1;
12781         break;
12782       case 'T':
12783         p = ++reply;
12784         target_tracept = (int) strtol (p, &reply, 16);
12785         if (reply == p)
12786           error (_("Unable to parse tracepoint number"));
12787         break;
12788       case 'O':         /* "OK"? */
12789         if (reply[1] == 'K' && reply[2] == '\0')
12790           reply += 2;
12791         else
12792           error (_("Bogus reply from target: %s"), reply);
12793         break;
12794       default:
12795         error (_("Bogus reply from target: %s"), reply);
12796       }
12797   if (tpp)
12798     *tpp = target_tracept;
12799
12800   rs->remote_traceframe_number = target_frameno;
12801   return target_frameno;
12802 }
12803
12804 static int
12805 remote_get_trace_state_variable_value (struct target_ops *self,
12806                                        int tsvnum, LONGEST *val)
12807 {
12808   struct remote_state *rs = get_remote_state ();
12809   char *reply;
12810   ULONGEST uval;
12811
12812   set_remote_traceframe ();
12813
12814   xsnprintf (rs->buf, get_remote_packet_size (), "qTV:%x", tsvnum);
12815   putpkt (rs->buf);
12816   reply = remote_get_noisy_reply (&target_buf, &target_buf_size);
12817   if (reply && *reply)
12818     {
12819       if (*reply == 'V')
12820         {
12821           unpack_varlen_hex (reply + 1, &uval);
12822           *val = (LONGEST) uval;
12823           return 1;
12824         }
12825     }
12826   return 0;
12827 }
12828
12829 static int
12830 remote_save_trace_data (struct target_ops *self, const char *filename)
12831 {
12832   struct remote_state *rs = get_remote_state ();
12833   char *p, *reply;
12834
12835   p = rs->buf;
12836   strcpy (p, "QTSave:");
12837   p += strlen (p);
12838   if ((p - rs->buf) + strlen (filename) * 2 >= get_remote_packet_size ())
12839     error (_("Remote file name too long for trace save packet"));
12840   p += 2 * bin2hex ((gdb_byte *) filename, p, strlen (filename));
12841   *p++ = '\0';
12842   putpkt (rs->buf);
12843   reply = remote_get_noisy_reply (&target_buf, &target_buf_size);
12844   if (*reply == '\0')
12845     error (_("Target does not support this command."));
12846   if (strcmp (reply, "OK") != 0)
12847     error (_("Bogus reply from target: %s"), reply);
12848   return 0;
12849 }
12850
12851 /* This is basically a memory transfer, but needs to be its own packet
12852    because we don't know how the target actually organizes its trace
12853    memory, plus we want to be able to ask for as much as possible, but
12854    not be unhappy if we don't get as much as we ask for.  */
12855
12856 static LONGEST
12857 remote_get_raw_trace_data (struct target_ops *self,
12858                            gdb_byte *buf, ULONGEST offset, LONGEST len)
12859 {
12860   struct remote_state *rs = get_remote_state ();
12861   char *reply;
12862   char *p;
12863   int rslt;
12864
12865   p = rs->buf;
12866   strcpy (p, "qTBuffer:");
12867   p += strlen (p);
12868   p += hexnumstr (p, offset);
12869   *p++ = ',';
12870   p += hexnumstr (p, len);
12871   *p++ = '\0';
12872
12873   putpkt (rs->buf);
12874   reply = remote_get_noisy_reply (&target_buf, &target_buf_size);
12875   if (reply && *reply)
12876     {
12877       /* 'l' by itself means we're at the end of the buffer and
12878          there is nothing more to get.  */
12879       if (*reply == 'l')
12880         return 0;
12881
12882       /* Convert the reply into binary.  Limit the number of bytes to
12883          convert according to our passed-in buffer size, rather than
12884          what was returned in the packet; if the target is
12885          unexpectedly generous and gives us a bigger reply than we
12886          asked for, we don't want to crash.  */
12887       rslt = hex2bin (target_buf, buf, len);
12888       return rslt;
12889     }
12890
12891   /* Something went wrong, flag as an error.  */
12892   return -1;
12893 }
12894
12895 static void
12896 remote_set_disconnected_tracing (struct target_ops *self, int val)
12897 {
12898   struct remote_state *rs = get_remote_state ();
12899
12900   if (packet_support (PACKET_DisconnectedTracing_feature) == PACKET_ENABLE)
12901     {
12902       char *reply;
12903
12904       xsnprintf (rs->buf, get_remote_packet_size (), "QTDisconnected:%x", val);
12905       putpkt (rs->buf);
12906       reply = remote_get_noisy_reply (&target_buf, &target_buf_size);
12907       if (*reply == '\0')
12908         error (_("Target does not support this command."));
12909       if (strcmp (reply, "OK") != 0)
12910         error (_("Bogus reply from target: %s"), reply);
12911     }
12912   else if (val)
12913     warning (_("Target does not support disconnected tracing."));
12914 }
12915
12916 static int
12917 remote_core_of_thread (struct target_ops *ops, ptid_t ptid)
12918 {
12919   struct thread_info *info = find_thread_ptid (ptid);
12920
12921   if (info && info->priv)
12922     return info->priv->core;
12923   return -1;
12924 }
12925
12926 static void
12927 remote_set_circular_trace_buffer (struct target_ops *self, int val)
12928 {
12929   struct remote_state *rs = get_remote_state ();
12930   char *reply;
12931
12932   xsnprintf (rs->buf, get_remote_packet_size (), "QTBuffer:circular:%x", val);
12933   putpkt (rs->buf);
12934   reply = remote_get_noisy_reply (&target_buf, &target_buf_size);
12935   if (*reply == '\0')
12936     error (_("Target does not support this command."));
12937   if (strcmp (reply, "OK") != 0)
12938     error (_("Bogus reply from target: %s"), reply);
12939 }
12940
12941 static struct traceframe_info *
12942 remote_traceframe_info (struct target_ops *self)
12943 {
12944   char *text;
12945
12946   text = target_read_stralloc (&current_target,
12947                                TARGET_OBJECT_TRACEFRAME_INFO, NULL);
12948   if (text != NULL)
12949     {
12950       struct traceframe_info *info;
12951       struct cleanup *back_to = make_cleanup (xfree, text);
12952
12953       info = parse_traceframe_info (text);
12954       do_cleanups (back_to);
12955       return info;
12956     }
12957
12958   return NULL;
12959 }
12960
12961 /* Handle the qTMinFTPILen packet.  Returns the minimum length of
12962    instruction on which a fast tracepoint may be placed.  Returns -1
12963    if the packet is not supported, and 0 if the minimum instruction
12964    length is unknown.  */
12965
12966 static int
12967 remote_get_min_fast_tracepoint_insn_len (struct target_ops *self)
12968 {
12969   struct remote_state *rs = get_remote_state ();
12970   char *reply;
12971
12972   /* If we're not debugging a process yet, the IPA can't be
12973      loaded.  */
12974   if (!target_has_execution)
12975     return 0;
12976
12977   /* Make sure the remote is pointing at the right process.  */
12978   set_general_process ();
12979
12980   xsnprintf (rs->buf, get_remote_packet_size (), "qTMinFTPILen");
12981   putpkt (rs->buf);
12982   reply = remote_get_noisy_reply (&target_buf, &target_buf_size);
12983   if (*reply == '\0')
12984     return -1;
12985   else
12986     {
12987       ULONGEST min_insn_len;
12988
12989       unpack_varlen_hex (reply, &min_insn_len);
12990
12991       return (int) min_insn_len;
12992     }
12993 }
12994
12995 static void
12996 remote_set_trace_buffer_size (struct target_ops *self, LONGEST val)
12997 {
12998   if (packet_support (PACKET_QTBuffer_size) != PACKET_DISABLE)
12999     {
13000       struct remote_state *rs = get_remote_state ();
13001       char *buf = rs->buf;
13002       char *endbuf = rs->buf + get_remote_packet_size ();
13003       enum packet_result result;
13004
13005       gdb_assert (val >= 0 || val == -1);
13006       buf += xsnprintf (buf, endbuf - buf, "QTBuffer:size:");
13007       /* Send -1 as literal "-1" to avoid host size dependency.  */
13008       if (val < 0)
13009         {
13010           *buf++ = '-';
13011           buf += hexnumstr (buf, (ULONGEST) -val);
13012         }
13013       else
13014         buf += hexnumstr (buf, (ULONGEST) val);
13015
13016       putpkt (rs->buf);
13017       remote_get_noisy_reply (&rs->buf, &rs->buf_size);
13018       result = packet_ok (rs->buf,
13019                   &remote_protocol_packets[PACKET_QTBuffer_size]);
13020
13021       if (result != PACKET_OK)
13022         warning (_("Bogus reply from target: %s"), rs->buf);
13023     }
13024 }
13025
13026 static int
13027 remote_set_trace_notes (struct target_ops *self,
13028                         const char *user, const char *notes,
13029                         const char *stop_notes)
13030 {
13031   struct remote_state *rs = get_remote_state ();
13032   char *reply;
13033   char *buf = rs->buf;
13034   char *endbuf = rs->buf + get_remote_packet_size ();
13035   int nbytes;
13036
13037   buf += xsnprintf (buf, endbuf - buf, "QTNotes:");
13038   if (user)
13039     {
13040       buf += xsnprintf (buf, endbuf - buf, "user:");
13041       nbytes = bin2hex ((gdb_byte *) user, buf, strlen (user));
13042       buf += 2 * nbytes;
13043       *buf++ = ';';
13044     }
13045   if (notes)
13046     {
13047       buf += xsnprintf (buf, endbuf - buf, "notes:");
13048       nbytes = bin2hex ((gdb_byte *) notes, buf, strlen (notes));
13049       buf += 2 * nbytes;
13050       *buf++ = ';';
13051     }
13052   if (stop_notes)
13053     {
13054       buf += xsnprintf (buf, endbuf - buf, "tstop:");
13055       nbytes = bin2hex ((gdb_byte *) stop_notes, buf, strlen (stop_notes));
13056       buf += 2 * nbytes;
13057       *buf++ = ';';
13058     }
13059   /* Ensure the buffer is terminated.  */
13060   *buf = '\0';
13061
13062   putpkt (rs->buf);
13063   reply = remote_get_noisy_reply (&target_buf, &target_buf_size);
13064   if (*reply == '\0')
13065     return 0;
13066
13067   if (strcmp (reply, "OK") != 0)
13068     error (_("Bogus reply from target: %s"), reply);
13069
13070   return 1;
13071 }
13072
13073 static int
13074 remote_use_agent (struct target_ops *self, int use)
13075 {
13076   if (packet_support (PACKET_QAgent) != PACKET_DISABLE)
13077     {
13078       struct remote_state *rs = get_remote_state ();
13079
13080       /* If the stub supports QAgent.  */
13081       xsnprintf (rs->buf, get_remote_packet_size (), "QAgent:%d", use);
13082       putpkt (rs->buf);
13083       getpkt (&rs->buf, &rs->buf_size, 0);
13084
13085       if (strcmp (rs->buf, "OK") == 0)
13086         {
13087           use_agent = use;
13088           return 1;
13089         }
13090     }
13091
13092   return 0;
13093 }
13094
13095 static int
13096 remote_can_use_agent (struct target_ops *self)
13097 {
13098   return (packet_support (PACKET_QAgent) != PACKET_DISABLE);
13099 }
13100
13101 struct btrace_target_info
13102 {
13103   /* The ptid of the traced thread.  */
13104   ptid_t ptid;
13105
13106   /* The obtained branch trace configuration.  */
13107   struct btrace_config conf;
13108 };
13109
13110 /* Reset our idea of our target's btrace configuration.  */
13111
13112 static void
13113 remote_btrace_reset (void)
13114 {
13115   struct remote_state *rs = get_remote_state ();
13116
13117   memset (&rs->btrace_config, 0, sizeof (rs->btrace_config));
13118 }
13119
13120 /* Check whether the target supports branch tracing.  */
13121
13122 static int
13123 remote_supports_btrace (struct target_ops *self, enum btrace_format format)
13124 {
13125   if (packet_support (PACKET_Qbtrace_off) != PACKET_ENABLE)
13126     return 0;
13127   if (packet_support (PACKET_qXfer_btrace) != PACKET_ENABLE)
13128     return 0;
13129
13130   switch (format)
13131     {
13132       case BTRACE_FORMAT_NONE:
13133         return 0;
13134
13135       case BTRACE_FORMAT_BTS:
13136         return (packet_support (PACKET_Qbtrace_bts) == PACKET_ENABLE);
13137
13138       case BTRACE_FORMAT_PT:
13139         /* The trace is decoded on the host.  Even if our target supports it,
13140            we still need to have libipt to decode the trace.  */
13141 #if defined (HAVE_LIBIPT)
13142         return (packet_support (PACKET_Qbtrace_pt) == PACKET_ENABLE);
13143 #else /* !defined (HAVE_LIBIPT)  */
13144         return 0;
13145 #endif /* !defined (HAVE_LIBIPT)  */
13146     }
13147
13148   internal_error (__FILE__, __LINE__, _("Unknown branch trace format"));
13149 }
13150
13151 /* Synchronize the configuration with the target.  */
13152
13153 static void
13154 btrace_sync_conf (const struct btrace_config *conf)
13155 {
13156   struct packet_config *packet;
13157   struct remote_state *rs;
13158   char *buf, *pos, *endbuf;
13159
13160   rs = get_remote_state ();
13161   buf = rs->buf;
13162   endbuf = buf + get_remote_packet_size ();
13163
13164   packet = &remote_protocol_packets[PACKET_Qbtrace_conf_bts_size];
13165   if (packet_config_support (packet) == PACKET_ENABLE
13166       && conf->bts.size != rs->btrace_config.bts.size)
13167     {
13168       pos = buf;
13169       pos += xsnprintf (pos, endbuf - pos, "%s=0x%x", packet->name,
13170                         conf->bts.size);
13171
13172       putpkt (buf);
13173       getpkt (&buf, &rs->buf_size, 0);
13174
13175       if (packet_ok (buf, packet) == PACKET_ERROR)
13176         {
13177           if (buf[0] == 'E' && buf[1] == '.')
13178             error (_("Failed to configure the BTS buffer size: %s"), buf + 2);
13179           else
13180             error (_("Failed to configure the BTS buffer size."));
13181         }
13182
13183       rs->btrace_config.bts.size = conf->bts.size;
13184     }
13185
13186   packet = &remote_protocol_packets[PACKET_Qbtrace_conf_pt_size];
13187   if (packet_config_support (packet) == PACKET_ENABLE
13188       && conf->pt.size != rs->btrace_config.pt.size)
13189     {
13190       pos = buf;
13191       pos += xsnprintf (pos, endbuf - pos, "%s=0x%x", packet->name,
13192                         conf->pt.size);
13193
13194       putpkt (buf);
13195       getpkt (&buf, &rs->buf_size, 0);
13196
13197       if (packet_ok (buf, packet) == PACKET_ERROR)
13198         {
13199           if (buf[0] == 'E' && buf[1] == '.')
13200             error (_("Failed to configure the trace buffer size: %s"), buf + 2);
13201           else
13202             error (_("Failed to configure the trace buffer size."));
13203         }
13204
13205       rs->btrace_config.pt.size = conf->pt.size;
13206     }
13207 }
13208
13209 /* Read the current thread's btrace configuration from the target and
13210    store it into CONF.  */
13211
13212 static void
13213 btrace_read_config (struct btrace_config *conf)
13214 {
13215   char *xml;
13216
13217   xml = target_read_stralloc (&current_target,
13218                               TARGET_OBJECT_BTRACE_CONF, "");
13219   if (xml != NULL)
13220     {
13221       struct cleanup *cleanup;
13222
13223       cleanup = make_cleanup (xfree, xml);
13224       parse_xml_btrace_conf (conf, xml);
13225       do_cleanups (cleanup);
13226     }
13227 }
13228
13229 /* Maybe reopen target btrace.  */
13230
13231 static void
13232 remote_btrace_maybe_reopen (void)
13233 {
13234   struct remote_state *rs = get_remote_state ();
13235   struct thread_info *tp;
13236   int btrace_target_pushed = 0;
13237   int warned = 0;
13238
13239   scoped_restore_current_thread restore_thread;
13240
13241   ALL_NON_EXITED_THREADS (tp)
13242     {
13243       set_general_thread (tp->ptid);
13244
13245       memset (&rs->btrace_config, 0x00, sizeof (struct btrace_config));
13246       btrace_read_config (&rs->btrace_config);
13247
13248       if (rs->btrace_config.format == BTRACE_FORMAT_NONE)
13249         continue;
13250
13251 #if !defined (HAVE_LIBIPT)
13252       if (rs->btrace_config.format == BTRACE_FORMAT_PT)
13253         {
13254           if (!warned)
13255             {
13256               warned = 1;
13257               warning (_("GDB does not support Intel Processor Trace. "
13258                          "\"record\" will not work in this session."));
13259             }
13260
13261           continue;
13262         }
13263 #endif /* !defined (HAVE_LIBIPT) */
13264
13265       /* Push target, once, but before anything else happens.  This way our
13266          changes to the threads will be cleaned up by unpushing the target
13267          in case btrace_read_config () throws.  */
13268       if (!btrace_target_pushed)
13269         {
13270           btrace_target_pushed = 1;
13271           record_btrace_push_target ();
13272           printf_filtered (_("Target is recording using %s.\n"),
13273                            btrace_format_string (rs->btrace_config.format));
13274         }
13275
13276       tp->btrace.target = XCNEW (struct btrace_target_info);
13277       tp->btrace.target->ptid = tp->ptid;
13278       tp->btrace.target->conf = rs->btrace_config;
13279     }
13280 }
13281
13282 /* Enable branch tracing.  */
13283
13284 static struct btrace_target_info *
13285 remote_enable_btrace (struct target_ops *self, ptid_t ptid,
13286                       const struct btrace_config *conf)
13287 {
13288   struct btrace_target_info *tinfo = NULL;
13289   struct packet_config *packet = NULL;
13290   struct remote_state *rs = get_remote_state ();
13291   char *buf = rs->buf;
13292   char *endbuf = rs->buf + get_remote_packet_size ();
13293
13294   switch (conf->format)
13295     {
13296       case BTRACE_FORMAT_BTS:
13297         packet = &remote_protocol_packets[PACKET_Qbtrace_bts];
13298         break;
13299
13300       case BTRACE_FORMAT_PT:
13301         packet = &remote_protocol_packets[PACKET_Qbtrace_pt];
13302         break;
13303     }
13304
13305   if (packet == NULL || packet_config_support (packet) != PACKET_ENABLE)
13306     error (_("Target does not support branch tracing."));
13307
13308   btrace_sync_conf (conf);
13309
13310   set_general_thread (ptid);
13311
13312   buf += xsnprintf (buf, endbuf - buf, "%s", packet->name);
13313   putpkt (rs->buf);
13314   getpkt (&rs->buf, &rs->buf_size, 0);
13315
13316   if (packet_ok (rs->buf, packet) == PACKET_ERROR)
13317     {
13318       if (rs->buf[0] == 'E' && rs->buf[1] == '.')
13319         error (_("Could not enable branch tracing for %s: %s"),
13320                target_pid_to_str (ptid), rs->buf + 2);
13321       else
13322         error (_("Could not enable branch tracing for %s."),
13323                target_pid_to_str (ptid));
13324     }
13325
13326   tinfo = XCNEW (struct btrace_target_info);
13327   tinfo->ptid = ptid;
13328
13329   /* If we fail to read the configuration, we lose some information, but the
13330      tracing itself is not impacted.  */
13331   TRY
13332     {
13333       btrace_read_config (&tinfo->conf);
13334     }
13335   CATCH (err, RETURN_MASK_ERROR)
13336     {
13337       if (err.message != NULL)
13338         warning ("%s", err.message);
13339     }
13340   END_CATCH
13341
13342   return tinfo;
13343 }
13344
13345 /* Disable branch tracing.  */
13346
13347 static void
13348 remote_disable_btrace (struct target_ops *self,
13349                        struct btrace_target_info *tinfo)
13350 {
13351   struct packet_config *packet = &remote_protocol_packets[PACKET_Qbtrace_off];
13352   struct remote_state *rs = get_remote_state ();
13353   char *buf = rs->buf;
13354   char *endbuf = rs->buf + get_remote_packet_size ();
13355
13356   if (packet_config_support (packet) != PACKET_ENABLE)
13357     error (_("Target does not support branch tracing."));
13358
13359   set_general_thread (tinfo->ptid);
13360
13361   buf += xsnprintf (buf, endbuf - buf, "%s", packet->name);
13362   putpkt (rs->buf);
13363   getpkt (&rs->buf, &rs->buf_size, 0);
13364
13365   if (packet_ok (rs->buf, packet) == PACKET_ERROR)
13366     {
13367       if (rs->buf[0] == 'E' && rs->buf[1] == '.')
13368         error (_("Could not disable branch tracing for %s: %s"),
13369                target_pid_to_str (tinfo->ptid), rs->buf + 2);
13370       else
13371         error (_("Could not disable branch tracing for %s."),
13372                target_pid_to_str (tinfo->ptid));
13373     }
13374
13375   xfree (tinfo);
13376 }
13377
13378 /* Teardown branch tracing.  */
13379
13380 static void
13381 remote_teardown_btrace (struct target_ops *self,
13382                         struct btrace_target_info *tinfo)
13383 {
13384   /* We must not talk to the target during teardown.  */
13385   xfree (tinfo);
13386 }
13387
13388 /* Read the branch trace.  */
13389
13390 static enum btrace_error
13391 remote_read_btrace (struct target_ops *self,
13392                     struct btrace_data *btrace,
13393                     struct btrace_target_info *tinfo,
13394                     enum btrace_read_type type)
13395 {
13396   struct packet_config *packet = &remote_protocol_packets[PACKET_qXfer_btrace];
13397   struct cleanup *cleanup;
13398   const char *annex;
13399   char *xml;
13400
13401   if (packet_config_support (packet) != PACKET_ENABLE)
13402     error (_("Target does not support branch tracing."));
13403
13404 #if !defined(HAVE_LIBEXPAT)
13405   error (_("Cannot process branch tracing result. XML parsing not supported."));
13406 #endif
13407
13408   switch (type)
13409     {
13410     case BTRACE_READ_ALL:
13411       annex = "all";
13412       break;
13413     case BTRACE_READ_NEW:
13414       annex = "new";
13415       break;
13416     case BTRACE_READ_DELTA:
13417       annex = "delta";
13418       break;
13419     default:
13420       internal_error (__FILE__, __LINE__,
13421                       _("Bad branch tracing read type: %u."),
13422                       (unsigned int) type);
13423     }
13424
13425   xml = target_read_stralloc (&current_target,
13426                               TARGET_OBJECT_BTRACE, annex);
13427   if (xml == NULL)
13428     return BTRACE_ERR_UNKNOWN;
13429
13430   cleanup = make_cleanup (xfree, xml);
13431   parse_xml_btrace (btrace, xml);
13432   do_cleanups (cleanup);
13433
13434   return BTRACE_ERR_NONE;
13435 }
13436
13437 static const struct btrace_config *
13438 remote_btrace_conf (struct target_ops *self,
13439                     const struct btrace_target_info *tinfo)
13440 {
13441   return &tinfo->conf;
13442 }
13443
13444 static int
13445 remote_augmented_libraries_svr4_read (struct target_ops *self)
13446 {
13447   return (packet_support (PACKET_augmented_libraries_svr4_read_feature)
13448           == PACKET_ENABLE);
13449 }
13450
13451 /* Implementation of to_load.  */
13452
13453 static void
13454 remote_load (struct target_ops *self, const char *name, int from_tty)
13455 {
13456   generic_load (name, from_tty);
13457 }
13458
13459 /* Accepts an integer PID; returns a string representing a file that
13460    can be opened on the remote side to get the symbols for the child
13461    process.  Returns NULL if the operation is not supported.  */
13462
13463 static char *
13464 remote_pid_to_exec_file (struct target_ops *self, int pid)
13465 {
13466   static char *filename = NULL;
13467   struct inferior *inf;
13468   char *annex = NULL;
13469
13470   if (packet_support (PACKET_qXfer_exec_file) != PACKET_ENABLE)
13471     return NULL;
13472
13473   if (filename != NULL)
13474     xfree (filename);
13475
13476   inf = find_inferior_pid (pid);
13477   if (inf == NULL)
13478     internal_error (__FILE__, __LINE__,
13479                     _("not currently attached to process %d"), pid);
13480
13481   if (!inf->fake_pid_p)
13482     {
13483       const int annex_size = 9;
13484
13485       annex = (char *) alloca (annex_size);
13486       xsnprintf (annex, annex_size, "%x", pid);
13487     }
13488
13489   filename = target_read_stralloc (&current_target,
13490                                    TARGET_OBJECT_EXEC_FILE, annex);
13491
13492   return filename;
13493 }
13494
13495 /* Implement the to_can_do_single_step target_ops method.  */
13496
13497 static int
13498 remote_can_do_single_step (struct target_ops *ops)
13499 {
13500   /* We can only tell whether target supports single step or not by
13501      supported s and S vCont actions if the stub supports vContSupported
13502      feature.  If the stub doesn't support vContSupported feature,
13503      we have conservatively to think target doesn't supports single
13504      step.  */
13505   if (packet_support (PACKET_vContSupported) == PACKET_ENABLE)
13506     {
13507       struct remote_state *rs = get_remote_state ();
13508
13509       if (packet_support (PACKET_vCont) == PACKET_SUPPORT_UNKNOWN)
13510         remote_vcont_probe (rs);
13511
13512       return rs->supports_vCont.s && rs->supports_vCont.S;
13513     }
13514   else
13515     return 0;
13516 }
13517
13518 /* Implementation of the to_execution_direction method for the remote
13519    target.  */
13520
13521 static enum exec_direction_kind
13522 remote_execution_direction (struct target_ops *self)
13523 {
13524   struct remote_state *rs = get_remote_state ();
13525
13526   return rs->last_resume_exec_dir;
13527 }
13528
13529 static void
13530 init_remote_ops (void)
13531 {
13532   remote_ops.to_shortname = "remote";
13533   remote_ops.to_longname = "Remote serial target in gdb-specific protocol";
13534   remote_ops.to_doc =
13535     "Use a remote computer via a serial line, using a gdb-specific protocol.\n\
13536 Specify the serial device it is connected to\n\
13537 (e.g. /dev/ttyS0, /dev/ttya, COM1, etc.).";
13538   remote_ops.to_open = remote_open;
13539   remote_ops.to_close = remote_close;
13540   remote_ops.to_detach = remote_detach;
13541   remote_ops.to_disconnect = remote_disconnect;
13542   remote_ops.to_resume = remote_resume;
13543   remote_ops.to_commit_resume = remote_commit_resume;
13544   remote_ops.to_wait = remote_wait;
13545   remote_ops.to_fetch_registers = remote_fetch_registers;
13546   remote_ops.to_store_registers = remote_store_registers;
13547   remote_ops.to_prepare_to_store = remote_prepare_to_store;
13548   remote_ops.to_files_info = remote_files_info;
13549   remote_ops.to_insert_breakpoint = remote_insert_breakpoint;
13550   remote_ops.to_remove_breakpoint = remote_remove_breakpoint;
13551   remote_ops.to_stopped_by_sw_breakpoint = remote_stopped_by_sw_breakpoint;
13552   remote_ops.to_supports_stopped_by_sw_breakpoint = remote_supports_stopped_by_sw_breakpoint;
13553   remote_ops.to_stopped_by_hw_breakpoint = remote_stopped_by_hw_breakpoint;
13554   remote_ops.to_supports_stopped_by_hw_breakpoint = remote_supports_stopped_by_hw_breakpoint;
13555   remote_ops.to_stopped_by_watchpoint = remote_stopped_by_watchpoint;
13556   remote_ops.to_stopped_data_address = remote_stopped_data_address;
13557   remote_ops.to_watchpoint_addr_within_range =
13558     remote_watchpoint_addr_within_range;
13559   remote_ops.to_can_use_hw_breakpoint = remote_check_watch_resources;
13560   remote_ops.to_insert_hw_breakpoint = remote_insert_hw_breakpoint;
13561   remote_ops.to_remove_hw_breakpoint = remote_remove_hw_breakpoint;
13562   remote_ops.to_region_ok_for_hw_watchpoint
13563      = remote_region_ok_for_hw_watchpoint;
13564   remote_ops.to_insert_watchpoint = remote_insert_watchpoint;
13565   remote_ops.to_remove_watchpoint = remote_remove_watchpoint;
13566   remote_ops.to_kill = remote_kill;
13567   remote_ops.to_load = remote_load;
13568   remote_ops.to_mourn_inferior = remote_mourn;
13569   remote_ops.to_pass_signals = remote_pass_signals;
13570   remote_ops.to_set_syscall_catchpoint = remote_set_syscall_catchpoint;
13571   remote_ops.to_program_signals = remote_program_signals;
13572   remote_ops.to_thread_alive = remote_thread_alive;
13573   remote_ops.to_thread_name = remote_thread_name;
13574   remote_ops.to_update_thread_list = remote_update_thread_list;
13575   remote_ops.to_pid_to_str = remote_pid_to_str;
13576   remote_ops.to_extra_thread_info = remote_threads_extra_info;
13577   remote_ops.to_get_ada_task_ptid = remote_get_ada_task_ptid;
13578   remote_ops.to_stop = remote_stop;
13579   remote_ops.to_interrupt = remote_interrupt;
13580   remote_ops.to_pass_ctrlc = remote_pass_ctrlc;
13581   remote_ops.to_xfer_partial = remote_xfer_partial;
13582   remote_ops.to_get_memory_xfer_limit = remote_get_memory_xfer_limit;
13583   remote_ops.to_rcmd = remote_rcmd;
13584   remote_ops.to_pid_to_exec_file = remote_pid_to_exec_file;
13585   remote_ops.to_log_command = serial_log_command;
13586   remote_ops.to_get_thread_local_address = remote_get_thread_local_address;
13587   remote_ops.to_stratum = process_stratum;
13588   remote_ops.to_has_all_memory = default_child_has_all_memory;
13589   remote_ops.to_has_memory = default_child_has_memory;
13590   remote_ops.to_has_stack = default_child_has_stack;
13591   remote_ops.to_has_registers = default_child_has_registers;
13592   remote_ops.to_has_execution = default_child_has_execution;
13593   remote_ops.to_has_thread_control = tc_schedlock;    /* can lock scheduler */
13594   remote_ops.to_can_execute_reverse = remote_can_execute_reverse;
13595   remote_ops.to_magic = OPS_MAGIC;
13596   remote_ops.to_memory_map = remote_memory_map;
13597   remote_ops.to_flash_erase = remote_flash_erase;
13598   remote_ops.to_flash_done = remote_flash_done;
13599   remote_ops.to_read_description = remote_read_description;
13600   remote_ops.to_search_memory = remote_search_memory;
13601   remote_ops.to_can_async_p = remote_can_async_p;
13602   remote_ops.to_is_async_p = remote_is_async_p;
13603   remote_ops.to_async = remote_async;
13604   remote_ops.to_thread_events = remote_thread_events;
13605   remote_ops.to_can_do_single_step = remote_can_do_single_step;
13606   remote_ops.to_terminal_inferior = remote_terminal_inferior;
13607   remote_ops.to_terminal_ours = remote_terminal_ours;
13608   remote_ops.to_supports_non_stop = remote_supports_non_stop;
13609   remote_ops.to_supports_multi_process = remote_supports_multi_process;
13610   remote_ops.to_supports_disable_randomization
13611     = remote_supports_disable_randomization;
13612   remote_ops.to_filesystem_is_local = remote_filesystem_is_local;
13613   remote_ops.to_fileio_open = remote_hostio_open;
13614   remote_ops.to_fileio_pwrite = remote_hostio_pwrite;
13615   remote_ops.to_fileio_pread = remote_hostio_pread;
13616   remote_ops.to_fileio_fstat = remote_hostio_fstat;
13617   remote_ops.to_fileio_close = remote_hostio_close;
13618   remote_ops.to_fileio_unlink = remote_hostio_unlink;
13619   remote_ops.to_fileio_readlink = remote_hostio_readlink;
13620   remote_ops.to_supports_enable_disable_tracepoint = remote_supports_enable_disable_tracepoint;
13621   remote_ops.to_supports_string_tracing = remote_supports_string_tracing;
13622   remote_ops.to_supports_evaluation_of_breakpoint_conditions = remote_supports_cond_breakpoints;
13623   remote_ops.to_can_run_breakpoint_commands = remote_can_run_breakpoint_commands;
13624   remote_ops.to_trace_init = remote_trace_init;
13625   remote_ops.to_download_tracepoint = remote_download_tracepoint;
13626   remote_ops.to_can_download_tracepoint = remote_can_download_tracepoint;
13627   remote_ops.to_download_trace_state_variable
13628     = remote_download_trace_state_variable;
13629   remote_ops.to_enable_tracepoint = remote_enable_tracepoint;
13630   remote_ops.to_disable_tracepoint = remote_disable_tracepoint;
13631   remote_ops.to_trace_set_readonly_regions = remote_trace_set_readonly_regions;
13632   remote_ops.to_trace_start = remote_trace_start;
13633   remote_ops.to_get_trace_status = remote_get_trace_status;
13634   remote_ops.to_get_tracepoint_status = remote_get_tracepoint_status;
13635   remote_ops.to_trace_stop = remote_trace_stop;
13636   remote_ops.to_trace_find = remote_trace_find;
13637   remote_ops.to_get_trace_state_variable_value
13638     = remote_get_trace_state_variable_value;
13639   remote_ops.to_save_trace_data = remote_save_trace_data;
13640   remote_ops.to_upload_tracepoints = remote_upload_tracepoints;
13641   remote_ops.to_upload_trace_state_variables
13642     = remote_upload_trace_state_variables;
13643   remote_ops.to_get_raw_trace_data = remote_get_raw_trace_data;
13644   remote_ops.to_get_min_fast_tracepoint_insn_len = remote_get_min_fast_tracepoint_insn_len;
13645   remote_ops.to_set_disconnected_tracing = remote_set_disconnected_tracing;
13646   remote_ops.to_set_circular_trace_buffer = remote_set_circular_trace_buffer;
13647   remote_ops.to_set_trace_buffer_size = remote_set_trace_buffer_size;
13648   remote_ops.to_set_trace_notes = remote_set_trace_notes;
13649   remote_ops.to_core_of_thread = remote_core_of_thread;
13650   remote_ops.to_verify_memory = remote_verify_memory;
13651   remote_ops.to_get_tib_address = remote_get_tib_address;
13652   remote_ops.to_set_permissions = remote_set_permissions;
13653   remote_ops.to_static_tracepoint_marker_at
13654     = remote_static_tracepoint_marker_at;
13655   remote_ops.to_static_tracepoint_markers_by_strid
13656     = remote_static_tracepoint_markers_by_strid;
13657   remote_ops.to_traceframe_info = remote_traceframe_info;
13658   remote_ops.to_use_agent = remote_use_agent;
13659   remote_ops.to_can_use_agent = remote_can_use_agent;
13660   remote_ops.to_supports_btrace = remote_supports_btrace;
13661   remote_ops.to_enable_btrace = remote_enable_btrace;
13662   remote_ops.to_disable_btrace = remote_disable_btrace;
13663   remote_ops.to_teardown_btrace = remote_teardown_btrace;
13664   remote_ops.to_read_btrace = remote_read_btrace;
13665   remote_ops.to_btrace_conf = remote_btrace_conf;
13666   remote_ops.to_augmented_libraries_svr4_read =
13667     remote_augmented_libraries_svr4_read;
13668   remote_ops.to_follow_fork = remote_follow_fork;
13669   remote_ops.to_follow_exec = remote_follow_exec;
13670   remote_ops.to_insert_fork_catchpoint = remote_insert_fork_catchpoint;
13671   remote_ops.to_remove_fork_catchpoint = remote_remove_fork_catchpoint;
13672   remote_ops.to_insert_vfork_catchpoint = remote_insert_vfork_catchpoint;
13673   remote_ops.to_remove_vfork_catchpoint = remote_remove_vfork_catchpoint;
13674   remote_ops.to_insert_exec_catchpoint = remote_insert_exec_catchpoint;
13675   remote_ops.to_remove_exec_catchpoint = remote_remove_exec_catchpoint;
13676   remote_ops.to_execution_direction = remote_execution_direction;
13677 }
13678
13679 /* Set up the extended remote vector by making a copy of the standard
13680    remote vector and adding to it.  */
13681
13682 static void
13683 init_extended_remote_ops (void)
13684 {
13685   extended_remote_ops = remote_ops;
13686
13687   extended_remote_ops.to_shortname = "extended-remote";
13688   extended_remote_ops.to_longname =
13689     "Extended remote serial target in gdb-specific protocol";
13690   extended_remote_ops.to_doc =
13691     "Use a remote computer via a serial line, using a gdb-specific protocol.\n\
13692 Specify the serial device it is connected to (e.g. /dev/ttya).";
13693   extended_remote_ops.to_open = extended_remote_open;
13694   extended_remote_ops.to_create_inferior = extended_remote_create_inferior;
13695   extended_remote_ops.to_detach = extended_remote_detach;
13696   extended_remote_ops.to_attach = extended_remote_attach;
13697   extended_remote_ops.to_post_attach = extended_remote_post_attach;
13698   extended_remote_ops.to_supports_disable_randomization
13699     = extended_remote_supports_disable_randomization;
13700 }
13701
13702 static int
13703 remote_can_async_p (struct target_ops *ops)
13704 {
13705   struct remote_state *rs = get_remote_state ();
13706
13707   /* We don't go async if the user has explicitly prevented it with the
13708      "maint set target-async" command.  */
13709   if (!target_async_permitted)
13710     return 0;
13711
13712   /* We're async whenever the serial device is.  */
13713   return serial_can_async_p (rs->remote_desc);
13714 }
13715
13716 static int
13717 remote_is_async_p (struct target_ops *ops)
13718 {
13719   struct remote_state *rs = get_remote_state ();
13720
13721   if (!target_async_permitted)
13722     /* We only enable async when the user specifically asks for it.  */
13723     return 0;
13724
13725   /* We're async whenever the serial device is.  */
13726   return serial_is_async_p (rs->remote_desc);
13727 }
13728
13729 /* Pass the SERIAL event on and up to the client.  One day this code
13730    will be able to delay notifying the client of an event until the
13731    point where an entire packet has been received.  */
13732
13733 static serial_event_ftype remote_async_serial_handler;
13734
13735 static void
13736 remote_async_serial_handler (struct serial *scb, void *context)
13737 {
13738   /* Don't propogate error information up to the client.  Instead let
13739      the client find out about the error by querying the target.  */
13740   inferior_event_handler (INF_REG_EVENT, NULL);
13741 }
13742
13743 static void
13744 remote_async_inferior_event_handler (gdb_client_data data)
13745 {
13746   inferior_event_handler (INF_REG_EVENT, NULL);
13747 }
13748
13749 static void
13750 remote_async (struct target_ops *ops, int enable)
13751 {
13752   struct remote_state *rs = get_remote_state ();
13753
13754   if (enable)
13755     {
13756       serial_async (rs->remote_desc, remote_async_serial_handler, rs);
13757
13758       /* If there are pending events in the stop reply queue tell the
13759          event loop to process them.  */
13760       if (!QUEUE_is_empty (stop_reply_p, stop_reply_queue))
13761         mark_async_event_handler (remote_async_inferior_event_token);
13762       /* For simplicity, below we clear the pending events token
13763          without remembering whether it is marked, so here we always
13764          mark it.  If there's actually no pending notification to
13765          process, this ends up being a no-op (other than a spurious
13766          event-loop wakeup).  */
13767       if (target_is_non_stop_p ())
13768         mark_async_event_handler (rs->notif_state->get_pending_events_token);
13769     }
13770   else
13771     {
13772       serial_async (rs->remote_desc, NULL, NULL);
13773       /* If the core is disabling async, it doesn't want to be
13774          disturbed with target events.  Clear all async event sources
13775          too.  */
13776       clear_async_event_handler (remote_async_inferior_event_token);
13777       if (target_is_non_stop_p ())
13778         clear_async_event_handler (rs->notif_state->get_pending_events_token);
13779     }
13780 }
13781
13782 /* Implementation of the to_thread_events method.  */
13783
13784 static void
13785 remote_thread_events (struct target_ops *ops, int enable)
13786 {
13787   struct remote_state *rs = get_remote_state ();
13788   size_t size = get_remote_packet_size ();
13789
13790   if (packet_support (PACKET_QThreadEvents) == PACKET_DISABLE)
13791     return;
13792
13793   xsnprintf (rs->buf, size, "QThreadEvents:%x", enable ? 1 : 0);
13794   putpkt (rs->buf);
13795   getpkt (&rs->buf, &rs->buf_size, 0);
13796
13797   switch (packet_ok (rs->buf,
13798                      &remote_protocol_packets[PACKET_QThreadEvents]))
13799     {
13800     case PACKET_OK:
13801       if (strcmp (rs->buf, "OK") != 0)
13802         error (_("Remote refused setting thread events: %s"), rs->buf);
13803       break;
13804     case PACKET_ERROR:
13805       warning (_("Remote failure reply: %s"), rs->buf);
13806       break;
13807     case PACKET_UNKNOWN:
13808       break;
13809     }
13810 }
13811
13812 static void
13813 set_remote_cmd (char *args, int from_tty)
13814 {
13815   help_list (remote_set_cmdlist, "set remote ", all_commands, gdb_stdout);
13816 }
13817
13818 static void
13819 show_remote_cmd (char *args, int from_tty)
13820 {
13821   /* We can't just use cmd_show_list here, because we want to skip
13822      the redundant "show remote Z-packet" and the legacy aliases.  */
13823   struct cmd_list_element *list = remote_show_cmdlist;
13824   struct ui_out *uiout = current_uiout;
13825
13826   ui_out_emit_tuple tuple_emitter (uiout, "showlist");
13827   for (; list != NULL; list = list->next)
13828     if (strcmp (list->name, "Z-packet") == 0)
13829       continue;
13830     else if (list->type == not_set_cmd)
13831       /* Alias commands are exactly like the original, except they
13832          don't have the normal type.  */
13833       continue;
13834     else
13835       {
13836         ui_out_emit_tuple option_emitter (uiout, "option");
13837
13838         uiout->field_string ("name", list->name);
13839         uiout->text (":  ");
13840         if (list->type == show_cmd)
13841           do_show_command (NULL, from_tty, list);
13842         else
13843           cmd_func (list, NULL, from_tty);
13844       }
13845 }
13846
13847
13848 /* Function to be called whenever a new objfile (shlib) is detected.  */
13849 static void
13850 remote_new_objfile (struct objfile *objfile)
13851 {
13852   struct remote_state *rs = get_remote_state ();
13853
13854   if (rs->remote_desc != 0)             /* Have a remote connection.  */
13855     remote_check_symbols ();
13856 }
13857
13858 /* Pull all the tracepoints defined on the target and create local
13859    data structures representing them.  We don't want to create real
13860    tracepoints yet, we don't want to mess up the user's existing
13861    collection.  */
13862   
13863 static int
13864 remote_upload_tracepoints (struct target_ops *self, struct uploaded_tp **utpp)
13865 {
13866   struct remote_state *rs = get_remote_state ();
13867   char *p;
13868
13869   /* Ask for a first packet of tracepoint definition.  */
13870   putpkt ("qTfP");
13871   getpkt (&rs->buf, &rs->buf_size, 0);
13872   p = rs->buf;
13873   while (*p && *p != 'l')
13874     {
13875       parse_tracepoint_definition (p, utpp);
13876       /* Ask for another packet of tracepoint definition.  */
13877       putpkt ("qTsP");
13878       getpkt (&rs->buf, &rs->buf_size, 0);
13879       p = rs->buf;
13880     }
13881   return 0;
13882 }
13883
13884 static int
13885 remote_upload_trace_state_variables (struct target_ops *self,
13886                                      struct uploaded_tsv **utsvp)
13887 {
13888   struct remote_state *rs = get_remote_state ();
13889   char *p;
13890
13891   /* Ask for a first packet of variable definition.  */
13892   putpkt ("qTfV");
13893   getpkt (&rs->buf, &rs->buf_size, 0);
13894   p = rs->buf;
13895   while (*p && *p != 'l')
13896     {
13897       parse_tsv_definition (p, utsvp);
13898       /* Ask for another packet of variable definition.  */
13899       putpkt ("qTsV");
13900       getpkt (&rs->buf, &rs->buf_size, 0);
13901       p = rs->buf;
13902     }
13903   return 0;
13904 }
13905
13906 /* The "set/show range-stepping" show hook.  */
13907
13908 static void
13909 show_range_stepping (struct ui_file *file, int from_tty,
13910                      struct cmd_list_element *c,
13911                      const char *value)
13912 {
13913   fprintf_filtered (file,
13914                     _("Debugger's willingness to use range stepping "
13915                       "is %s.\n"), value);
13916 }
13917
13918 /* The "set/show range-stepping" set hook.  */
13919
13920 static void
13921 set_range_stepping (char *ignore_args, int from_tty,
13922                     struct cmd_list_element *c)
13923 {
13924   struct remote_state *rs = get_remote_state ();
13925
13926   /* Whene enabling, check whether range stepping is actually
13927      supported by the target, and warn if not.  */
13928   if (use_range_stepping)
13929     {
13930       if (rs->remote_desc != NULL)
13931         {
13932           if (packet_support (PACKET_vCont) == PACKET_SUPPORT_UNKNOWN)
13933             remote_vcont_probe (rs);
13934
13935           if (packet_support (PACKET_vCont) == PACKET_ENABLE
13936               && rs->supports_vCont.r)
13937             return;
13938         }
13939
13940       warning (_("Range stepping is not supported by the current target"));
13941     }
13942 }
13943
13944 void
13945 _initialize_remote (void)
13946 {
13947   struct cmd_list_element *cmd;
13948   const char *cmd_name;
13949
13950   /* architecture specific data */
13951   remote_gdbarch_data_handle =
13952     gdbarch_data_register_post_init (init_remote_state);
13953   remote_g_packet_data_handle =
13954     gdbarch_data_register_pre_init (remote_g_packet_data_init);
13955
13956   remote_pspace_data
13957     = register_program_space_data_with_cleanup (NULL,
13958                                                 remote_pspace_data_cleanup);
13959
13960   /* Initialize the per-target state.  At the moment there is only one
13961      of these, not one per target.  Only one target is active at a
13962      time.  */
13963   remote_state = new_remote_state ();
13964
13965   init_remote_ops ();
13966   add_target (&remote_ops);
13967
13968   init_extended_remote_ops ();
13969   add_target (&extended_remote_ops);
13970
13971   /* Hook into new objfile notification.  */
13972   observer_attach_new_objfile (remote_new_objfile);
13973   /* We're no longer interested in notification events of an inferior
13974      when it exits.  */
13975   observer_attach_inferior_exit (discard_pending_stop_replies);
13976
13977 #if 0
13978   init_remote_threadtests ();
13979 #endif
13980
13981   stop_reply_queue = QUEUE_alloc (stop_reply_p, stop_reply_xfree);
13982   /* set/show remote ...  */
13983
13984   add_prefix_cmd ("remote", class_maintenance, set_remote_cmd, _("\
13985 Remote protocol specific variables\n\
13986 Configure various remote-protocol specific variables such as\n\
13987 the packets being used"),
13988                   &remote_set_cmdlist, "set remote ",
13989                   0 /* allow-unknown */, &setlist);
13990   add_prefix_cmd ("remote", class_maintenance, show_remote_cmd, _("\
13991 Remote protocol specific variables\n\
13992 Configure various remote-protocol specific variables such as\n\
13993 the packets being used"),
13994                   &remote_show_cmdlist, "show remote ",
13995                   0 /* allow-unknown */, &showlist);
13996
13997   add_cmd ("compare-sections", class_obscure, compare_sections_command, _("\
13998 Compare section data on target to the exec file.\n\
13999 Argument is a single section name (default: all loaded sections).\n\
14000 To compare only read-only loaded sections, specify the -r option."),
14001            &cmdlist);
14002
14003   add_cmd ("packet", class_maintenance, packet_command, _("\
14004 Send an arbitrary packet to a remote target.\n\
14005    maintenance packet TEXT\n\
14006 If GDB is talking to an inferior via the GDB serial protocol, then\n\
14007 this command sends the string TEXT to the inferior, and displays the\n\
14008 response packet.  GDB supplies the initial `$' character, and the\n\
14009 terminating `#' character and checksum."),
14010            &maintenancelist);
14011
14012   add_setshow_boolean_cmd ("remotebreak", no_class, &remote_break, _("\
14013 Set whether to send break if interrupted."), _("\
14014 Show whether to send break if interrupted."), _("\
14015 If set, a break, instead of a cntrl-c, is sent to the remote target."),
14016                            set_remotebreak, show_remotebreak,
14017                            &setlist, &showlist);
14018   cmd_name = "remotebreak";
14019   cmd = lookup_cmd (&cmd_name, setlist, "", -1, 1);
14020   deprecate_cmd (cmd, "set remote interrupt-sequence");
14021   cmd_name = "remotebreak"; /* needed because lookup_cmd updates the pointer */
14022   cmd = lookup_cmd (&cmd_name, showlist, "", -1, 1);
14023   deprecate_cmd (cmd, "show remote interrupt-sequence");
14024
14025   add_setshow_enum_cmd ("interrupt-sequence", class_support,
14026                         interrupt_sequence_modes, &interrupt_sequence_mode,
14027                         _("\
14028 Set interrupt sequence to remote target."), _("\
14029 Show interrupt sequence to remote target."), _("\
14030 Valid value is \"Ctrl-C\", \"BREAK\" or \"BREAK-g\". The default is \"Ctrl-C\"."),
14031                         NULL, show_interrupt_sequence,
14032                         &remote_set_cmdlist,
14033                         &remote_show_cmdlist);
14034
14035   add_setshow_boolean_cmd ("interrupt-on-connect", class_support,
14036                            &interrupt_on_connect, _("\
14037 Set whether interrupt-sequence is sent to remote target when gdb connects to."), _("            \
14038 Show whether interrupt-sequence is sent to remote target when gdb connects to."), _("           \
14039 If set, interrupt sequence is sent to remote target."),
14040                            NULL, NULL,
14041                            &remote_set_cmdlist, &remote_show_cmdlist);
14042
14043   /* Install commands for configuring memory read/write packets.  */
14044
14045   add_cmd ("remotewritesize", no_class, set_memory_write_packet_size, _("\
14046 Set the maximum number of bytes per memory write packet (deprecated)."),
14047            &setlist);
14048   add_cmd ("remotewritesize", no_class, show_memory_write_packet_size, _("\
14049 Show the maximum number of bytes per memory write packet (deprecated)."),
14050            &showlist);
14051   add_cmd ("memory-write-packet-size", no_class,
14052            set_memory_write_packet_size, _("\
14053 Set the maximum number of bytes per memory-write packet.\n\
14054 Specify the number of bytes in a packet or 0 (zero) for the\n\
14055 default packet size.  The actual limit is further reduced\n\
14056 dependent on the target.  Specify ``fixed'' to disable the\n\
14057 further restriction and ``limit'' to enable that restriction."),
14058            &remote_set_cmdlist);
14059   add_cmd ("memory-read-packet-size", no_class,
14060            set_memory_read_packet_size, _("\
14061 Set the maximum number of bytes per memory-read packet.\n\
14062 Specify the number of bytes in a packet or 0 (zero) for the\n\
14063 default packet size.  The actual limit is further reduced\n\
14064 dependent on the target.  Specify ``fixed'' to disable the\n\
14065 further restriction and ``limit'' to enable that restriction."),
14066            &remote_set_cmdlist);
14067   add_cmd ("memory-write-packet-size", no_class,
14068            show_memory_write_packet_size,
14069            _("Show the maximum number of bytes per memory-write packet."),
14070            &remote_show_cmdlist);
14071   add_cmd ("memory-read-packet-size", no_class,
14072            show_memory_read_packet_size,
14073            _("Show the maximum number of bytes per memory-read packet."),
14074            &remote_show_cmdlist);
14075
14076   add_setshow_zinteger_cmd ("hardware-watchpoint-limit", no_class,
14077                             &remote_hw_watchpoint_limit, _("\
14078 Set the maximum number of target hardware watchpoints."), _("\
14079 Show the maximum number of target hardware watchpoints."), _("\
14080 Specify a negative limit for unlimited."),
14081                             NULL, NULL, /* FIXME: i18n: The maximum
14082                                            number of target hardware
14083                                            watchpoints is %s.  */
14084                             &remote_set_cmdlist, &remote_show_cmdlist);
14085   add_setshow_zinteger_cmd ("hardware-watchpoint-length-limit", no_class,
14086                             &remote_hw_watchpoint_length_limit, _("\
14087 Set the maximum length (in bytes) of a target hardware watchpoint."), _("\
14088 Show the maximum length (in bytes) of a target hardware watchpoint."), _("\
14089 Specify a negative limit for unlimited."),
14090                             NULL, NULL, /* FIXME: i18n: The maximum
14091                                            length (in bytes) of a target
14092                                            hardware watchpoint is %s.  */
14093                             &remote_set_cmdlist, &remote_show_cmdlist);
14094   add_setshow_zinteger_cmd ("hardware-breakpoint-limit", no_class,
14095                             &remote_hw_breakpoint_limit, _("\
14096 Set the maximum number of target hardware breakpoints."), _("\
14097 Show the maximum number of target hardware breakpoints."), _("\
14098 Specify a negative limit for unlimited."),
14099                             NULL, NULL, /* FIXME: i18n: The maximum
14100                                            number of target hardware
14101                                            breakpoints is %s.  */
14102                             &remote_set_cmdlist, &remote_show_cmdlist);
14103
14104   add_setshow_zuinteger_cmd ("remoteaddresssize", class_obscure,
14105                              &remote_address_size, _("\
14106 Set the maximum size of the address (in bits) in a memory packet."), _("\
14107 Show the maximum size of the address (in bits) in a memory packet."), NULL,
14108                              NULL,
14109                              NULL, /* FIXME: i18n: */
14110                              &setlist, &showlist);
14111
14112   init_all_packet_configs ();
14113
14114   add_packet_config_cmd (&remote_protocol_packets[PACKET_X],
14115                          "X", "binary-download", 1);
14116
14117   add_packet_config_cmd (&remote_protocol_packets[PACKET_vCont],
14118                          "vCont", "verbose-resume", 0);
14119
14120   add_packet_config_cmd (&remote_protocol_packets[PACKET_QPassSignals],
14121                          "QPassSignals", "pass-signals", 0);
14122
14123   add_packet_config_cmd (&remote_protocol_packets[PACKET_QCatchSyscalls],
14124                          "QCatchSyscalls", "catch-syscalls", 0);
14125
14126   add_packet_config_cmd (&remote_protocol_packets[PACKET_QProgramSignals],
14127                          "QProgramSignals", "program-signals", 0);
14128
14129   add_packet_config_cmd (&remote_protocol_packets[PACKET_QStartupWithShell],
14130                          "QStartupWithShell", "startup-with-shell", 0);
14131
14132   add_packet_config_cmd (&remote_protocol_packets
14133                          [PACKET_QEnvironmentHexEncoded],
14134                          "QEnvironmentHexEncoded", "environment-hex-encoded",
14135                          0);
14136
14137   add_packet_config_cmd (&remote_protocol_packets[PACKET_QEnvironmentReset],
14138                          "QEnvironmentReset", "environment-reset",
14139                          0);
14140
14141   add_packet_config_cmd (&remote_protocol_packets[PACKET_QEnvironmentUnset],
14142                          "QEnvironmentUnset", "environment-unset",
14143                          0);
14144
14145   add_packet_config_cmd (&remote_protocol_packets[PACKET_qSymbol],
14146                          "qSymbol", "symbol-lookup", 0);
14147
14148   add_packet_config_cmd (&remote_protocol_packets[PACKET_P],
14149                          "P", "set-register", 1);
14150
14151   add_packet_config_cmd (&remote_protocol_packets[PACKET_p],
14152                          "p", "fetch-register", 1);
14153
14154   add_packet_config_cmd (&remote_protocol_packets[PACKET_Z0],
14155                          "Z0", "software-breakpoint", 0);
14156
14157   add_packet_config_cmd (&remote_protocol_packets[PACKET_Z1],
14158                          "Z1", "hardware-breakpoint", 0);
14159
14160   add_packet_config_cmd (&remote_protocol_packets[PACKET_Z2],
14161                          "Z2", "write-watchpoint", 0);
14162
14163   add_packet_config_cmd (&remote_protocol_packets[PACKET_Z3],
14164                          "Z3", "read-watchpoint", 0);
14165
14166   add_packet_config_cmd (&remote_protocol_packets[PACKET_Z4],
14167                          "Z4", "access-watchpoint", 0);
14168
14169   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_auxv],
14170                          "qXfer:auxv:read", "read-aux-vector", 0);
14171
14172   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_exec_file],
14173                          "qXfer:exec-file:read", "pid-to-exec-file", 0);
14174
14175   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_features],
14176                          "qXfer:features:read", "target-features", 0);
14177
14178   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_libraries],
14179                          "qXfer:libraries:read", "library-info", 0);
14180
14181   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_libraries_svr4],
14182                          "qXfer:libraries-svr4:read", "library-info-svr4", 0);
14183
14184   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_memory_map],
14185                          "qXfer:memory-map:read", "memory-map", 0);
14186
14187   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_spu_read],
14188                          "qXfer:spu:read", "read-spu-object", 0);
14189
14190   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_spu_write],
14191                          "qXfer:spu:write", "write-spu-object", 0);
14192
14193   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_osdata],
14194                         "qXfer:osdata:read", "osdata", 0);
14195
14196   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_threads],
14197                          "qXfer:threads:read", "threads", 0);
14198
14199   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_siginfo_read],
14200                          "qXfer:siginfo:read", "read-siginfo-object", 0);
14201
14202   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_siginfo_write],
14203                          "qXfer:siginfo:write", "write-siginfo-object", 0);
14204
14205   add_packet_config_cmd
14206     (&remote_protocol_packets[PACKET_qXfer_traceframe_info],
14207      "qXfer:traceframe-info:read", "traceframe-info", 0);
14208
14209   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_uib],
14210                          "qXfer:uib:read", "unwind-info-block", 0);
14211
14212   add_packet_config_cmd (&remote_protocol_packets[PACKET_qGetTLSAddr],
14213                          "qGetTLSAddr", "get-thread-local-storage-address",
14214                          0);
14215
14216   add_packet_config_cmd (&remote_protocol_packets[PACKET_qGetTIBAddr],
14217                          "qGetTIBAddr", "get-thread-information-block-address",
14218                          0);
14219
14220   add_packet_config_cmd (&remote_protocol_packets[PACKET_bc],
14221                          "bc", "reverse-continue", 0);
14222
14223   add_packet_config_cmd (&remote_protocol_packets[PACKET_bs],
14224                          "bs", "reverse-step", 0);
14225
14226   add_packet_config_cmd (&remote_protocol_packets[PACKET_qSupported],
14227                          "qSupported", "supported-packets", 0);
14228
14229   add_packet_config_cmd (&remote_protocol_packets[PACKET_qSearch_memory],
14230                          "qSearch:memory", "search-memory", 0);
14231
14232   add_packet_config_cmd (&remote_protocol_packets[PACKET_qTStatus],
14233                          "qTStatus", "trace-status", 0);
14234
14235   add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_setfs],
14236                          "vFile:setfs", "hostio-setfs", 0);
14237
14238   add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_open],
14239                          "vFile:open", "hostio-open", 0);
14240
14241   add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_pread],
14242                          "vFile:pread", "hostio-pread", 0);
14243
14244   add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_pwrite],
14245                          "vFile:pwrite", "hostio-pwrite", 0);
14246
14247   add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_close],
14248                          "vFile:close", "hostio-close", 0);
14249
14250   add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_unlink],
14251                          "vFile:unlink", "hostio-unlink", 0);
14252
14253   add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_readlink],
14254                          "vFile:readlink", "hostio-readlink", 0);
14255
14256   add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_fstat],
14257                          "vFile:fstat", "hostio-fstat", 0);
14258
14259   add_packet_config_cmd (&remote_protocol_packets[PACKET_vAttach],
14260                          "vAttach", "attach", 0);
14261
14262   add_packet_config_cmd (&remote_protocol_packets[PACKET_vRun],
14263                          "vRun", "run", 0);
14264
14265   add_packet_config_cmd (&remote_protocol_packets[PACKET_QStartNoAckMode],
14266                          "QStartNoAckMode", "noack", 0);
14267
14268   add_packet_config_cmd (&remote_protocol_packets[PACKET_vKill],
14269                          "vKill", "kill", 0);
14270
14271   add_packet_config_cmd (&remote_protocol_packets[PACKET_qAttached],
14272                          "qAttached", "query-attached", 0);
14273
14274   add_packet_config_cmd (&remote_protocol_packets[PACKET_ConditionalTracepoints],
14275                          "ConditionalTracepoints",
14276                          "conditional-tracepoints", 0);
14277
14278   add_packet_config_cmd (&remote_protocol_packets[PACKET_ConditionalBreakpoints],
14279                          "ConditionalBreakpoints",
14280                          "conditional-breakpoints", 0);
14281
14282   add_packet_config_cmd (&remote_protocol_packets[PACKET_BreakpointCommands],
14283                          "BreakpointCommands",
14284                          "breakpoint-commands", 0);
14285
14286   add_packet_config_cmd (&remote_protocol_packets[PACKET_FastTracepoints],
14287                          "FastTracepoints", "fast-tracepoints", 0);
14288
14289   add_packet_config_cmd (&remote_protocol_packets[PACKET_TracepointSource],
14290                          "TracepointSource", "TracepointSource", 0);
14291
14292   add_packet_config_cmd (&remote_protocol_packets[PACKET_QAllow],
14293                          "QAllow", "allow", 0);
14294
14295   add_packet_config_cmd (&remote_protocol_packets[PACKET_StaticTracepoints],
14296                          "StaticTracepoints", "static-tracepoints", 0);
14297
14298   add_packet_config_cmd (&remote_protocol_packets[PACKET_InstallInTrace],
14299                          "InstallInTrace", "install-in-trace", 0);
14300
14301   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_statictrace_read],
14302                          "qXfer:statictrace:read", "read-sdata-object", 0);
14303
14304   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_fdpic],
14305                          "qXfer:fdpic:read", "read-fdpic-loadmap", 0);
14306
14307   add_packet_config_cmd (&remote_protocol_packets[PACKET_QDisableRandomization],
14308                          "QDisableRandomization", "disable-randomization", 0);
14309
14310   add_packet_config_cmd (&remote_protocol_packets[PACKET_QAgent],
14311                          "QAgent", "agent", 0);
14312
14313   add_packet_config_cmd (&remote_protocol_packets[PACKET_QTBuffer_size],
14314                          "QTBuffer:size", "trace-buffer-size", 0);
14315
14316   add_packet_config_cmd (&remote_protocol_packets[PACKET_Qbtrace_off],
14317        "Qbtrace:off", "disable-btrace", 0);
14318
14319   add_packet_config_cmd (&remote_protocol_packets[PACKET_Qbtrace_bts],
14320        "Qbtrace:bts", "enable-btrace-bts", 0);
14321
14322   add_packet_config_cmd (&remote_protocol_packets[PACKET_Qbtrace_pt],
14323        "Qbtrace:pt", "enable-btrace-pt", 0);
14324
14325   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_btrace],
14326        "qXfer:btrace", "read-btrace", 0);
14327
14328   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_btrace_conf],
14329        "qXfer:btrace-conf", "read-btrace-conf", 0);
14330
14331   add_packet_config_cmd (&remote_protocol_packets[PACKET_Qbtrace_conf_bts_size],
14332        "Qbtrace-conf:bts:size", "btrace-conf-bts-size", 0);
14333
14334   add_packet_config_cmd (&remote_protocol_packets[PACKET_multiprocess_feature],
14335        "multiprocess-feature", "multiprocess-feature", 0);
14336
14337   add_packet_config_cmd (&remote_protocol_packets[PACKET_swbreak_feature],
14338                          "swbreak-feature", "swbreak-feature", 0);
14339
14340   add_packet_config_cmd (&remote_protocol_packets[PACKET_hwbreak_feature],
14341                          "hwbreak-feature", "hwbreak-feature", 0);
14342
14343   add_packet_config_cmd (&remote_protocol_packets[PACKET_fork_event_feature],
14344                          "fork-event-feature", "fork-event-feature", 0);
14345
14346   add_packet_config_cmd (&remote_protocol_packets[PACKET_vfork_event_feature],
14347                          "vfork-event-feature", "vfork-event-feature", 0);
14348
14349   add_packet_config_cmd (&remote_protocol_packets[PACKET_Qbtrace_conf_pt_size],
14350        "Qbtrace-conf:pt:size", "btrace-conf-pt-size", 0);
14351
14352   add_packet_config_cmd (&remote_protocol_packets[PACKET_vContSupported],
14353                          "vContSupported", "verbose-resume-supported", 0);
14354
14355   add_packet_config_cmd (&remote_protocol_packets[PACKET_exec_event_feature],
14356                          "exec-event-feature", "exec-event-feature", 0);
14357
14358   add_packet_config_cmd (&remote_protocol_packets[PACKET_vCtrlC],
14359                          "vCtrlC", "ctrl-c", 0);
14360
14361   add_packet_config_cmd (&remote_protocol_packets[PACKET_QThreadEvents],
14362                          "QThreadEvents", "thread-events", 0);
14363
14364   add_packet_config_cmd (&remote_protocol_packets[PACKET_no_resumed],
14365                          "N stop reply", "no-resumed-stop-reply", 0);
14366
14367   /* Assert that we've registered "set remote foo-packet" commands
14368      for all packet configs.  */
14369   {
14370     int i;
14371
14372     for (i = 0; i < PACKET_MAX; i++)
14373       {
14374         /* Ideally all configs would have a command associated.  Some
14375            still don't though.  */
14376         int excepted;
14377
14378         switch (i)
14379           {
14380           case PACKET_QNonStop:
14381           case PACKET_EnableDisableTracepoints_feature:
14382           case PACKET_tracenz_feature:
14383           case PACKET_DisconnectedTracing_feature:
14384           case PACKET_augmented_libraries_svr4_read_feature:
14385           case PACKET_qCRC:
14386             /* Additions to this list need to be well justified:
14387                pre-existing packets are OK; new packets are not.  */
14388             excepted = 1;
14389             break;
14390           default:
14391             excepted = 0;
14392             break;
14393           }
14394
14395         /* This catches both forgetting to add a config command, and
14396            forgetting to remove a packet from the exception list.  */
14397         gdb_assert (excepted == (remote_protocol_packets[i].name == NULL));
14398       }
14399   }
14400
14401   /* Keep the old ``set remote Z-packet ...'' working.  Each individual
14402      Z sub-packet has its own set and show commands, but users may
14403      have sets to this variable in their .gdbinit files (or in their
14404      documentation).  */
14405   add_setshow_auto_boolean_cmd ("Z-packet", class_obscure,
14406                                 &remote_Z_packet_detect, _("\
14407 Set use of remote protocol `Z' packets"), _("\
14408 Show use of remote protocol `Z' packets "), _("\
14409 When set, GDB will attempt to use the remote breakpoint and watchpoint\n\
14410 packets."),
14411                                 set_remote_protocol_Z_packet_cmd,
14412                                 show_remote_protocol_Z_packet_cmd,
14413                                 /* FIXME: i18n: Use of remote protocol
14414                                    `Z' packets is %s.  */
14415                                 &remote_set_cmdlist, &remote_show_cmdlist);
14416
14417   add_prefix_cmd ("remote", class_files, remote_command, _("\
14418 Manipulate files on the remote system\n\
14419 Transfer files to and from the remote target system."),
14420                   &remote_cmdlist, "remote ",
14421                   0 /* allow-unknown */, &cmdlist);
14422
14423   add_cmd ("put", class_files, remote_put_command,
14424            _("Copy a local file to the remote system."),
14425            &remote_cmdlist);
14426
14427   add_cmd ("get", class_files, remote_get_command,
14428            _("Copy a remote file to the local system."),
14429            &remote_cmdlist);
14430
14431   add_cmd ("delete", class_files, remote_delete_command,
14432            _("Delete a remote file."),
14433            &remote_cmdlist);
14434
14435   add_setshow_string_noescape_cmd ("exec-file", class_files,
14436                                    &remote_exec_file_var, _("\
14437 Set the remote pathname for \"run\""), _("\
14438 Show the remote pathname for \"run\""), NULL,
14439                                    set_remote_exec_file,
14440                                    show_remote_exec_file,
14441                                    &remote_set_cmdlist,
14442                                    &remote_show_cmdlist);
14443
14444   add_setshow_boolean_cmd ("range-stepping", class_run,
14445                            &use_range_stepping, _("\
14446 Enable or disable range stepping."), _("\
14447 Show whether target-assisted range stepping is enabled."), _("\
14448 If on, and the target supports it, when stepping a source line, GDB\n\
14449 tells the target to step the corresponding range of addresses itself instead\n\
14450 of issuing multiple single-steps.  This speeds up source level\n\
14451 stepping.  If off, GDB always issues single-steps, even if range\n\
14452 stepping is supported by the target.  The default is on."),
14453                            set_range_stepping,
14454                            show_range_stepping,
14455                            &setlist,
14456                            &showlist);
14457
14458   /* Eventually initialize fileio.  See fileio.c */
14459   initialize_remote_fileio (remote_set_cmdlist, remote_show_cmdlist);
14460
14461   /* Take advantage of the fact that the TID field is not used, to tag
14462      special ptids with it set to != 0.  */
14463   magic_null_ptid = ptid_build (42000, -1, 1);
14464   not_sent_ptid = ptid_build (42000, -2, 1);
14465   any_thread_ptid = ptid_build (42000, 0, 1);
14466
14467   target_buf_size = 2048;
14468   target_buf = (char *) xmalloc (target_buf_size);
14469 }
14470