Remove regcache_raw_update
[external/binutils.git] / gdb / remote.c
1 /* Remote target communications for serial-line targets in custom GDB protocol
2
3    Copyright (C) 1988-2018 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 "observable.h"
40 #include "solib.h"
41 #include "cli/cli-decode.h"
42 #include "cli/cli-setshow.h"
43 #include "target-descriptions.h"
44 #include "gdb_bfd.h"
45 #include "filestuff.h"
46 #include "rsp-low.h"
47 #include "disasm.h"
48 #include "location.h"
49
50 #include "gdb_sys_time.h"
51
52 #include "event-loop.h"
53 #include "event-top.h"
54 #include "inf-loop.h"
55
56 #include <signal.h>
57 #include "serial.h"
58
59 #include "gdbcore.h" /* for exec_bfd */
60
61 #include "remote-fileio.h"
62 #include "gdb/fileio.h"
63 #include <sys/stat.h>
64 #include "xml-support.h"
65
66 #include "memory-map.h"
67
68 #include "tracepoint.h"
69 #include "ax.h"
70 #include "ax-gdb.h"
71 #include "agent.h"
72 #include "btrace.h"
73 #include "record-btrace.h"
74 #include <algorithm>
75 #include "common/scoped_restore.h"
76 #include "environ.h"
77 #include "common/byte-vector.h"
78 #include <unordered_map>
79
80 /* The remote target.  */
81
82 static const char remote_doc[] = N_("\
83 Use a remote computer via a serial line, using a gdb-specific protocol.\n\
84 Specify the serial device it is connected to\n\
85 (e.g. /dev/ttyS0, /dev/ttya, COM1, etc.).");
86
87 #define OPAQUETHREADBYTES 8
88
89 /* a 64 bit opaque identifier */
90 typedef unsigned char threadref[OPAQUETHREADBYTES];
91
92 struct gdb_ext_thread_info;
93 struct threads_listing_context;
94 typedef int (*rmt_thread_action) (threadref *ref, void *context);
95 struct protocol_feature;
96 struct packet_reg;
97
98 struct stop_reply;
99 typedef struct stop_reply *stop_reply_p;
100
101 DECLARE_QUEUE_P (stop_reply_p);
102 DEFINE_QUEUE_P (stop_reply_p);
103
104 /* Generic configuration support for packets the stub optionally
105    supports.  Allows the user to specify the use of the packet as well
106    as allowing GDB to auto-detect support in the remote stub.  */
107
108 enum packet_support
109   {
110     PACKET_SUPPORT_UNKNOWN = 0,
111     PACKET_ENABLE,
112     PACKET_DISABLE
113   };
114
115 /* Analyze a packet's return value and update the packet config
116    accordingly.  */
117
118 enum packet_result
119 {
120   PACKET_ERROR,
121   PACKET_OK,
122   PACKET_UNKNOWN
123 };
124
125 struct threads_listing_context;
126
127 /* Stub vCont actions support.
128
129    Each field is a boolean flag indicating whether the stub reports
130    support for the corresponding action.  */
131
132 struct vCont_action_support
133 {
134   /* vCont;t */
135   bool t = false;
136
137   /* vCont;r */
138   bool r = false;
139
140   /* vCont;s */
141   bool s = false;
142
143   /* vCont;S */
144   bool S = false;
145 };
146
147 /* About this many threadisds fit in a packet.  */
148
149 #define MAXTHREADLISTRESULTS 32
150
151 /* Data for the vFile:pread readahead cache.  */
152
153 struct readahead_cache
154 {
155   /* Invalidate the readahead cache.  */
156   void invalidate ();
157
158   /* Invalidate the readahead cache if it is holding data for FD.  */
159   void invalidate_fd (int fd);
160
161   /* Serve pread from the readahead cache.  Returns number of bytes
162      read, or 0 if the request can't be served from the cache.  */
163   int pread (int fd, gdb_byte *read_buf, size_t len, ULONGEST offset);
164
165   /* The file descriptor for the file that is being cached.  -1 if the
166      cache is invalid.  */
167   int fd = -1;
168
169   /* The offset into the file that the cache buffer corresponds
170      to.  */
171   ULONGEST offset = 0;
172
173   /* The buffer holding the cache contents.  */
174   gdb_byte *buf = nullptr;
175   /* The buffer's size.  We try to read as much as fits into a packet
176      at a time.  */
177   size_t bufsize = 0;
178
179   /* Cache hit and miss counters.  */
180   ULONGEST hit_count = 0;
181   ULONGEST miss_count = 0;
182 };
183
184 /* Description of the remote protocol for a given architecture.  */
185
186 struct packet_reg
187 {
188   long offset; /* Offset into G packet.  */
189   long regnum; /* GDB's internal register number.  */
190   LONGEST pnum; /* Remote protocol register number.  */
191   int in_g_packet; /* Always part of G packet.  */
192   /* long size in bytes;  == register_size (target_gdbarch (), regnum);
193      at present.  */
194   /* char *name; == gdbarch_register_name (target_gdbarch (), regnum);
195      at present.  */
196 };
197
198 struct remote_arch_state
199 {
200   explicit remote_arch_state (struct gdbarch *gdbarch);
201
202   /* Description of the remote protocol registers.  */
203   long sizeof_g_packet;
204
205   /* Description of the remote protocol registers indexed by REGNUM
206      (making an array gdbarch_num_regs in size).  */
207   std::unique_ptr<packet_reg[]> regs;
208
209   /* This is the size (in chars) of the first response to the ``g''
210      packet.  It is used as a heuristic when determining the maximum
211      size of memory-read and memory-write packets.  A target will
212      typically only reserve a buffer large enough to hold the ``g''
213      packet.  The size does not include packet overhead (headers and
214      trailers).  */
215   long actual_register_packet_size;
216
217   /* This is the maximum size (in chars) of a non read/write packet.
218      It is also used as a cap on the size of read/write packets.  */
219   long remote_packet_size;
220 };
221
222 /* Description of the remote protocol state for the currently
223    connected target.  This is per-target state, and independent of the
224    selected architecture.  */
225
226 class remote_state
227 {
228 public:
229
230   remote_state ();
231   ~remote_state ();
232
233   /* Get the remote arch state for GDBARCH.  */
234   struct remote_arch_state *get_remote_arch_state (struct gdbarch *gdbarch);
235
236 public: /* data */
237
238   /* A buffer to use for incoming packets, and its current size.  The
239      buffer is grown dynamically for larger incoming packets.
240      Outgoing packets may also be constructed in this buffer.
241      BUF_SIZE is always at least REMOTE_PACKET_SIZE;
242      REMOTE_PACKET_SIZE should be used to limit the length of outgoing
243      packets.  */
244   char *buf;
245   long buf_size;
246
247   /* True if we're going through initial connection setup (finding out
248      about the remote side's threads, relocating symbols, etc.).  */
249   bool starting_up = false;
250
251   /* If we negotiated packet size explicitly (and thus can bypass
252      heuristics for the largest packet size that will not overflow
253      a buffer in the stub), this will be set to that packet size.
254      Otherwise zero, meaning to use the guessed size.  */
255   long explicit_packet_size = 0;
256
257   /* remote_wait is normally called when the target is running and
258      waits for a stop reply packet.  But sometimes we need to call it
259      when the target is already stopped.  We can send a "?" packet
260      and have remote_wait read the response.  Or, if we already have
261      the response, we can stash it in BUF and tell remote_wait to
262      skip calling getpkt.  This flag is set when BUF contains a
263      stop reply packet and the target is not waiting.  */
264   int cached_wait_status = 0;
265
266   /* True, if in no ack mode.  That is, neither GDB nor the stub will
267      expect acks from each other.  The connection is assumed to be
268      reliable.  */
269   bool noack_mode = false;
270
271   /* True if we're connected in extended remote mode.  */
272   bool extended = false;
273
274   /* True if we resumed the target and we're waiting for the target to
275      stop.  In the mean time, we can't start another command/query.
276      The remote server wouldn't be ready to process it, so we'd
277      timeout waiting for a reply that would never come and eventually
278      we'd close the connection.  This can happen in asynchronous mode
279      because we allow GDB commands while the target is running.  */
280   bool waiting_for_stop_reply = false;
281
282   /* The status of the stub support for the various vCont actions.  */
283   vCont_action_support supports_vCont;
284
285   /* True if the user has pressed Ctrl-C, but the target hasn't
286      responded to that.  */
287   bool ctrlc_pending_p = false;
288
289   /* True if we saw a Ctrl-C while reading or writing from/to the
290      remote descriptor.  At that point it is not safe to send a remote
291      interrupt packet, so we instead remember we saw the Ctrl-C and
292      process it once we're done with sending/receiving the current
293      packet, which should be shortly.  If however that takes too long,
294      and the user presses Ctrl-C again, we offer to disconnect.  */
295   bool got_ctrlc_during_io = false;
296
297   /* Descriptor for I/O to remote machine.  Initialize it to NULL so that
298      remote_open knows that we don't have a file open when the program
299      starts.  */
300   struct serial *remote_desc = nullptr;
301
302   /* These are the threads which we last sent to the remote system.  The
303      TID member will be -1 for all or -2 for not sent yet.  */
304   ptid_t general_thread = null_ptid;
305   ptid_t continue_thread = null_ptid;
306
307   /* This is the traceframe which we last selected on the remote system.
308      It will be -1 if no traceframe is selected.  */
309   int remote_traceframe_number = -1;
310
311   char *last_pass_packet = nullptr;
312
313   /* The last QProgramSignals packet sent to the target.  We bypass
314      sending a new program signals list down to the target if the new
315      packet is exactly the same as the last we sent.  IOW, we only let
316      the target know about program signals list changes.  */
317   char *last_program_signals_packet = nullptr;
318
319   gdb_signal last_sent_signal = GDB_SIGNAL_0;
320
321   bool last_sent_step = false;
322
323   /* The execution direction of the last resume we got.  */
324   exec_direction_kind last_resume_exec_dir = EXEC_FORWARD;
325
326   char *finished_object = nullptr;
327   char *finished_annex = nullptr;
328   ULONGEST finished_offset = 0;
329
330   /* Should we try the 'ThreadInfo' query packet?
331
332      This variable (NOT available to the user: auto-detect only!)
333      determines whether GDB will use the new, simpler "ThreadInfo"
334      query or the older, more complex syntax for thread queries.
335      This is an auto-detect variable (set to true at each connect,
336      and set to false when the target fails to recognize it).  */
337   bool use_threadinfo_query = false;
338   bool use_threadextra_query = false;
339
340   threadref echo_nextthread {};
341   threadref nextthread {};
342   threadref resultthreadlist[MAXTHREADLISTRESULTS] {};
343
344   /* The state of remote notification.  */
345   struct remote_notif_state *notif_state = nullptr;
346
347   /* The branch trace configuration.  */
348   struct btrace_config btrace_config {};
349
350   /* The argument to the last "vFile:setfs:" packet we sent, used
351      to avoid sending repeated unnecessary "vFile:setfs:" packets.
352      Initialized to -1 to indicate that no "vFile:setfs:" packet
353      has yet been sent.  */
354   int fs_pid = -1;
355
356   /* A readahead cache for vFile:pread.  Often, reading a binary
357      involves a sequence of small reads.  E.g., when parsing an ELF
358      file.  A readahead cache helps mostly the case of remote
359      debugging on a connection with higher latency, due to the
360      request/reply nature of the RSP.  We only cache data for a single
361      file descriptor at a time.  */
362   struct readahead_cache readahead_cache;
363
364   /* The list of already fetched and acknowledged stop events.  This
365      queue is used for notification Stop, and other notifications
366      don't need queue for their events, because the notification
367      events of Stop can't be consumed immediately, so that events
368      should be queued first, and be consumed by remote_wait_{ns,as}
369      one per time.  Other notifications can consume their events
370      immediately, so queue is not needed for them.  */
371   QUEUE (stop_reply_p) *stop_reply_queue;
372
373   /* Asynchronous signal handle registered as event loop source for
374      when we have pending events ready to be passed to the core.  */
375   struct async_event_handler *remote_async_inferior_event_token = nullptr;
376
377   /* FIXME: cagney/1999-09-23: Even though getpkt was called with
378      ``forever'' still use the normal timeout mechanism.  This is
379      currently used by the ASYNC code to guarentee that target reads
380      during the initial connect always time-out.  Once getpkt has been
381      modified to return a timeout indication and, in turn
382      remote_wait()/wait_for_inferior() have gained a timeout parameter
383      this can go away.  */
384   int wait_forever_enabled_p = 1;
385
386 private:
387   /* Mapping of remote protocol data for each gdbarch.  Usually there
388      is only one entry here, though we may see more with stubs that
389      support multi-process.  */
390   std::unordered_map<struct gdbarch *, remote_arch_state>
391     m_arch_states;
392 };
393
394 static const target_info remote_target_info = {
395   "remote",
396   N_("Remote serial target in gdb-specific protocol"),
397   remote_doc
398 };
399
400 class remote_target : public target_ops
401 {
402 public:
403   remote_target ()
404   {
405     to_stratum = process_stratum;
406   }
407   ~remote_target () override;
408
409   const target_info &info () const override
410   { return remote_target_info; }
411
412   thread_control_capabilities get_thread_control_capabilities () override
413   { return tc_schedlock; }
414
415   /* Open a remote connection.  */
416   static void open (const char *, int);
417
418   void close () override;
419
420   void detach (inferior *, int) override;
421   void disconnect (const char *, int) override;
422
423   void commit_resume () override;
424   void resume (ptid_t, int, enum gdb_signal) override;
425   ptid_t wait (ptid_t, struct target_waitstatus *, int) override;
426
427   void fetch_registers (struct regcache *, int) override;
428   void store_registers (struct regcache *, int) override;
429   void prepare_to_store (struct regcache *) override;
430
431   void files_info () override;
432
433   int insert_breakpoint (struct gdbarch *, struct bp_target_info *) override;
434
435   int remove_breakpoint (struct gdbarch *, struct bp_target_info *,
436                          enum remove_bp_reason) override;
437
438
439   bool stopped_by_sw_breakpoint () override;
440   bool supports_stopped_by_sw_breakpoint () override;
441
442   bool stopped_by_hw_breakpoint () override;
443
444   bool supports_stopped_by_hw_breakpoint () override;
445
446   bool stopped_by_watchpoint () override;
447
448   bool stopped_data_address (CORE_ADDR *) override;
449
450   bool watchpoint_addr_within_range (CORE_ADDR, CORE_ADDR, int) override;
451
452   int can_use_hw_breakpoint (enum bptype, int, int) override;
453
454   int insert_hw_breakpoint (struct gdbarch *, struct bp_target_info *) override;
455
456   int remove_hw_breakpoint (struct gdbarch *, struct bp_target_info *) override;
457
458   int region_ok_for_hw_watchpoint (CORE_ADDR, int) override;
459
460   int insert_watchpoint (CORE_ADDR, int, enum target_hw_bp_type,
461                          struct expression *) override;
462
463   int remove_watchpoint (CORE_ADDR, int, enum target_hw_bp_type,
464                          struct expression *) override;
465
466   void kill () override;
467
468   void load (const char *, int) override;
469
470   void mourn_inferior () override;
471
472   void pass_signals (int, unsigned char *) override;
473
474   int set_syscall_catchpoint (int, bool, int,
475                               gdb::array_view<const int>) override;
476
477   void program_signals (int, unsigned char *) override;
478
479   bool thread_alive (ptid_t ptid) override;
480
481   const char *thread_name (struct thread_info *) override;
482
483   void update_thread_list () override;
484
485   const char *pid_to_str (ptid_t) override;
486
487   const char *extra_thread_info (struct thread_info *) override;
488
489   ptid_t get_ada_task_ptid (long lwp, long thread) override;
490
491   thread_info *thread_handle_to_thread_info (const gdb_byte *thread_handle,
492                                              int handle_len,
493                                              inferior *inf) override;
494
495   void stop (ptid_t) override;
496
497   void interrupt () override;
498
499   void pass_ctrlc () override;
500
501   enum target_xfer_status xfer_partial (enum target_object object,
502                                         const char *annex,
503                                         gdb_byte *readbuf,
504                                         const gdb_byte *writebuf,
505                                         ULONGEST offset, ULONGEST len,
506                                         ULONGEST *xfered_len) override;
507
508   ULONGEST get_memory_xfer_limit () override;
509
510   void rcmd (const char *command, struct ui_file *output) override;
511
512   char *pid_to_exec_file (int pid) override;
513
514   void log_command (const char *cmd) override
515   {
516     serial_log_command (this, cmd);
517   }
518
519   CORE_ADDR get_thread_local_address (ptid_t ptid,
520                                       CORE_ADDR load_module_addr,
521                                       CORE_ADDR offset) override;
522
523   bool has_all_memory ()  override { return default_child_has_all_memory (); }
524   bool has_memory ()  override { return default_child_has_memory (); }
525   bool has_stack ()  override { return default_child_has_stack (); }
526   bool has_registers ()  override { return default_child_has_registers (); }
527   bool has_execution (ptid_t ptid)  override { return default_child_has_execution (ptid); }
528
529   bool can_execute_reverse () override;
530
531   std::vector<mem_region> memory_map () override;
532
533   void flash_erase (ULONGEST address, LONGEST length) override;
534
535   void flash_done () override;
536
537   const struct target_desc *read_description () override;
538
539   int search_memory (CORE_ADDR start_addr, ULONGEST search_space_len,
540                      const gdb_byte *pattern, ULONGEST pattern_len,
541                      CORE_ADDR *found_addrp) override;
542
543   bool can_async_p () override;
544
545   bool is_async_p () override;
546
547   void async (int) override;
548
549   void thread_events (int) override;
550
551   int can_do_single_step () override;
552
553   void terminal_inferior () override;
554
555   void terminal_ours () override;
556
557   bool supports_non_stop () override;
558
559   bool supports_multi_process () override;
560
561   bool supports_disable_randomization () override;
562
563   bool filesystem_is_local () override;
564
565
566   int fileio_open (struct inferior *inf, const char *filename,
567                    int flags, int mode, int warn_if_slow,
568                    int *target_errno) override;
569
570   int fileio_pwrite (int fd, const gdb_byte *write_buf, int len,
571                      ULONGEST offset, int *target_errno) override;
572
573   int fileio_pread (int fd, gdb_byte *read_buf, int len,
574                     ULONGEST offset, int *target_errno) override;
575
576   int fileio_fstat (int fd, struct stat *sb, int *target_errno) override;
577
578   int fileio_close (int fd, int *target_errno) override;
579
580   int fileio_unlink (struct inferior *inf,
581                      const char *filename,
582                      int *target_errno) override;
583
584   gdb::optional<std::string>
585     fileio_readlink (struct inferior *inf,
586                      const char *filename,
587                      int *target_errno) override;
588
589   bool supports_enable_disable_tracepoint () override;
590
591   bool supports_string_tracing () override;
592
593   bool supports_evaluation_of_breakpoint_conditions () override;
594
595   bool can_run_breakpoint_commands () override;
596
597   void trace_init () override;
598
599   void download_tracepoint (struct bp_location *location) override;
600
601   bool can_download_tracepoint () override;
602
603   void download_trace_state_variable (const trace_state_variable &tsv) override;
604
605   void enable_tracepoint (struct bp_location *location) override;
606
607   void disable_tracepoint (struct bp_location *location) override;
608
609   void trace_set_readonly_regions () override;
610
611   void trace_start () override;
612
613   int get_trace_status (struct trace_status *ts) override;
614
615   void get_tracepoint_status (struct breakpoint *tp, struct uploaded_tp *utp)
616     override;
617
618   void trace_stop () override;
619
620   int trace_find (enum trace_find_type type, int num,
621                   CORE_ADDR addr1, CORE_ADDR addr2, int *tpp) override;
622
623   bool get_trace_state_variable_value (int tsv, LONGEST *val) override;
624
625   int save_trace_data (const char *filename) override;
626
627   int upload_tracepoints (struct uploaded_tp **utpp) override;
628
629   int upload_trace_state_variables (struct uploaded_tsv **utsvp) override;
630
631   LONGEST get_raw_trace_data (gdb_byte *buf, ULONGEST offset, LONGEST len) override;
632
633   int get_min_fast_tracepoint_insn_len () override;
634
635   void set_disconnected_tracing (int val) override;
636
637   void set_circular_trace_buffer (int val) override;
638
639   void set_trace_buffer_size (LONGEST val) override;
640
641   bool set_trace_notes (const char *user, const char *notes,
642                         const char *stopnotes) override;
643
644   int core_of_thread (ptid_t ptid) override;
645
646   int verify_memory (const gdb_byte *data,
647                      CORE_ADDR memaddr, ULONGEST size) override;
648
649
650   bool get_tib_address (ptid_t ptid, CORE_ADDR *addr) override;
651
652   void set_permissions () override;
653
654   bool static_tracepoint_marker_at (CORE_ADDR,
655                                     struct static_tracepoint_marker *marker)
656     override;
657
658   std::vector<static_tracepoint_marker>
659     static_tracepoint_markers_by_strid (const char *id) override;
660
661   traceframe_info_up traceframe_info () override;
662
663   bool use_agent (bool use) override;
664   bool can_use_agent () override;
665
666   struct btrace_target_info *enable_btrace (ptid_t ptid,
667                                             const struct btrace_config *conf) override;
668
669   void disable_btrace (struct btrace_target_info *tinfo) override;
670
671   void teardown_btrace (struct btrace_target_info *tinfo) override;
672
673   enum btrace_error read_btrace (struct btrace_data *data,
674                                  struct btrace_target_info *btinfo,
675                                  enum btrace_read_type type) override;
676
677   const struct btrace_config *btrace_conf (const struct btrace_target_info *) override;
678   bool augmented_libraries_svr4_read () override;
679   int follow_fork (int, int) override;
680   void follow_exec (struct inferior *, char *) override;
681   int insert_fork_catchpoint (int) override;
682   int remove_fork_catchpoint (int) override;
683   int insert_vfork_catchpoint (int) override;
684   int remove_vfork_catchpoint (int) override;
685   int insert_exec_catchpoint (int) override;
686   int remove_exec_catchpoint (int) override;
687   enum exec_direction_kind execution_direction () override;
688
689 public: /* Remote specific methods.  */
690
691   void remote_download_command_source (int num, ULONGEST addr,
692                                        struct command_line *cmds);
693
694   void remote_file_put (const char *local_file, const char *remote_file,
695                         int from_tty);
696   void remote_file_get (const char *remote_file, const char *local_file,
697                         int from_tty);
698   void remote_file_delete (const char *remote_file, int from_tty);
699
700   int remote_hostio_pread (int fd, gdb_byte *read_buf, int len,
701                            ULONGEST offset, int *remote_errno);
702   int remote_hostio_pwrite (int fd, const gdb_byte *write_buf, int len,
703                             ULONGEST offset, int *remote_errno);
704   int remote_hostio_pread_vFile (int fd, gdb_byte *read_buf, int len,
705                                  ULONGEST offset, int *remote_errno);
706
707   int remote_hostio_send_command (int command_bytes, int which_packet,
708                                   int *remote_errno, char **attachment,
709                                   int *attachment_len);
710   int remote_hostio_set_filesystem (struct inferior *inf,
711                                     int *remote_errno);
712   /* We should get rid of this and use fileio_open directly.  */
713   int remote_hostio_open (struct inferior *inf, const char *filename,
714                           int flags, int mode, int warn_if_slow,
715                           int *remote_errno);
716   int remote_hostio_close (int fd, int *remote_errno);
717
718   int remote_hostio_unlink (inferior *inf, const char *filename,
719                             int *remote_errno);
720
721   struct remote_state *get_remote_state ();
722
723   long get_remote_packet_size (void);
724   long get_memory_packet_size (struct memory_packet_config *config);
725
726   long get_memory_write_packet_size ();
727   long get_memory_read_packet_size ();
728
729   char *append_pending_thread_resumptions (char *p, char *endp,
730                                            ptid_t ptid);
731   static void open_1 (const char *name, int from_tty, int extended_p);
732   void start_remote (int from_tty, int extended_p);
733   void remote_detach_1 (int from_tty, struct inferior *inf);
734
735   char *append_resumption (char *p, char *endp,
736                            ptid_t ptid, int step, gdb_signal siggnal);
737   int remote_resume_with_vcont (ptid_t ptid, int step,
738                                 gdb_signal siggnal);
739
740   void add_current_inferior_and_thread (char *wait_status);
741
742   ptid_t wait_ns (ptid_t ptid, struct target_waitstatus *status,
743                   int options);
744   ptid_t wait_as (ptid_t ptid, target_waitstatus *status,
745                   int options);
746
747   ptid_t process_stop_reply (struct stop_reply *stop_reply,
748                              target_waitstatus *status);
749
750   void remote_notice_new_inferior (ptid_t currthread, int executing);
751
752   void process_initial_stop_replies (int from_tty);
753
754   void remote_add_thread (ptid_t ptid, bool running, bool executing);
755
756   void btrace_sync_conf (const btrace_config *conf);
757
758   void remote_btrace_maybe_reopen ();
759
760   void remove_new_fork_children (threads_listing_context *context);
761   void kill_new_fork_children (int pid);
762   void discard_pending_stop_replies (struct inferior *inf);
763   int stop_reply_queue_length ();
764
765   void check_pending_events_prevent_wildcard_vcont
766     (int *may_global_wildcard_vcont);
767
768   void discard_pending_stop_replies_in_queue ();
769   struct stop_reply *remote_notif_remove_queued_reply (ptid_t ptid);
770   struct stop_reply *queued_stop_reply (ptid_t ptid);
771   int peek_stop_reply (ptid_t ptid);
772   void remote_parse_stop_reply (char *buf, stop_reply *event);
773
774   void remote_stop_ns (ptid_t ptid);
775   void remote_interrupt_as ();
776   void remote_interrupt_ns ();
777
778   char *remote_get_noisy_reply ();
779   int remote_query_attached (int pid);
780   inferior *remote_add_inferior (int fake_pid_p, int pid, int attached,
781                                  int try_open_exec);
782
783   ptid_t remote_current_thread (ptid_t oldpid);
784   ptid_t get_current_thread (char *wait_status);
785
786   void set_thread (ptid_t ptid, int gen);
787   void set_general_thread (ptid_t ptid);
788   void set_continue_thread (ptid_t ptid);
789   void set_general_process ();
790
791   char *write_ptid (char *buf, const char *endbuf, ptid_t ptid);
792
793   int remote_unpack_thread_info_response (char *pkt, threadref *expectedref,
794                                           gdb_ext_thread_info *info);
795   int remote_get_threadinfo (threadref *threadid, int fieldset,
796                              gdb_ext_thread_info *info);
797
798   int parse_threadlist_response (char *pkt, int result_limit,
799                                  threadref *original_echo,
800                                  threadref *resultlist,
801                                  int *doneflag);
802   int remote_get_threadlist (int startflag, threadref *nextthread,
803                              int result_limit, int *done, int *result_count,
804                              threadref *threadlist);
805
806   int remote_threadlist_iterator (rmt_thread_action stepfunction,
807                                   void *context, int looplimit);
808
809   int remote_get_threads_with_ql (threads_listing_context *context);
810   int remote_get_threads_with_qxfer (threads_listing_context *context);
811   int remote_get_threads_with_qthreadinfo (threads_listing_context *context);
812
813   void extended_remote_restart ();
814
815   void get_offsets ();
816
817   void remote_check_symbols ();
818
819   void remote_supported_packet (const struct protocol_feature *feature,
820                                 enum packet_support support,
821                                 const char *argument);
822
823   void remote_query_supported ();
824
825   void remote_packet_size (const protocol_feature *feature,
826                            packet_support support, const char *value);
827
828   void remote_serial_quit_handler ();
829
830   void remote_detach_pid (int pid);
831
832   void remote_vcont_probe ();
833
834   void remote_resume_with_hc (ptid_t ptid, int step,
835                               gdb_signal siggnal);
836
837   void send_interrupt_sequence ();
838   void interrupt_query ();
839
840   void remote_notif_get_pending_events (notif_client *nc);
841
842   int fetch_register_using_p (struct regcache *regcache,
843                               packet_reg *reg);
844   int send_g_packet ();
845   void process_g_packet (struct regcache *regcache);
846   void fetch_registers_using_g (struct regcache *regcache);
847   int store_register_using_P (const struct regcache *regcache,
848                               packet_reg *reg);
849   void store_registers_using_G (const struct regcache *regcache);
850
851   void set_remote_traceframe ();
852
853   void check_binary_download (CORE_ADDR addr);
854
855   target_xfer_status remote_write_bytes_aux (const char *header,
856                                              CORE_ADDR memaddr,
857                                              const gdb_byte *myaddr,
858                                              ULONGEST len_units,
859                                              int unit_size,
860                                              ULONGEST *xfered_len_units,
861                                              char packet_format,
862                                              int use_length);
863
864   target_xfer_status remote_write_bytes (CORE_ADDR memaddr,
865                                          const gdb_byte *myaddr, ULONGEST len,
866                                          int unit_size, ULONGEST *xfered_len);
867
868   target_xfer_status remote_read_bytes_1 (CORE_ADDR memaddr, gdb_byte *myaddr,
869                                           ULONGEST len_units,
870                                           int unit_size, ULONGEST *xfered_len_units);
871
872   target_xfer_status remote_xfer_live_readonly_partial (gdb_byte *readbuf,
873                                                         ULONGEST memaddr,
874                                                         ULONGEST len,
875                                                         int unit_size,
876                                                         ULONGEST *xfered_len);
877
878   target_xfer_status remote_read_bytes (CORE_ADDR memaddr,
879                                         gdb_byte *myaddr, ULONGEST len,
880                                         int unit_size,
881                                         ULONGEST *xfered_len);
882
883   packet_result remote_send_printf (const char *format, ...)
884     ATTRIBUTE_PRINTF (2, 3);
885
886   target_xfer_status remote_flash_write (ULONGEST address,
887                                          ULONGEST length, ULONGEST *xfered_len,
888                                          const gdb_byte *data);
889
890   int readchar (int timeout);
891
892   void remote_serial_write (const char *str, int len);
893
894   int putpkt (const char *buf);
895   int putpkt_binary (const char *buf, int cnt);
896
897   void skip_frame ();
898   long read_frame (char **buf_p, long *sizeof_buf);
899   void getpkt (char **buf, long *sizeof_buf, int forever);
900   int getpkt_or_notif_sane_1 (char **buf, long *sizeof_buf, int forever,
901                               int expecting_notif, int *is_notif);
902   int getpkt_sane (char **buf, long *sizeof_buf, int forever);
903   int getpkt_or_notif_sane (char **buf, long *sizeof_buf, int forever,
904                             int *is_notif);
905   int remote_vkill (int pid);
906   void remote_kill_k ();
907
908   void extended_remote_disable_randomization (int val);
909   int extended_remote_run (const std::string &args);
910
911   void send_environment_packet (const char *action,
912                                 const char *packet,
913                                 const char *value);
914
915   void extended_remote_environment_support ();
916   void extended_remote_set_inferior_cwd ();
917
918   target_xfer_status remote_write_qxfer (const char *object_name,
919                                          const char *annex,
920                                          const gdb_byte *writebuf,
921                                          ULONGEST offset, LONGEST len,
922                                          ULONGEST *xfered_len,
923                                          struct packet_config *packet);
924
925   target_xfer_status remote_read_qxfer (const char *object_name,
926                                         const char *annex,
927                                         gdb_byte *readbuf, ULONGEST offset,
928                                         LONGEST len,
929                                         ULONGEST *xfered_len,
930                                         struct packet_config *packet);
931
932   void push_stop_reply (struct stop_reply *new_event);
933
934   bool vcont_r_supported ();
935
936   void packet_command (const char *args, int from_tty);
937
938 private: /* data fields */
939
940   /* The remote state.  Don't reference this directly.  Use the
941      get_remote_state method instead.  */
942   remote_state m_remote_state;
943 };
944
945 static const target_info extended_remote_target_info = {
946   "extended-remote",
947   N_("Extended remote serial target in gdb-specific protocol"),
948   remote_doc
949 };
950
951 /* Set up the extended remote target by extending the standard remote
952    target and adding to it.  */
953
954 class extended_remote_target final : public remote_target
955 {
956 public:
957   const target_info &info () const override
958   { return extended_remote_target_info; }
959
960   /* Open an extended-remote connection.  */
961   static void open (const char *, int);
962
963   bool can_create_inferior () override { return true; }
964   void create_inferior (const char *, const std::string &,
965                         char **, int) override;
966
967   void detach (inferior *, int) override;
968
969   bool can_attach () override { return true; }
970   void attach (const char *, int) override;
971
972   void post_attach (int) override;
973   bool supports_disable_randomization () override;
974 };
975
976 /* Per-program-space data key.  */
977 static const struct program_space_data *remote_pspace_data;
978
979 /* The variable registered as the control variable used by the
980    remote exec-file commands.  While the remote exec-file setting is
981    per-program-space, the set/show machinery uses this as the 
982    location of the remote exec-file value.  */
983 static char *remote_exec_file_var;
984
985 /* The size to align memory write packets, when practical.  The protocol
986    does not guarantee any alignment, and gdb will generate short
987    writes and unaligned writes, but even as a best-effort attempt this
988    can improve bulk transfers.  For instance, if a write is misaligned
989    relative to the target's data bus, the stub may need to make an extra
990    round trip fetching data from the target.  This doesn't make a
991    huge difference, but it's easy to do, so we try to be helpful.
992
993    The alignment chosen is arbitrary; usually data bus width is
994    important here, not the possibly larger cache line size.  */
995 enum { REMOTE_ALIGN_WRITES = 16 };
996
997 /* Prototypes for local functions.  */
998
999 static int hexnumlen (ULONGEST num);
1000
1001 static int stubhex (int ch);
1002
1003 static int hexnumstr (char *, ULONGEST);
1004
1005 static int hexnumnstr (char *, ULONGEST, int);
1006
1007 static CORE_ADDR remote_address_masked (CORE_ADDR);
1008
1009 static void print_packet (const char *);
1010
1011 static int stub_unpack_int (char *buff, int fieldlength);
1012
1013 struct packet_config;
1014
1015 static void show_packet_config_cmd (struct packet_config *config);
1016
1017 static void show_remote_protocol_packet_cmd (struct ui_file *file,
1018                                              int from_tty,
1019                                              struct cmd_list_element *c,
1020                                              const char *value);
1021
1022 static ptid_t read_ptid (const char *buf, const char **obuf);
1023
1024 struct stop_reply;
1025 static void stop_reply_xfree (struct stop_reply *);
1026
1027 static void remote_async_inferior_event_handler (gdb_client_data);
1028
1029 static int remote_read_description_p (struct target_ops *target);
1030
1031 static void remote_console_output (char *msg);
1032
1033 static void remote_btrace_reset (remote_state *rs);
1034
1035 static void remote_unpush_and_throw (void);
1036
1037 /* For "remote".  */
1038
1039 static struct cmd_list_element *remote_cmdlist;
1040
1041 /* For "set remote" and "show remote".  */
1042
1043 static struct cmd_list_element *remote_set_cmdlist;
1044 static struct cmd_list_element *remote_show_cmdlist;
1045
1046 /* Controls whether GDB is willing to use range stepping.  */
1047
1048 static int use_range_stepping = 1;
1049
1050 /* The max number of chars in debug output.  The rest of chars are
1051    omitted.  */
1052
1053 #define REMOTE_DEBUG_MAX_CHAR 512
1054
1055 /* Private data that we'll store in (struct thread_info)->priv.  */
1056 struct remote_thread_info : public private_thread_info
1057 {
1058   std::string extra;
1059   std::string name;
1060   int core = -1;
1061
1062   /* Thread handle, perhaps a pthread_t or thread_t value, stored as a
1063      sequence of bytes.  */
1064   gdb::byte_vector thread_handle;
1065
1066   /* Whether the target stopped for a breakpoint/watchpoint.  */
1067   enum target_stop_reason stop_reason = TARGET_STOPPED_BY_NO_REASON;
1068
1069   /* This is set to the data address of the access causing the target
1070      to stop for a watchpoint.  */
1071   CORE_ADDR watch_data_address = 0;
1072
1073   /* Fields used by the vCont action coalescing implemented in
1074      remote_resume / remote_commit_resume.  remote_resume stores each
1075      thread's last resume request in these fields, so that a later
1076      remote_commit_resume knows which is the proper action for this
1077      thread to include in the vCont packet.  */
1078
1079   /* True if the last target_resume call for this thread was a step
1080      request, false if a continue request.  */
1081   int last_resume_step = 0;
1082
1083   /* The signal specified in the last target_resume call for this
1084      thread.  */
1085   gdb_signal last_resume_sig = GDB_SIGNAL_0;
1086
1087   /* Whether this thread was already vCont-resumed on the remote
1088      side.  */
1089   int vcont_resumed = 0;
1090 };
1091
1092 remote_state::remote_state ()
1093 {
1094   /* The default buffer size is unimportant; it will be expanded
1095      whenever a larger buffer is needed. */
1096   this->buf_size = 400;
1097   this->buf = (char *) xmalloc (this->buf_size);
1098
1099   this->stop_reply_queue = QUEUE_alloc (stop_reply_p, stop_reply_xfree);
1100 }
1101
1102 remote_state::~remote_state ()
1103 {
1104   xfree (this->last_pass_packet);
1105   xfree (this->last_program_signals_packet);
1106   xfree (this->buf);
1107   xfree (this->finished_object);
1108   xfree (this->finished_annex);
1109   QUEUE_free (stop_reply_p, this->stop_reply_queue);
1110 }
1111
1112 /* Utility: generate error from an incoming stub packet.  */
1113 static void
1114 trace_error (char *buf)
1115 {
1116   if (*buf++ != 'E')
1117     return;                     /* not an error msg */
1118   switch (*buf)
1119     {
1120     case '1':                   /* malformed packet error */
1121       if (*++buf == '0')        /*   general case: */
1122         error (_("remote.c: error in outgoing packet."));
1123       else
1124         error (_("remote.c: error in outgoing packet at field #%ld."),
1125                strtol (buf, NULL, 16));
1126     default:
1127       error (_("Target returns error code '%s'."), buf);
1128     }
1129 }
1130
1131 /* Utility: wait for reply from stub, while accepting "O" packets.  */
1132
1133 char *
1134 remote_target::remote_get_noisy_reply ()
1135 {
1136   struct remote_state *rs = get_remote_state ();
1137
1138   do                            /* Loop on reply from remote stub.  */
1139     {
1140       char *buf;
1141
1142       QUIT;                     /* Allow user to bail out with ^C.  */
1143       getpkt (&rs->buf, &rs->buf_size, 0);
1144       buf = rs->buf;
1145       if (buf[0] == 'E')
1146         trace_error (buf);
1147       else if (startswith (buf, "qRelocInsn:"))
1148         {
1149           ULONGEST ul;
1150           CORE_ADDR from, to, org_to;
1151           const char *p, *pp;
1152           int adjusted_size = 0;
1153           int relocated = 0;
1154
1155           p = buf + strlen ("qRelocInsn:");
1156           pp = unpack_varlen_hex (p, &ul);
1157           if (*pp != ';')
1158             error (_("invalid qRelocInsn packet: %s"), buf);
1159           from = ul;
1160
1161           p = pp + 1;
1162           unpack_varlen_hex (p, &ul);
1163           to = ul;
1164
1165           org_to = to;
1166
1167           TRY
1168             {
1169               gdbarch_relocate_instruction (target_gdbarch (), &to, from);
1170               relocated = 1;
1171             }
1172           CATCH (ex, RETURN_MASK_ALL)
1173             {
1174               if (ex.error == MEMORY_ERROR)
1175                 {
1176                   /* Propagate memory errors silently back to the
1177                      target.  The stub may have limited the range of
1178                      addresses we can write to, for example.  */
1179                 }
1180               else
1181                 {
1182                   /* Something unexpectedly bad happened.  Be verbose
1183                      so we can tell what, and propagate the error back
1184                      to the stub, so it doesn't get stuck waiting for
1185                      a response.  */
1186                   exception_fprintf (gdb_stderr, ex,
1187                                      _("warning: relocating instruction: "));
1188                 }
1189               putpkt ("E01");
1190             }
1191           END_CATCH
1192
1193           if (relocated)
1194             {
1195               adjusted_size = to - org_to;
1196
1197               xsnprintf (buf, rs->buf_size, "qRelocInsn:%x", adjusted_size);
1198               putpkt (buf);
1199             }
1200         }
1201       else if (buf[0] == 'O' && buf[1] != 'K')
1202         remote_console_output (buf + 1);        /* 'O' message from stub */
1203       else
1204         return buf;             /* Here's the actual reply.  */
1205     }
1206   while (1);
1207 }
1208
1209 struct remote_arch_state *
1210 remote_state::get_remote_arch_state (struct gdbarch *gdbarch)
1211 {
1212   remote_arch_state *rsa;
1213
1214   auto it = this->m_arch_states.find (gdbarch);
1215   if (it == this->m_arch_states.end ())
1216     {
1217       auto p = this->m_arch_states.emplace (std::piecewise_construct,
1218                                             std::forward_as_tuple (gdbarch),
1219                                             std::forward_as_tuple (gdbarch));
1220       rsa = &p.first->second;
1221
1222       /* Make sure that the packet buffer is plenty big enough for
1223          this architecture.  */
1224       if (this->buf_size < rsa->remote_packet_size)
1225         {
1226           this->buf_size = 2 * rsa->remote_packet_size;
1227           this->buf = (char *) xrealloc (this->buf, this->buf_size);
1228         }
1229     }
1230   else
1231     rsa = &it->second;
1232
1233   return rsa;
1234 }
1235
1236 /* Fetch the global remote target state.  */
1237
1238 remote_state *
1239 remote_target::get_remote_state ()
1240 {
1241   /* Make sure that the remote architecture state has been
1242      initialized, because doing so might reallocate rs->buf.  Any
1243      function which calls getpkt also needs to be mindful of changes
1244      to rs->buf, but this call limits the number of places which run
1245      into trouble.  */
1246   m_remote_state.get_remote_arch_state (target_gdbarch ());
1247
1248   return &m_remote_state;
1249 }
1250
1251 /* Cleanup routine for the remote module's pspace data.  */
1252
1253 static void
1254 remote_pspace_data_cleanup (struct program_space *pspace, void *arg)
1255 {
1256   char *remote_exec_file = (char *) arg;
1257
1258   xfree (remote_exec_file);
1259 }
1260
1261 /* Fetch the remote exec-file from the current program space.  */
1262
1263 static const char *
1264 get_remote_exec_file (void)
1265 {
1266   char *remote_exec_file;
1267
1268   remote_exec_file
1269     = (char *) program_space_data (current_program_space,
1270                                    remote_pspace_data);
1271   if (remote_exec_file == NULL)
1272     return "";
1273
1274   return remote_exec_file;
1275 }
1276
1277 /* Set the remote exec file for PSPACE.  */
1278
1279 static void
1280 set_pspace_remote_exec_file (struct program_space *pspace,
1281                         char *remote_exec_file)
1282 {
1283   char *old_file = (char *) program_space_data (pspace, remote_pspace_data);
1284
1285   xfree (old_file);
1286   set_program_space_data (pspace, remote_pspace_data,
1287                           xstrdup (remote_exec_file));
1288 }
1289
1290 /* The "set/show remote exec-file" set command hook.  */
1291
1292 static void
1293 set_remote_exec_file (const char *ignored, int from_tty,
1294                       struct cmd_list_element *c)
1295 {
1296   gdb_assert (remote_exec_file_var != NULL);
1297   set_pspace_remote_exec_file (current_program_space, remote_exec_file_var);
1298 }
1299
1300 /* The "set/show remote exec-file" show command hook.  */
1301
1302 static void
1303 show_remote_exec_file (struct ui_file *file, int from_tty,
1304                        struct cmd_list_element *cmd, const char *value)
1305 {
1306   fprintf_filtered (file, "%s\n", remote_exec_file_var);
1307 }
1308
1309 static int
1310 compare_pnums (const void *lhs_, const void *rhs_)
1311 {
1312   const struct packet_reg * const *lhs
1313     = (const struct packet_reg * const *) lhs_;
1314   const struct packet_reg * const *rhs
1315     = (const struct packet_reg * const *) rhs_;
1316
1317   if ((*lhs)->pnum < (*rhs)->pnum)
1318     return -1;
1319   else if ((*lhs)->pnum == (*rhs)->pnum)
1320     return 0;
1321   else
1322     return 1;
1323 }
1324
1325 static int
1326 map_regcache_remote_table (struct gdbarch *gdbarch, struct packet_reg *regs)
1327 {
1328   int regnum, num_remote_regs, offset;
1329   struct packet_reg **remote_regs;
1330
1331   for (regnum = 0; regnum < gdbarch_num_regs (gdbarch); regnum++)
1332     {
1333       struct packet_reg *r = &regs[regnum];
1334
1335       if (register_size (gdbarch, regnum) == 0)
1336         /* Do not try to fetch zero-sized (placeholder) registers.  */
1337         r->pnum = -1;
1338       else
1339         r->pnum = gdbarch_remote_register_number (gdbarch, regnum);
1340
1341       r->regnum = regnum;
1342     }
1343
1344   /* Define the g/G packet format as the contents of each register
1345      with a remote protocol number, in order of ascending protocol
1346      number.  */
1347
1348   remote_regs = XALLOCAVEC (struct packet_reg *, gdbarch_num_regs (gdbarch));
1349   for (num_remote_regs = 0, regnum = 0;
1350        regnum < gdbarch_num_regs (gdbarch);
1351        regnum++)
1352     if (regs[regnum].pnum != -1)
1353       remote_regs[num_remote_regs++] = &regs[regnum];
1354
1355   qsort (remote_regs, num_remote_regs, sizeof (struct packet_reg *),
1356          compare_pnums);
1357
1358   for (regnum = 0, offset = 0; regnum < num_remote_regs; regnum++)
1359     {
1360       remote_regs[regnum]->in_g_packet = 1;
1361       remote_regs[regnum]->offset = offset;
1362       offset += register_size (gdbarch, remote_regs[regnum]->regnum);
1363     }
1364
1365   return offset;
1366 }
1367
1368 /* Given the architecture described by GDBARCH, return the remote
1369    protocol register's number and the register's offset in the g/G
1370    packets of GDB register REGNUM, in PNUM and POFFSET respectively.
1371    If the target does not have a mapping for REGNUM, return false,
1372    otherwise, return true.  */
1373
1374 int
1375 remote_register_number_and_offset (struct gdbarch *gdbarch, int regnum,
1376                                    int *pnum, int *poffset)
1377 {
1378   gdb_assert (regnum < gdbarch_num_regs (gdbarch));
1379
1380   std::vector<packet_reg> regs (gdbarch_num_regs (gdbarch));
1381
1382   map_regcache_remote_table (gdbarch, regs.data ());
1383
1384   *pnum = regs[regnum].pnum;
1385   *poffset = regs[regnum].offset;
1386
1387   return *pnum != -1;
1388 }
1389
1390 remote_arch_state::remote_arch_state (struct gdbarch *gdbarch)
1391 {
1392   /* Use the architecture to build a regnum<->pnum table, which will be
1393      1:1 unless a feature set specifies otherwise.  */
1394   this->regs.reset (new packet_reg [gdbarch_num_regs (gdbarch)] ());
1395
1396   /* Record the maximum possible size of the g packet - it may turn out
1397      to be smaller.  */
1398   this->sizeof_g_packet
1399     = map_regcache_remote_table (gdbarch, this->regs.get ());
1400
1401   /* Default maximum number of characters in a packet body.  Many
1402      remote stubs have a hardwired buffer size of 400 bytes
1403      (c.f. BUFMAX in m68k-stub.c and i386-stub.c).  BUFMAX-1 is used
1404      as the maximum packet-size to ensure that the packet and an extra
1405      NUL character can always fit in the buffer.  This stops GDB
1406      trashing stubs that try to squeeze an extra NUL into what is
1407      already a full buffer (As of 1999-12-04 that was most stubs).  */
1408   this->remote_packet_size = 400 - 1;
1409
1410   /* This one is filled in when a ``g'' packet is received.  */
1411   this->actual_register_packet_size = 0;
1412
1413   /* Should rsa->sizeof_g_packet needs more space than the
1414      default, adjust the size accordingly.  Remember that each byte is
1415      encoded as two characters.  32 is the overhead for the packet
1416      header / footer.  NOTE: cagney/1999-10-26: I suspect that 8
1417      (``$NN:G...#NN'') is a better guess, the below has been padded a
1418      little.  */
1419   if (this->sizeof_g_packet > ((this->remote_packet_size - 32) / 2))
1420     this->remote_packet_size = (this->sizeof_g_packet * 2 + 32);
1421 }
1422
1423 /* Get a pointer to the current remote target.  If not connected to a
1424    remote target, return NULL.  */
1425
1426 static remote_target *
1427 get_current_remote_target ()
1428 {
1429   target_ops *proc_target = find_target_at (process_stratum);
1430   return dynamic_cast<remote_target *> (proc_target);
1431 }
1432
1433 /* Return the current allowed size of a remote packet.  This is
1434    inferred from the current architecture, and should be used to
1435    limit the length of outgoing packets.  */
1436 long
1437 remote_target::get_remote_packet_size ()
1438 {
1439   struct remote_state *rs = get_remote_state ();
1440   remote_arch_state *rsa = rs->get_remote_arch_state (target_gdbarch ());
1441
1442   if (rs->explicit_packet_size)
1443     return rs->explicit_packet_size;
1444
1445   return rsa->remote_packet_size;
1446 }
1447
1448 static struct packet_reg *
1449 packet_reg_from_regnum (struct gdbarch *gdbarch, struct remote_arch_state *rsa,
1450                         long regnum)
1451 {
1452   if (regnum < 0 && regnum >= gdbarch_num_regs (gdbarch))
1453     return NULL;
1454   else
1455     {
1456       struct packet_reg *r = &rsa->regs[regnum];
1457
1458       gdb_assert (r->regnum == regnum);
1459       return r;
1460     }
1461 }
1462
1463 static struct packet_reg *
1464 packet_reg_from_pnum (struct gdbarch *gdbarch, struct remote_arch_state *rsa,
1465                       LONGEST pnum)
1466 {
1467   int i;
1468
1469   for (i = 0; i < gdbarch_num_regs (gdbarch); i++)
1470     {
1471       struct packet_reg *r = &rsa->regs[i];
1472
1473       if (r->pnum == pnum)
1474         return r;
1475     }
1476   return NULL;
1477 }
1478
1479 /* Allow the user to specify what sequence to send to the remote
1480    when he requests a program interruption: Although ^C is usually
1481    what remote systems expect (this is the default, here), it is
1482    sometimes preferable to send a break.  On other systems such
1483    as the Linux kernel, a break followed by g, which is Magic SysRq g
1484    is required in order to interrupt the execution.  */
1485 const char interrupt_sequence_control_c[] = "Ctrl-C";
1486 const char interrupt_sequence_break[] = "BREAK";
1487 const char interrupt_sequence_break_g[] = "BREAK-g";
1488 static const char *const interrupt_sequence_modes[] =
1489   {
1490     interrupt_sequence_control_c,
1491     interrupt_sequence_break,
1492     interrupt_sequence_break_g,
1493     NULL
1494   };
1495 static const char *interrupt_sequence_mode = interrupt_sequence_control_c;
1496
1497 static void
1498 show_interrupt_sequence (struct ui_file *file, int from_tty,
1499                          struct cmd_list_element *c,
1500                          const char *value)
1501 {
1502   if (interrupt_sequence_mode == interrupt_sequence_control_c)
1503     fprintf_filtered (file,
1504                       _("Send the ASCII ETX character (Ctrl-c) "
1505                         "to the remote target to interrupt the "
1506                         "execution of the program.\n"));
1507   else if (interrupt_sequence_mode == interrupt_sequence_break)
1508     fprintf_filtered (file,
1509                       _("send a break signal to the remote target "
1510                         "to interrupt the execution of the program.\n"));
1511   else if (interrupt_sequence_mode == interrupt_sequence_break_g)
1512     fprintf_filtered (file,
1513                       _("Send a break signal and 'g' a.k.a. Magic SysRq g to "
1514                         "the remote target to interrupt the execution "
1515                         "of Linux kernel.\n"));
1516   else
1517     internal_error (__FILE__, __LINE__,
1518                     _("Invalid value for interrupt_sequence_mode: %s."),
1519                     interrupt_sequence_mode);
1520 }
1521
1522 /* This boolean variable specifies whether interrupt_sequence is sent
1523    to the remote target when gdb connects to it.
1524    This is mostly needed when you debug the Linux kernel: The Linux kernel
1525    expects BREAK g which is Magic SysRq g for connecting gdb.  */
1526 static int interrupt_on_connect = 0;
1527
1528 /* This variable is used to implement the "set/show remotebreak" commands.
1529    Since these commands are now deprecated in favor of "set/show remote
1530    interrupt-sequence", it no longer has any effect on the code.  */
1531 static int remote_break;
1532
1533 static void
1534 set_remotebreak (const char *args, int from_tty, struct cmd_list_element *c)
1535 {
1536   if (remote_break)
1537     interrupt_sequence_mode = interrupt_sequence_break;
1538   else
1539     interrupt_sequence_mode = interrupt_sequence_control_c;
1540 }
1541
1542 static void
1543 show_remotebreak (struct ui_file *file, int from_tty,
1544                   struct cmd_list_element *c,
1545                   const char *value)
1546 {
1547 }
1548
1549 /* This variable sets the number of bits in an address that are to be
1550    sent in a memory ("M" or "m") packet.  Normally, after stripping
1551    leading zeros, the entire address would be sent.  This variable
1552    restricts the address to REMOTE_ADDRESS_SIZE bits.  HISTORY: The
1553    initial implementation of remote.c restricted the address sent in
1554    memory packets to ``host::sizeof long'' bytes - (typically 32
1555    bits).  Consequently, for 64 bit targets, the upper 32 bits of an
1556    address was never sent.  Since fixing this bug may cause a break in
1557    some remote targets this variable is principly provided to
1558    facilitate backward compatibility.  */
1559
1560 static unsigned int remote_address_size;
1561
1562 \f
1563 /* User configurable variables for the number of characters in a
1564    memory read/write packet.  MIN (rsa->remote_packet_size,
1565    rsa->sizeof_g_packet) is the default.  Some targets need smaller
1566    values (fifo overruns, et.al.) and some users need larger values
1567    (speed up transfers).  The variables ``preferred_*'' (the user
1568    request), ``current_*'' (what was actually set) and ``forced_*''
1569    (Positive - a soft limit, negative - a hard limit).  */
1570
1571 struct memory_packet_config
1572 {
1573   const char *name;
1574   long size;
1575   int fixed_p;
1576 };
1577
1578 /* The default max memory-write-packet-size, when the setting is
1579    "fixed".  The 16k is historical.  (It came from older GDB's using
1580    alloca for buffers and the knowledge (folklore?) that some hosts
1581    don't cope very well with large alloca calls.)  */
1582 #define DEFAULT_MAX_MEMORY_PACKET_SIZE_FIXED 16384
1583
1584 /* The minimum remote packet size for memory transfers.  Ensures we
1585    can write at least one byte.  */
1586 #define MIN_MEMORY_PACKET_SIZE 20
1587
1588 /* Get the memory packet size, assuming it is fixed.  */
1589
1590 static long
1591 get_fixed_memory_packet_size (struct memory_packet_config *config)
1592 {
1593   gdb_assert (config->fixed_p);
1594
1595   if (config->size <= 0)
1596     return DEFAULT_MAX_MEMORY_PACKET_SIZE_FIXED;
1597   else
1598     return config->size;
1599 }
1600
1601 /* Compute the current size of a read/write packet.  Since this makes
1602    use of ``actual_register_packet_size'' the computation is dynamic.  */
1603
1604 long
1605 remote_target::get_memory_packet_size (struct memory_packet_config *config)
1606 {
1607   struct remote_state *rs = get_remote_state ();
1608   remote_arch_state *rsa = rs->get_remote_arch_state (target_gdbarch ());
1609
1610   long what_they_get;
1611   if (config->fixed_p)
1612     what_they_get = get_fixed_memory_packet_size (config);
1613   else
1614     {
1615       what_they_get = get_remote_packet_size ();
1616       /* Limit the packet to the size specified by the user.  */
1617       if (config->size > 0
1618           && what_they_get > config->size)
1619         what_they_get = config->size;
1620
1621       /* Limit it to the size of the targets ``g'' response unless we have
1622          permission from the stub to use a larger packet size.  */
1623       if (rs->explicit_packet_size == 0
1624           && rsa->actual_register_packet_size > 0
1625           && what_they_get > rsa->actual_register_packet_size)
1626         what_they_get = rsa->actual_register_packet_size;
1627     }
1628   if (what_they_get < MIN_MEMORY_PACKET_SIZE)
1629     what_they_get = MIN_MEMORY_PACKET_SIZE;
1630
1631   /* Make sure there is room in the global buffer for this packet
1632      (including its trailing NUL byte).  */
1633   if (rs->buf_size < what_they_get + 1)
1634     {
1635       rs->buf_size = 2 * what_they_get;
1636       rs->buf = (char *) xrealloc (rs->buf, 2 * what_they_get);
1637     }
1638
1639   return what_they_get;
1640 }
1641
1642 /* Update the size of a read/write packet.  If they user wants
1643    something really big then do a sanity check.  */
1644
1645 static void
1646 set_memory_packet_size (const char *args, struct memory_packet_config *config)
1647 {
1648   int fixed_p = config->fixed_p;
1649   long size = config->size;
1650
1651   if (args == NULL)
1652     error (_("Argument required (integer, `fixed' or `limited')."));
1653   else if (strcmp (args, "hard") == 0
1654       || strcmp (args, "fixed") == 0)
1655     fixed_p = 1;
1656   else if (strcmp (args, "soft") == 0
1657            || strcmp (args, "limit") == 0)
1658     fixed_p = 0;
1659   else
1660     {
1661       char *end;
1662
1663       size = strtoul (args, &end, 0);
1664       if (args == end)
1665         error (_("Invalid %s (bad syntax)."), config->name);
1666
1667       /* Instead of explicitly capping the size of a packet to or
1668          disallowing it, the user is allowed to set the size to
1669          something arbitrarily large.  */
1670     }
1671
1672   /* Extra checks?  */
1673   if (fixed_p && !config->fixed_p)
1674     {
1675       /* So that the query shows the correct value.  */
1676       long query_size = (size <= 0
1677                          ? DEFAULT_MAX_MEMORY_PACKET_SIZE_FIXED
1678                          : size);
1679
1680       if (! query (_("The target may not be able to correctly handle a %s\n"
1681                    "of %ld bytes. Change the packet size? "),
1682                    config->name, query_size))
1683         error (_("Packet size not changed."));
1684     }
1685   /* Update the config.  */
1686   config->fixed_p = fixed_p;
1687   config->size = size;
1688 }
1689
1690 static void
1691 show_memory_packet_size (struct memory_packet_config *config)
1692 {
1693   if (config->size == 0)
1694     printf_filtered (_("The %s is 0 (default). "), config->name);
1695   else
1696     printf_filtered (_("The %s is %ld. "), config->name, config->size);
1697   if (config->fixed_p)
1698     printf_filtered (_("Packets are fixed at %ld bytes.\n"),
1699                      get_fixed_memory_packet_size (config));
1700   else
1701     {
1702       remote_target *remote = get_current_remote_target ();
1703
1704       if (remote != NULL)
1705         printf_filtered (_("Packets are limited to %ld bytes.\n"),
1706                          remote->get_memory_packet_size (config));
1707       else
1708         puts_filtered ("The actual limit will be further reduced "
1709                        "dependent on the target.\n");
1710     }
1711 }
1712
1713 static struct memory_packet_config memory_write_packet_config =
1714 {
1715   "memory-write-packet-size",
1716 };
1717
1718 static void
1719 set_memory_write_packet_size (const char *args, int from_tty)
1720 {
1721   set_memory_packet_size (args, &memory_write_packet_config);
1722 }
1723
1724 static void
1725 show_memory_write_packet_size (const char *args, int from_tty)
1726 {
1727   show_memory_packet_size (&memory_write_packet_config);
1728 }
1729
1730 long
1731 remote_target::get_memory_write_packet_size ()
1732 {
1733   return get_memory_packet_size (&memory_write_packet_config);
1734 }
1735
1736 static struct memory_packet_config memory_read_packet_config =
1737 {
1738   "memory-read-packet-size",
1739 };
1740
1741 static void
1742 set_memory_read_packet_size (const char *args, int from_tty)
1743 {
1744   set_memory_packet_size (args, &memory_read_packet_config);
1745 }
1746
1747 static void
1748 show_memory_read_packet_size (const char *args, int from_tty)
1749 {
1750   show_memory_packet_size (&memory_read_packet_config);
1751 }
1752
1753 long
1754 remote_target::get_memory_read_packet_size ()
1755 {
1756   long size = get_memory_packet_size (&memory_read_packet_config);
1757
1758   /* FIXME: cagney/1999-11-07: Functions like getpkt() need to get an
1759      extra buffer size argument before the memory read size can be
1760      increased beyond this.  */
1761   if (size > get_remote_packet_size ())
1762     size = get_remote_packet_size ();
1763   return size;
1764 }
1765
1766 \f
1767
1768 struct packet_config
1769   {
1770     const char *name;
1771     const char *title;
1772
1773     /* If auto, GDB auto-detects support for this packet or feature,
1774        either through qSupported, or by trying the packet and looking
1775        at the response.  If true, GDB assumes the target supports this
1776        packet.  If false, the packet is disabled.  Configs that don't
1777        have an associated command always have this set to auto.  */
1778     enum auto_boolean detect;
1779
1780     /* Does the target support this packet?  */
1781     enum packet_support support;
1782   };
1783
1784 static enum packet_support packet_config_support (struct packet_config *config);
1785 static enum packet_support packet_support (int packet);
1786
1787 static void
1788 show_packet_config_cmd (struct packet_config *config)
1789 {
1790   const char *support = "internal-error";
1791
1792   switch (packet_config_support (config))
1793     {
1794     case PACKET_ENABLE:
1795       support = "enabled";
1796       break;
1797     case PACKET_DISABLE:
1798       support = "disabled";
1799       break;
1800     case PACKET_SUPPORT_UNKNOWN:
1801       support = "unknown";
1802       break;
1803     }
1804   switch (config->detect)
1805     {
1806     case AUTO_BOOLEAN_AUTO:
1807       printf_filtered (_("Support for the `%s' packet "
1808                          "is auto-detected, currently %s.\n"),
1809                        config->name, support);
1810       break;
1811     case AUTO_BOOLEAN_TRUE:
1812     case AUTO_BOOLEAN_FALSE:
1813       printf_filtered (_("Support for the `%s' packet is currently %s.\n"),
1814                        config->name, support);
1815       break;
1816     }
1817 }
1818
1819 static void
1820 add_packet_config_cmd (struct packet_config *config, const char *name,
1821                        const char *title, int legacy)
1822 {
1823   char *set_doc;
1824   char *show_doc;
1825   char *cmd_name;
1826
1827   config->name = name;
1828   config->title = title;
1829   set_doc = xstrprintf ("Set use of remote protocol `%s' (%s) packet",
1830                         name, title);
1831   show_doc = xstrprintf ("Show current use of remote "
1832                          "protocol `%s' (%s) packet",
1833                          name, title);
1834   /* set/show TITLE-packet {auto,on,off} */
1835   cmd_name = xstrprintf ("%s-packet", title);
1836   add_setshow_auto_boolean_cmd (cmd_name, class_obscure,
1837                                 &config->detect, set_doc,
1838                                 show_doc, NULL, /* help_doc */
1839                                 NULL,
1840                                 show_remote_protocol_packet_cmd,
1841                                 &remote_set_cmdlist, &remote_show_cmdlist);
1842   /* The command code copies the documentation strings.  */
1843   xfree (set_doc);
1844   xfree (show_doc);
1845   /* set/show remote NAME-packet {auto,on,off} -- legacy.  */
1846   if (legacy)
1847     {
1848       char *legacy_name;
1849
1850       legacy_name = xstrprintf ("%s-packet", name);
1851       add_alias_cmd (legacy_name, cmd_name, class_obscure, 0,
1852                      &remote_set_cmdlist);
1853       add_alias_cmd (legacy_name, cmd_name, class_obscure, 0,
1854                      &remote_show_cmdlist);
1855     }
1856 }
1857
1858 static enum packet_result
1859 packet_check_result (const char *buf)
1860 {
1861   if (buf[0] != '\0')
1862     {
1863       /* The stub recognized the packet request.  Check that the
1864          operation succeeded.  */
1865       if (buf[0] == 'E'
1866           && isxdigit (buf[1]) && isxdigit (buf[2])
1867           && buf[3] == '\0')
1868         /* "Enn"  - definitly an error.  */
1869         return PACKET_ERROR;
1870
1871       /* Always treat "E." as an error.  This will be used for
1872          more verbose error messages, such as E.memtypes.  */
1873       if (buf[0] == 'E' && buf[1] == '.')
1874         return PACKET_ERROR;
1875
1876       /* The packet may or may not be OK.  Just assume it is.  */
1877       return PACKET_OK;
1878     }
1879   else
1880     /* The stub does not support the packet.  */
1881     return PACKET_UNKNOWN;
1882 }
1883
1884 static enum packet_result
1885 packet_ok (const char *buf, struct packet_config *config)
1886 {
1887   enum packet_result result;
1888
1889   if (config->detect != AUTO_BOOLEAN_TRUE
1890       && config->support == PACKET_DISABLE)
1891     internal_error (__FILE__, __LINE__,
1892                     _("packet_ok: attempt to use a disabled packet"));
1893
1894   result = packet_check_result (buf);
1895   switch (result)
1896     {
1897     case PACKET_OK:
1898     case PACKET_ERROR:
1899       /* The stub recognized the packet request.  */
1900       if (config->support == PACKET_SUPPORT_UNKNOWN)
1901         {
1902           if (remote_debug)
1903             fprintf_unfiltered (gdb_stdlog,
1904                                 "Packet %s (%s) is supported\n",
1905                                 config->name, config->title);
1906           config->support = PACKET_ENABLE;
1907         }
1908       break;
1909     case PACKET_UNKNOWN:
1910       /* The stub does not support the packet.  */
1911       if (config->detect == AUTO_BOOLEAN_AUTO
1912           && config->support == PACKET_ENABLE)
1913         {
1914           /* If the stub previously indicated that the packet was
1915              supported then there is a protocol error.  */
1916           error (_("Protocol error: %s (%s) conflicting enabled responses."),
1917                  config->name, config->title);
1918         }
1919       else if (config->detect == AUTO_BOOLEAN_TRUE)
1920         {
1921           /* The user set it wrong.  */
1922           error (_("Enabled packet %s (%s) not recognized by stub"),
1923                  config->name, config->title);
1924         }
1925
1926       if (remote_debug)
1927         fprintf_unfiltered (gdb_stdlog,
1928                             "Packet %s (%s) is NOT supported\n",
1929                             config->name, config->title);
1930       config->support = PACKET_DISABLE;
1931       break;
1932     }
1933
1934   return result;
1935 }
1936
1937 enum {
1938   PACKET_vCont = 0,
1939   PACKET_X,
1940   PACKET_qSymbol,
1941   PACKET_P,
1942   PACKET_p,
1943   PACKET_Z0,
1944   PACKET_Z1,
1945   PACKET_Z2,
1946   PACKET_Z3,
1947   PACKET_Z4,
1948   PACKET_vFile_setfs,
1949   PACKET_vFile_open,
1950   PACKET_vFile_pread,
1951   PACKET_vFile_pwrite,
1952   PACKET_vFile_close,
1953   PACKET_vFile_unlink,
1954   PACKET_vFile_readlink,
1955   PACKET_vFile_fstat,
1956   PACKET_qXfer_auxv,
1957   PACKET_qXfer_features,
1958   PACKET_qXfer_exec_file,
1959   PACKET_qXfer_libraries,
1960   PACKET_qXfer_libraries_svr4,
1961   PACKET_qXfer_memory_map,
1962   PACKET_qXfer_spu_read,
1963   PACKET_qXfer_spu_write,
1964   PACKET_qXfer_osdata,
1965   PACKET_qXfer_threads,
1966   PACKET_qXfer_statictrace_read,
1967   PACKET_qXfer_traceframe_info,
1968   PACKET_qXfer_uib,
1969   PACKET_qGetTIBAddr,
1970   PACKET_qGetTLSAddr,
1971   PACKET_qSupported,
1972   PACKET_qTStatus,
1973   PACKET_QPassSignals,
1974   PACKET_QCatchSyscalls,
1975   PACKET_QProgramSignals,
1976   PACKET_QSetWorkingDir,
1977   PACKET_QStartupWithShell,
1978   PACKET_QEnvironmentHexEncoded,
1979   PACKET_QEnvironmentReset,
1980   PACKET_QEnvironmentUnset,
1981   PACKET_qCRC,
1982   PACKET_qSearch_memory,
1983   PACKET_vAttach,
1984   PACKET_vRun,
1985   PACKET_QStartNoAckMode,
1986   PACKET_vKill,
1987   PACKET_qXfer_siginfo_read,
1988   PACKET_qXfer_siginfo_write,
1989   PACKET_qAttached,
1990
1991   /* Support for conditional tracepoints.  */
1992   PACKET_ConditionalTracepoints,
1993
1994   /* Support for target-side breakpoint conditions.  */
1995   PACKET_ConditionalBreakpoints,
1996
1997   /* Support for target-side breakpoint commands.  */
1998   PACKET_BreakpointCommands,
1999
2000   /* Support for fast tracepoints.  */
2001   PACKET_FastTracepoints,
2002
2003   /* Support for static tracepoints.  */
2004   PACKET_StaticTracepoints,
2005
2006   /* Support for installing tracepoints while a trace experiment is
2007      running.  */
2008   PACKET_InstallInTrace,
2009
2010   PACKET_bc,
2011   PACKET_bs,
2012   PACKET_TracepointSource,
2013   PACKET_QAllow,
2014   PACKET_qXfer_fdpic,
2015   PACKET_QDisableRandomization,
2016   PACKET_QAgent,
2017   PACKET_QTBuffer_size,
2018   PACKET_Qbtrace_off,
2019   PACKET_Qbtrace_bts,
2020   PACKET_Qbtrace_pt,
2021   PACKET_qXfer_btrace,
2022
2023   /* Support for the QNonStop packet.  */
2024   PACKET_QNonStop,
2025
2026   /* Support for the QThreadEvents packet.  */
2027   PACKET_QThreadEvents,
2028
2029   /* Support for multi-process extensions.  */
2030   PACKET_multiprocess_feature,
2031
2032   /* Support for enabling and disabling tracepoints while a trace
2033      experiment is running.  */
2034   PACKET_EnableDisableTracepoints_feature,
2035
2036   /* Support for collecting strings using the tracenz bytecode.  */
2037   PACKET_tracenz_feature,
2038
2039   /* Support for continuing to run a trace experiment while GDB is
2040      disconnected.  */
2041   PACKET_DisconnectedTracing_feature,
2042
2043   /* Support for qXfer:libraries-svr4:read with a non-empty annex.  */
2044   PACKET_augmented_libraries_svr4_read_feature,
2045
2046   /* Support for the qXfer:btrace-conf:read packet.  */
2047   PACKET_qXfer_btrace_conf,
2048
2049   /* Support for the Qbtrace-conf:bts:size packet.  */
2050   PACKET_Qbtrace_conf_bts_size,
2051
2052   /* Support for swbreak+ feature.  */
2053   PACKET_swbreak_feature,
2054
2055   /* Support for hwbreak+ feature.  */
2056   PACKET_hwbreak_feature,
2057
2058   /* Support for fork events.  */
2059   PACKET_fork_event_feature,
2060
2061   /* Support for vfork events.  */
2062   PACKET_vfork_event_feature,
2063
2064   /* Support for the Qbtrace-conf:pt:size packet.  */
2065   PACKET_Qbtrace_conf_pt_size,
2066
2067   /* Support for exec events.  */
2068   PACKET_exec_event_feature,
2069
2070   /* Support for query supported vCont actions.  */
2071   PACKET_vContSupported,
2072
2073   /* Support remote CTRL-C.  */
2074   PACKET_vCtrlC,
2075
2076   /* Support TARGET_WAITKIND_NO_RESUMED.  */
2077   PACKET_no_resumed,
2078
2079   PACKET_MAX
2080 };
2081
2082 static struct packet_config remote_protocol_packets[PACKET_MAX];
2083
2084 /* Returns the packet's corresponding "set remote foo-packet" command
2085    state.  See struct packet_config for more details.  */
2086
2087 static enum auto_boolean
2088 packet_set_cmd_state (int packet)
2089 {
2090   return remote_protocol_packets[packet].detect;
2091 }
2092
2093 /* Returns whether a given packet or feature is supported.  This takes
2094    into account the state of the corresponding "set remote foo-packet"
2095    command, which may be used to bypass auto-detection.  */
2096
2097 static enum packet_support
2098 packet_config_support (struct packet_config *config)
2099 {
2100   switch (config->detect)
2101     {
2102     case AUTO_BOOLEAN_TRUE:
2103       return PACKET_ENABLE;
2104     case AUTO_BOOLEAN_FALSE:
2105       return PACKET_DISABLE;
2106     case AUTO_BOOLEAN_AUTO:
2107       return config->support;
2108     default:
2109       gdb_assert_not_reached (_("bad switch"));
2110     }
2111 }
2112
2113 /* Same as packet_config_support, but takes the packet's enum value as
2114    argument.  */
2115
2116 static enum packet_support
2117 packet_support (int packet)
2118 {
2119   struct packet_config *config = &remote_protocol_packets[packet];
2120
2121   return packet_config_support (config);
2122 }
2123
2124 static void
2125 show_remote_protocol_packet_cmd (struct ui_file *file, int from_tty,
2126                                  struct cmd_list_element *c,
2127                                  const char *value)
2128 {
2129   struct packet_config *packet;
2130
2131   for (packet = remote_protocol_packets;
2132        packet < &remote_protocol_packets[PACKET_MAX];
2133        packet++)
2134     {
2135       if (&packet->detect == c->var)
2136         {
2137           show_packet_config_cmd (packet);
2138           return;
2139         }
2140     }
2141   internal_error (__FILE__, __LINE__, _("Could not find config for %s"),
2142                   c->name);
2143 }
2144
2145 /* Should we try one of the 'Z' requests?  */
2146
2147 enum Z_packet_type
2148 {
2149   Z_PACKET_SOFTWARE_BP,
2150   Z_PACKET_HARDWARE_BP,
2151   Z_PACKET_WRITE_WP,
2152   Z_PACKET_READ_WP,
2153   Z_PACKET_ACCESS_WP,
2154   NR_Z_PACKET_TYPES
2155 };
2156
2157 /* For compatibility with older distributions.  Provide a ``set remote
2158    Z-packet ...'' command that updates all the Z packet types.  */
2159
2160 static enum auto_boolean remote_Z_packet_detect;
2161
2162 static void
2163 set_remote_protocol_Z_packet_cmd (const char *args, int from_tty,
2164                                   struct cmd_list_element *c)
2165 {
2166   int i;
2167
2168   for (i = 0; i < NR_Z_PACKET_TYPES; i++)
2169     remote_protocol_packets[PACKET_Z0 + i].detect = remote_Z_packet_detect;
2170 }
2171
2172 static void
2173 show_remote_protocol_Z_packet_cmd (struct ui_file *file, int from_tty,
2174                                    struct cmd_list_element *c,
2175                                    const char *value)
2176 {
2177   int i;
2178
2179   for (i = 0; i < NR_Z_PACKET_TYPES; i++)
2180     {
2181       show_packet_config_cmd (&remote_protocol_packets[PACKET_Z0 + i]);
2182     }
2183 }
2184
2185 /* Returns true if the multi-process extensions are in effect.  */
2186
2187 static int
2188 remote_multi_process_p (struct remote_state *rs)
2189 {
2190   return packet_support (PACKET_multiprocess_feature) == PACKET_ENABLE;
2191 }
2192
2193 /* Returns true if fork events are supported.  */
2194
2195 static int
2196 remote_fork_event_p (struct remote_state *rs)
2197 {
2198   return packet_support (PACKET_fork_event_feature) == PACKET_ENABLE;
2199 }
2200
2201 /* Returns true if vfork events are supported.  */
2202
2203 static int
2204 remote_vfork_event_p (struct remote_state *rs)
2205 {
2206   return packet_support (PACKET_vfork_event_feature) == PACKET_ENABLE;
2207 }
2208
2209 /* Returns true if exec events are supported.  */
2210
2211 static int
2212 remote_exec_event_p (struct remote_state *rs)
2213 {
2214   return packet_support (PACKET_exec_event_feature) == PACKET_ENABLE;
2215 }
2216
2217 /* Insert fork catchpoint target routine.  If fork events are enabled
2218    then return success, nothing more to do.  */
2219
2220 int
2221 remote_target::insert_fork_catchpoint (int pid)
2222 {
2223   struct remote_state *rs = get_remote_state ();
2224
2225   return !remote_fork_event_p (rs);
2226 }
2227
2228 /* Remove fork catchpoint target routine.  Nothing to do, just
2229    return success.  */
2230
2231 int
2232 remote_target::remove_fork_catchpoint (int pid)
2233 {
2234   return 0;
2235 }
2236
2237 /* Insert vfork catchpoint target routine.  If vfork events are enabled
2238    then return success, nothing more to do.  */
2239
2240 int
2241 remote_target::insert_vfork_catchpoint (int pid)
2242 {
2243   struct remote_state *rs = get_remote_state ();
2244
2245   return !remote_vfork_event_p (rs);
2246 }
2247
2248 /* Remove vfork catchpoint target routine.  Nothing to do, just
2249    return success.  */
2250
2251 int
2252 remote_target::remove_vfork_catchpoint (int pid)
2253 {
2254   return 0;
2255 }
2256
2257 /* Insert exec catchpoint target routine.  If exec events are
2258    enabled, just return success.  */
2259
2260 int
2261 remote_target::insert_exec_catchpoint (int pid)
2262 {
2263   struct remote_state *rs = get_remote_state ();
2264
2265   return !remote_exec_event_p (rs);
2266 }
2267
2268 /* Remove exec catchpoint target routine.  Nothing to do, just
2269    return success.  */
2270
2271 int
2272 remote_target::remove_exec_catchpoint (int pid)
2273 {
2274   return 0;
2275 }
2276
2277 \f
2278
2279 static ptid_t magic_null_ptid;
2280 static ptid_t not_sent_ptid;
2281 static ptid_t any_thread_ptid;
2282
2283 /* Find out if the stub attached to PID (and hence GDB should offer to
2284    detach instead of killing it when bailing out).  */
2285
2286 int
2287 remote_target::remote_query_attached (int pid)
2288 {
2289   struct remote_state *rs = get_remote_state ();
2290   size_t size = get_remote_packet_size ();
2291
2292   if (packet_support (PACKET_qAttached) == PACKET_DISABLE)
2293     return 0;
2294
2295   if (remote_multi_process_p (rs))
2296     xsnprintf (rs->buf, size, "qAttached:%x", pid);
2297   else
2298     xsnprintf (rs->buf, size, "qAttached");
2299
2300   putpkt (rs->buf);
2301   getpkt (&rs->buf, &rs->buf_size, 0);
2302
2303   switch (packet_ok (rs->buf,
2304                      &remote_protocol_packets[PACKET_qAttached]))
2305     {
2306     case PACKET_OK:
2307       if (strcmp (rs->buf, "1") == 0)
2308         return 1;
2309       break;
2310     case PACKET_ERROR:
2311       warning (_("Remote failure reply: %s"), rs->buf);
2312       break;
2313     case PACKET_UNKNOWN:
2314       break;
2315     }
2316
2317   return 0;
2318 }
2319
2320 /* Add PID to GDB's inferior table.  If FAKE_PID_P is true, then PID
2321    has been invented by GDB, instead of reported by the target.  Since
2322    we can be connected to a remote system before before knowing about
2323    any inferior, mark the target with execution when we find the first
2324    inferior.  If ATTACHED is 1, then we had just attached to this
2325    inferior.  If it is 0, then we just created this inferior.  If it
2326    is -1, then try querying the remote stub to find out if it had
2327    attached to the inferior or not.  If TRY_OPEN_EXEC is true then
2328    attempt to open this inferior's executable as the main executable
2329    if no main executable is open already.  */
2330
2331 inferior *
2332 remote_target::remote_add_inferior (int fake_pid_p, int pid, int attached,
2333                                     int try_open_exec)
2334 {
2335   struct inferior *inf;
2336
2337   /* Check whether this process we're learning about is to be
2338      considered attached, or if is to be considered to have been
2339      spawned by the stub.  */
2340   if (attached == -1)
2341     attached = remote_query_attached (pid);
2342
2343   if (gdbarch_has_global_solist (target_gdbarch ()))
2344     {
2345       /* If the target shares code across all inferiors, then every
2346          attach adds a new inferior.  */
2347       inf = add_inferior (pid);
2348
2349       /* ... and every inferior is bound to the same program space.
2350          However, each inferior may still have its own address
2351          space.  */
2352       inf->aspace = maybe_new_address_space ();
2353       inf->pspace = current_program_space;
2354     }
2355   else
2356     {
2357       /* In the traditional debugging scenario, there's a 1-1 match
2358          between program/address spaces.  We simply bind the inferior
2359          to the program space's address space.  */
2360       inf = current_inferior ();
2361       inferior_appeared (inf, pid);
2362     }
2363
2364   inf->attach_flag = attached;
2365   inf->fake_pid_p = fake_pid_p;
2366
2367   /* If no main executable is currently open then attempt to
2368      open the file that was executed to create this inferior.  */
2369   if (try_open_exec && get_exec_file (0) == NULL)
2370     exec_file_locate_attach (pid, 0, 1);
2371
2372   return inf;
2373 }
2374
2375 static remote_thread_info *get_remote_thread_info (thread_info *thread);
2376
2377 /* Add thread PTID to GDB's thread list.  Tag it as executing/running
2378    according to RUNNING.  */
2379
2380 void
2381 remote_target::remote_add_thread (ptid_t ptid, bool running, bool executing)
2382 {
2383   struct remote_state *rs = get_remote_state ();
2384   struct thread_info *thread;
2385
2386   /* GDB historically didn't pull threads in the initial connection
2387      setup.  If the remote target doesn't even have a concept of
2388      threads (e.g., a bare-metal target), even if internally we
2389      consider that a single-threaded target, mentioning a new thread
2390      might be confusing to the user.  Be silent then, preserving the
2391      age old behavior.  */
2392   if (rs->starting_up)
2393     thread = add_thread_silent (ptid);
2394   else
2395     thread = add_thread (ptid);
2396
2397   get_remote_thread_info (thread)->vcont_resumed = executing;
2398   set_executing (ptid, executing);
2399   set_running (ptid, running);
2400 }
2401
2402 /* Come here when we learn about a thread id from the remote target.
2403    It may be the first time we hear about such thread, so take the
2404    opportunity to add it to GDB's thread list.  In case this is the
2405    first time we're noticing its corresponding inferior, add it to
2406    GDB's inferior list as well.  EXECUTING indicates whether the
2407    thread is (internally) executing or stopped.  */
2408
2409 void
2410 remote_target::remote_notice_new_inferior (ptid_t currthread, int executing)
2411 {
2412   /* In non-stop mode, we assume new found threads are (externally)
2413      running until proven otherwise with a stop reply.  In all-stop,
2414      we can only get here if all threads are stopped.  */
2415   int running = target_is_non_stop_p () ? 1 : 0;
2416
2417   /* If this is a new thread, add it to GDB's thread list.
2418      If we leave it up to WFI to do this, bad things will happen.  */
2419
2420   if (in_thread_list (currthread) && is_exited (currthread))
2421     {
2422       /* We're seeing an event on a thread id we knew had exited.
2423          This has to be a new thread reusing the old id.  Add it.  */
2424       remote_add_thread (currthread, running, executing);
2425       return;
2426     }
2427
2428   if (!in_thread_list (currthread))
2429     {
2430       struct inferior *inf = NULL;
2431       int pid = ptid_get_pid (currthread);
2432
2433       if (ptid_is_pid (inferior_ptid)
2434           && pid == ptid_get_pid (inferior_ptid))
2435         {
2436           /* inferior_ptid has no thread member yet.  This can happen
2437              with the vAttach -> remote_wait,"TAAthread:" path if the
2438              stub doesn't support qC.  This is the first stop reported
2439              after an attach, so this is the main thread.  Update the
2440              ptid in the thread list.  */
2441           if (in_thread_list (pid_to_ptid (pid)))
2442             thread_change_ptid (inferior_ptid, currthread);
2443           else
2444             {
2445               remote_add_thread (currthread, running, executing);
2446               inferior_ptid = currthread;
2447             }
2448           return;
2449         }
2450
2451       if (ptid_equal (magic_null_ptid, inferior_ptid))
2452         {
2453           /* inferior_ptid is not set yet.  This can happen with the
2454              vRun -> remote_wait,"TAAthread:" path if the stub
2455              doesn't support qC.  This is the first stop reported
2456              after an attach, so this is the main thread.  Update the
2457              ptid in the thread list.  */
2458           thread_change_ptid (inferior_ptid, currthread);
2459           return;
2460         }
2461
2462       /* When connecting to a target remote, or to a target
2463          extended-remote which already was debugging an inferior, we
2464          may not know about it yet.  Add it before adding its child
2465          thread, so notifications are emitted in a sensible order.  */
2466       if (!in_inferior_list (ptid_get_pid (currthread)))
2467         {
2468           struct remote_state *rs = get_remote_state ();
2469           int fake_pid_p = !remote_multi_process_p (rs);
2470
2471           inf = remote_add_inferior (fake_pid_p,
2472                                      ptid_get_pid (currthread), -1, 1);
2473         }
2474
2475       /* This is really a new thread.  Add it.  */
2476       remote_add_thread (currthread, running, executing);
2477
2478       /* If we found a new inferior, let the common code do whatever
2479          it needs to with it (e.g., read shared libraries, insert
2480          breakpoints), unless we're just setting up an all-stop
2481          connection.  */
2482       if (inf != NULL)
2483         {
2484           struct remote_state *rs = get_remote_state ();
2485
2486           if (!rs->starting_up)
2487             notice_new_inferior (currthread, executing, 0);
2488         }
2489     }
2490 }
2491
2492 /* Return THREAD's private thread data, creating it if necessary.  */
2493
2494 static remote_thread_info *
2495 get_remote_thread_info (thread_info *thread)
2496 {
2497   gdb_assert (thread != NULL);
2498
2499   if (thread->priv == NULL)
2500     thread->priv.reset (new remote_thread_info);
2501
2502   return static_cast<remote_thread_info *> (thread->priv.get ());
2503 }
2504
2505 /* Return PTID's private thread data, creating it if necessary.  */
2506
2507 static remote_thread_info *
2508 get_remote_thread_info (ptid_t ptid)
2509 {
2510   struct thread_info *info = find_thread_ptid (ptid);
2511
2512   return get_remote_thread_info (info);
2513 }
2514
2515 /* Call this function as a result of
2516    1) A halt indication (T packet) containing a thread id
2517    2) A direct query of currthread
2518    3) Successful execution of set thread */
2519
2520 static void
2521 record_currthread (struct remote_state *rs, ptid_t currthread)
2522 {
2523   rs->general_thread = currthread;
2524 }
2525
2526 /* If 'QPassSignals' is supported, tell the remote stub what signals
2527    it can simply pass through to the inferior without reporting.  */
2528
2529 void
2530 remote_target::pass_signals (int numsigs, unsigned char *pass_signals)
2531 {
2532   if (packet_support (PACKET_QPassSignals) != PACKET_DISABLE)
2533     {
2534       char *pass_packet, *p;
2535       int count = 0, i;
2536       struct remote_state *rs = get_remote_state ();
2537
2538       gdb_assert (numsigs < 256);
2539       for (i = 0; i < numsigs; i++)
2540         {
2541           if (pass_signals[i])
2542             count++;
2543         }
2544       pass_packet = (char *) xmalloc (count * 3 + strlen ("QPassSignals:") + 1);
2545       strcpy (pass_packet, "QPassSignals:");
2546       p = pass_packet + strlen (pass_packet);
2547       for (i = 0; i < numsigs; i++)
2548         {
2549           if (pass_signals[i])
2550             {
2551               if (i >= 16)
2552                 *p++ = tohex (i >> 4);
2553               *p++ = tohex (i & 15);
2554               if (count)
2555                 *p++ = ';';
2556               else
2557                 break;
2558               count--;
2559             }
2560         }
2561       *p = 0;
2562       if (!rs->last_pass_packet || strcmp (rs->last_pass_packet, pass_packet))
2563         {
2564           putpkt (pass_packet);
2565           getpkt (&rs->buf, &rs->buf_size, 0);
2566           packet_ok (rs->buf, &remote_protocol_packets[PACKET_QPassSignals]);
2567           if (rs->last_pass_packet)
2568             xfree (rs->last_pass_packet);
2569           rs->last_pass_packet = pass_packet;
2570         }
2571       else
2572         xfree (pass_packet);
2573     }
2574 }
2575
2576 /* If 'QCatchSyscalls' is supported, tell the remote stub
2577    to report syscalls to GDB.  */
2578
2579 int
2580 remote_target::set_syscall_catchpoint (int pid, bool needed, int any_count,
2581                                        gdb::array_view<const int> syscall_counts)
2582 {
2583   const char *catch_packet;
2584   enum packet_result result;
2585   int n_sysno = 0;
2586
2587   if (packet_support (PACKET_QCatchSyscalls) == PACKET_DISABLE)
2588     {
2589       /* Not supported.  */
2590       return 1;
2591     }
2592
2593   if (needed && any_count == 0)
2594     {
2595       /* Count how many syscalls are to be caught.  */
2596       for (size_t i = 0; i < syscall_counts.size (); i++)
2597         {
2598           if (syscall_counts[i] != 0)
2599             n_sysno++;
2600         }
2601     }
2602
2603   if (remote_debug)
2604     {
2605       fprintf_unfiltered (gdb_stdlog,
2606                           "remote_set_syscall_catchpoint "
2607                           "pid %d needed %d any_count %d n_sysno %d\n",
2608                           pid, needed, any_count, n_sysno);
2609     }
2610
2611   std::string built_packet;
2612   if (needed)
2613     {
2614       /* Prepare a packet with the sysno list, assuming max 8+1
2615          characters for a sysno.  If the resulting packet size is too
2616          big, fallback on the non-selective packet.  */
2617       const int maxpktsz = strlen ("QCatchSyscalls:1") + n_sysno * 9 + 1;
2618       built_packet.reserve (maxpktsz);
2619       built_packet = "QCatchSyscalls:1";
2620       if (any_count == 0)
2621         {
2622           /* Add in each syscall to be caught.  */
2623           for (size_t i = 0; i < syscall_counts.size (); i++)
2624             {
2625               if (syscall_counts[i] != 0)
2626                 string_appendf (built_packet, ";%zx", i);
2627             }
2628         }
2629       if (built_packet.size () > get_remote_packet_size ())
2630         {
2631           /* catch_packet too big.  Fallback to less efficient
2632              non selective mode, with GDB doing the filtering.  */
2633           catch_packet = "QCatchSyscalls:1";
2634         }
2635       else
2636         catch_packet = built_packet.c_str ();
2637     }
2638   else
2639     catch_packet = "QCatchSyscalls:0";
2640
2641   struct remote_state *rs = get_remote_state ();
2642
2643   putpkt (catch_packet);
2644   getpkt (&rs->buf, &rs->buf_size, 0);
2645   result = packet_ok (rs->buf, &remote_protocol_packets[PACKET_QCatchSyscalls]);
2646   if (result == PACKET_OK)
2647     return 0;
2648   else
2649     return -1;
2650 }
2651
2652 /* If 'QProgramSignals' is supported, tell the remote stub what
2653    signals it should pass through to the inferior when detaching.  */
2654
2655 void
2656 remote_target::program_signals (int numsigs, unsigned char *signals)
2657 {
2658   if (packet_support (PACKET_QProgramSignals) != PACKET_DISABLE)
2659     {
2660       char *packet, *p;
2661       int count = 0, i;
2662       struct remote_state *rs = get_remote_state ();
2663
2664       gdb_assert (numsigs < 256);
2665       for (i = 0; i < numsigs; i++)
2666         {
2667           if (signals[i])
2668             count++;
2669         }
2670       packet = (char *) xmalloc (count * 3 + strlen ("QProgramSignals:") + 1);
2671       strcpy (packet, "QProgramSignals:");
2672       p = packet + strlen (packet);
2673       for (i = 0; i < numsigs; i++)
2674         {
2675           if (signal_pass_state (i))
2676             {
2677               if (i >= 16)
2678                 *p++ = tohex (i >> 4);
2679               *p++ = tohex (i & 15);
2680               if (count)
2681                 *p++ = ';';
2682               else
2683                 break;
2684               count--;
2685             }
2686         }
2687       *p = 0;
2688       if (!rs->last_program_signals_packet
2689           || strcmp (rs->last_program_signals_packet, packet) != 0)
2690         {
2691           putpkt (packet);
2692           getpkt (&rs->buf, &rs->buf_size, 0);
2693           packet_ok (rs->buf, &remote_protocol_packets[PACKET_QProgramSignals]);
2694           xfree (rs->last_program_signals_packet);
2695           rs->last_program_signals_packet = packet;
2696         }
2697       else
2698         xfree (packet);
2699     }
2700 }
2701
2702 /* If PTID is MAGIC_NULL_PTID, don't set any thread.  If PTID is
2703    MINUS_ONE_PTID, set the thread to -1, so the stub returns the
2704    thread.  If GEN is set, set the general thread, if not, then set
2705    the step/continue thread.  */
2706 void
2707 remote_target::set_thread (ptid_t ptid, int gen)
2708 {
2709   struct remote_state *rs = get_remote_state ();
2710   ptid_t state = gen ? rs->general_thread : rs->continue_thread;
2711   char *buf = rs->buf;
2712   char *endbuf = rs->buf + get_remote_packet_size ();
2713
2714   if (ptid_equal (state, ptid))
2715     return;
2716
2717   *buf++ = 'H';
2718   *buf++ = gen ? 'g' : 'c';
2719   if (ptid_equal (ptid, magic_null_ptid))
2720     xsnprintf (buf, endbuf - buf, "0");
2721   else if (ptid_equal (ptid, any_thread_ptid))
2722     xsnprintf (buf, endbuf - buf, "0");
2723   else if (ptid_equal (ptid, minus_one_ptid))
2724     xsnprintf (buf, endbuf - buf, "-1");
2725   else
2726     write_ptid (buf, endbuf, ptid);
2727   putpkt (rs->buf);
2728   getpkt (&rs->buf, &rs->buf_size, 0);
2729   if (gen)
2730     rs->general_thread = ptid;
2731   else
2732     rs->continue_thread = ptid;
2733 }
2734
2735 void
2736 remote_target::set_general_thread (ptid_t ptid)
2737 {
2738   set_thread (ptid, 1);
2739 }
2740
2741 void
2742 remote_target::set_continue_thread (ptid_t ptid)
2743 {
2744   set_thread (ptid, 0);
2745 }
2746
2747 /* Change the remote current process.  Which thread within the process
2748    ends up selected isn't important, as long as it is the same process
2749    as what INFERIOR_PTID points to.
2750
2751    This comes from that fact that there is no explicit notion of
2752    "selected process" in the protocol.  The selected process for
2753    general operations is the process the selected general thread
2754    belongs to.  */
2755
2756 void
2757 remote_target::set_general_process ()
2758 {
2759   struct remote_state *rs = get_remote_state ();
2760
2761   /* If the remote can't handle multiple processes, don't bother.  */
2762   if (!remote_multi_process_p (rs))
2763     return;
2764
2765   /* We only need to change the remote current thread if it's pointing
2766      at some other process.  */
2767   if (ptid_get_pid (rs->general_thread) != ptid_get_pid (inferior_ptid))
2768     set_general_thread (inferior_ptid);
2769 }
2770
2771 \f
2772 /* Return nonzero if this is the main thread that we made up ourselves
2773    to model non-threaded targets as single-threaded.  */
2774
2775 static int
2776 remote_thread_always_alive (ptid_t ptid)
2777 {
2778   if (ptid_equal (ptid, magic_null_ptid))
2779     /* The main thread is always alive.  */
2780     return 1;
2781
2782   if (ptid_get_pid (ptid) != 0 && ptid_get_lwp (ptid) == 0)
2783     /* The main thread is always alive.  This can happen after a
2784        vAttach, if the remote side doesn't support
2785        multi-threading.  */
2786     return 1;
2787
2788   return 0;
2789 }
2790
2791 /* Return nonzero if the thread PTID is still alive on the remote
2792    system.  */
2793
2794 bool
2795 remote_target::thread_alive (ptid_t ptid)
2796 {
2797   struct remote_state *rs = get_remote_state ();
2798   char *p, *endp;
2799
2800   /* Check if this is a thread that we made up ourselves to model
2801      non-threaded targets as single-threaded.  */
2802   if (remote_thread_always_alive (ptid))
2803     return 1;
2804
2805   p = rs->buf;
2806   endp = rs->buf + get_remote_packet_size ();
2807
2808   *p++ = 'T';
2809   write_ptid (p, endp, ptid);
2810
2811   putpkt (rs->buf);
2812   getpkt (&rs->buf, &rs->buf_size, 0);
2813   return (rs->buf[0] == 'O' && rs->buf[1] == 'K');
2814 }
2815
2816 /* Return a pointer to a thread name if we know it and NULL otherwise.
2817    The thread_info object owns the memory for the name.  */
2818
2819 const char *
2820 remote_target::thread_name (struct thread_info *info)
2821 {
2822   if (info->priv != NULL)
2823     {
2824       const std::string &name = get_remote_thread_info (info)->name;
2825       return !name.empty () ? name.c_str () : NULL;
2826     }
2827
2828   return NULL;
2829 }
2830
2831 /* About these extended threadlist and threadinfo packets.  They are
2832    variable length packets but, the fields within them are often fixed
2833    length.  They are redundent enough to send over UDP as is the
2834    remote protocol in general.  There is a matching unit test module
2835    in libstub.  */
2836
2837 /* WARNING: This threadref data structure comes from the remote O.S.,
2838    libstub protocol encoding, and remote.c.  It is not particularly
2839    changable.  */
2840
2841 /* Right now, the internal structure is int. We want it to be bigger.
2842    Plan to fix this.  */
2843
2844 typedef int gdb_threadref;      /* Internal GDB thread reference.  */
2845
2846 /* gdb_ext_thread_info is an internal GDB data structure which is
2847    equivalent to the reply of the remote threadinfo packet.  */
2848
2849 struct gdb_ext_thread_info
2850   {
2851     threadref threadid;         /* External form of thread reference.  */
2852     int active;                 /* Has state interesting to GDB?
2853                                    regs, stack.  */
2854     char display[256];          /* Brief state display, name,
2855                                    blocked/suspended.  */
2856     char shortname[32];         /* To be used to name threads.  */
2857     char more_display[256];     /* Long info, statistics, queue depth,
2858                                    whatever.  */
2859   };
2860
2861 /* The volume of remote transfers can be limited by submitting
2862    a mask containing bits specifying the desired information.
2863    Use a union of these values as the 'selection' parameter to
2864    get_thread_info.  FIXME: Make these TAG names more thread specific.  */
2865
2866 #define TAG_THREADID 1
2867 #define TAG_EXISTS 2
2868 #define TAG_DISPLAY 4
2869 #define TAG_THREADNAME 8
2870 #define TAG_MOREDISPLAY 16
2871
2872 #define BUF_THREAD_ID_SIZE (OPAQUETHREADBYTES * 2)
2873
2874 static char *unpack_nibble (char *buf, int *val);
2875
2876 static char *unpack_byte (char *buf, int *value);
2877
2878 static char *pack_int (char *buf, int value);
2879
2880 static char *unpack_int (char *buf, int *value);
2881
2882 static char *unpack_string (char *src, char *dest, int length);
2883
2884 static char *pack_threadid (char *pkt, threadref *id);
2885
2886 static char *unpack_threadid (char *inbuf, threadref *id);
2887
2888 void int_to_threadref (threadref *id, int value);
2889
2890 static int threadref_to_int (threadref *ref);
2891
2892 static void copy_threadref (threadref *dest, threadref *src);
2893
2894 static int threadmatch (threadref *dest, threadref *src);
2895
2896 static char *pack_threadinfo_request (char *pkt, int mode,
2897                                       threadref *id);
2898
2899 static char *pack_threadlist_request (char *pkt, int startflag,
2900                                       int threadcount,
2901                                       threadref *nextthread);
2902
2903 static int remote_newthread_step (threadref *ref, void *context);
2904
2905
2906 /* Write a PTID to BUF.  ENDBUF points to one-passed-the-end of the
2907    buffer we're allowed to write to.  Returns
2908    BUF+CHARACTERS_WRITTEN.  */
2909
2910 char *
2911 remote_target::write_ptid (char *buf, const char *endbuf, ptid_t ptid)
2912 {
2913   int pid, tid;
2914   struct remote_state *rs = get_remote_state ();
2915
2916   if (remote_multi_process_p (rs))
2917     {
2918       pid = ptid_get_pid (ptid);
2919       if (pid < 0)
2920         buf += xsnprintf (buf, endbuf - buf, "p-%x.", -pid);
2921       else
2922         buf += xsnprintf (buf, endbuf - buf, "p%x.", pid);
2923     }
2924   tid = ptid_get_lwp (ptid);
2925   if (tid < 0)
2926     buf += xsnprintf (buf, endbuf - buf, "-%x", -tid);
2927   else
2928     buf += xsnprintf (buf, endbuf - buf, "%x", tid);
2929
2930   return buf;
2931 }
2932
2933 /* Extract a PTID from BUF.  If non-null, OBUF is set to one past the
2934    last parsed char.  Returns null_ptid if no thread id is found, and
2935    throws an error if the thread id has an invalid format.  */
2936
2937 static ptid_t
2938 read_ptid (const char *buf, const char **obuf)
2939 {
2940   const char *p = buf;
2941   const char *pp;
2942   ULONGEST pid = 0, tid = 0;
2943
2944   if (*p == 'p')
2945     {
2946       /* Multi-process ptid.  */
2947       pp = unpack_varlen_hex (p + 1, &pid);
2948       if (*pp != '.')
2949         error (_("invalid remote ptid: %s"), p);
2950
2951       p = pp;
2952       pp = unpack_varlen_hex (p + 1, &tid);
2953       if (obuf)
2954         *obuf = pp;
2955       return ptid_build (pid, tid, 0);
2956     }
2957
2958   /* No multi-process.  Just a tid.  */
2959   pp = unpack_varlen_hex (p, &tid);
2960
2961   /* Return null_ptid when no thread id is found.  */
2962   if (p == pp)
2963     {
2964       if (obuf)
2965         *obuf = pp;
2966       return null_ptid;
2967     }
2968
2969   /* Since the stub is not sending a process id, then default to
2970      what's in inferior_ptid, unless it's null at this point.  If so,
2971      then since there's no way to know the pid of the reported
2972      threads, use the magic number.  */
2973   if (ptid_equal (inferior_ptid, null_ptid))
2974     pid = ptid_get_pid (magic_null_ptid);
2975   else
2976     pid = ptid_get_pid (inferior_ptid);
2977
2978   if (obuf)
2979     *obuf = pp;
2980   return ptid_build (pid, tid, 0);
2981 }
2982
2983 static int
2984 stubhex (int ch)
2985 {
2986   if (ch >= 'a' && ch <= 'f')
2987     return ch - 'a' + 10;
2988   if (ch >= '0' && ch <= '9')
2989     return ch - '0';
2990   if (ch >= 'A' && ch <= 'F')
2991     return ch - 'A' + 10;
2992   return -1;
2993 }
2994
2995 static int
2996 stub_unpack_int (char *buff, int fieldlength)
2997 {
2998   int nibble;
2999   int retval = 0;
3000
3001   while (fieldlength)
3002     {
3003       nibble = stubhex (*buff++);
3004       retval |= nibble;
3005       fieldlength--;
3006       if (fieldlength)
3007         retval = retval << 4;
3008     }
3009   return retval;
3010 }
3011
3012 static char *
3013 unpack_nibble (char *buf, int *val)
3014 {
3015   *val = fromhex (*buf++);
3016   return buf;
3017 }
3018
3019 static char *
3020 unpack_byte (char *buf, int *value)
3021 {
3022   *value = stub_unpack_int (buf, 2);
3023   return buf + 2;
3024 }
3025
3026 static char *
3027 pack_int (char *buf, int value)
3028 {
3029   buf = pack_hex_byte (buf, (value >> 24) & 0xff);
3030   buf = pack_hex_byte (buf, (value >> 16) & 0xff);
3031   buf = pack_hex_byte (buf, (value >> 8) & 0x0ff);
3032   buf = pack_hex_byte (buf, (value & 0xff));
3033   return buf;
3034 }
3035
3036 static char *
3037 unpack_int (char *buf, int *value)
3038 {
3039   *value = stub_unpack_int (buf, 8);
3040   return buf + 8;
3041 }
3042
3043 #if 0                   /* Currently unused, uncomment when needed.  */
3044 static char *pack_string (char *pkt, char *string);
3045
3046 static char *
3047 pack_string (char *pkt, char *string)
3048 {
3049   char ch;
3050   int len;
3051
3052   len = strlen (string);
3053   if (len > 200)
3054     len = 200;          /* Bigger than most GDB packets, junk???  */
3055   pkt = pack_hex_byte (pkt, len);
3056   while (len-- > 0)
3057     {
3058       ch = *string++;
3059       if ((ch == '\0') || (ch == '#'))
3060         ch = '*';               /* Protect encapsulation.  */
3061       *pkt++ = ch;
3062     }
3063   return pkt;
3064 }
3065 #endif /* 0 (unused) */
3066
3067 static char *
3068 unpack_string (char *src, char *dest, int length)
3069 {
3070   while (length--)
3071     *dest++ = *src++;
3072   *dest = '\0';
3073   return src;
3074 }
3075
3076 static char *
3077 pack_threadid (char *pkt, threadref *id)
3078 {
3079   char *limit;
3080   unsigned char *altid;
3081
3082   altid = (unsigned char *) id;
3083   limit = pkt + BUF_THREAD_ID_SIZE;
3084   while (pkt < limit)
3085     pkt = pack_hex_byte (pkt, *altid++);
3086   return pkt;
3087 }
3088
3089
3090 static char *
3091 unpack_threadid (char *inbuf, threadref *id)
3092 {
3093   char *altref;
3094   char *limit = inbuf + BUF_THREAD_ID_SIZE;
3095   int x, y;
3096
3097   altref = (char *) id;
3098
3099   while (inbuf < limit)
3100     {
3101       x = stubhex (*inbuf++);
3102       y = stubhex (*inbuf++);
3103       *altref++ = (x << 4) | y;
3104     }
3105   return inbuf;
3106 }
3107
3108 /* Externally, threadrefs are 64 bits but internally, they are still
3109    ints.  This is due to a mismatch of specifications.  We would like
3110    to use 64bit thread references internally.  This is an adapter
3111    function.  */
3112
3113 void
3114 int_to_threadref (threadref *id, int value)
3115 {
3116   unsigned char *scan;
3117
3118   scan = (unsigned char *) id;
3119   {
3120     int i = 4;
3121     while (i--)
3122       *scan++ = 0;
3123   }
3124   *scan++ = (value >> 24) & 0xff;
3125   *scan++ = (value >> 16) & 0xff;
3126   *scan++ = (value >> 8) & 0xff;
3127   *scan++ = (value & 0xff);
3128 }
3129
3130 static int
3131 threadref_to_int (threadref *ref)
3132 {
3133   int i, value = 0;
3134   unsigned char *scan;
3135
3136   scan = *ref;
3137   scan += 4;
3138   i = 4;
3139   while (i-- > 0)
3140     value = (value << 8) | ((*scan++) & 0xff);
3141   return value;
3142 }
3143
3144 static void
3145 copy_threadref (threadref *dest, threadref *src)
3146 {
3147   int i;
3148   unsigned char *csrc, *cdest;
3149
3150   csrc = (unsigned char *) src;
3151   cdest = (unsigned char *) dest;
3152   i = 8;
3153   while (i--)
3154     *cdest++ = *csrc++;
3155 }
3156
3157 static int
3158 threadmatch (threadref *dest, threadref *src)
3159 {
3160   /* Things are broken right now, so just assume we got a match.  */
3161 #if 0
3162   unsigned char *srcp, *destp;
3163   int i, result;
3164   srcp = (char *) src;
3165   destp = (char *) dest;
3166
3167   result = 1;
3168   while (i-- > 0)
3169     result &= (*srcp++ == *destp++) ? 1 : 0;
3170   return result;
3171 #endif
3172   return 1;
3173 }
3174
3175 /*
3176    threadid:1,        # always request threadid
3177    context_exists:2,
3178    display:4,
3179    unique_name:8,
3180    more_display:16
3181  */
3182
3183 /* Encoding:  'Q':8,'P':8,mask:32,threadid:64 */
3184
3185 static char *
3186 pack_threadinfo_request (char *pkt, int mode, threadref *id)
3187 {
3188   *pkt++ = 'q';                         /* Info Query */
3189   *pkt++ = 'P';                         /* process or thread info */
3190   pkt = pack_int (pkt, mode);           /* mode */
3191   pkt = pack_threadid (pkt, id);        /* threadid */
3192   *pkt = '\0';                          /* terminate */
3193   return pkt;
3194 }
3195
3196 /* These values tag the fields in a thread info response packet.  */
3197 /* Tagging the fields allows us to request specific fields and to
3198    add more fields as time goes by.  */
3199
3200 #define TAG_THREADID 1          /* Echo the thread identifier.  */
3201 #define TAG_EXISTS 2            /* Is this process defined enough to
3202                                    fetch registers and its stack?  */
3203 #define TAG_DISPLAY 4           /* A short thing maybe to put on a window */
3204 #define TAG_THREADNAME 8        /* string, maps 1-to-1 with a thread is.  */
3205 #define TAG_MOREDISPLAY 16      /* Whatever the kernel wants to say about
3206                                    the process.  */
3207
3208 int
3209 remote_target::remote_unpack_thread_info_response (char *pkt,
3210                                                    threadref *expectedref,
3211                                                    gdb_ext_thread_info *info)
3212 {
3213   struct remote_state *rs = get_remote_state ();
3214   int mask, length;
3215   int tag;
3216   threadref ref;
3217   char *limit = pkt + rs->buf_size; /* Plausible parsing limit.  */
3218   int retval = 1;
3219
3220   /* info->threadid = 0; FIXME: implement zero_threadref.  */
3221   info->active = 0;
3222   info->display[0] = '\0';
3223   info->shortname[0] = '\0';
3224   info->more_display[0] = '\0';
3225
3226   /* Assume the characters indicating the packet type have been
3227      stripped.  */
3228   pkt = unpack_int (pkt, &mask);        /* arg mask */
3229   pkt = unpack_threadid (pkt, &ref);
3230
3231   if (mask == 0)
3232     warning (_("Incomplete response to threadinfo request."));
3233   if (!threadmatch (&ref, expectedref))
3234     {                   /* This is an answer to a different request.  */
3235       warning (_("ERROR RMT Thread info mismatch."));
3236       return 0;
3237     }
3238   copy_threadref (&info->threadid, &ref);
3239
3240   /* Loop on tagged fields , try to bail if somthing goes wrong.  */
3241
3242   /* Packets are terminated with nulls.  */
3243   while ((pkt < limit) && mask && *pkt)
3244     {
3245       pkt = unpack_int (pkt, &tag);     /* tag */
3246       pkt = unpack_byte (pkt, &length); /* length */
3247       if (!(tag & mask))                /* Tags out of synch with mask.  */
3248         {
3249           warning (_("ERROR RMT: threadinfo tag mismatch."));
3250           retval = 0;
3251           break;
3252         }
3253       if (tag == TAG_THREADID)
3254         {
3255           if (length != 16)
3256             {
3257               warning (_("ERROR RMT: length of threadid is not 16."));
3258               retval = 0;
3259               break;
3260             }
3261           pkt = unpack_threadid (pkt, &ref);
3262           mask = mask & ~TAG_THREADID;
3263           continue;
3264         }
3265       if (tag == TAG_EXISTS)
3266         {
3267           info->active = stub_unpack_int (pkt, length);
3268           pkt += length;
3269           mask = mask & ~(TAG_EXISTS);
3270           if (length > 8)
3271             {
3272               warning (_("ERROR RMT: 'exists' length too long."));
3273               retval = 0;
3274               break;
3275             }
3276           continue;
3277         }
3278       if (tag == TAG_THREADNAME)
3279         {
3280           pkt = unpack_string (pkt, &info->shortname[0], length);
3281           mask = mask & ~TAG_THREADNAME;
3282           continue;
3283         }
3284       if (tag == TAG_DISPLAY)
3285         {
3286           pkt = unpack_string (pkt, &info->display[0], length);
3287           mask = mask & ~TAG_DISPLAY;
3288           continue;
3289         }
3290       if (tag == TAG_MOREDISPLAY)
3291         {
3292           pkt = unpack_string (pkt, &info->more_display[0], length);
3293           mask = mask & ~TAG_MOREDISPLAY;
3294           continue;
3295         }
3296       warning (_("ERROR RMT: unknown thread info tag."));
3297       break;                    /* Not a tag we know about.  */
3298     }
3299   return retval;
3300 }
3301
3302 int
3303 remote_target::remote_get_threadinfo (threadref *threadid,
3304                                       int fieldset,
3305                                       gdb_ext_thread_info *info)
3306 {
3307   struct remote_state *rs = get_remote_state ();
3308   int result;
3309
3310   pack_threadinfo_request (rs->buf, fieldset, threadid);
3311   putpkt (rs->buf);
3312   getpkt (&rs->buf, &rs->buf_size, 0);
3313
3314   if (rs->buf[0] == '\0')
3315     return 0;
3316
3317   result = remote_unpack_thread_info_response (rs->buf + 2,
3318                                                threadid, info);
3319   return result;
3320 }
3321
3322 /*    Format: i'Q':8,i"L":8,initflag:8,batchsize:16,lastthreadid:32   */
3323
3324 static char *
3325 pack_threadlist_request (char *pkt, int startflag, int threadcount,
3326                          threadref *nextthread)
3327 {
3328   *pkt++ = 'q';                 /* info query packet */
3329   *pkt++ = 'L';                 /* Process LIST or threadLIST request */
3330   pkt = pack_nibble (pkt, startflag);           /* initflag 1 bytes */
3331   pkt = pack_hex_byte (pkt, threadcount);       /* threadcount 2 bytes */
3332   pkt = pack_threadid (pkt, nextthread);        /* 64 bit thread identifier */
3333   *pkt = '\0';
3334   return pkt;
3335 }
3336
3337 /* Encoding:   'q':8,'M':8,count:16,done:8,argthreadid:64,(threadid:64)* */
3338
3339 int
3340 remote_target::parse_threadlist_response (char *pkt, int result_limit,
3341                                           threadref *original_echo,
3342                                           threadref *resultlist,
3343                                           int *doneflag)
3344 {
3345   struct remote_state *rs = get_remote_state ();
3346   char *limit;
3347   int count, resultcount, done;
3348
3349   resultcount = 0;
3350   /* Assume the 'q' and 'M chars have been stripped.  */
3351   limit = pkt + (rs->buf_size - BUF_THREAD_ID_SIZE);
3352   /* done parse past here */
3353   pkt = unpack_byte (pkt, &count);      /* count field */
3354   pkt = unpack_nibble (pkt, &done);
3355   /* The first threadid is the argument threadid.  */
3356   pkt = unpack_threadid (pkt, original_echo);   /* should match query packet */
3357   while ((count-- > 0) && (pkt < limit))
3358     {
3359       pkt = unpack_threadid (pkt, resultlist++);
3360       if (resultcount++ >= result_limit)
3361         break;
3362     }
3363   if (doneflag)
3364     *doneflag = done;
3365   return resultcount;
3366 }
3367
3368 /* Fetch the next batch of threads from the remote.  Returns -1 if the
3369    qL packet is not supported, 0 on error and 1 on success.  */
3370
3371 int
3372 remote_target::remote_get_threadlist (int startflag, threadref *nextthread,
3373                                       int result_limit, int *done, int *result_count,
3374                                       threadref *threadlist)
3375 {
3376   struct remote_state *rs = get_remote_state ();
3377   int result = 1;
3378
3379   /* Trancate result limit to be smaller than the packet size.  */
3380   if ((((result_limit + 1) * BUF_THREAD_ID_SIZE) + 10)
3381       >= get_remote_packet_size ())
3382     result_limit = (get_remote_packet_size () / BUF_THREAD_ID_SIZE) - 2;
3383
3384   pack_threadlist_request (rs->buf, startflag, result_limit, nextthread);
3385   putpkt (rs->buf);
3386   getpkt (&rs->buf, &rs->buf_size, 0);
3387   if (*rs->buf == '\0')
3388     {
3389       /* Packet not supported.  */
3390       return -1;
3391     }
3392
3393   *result_count =
3394     parse_threadlist_response (rs->buf + 2, result_limit,
3395                                &rs->echo_nextthread, threadlist, done);
3396
3397   if (!threadmatch (&rs->echo_nextthread, nextthread))
3398     {
3399       /* FIXME: This is a good reason to drop the packet.  */
3400       /* Possably, there is a duplicate response.  */
3401       /* Possabilities :
3402          retransmit immediatly - race conditions
3403          retransmit after timeout - yes
3404          exit
3405          wait for packet, then exit
3406        */
3407       warning (_("HMM: threadlist did not echo arg thread, dropping it."));
3408       return 0;                 /* I choose simply exiting.  */
3409     }
3410   if (*result_count <= 0)
3411     {
3412       if (*done != 1)
3413         {
3414           warning (_("RMT ERROR : failed to get remote thread list."));
3415           result = 0;
3416         }
3417       return result;            /* break; */
3418     }
3419   if (*result_count > result_limit)
3420     {
3421       *result_count = 0;
3422       warning (_("RMT ERROR: threadlist response longer than requested."));
3423       return 0;
3424     }
3425   return result;
3426 }
3427
3428 /* Fetch the list of remote threads, with the qL packet, and call
3429    STEPFUNCTION for each thread found.  Stops iterating and returns 1
3430    if STEPFUNCTION returns true.  Stops iterating and returns 0 if the
3431    STEPFUNCTION returns false.  If the packet is not supported,
3432    returns -1.  */
3433
3434 int
3435 remote_target::remote_threadlist_iterator (rmt_thread_action stepfunction,
3436                                            void *context, int looplimit)
3437 {
3438   struct remote_state *rs = get_remote_state ();
3439   int done, i, result_count;
3440   int startflag = 1;
3441   int result = 1;
3442   int loopcount = 0;
3443
3444   done = 0;
3445   while (!done)
3446     {
3447       if (loopcount++ > looplimit)
3448         {
3449           result = 0;
3450           warning (_("Remote fetch threadlist -infinite loop-."));
3451           break;
3452         }
3453       result = remote_get_threadlist (startflag, &rs->nextthread,
3454                                       MAXTHREADLISTRESULTS,
3455                                       &done, &result_count,
3456                                       rs->resultthreadlist);
3457       if (result <= 0)
3458         break;
3459       /* Clear for later iterations.  */
3460       startflag = 0;
3461       /* Setup to resume next batch of thread references, set nextthread.  */
3462       if (result_count >= 1)
3463         copy_threadref (&rs->nextthread,
3464                         &rs->resultthreadlist[result_count - 1]);
3465       i = 0;
3466       while (result_count--)
3467         {
3468           if (!(*stepfunction) (&rs->resultthreadlist[i++], context))
3469             {
3470               result = 0;
3471               break;
3472             }
3473         }
3474     }
3475   return result;
3476 }
3477
3478 /* A thread found on the remote target.  */
3479
3480 struct thread_item
3481 {
3482   explicit thread_item (ptid_t ptid_)
3483   : ptid (ptid_)
3484   {}
3485
3486   thread_item (thread_item &&other) = default;
3487   thread_item &operator= (thread_item &&other) = default;
3488
3489   DISABLE_COPY_AND_ASSIGN (thread_item);
3490
3491   /* The thread's PTID.  */
3492   ptid_t ptid;
3493
3494   /* The thread's extra info.  */
3495   std::string extra;
3496
3497   /* The thread's name.  */
3498   std::string name;
3499
3500   /* The core the thread was running on.  -1 if not known.  */
3501   int core = -1;
3502
3503   /* The thread handle associated with the thread.  */
3504   gdb::byte_vector thread_handle;
3505 };
3506
3507 /* Context passed around to the various methods listing remote
3508    threads.  As new threads are found, they're added to the ITEMS
3509    vector.  */
3510
3511 struct threads_listing_context
3512 {
3513   /* Return true if this object contains an entry for a thread with ptid
3514      PTID.  */
3515
3516   bool contains_thread (ptid_t ptid) const
3517   {
3518     auto match_ptid = [&] (const thread_item &item)
3519       {
3520         return item.ptid == ptid;
3521       };
3522
3523     auto it = std::find_if (this->items.begin (),
3524                             this->items.end (),
3525                             match_ptid);
3526
3527     return it != this->items.end ();
3528   }
3529
3530   /* Remove the thread with ptid PTID.  */
3531
3532   void remove_thread (ptid_t ptid)
3533   {
3534     auto match_ptid = [&] (const thread_item &item)
3535       {
3536         return item.ptid == ptid;
3537       };
3538
3539     auto it = std::remove_if (this->items.begin (),
3540                               this->items.end (),
3541                               match_ptid);
3542
3543     if (it != this->items.end ())
3544       this->items.erase (it);
3545   }
3546
3547   /* The threads found on the remote target.  */
3548   std::vector<thread_item> items;
3549 };
3550
3551 static int
3552 remote_newthread_step (threadref *ref, void *data)
3553 {
3554   struct threads_listing_context *context
3555     = (struct threads_listing_context *) data;
3556   int pid = inferior_ptid.pid ();
3557   int lwp = threadref_to_int (ref);
3558   ptid_t ptid (pid, lwp);
3559
3560   context->items.emplace_back (ptid);
3561
3562   return 1;                     /* continue iterator */
3563 }
3564
3565 #define CRAZY_MAX_THREADS 1000
3566
3567 ptid_t
3568 remote_target::remote_current_thread (ptid_t oldpid)
3569 {
3570   struct remote_state *rs = get_remote_state ();
3571
3572   putpkt ("qC");
3573   getpkt (&rs->buf, &rs->buf_size, 0);
3574   if (rs->buf[0] == 'Q' && rs->buf[1] == 'C')
3575     {
3576       const char *obuf;
3577       ptid_t result;
3578
3579       result = read_ptid (&rs->buf[2], &obuf);
3580       if (*obuf != '\0' && remote_debug)
3581         fprintf_unfiltered (gdb_stdlog,
3582                             "warning: garbage in qC reply\n");
3583
3584       return result;
3585     }
3586   else
3587     return oldpid;
3588 }
3589
3590 /* List remote threads using the deprecated qL packet.  */
3591
3592 int
3593 remote_target::remote_get_threads_with_ql (threads_listing_context *context)
3594 {
3595   if (remote_threadlist_iterator (remote_newthread_step, context,
3596                                   CRAZY_MAX_THREADS) >= 0)
3597     return 1;
3598
3599   return 0;
3600 }
3601
3602 #if defined(HAVE_LIBEXPAT)
3603
3604 static void
3605 start_thread (struct gdb_xml_parser *parser,
3606               const struct gdb_xml_element *element,
3607               void *user_data,
3608               std::vector<gdb_xml_value> &attributes)
3609 {
3610   struct threads_listing_context *data
3611     = (struct threads_listing_context *) user_data;
3612   struct gdb_xml_value *attr;
3613
3614   char *id = (char *) xml_find_attribute (attributes, "id")->value.get ();
3615   ptid_t ptid = read_ptid (id, NULL);
3616
3617   data->items.emplace_back (ptid);
3618   thread_item &item = data->items.back ();
3619
3620   attr = xml_find_attribute (attributes, "core");
3621   if (attr != NULL)
3622     item.core = *(ULONGEST *) attr->value.get ();
3623
3624   attr = xml_find_attribute (attributes, "name");
3625   if (attr != NULL)
3626     item.name = (const char *) attr->value.get ();
3627
3628   attr = xml_find_attribute (attributes, "handle");
3629   if (attr != NULL)
3630     item.thread_handle = hex2bin ((const char *) attr->value.get ());
3631 }
3632
3633 static void
3634 end_thread (struct gdb_xml_parser *parser,
3635             const struct gdb_xml_element *element,
3636             void *user_data, const char *body_text)
3637 {
3638   struct threads_listing_context *data
3639     = (struct threads_listing_context *) user_data;
3640
3641   if (body_text != NULL && *body_text != '\0')
3642     data->items.back ().extra = body_text;
3643 }
3644
3645 const struct gdb_xml_attribute thread_attributes[] = {
3646   { "id", GDB_XML_AF_NONE, NULL, NULL },
3647   { "core", GDB_XML_AF_OPTIONAL, gdb_xml_parse_attr_ulongest, NULL },
3648   { "name", GDB_XML_AF_OPTIONAL, NULL, NULL },
3649   { "handle", GDB_XML_AF_OPTIONAL, NULL, NULL },
3650   { NULL, GDB_XML_AF_NONE, NULL, NULL }
3651 };
3652
3653 const struct gdb_xml_element thread_children[] = {
3654   { NULL, NULL, NULL, GDB_XML_EF_NONE, NULL, NULL }
3655 };
3656
3657 const struct gdb_xml_element threads_children[] = {
3658   { "thread", thread_attributes, thread_children,
3659     GDB_XML_EF_REPEATABLE | GDB_XML_EF_OPTIONAL,
3660     start_thread, end_thread },
3661   { NULL, NULL, NULL, GDB_XML_EF_NONE, NULL, NULL }
3662 };
3663
3664 const struct gdb_xml_element threads_elements[] = {
3665   { "threads", NULL, threads_children,
3666     GDB_XML_EF_NONE, NULL, NULL },
3667   { NULL, NULL, NULL, GDB_XML_EF_NONE, NULL, NULL }
3668 };
3669
3670 #endif
3671
3672 /* List remote threads using qXfer:threads:read.  */
3673
3674 int
3675 remote_target::remote_get_threads_with_qxfer (threads_listing_context *context)
3676 {
3677 #if defined(HAVE_LIBEXPAT)
3678   if (packet_support (PACKET_qXfer_threads) == PACKET_ENABLE)
3679     {
3680       gdb::optional<gdb::char_vector> xml
3681         = target_read_stralloc (this, TARGET_OBJECT_THREADS, NULL);
3682
3683       if (xml && (*xml)[0] != '\0')
3684         {
3685           gdb_xml_parse_quick (_("threads"), "threads.dtd",
3686                                threads_elements, xml->data (), context);
3687         }
3688
3689       return 1;
3690     }
3691 #endif
3692
3693   return 0;
3694 }
3695
3696 /* List remote threads using qfThreadInfo/qsThreadInfo.  */
3697
3698 int
3699 remote_target::remote_get_threads_with_qthreadinfo (threads_listing_context *context)
3700 {
3701   struct remote_state *rs = get_remote_state ();
3702
3703   if (rs->use_threadinfo_query)
3704     {
3705       const char *bufp;
3706
3707       putpkt ("qfThreadInfo");
3708       getpkt (&rs->buf, &rs->buf_size, 0);
3709       bufp = rs->buf;
3710       if (bufp[0] != '\0')              /* q packet recognized */
3711         {
3712           while (*bufp++ == 'm')        /* reply contains one or more TID */
3713             {
3714               do
3715                 {
3716                   ptid_t ptid = read_ptid (bufp, &bufp);
3717                   context->items.emplace_back (ptid);
3718                 }
3719               while (*bufp++ == ',');   /* comma-separated list */
3720               putpkt ("qsThreadInfo");
3721               getpkt (&rs->buf, &rs->buf_size, 0);
3722               bufp = rs->buf;
3723             }
3724           return 1;
3725         }
3726       else
3727         {
3728           /* Packet not recognized.  */
3729           rs->use_threadinfo_query = 0;
3730         }
3731     }
3732
3733   return 0;
3734 }
3735
3736 /* Implement the to_update_thread_list function for the remote
3737    targets.  */
3738
3739 void
3740 remote_target::update_thread_list ()
3741 {
3742   struct threads_listing_context context;
3743   int got_list = 0;
3744
3745   /* We have a few different mechanisms to fetch the thread list.  Try
3746      them all, starting with the most preferred one first, falling
3747      back to older methods.  */
3748   if (remote_get_threads_with_qxfer (&context)
3749       || remote_get_threads_with_qthreadinfo (&context)
3750       || remote_get_threads_with_ql (&context))
3751     {
3752       struct thread_info *tp, *tmp;
3753
3754       got_list = 1;
3755
3756       if (context.items.empty ()
3757           && remote_thread_always_alive (inferior_ptid))
3758         {
3759           /* Some targets don't really support threads, but still
3760              reply an (empty) thread list in response to the thread
3761              listing packets, instead of replying "packet not
3762              supported".  Exit early so we don't delete the main
3763              thread.  */
3764           return;
3765         }
3766
3767       /* CONTEXT now holds the current thread list on the remote
3768          target end.  Delete GDB-side threads no longer found on the
3769          target.  */
3770       ALL_THREADS_SAFE (tp, tmp)
3771         {
3772           if (!context.contains_thread (tp->ptid))
3773             {
3774               /* Not found.  */
3775               delete_thread (tp->ptid);
3776             }
3777         }
3778
3779       /* Remove any unreported fork child threads from CONTEXT so
3780          that we don't interfere with follow fork, which is where
3781          creation of such threads is handled.  */
3782       remove_new_fork_children (&context);
3783
3784       /* And now add threads we don't know about yet to our list.  */
3785       for (thread_item &item : context.items)
3786         {
3787           if (item.ptid != null_ptid)
3788             {
3789               /* In non-stop mode, we assume new found threads are
3790                  executing until proven otherwise with a stop reply.
3791                  In all-stop, we can only get here if all threads are
3792                  stopped.  */
3793               int executing = target_is_non_stop_p () ? 1 : 0;
3794
3795               remote_notice_new_inferior (item.ptid, executing);
3796
3797               remote_thread_info *info = get_remote_thread_info (item.ptid);
3798               info->core = item.core;
3799               info->extra = std::move (item.extra);
3800               info->name = std::move (item.name);
3801               info->thread_handle = std::move (item.thread_handle);
3802             }
3803         }
3804     }
3805
3806   if (!got_list)
3807     {
3808       /* If no thread listing method is supported, then query whether
3809          each known thread is alive, one by one, with the T packet.
3810          If the target doesn't support threads at all, then this is a
3811          no-op.  See remote_thread_alive.  */
3812       prune_threads ();
3813     }
3814 }
3815
3816 /*
3817  * Collect a descriptive string about the given thread.
3818  * The target may say anything it wants to about the thread
3819  * (typically info about its blocked / runnable state, name, etc.).
3820  * This string will appear in the info threads display.
3821  *
3822  * Optional: targets are not required to implement this function.
3823  */
3824
3825 const char *
3826 remote_target::extra_thread_info (thread_info *tp)
3827 {
3828   struct remote_state *rs = get_remote_state ();
3829   int result;
3830   int set;
3831   threadref id;
3832   struct gdb_ext_thread_info threadinfo;
3833   static char display_buf[100]; /* arbitrary...  */
3834   int n = 0;                    /* position in display_buf */
3835
3836   if (rs->remote_desc == 0)             /* paranoia */
3837     internal_error (__FILE__, __LINE__,
3838                     _("remote_threads_extra_info"));
3839
3840   if (ptid_equal (tp->ptid, magic_null_ptid)
3841       || (ptid_get_pid (tp->ptid) != 0 && ptid_get_lwp (tp->ptid) == 0))
3842     /* This is the main thread which was added by GDB.  The remote
3843        server doesn't know about it.  */
3844     return NULL;
3845
3846   if (packet_support (PACKET_qXfer_threads) == PACKET_ENABLE)
3847     {
3848       struct thread_info *info = find_thread_ptid (tp->ptid);
3849
3850       if (info != NULL && info->priv != NULL)
3851         {
3852           const std::string &extra = get_remote_thread_info (info)->extra;
3853           return !extra.empty () ? extra.c_str () : NULL;
3854         }
3855       else
3856         return NULL;
3857     }
3858
3859   if (rs->use_threadextra_query)
3860     {
3861       char *b = rs->buf;
3862       char *endb = rs->buf + get_remote_packet_size ();
3863
3864       xsnprintf (b, endb - b, "qThreadExtraInfo,");
3865       b += strlen (b);
3866       write_ptid (b, endb, tp->ptid);
3867
3868       putpkt (rs->buf);
3869       getpkt (&rs->buf, &rs->buf_size, 0);
3870       if (rs->buf[0] != 0)
3871         {
3872           n = std::min (strlen (rs->buf) / 2, sizeof (display_buf));
3873           result = hex2bin (rs->buf, (gdb_byte *) display_buf, n);
3874           display_buf [result] = '\0';
3875           return display_buf;
3876         }
3877     }
3878
3879   /* If the above query fails, fall back to the old method.  */
3880   rs->use_threadextra_query = 0;
3881   set = TAG_THREADID | TAG_EXISTS | TAG_THREADNAME
3882     | TAG_MOREDISPLAY | TAG_DISPLAY;
3883   int_to_threadref (&id, ptid_get_lwp (tp->ptid));
3884   if (remote_get_threadinfo (&id, set, &threadinfo))
3885     if (threadinfo.active)
3886       {
3887         if (*threadinfo.shortname)
3888           n += xsnprintf (&display_buf[0], sizeof (display_buf) - n,
3889                           " Name: %s,", threadinfo.shortname);
3890         if (*threadinfo.display)
3891           n += xsnprintf (&display_buf[n], sizeof (display_buf) - n,
3892                           " State: %s,", threadinfo.display);
3893         if (*threadinfo.more_display)
3894           n += xsnprintf (&display_buf[n], sizeof (display_buf) - n,
3895                           " Priority: %s", threadinfo.more_display);
3896
3897         if (n > 0)
3898           {
3899             /* For purely cosmetic reasons, clear up trailing commas.  */
3900             if (',' == display_buf[n-1])
3901               display_buf[n-1] = ' ';
3902             return display_buf;
3903           }
3904       }
3905   return NULL;
3906 }
3907 \f
3908
3909 bool
3910 remote_target::static_tracepoint_marker_at (CORE_ADDR addr,
3911                                             struct static_tracepoint_marker *marker)
3912 {
3913   struct remote_state *rs = get_remote_state ();
3914   char *p = rs->buf;
3915
3916   xsnprintf (p, get_remote_packet_size (), "qTSTMat:");
3917   p += strlen (p);
3918   p += hexnumstr (p, addr);
3919   putpkt (rs->buf);
3920   getpkt (&rs->buf, &rs->buf_size, 0);
3921   p = rs->buf;
3922
3923   if (*p == 'E')
3924     error (_("Remote failure reply: %s"), p);
3925
3926   if (*p++ == 'm')
3927     {
3928       parse_static_tracepoint_marker_definition (p, NULL, marker);
3929       return true;
3930     }
3931
3932   return false;
3933 }
3934
3935 std::vector<static_tracepoint_marker>
3936 remote_target::static_tracepoint_markers_by_strid (const char *strid)
3937 {
3938   struct remote_state *rs = get_remote_state ();
3939   std::vector<static_tracepoint_marker> markers;
3940   const char *p;
3941   static_tracepoint_marker marker;
3942
3943   /* Ask for a first packet of static tracepoint marker
3944      definition.  */
3945   putpkt ("qTfSTM");
3946   getpkt (&rs->buf, &rs->buf_size, 0);
3947   p = rs->buf;
3948   if (*p == 'E')
3949     error (_("Remote failure reply: %s"), p);
3950
3951   while (*p++ == 'm')
3952     {
3953       do
3954         {
3955           parse_static_tracepoint_marker_definition (p, &p, &marker);
3956
3957           if (strid == NULL || marker.str_id == strid)
3958             markers.push_back (std::move (marker));
3959         }
3960       while (*p++ == ',');      /* comma-separated list */
3961       /* Ask for another packet of static tracepoint definition.  */
3962       putpkt ("qTsSTM");
3963       getpkt (&rs->buf, &rs->buf_size, 0);
3964       p = rs->buf;
3965     }
3966
3967   return markers;
3968 }
3969
3970 \f
3971 /* Implement the to_get_ada_task_ptid function for the remote targets.  */
3972
3973 ptid_t
3974 remote_target::get_ada_task_ptid (long lwp, long thread)
3975 {
3976   return ptid_build (ptid_get_pid (inferior_ptid), lwp, 0);
3977 }
3978 \f
3979
3980 /* Restart the remote side; this is an extended protocol operation.  */
3981
3982 void
3983 remote_target::extended_remote_restart ()
3984 {
3985   struct remote_state *rs = get_remote_state ();
3986
3987   /* Send the restart command; for reasons I don't understand the
3988      remote side really expects a number after the "R".  */
3989   xsnprintf (rs->buf, get_remote_packet_size (), "R%x", 0);
3990   putpkt (rs->buf);
3991
3992   remote_fileio_reset ();
3993 }
3994 \f
3995 /* Clean up connection to a remote debugger.  */
3996
3997 void
3998 remote_target::close ()
3999 {
4000   /* Make sure we leave stdin registered in the event loop.  */
4001   terminal_ours ();
4002
4003   /* We don't have a connection to the remote stub anymore.  Get rid
4004      of all the inferiors and their threads we were controlling.
4005      Reset inferior_ptid to null_ptid first, as otherwise has_stack_frame
4006      will be unable to find the thread corresponding to (pid, 0, 0).  */
4007   inferior_ptid = null_ptid;
4008   discard_all_inferiors ();
4009
4010   trace_reset_local_state ();
4011
4012   delete this;
4013 }
4014
4015 remote_target::~remote_target ()
4016 {
4017   struct remote_state *rs = get_remote_state ();
4018
4019   /* Check for NULL because we may get here with a partially
4020      constructed target/connection.  */
4021   if (rs->remote_desc == nullptr)
4022     return;
4023
4024   serial_close (rs->remote_desc);
4025
4026   /* We are destroying the remote target, so we should discard
4027      everything of this target.  */
4028   discard_pending_stop_replies_in_queue ();
4029
4030   if (rs->remote_async_inferior_event_token)
4031     delete_async_event_handler (&rs->remote_async_inferior_event_token);
4032
4033   remote_notif_state_xfree (rs->notif_state);
4034 }
4035
4036 /* Query the remote side for the text, data and bss offsets.  */
4037
4038 void
4039 remote_target::get_offsets ()
4040 {
4041   struct remote_state *rs = get_remote_state ();
4042   char *buf;
4043   char *ptr;
4044   int lose, num_segments = 0, do_sections, do_segments;
4045   CORE_ADDR text_addr, data_addr, bss_addr, segments[2];
4046   struct section_offsets *offs;
4047   struct symfile_segment_data *data;
4048
4049   if (symfile_objfile == NULL)
4050     return;
4051
4052   putpkt ("qOffsets");
4053   getpkt (&rs->buf, &rs->buf_size, 0);
4054   buf = rs->buf;
4055
4056   if (buf[0] == '\000')
4057     return;                     /* Return silently.  Stub doesn't support
4058                                    this command.  */
4059   if (buf[0] == 'E')
4060     {
4061       warning (_("Remote failure reply: %s"), buf);
4062       return;
4063     }
4064
4065   /* Pick up each field in turn.  This used to be done with scanf, but
4066      scanf will make trouble if CORE_ADDR size doesn't match
4067      conversion directives correctly.  The following code will work
4068      with any size of CORE_ADDR.  */
4069   text_addr = data_addr = bss_addr = 0;
4070   ptr = buf;
4071   lose = 0;
4072
4073   if (startswith (ptr, "Text="))
4074     {
4075       ptr += 5;
4076       /* Don't use strtol, could lose on big values.  */
4077       while (*ptr && *ptr != ';')
4078         text_addr = (text_addr << 4) + fromhex (*ptr++);
4079
4080       if (startswith (ptr, ";Data="))
4081         {
4082           ptr += 6;
4083           while (*ptr && *ptr != ';')
4084             data_addr = (data_addr << 4) + fromhex (*ptr++);
4085         }
4086       else
4087         lose = 1;
4088
4089       if (!lose && startswith (ptr, ";Bss="))
4090         {
4091           ptr += 5;
4092           while (*ptr && *ptr != ';')
4093             bss_addr = (bss_addr << 4) + fromhex (*ptr++);
4094
4095           if (bss_addr != data_addr)
4096             warning (_("Target reported unsupported offsets: %s"), buf);
4097         }
4098       else
4099         lose = 1;
4100     }
4101   else if (startswith (ptr, "TextSeg="))
4102     {
4103       ptr += 8;
4104       /* Don't use strtol, could lose on big values.  */
4105       while (*ptr && *ptr != ';')
4106         text_addr = (text_addr << 4) + fromhex (*ptr++);
4107       num_segments = 1;
4108
4109       if (startswith (ptr, ";DataSeg="))
4110         {
4111           ptr += 9;
4112           while (*ptr && *ptr != ';')
4113             data_addr = (data_addr << 4) + fromhex (*ptr++);
4114           num_segments++;
4115         }
4116     }
4117   else
4118     lose = 1;
4119
4120   if (lose)
4121     error (_("Malformed response to offset query, %s"), buf);
4122   else if (*ptr != '\0')
4123     warning (_("Target reported unsupported offsets: %s"), buf);
4124
4125   offs = ((struct section_offsets *)
4126           alloca (SIZEOF_N_SECTION_OFFSETS (symfile_objfile->num_sections)));
4127   memcpy (offs, symfile_objfile->section_offsets,
4128           SIZEOF_N_SECTION_OFFSETS (symfile_objfile->num_sections));
4129
4130   data = get_symfile_segment_data (symfile_objfile->obfd);
4131   do_segments = (data != NULL);
4132   do_sections = num_segments == 0;
4133
4134   if (num_segments > 0)
4135     {
4136       segments[0] = text_addr;
4137       segments[1] = data_addr;
4138     }
4139   /* If we have two segments, we can still try to relocate everything
4140      by assuming that the .text and .data offsets apply to the whole
4141      text and data segments.  Convert the offsets given in the packet
4142      to base addresses for symfile_map_offsets_to_segments.  */
4143   else if (data && data->num_segments == 2)
4144     {
4145       segments[0] = data->segment_bases[0] + text_addr;
4146       segments[1] = data->segment_bases[1] + data_addr;
4147       num_segments = 2;
4148     }
4149   /* If the object file has only one segment, assume that it is text
4150      rather than data; main programs with no writable data are rare,
4151      but programs with no code are useless.  Of course the code might
4152      have ended up in the data segment... to detect that we would need
4153      the permissions here.  */
4154   else if (data && data->num_segments == 1)
4155     {
4156       segments[0] = data->segment_bases[0] + text_addr;
4157       num_segments = 1;
4158     }
4159   /* There's no way to relocate by segment.  */
4160   else
4161     do_segments = 0;
4162
4163   if (do_segments)
4164     {
4165       int ret = symfile_map_offsets_to_segments (symfile_objfile->obfd, data,
4166                                                  offs, num_segments, segments);
4167
4168       if (ret == 0 && !do_sections)
4169         error (_("Can not handle qOffsets TextSeg "
4170                  "response with this symbol file"));
4171
4172       if (ret > 0)
4173         do_sections = 0;
4174     }
4175
4176   if (data)
4177     free_symfile_segment_data (data);
4178
4179   if (do_sections)
4180     {
4181       offs->offsets[SECT_OFF_TEXT (symfile_objfile)] = text_addr;
4182
4183       /* This is a temporary kludge to force data and bss to use the
4184          same offsets because that's what nlmconv does now.  The real
4185          solution requires changes to the stub and remote.c that I
4186          don't have time to do right now.  */
4187
4188       offs->offsets[SECT_OFF_DATA (symfile_objfile)] = data_addr;
4189       offs->offsets[SECT_OFF_BSS (symfile_objfile)] = data_addr;
4190     }
4191
4192   objfile_relocate (symfile_objfile, offs);
4193 }
4194
4195 /* Send interrupt_sequence to remote target.  */
4196
4197 void
4198 remote_target::send_interrupt_sequence ()
4199 {
4200   struct remote_state *rs = get_remote_state ();
4201
4202   if (interrupt_sequence_mode == interrupt_sequence_control_c)
4203     remote_serial_write ("\x03", 1);
4204   else if (interrupt_sequence_mode == interrupt_sequence_break)
4205     serial_send_break (rs->remote_desc);
4206   else if (interrupt_sequence_mode == interrupt_sequence_break_g)
4207     {
4208       serial_send_break (rs->remote_desc);
4209       remote_serial_write ("g", 1);
4210     }
4211   else
4212     internal_error (__FILE__, __LINE__,
4213                     _("Invalid value for interrupt_sequence_mode: %s."),
4214                     interrupt_sequence_mode);
4215 }
4216
4217
4218 /* If STOP_REPLY is a T stop reply, look for the "thread" register,
4219    and extract the PTID.  Returns NULL_PTID if not found.  */
4220
4221 static ptid_t
4222 stop_reply_extract_thread (char *stop_reply)
4223 {
4224   if (stop_reply[0] == 'T' && strlen (stop_reply) > 3)
4225     {
4226       const char *p;
4227
4228       /* Txx r:val ; r:val (...)  */
4229       p = &stop_reply[3];
4230
4231       /* Look for "register" named "thread".  */
4232       while (*p != '\0')
4233         {
4234           const char *p1;
4235
4236           p1 = strchr (p, ':');
4237           if (p1 == NULL)
4238             return null_ptid;
4239
4240           if (strncmp (p, "thread", p1 - p) == 0)
4241             return read_ptid (++p1, &p);
4242
4243           p1 = strchr (p, ';');
4244           if (p1 == NULL)
4245             return null_ptid;
4246           p1++;
4247
4248           p = p1;
4249         }
4250     }
4251
4252   return null_ptid;
4253 }
4254
4255 /* Determine the remote side's current thread.  If we have a stop
4256    reply handy (in WAIT_STATUS), maybe it's a T stop reply with a
4257    "thread" register we can extract the current thread from.  If not,
4258    ask the remote which is the current thread with qC.  The former
4259    method avoids a roundtrip.  */
4260
4261 ptid_t
4262 remote_target::get_current_thread (char *wait_status)
4263 {
4264   ptid_t ptid = null_ptid;
4265
4266   /* Note we don't use remote_parse_stop_reply as that makes use of
4267      the target architecture, which we haven't yet fully determined at
4268      this point.  */
4269   if (wait_status != NULL)
4270     ptid = stop_reply_extract_thread (wait_status);
4271   if (ptid_equal (ptid, null_ptid))
4272     ptid = remote_current_thread (inferior_ptid);
4273
4274   return ptid;
4275 }
4276
4277 /* Query the remote target for which is the current thread/process,
4278    add it to our tables, and update INFERIOR_PTID.  The caller is
4279    responsible for setting the state such that the remote end is ready
4280    to return the current thread.
4281
4282    This function is called after handling the '?' or 'vRun' packets,
4283    whose response is a stop reply from which we can also try
4284    extracting the thread.  If the target doesn't support the explicit
4285    qC query, we infer the current thread from that stop reply, passed
4286    in in WAIT_STATUS, which may be NULL.  */
4287
4288 void
4289 remote_target::add_current_inferior_and_thread (char *wait_status)
4290 {
4291   struct remote_state *rs = get_remote_state ();
4292   int fake_pid_p = 0;
4293
4294   inferior_ptid = null_ptid;
4295
4296   /* Now, if we have thread information, update inferior_ptid.  */
4297   ptid_t curr_ptid = get_current_thread (wait_status);
4298
4299   if (curr_ptid != null_ptid)
4300     {
4301       if (!remote_multi_process_p (rs))
4302         fake_pid_p = 1;
4303     }
4304   else
4305     {
4306       /* Without this, some commands which require an active target
4307          (such as kill) won't work.  This variable serves (at least)
4308          double duty as both the pid of the target process (if it has
4309          such), and as a flag indicating that a target is active.  */
4310       curr_ptid = magic_null_ptid;
4311       fake_pid_p = 1;
4312     }
4313
4314   remote_add_inferior (fake_pid_p, ptid_get_pid (curr_ptid), -1, 1);
4315
4316   /* Add the main thread and switch to it.  Don't try reading
4317      registers yet, since we haven't fetched the target description
4318      yet.  */
4319   thread_info *tp = add_thread_silent (curr_ptid);
4320   switch_to_thread_no_regs (tp);
4321 }
4322
4323 /* Print info about a thread that was found already stopped on
4324    connection.  */
4325
4326 static void
4327 print_one_stopped_thread (struct thread_info *thread)
4328 {
4329   struct target_waitstatus *ws = &thread->suspend.waitstatus;
4330
4331   switch_to_thread (thread->ptid);
4332   stop_pc = get_frame_pc (get_current_frame ());
4333   set_current_sal_from_frame (get_current_frame ());
4334
4335   thread->suspend.waitstatus_pending_p = 0;
4336
4337   if (ws->kind == TARGET_WAITKIND_STOPPED)
4338     {
4339       enum gdb_signal sig = ws->value.sig;
4340
4341       if (signal_print_state (sig))
4342         gdb::observers::signal_received.notify (sig);
4343     }
4344   gdb::observers::normal_stop.notify (NULL, 1);
4345 }
4346
4347 /* Process all initial stop replies the remote side sent in response
4348    to the ? packet.  These indicate threads that were already stopped
4349    on initial connection.  We mark these threads as stopped and print
4350    their current frame before giving the user the prompt.  */
4351
4352 void
4353 remote_target::process_initial_stop_replies (int from_tty)
4354 {
4355   int pending_stop_replies = stop_reply_queue_length ();
4356   struct inferior *inf;
4357   struct thread_info *thread;
4358   struct thread_info *selected = NULL;
4359   struct thread_info *lowest_stopped = NULL;
4360   struct thread_info *first = NULL;
4361
4362   /* Consume the initial pending events.  */
4363   while (pending_stop_replies-- > 0)
4364     {
4365       ptid_t waiton_ptid = minus_one_ptid;
4366       ptid_t event_ptid;
4367       struct target_waitstatus ws;
4368       int ignore_event = 0;
4369       struct thread_info *thread;
4370
4371       memset (&ws, 0, sizeof (ws));
4372       event_ptid = target_wait (waiton_ptid, &ws, TARGET_WNOHANG);
4373       if (remote_debug)
4374         print_target_wait_results (waiton_ptid, event_ptid, &ws);
4375
4376       switch (ws.kind)
4377         {
4378         case TARGET_WAITKIND_IGNORE:
4379         case TARGET_WAITKIND_NO_RESUMED:
4380         case TARGET_WAITKIND_SIGNALLED:
4381         case TARGET_WAITKIND_EXITED:
4382           /* We shouldn't see these, but if we do, just ignore.  */
4383           if (remote_debug)
4384             fprintf_unfiltered (gdb_stdlog, "remote: event ignored\n");
4385           ignore_event = 1;
4386           break;
4387
4388         case TARGET_WAITKIND_EXECD:
4389           xfree (ws.value.execd_pathname);
4390           break;
4391         default:
4392           break;
4393         }
4394
4395       if (ignore_event)
4396         continue;
4397
4398       thread = find_thread_ptid (event_ptid);
4399
4400       if (ws.kind == TARGET_WAITKIND_STOPPED)
4401         {
4402           enum gdb_signal sig = ws.value.sig;
4403
4404           /* Stubs traditionally report SIGTRAP as initial signal,
4405              instead of signal 0.  Suppress it.  */
4406           if (sig == GDB_SIGNAL_TRAP)
4407             sig = GDB_SIGNAL_0;
4408           thread->suspend.stop_signal = sig;
4409           ws.value.sig = sig;
4410         }
4411
4412       thread->suspend.waitstatus = ws;
4413
4414       if (ws.kind != TARGET_WAITKIND_STOPPED
4415           || ws.value.sig != GDB_SIGNAL_0)
4416         thread->suspend.waitstatus_pending_p = 1;
4417
4418       set_executing (event_ptid, 0);
4419       set_running (event_ptid, 0);
4420       get_remote_thread_info (thread)->vcont_resumed = 0;
4421     }
4422
4423   /* "Notice" the new inferiors before anything related to
4424      registers/memory.  */
4425   ALL_INFERIORS (inf)
4426     {
4427       if (inf->pid == 0)
4428         continue;
4429
4430       inf->needs_setup = 1;
4431
4432       if (non_stop)
4433         {
4434           thread = any_live_thread_of_process (inf->pid);
4435           notice_new_inferior (thread->ptid,
4436                                thread->state == THREAD_RUNNING,
4437                                from_tty);
4438         }
4439     }
4440
4441   /* If all-stop on top of non-stop, pause all threads.  Note this
4442      records the threads' stop pc, so must be done after "noticing"
4443      the inferiors.  */
4444   if (!non_stop)
4445     {
4446       stop_all_threads ();
4447
4448       /* If all threads of an inferior were already stopped, we
4449          haven't setup the inferior yet.  */
4450       ALL_INFERIORS (inf)
4451         {
4452           if (inf->pid == 0)
4453             continue;
4454
4455           if (inf->needs_setup)
4456             {
4457               thread = any_live_thread_of_process (inf->pid);
4458               switch_to_thread_no_regs (thread);
4459               setup_inferior (0);
4460             }
4461         }
4462     }
4463
4464   /* Now go over all threads that are stopped, and print their current
4465      frame.  If all-stop, then if there's a signalled thread, pick
4466      that as current.  */
4467   ALL_NON_EXITED_THREADS (thread)
4468     {
4469       if (first == NULL)
4470         first = thread;
4471
4472       if (!non_stop)
4473         set_running (thread->ptid, 0);
4474       else if (thread->state != THREAD_STOPPED)
4475         continue;
4476
4477       if (selected == NULL
4478           && thread->suspend.waitstatus_pending_p)
4479         selected = thread;
4480
4481       if (lowest_stopped == NULL
4482           || thread->inf->num < lowest_stopped->inf->num
4483           || thread->per_inf_num < lowest_stopped->per_inf_num)
4484         lowest_stopped = thread;
4485
4486       if (non_stop)
4487         print_one_stopped_thread (thread);
4488     }
4489
4490   /* In all-stop, we only print the status of one thread, and leave
4491      others with their status pending.  */
4492   if (!non_stop)
4493     {
4494       thread = selected;
4495       if (thread == NULL)
4496         thread = lowest_stopped;
4497       if (thread == NULL)
4498         thread = first;
4499
4500       print_one_stopped_thread (thread);
4501     }
4502
4503   /* For "info program".  */
4504   thread = inferior_thread ();
4505   if (thread->state == THREAD_STOPPED)
4506     set_last_target_status (inferior_ptid, thread->suspend.waitstatus);
4507 }
4508
4509 /* Start the remote connection and sync state.  */
4510
4511 void
4512 remote_target::start_remote (int from_tty, int extended_p)
4513 {
4514   struct remote_state *rs = get_remote_state ();
4515   struct packet_config *noack_config;
4516   char *wait_status = NULL;
4517
4518   /* Signal other parts that we're going through the initial setup,
4519      and so things may not be stable yet.  E.g., we don't try to
4520      install tracepoints until we've relocated symbols.  Also, a
4521      Ctrl-C before we're connected and synced up can't interrupt the
4522      target.  Instead, it offers to drop the (potentially wedged)
4523      connection.  */
4524   rs->starting_up = 1;
4525
4526   QUIT;
4527
4528   if (interrupt_on_connect)
4529     send_interrupt_sequence ();
4530
4531   /* Ack any packet which the remote side has already sent.  */
4532   remote_serial_write ("+", 1);
4533
4534   /* The first packet we send to the target is the optional "supported
4535      packets" request.  If the target can answer this, it will tell us
4536      which later probes to skip.  */
4537   remote_query_supported ();
4538
4539   /* If the stub wants to get a QAllow, compose one and send it.  */
4540   if (packet_support (PACKET_QAllow) != PACKET_DISABLE)
4541     set_permissions ();
4542
4543   /* gdbserver < 7.7 (before its fix from 2013-12-11) did reply to any
4544      unknown 'v' packet with string "OK".  "OK" gets interpreted by GDB
4545      as a reply to known packet.  For packet "vFile:setfs:" it is an
4546      invalid reply and GDB would return error in
4547      remote_hostio_set_filesystem, making remote files access impossible.
4548      Disable "vFile:setfs:" in such case.  Do not disable other 'v' packets as
4549      other "vFile" packets get correctly detected even on gdbserver < 7.7.  */
4550   {
4551     const char v_mustreplyempty[] = "vMustReplyEmpty";
4552
4553     putpkt (v_mustreplyempty);
4554     getpkt (&rs->buf, &rs->buf_size, 0);
4555     if (strcmp (rs->buf, "OK") == 0)
4556       remote_protocol_packets[PACKET_vFile_setfs].support = PACKET_DISABLE;
4557     else if (strcmp (rs->buf, "") != 0)
4558       error (_("Remote replied unexpectedly to '%s': %s"), v_mustreplyempty,
4559              rs->buf);
4560   }
4561
4562   /* Next, we possibly activate noack mode.
4563
4564      If the QStartNoAckMode packet configuration is set to AUTO,
4565      enable noack mode if the stub reported a wish for it with
4566      qSupported.
4567
4568      If set to TRUE, then enable noack mode even if the stub didn't
4569      report it in qSupported.  If the stub doesn't reply OK, the
4570      session ends with an error.
4571
4572      If FALSE, then don't activate noack mode, regardless of what the
4573      stub claimed should be the default with qSupported.  */
4574
4575   noack_config = &remote_protocol_packets[PACKET_QStartNoAckMode];
4576   if (packet_config_support (noack_config) != PACKET_DISABLE)
4577     {
4578       putpkt ("QStartNoAckMode");
4579       getpkt (&rs->buf, &rs->buf_size, 0);
4580       if (packet_ok (rs->buf, noack_config) == PACKET_OK)
4581         rs->noack_mode = 1;
4582     }
4583
4584   if (extended_p)
4585     {
4586       /* Tell the remote that we are using the extended protocol.  */
4587       putpkt ("!");
4588       getpkt (&rs->buf, &rs->buf_size, 0);
4589     }
4590
4591   /* Let the target know which signals it is allowed to pass down to
4592      the program.  */
4593   update_signals_program_target ();
4594
4595   /* Next, if the target can specify a description, read it.  We do
4596      this before anything involving memory or registers.  */
4597   target_find_description ();
4598
4599   /* Next, now that we know something about the target, update the
4600      address spaces in the program spaces.  */
4601   update_address_spaces ();
4602
4603   /* On OSs where the list of libraries is global to all
4604      processes, we fetch them early.  */
4605   if (gdbarch_has_global_solist (target_gdbarch ()))
4606     solib_add (NULL, from_tty, auto_solib_add);
4607
4608   if (target_is_non_stop_p ())
4609     {
4610       if (packet_support (PACKET_QNonStop) != PACKET_ENABLE)
4611         error (_("Non-stop mode requested, but remote "
4612                  "does not support non-stop"));
4613
4614       putpkt ("QNonStop:1");
4615       getpkt (&rs->buf, &rs->buf_size, 0);
4616
4617       if (strcmp (rs->buf, "OK") != 0)
4618         error (_("Remote refused setting non-stop mode with: %s"), rs->buf);
4619
4620       /* Find about threads and processes the stub is already
4621          controlling.  We default to adding them in the running state.
4622          The '?' query below will then tell us about which threads are
4623          stopped.  */
4624       this->update_thread_list ();
4625     }
4626   else if (packet_support (PACKET_QNonStop) == PACKET_ENABLE)
4627     {
4628       /* Don't assume that the stub can operate in all-stop mode.
4629          Request it explicitly.  */
4630       putpkt ("QNonStop:0");
4631       getpkt (&rs->buf, &rs->buf_size, 0);
4632
4633       if (strcmp (rs->buf, "OK") != 0)
4634         error (_("Remote refused setting all-stop mode with: %s"), rs->buf);
4635     }
4636
4637   /* Upload TSVs regardless of whether the target is running or not.  The
4638      remote stub, such as GDBserver, may have some predefined or builtin
4639      TSVs, even if the target is not running.  */
4640   if (get_trace_status (current_trace_status ()) != -1)
4641     {
4642       struct uploaded_tsv *uploaded_tsvs = NULL;
4643
4644       upload_trace_state_variables (&uploaded_tsvs);
4645       merge_uploaded_trace_state_variables (&uploaded_tsvs);
4646     }
4647
4648   /* Check whether the target is running now.  */
4649   putpkt ("?");
4650   getpkt (&rs->buf, &rs->buf_size, 0);
4651
4652   if (!target_is_non_stop_p ())
4653     {
4654       if (rs->buf[0] == 'W' || rs->buf[0] == 'X')
4655         {
4656           if (!extended_p)
4657             error (_("The target is not running (try extended-remote?)"));
4658
4659           /* We're connected, but not running.  Drop out before we
4660              call start_remote.  */
4661           rs->starting_up = 0;
4662           return;
4663         }
4664       else
4665         {
4666           /* Save the reply for later.  */
4667           wait_status = (char *) alloca (strlen (rs->buf) + 1);
4668           strcpy (wait_status, rs->buf);
4669         }
4670
4671       /* Fetch thread list.  */
4672       target_update_thread_list ();
4673
4674       /* Let the stub know that we want it to return the thread.  */
4675       set_continue_thread (minus_one_ptid);
4676
4677       if (thread_count () == 0)
4678         {
4679           /* Target has no concept of threads at all.  GDB treats
4680              non-threaded target as single-threaded; add a main
4681              thread.  */
4682           add_current_inferior_and_thread (wait_status);
4683         }
4684       else
4685         {
4686           /* We have thread information; select the thread the target
4687              says should be current.  If we're reconnecting to a
4688              multi-threaded program, this will ideally be the thread
4689              that last reported an event before GDB disconnected.  */
4690           inferior_ptid = get_current_thread (wait_status);
4691           if (ptid_equal (inferior_ptid, null_ptid))
4692             {
4693               /* Odd... The target was able to list threads, but not
4694                  tell us which thread was current (no "thread"
4695                  register in T stop reply?).  Just pick the first
4696                  thread in the thread list then.  */
4697               
4698               if (remote_debug)
4699                 fprintf_unfiltered (gdb_stdlog,
4700                                     "warning: couldn't determine remote "
4701                                     "current thread; picking first in list.\n");
4702
4703               inferior_ptid = thread_list->ptid;
4704             }
4705         }
4706
4707       /* init_wait_for_inferior should be called before get_offsets in order
4708          to manage `inserted' flag in bp loc in a correct state.
4709          breakpoint_init_inferior, called from init_wait_for_inferior, set
4710          `inserted' flag to 0, while before breakpoint_re_set, called from
4711          start_remote, set `inserted' flag to 1.  In the initialization of
4712          inferior, breakpoint_init_inferior should be called first, and then
4713          breakpoint_re_set can be called.  If this order is broken, state of
4714          `inserted' flag is wrong, and cause some problems on breakpoint
4715          manipulation.  */
4716       init_wait_for_inferior ();
4717
4718       get_offsets ();           /* Get text, data & bss offsets.  */
4719
4720       /* If we could not find a description using qXfer, and we know
4721          how to do it some other way, try again.  This is not
4722          supported for non-stop; it could be, but it is tricky if
4723          there are no stopped threads when we connect.  */
4724       if (remote_read_description_p (this)
4725           && gdbarch_target_desc (target_gdbarch ()) == NULL)
4726         {
4727           target_clear_description ();
4728           target_find_description ();
4729         }
4730
4731       /* Use the previously fetched status.  */
4732       gdb_assert (wait_status != NULL);
4733       strcpy (rs->buf, wait_status);
4734       rs->cached_wait_status = 1;
4735
4736       ::start_remote (from_tty); /* Initialize gdb process mechanisms.  */
4737     }
4738   else
4739     {
4740       /* Clear WFI global state.  Do this before finding about new
4741          threads and inferiors, and setting the current inferior.
4742          Otherwise we would clear the proceed status of the current
4743          inferior when we want its stop_soon state to be preserved
4744          (see notice_new_inferior).  */
4745       init_wait_for_inferior ();
4746
4747       /* In non-stop, we will either get an "OK", meaning that there
4748          are no stopped threads at this time; or, a regular stop
4749          reply.  In the latter case, there may be more than one thread
4750          stopped --- we pull them all out using the vStopped
4751          mechanism.  */
4752       if (strcmp (rs->buf, "OK") != 0)
4753         {
4754           struct notif_client *notif = &notif_client_stop;
4755
4756           /* remote_notif_get_pending_replies acks this one, and gets
4757              the rest out.  */
4758           rs->notif_state->pending_event[notif_client_stop.id]
4759             = remote_notif_parse (this, notif, rs->buf);
4760           remote_notif_get_pending_events (notif);
4761         }
4762
4763       if (thread_count () == 0)
4764         {
4765           if (!extended_p)
4766             error (_("The target is not running (try extended-remote?)"));
4767
4768           /* We're connected, but not running.  Drop out before we
4769              call start_remote.  */
4770           rs->starting_up = 0;
4771           return;
4772         }
4773
4774       /* In non-stop mode, any cached wait status will be stored in
4775          the stop reply queue.  */
4776       gdb_assert (wait_status == NULL);
4777
4778       /* Report all signals during attach/startup.  */
4779       pass_signals (0, NULL);
4780
4781       /* If there are already stopped threads, mark them stopped and
4782          report their stops before giving the prompt to the user.  */
4783       process_initial_stop_replies (from_tty);
4784
4785       if (target_can_async_p ())
4786         target_async (1);
4787     }
4788
4789   /* If we connected to a live target, do some additional setup.  */
4790   if (target_has_execution)
4791     {
4792       if (symfile_objfile)      /* No use without a symbol-file.  */
4793         remote_check_symbols ();
4794     }
4795
4796   /* Possibly the target has been engaged in a trace run started
4797      previously; find out where things are at.  */
4798   if (get_trace_status (current_trace_status ()) != -1)
4799     {
4800       struct uploaded_tp *uploaded_tps = NULL;
4801
4802       if (current_trace_status ()->running)
4803         printf_filtered (_("Trace is already running on the target.\n"));
4804
4805       upload_tracepoints (&uploaded_tps);
4806
4807       merge_uploaded_tracepoints (&uploaded_tps);
4808     }
4809
4810   /* Possibly the target has been engaged in a btrace record started
4811      previously; find out where things are at.  */
4812   remote_btrace_maybe_reopen ();
4813
4814   /* The thread and inferior lists are now synchronized with the
4815      target, our symbols have been relocated, and we're merged the
4816      target's tracepoints with ours.  We're done with basic start
4817      up.  */
4818   rs->starting_up = 0;
4819
4820   /* Maybe breakpoints are global and need to be inserted now.  */
4821   if (breakpoints_should_be_inserted_now ())
4822     insert_breakpoints ();
4823 }
4824
4825 /* Open a connection to a remote debugger.
4826    NAME is the filename used for communication.  */
4827
4828 void
4829 remote_target::open (const char *name, int from_tty)
4830 {
4831   open_1 (name, from_tty, 0);
4832 }
4833
4834 /* Open a connection to a remote debugger using the extended
4835    remote gdb protocol.  NAME is the filename used for communication.  */
4836
4837 void
4838 extended_remote_target::open (const char *name, int from_tty)
4839 {
4840   open_1 (name, from_tty, 1 /*extended_p */);
4841 }
4842
4843 /* Reset all packets back to "unknown support".  Called when opening a
4844    new connection to a remote target.  */
4845
4846 static void
4847 reset_all_packet_configs_support (void)
4848 {
4849   int i;
4850
4851   for (i = 0; i < PACKET_MAX; i++)
4852     remote_protocol_packets[i].support = PACKET_SUPPORT_UNKNOWN;
4853 }
4854
4855 /* Initialize all packet configs.  */
4856
4857 static void
4858 init_all_packet_configs (void)
4859 {
4860   int i;
4861
4862   for (i = 0; i < PACKET_MAX; i++)
4863     {
4864       remote_protocol_packets[i].detect = AUTO_BOOLEAN_AUTO;
4865       remote_protocol_packets[i].support = PACKET_SUPPORT_UNKNOWN;
4866     }
4867 }
4868
4869 /* Symbol look-up.  */
4870
4871 void
4872 remote_target::remote_check_symbols ()
4873 {
4874   char *msg, *reply, *tmp;
4875   int end;
4876   long reply_size;
4877   struct cleanup *old_chain;
4878
4879   /* The remote side has no concept of inferiors that aren't running
4880      yet, it only knows about running processes.  If we're connected
4881      but our current inferior is not running, we should not invite the
4882      remote target to request symbol lookups related to its
4883      (unrelated) current process.  */
4884   if (!target_has_execution)
4885     return;
4886
4887   if (packet_support (PACKET_qSymbol) == PACKET_DISABLE)
4888     return;
4889
4890   /* Make sure the remote is pointing at the right process.  Note
4891      there's no way to select "no process".  */
4892   set_general_process ();
4893
4894   /* Allocate a message buffer.  We can't reuse the input buffer in RS,
4895      because we need both at the same time.  */
4896   msg = (char *) xmalloc (get_remote_packet_size ());
4897   old_chain = make_cleanup (xfree, msg);
4898   reply = (char *) xmalloc (get_remote_packet_size ());
4899   make_cleanup (free_current_contents, &reply);
4900   reply_size = get_remote_packet_size ();
4901
4902   /* Invite target to request symbol lookups.  */
4903
4904   putpkt ("qSymbol::");
4905   getpkt (&reply, &reply_size, 0);
4906   packet_ok (reply, &remote_protocol_packets[PACKET_qSymbol]);
4907
4908   while (startswith (reply, "qSymbol:"))
4909     {
4910       struct bound_minimal_symbol sym;
4911
4912       tmp = &reply[8];
4913       end = hex2bin (tmp, (gdb_byte *) msg, strlen (tmp) / 2);
4914       msg[end] = '\0';
4915       sym = lookup_minimal_symbol (msg, NULL, NULL);
4916       if (sym.minsym == NULL)
4917         xsnprintf (msg, get_remote_packet_size (), "qSymbol::%s", &reply[8]);
4918       else
4919         {
4920           int addr_size = gdbarch_addr_bit (target_gdbarch ()) / 8;
4921           CORE_ADDR sym_addr = BMSYMBOL_VALUE_ADDRESS (sym);
4922
4923           /* If this is a function address, return the start of code
4924              instead of any data function descriptor.  */
4925           sym_addr = gdbarch_convert_from_func_ptr_addr (target_gdbarch (),
4926                                                          sym_addr,
4927                                                          target_stack);
4928
4929           xsnprintf (msg, get_remote_packet_size (), "qSymbol:%s:%s",
4930                      phex_nz (sym_addr, addr_size), &reply[8]);
4931         }
4932   
4933       putpkt (msg);
4934       getpkt (&reply, &reply_size, 0);
4935     }
4936
4937   do_cleanups (old_chain);
4938 }
4939
4940 static struct serial *
4941 remote_serial_open (const char *name)
4942 {
4943   static int udp_warning = 0;
4944
4945   /* FIXME: Parsing NAME here is a hack.  But we want to warn here instead
4946      of in ser-tcp.c, because it is the remote protocol assuming that the
4947      serial connection is reliable and not the serial connection promising
4948      to be.  */
4949   if (!udp_warning && startswith (name, "udp:"))
4950     {
4951       warning (_("The remote protocol may be unreliable over UDP.\n"
4952                  "Some events may be lost, rendering further debugging "
4953                  "impossible."));
4954       udp_warning = 1;
4955     }
4956
4957   return serial_open (name);
4958 }
4959
4960 /* Inform the target of our permission settings.  The permission flags
4961    work without this, but if the target knows the settings, it can do
4962    a couple things.  First, it can add its own check, to catch cases
4963    that somehow manage to get by the permissions checks in target
4964    methods.  Second, if the target is wired to disallow particular
4965    settings (for instance, a system in the field that is not set up to
4966    be able to stop at a breakpoint), it can object to any unavailable
4967    permissions.  */
4968
4969 void
4970 remote_target::set_permissions ()
4971 {
4972   struct remote_state *rs = get_remote_state ();
4973
4974   xsnprintf (rs->buf, get_remote_packet_size (), "QAllow:"
4975              "WriteReg:%x;WriteMem:%x;"
4976              "InsertBreak:%x;InsertTrace:%x;"
4977              "InsertFastTrace:%x;Stop:%x",
4978              may_write_registers, may_write_memory,
4979              may_insert_breakpoints, may_insert_tracepoints,
4980              may_insert_fast_tracepoints, may_stop);
4981   putpkt (rs->buf);
4982   getpkt (&rs->buf, &rs->buf_size, 0);
4983
4984   /* If the target didn't like the packet, warn the user.  Do not try
4985      to undo the user's settings, that would just be maddening.  */
4986   if (strcmp (rs->buf, "OK") != 0)
4987     warning (_("Remote refused setting permissions with: %s"), rs->buf);
4988 }
4989
4990 /* This type describes each known response to the qSupported
4991    packet.  */
4992 struct protocol_feature
4993 {
4994   /* The name of this protocol feature.  */
4995   const char *name;
4996
4997   /* The default for this protocol feature.  */
4998   enum packet_support default_support;
4999
5000   /* The function to call when this feature is reported, or after
5001      qSupported processing if the feature is not supported.
5002      The first argument points to this structure.  The second
5003      argument indicates whether the packet requested support be
5004      enabled, disabled, or probed (or the default, if this function
5005      is being called at the end of processing and this feature was
5006      not reported).  The third argument may be NULL; if not NULL, it
5007      is a NUL-terminated string taken from the packet following
5008      this feature's name and an equals sign.  */
5009   void (*func) (remote_target *remote, const struct protocol_feature *,
5010                 enum packet_support, const char *);
5011
5012   /* The corresponding packet for this feature.  Only used if
5013      FUNC is remote_supported_packet.  */
5014   int packet;
5015 };
5016
5017 static void
5018 remote_supported_packet (remote_target *remote,
5019                          const struct protocol_feature *feature,
5020                          enum packet_support support,
5021                          const char *argument)
5022 {
5023   if (argument)
5024     {
5025       warning (_("Remote qSupported response supplied an unexpected value for"
5026                  " \"%s\"."), feature->name);
5027       return;
5028     }
5029
5030   remote_protocol_packets[feature->packet].support = support;
5031 }
5032
5033 void
5034 remote_target::remote_packet_size (const protocol_feature *feature,
5035                                    enum packet_support support, const char *value)
5036 {
5037   struct remote_state *rs = get_remote_state ();
5038
5039   int packet_size;
5040   char *value_end;
5041
5042   if (support != PACKET_ENABLE)
5043     return;
5044
5045   if (value == NULL || *value == '\0')
5046     {
5047       warning (_("Remote target reported \"%s\" without a size."),
5048                feature->name);
5049       return;
5050     }
5051
5052   errno = 0;
5053   packet_size = strtol (value, &value_end, 16);
5054   if (errno != 0 || *value_end != '\0' || packet_size < 0)
5055     {
5056       warning (_("Remote target reported \"%s\" with a bad size: \"%s\"."),
5057                feature->name, value);
5058       return;
5059     }
5060
5061   /* Record the new maximum packet size.  */
5062   rs->explicit_packet_size = packet_size;
5063 }
5064
5065 void
5066 remote_packet_size (remote_target *remote, const protocol_feature *feature,
5067                     enum packet_support support, const char *value)
5068 {
5069   remote->remote_packet_size (feature, support, value);
5070 }
5071
5072 static const struct protocol_feature remote_protocol_features[] = {
5073   { "PacketSize", PACKET_DISABLE, remote_packet_size, -1 },
5074   { "qXfer:auxv:read", PACKET_DISABLE, remote_supported_packet,
5075     PACKET_qXfer_auxv },
5076   { "qXfer:exec-file:read", PACKET_DISABLE, remote_supported_packet,
5077     PACKET_qXfer_exec_file },
5078   { "qXfer:features:read", PACKET_DISABLE, remote_supported_packet,
5079     PACKET_qXfer_features },
5080   { "qXfer:libraries:read", PACKET_DISABLE, remote_supported_packet,
5081     PACKET_qXfer_libraries },
5082   { "qXfer:libraries-svr4:read", PACKET_DISABLE, remote_supported_packet,
5083     PACKET_qXfer_libraries_svr4 },
5084   { "augmented-libraries-svr4-read", PACKET_DISABLE,
5085     remote_supported_packet, PACKET_augmented_libraries_svr4_read_feature },
5086   { "qXfer:memory-map:read", PACKET_DISABLE, remote_supported_packet,
5087     PACKET_qXfer_memory_map },
5088   { "qXfer:spu:read", PACKET_DISABLE, remote_supported_packet,
5089     PACKET_qXfer_spu_read },
5090   { "qXfer:spu:write", PACKET_DISABLE, remote_supported_packet,
5091     PACKET_qXfer_spu_write },
5092   { "qXfer:osdata:read", PACKET_DISABLE, remote_supported_packet,
5093     PACKET_qXfer_osdata },
5094   { "qXfer:threads:read", PACKET_DISABLE, remote_supported_packet,
5095     PACKET_qXfer_threads },
5096   { "qXfer:traceframe-info:read", PACKET_DISABLE, remote_supported_packet,
5097     PACKET_qXfer_traceframe_info },
5098   { "QPassSignals", PACKET_DISABLE, remote_supported_packet,
5099     PACKET_QPassSignals },
5100   { "QCatchSyscalls", PACKET_DISABLE, remote_supported_packet,
5101     PACKET_QCatchSyscalls },
5102   { "QProgramSignals", PACKET_DISABLE, remote_supported_packet,
5103     PACKET_QProgramSignals },
5104   { "QSetWorkingDir", PACKET_DISABLE, remote_supported_packet,
5105     PACKET_QSetWorkingDir },
5106   { "QStartupWithShell", PACKET_DISABLE, remote_supported_packet,
5107     PACKET_QStartupWithShell },
5108   { "QEnvironmentHexEncoded", PACKET_DISABLE, remote_supported_packet,
5109     PACKET_QEnvironmentHexEncoded },
5110   { "QEnvironmentReset", PACKET_DISABLE, remote_supported_packet,
5111     PACKET_QEnvironmentReset },
5112   { "QEnvironmentUnset", PACKET_DISABLE, remote_supported_packet,
5113     PACKET_QEnvironmentUnset },
5114   { "QStartNoAckMode", PACKET_DISABLE, remote_supported_packet,
5115     PACKET_QStartNoAckMode },
5116   { "multiprocess", PACKET_DISABLE, remote_supported_packet,
5117     PACKET_multiprocess_feature },
5118   { "QNonStop", PACKET_DISABLE, remote_supported_packet, PACKET_QNonStop },
5119   { "qXfer:siginfo:read", PACKET_DISABLE, remote_supported_packet,
5120     PACKET_qXfer_siginfo_read },
5121   { "qXfer:siginfo:write", PACKET_DISABLE, remote_supported_packet,
5122     PACKET_qXfer_siginfo_write },
5123   { "ConditionalTracepoints", PACKET_DISABLE, remote_supported_packet,
5124     PACKET_ConditionalTracepoints },
5125   { "ConditionalBreakpoints", PACKET_DISABLE, remote_supported_packet,
5126     PACKET_ConditionalBreakpoints },
5127   { "BreakpointCommands", PACKET_DISABLE, remote_supported_packet,
5128     PACKET_BreakpointCommands },
5129   { "FastTracepoints", PACKET_DISABLE, remote_supported_packet,
5130     PACKET_FastTracepoints },
5131   { "StaticTracepoints", PACKET_DISABLE, remote_supported_packet,
5132     PACKET_StaticTracepoints },
5133   {"InstallInTrace", PACKET_DISABLE, remote_supported_packet,
5134    PACKET_InstallInTrace},
5135   { "DisconnectedTracing", PACKET_DISABLE, remote_supported_packet,
5136     PACKET_DisconnectedTracing_feature },
5137   { "ReverseContinue", PACKET_DISABLE, remote_supported_packet,
5138     PACKET_bc },
5139   { "ReverseStep", PACKET_DISABLE, remote_supported_packet,
5140     PACKET_bs },
5141   { "TracepointSource", PACKET_DISABLE, remote_supported_packet,
5142     PACKET_TracepointSource },
5143   { "QAllow", PACKET_DISABLE, remote_supported_packet,
5144     PACKET_QAllow },
5145   { "EnableDisableTracepoints", PACKET_DISABLE, remote_supported_packet,
5146     PACKET_EnableDisableTracepoints_feature },
5147   { "qXfer:fdpic:read", PACKET_DISABLE, remote_supported_packet,
5148     PACKET_qXfer_fdpic },
5149   { "qXfer:uib:read", PACKET_DISABLE, remote_supported_packet,
5150     PACKET_qXfer_uib },
5151   { "QDisableRandomization", PACKET_DISABLE, remote_supported_packet,
5152     PACKET_QDisableRandomization },
5153   { "QAgent", PACKET_DISABLE, remote_supported_packet, PACKET_QAgent},
5154   { "QTBuffer:size", PACKET_DISABLE,
5155     remote_supported_packet, PACKET_QTBuffer_size},
5156   { "tracenz", PACKET_DISABLE, remote_supported_packet, PACKET_tracenz_feature },
5157   { "Qbtrace:off", PACKET_DISABLE, remote_supported_packet, PACKET_Qbtrace_off },
5158   { "Qbtrace:bts", PACKET_DISABLE, remote_supported_packet, PACKET_Qbtrace_bts },
5159   { "Qbtrace:pt", PACKET_DISABLE, remote_supported_packet, PACKET_Qbtrace_pt },
5160   { "qXfer:btrace:read", PACKET_DISABLE, remote_supported_packet,
5161     PACKET_qXfer_btrace },
5162   { "qXfer:btrace-conf:read", PACKET_DISABLE, remote_supported_packet,
5163     PACKET_qXfer_btrace_conf },
5164   { "Qbtrace-conf:bts:size", PACKET_DISABLE, remote_supported_packet,
5165     PACKET_Qbtrace_conf_bts_size },
5166   { "swbreak", PACKET_DISABLE, remote_supported_packet, PACKET_swbreak_feature },
5167   { "hwbreak", PACKET_DISABLE, remote_supported_packet, PACKET_hwbreak_feature },
5168   { "fork-events", PACKET_DISABLE, remote_supported_packet,
5169     PACKET_fork_event_feature },
5170   { "vfork-events", PACKET_DISABLE, remote_supported_packet,
5171     PACKET_vfork_event_feature },
5172   { "exec-events", PACKET_DISABLE, remote_supported_packet,
5173     PACKET_exec_event_feature },
5174   { "Qbtrace-conf:pt:size", PACKET_DISABLE, remote_supported_packet,
5175     PACKET_Qbtrace_conf_pt_size },
5176   { "vContSupported", PACKET_DISABLE, remote_supported_packet, PACKET_vContSupported },
5177   { "QThreadEvents", PACKET_DISABLE, remote_supported_packet, PACKET_QThreadEvents },
5178   { "no-resumed", PACKET_DISABLE, remote_supported_packet, PACKET_no_resumed },
5179 };
5180
5181 static char *remote_support_xml;
5182
5183 /* Register string appended to "xmlRegisters=" in qSupported query.  */
5184
5185 void
5186 register_remote_support_xml (const char *xml)
5187 {
5188 #if defined(HAVE_LIBEXPAT)
5189   if (remote_support_xml == NULL)
5190     remote_support_xml = concat ("xmlRegisters=", xml, (char *) NULL);
5191   else
5192     {
5193       char *copy = xstrdup (remote_support_xml + 13);
5194       char *p = strtok (copy, ",");
5195
5196       do
5197         {
5198           if (strcmp (p, xml) == 0)
5199             {
5200               /* already there */
5201               xfree (copy);
5202               return;
5203             }
5204         }
5205       while ((p = strtok (NULL, ",")) != NULL);
5206       xfree (copy);
5207
5208       remote_support_xml = reconcat (remote_support_xml,
5209                                      remote_support_xml, ",", xml,
5210                                      (char *) NULL);
5211     }
5212 #endif
5213 }
5214
5215 static void
5216 remote_query_supported_append (std::string *msg, const char *append)
5217 {
5218   if (!msg->empty ())
5219     msg->append (";");
5220   msg->append (append);
5221 }
5222
5223 void
5224 remote_target::remote_query_supported ()
5225 {
5226   struct remote_state *rs = get_remote_state ();
5227   char *next;
5228   int i;
5229   unsigned char seen [ARRAY_SIZE (remote_protocol_features)];
5230
5231   /* The packet support flags are handled differently for this packet
5232      than for most others.  We treat an error, a disabled packet, and
5233      an empty response identically: any features which must be reported
5234      to be used will be automatically disabled.  An empty buffer
5235      accomplishes this, since that is also the representation for a list
5236      containing no features.  */
5237
5238   rs->buf[0] = 0;
5239   if (packet_support (PACKET_qSupported) != PACKET_DISABLE)
5240     {
5241       std::string q;
5242
5243       if (packet_set_cmd_state (PACKET_multiprocess_feature) != AUTO_BOOLEAN_FALSE)
5244         remote_query_supported_append (&q, "multiprocess+");
5245
5246       if (packet_set_cmd_state (PACKET_swbreak_feature) != AUTO_BOOLEAN_FALSE)
5247         remote_query_supported_append (&q, "swbreak+");
5248       if (packet_set_cmd_state (PACKET_hwbreak_feature) != AUTO_BOOLEAN_FALSE)
5249         remote_query_supported_append (&q, "hwbreak+");
5250
5251       remote_query_supported_append (&q, "qRelocInsn+");
5252
5253       if (packet_set_cmd_state (PACKET_fork_event_feature)
5254           != AUTO_BOOLEAN_FALSE)
5255         remote_query_supported_append (&q, "fork-events+");
5256       if (packet_set_cmd_state (PACKET_vfork_event_feature)
5257           != AUTO_BOOLEAN_FALSE)
5258         remote_query_supported_append (&q, "vfork-events+");
5259       if (packet_set_cmd_state (PACKET_exec_event_feature)
5260           != AUTO_BOOLEAN_FALSE)
5261         remote_query_supported_append (&q, "exec-events+");
5262
5263       if (packet_set_cmd_state (PACKET_vContSupported) != AUTO_BOOLEAN_FALSE)
5264         remote_query_supported_append (&q, "vContSupported+");
5265
5266       if (packet_set_cmd_state (PACKET_QThreadEvents) != AUTO_BOOLEAN_FALSE)
5267         remote_query_supported_append (&q, "QThreadEvents+");
5268
5269       if (packet_set_cmd_state (PACKET_no_resumed) != AUTO_BOOLEAN_FALSE)
5270         remote_query_supported_append (&q, "no-resumed+");
5271
5272       /* Keep this one last to work around a gdbserver <= 7.10 bug in
5273          the qSupported:xmlRegisters=i386 handling.  */
5274       if (remote_support_xml != NULL
5275           && packet_support (PACKET_qXfer_features) != PACKET_DISABLE)
5276         remote_query_supported_append (&q, remote_support_xml);
5277
5278       q = "qSupported:" + q;
5279       putpkt (q.c_str ());
5280
5281       getpkt (&rs->buf, &rs->buf_size, 0);
5282
5283       /* If an error occured, warn, but do not return - just reset the
5284          buffer to empty and go on to disable features.  */
5285       if (packet_ok (rs->buf, &remote_protocol_packets[PACKET_qSupported])
5286           == PACKET_ERROR)
5287         {
5288           warning (_("Remote failure reply: %s"), rs->buf);
5289           rs->buf[0] = 0;
5290         }
5291     }
5292
5293   memset (seen, 0, sizeof (seen));
5294
5295   next = rs->buf;
5296   while (*next)
5297     {
5298       enum packet_support is_supported;
5299       char *p, *end, *name_end, *value;
5300
5301       /* First separate out this item from the rest of the packet.  If
5302          there's another item after this, we overwrite the separator
5303          (terminated strings are much easier to work with).  */
5304       p = next;
5305       end = strchr (p, ';');
5306       if (end == NULL)
5307         {
5308           end = p + strlen (p);
5309           next = end;
5310         }
5311       else
5312         {
5313           *end = '\0';
5314           next = end + 1;
5315
5316           if (end == p)
5317             {
5318               warning (_("empty item in \"qSupported\" response"));
5319               continue;
5320             }
5321         }
5322
5323       name_end = strchr (p, '=');
5324       if (name_end)
5325         {
5326           /* This is a name=value entry.  */
5327           is_supported = PACKET_ENABLE;
5328           value = name_end + 1;
5329           *name_end = '\0';
5330         }
5331       else
5332         {
5333           value = NULL;
5334           switch (end[-1])
5335             {
5336             case '+':
5337               is_supported = PACKET_ENABLE;
5338               break;
5339
5340             case '-':
5341               is_supported = PACKET_DISABLE;
5342               break;
5343
5344             case '?':
5345               is_supported = PACKET_SUPPORT_UNKNOWN;
5346               break;
5347
5348             default:
5349               warning (_("unrecognized item \"%s\" "
5350                          "in \"qSupported\" response"), p);
5351               continue;
5352             }
5353           end[-1] = '\0';
5354         }
5355
5356       for (i = 0; i < ARRAY_SIZE (remote_protocol_features); i++)
5357         if (strcmp (remote_protocol_features[i].name, p) == 0)
5358           {
5359             const struct protocol_feature *feature;
5360
5361             seen[i] = 1;
5362             feature = &remote_protocol_features[i];
5363             feature->func (this, feature, is_supported, value);
5364             break;
5365           }
5366     }
5367
5368   /* If we increased the packet size, make sure to increase the global
5369      buffer size also.  We delay this until after parsing the entire
5370      qSupported packet, because this is the same buffer we were
5371      parsing.  */
5372   if (rs->buf_size < rs->explicit_packet_size)
5373     {
5374       rs->buf_size = rs->explicit_packet_size;
5375       rs->buf = (char *) xrealloc (rs->buf, rs->buf_size);
5376     }
5377
5378   /* Handle the defaults for unmentioned features.  */
5379   for (i = 0; i < ARRAY_SIZE (remote_protocol_features); i++)
5380     if (!seen[i])
5381       {
5382         const struct protocol_feature *feature;
5383
5384         feature = &remote_protocol_features[i];
5385         feature->func (this, feature, feature->default_support, NULL);
5386       }
5387 }
5388
5389 /* Serial QUIT handler for the remote serial descriptor.
5390
5391    Defers handling a Ctrl-C until we're done with the current
5392    command/response packet sequence, unless:
5393
5394    - We're setting up the connection.  Don't send a remote interrupt
5395      request, as we're not fully synced yet.  Quit immediately
5396      instead.
5397
5398    - The target has been resumed in the foreground
5399      (target_terminal::is_ours is false) with a synchronous resume
5400      packet, and we're blocked waiting for the stop reply, thus a
5401      Ctrl-C should be immediately sent to the target.
5402
5403    - We get a second Ctrl-C while still within the same serial read or
5404      write.  In that case the serial is seemingly wedged --- offer to
5405      quit/disconnect.
5406
5407    - We see a second Ctrl-C without target response, after having
5408      previously interrupted the target.  In that case the target/stub
5409      is probably wedged --- offer to quit/disconnect.
5410 */
5411
5412 void
5413 remote_target::remote_serial_quit_handler ()
5414 {
5415   struct remote_state *rs = get_remote_state ();
5416
5417   if (check_quit_flag ())
5418     {
5419       /* If we're starting up, we're not fully synced yet.  Quit
5420          immediately.  */
5421       if (rs->starting_up)
5422         quit ();
5423       else if (rs->got_ctrlc_during_io)
5424         {
5425           if (query (_("The target is not responding to GDB commands.\n"
5426                        "Stop debugging it? ")))
5427             remote_unpush_and_throw ();
5428         }
5429       /* If ^C has already been sent once, offer to disconnect.  */
5430       else if (!target_terminal::is_ours () && rs->ctrlc_pending_p)
5431         interrupt_query ();
5432       /* All-stop protocol, and blocked waiting for stop reply.  Send
5433          an interrupt request.  */
5434       else if (!target_terminal::is_ours () && rs->waiting_for_stop_reply)
5435         target_interrupt ();
5436       else
5437         rs->got_ctrlc_during_io = 1;
5438     }
5439 }
5440
5441 /* The remote_target that is current while the quit handler is
5442    overridden with remote_serial_quit_handler.  */
5443 static remote_target *curr_quit_handler_target;
5444
5445 static void
5446 remote_serial_quit_handler ()
5447 {
5448   curr_quit_handler_target->remote_serial_quit_handler ();
5449 }
5450
5451 /* Remove any of the remote.c targets from target stack.  Upper targets depend
5452    on it so remove them first.  */
5453
5454 static void
5455 remote_unpush_target (void)
5456 {
5457   pop_all_targets_at_and_above (process_stratum);
5458 }
5459
5460 static void
5461 remote_unpush_and_throw (void)
5462 {
5463   remote_unpush_target ();
5464   throw_error (TARGET_CLOSE_ERROR, _("Disconnected from target."));
5465 }
5466
5467 void
5468 remote_target::open_1 (const char *name, int from_tty, int extended_p)
5469 {
5470   remote_target *curr_remote = get_current_remote_target ();
5471
5472   if (name == 0)
5473     error (_("To open a remote debug connection, you need to specify what\n"
5474            "serial device is attached to the remote system\n"
5475            "(e.g. /dev/ttyS0, /dev/ttya, COM1, etc.)."));
5476
5477   /* If we're connected to a running target, target_preopen will kill it.
5478      Ask this question first, before target_preopen has a chance to kill
5479      anything.  */
5480   if (curr_remote != NULL && !have_inferiors ())
5481     {
5482       if (from_tty
5483           && !query (_("Already connected to a remote target.  Disconnect? ")))
5484         error (_("Still connected."));
5485     }
5486
5487   /* Here the possibly existing remote target gets unpushed.  */
5488   target_preopen (from_tty);
5489
5490   remote_fileio_reset ();
5491   reopen_exec_file ();
5492   reread_symbols ();
5493
5494   remote_target *remote
5495     = (extended_p ? new extended_remote_target () : new remote_target ());
5496   target_ops_up target_holder (remote);
5497
5498   remote_state *rs = remote->get_remote_state ();
5499
5500   /* See FIXME above.  */
5501   if (!target_async_permitted)
5502     rs->wait_forever_enabled_p = 1;
5503
5504   rs->remote_desc = remote_serial_open (name);
5505   if (!rs->remote_desc)
5506     perror_with_name (name);
5507
5508   if (baud_rate != -1)
5509     {
5510       if (serial_setbaudrate (rs->remote_desc, baud_rate))
5511         {
5512           /* The requested speed could not be set.  Error out to
5513              top level after closing remote_desc.  Take care to
5514              set remote_desc to NULL to avoid closing remote_desc
5515              more than once.  */
5516           serial_close (rs->remote_desc);
5517           rs->remote_desc = NULL;
5518           perror_with_name (name);
5519         }
5520     }
5521
5522   serial_setparity (rs->remote_desc, serial_parity);
5523   serial_raw (rs->remote_desc);
5524
5525   /* If there is something sitting in the buffer we might take it as a
5526      response to a command, which would be bad.  */
5527   serial_flush_input (rs->remote_desc);
5528
5529   if (from_tty)
5530     {
5531       puts_filtered ("Remote debugging using ");
5532       puts_filtered (name);
5533       puts_filtered ("\n");
5534     }
5535
5536   /* Switch to using the remote target now.  */
5537   push_target (remote);
5538   /* The target stack owns the target now.  */
5539   target_holder.release ();
5540
5541   /* Register extra event sources in the event loop.  */
5542   rs->remote_async_inferior_event_token
5543     = create_async_event_handler (remote_async_inferior_event_handler,
5544                                   remote);
5545   rs->notif_state = remote_notif_state_allocate (remote);
5546
5547   /* Reset the target state; these things will be queried either by
5548      remote_query_supported or as they are needed.  */
5549   reset_all_packet_configs_support ();
5550   rs->cached_wait_status = 0;
5551   rs->explicit_packet_size = 0;
5552   rs->noack_mode = 0;
5553   rs->extended = extended_p;
5554   rs->waiting_for_stop_reply = 0;
5555   rs->ctrlc_pending_p = 0;
5556   rs->got_ctrlc_during_io = 0;
5557
5558   rs->general_thread = not_sent_ptid;
5559   rs->continue_thread = not_sent_ptid;
5560   rs->remote_traceframe_number = -1;
5561
5562   rs->last_resume_exec_dir = EXEC_FORWARD;
5563
5564   /* Probe for ability to use "ThreadInfo" query, as required.  */
5565   rs->use_threadinfo_query = 1;
5566   rs->use_threadextra_query = 1;
5567
5568   rs->readahead_cache.invalidate ();
5569
5570   if (target_async_permitted)
5571     {
5572       /* FIXME: cagney/1999-09-23: During the initial connection it is
5573          assumed that the target is already ready and able to respond to
5574          requests.  Unfortunately remote_start_remote() eventually calls
5575          wait_for_inferior() with no timeout.  wait_forever_enabled_p gets
5576          around this.  Eventually a mechanism that allows
5577          wait_for_inferior() to expect/get timeouts will be
5578          implemented.  */
5579       rs->wait_forever_enabled_p = 0;
5580     }
5581
5582   /* First delete any symbols previously loaded from shared libraries.  */
5583   no_shared_libraries (NULL, 0);
5584
5585   /* Start afresh.  */
5586   init_thread_list ();
5587
5588   /* Start the remote connection.  If error() or QUIT, discard this
5589      target (we'd otherwise be in an inconsistent state) and then
5590      propogate the error on up the exception chain.  This ensures that
5591      the caller doesn't stumble along blindly assuming that the
5592      function succeeded.  The CLI doesn't have this problem but other
5593      UI's, such as MI do.
5594
5595      FIXME: cagney/2002-05-19: Instead of re-throwing the exception,
5596      this function should return an error indication letting the
5597      caller restore the previous state.  Unfortunately the command
5598      ``target remote'' is directly wired to this function making that
5599      impossible.  On a positive note, the CLI side of this problem has
5600      been fixed - the function set_cmd_context() makes it possible for
5601      all the ``target ....'' commands to share a common callback
5602      function.  See cli-dump.c.  */
5603   {
5604
5605     TRY
5606       {
5607         remote->start_remote (from_tty, extended_p);
5608       }
5609     CATCH (ex, RETURN_MASK_ALL)
5610       {
5611         /* Pop the partially set up target - unless something else did
5612            already before throwing the exception.  */
5613         if (ex.error != TARGET_CLOSE_ERROR)
5614           remote_unpush_target ();
5615         throw_exception (ex);
5616       }
5617     END_CATCH
5618   }
5619
5620   remote_btrace_reset (rs);
5621
5622   if (target_async_permitted)
5623     rs->wait_forever_enabled_p = 1;
5624 }
5625
5626 /* Detach the specified process.  */
5627
5628 void
5629 remote_target::remote_detach_pid (int pid)
5630 {
5631   struct remote_state *rs = get_remote_state ();
5632
5633   if (remote_multi_process_p (rs))
5634     xsnprintf (rs->buf, get_remote_packet_size (), "D;%x", pid);
5635   else
5636     strcpy (rs->buf, "D");
5637
5638   putpkt (rs->buf);
5639   getpkt (&rs->buf, &rs->buf_size, 0);
5640
5641   if (rs->buf[0] == 'O' && rs->buf[1] == 'K')
5642     ;
5643   else if (rs->buf[0] == '\0')
5644     error (_("Remote doesn't know how to detach"));
5645   else
5646     error (_("Can't detach process."));
5647 }
5648
5649 /* This detaches a program to which we previously attached, using
5650    inferior_ptid to identify the process.  After this is done, GDB
5651    can be used to debug some other program.  We better not have left
5652    any breakpoints in the target program or it'll die when it hits
5653    one.  */
5654
5655 void
5656 remote_target::remote_detach_1 (int from_tty, inferior *inf)
5657 {
5658   int pid = ptid_get_pid (inferior_ptid);
5659   struct remote_state *rs = get_remote_state ();
5660   struct thread_info *tp = find_thread_ptid (inferior_ptid);
5661   int is_fork_parent;
5662
5663   if (!target_has_execution)
5664     error (_("No process to detach from."));
5665
5666   target_announce_detach (from_tty);
5667
5668   /* Tell the remote target to detach.  */
5669   remote_detach_pid (pid);
5670
5671   /* Exit only if this is the only active inferior.  */
5672   if (from_tty && !rs->extended && number_of_live_inferiors () == 1)
5673     puts_filtered (_("Ending remote debugging.\n"));
5674
5675   /* Check to see if we are detaching a fork parent.  Note that if we
5676      are detaching a fork child, tp == NULL.  */
5677   is_fork_parent = (tp != NULL
5678                     && tp->pending_follow.kind == TARGET_WAITKIND_FORKED);
5679
5680   /* If doing detach-on-fork, we don't mourn, because that will delete
5681      breakpoints that should be available for the followed inferior.  */
5682   if (!is_fork_parent)
5683     {
5684       /* Save the pid as a string before mourning, since that will
5685          unpush the remote target, and we need the string after.  */
5686       std::string infpid = target_pid_to_str (pid_to_ptid (pid));
5687
5688       target_mourn_inferior (inferior_ptid);
5689       if (print_inferior_events)
5690         printf_unfiltered (_("[Inferior %d (%s) detached]\n"),
5691                            inf->num, infpid.c_str ());
5692     }
5693   else
5694     {
5695       inferior_ptid = null_ptid;
5696       detach_inferior (pid);
5697     }
5698 }
5699
5700 void
5701 remote_target::detach (inferior *inf, int from_tty)
5702 {
5703   remote_detach_1 (from_tty, inf);
5704 }
5705
5706 void
5707 extended_remote_target::detach (inferior *inf, int from_tty)
5708 {
5709   remote_detach_1 (from_tty, inf);
5710 }
5711
5712 /* Target follow-fork function for remote targets.  On entry, and
5713    at return, the current inferior is the fork parent.
5714
5715    Note that although this is currently only used for extended-remote,
5716    it is named remote_follow_fork in anticipation of using it for the
5717    remote target as well.  */
5718
5719 int
5720 remote_target::follow_fork (int follow_child, int detach_fork)
5721 {
5722   struct remote_state *rs = get_remote_state ();
5723   enum target_waitkind kind = inferior_thread ()->pending_follow.kind;
5724
5725   if ((kind == TARGET_WAITKIND_FORKED && remote_fork_event_p (rs))
5726       || (kind == TARGET_WAITKIND_VFORKED && remote_vfork_event_p (rs)))
5727     {
5728       /* When following the parent and detaching the child, we detach
5729          the child here.  For the case of following the child and
5730          detaching the parent, the detach is done in the target-
5731          independent follow fork code in infrun.c.  We can't use
5732          target_detach when detaching an unfollowed child because
5733          the client side doesn't know anything about the child.  */
5734       if (detach_fork && !follow_child)
5735         {
5736           /* Detach the fork child.  */
5737           ptid_t child_ptid;
5738           pid_t child_pid;
5739
5740           child_ptid = inferior_thread ()->pending_follow.value.related_pid;
5741           child_pid = ptid_get_pid (child_ptid);
5742
5743           remote_detach_pid (child_pid);
5744         }
5745     }
5746   return 0;
5747 }
5748
5749 /* Target follow-exec function for remote targets.  Save EXECD_PATHNAME
5750    in the program space of the new inferior.  On entry and at return the
5751    current inferior is the exec'ing inferior.  INF is the new exec'd
5752    inferior, which may be the same as the exec'ing inferior unless
5753    follow-exec-mode is "new".  */
5754
5755 void
5756 remote_target::follow_exec (struct inferior *inf, char *execd_pathname)
5757 {
5758   /* We know that this is a target file name, so if it has the "target:"
5759      prefix we strip it off before saving it in the program space.  */
5760   if (is_target_filename (execd_pathname))
5761     execd_pathname += strlen (TARGET_SYSROOT_PREFIX);
5762
5763   set_pspace_remote_exec_file (inf->pspace, execd_pathname);
5764 }
5765
5766 /* Same as remote_detach, but don't send the "D" packet; just disconnect.  */
5767
5768 void
5769 remote_target::disconnect (const char *args, int from_tty)
5770 {
5771   if (args)
5772     error (_("Argument given to \"disconnect\" when remotely debugging."));
5773
5774   /* Make sure we unpush even the extended remote targets.  Calling
5775      target_mourn_inferior won't unpush, and remote_mourn won't
5776      unpush if there is more than one inferior left.  */
5777   unpush_target (this);
5778   generic_mourn_inferior ();
5779
5780   if (from_tty)
5781     puts_filtered ("Ending remote debugging.\n");
5782 }
5783
5784 /* Attach to the process specified by ARGS.  If FROM_TTY is non-zero,
5785    be chatty about it.  */
5786
5787 void
5788 extended_remote_target::attach (const char *args, int from_tty)
5789 {
5790   struct remote_state *rs = get_remote_state ();
5791   int pid;
5792   char *wait_status = NULL;
5793
5794   pid = parse_pid_to_attach (args);
5795
5796   /* Remote PID can be freely equal to getpid, do not check it here the same
5797      way as in other targets.  */
5798
5799   if (packet_support (PACKET_vAttach) == PACKET_DISABLE)
5800     error (_("This target does not support attaching to a process"));
5801
5802   if (from_tty)
5803     {
5804       char *exec_file = get_exec_file (0);
5805
5806       if (exec_file)
5807         printf_unfiltered (_("Attaching to program: %s, %s\n"), exec_file,
5808                            target_pid_to_str (pid_to_ptid (pid)));
5809       else
5810         printf_unfiltered (_("Attaching to %s\n"),
5811                            target_pid_to_str (pid_to_ptid (pid)));
5812
5813       gdb_flush (gdb_stdout);
5814     }
5815
5816   xsnprintf (rs->buf, get_remote_packet_size (), "vAttach;%x", pid);
5817   putpkt (rs->buf);
5818   getpkt (&rs->buf, &rs->buf_size, 0);
5819
5820   switch (packet_ok (rs->buf,
5821                      &remote_protocol_packets[PACKET_vAttach]))
5822     {
5823     case PACKET_OK:
5824       if (!target_is_non_stop_p ())
5825         {
5826           /* Save the reply for later.  */
5827           wait_status = (char *) alloca (strlen (rs->buf) + 1);
5828           strcpy (wait_status, rs->buf);
5829         }
5830       else if (strcmp (rs->buf, "OK") != 0)
5831         error (_("Attaching to %s failed with: %s"),
5832                target_pid_to_str (pid_to_ptid (pid)),
5833                rs->buf);
5834       break;
5835     case PACKET_UNKNOWN:
5836       error (_("This target does not support attaching to a process"));
5837     default:
5838       error (_("Attaching to %s failed"),
5839              target_pid_to_str (pid_to_ptid (pid)));
5840     }
5841
5842   set_current_inferior (remote_add_inferior (0, pid, 1, 0));
5843
5844   inferior_ptid = pid_to_ptid (pid);
5845
5846   if (target_is_non_stop_p ())
5847     {
5848       struct thread_info *thread;
5849
5850       /* Get list of threads.  */
5851       update_thread_list ();
5852
5853       thread = first_thread_of_process (pid);
5854       if (thread)
5855         inferior_ptid = thread->ptid;
5856       else
5857         inferior_ptid = pid_to_ptid (pid);
5858
5859       /* Invalidate our notion of the remote current thread.  */
5860       record_currthread (rs, minus_one_ptid);
5861     }
5862   else
5863     {
5864       /* Now, if we have thread information, update inferior_ptid.  */
5865       inferior_ptid = remote_current_thread (inferior_ptid);
5866
5867       /* Add the main thread to the thread list.  */
5868       thread_info *thr = add_thread_silent (inferior_ptid);
5869       /* Don't consider the thread stopped until we've processed the
5870          saved stop reply.  */
5871       set_executing (thr->ptid, true);
5872     }
5873
5874   /* Next, if the target can specify a description, read it.  We do
5875      this before anything involving memory or registers.  */
5876   target_find_description ();
5877
5878   if (!target_is_non_stop_p ())
5879     {
5880       /* Use the previously fetched status.  */
5881       gdb_assert (wait_status != NULL);
5882
5883       if (target_can_async_p ())
5884         {
5885           struct notif_event *reply
5886             =  remote_notif_parse (this, &notif_client_stop, wait_status);
5887
5888           push_stop_reply ((struct stop_reply *) reply);
5889
5890           target_async (1);
5891         }
5892       else
5893         {
5894           gdb_assert (wait_status != NULL);
5895           strcpy (rs->buf, wait_status);
5896           rs->cached_wait_status = 1;
5897         }
5898     }
5899   else
5900     gdb_assert (wait_status == NULL);
5901 }
5902
5903 /* Implementation of the to_post_attach method.  */
5904
5905 void
5906 extended_remote_target::post_attach (int pid)
5907 {
5908   /* Get text, data & bss offsets.  */
5909   get_offsets ();
5910
5911   /* In certain cases GDB might not have had the chance to start
5912      symbol lookup up until now.  This could happen if the debugged
5913      binary is not using shared libraries, the vsyscall page is not
5914      present (on Linux) and the binary itself hadn't changed since the
5915      debugging process was started.  */
5916   if (symfile_objfile != NULL)
5917     remote_check_symbols();
5918 }
5919
5920 \f
5921 /* Check for the availability of vCont.  This function should also check
5922    the response.  */
5923
5924 void
5925 remote_target::remote_vcont_probe ()
5926 {
5927   remote_state *rs = get_remote_state ();
5928   char *buf;
5929
5930   strcpy (rs->buf, "vCont?");
5931   putpkt (rs->buf);
5932   getpkt (&rs->buf, &rs->buf_size, 0);
5933   buf = rs->buf;
5934
5935   /* Make sure that the features we assume are supported.  */
5936   if (startswith (buf, "vCont"))
5937     {
5938       char *p = &buf[5];
5939       int support_c, support_C;
5940
5941       rs->supports_vCont.s = 0;
5942       rs->supports_vCont.S = 0;
5943       support_c = 0;
5944       support_C = 0;
5945       rs->supports_vCont.t = 0;
5946       rs->supports_vCont.r = 0;
5947       while (p && *p == ';')
5948         {
5949           p++;
5950           if (*p == 's' && (*(p + 1) == ';' || *(p + 1) == 0))
5951             rs->supports_vCont.s = 1;
5952           else if (*p == 'S' && (*(p + 1) == ';' || *(p + 1) == 0))
5953             rs->supports_vCont.S = 1;
5954           else if (*p == 'c' && (*(p + 1) == ';' || *(p + 1) == 0))
5955             support_c = 1;
5956           else if (*p == 'C' && (*(p + 1) == ';' || *(p + 1) == 0))
5957             support_C = 1;
5958           else if (*p == 't' && (*(p + 1) == ';' || *(p + 1) == 0))
5959             rs->supports_vCont.t = 1;
5960           else if (*p == 'r' && (*(p + 1) == ';' || *(p + 1) == 0))
5961             rs->supports_vCont.r = 1;
5962
5963           p = strchr (p, ';');
5964         }
5965
5966       /* If c, and C are not all supported, we can't use vCont.  Clearing
5967          BUF will make packet_ok disable the packet.  */
5968       if (!support_c || !support_C)
5969         buf[0] = 0;
5970     }
5971
5972   packet_ok (buf, &remote_protocol_packets[PACKET_vCont]);
5973 }
5974
5975 /* Helper function for building "vCont" resumptions.  Write a
5976    resumption to P.  ENDP points to one-passed-the-end of the buffer
5977    we're allowed to write to.  Returns BUF+CHARACTERS_WRITTEN.  The
5978    thread to be resumed is PTID; STEP and SIGGNAL indicate whether the
5979    resumed thread should be single-stepped and/or signalled.  If PTID
5980    equals minus_one_ptid, then all threads are resumed; if PTID
5981    represents a process, then all threads of the process are resumed;
5982    the thread to be stepped and/or signalled is given in the global
5983    INFERIOR_PTID.  */
5984
5985 char *
5986 remote_target::append_resumption (char *p, char *endp,
5987                                   ptid_t ptid, int step, gdb_signal siggnal)
5988 {
5989   struct remote_state *rs = get_remote_state ();
5990
5991   if (step && siggnal != GDB_SIGNAL_0)
5992     p += xsnprintf (p, endp - p, ";S%02x", siggnal);
5993   else if (step
5994            /* GDB is willing to range step.  */
5995            && use_range_stepping
5996            /* Target supports range stepping.  */
5997            && rs->supports_vCont.r
5998            /* We don't currently support range stepping multiple
5999               threads with a wildcard (though the protocol allows it,
6000               so stubs shouldn't make an active effort to forbid
6001               it).  */
6002            && !(remote_multi_process_p (rs) && ptid_is_pid (ptid)))
6003     {
6004       struct thread_info *tp;
6005
6006       if (ptid_equal (ptid, minus_one_ptid))
6007         {
6008           /* If we don't know about the target thread's tid, then
6009              we're resuming magic_null_ptid (see caller).  */
6010           tp = find_thread_ptid (magic_null_ptid);
6011         }
6012       else
6013         tp = find_thread_ptid (ptid);
6014       gdb_assert (tp != NULL);
6015
6016       if (tp->control.may_range_step)
6017         {
6018           int addr_size = gdbarch_addr_bit (target_gdbarch ()) / 8;
6019
6020           p += xsnprintf (p, endp - p, ";r%s,%s",
6021                           phex_nz (tp->control.step_range_start,
6022                                    addr_size),
6023                           phex_nz (tp->control.step_range_end,
6024                                    addr_size));
6025         }
6026       else
6027         p += xsnprintf (p, endp - p, ";s");
6028     }
6029   else if (step)
6030     p += xsnprintf (p, endp - p, ";s");
6031   else if (siggnal != GDB_SIGNAL_0)
6032     p += xsnprintf (p, endp - p, ";C%02x", siggnal);
6033   else
6034     p += xsnprintf (p, endp - p, ";c");
6035
6036   if (remote_multi_process_p (rs) && ptid_is_pid (ptid))
6037     {
6038       ptid_t nptid;
6039
6040       /* All (-1) threads of process.  */
6041       nptid = ptid_build (ptid_get_pid (ptid), -1, 0);
6042
6043       p += xsnprintf (p, endp - p, ":");
6044       p = write_ptid (p, endp, nptid);
6045     }
6046   else if (!ptid_equal (ptid, minus_one_ptid))
6047     {
6048       p += xsnprintf (p, endp - p, ":");
6049       p = write_ptid (p, endp, ptid);
6050     }
6051
6052   return p;
6053 }
6054
6055 /* Clear the thread's private info on resume.  */
6056
6057 static void
6058 resume_clear_thread_private_info (struct thread_info *thread)
6059 {
6060   if (thread->priv != NULL)
6061     {
6062       remote_thread_info *priv = get_remote_thread_info (thread);
6063
6064       priv->stop_reason = TARGET_STOPPED_BY_NO_REASON;
6065       priv->watch_data_address = 0;
6066     }
6067 }
6068
6069 /* Append a vCont continue-with-signal action for threads that have a
6070    non-zero stop signal.  */
6071
6072 char *
6073 remote_target::append_pending_thread_resumptions (char *p, char *endp,
6074                                                   ptid_t ptid)
6075 {
6076   struct thread_info *thread;
6077
6078   ALL_NON_EXITED_THREADS (thread)
6079     if (ptid_match (thread->ptid, ptid)
6080         && !ptid_equal (inferior_ptid, thread->ptid)
6081         && thread->suspend.stop_signal != GDB_SIGNAL_0)
6082       {
6083         p = append_resumption (p, endp, thread->ptid,
6084                                0, thread->suspend.stop_signal);
6085         thread->suspend.stop_signal = GDB_SIGNAL_0;
6086         resume_clear_thread_private_info (thread);
6087       }
6088
6089   return p;
6090 }
6091
6092 /* Set the target running, using the packets that use Hc
6093    (c/s/C/S).  */
6094
6095 void
6096 remote_target::remote_resume_with_hc (ptid_t ptid, int step,
6097                                       gdb_signal siggnal)
6098 {
6099   struct remote_state *rs = get_remote_state ();
6100   struct thread_info *thread;
6101   char *buf;
6102
6103   rs->last_sent_signal = siggnal;
6104   rs->last_sent_step = step;
6105
6106   /* The c/s/C/S resume packets use Hc, so set the continue
6107      thread.  */
6108   if (ptid_equal (ptid, minus_one_ptid))
6109     set_continue_thread (any_thread_ptid);
6110   else
6111     set_continue_thread (ptid);
6112
6113   ALL_NON_EXITED_THREADS (thread)
6114     resume_clear_thread_private_info (thread);
6115
6116   buf = rs->buf;
6117   if (::execution_direction == EXEC_REVERSE)
6118     {
6119       /* We don't pass signals to the target in reverse exec mode.  */
6120       if (info_verbose && siggnal != GDB_SIGNAL_0)
6121         warning (_(" - Can't pass signal %d to target in reverse: ignored."),
6122                  siggnal);
6123
6124       if (step && packet_support (PACKET_bs) == PACKET_DISABLE)
6125         error (_("Remote reverse-step not supported."));
6126       if (!step && packet_support (PACKET_bc) == PACKET_DISABLE)
6127         error (_("Remote reverse-continue not supported."));
6128
6129       strcpy (buf, step ? "bs" : "bc");
6130     }
6131   else if (siggnal != GDB_SIGNAL_0)
6132     {
6133       buf[0] = step ? 'S' : 'C';
6134       buf[1] = tohex (((int) siggnal >> 4) & 0xf);
6135       buf[2] = tohex (((int) siggnal) & 0xf);
6136       buf[3] = '\0';
6137     }
6138   else
6139     strcpy (buf, step ? "s" : "c");
6140
6141   putpkt (buf);
6142 }
6143
6144 /* Resume the remote inferior by using a "vCont" packet.  The thread
6145    to be resumed is PTID; STEP and SIGGNAL indicate whether the
6146    resumed thread should be single-stepped and/or signalled.  If PTID
6147    equals minus_one_ptid, then all threads are resumed; the thread to
6148    be stepped and/or signalled is given in the global INFERIOR_PTID.
6149    This function returns non-zero iff it resumes the inferior.
6150
6151    This function issues a strict subset of all possible vCont commands
6152    at the moment.  */
6153
6154 int
6155 remote_target::remote_resume_with_vcont (ptid_t ptid, int step,
6156                                          enum gdb_signal siggnal)
6157 {
6158   struct remote_state *rs = get_remote_state ();
6159   char *p;
6160   char *endp;
6161
6162   /* No reverse execution actions defined for vCont.  */
6163   if (::execution_direction == EXEC_REVERSE)
6164     return 0;
6165
6166   if (packet_support (PACKET_vCont) == PACKET_SUPPORT_UNKNOWN)
6167     remote_vcont_probe ();
6168
6169   if (packet_support (PACKET_vCont) == PACKET_DISABLE)
6170     return 0;
6171
6172   p = rs->buf;
6173   endp = rs->buf + get_remote_packet_size ();
6174
6175   /* If we could generate a wider range of packets, we'd have to worry
6176      about overflowing BUF.  Should there be a generic
6177      "multi-part-packet" packet?  */
6178
6179   p += xsnprintf (p, endp - p, "vCont");
6180
6181   if (ptid_equal (ptid, magic_null_ptid))
6182     {
6183       /* MAGIC_NULL_PTID means that we don't have any active threads,
6184          so we don't have any TID numbers the inferior will
6185          understand.  Make sure to only send forms that do not specify
6186          a TID.  */
6187       append_resumption (p, endp, minus_one_ptid, step, siggnal);
6188     }
6189   else if (ptid_equal (ptid, minus_one_ptid) || ptid_is_pid (ptid))
6190     {
6191       /* Resume all threads (of all processes, or of a single
6192          process), with preference for INFERIOR_PTID.  This assumes
6193          inferior_ptid belongs to the set of all threads we are about
6194          to resume.  */
6195       if (step || siggnal != GDB_SIGNAL_0)
6196         {
6197           /* Step inferior_ptid, with or without signal.  */
6198           p = append_resumption (p, endp, inferior_ptid, step, siggnal);
6199         }
6200
6201       /* Also pass down any pending signaled resumption for other
6202          threads not the current.  */
6203       p = append_pending_thread_resumptions (p, endp, ptid);
6204
6205       /* And continue others without a signal.  */
6206       append_resumption (p, endp, ptid, /*step=*/ 0, GDB_SIGNAL_0);
6207     }
6208   else
6209     {
6210       /* Scheduler locking; resume only PTID.  */
6211       append_resumption (p, endp, ptid, step, siggnal);
6212     }
6213
6214   gdb_assert (strlen (rs->buf) < get_remote_packet_size ());
6215   putpkt (rs->buf);
6216
6217   if (target_is_non_stop_p ())
6218     {
6219       /* In non-stop, the stub replies to vCont with "OK".  The stop
6220          reply will be reported asynchronously by means of a `%Stop'
6221          notification.  */
6222       getpkt (&rs->buf, &rs->buf_size, 0);
6223       if (strcmp (rs->buf, "OK") != 0)
6224         error (_("Unexpected vCont reply in non-stop mode: %s"), rs->buf);
6225     }
6226
6227   return 1;
6228 }
6229
6230 /* Tell the remote machine to resume.  */
6231
6232 void
6233 remote_target::resume (ptid_t ptid, int step, enum gdb_signal siggnal)
6234 {
6235   struct remote_state *rs = get_remote_state ();
6236
6237   /* When connected in non-stop mode, the core resumes threads
6238      individually.  Resuming remote threads directly in target_resume
6239      would thus result in sending one packet per thread.  Instead, to
6240      minimize roundtrip latency, here we just store the resume
6241      request; the actual remote resumption will be done in
6242      target_commit_resume / remote_commit_resume, where we'll be able
6243      to do vCont action coalescing.  */
6244   if (target_is_non_stop_p () && ::execution_direction != EXEC_REVERSE)
6245     {
6246       remote_thread_info *remote_thr;
6247
6248       if (ptid_equal (minus_one_ptid, ptid) || ptid_is_pid (ptid))
6249         remote_thr = get_remote_thread_info (inferior_ptid);
6250       else
6251         remote_thr = get_remote_thread_info (ptid);
6252
6253       remote_thr->last_resume_step = step;
6254       remote_thr->last_resume_sig = siggnal;
6255       return;
6256     }
6257
6258   /* In all-stop, we can't mark REMOTE_ASYNC_GET_PENDING_EVENTS_TOKEN
6259      (explained in remote-notif.c:handle_notification) so
6260      remote_notif_process is not called.  We need find a place where
6261      it is safe to start a 'vNotif' sequence.  It is good to do it
6262      before resuming inferior, because inferior was stopped and no RSP
6263      traffic at that moment.  */
6264   if (!target_is_non_stop_p ())
6265     remote_notif_process (rs->notif_state, &notif_client_stop);
6266
6267   rs->last_resume_exec_dir = ::execution_direction;
6268
6269   /* Prefer vCont, and fallback to s/c/S/C, which use Hc.  */
6270   if (!remote_resume_with_vcont (ptid, step, siggnal))
6271     remote_resume_with_hc (ptid, step, siggnal);
6272
6273   /* We are about to start executing the inferior, let's register it
6274      with the event loop.  NOTE: this is the one place where all the
6275      execution commands end up.  We could alternatively do this in each
6276      of the execution commands in infcmd.c.  */
6277   /* FIXME: ezannoni 1999-09-28: We may need to move this out of here
6278      into infcmd.c in order to allow inferior function calls to work
6279      NOT asynchronously.  */
6280   if (target_can_async_p ())
6281     target_async (1);
6282
6283   /* We've just told the target to resume.  The remote server will
6284      wait for the inferior to stop, and then send a stop reply.  In
6285      the mean time, we can't start another command/query ourselves
6286      because the stub wouldn't be ready to process it.  This applies
6287      only to the base all-stop protocol, however.  In non-stop (which
6288      only supports vCont), the stub replies with an "OK", and is
6289      immediate able to process further serial input.  */
6290   if (!target_is_non_stop_p ())
6291     rs->waiting_for_stop_reply = 1;
6292 }
6293
6294 static int is_pending_fork_parent_thread (struct thread_info *thread);
6295
6296 /* Private per-inferior info for target remote processes.  */
6297
6298 struct remote_inferior : public private_inferior
6299 {
6300   /* Whether we can send a wildcard vCont for this process.  */
6301   bool may_wildcard_vcont = true;
6302 };
6303
6304 /* Get the remote private inferior data associated to INF.  */
6305
6306 static remote_inferior *
6307 get_remote_inferior (inferior *inf)
6308 {
6309   if (inf->priv == NULL)
6310     inf->priv.reset (new remote_inferior);
6311
6312   return static_cast<remote_inferior *> (inf->priv.get ());
6313 }
6314
6315 /* Class used to track the construction of a vCont packet in the
6316    outgoing packet buffer.  This is used to send multiple vCont
6317    packets if we have more actions than would fit a single packet.  */
6318
6319 class vcont_builder
6320 {
6321 public:
6322   explicit vcont_builder (remote_target *remote)
6323     : m_remote (remote)
6324   {
6325     restart ();
6326   }
6327
6328   void flush ();
6329   void push_action (ptid_t ptid, bool step, gdb_signal siggnal);
6330
6331 private:
6332   void restart ();
6333
6334   /* The remote target.  */
6335   remote_target *m_remote;
6336
6337   /* Pointer to the first action.  P points here if no action has been
6338      appended yet.  */
6339   char *m_first_action;
6340
6341   /* Where the next action will be appended.  */
6342   char *m_p;
6343
6344   /* The end of the buffer.  Must never write past this.  */
6345   char *m_endp;
6346 };
6347
6348 /* Prepare the outgoing buffer for a new vCont packet.  */
6349
6350 void
6351 vcont_builder::restart ()
6352 {
6353   struct remote_state *rs = m_remote->get_remote_state ();
6354
6355   m_p = rs->buf;
6356   m_endp = rs->buf + m_remote->get_remote_packet_size ();
6357   m_p += xsnprintf (m_p, m_endp - m_p, "vCont");
6358   m_first_action = m_p;
6359 }
6360
6361 /* If the vCont packet being built has any action, send it to the
6362    remote end.  */
6363
6364 void
6365 vcont_builder::flush ()
6366 {
6367   struct remote_state *rs;
6368
6369   if (m_p == m_first_action)
6370     return;
6371
6372   rs = m_remote->get_remote_state ();
6373   m_remote->putpkt (rs->buf);
6374   m_remote->getpkt (&rs->buf, &rs->buf_size, 0);
6375   if (strcmp (rs->buf, "OK") != 0)
6376     error (_("Unexpected vCont reply in non-stop mode: %s"), rs->buf);
6377 }
6378
6379 /* The largest action is range-stepping, with its two addresses.  This
6380    is more than sufficient.  If a new, bigger action is created, it'll
6381    quickly trigger a failed assertion in append_resumption (and we'll
6382    just bump this).  */
6383 #define MAX_ACTION_SIZE 200
6384
6385 /* Append a new vCont action in the outgoing packet being built.  If
6386    the action doesn't fit the packet along with previous actions, push
6387    what we've got so far to the remote end and start over a new vCont
6388    packet (with the new action).  */
6389
6390 void
6391 vcont_builder::push_action (ptid_t ptid, bool step, gdb_signal siggnal)
6392 {
6393   char buf[MAX_ACTION_SIZE + 1];
6394
6395   char *endp = m_remote->append_resumption (buf, buf + sizeof (buf),
6396                                             ptid, step, siggnal);
6397
6398   /* Check whether this new action would fit in the vCont packet along
6399      with previous actions.  If not, send what we've got so far and
6400      start a new vCont packet.  */
6401   size_t rsize = endp - buf;
6402   if (rsize > m_endp - m_p)
6403     {
6404       flush ();
6405       restart ();
6406
6407       /* Should now fit.  */
6408       gdb_assert (rsize <= m_endp - m_p);
6409     }
6410
6411   memcpy (m_p, buf, rsize);
6412   m_p += rsize;
6413   *m_p = '\0';
6414 }
6415
6416 /* to_commit_resume implementation.  */
6417
6418 void
6419 remote_target::commit_resume ()
6420 {
6421   struct inferior *inf;
6422   struct thread_info *tp;
6423   int any_process_wildcard;
6424   int may_global_wildcard_vcont;
6425
6426   /* If connected in all-stop mode, we'd send the remote resume
6427      request directly from remote_resume.  Likewise if
6428      reverse-debugging, as there are no defined vCont actions for
6429      reverse execution.  */
6430   if (!target_is_non_stop_p () || ::execution_direction == EXEC_REVERSE)
6431     return;
6432
6433   /* Try to send wildcard actions ("vCont;c" or "vCont;c:pPID.-1")
6434      instead of resuming all threads of each process individually.
6435      However, if any thread of a process must remain halted, we can't
6436      send wildcard resumes and must send one action per thread.
6437
6438      Care must be taken to not resume threads/processes the server
6439      side already told us are stopped, but the core doesn't know about
6440      yet, because the events are still in the vStopped notification
6441      queue.  For example:
6442
6443        #1 => vCont s:p1.1;c
6444        #2 <= OK
6445        #3 <= %Stopped T05 p1.1
6446        #4 => vStopped
6447        #5 <= T05 p1.2
6448        #6 => vStopped
6449        #7 <= OK
6450        #8 (infrun handles the stop for p1.1 and continues stepping)
6451        #9 => vCont s:p1.1;c
6452
6453      The last vCont above would resume thread p1.2 by mistake, because
6454      the server has no idea that the event for p1.2 had not been
6455      handled yet.
6456
6457      The server side must similarly ignore resume actions for the
6458      thread that has a pending %Stopped notification (and any other
6459      threads with events pending), until GDB acks the notification
6460      with vStopped.  Otherwise, e.g., the following case is
6461      mishandled:
6462
6463        #1 => g  (or any other packet)
6464        #2 <= [registers]
6465        #3 <= %Stopped T05 p1.2
6466        #4 => vCont s:p1.1;c
6467        #5 <= OK
6468
6469      Above, the server must not resume thread p1.2.  GDB can't know
6470      that p1.2 stopped until it acks the %Stopped notification, and
6471      since from GDB's perspective all threads should be running, it
6472      sends a "c" action.
6473
6474      Finally, special care must also be given to handling fork/vfork
6475      events.  A (v)fork event actually tells us that two processes
6476      stopped -- the parent and the child.  Until we follow the fork,
6477      we must not resume the child.  Therefore, if we have a pending
6478      fork follow, we must not send a global wildcard resume action
6479      (vCont;c).  We can still send process-wide wildcards though.  */
6480
6481   /* Start by assuming a global wildcard (vCont;c) is possible.  */
6482   may_global_wildcard_vcont = 1;
6483
6484   /* And assume every process is individually wildcard-able too.  */
6485   ALL_NON_EXITED_INFERIORS (inf)
6486     {
6487       remote_inferior *priv = get_remote_inferior (inf);
6488
6489       priv->may_wildcard_vcont = true;
6490     }
6491
6492   /* Check for any pending events (not reported or processed yet) and
6493      disable process and global wildcard resumes appropriately.  */
6494   check_pending_events_prevent_wildcard_vcont (&may_global_wildcard_vcont);
6495
6496   ALL_NON_EXITED_THREADS (tp)
6497     {
6498       /* If a thread of a process is not meant to be resumed, then we
6499          can't wildcard that process.  */
6500       if (!tp->executing)
6501         {
6502           get_remote_inferior (tp->inf)->may_wildcard_vcont = false;
6503
6504           /* And if we can't wildcard a process, we can't wildcard
6505              everything either.  */
6506           may_global_wildcard_vcont = 0;
6507           continue;
6508         }
6509
6510       /* If a thread is the parent of an unfollowed fork, then we
6511          can't do a global wildcard, as that would resume the fork
6512          child.  */
6513       if (is_pending_fork_parent_thread (tp))
6514         may_global_wildcard_vcont = 0;
6515     }
6516
6517   /* Now let's build the vCont packet(s).  Actions must be appended
6518      from narrower to wider scopes (thread -> process -> global).  If
6519      we end up with too many actions for a single packet vcont_builder
6520      flushes the current vCont packet to the remote side and starts a
6521      new one.  */
6522   struct vcont_builder vcont_builder (this);
6523
6524   /* Threads first.  */
6525   ALL_NON_EXITED_THREADS (tp)
6526     {
6527       remote_thread_info *remote_thr = get_remote_thread_info (tp);
6528
6529       if (!tp->executing || remote_thr->vcont_resumed)
6530         continue;
6531
6532       gdb_assert (!thread_is_in_step_over_chain (tp));
6533
6534       if (!remote_thr->last_resume_step
6535           && remote_thr->last_resume_sig == GDB_SIGNAL_0
6536           && get_remote_inferior (tp->inf)->may_wildcard_vcont)
6537         {
6538           /* We'll send a wildcard resume instead.  */
6539           remote_thr->vcont_resumed = 1;
6540           continue;
6541         }
6542
6543       vcont_builder.push_action (tp->ptid,
6544                                  remote_thr->last_resume_step,
6545                                  remote_thr->last_resume_sig);
6546       remote_thr->vcont_resumed = 1;
6547     }
6548
6549   /* Now check whether we can send any process-wide wildcard.  This is
6550      to avoid sending a global wildcard in the case nothing is
6551      supposed to be resumed.  */
6552   any_process_wildcard = 0;
6553
6554   ALL_NON_EXITED_INFERIORS (inf)
6555     {
6556       if (get_remote_inferior (inf)->may_wildcard_vcont)
6557         {
6558           any_process_wildcard = 1;
6559           break;
6560         }
6561     }
6562
6563   if (any_process_wildcard)
6564     {
6565       /* If all processes are wildcard-able, then send a single "c"
6566          action, otherwise, send an "all (-1) threads of process"
6567          continue action for each running process, if any.  */
6568       if (may_global_wildcard_vcont)
6569         {
6570           vcont_builder.push_action (minus_one_ptid,
6571                                      false, GDB_SIGNAL_0);
6572         }
6573       else
6574         {
6575           ALL_NON_EXITED_INFERIORS (inf)
6576             {
6577               if (get_remote_inferior (inf)->may_wildcard_vcont)
6578                 {
6579                   vcont_builder.push_action (pid_to_ptid (inf->pid),
6580                                              false, GDB_SIGNAL_0);
6581                 }
6582             }
6583         }
6584     }
6585
6586   vcont_builder.flush ();
6587 }
6588
6589 \f
6590
6591 /* Non-stop version of target_stop.  Uses `vCont;t' to stop a remote
6592    thread, all threads of a remote process, or all threads of all
6593    processes.  */
6594
6595 void
6596 remote_target::remote_stop_ns (ptid_t ptid)
6597 {
6598   struct remote_state *rs = get_remote_state ();
6599   char *p = rs->buf;
6600   char *endp = rs->buf + get_remote_packet_size ();
6601
6602   if (packet_support (PACKET_vCont) == PACKET_SUPPORT_UNKNOWN)
6603     remote_vcont_probe ();
6604
6605   if (!rs->supports_vCont.t)
6606     error (_("Remote server does not support stopping threads"));
6607
6608   if (ptid_equal (ptid, minus_one_ptid)
6609       || (!remote_multi_process_p (rs) && ptid_is_pid (ptid)))
6610     p += xsnprintf (p, endp - p, "vCont;t");
6611   else
6612     {
6613       ptid_t nptid;
6614
6615       p += xsnprintf (p, endp - p, "vCont;t:");
6616
6617       if (ptid_is_pid (ptid))
6618           /* All (-1) threads of process.  */
6619         nptid = ptid_build (ptid_get_pid (ptid), -1, 0);
6620       else
6621         {
6622           /* Small optimization: if we already have a stop reply for
6623              this thread, no use in telling the stub we want this
6624              stopped.  */
6625           if (peek_stop_reply (ptid))
6626             return;
6627
6628           nptid = ptid;
6629         }
6630
6631       write_ptid (p, endp, nptid);
6632     }
6633
6634   /* In non-stop, we get an immediate OK reply.  The stop reply will
6635      come in asynchronously by notification.  */
6636   putpkt (rs->buf);
6637   getpkt (&rs->buf, &rs->buf_size, 0);
6638   if (strcmp (rs->buf, "OK") != 0)
6639     error (_("Stopping %s failed: %s"), target_pid_to_str (ptid), rs->buf);
6640 }
6641
6642 /* All-stop version of target_interrupt.  Sends a break or a ^C to
6643    interrupt the remote target.  It is undefined which thread of which
6644    process reports the interrupt.  */
6645
6646 void
6647 remote_target::remote_interrupt_as ()
6648 {
6649   struct remote_state *rs = get_remote_state ();
6650
6651   rs->ctrlc_pending_p = 1;
6652
6653   /* If the inferior is stopped already, but the core didn't know
6654      about it yet, just ignore the request.  The cached wait status
6655      will be collected in remote_wait.  */
6656   if (rs->cached_wait_status)
6657     return;
6658
6659   /* Send interrupt_sequence to remote target.  */
6660   send_interrupt_sequence ();
6661 }
6662
6663 /* Non-stop version of target_interrupt.  Uses `vCtrlC' to interrupt
6664    the remote target.  It is undefined which thread of which process
6665    reports the interrupt.  Throws an error if the packet is not
6666    supported by the server.  */
6667
6668 void
6669 remote_target::remote_interrupt_ns ()
6670 {
6671   struct remote_state *rs = get_remote_state ();
6672   char *p = rs->buf;
6673   char *endp = rs->buf + get_remote_packet_size ();
6674
6675   xsnprintf (p, endp - p, "vCtrlC");
6676
6677   /* In non-stop, we get an immediate OK reply.  The stop reply will
6678      come in asynchronously by notification.  */
6679   putpkt (rs->buf);
6680   getpkt (&rs->buf, &rs->buf_size, 0);
6681
6682   switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_vCtrlC]))
6683     {
6684     case PACKET_OK:
6685       break;
6686     case PACKET_UNKNOWN:
6687       error (_("No support for interrupting the remote target."));
6688     case PACKET_ERROR:
6689       error (_("Interrupting target failed: %s"), rs->buf);
6690     }
6691 }
6692
6693 /* Implement the to_stop function for the remote targets.  */
6694
6695 void
6696 remote_target::stop (ptid_t ptid)
6697 {
6698   if (remote_debug)
6699     fprintf_unfiltered (gdb_stdlog, "remote_stop called\n");
6700
6701   if (target_is_non_stop_p ())
6702     remote_stop_ns (ptid);
6703   else
6704     {
6705       /* We don't currently have a way to transparently pause the
6706          remote target in all-stop mode.  Interrupt it instead.  */
6707       remote_interrupt_as ();
6708     }
6709 }
6710
6711 /* Implement the to_interrupt function for the remote targets.  */
6712
6713 void
6714 remote_target::interrupt ()
6715 {
6716   if (remote_debug)
6717     fprintf_unfiltered (gdb_stdlog, "remote_interrupt called\n");
6718
6719   if (target_is_non_stop_p ())
6720     remote_interrupt_ns ();
6721   else
6722     remote_interrupt_as ();
6723 }
6724
6725 /* Implement the to_pass_ctrlc function for the remote targets.  */
6726
6727 void
6728 remote_target::pass_ctrlc ()
6729 {
6730   struct remote_state *rs = get_remote_state ();
6731
6732   if (remote_debug)
6733     fprintf_unfiltered (gdb_stdlog, "remote_pass_ctrlc called\n");
6734
6735   /* If we're starting up, we're not fully synced yet.  Quit
6736      immediately.  */
6737   if (rs->starting_up)
6738     quit ();
6739   /* If ^C has already been sent once, offer to disconnect.  */
6740   else if (rs->ctrlc_pending_p)
6741     interrupt_query ();
6742   else
6743     target_interrupt ();
6744 }
6745
6746 /* Ask the user what to do when an interrupt is received.  */
6747
6748 void
6749 remote_target::interrupt_query ()
6750 {
6751   struct remote_state *rs = get_remote_state ();
6752
6753   if (rs->waiting_for_stop_reply && rs->ctrlc_pending_p)
6754     {
6755       if (query (_("The target is not responding to interrupt requests.\n"
6756                    "Stop debugging it? ")))
6757         {
6758           remote_unpush_target ();
6759           throw_error (TARGET_CLOSE_ERROR, _("Disconnected from target."));
6760         }
6761     }
6762   else
6763     {
6764       if (query (_("Interrupted while waiting for the program.\n"
6765                    "Give up waiting? ")))
6766         quit ();
6767     }
6768 }
6769
6770 /* Enable/disable target terminal ownership.  Most targets can use
6771    terminal groups to control terminal ownership.  Remote targets are
6772    different in that explicit transfer of ownership to/from GDB/target
6773    is required.  */
6774
6775 void
6776 remote_target::terminal_inferior ()
6777 {
6778   /* NOTE: At this point we could also register our selves as the
6779      recipient of all input.  Any characters typed could then be
6780      passed on down to the target.  */
6781 }
6782
6783 void
6784 remote_target::terminal_ours ()
6785 {
6786 }
6787
6788 static void
6789 remote_console_output (char *msg)
6790 {
6791   char *p;
6792
6793   for (p = msg; p[0] && p[1]; p += 2)
6794     {
6795       char tb[2];
6796       char c = fromhex (p[0]) * 16 + fromhex (p[1]);
6797
6798       tb[0] = c;
6799       tb[1] = 0;
6800       fputs_unfiltered (tb, gdb_stdtarg);
6801     }
6802   gdb_flush (gdb_stdtarg);
6803 }
6804
6805 DEF_VEC_O(cached_reg_t);
6806
6807 typedef struct stop_reply
6808 {
6809   struct notif_event base;
6810
6811   /* The identifier of the thread about this event  */
6812   ptid_t ptid;
6813
6814   /* The remote state this event is associated with.  When the remote
6815      connection, represented by a remote_state object, is closed,
6816      all the associated stop_reply events should be released.  */
6817   struct remote_state *rs;
6818
6819   struct target_waitstatus ws;
6820
6821   /* The architecture associated with the expedited registers.  */
6822   gdbarch *arch;
6823
6824   /* Expedited registers.  This makes remote debugging a bit more
6825      efficient for those targets that provide critical registers as
6826      part of their normal status mechanism (as another roundtrip to
6827      fetch them is avoided).  */
6828   VEC(cached_reg_t) *regcache;
6829
6830   enum target_stop_reason stop_reason;
6831
6832   CORE_ADDR watch_data_address;
6833
6834   int core;
6835 } *stop_reply_p;
6836
6837 static void
6838 stop_reply_xfree (struct stop_reply *r)
6839 {
6840   notif_event_xfree ((struct notif_event *) r);
6841 }
6842
6843 /* Return the length of the stop reply queue.  */
6844
6845 int
6846 remote_target::stop_reply_queue_length ()
6847 {
6848   remote_state *rs = get_remote_state ();
6849   return QUEUE_length (stop_reply_p, rs->stop_reply_queue);
6850 }
6851
6852 void
6853 remote_notif_stop_parse (remote_target *remote,
6854                          struct notif_client *self, char *buf,
6855                          struct notif_event *event)
6856 {
6857   remote->remote_parse_stop_reply (buf, (struct stop_reply *) event);
6858 }
6859
6860 static void
6861 remote_notif_stop_ack (remote_target *remote,
6862                        struct notif_client *self, char *buf,
6863                        struct notif_event *event)
6864 {
6865   struct stop_reply *stop_reply = (struct stop_reply *) event;
6866
6867   /* acknowledge */
6868   putpkt (remote, self->ack_command);
6869
6870   if (stop_reply->ws.kind == TARGET_WAITKIND_IGNORE)
6871     {
6872       /* We got an unknown stop reply.  */
6873       error (_("Unknown stop reply"));
6874     }
6875
6876   remote->push_stop_reply (stop_reply);
6877 }
6878
6879 static int
6880 remote_notif_stop_can_get_pending_events (remote_target *remote,
6881                                           struct notif_client *self)
6882 {
6883   /* We can't get pending events in remote_notif_process for
6884      notification stop, and we have to do this in remote_wait_ns
6885      instead.  If we fetch all queued events from stub, remote stub
6886      may exit and we have no chance to process them back in
6887      remote_wait_ns.  */
6888   remote_state *rs = remote->get_remote_state ();
6889   mark_async_event_handler (rs->remote_async_inferior_event_token);
6890   return 0;
6891 }
6892
6893 static void
6894 stop_reply_dtr (struct notif_event *event)
6895 {
6896   struct stop_reply *r = (struct stop_reply *) event;
6897   cached_reg_t *reg;
6898   int ix;
6899
6900   for (ix = 0;
6901        VEC_iterate (cached_reg_t, r->regcache, ix, reg);
6902        ix++)
6903     xfree (reg->data);
6904
6905   VEC_free (cached_reg_t, r->regcache);
6906 }
6907
6908 static struct notif_event *
6909 remote_notif_stop_alloc_reply (void)
6910 {
6911   /* We cast to a pointer to the "base class".  */
6912   struct notif_event *r = (struct notif_event *) XNEW (struct stop_reply);
6913
6914   r->dtr = stop_reply_dtr;
6915
6916   return r;
6917 }
6918
6919 /* A client of notification Stop.  */
6920
6921 struct notif_client notif_client_stop =
6922 {
6923   "Stop",
6924   "vStopped",
6925   remote_notif_stop_parse,
6926   remote_notif_stop_ack,
6927   remote_notif_stop_can_get_pending_events,
6928   remote_notif_stop_alloc_reply,
6929   REMOTE_NOTIF_STOP,
6930 };
6931
6932 /* A parameter to pass data in and out.  */
6933
6934 struct queue_iter_param
6935 {
6936   remote_target *remote;
6937   void *input;
6938   struct stop_reply *output;
6939 };
6940
6941 /* Determine if THREAD_PTID is a pending fork parent thread.  ARG contains
6942    the pid of the process that owns the threads we want to check, or
6943    -1 if we want to check all threads.  */
6944
6945 static int
6946 is_pending_fork_parent (struct target_waitstatus *ws, int event_pid,
6947                         ptid_t thread_ptid)
6948 {
6949   if (ws->kind == TARGET_WAITKIND_FORKED
6950       || ws->kind == TARGET_WAITKIND_VFORKED)
6951     {
6952       if (event_pid == -1 || event_pid == ptid_get_pid (thread_ptid))
6953         return 1;
6954     }
6955
6956   return 0;
6957 }
6958
6959 /* Return the thread's pending status used to determine whether the
6960    thread is a fork parent stopped at a fork event.  */
6961
6962 static struct target_waitstatus *
6963 thread_pending_fork_status (struct thread_info *thread)
6964 {
6965   if (thread->suspend.waitstatus_pending_p)
6966     return &thread->suspend.waitstatus;
6967   else
6968     return &thread->pending_follow;
6969 }
6970
6971 /* Determine if THREAD is a pending fork parent thread.  */
6972
6973 static int
6974 is_pending_fork_parent_thread (struct thread_info *thread)
6975 {
6976   struct target_waitstatus *ws = thread_pending_fork_status (thread);
6977   int pid = -1;
6978
6979   return is_pending_fork_parent (ws, pid, thread->ptid);
6980 }
6981
6982 /* Check whether EVENT is a fork event, and if it is, remove the
6983    fork child from the context list passed in DATA.  */
6984
6985 static int
6986 remove_child_of_pending_fork (QUEUE (stop_reply_p) *q,
6987                               QUEUE_ITER (stop_reply_p) *iter,
6988                               stop_reply_p event,
6989                               void *data)
6990 {
6991   struct queue_iter_param *param = (struct queue_iter_param *) data;
6992   struct threads_listing_context *context
6993     = (struct threads_listing_context *) param->input;
6994
6995   if (event->ws.kind == TARGET_WAITKIND_FORKED
6996       || event->ws.kind == TARGET_WAITKIND_VFORKED
6997       || event->ws.kind == TARGET_WAITKIND_THREAD_EXITED)
6998     context->remove_thread (event->ws.value.related_pid);
6999
7000   return 1;
7001 }
7002
7003 /* If CONTEXT contains any fork child threads that have not been
7004    reported yet, remove them from the CONTEXT list.  If such a
7005    thread exists it is because we are stopped at a fork catchpoint
7006    and have not yet called follow_fork, which will set up the
7007    host-side data structures for the new process.  */
7008
7009 void
7010 remote_target::remove_new_fork_children (threads_listing_context *context)
7011 {
7012   struct thread_info * thread;
7013   int pid = -1;
7014   struct notif_client *notif = &notif_client_stop;
7015   struct queue_iter_param param;
7016
7017   /* For any threads stopped at a fork event, remove the corresponding
7018      fork child threads from the CONTEXT list.  */
7019   ALL_NON_EXITED_THREADS (thread)
7020     {
7021       struct target_waitstatus *ws = thread_pending_fork_status (thread);
7022
7023       if (is_pending_fork_parent (ws, pid, thread->ptid))
7024         context->remove_thread (ws->value.related_pid);
7025     }
7026
7027   /* Check for any pending fork events (not reported or processed yet)
7028      in process PID and remove those fork child threads from the
7029      CONTEXT list as well.  */
7030   remote_notif_get_pending_events (notif);
7031   param.remote = this;
7032   param.input = context;
7033   param.output = NULL;
7034   QUEUE_iterate (stop_reply_p, get_remote_state ()->stop_reply_queue,
7035                  remove_child_of_pending_fork, &param);
7036 }
7037
7038 /* Callback data for
7039    check_pending_event_prevents_wildcard_vcont_callback.  */
7040 struct check_pending_event_prevents_wildcard_vcont_callback_data
7041 {
7042   /* The remote target.  */
7043   remote_target *remote;
7044
7045   /* Whether we can do a global wildcard (vCont;c)  */
7046   int *may_global_wildcard_vcont;
7047 };
7048
7049 /* Check whether EVENT would prevent a global or process wildcard
7050    vCont action.  */
7051
7052 static int
7053 check_pending_event_prevents_wildcard_vcont_callback
7054   (QUEUE (stop_reply_p) *q,
7055    QUEUE_ITER (stop_reply_p) *iter,
7056    stop_reply_p event,
7057    void *data)
7058 {
7059   struct inferior *inf;
7060   auto *cb_data = (check_pending_event_prevents_wildcard_vcont_callback_data *) data;
7061
7062   if (event->ws.kind == TARGET_WAITKIND_NO_RESUMED
7063       || event->ws.kind == TARGET_WAITKIND_NO_HISTORY)
7064     return 1;
7065
7066   if (event->ws.kind == TARGET_WAITKIND_FORKED
7067       || event->ws.kind == TARGET_WAITKIND_VFORKED)
7068     *cb_data->may_global_wildcard_vcont = 0;
7069
7070   inf = find_inferior_ptid (event->ptid);
7071
7072   /* This may be the first time we heard about this process.
7073      Regardless, we must not do a global wildcard resume, otherwise
7074      we'd resume this process too.  */
7075   *cb_data->may_global_wildcard_vcont = 0;
7076   if (inf != NULL)
7077     get_remote_inferior (inf)->may_wildcard_vcont = false;
7078
7079   return 1;
7080 }
7081
7082 /* Check whether any event pending in the vStopped queue would prevent
7083    a global or process wildcard vCont action.  Clear
7084    *may_global_wildcard if we can't do a global wildcard (vCont;c),
7085    and clear the event inferior's may_wildcard_vcont flag if we can't
7086    do a process-wide wildcard resume (vCont;c:pPID.-1).  */
7087
7088 void
7089 remote_target::check_pending_events_prevent_wildcard_vcont
7090   (int *may_global_wildcard)
7091 {
7092   struct notif_client *notif = &notif_client_stop;
7093   check_pending_event_prevents_wildcard_vcont_callback_data cb_data
7094     {this, may_global_wildcard};
7095
7096   remote_notif_get_pending_events (notif);
7097   QUEUE_iterate (stop_reply_p, get_remote_state ()->stop_reply_queue,
7098                  check_pending_event_prevents_wildcard_vcont_callback,
7099                  &cb_data);
7100 }
7101
7102 /* Remove stop replies in the queue if its pid is equal to the given
7103    inferior's pid.  */
7104
7105 static int
7106 remove_stop_reply_for_inferior (QUEUE (stop_reply_p) *q,
7107                                 QUEUE_ITER (stop_reply_p) *iter,
7108                                 stop_reply_p event,
7109                                 void *data)
7110 {
7111   struct queue_iter_param *param = (struct queue_iter_param *) data;
7112   struct inferior *inf = (struct inferior *) param->input;
7113
7114   if (ptid_get_pid (event->ptid) == inf->pid)
7115     {
7116       stop_reply_xfree (event);
7117       QUEUE_remove_elem (stop_reply_p, q, iter);
7118     }
7119
7120   return 1;
7121 }
7122
7123 /* Discard all pending stop replies of inferior INF.  */
7124
7125 void
7126 remote_target::discard_pending_stop_replies (struct inferior *inf)
7127 {
7128   struct queue_iter_param param;
7129   struct stop_reply *reply;
7130   struct remote_state *rs = get_remote_state ();
7131   struct remote_notif_state *rns = rs->notif_state;
7132
7133   /* This function can be notified when an inferior exists.  When the
7134      target is not remote, the notification state is NULL.  */
7135   if (rs->remote_desc == NULL)
7136     return;
7137
7138   reply = (struct stop_reply *) rns->pending_event[notif_client_stop.id];
7139
7140   /* Discard the in-flight notification.  */
7141   if (reply != NULL && ptid_get_pid (reply->ptid) == inf->pid)
7142     {
7143       stop_reply_xfree (reply);
7144       rns->pending_event[notif_client_stop.id] = NULL;
7145     }
7146
7147   param.remote = this;
7148   param.input = inf;
7149   param.output = NULL;
7150   /* Discard the stop replies we have already pulled with
7151      vStopped.  */
7152   QUEUE_iterate (stop_reply_p, rs->stop_reply_queue,
7153                  remove_stop_reply_for_inferior, &param);
7154 }
7155
7156 /* If its remote state is equal to the given remote state,
7157    remove EVENT from the stop reply queue.  */
7158
7159 static int
7160 remove_stop_reply_of_remote_state (QUEUE (stop_reply_p) *q,
7161                                    QUEUE_ITER (stop_reply_p) *iter,
7162                                    stop_reply_p event,
7163                                    void *data)
7164 {
7165   struct queue_iter_param *param = (struct queue_iter_param *) data;
7166   struct remote_state *rs = (struct remote_state *) param->input;
7167
7168   if (event->rs == rs)
7169     {
7170       stop_reply_xfree (event);
7171       QUEUE_remove_elem (stop_reply_p, q, iter);
7172     }
7173
7174   return 1;
7175 }
7176
7177 /* Discard the stop replies for RS in stop_reply_queue.  */
7178
7179 void
7180 remote_target::discard_pending_stop_replies_in_queue ()
7181 {
7182   remote_state *rs = get_remote_state ();
7183   struct queue_iter_param param;
7184
7185   param.remote = this;
7186   param.input = rs;
7187   param.output = NULL;
7188   /* Discard the stop replies we have already pulled with
7189      vStopped.  */
7190   QUEUE_iterate (stop_reply_p, rs->stop_reply_queue,
7191                  remove_stop_reply_of_remote_state, &param);
7192 }
7193
7194 /* A parameter to pass data in and out.  */
7195
7196 static int
7197 remote_notif_remove_once_on_match (QUEUE (stop_reply_p) *q,
7198                                    QUEUE_ITER (stop_reply_p) *iter,
7199                                    stop_reply_p event,
7200                                    void *data)
7201 {
7202   struct queue_iter_param *param = (struct queue_iter_param *) data;
7203   ptid_t *ptid = (ptid_t *) param->input;
7204
7205   if (ptid_match (event->ptid, *ptid))
7206     {
7207       param->output = event;
7208       QUEUE_remove_elem (stop_reply_p, q, iter);
7209       return 0;
7210     }
7211
7212   return 1;
7213 }
7214
7215 /* Remove the first reply in 'stop_reply_queue' which matches
7216    PTID.  */
7217
7218 struct stop_reply *
7219 remote_target::remote_notif_remove_queued_reply (ptid_t ptid)
7220 {
7221   struct queue_iter_param param;
7222
7223   param.remote = this;
7224   param.input = &ptid;
7225   param.output = NULL;
7226
7227   QUEUE_iterate (stop_reply_p, get_remote_state ()->stop_reply_queue,
7228                  remote_notif_remove_once_on_match, &param);
7229   if (notif_debug)
7230     fprintf_unfiltered (gdb_stdlog,
7231                         "notif: discard queued event: 'Stop' in %s\n",
7232                         target_pid_to_str (ptid));
7233
7234   return param.output;
7235 }
7236
7237 /* Look for a queued stop reply belonging to PTID.  If one is found,
7238    remove it from the queue, and return it.  Returns NULL if none is
7239    found.  If there are still queued events left to process, tell the
7240    event loop to get back to target_wait soon.  */
7241
7242 struct stop_reply *
7243 remote_target::queued_stop_reply (ptid_t ptid)
7244 {
7245   struct stop_reply *r = remote_notif_remove_queued_reply (ptid);
7246
7247   if (!QUEUE_is_empty (stop_reply_p, get_remote_state ()->stop_reply_queue))
7248     {
7249       remote_state *rs = get_remote_state ();
7250       /* There's still at least an event left.  */
7251       mark_async_event_handler (rs->remote_async_inferior_event_token);
7252     }
7253
7254   return r;
7255 }
7256
7257 /* Push a fully parsed stop reply in the stop reply queue.  Since we
7258    know that we now have at least one queued event left to pass to the
7259    core side, tell the event loop to get back to target_wait soon.  */
7260
7261 void
7262 remote_target::push_stop_reply (struct stop_reply *new_event)
7263 {
7264   remote_state *rs = get_remote_state ();
7265   QUEUE_enque (stop_reply_p, rs->stop_reply_queue, new_event);
7266
7267   if (notif_debug)
7268     fprintf_unfiltered (gdb_stdlog,
7269                         "notif: push 'Stop' %s to queue %d\n",
7270                         target_pid_to_str (new_event->ptid),
7271                         QUEUE_length (stop_reply_p,
7272                                       rs->stop_reply_queue));
7273
7274   mark_async_event_handler (rs->remote_async_inferior_event_token);
7275 }
7276
7277 static int
7278 stop_reply_match_ptid_and_ws (QUEUE (stop_reply_p) *q,
7279                               QUEUE_ITER (stop_reply_p) *iter,
7280                               struct stop_reply *event,
7281                               void *data)
7282 {
7283   ptid_t *ptid = (ptid_t *) data;
7284
7285   return !(ptid_equal (*ptid, event->ptid)
7286            && event->ws.kind == TARGET_WAITKIND_STOPPED);
7287 }
7288
7289 /* Returns true if we have a stop reply for PTID.  */
7290
7291 int
7292 remote_target::peek_stop_reply (ptid_t ptid)
7293 {
7294   remote_state *rs = get_remote_state ();
7295   return !QUEUE_iterate (stop_reply_p, rs->stop_reply_queue,
7296                          stop_reply_match_ptid_and_ws, &ptid);
7297 }
7298
7299 /* Helper for remote_parse_stop_reply.  Return nonzero if the substring
7300    starting with P and ending with PEND matches PREFIX.  */
7301
7302 static int
7303 strprefix (const char *p, const char *pend, const char *prefix)
7304 {
7305   for ( ; p < pend; p++, prefix++)
7306     if (*p != *prefix)
7307       return 0;
7308   return *prefix == '\0';
7309 }
7310
7311 /* Parse the stop reply in BUF.  Either the function succeeds, and the
7312    result is stored in EVENT, or throws an error.  */
7313
7314 void
7315 remote_target::remote_parse_stop_reply (char *buf, stop_reply *event)
7316 {
7317   remote_arch_state *rsa = NULL;
7318   ULONGEST addr;
7319   const char *p;
7320   int skipregs = 0;
7321
7322   event->ptid = null_ptid;
7323   event->rs = get_remote_state ();
7324   event->ws.kind = TARGET_WAITKIND_IGNORE;
7325   event->ws.value.integer = 0;
7326   event->stop_reason = TARGET_STOPPED_BY_NO_REASON;
7327   event->regcache = NULL;
7328   event->core = -1;
7329
7330   switch (buf[0])
7331     {
7332     case 'T':           /* Status with PC, SP, FP, ...  */
7333       /* Expedited reply, containing Signal, {regno, reg} repeat.  */
7334       /*  format is:  'Tssn...:r...;n...:r...;n...:r...;#cc', where
7335             ss = signal number
7336             n... = register number
7337             r... = register contents
7338       */
7339
7340       p = &buf[3];      /* after Txx */
7341       while (*p)
7342         {
7343           const char *p1;
7344           int fieldsize;
7345
7346           p1 = strchr (p, ':');
7347           if (p1 == NULL)
7348             error (_("Malformed packet(a) (missing colon): %s\n\
7349 Packet: '%s'\n"),
7350                    p, buf);
7351           if (p == p1)
7352             error (_("Malformed packet(a) (missing register number): %s\n\
7353 Packet: '%s'\n"),
7354                    p, buf);
7355
7356           /* Some "registers" are actually extended stop information.
7357              Note if you're adding a new entry here: GDB 7.9 and
7358              earlier assume that all register "numbers" that start
7359              with an hex digit are real register numbers.  Make sure
7360              the server only sends such a packet if it knows the
7361              client understands it.  */
7362
7363           if (strprefix (p, p1, "thread"))
7364             event->ptid = read_ptid (++p1, &p);
7365           else if (strprefix (p, p1, "syscall_entry"))
7366             {
7367               ULONGEST sysno;
7368
7369               event->ws.kind = TARGET_WAITKIND_SYSCALL_ENTRY;
7370               p = unpack_varlen_hex (++p1, &sysno);
7371               event->ws.value.syscall_number = (int) sysno;
7372             }
7373           else if (strprefix (p, p1, "syscall_return"))
7374             {
7375               ULONGEST sysno;
7376
7377               event->ws.kind = TARGET_WAITKIND_SYSCALL_RETURN;
7378               p = unpack_varlen_hex (++p1, &sysno);
7379               event->ws.value.syscall_number = (int) sysno;
7380             }
7381           else if (strprefix (p, p1, "watch")
7382                    || strprefix (p, p1, "rwatch")
7383                    || strprefix (p, p1, "awatch"))
7384             {
7385               event->stop_reason = TARGET_STOPPED_BY_WATCHPOINT;
7386               p = unpack_varlen_hex (++p1, &addr);
7387               event->watch_data_address = (CORE_ADDR) addr;
7388             }
7389           else if (strprefix (p, p1, "swbreak"))
7390             {
7391               event->stop_reason = TARGET_STOPPED_BY_SW_BREAKPOINT;
7392
7393               /* Make sure the stub doesn't forget to indicate support
7394                  with qSupported.  */
7395               if (packet_support (PACKET_swbreak_feature) != PACKET_ENABLE)
7396                 error (_("Unexpected swbreak stop reason"));
7397
7398               /* The value part is documented as "must be empty",
7399                  though we ignore it, in case we ever decide to make
7400                  use of it in a backward compatible way.  */
7401               p = strchrnul (p1 + 1, ';');
7402             }
7403           else if (strprefix (p, p1, "hwbreak"))
7404             {
7405               event->stop_reason = TARGET_STOPPED_BY_HW_BREAKPOINT;
7406
7407               /* Make sure the stub doesn't forget to indicate support
7408                  with qSupported.  */
7409               if (packet_support (PACKET_hwbreak_feature) != PACKET_ENABLE)
7410                 error (_("Unexpected hwbreak stop reason"));
7411
7412               /* See above.  */
7413               p = strchrnul (p1 + 1, ';');
7414             }
7415           else if (strprefix (p, p1, "library"))
7416             {
7417               event->ws.kind = TARGET_WAITKIND_LOADED;
7418               p = strchrnul (p1 + 1, ';');
7419             }
7420           else if (strprefix (p, p1, "replaylog"))
7421             {
7422               event->ws.kind = TARGET_WAITKIND_NO_HISTORY;
7423               /* p1 will indicate "begin" or "end", but it makes
7424                  no difference for now, so ignore it.  */
7425               p = strchrnul (p1 + 1, ';');
7426             }
7427           else if (strprefix (p, p1, "core"))
7428             {
7429               ULONGEST c;
7430
7431               p = unpack_varlen_hex (++p1, &c);
7432               event->core = c;
7433             }
7434           else if (strprefix (p, p1, "fork"))
7435             {
7436               event->ws.value.related_pid = read_ptid (++p1, &p);
7437               event->ws.kind = TARGET_WAITKIND_FORKED;
7438             }
7439           else if (strprefix (p, p1, "vfork"))
7440             {
7441               event->ws.value.related_pid = read_ptid (++p1, &p);
7442               event->ws.kind = TARGET_WAITKIND_VFORKED;
7443             }
7444           else if (strprefix (p, p1, "vforkdone"))
7445             {
7446               event->ws.kind = TARGET_WAITKIND_VFORK_DONE;
7447               p = strchrnul (p1 + 1, ';');
7448             }
7449           else if (strprefix (p, p1, "exec"))
7450             {
7451               ULONGEST ignored;
7452               char pathname[PATH_MAX];
7453               int pathlen;
7454
7455               /* Determine the length of the execd pathname.  */
7456               p = unpack_varlen_hex (++p1, &ignored);
7457               pathlen = (p - p1) / 2;
7458
7459               /* Save the pathname for event reporting and for
7460                  the next run command.  */
7461               hex2bin (p1, (gdb_byte *) pathname, pathlen);
7462               pathname[pathlen] = '\0';
7463
7464               /* This is freed during event handling.  */
7465               event->ws.value.execd_pathname = xstrdup (pathname);
7466               event->ws.kind = TARGET_WAITKIND_EXECD;
7467
7468               /* Skip the registers included in this packet, since
7469                  they may be for an architecture different from the
7470                  one used by the original program.  */
7471               skipregs = 1;
7472             }
7473           else if (strprefix (p, p1, "create"))
7474             {
7475               event->ws.kind = TARGET_WAITKIND_THREAD_CREATED;
7476               p = strchrnul (p1 + 1, ';');
7477             }
7478           else
7479             {
7480               ULONGEST pnum;
7481               const char *p_temp;
7482
7483               if (skipregs)
7484                 {
7485                   p = strchrnul (p1 + 1, ';');
7486                   p++;
7487                   continue;
7488                 }
7489
7490               /* Maybe a real ``P'' register number.  */
7491               p_temp = unpack_varlen_hex (p, &pnum);
7492               /* If the first invalid character is the colon, we got a
7493                  register number.  Otherwise, it's an unknown stop
7494                  reason.  */
7495               if (p_temp == p1)
7496                 {
7497                   /* If we haven't parsed the event's thread yet, find
7498                      it now, in order to find the architecture of the
7499                      reported expedited registers.  */
7500                   if (event->ptid == null_ptid)
7501                     {
7502                       const char *thr = strstr (p1 + 1, ";thread:");
7503                       if (thr != NULL)
7504                         event->ptid = read_ptid (thr + strlen (";thread:"),
7505                                                  NULL);
7506                       else
7507                         {
7508                           /* Either the current thread hasn't changed,
7509                              or the inferior is not multi-threaded.
7510                              The event must be for the thread we last
7511                              set as (or learned as being) current.  */
7512                           event->ptid = event->rs->general_thread;
7513                         }
7514                     }
7515
7516                   if (rsa == NULL)
7517                     {
7518                       inferior *inf = (event->ptid == null_ptid
7519                                        ? NULL
7520                                        : find_inferior_ptid (event->ptid));
7521                       /* If this is the first time we learn anything
7522                          about this process, skip the registers
7523                          included in this packet, since we don't yet
7524                          know which architecture to use to parse them.
7525                          We'll determine the architecture later when
7526                          we process the stop reply and retrieve the
7527                          target description, via
7528                          remote_notice_new_inferior ->
7529                          post_create_inferior.  */
7530                       if (inf == NULL)
7531                         {
7532                           p = strchrnul (p1 + 1, ';');
7533                           p++;
7534                           continue;
7535                         }
7536
7537                       event->arch = inf->gdbarch;
7538                       rsa = event->rs->get_remote_arch_state (event->arch);
7539                     }
7540
7541                   packet_reg *reg
7542                     = packet_reg_from_pnum (event->arch, rsa, pnum);
7543                   cached_reg_t cached_reg;
7544
7545                   if (reg == NULL)
7546                     error (_("Remote sent bad register number %s: %s\n\
7547 Packet: '%s'\n"),
7548                            hex_string (pnum), p, buf);
7549
7550                   cached_reg.num = reg->regnum;
7551                   cached_reg.data = (gdb_byte *)
7552                     xmalloc (register_size (event->arch, reg->regnum));
7553
7554                   p = p1 + 1;
7555                   fieldsize = hex2bin (p, cached_reg.data,
7556                                        register_size (event->arch, reg->regnum));
7557                   p += 2 * fieldsize;
7558                   if (fieldsize < register_size (event->arch, reg->regnum))
7559                     warning (_("Remote reply is too short: %s"), buf);
7560
7561                   VEC_safe_push (cached_reg_t, event->regcache, &cached_reg);
7562                 }
7563               else
7564                 {
7565                   /* Not a number.  Silently skip unknown optional
7566                      info.  */
7567                   p = strchrnul (p1 + 1, ';');
7568                 }
7569             }
7570
7571           if (*p != ';')
7572             error (_("Remote register badly formatted: %s\nhere: %s"),
7573                    buf, p);
7574           ++p;
7575         }
7576
7577       if (event->ws.kind != TARGET_WAITKIND_IGNORE)
7578         break;
7579
7580       /* fall through */
7581     case 'S':           /* Old style status, just signal only.  */
7582       {
7583         int sig;
7584
7585         event->ws.kind = TARGET_WAITKIND_STOPPED;
7586         sig = (fromhex (buf[1]) << 4) + fromhex (buf[2]);
7587         if (GDB_SIGNAL_FIRST <= sig && sig < GDB_SIGNAL_LAST)
7588           event->ws.value.sig = (enum gdb_signal) sig;
7589         else
7590           event->ws.value.sig = GDB_SIGNAL_UNKNOWN;
7591       }
7592       break;
7593     case 'w':           /* Thread exited.  */
7594       {
7595         const char *p;
7596         ULONGEST value;
7597
7598         event->ws.kind = TARGET_WAITKIND_THREAD_EXITED;
7599         p = unpack_varlen_hex (&buf[1], &value);
7600         event->ws.value.integer = value;
7601         if (*p != ';')
7602           error (_("stop reply packet badly formatted: %s"), buf);
7603         event->ptid = read_ptid (++p, NULL);
7604         break;
7605       }
7606     case 'W':           /* Target exited.  */
7607     case 'X':
7608       {
7609         const char *p;
7610         int pid;
7611         ULONGEST value;
7612
7613         /* GDB used to accept only 2 hex chars here.  Stubs should
7614            only send more if they detect GDB supports multi-process
7615            support.  */
7616         p = unpack_varlen_hex (&buf[1], &value);
7617
7618         if (buf[0] == 'W')
7619           {
7620             /* The remote process exited.  */
7621             event->ws.kind = TARGET_WAITKIND_EXITED;
7622             event->ws.value.integer = value;
7623           }
7624         else
7625           {
7626             /* The remote process exited with a signal.  */
7627             event->ws.kind = TARGET_WAITKIND_SIGNALLED;
7628             if (GDB_SIGNAL_FIRST <= value && value < GDB_SIGNAL_LAST)
7629               event->ws.value.sig = (enum gdb_signal) value;
7630             else
7631               event->ws.value.sig = GDB_SIGNAL_UNKNOWN;
7632           }
7633
7634         /* If no process is specified, assume inferior_ptid.  */
7635         pid = ptid_get_pid (inferior_ptid);
7636         if (*p == '\0')
7637           ;
7638         else if (*p == ';')
7639           {
7640             p++;
7641
7642             if (*p == '\0')
7643               ;
7644             else if (startswith (p, "process:"))
7645               {
7646                 ULONGEST upid;
7647
7648                 p += sizeof ("process:") - 1;
7649                 unpack_varlen_hex (p, &upid);
7650                 pid = upid;
7651               }
7652             else
7653               error (_("unknown stop reply packet: %s"), buf);
7654           }
7655         else
7656           error (_("unknown stop reply packet: %s"), buf);
7657         event->ptid = pid_to_ptid (pid);
7658       }
7659       break;
7660     case 'N':
7661       event->ws.kind = TARGET_WAITKIND_NO_RESUMED;
7662       event->ptid = minus_one_ptid;
7663       break;
7664     }
7665
7666   if (target_is_non_stop_p () && ptid_equal (event->ptid, null_ptid))
7667     error (_("No process or thread specified in stop reply: %s"), buf);
7668 }
7669
7670 /* When the stub wants to tell GDB about a new notification reply, it
7671    sends a notification (%Stop, for example).  Those can come it at
7672    any time, hence, we have to make sure that any pending
7673    putpkt/getpkt sequence we're making is finished, before querying
7674    the stub for more events with the corresponding ack command
7675    (vStopped, for example).  E.g., if we started a vStopped sequence
7676    immediately upon receiving the notification, something like this
7677    could happen:
7678
7679     1.1) --> Hg 1
7680     1.2) <-- OK
7681     1.3) --> g
7682     1.4) <-- %Stop
7683     1.5) --> vStopped
7684     1.6) <-- (registers reply to step #1.3)
7685
7686    Obviously, the reply in step #1.6 would be unexpected to a vStopped
7687    query.
7688
7689    To solve this, whenever we parse a %Stop notification successfully,
7690    we mark the REMOTE_ASYNC_GET_PENDING_EVENTS_TOKEN, and carry on
7691    doing whatever we were doing:
7692
7693     2.1) --> Hg 1
7694     2.2) <-- OK
7695     2.3) --> g
7696     2.4) <-- %Stop
7697       <GDB marks the REMOTE_ASYNC_GET_PENDING_EVENTS_TOKEN>
7698     2.5) <-- (registers reply to step #2.3)
7699
7700    Eventualy after step #2.5, we return to the event loop, which
7701    notices there's an event on the
7702    REMOTE_ASYNC_GET_PENDING_EVENTS_TOKEN event and calls the
7703    associated callback --- the function below.  At this point, we're
7704    always safe to start a vStopped sequence. :
7705
7706     2.6) --> vStopped
7707     2.7) <-- T05 thread:2
7708     2.8) --> vStopped
7709     2.9) --> OK
7710 */
7711
7712 void
7713 remote_target::remote_notif_get_pending_events (notif_client *nc)
7714 {
7715   struct remote_state *rs = get_remote_state ();
7716
7717   if (rs->notif_state->pending_event[nc->id] != NULL)
7718     {
7719       if (notif_debug)
7720         fprintf_unfiltered (gdb_stdlog,
7721                             "notif: process: '%s' ack pending event\n",
7722                             nc->name);
7723
7724       /* acknowledge */
7725       nc->ack (this, nc, rs->buf, rs->notif_state->pending_event[nc->id]);
7726       rs->notif_state->pending_event[nc->id] = NULL;
7727
7728       while (1)
7729         {
7730           getpkt (&rs->buf, &rs->buf_size, 0);
7731           if (strcmp (rs->buf, "OK") == 0)
7732             break;
7733           else
7734             remote_notif_ack (this, nc, rs->buf);
7735         }
7736     }
7737   else
7738     {
7739       if (notif_debug)
7740         fprintf_unfiltered (gdb_stdlog,
7741                             "notif: process: '%s' no pending reply\n",
7742                             nc->name);
7743     }
7744 }
7745
7746 /* Wrapper around remote_target::remote_notif_get_pending_events to
7747    avoid having to export the whole remote_target class.  */
7748
7749 void
7750 remote_notif_get_pending_events (remote_target *remote, notif_client *nc)
7751 {
7752   remote->remote_notif_get_pending_events (nc);
7753 }
7754
7755 /* Called when it is decided that STOP_REPLY holds the info of the
7756    event that is to be returned to the core.  This function always
7757    destroys STOP_REPLY.  */
7758
7759 ptid_t
7760 remote_target::process_stop_reply (struct stop_reply *stop_reply,
7761                                    struct target_waitstatus *status)
7762 {
7763   ptid_t ptid;
7764
7765   *status = stop_reply->ws;
7766   ptid = stop_reply->ptid;
7767
7768   /* If no thread/process was reported by the stub, assume the current
7769      inferior.  */
7770   if (ptid_equal (ptid, null_ptid))
7771     ptid = inferior_ptid;
7772
7773   if (status->kind != TARGET_WAITKIND_EXITED
7774       && status->kind != TARGET_WAITKIND_SIGNALLED
7775       && status->kind != TARGET_WAITKIND_NO_RESUMED)
7776     {
7777       /* Expedited registers.  */
7778       if (stop_reply->regcache)
7779         {
7780           struct regcache *regcache
7781             = get_thread_arch_regcache (ptid, stop_reply->arch);
7782           cached_reg_t *reg;
7783           int ix;
7784
7785           for (ix = 0;
7786                VEC_iterate (cached_reg_t, stop_reply->regcache, ix, reg);
7787                ix++)
7788           {
7789             regcache_raw_supply (regcache, reg->num, reg->data);
7790             xfree (reg->data);
7791           }
7792
7793           VEC_free (cached_reg_t, stop_reply->regcache);
7794         }
7795
7796       remote_notice_new_inferior (ptid, 0);
7797       remote_thread_info *remote_thr = get_remote_thread_info (ptid);
7798       remote_thr->core = stop_reply->core;
7799       remote_thr->stop_reason = stop_reply->stop_reason;
7800       remote_thr->watch_data_address = stop_reply->watch_data_address;
7801       remote_thr->vcont_resumed = 0;
7802     }
7803
7804   stop_reply_xfree (stop_reply);
7805   return ptid;
7806 }
7807
7808 /* The non-stop mode version of target_wait.  */
7809
7810 ptid_t
7811 remote_target::wait_ns (ptid_t ptid, struct target_waitstatus *status, int options)
7812 {
7813   struct remote_state *rs = get_remote_state ();
7814   struct stop_reply *stop_reply;
7815   int ret;
7816   int is_notif = 0;
7817
7818   /* If in non-stop mode, get out of getpkt even if a
7819      notification is received.  */
7820
7821   ret = getpkt_or_notif_sane (&rs->buf, &rs->buf_size,
7822                               0 /* forever */, &is_notif);
7823   while (1)
7824     {
7825       if (ret != -1 && !is_notif)
7826         switch (rs->buf[0])
7827           {
7828           case 'E':             /* Error of some sort.  */
7829             /* We're out of sync with the target now.  Did it continue
7830                or not?  We can't tell which thread it was in non-stop,
7831                so just ignore this.  */
7832             warning (_("Remote failure reply: %s"), rs->buf);
7833             break;
7834           case 'O':             /* Console output.  */
7835             remote_console_output (rs->buf + 1);
7836             break;
7837           default:
7838             warning (_("Invalid remote reply: %s"), rs->buf);
7839             break;
7840           }
7841
7842       /* Acknowledge a pending stop reply that may have arrived in the
7843          mean time.  */
7844       if (rs->notif_state->pending_event[notif_client_stop.id] != NULL)
7845         remote_notif_get_pending_events (&notif_client_stop);
7846
7847       /* If indeed we noticed a stop reply, we're done.  */
7848       stop_reply = queued_stop_reply (ptid);
7849       if (stop_reply != NULL)
7850         return process_stop_reply (stop_reply, status);
7851
7852       /* Still no event.  If we're just polling for an event, then
7853          return to the event loop.  */
7854       if (options & TARGET_WNOHANG)
7855         {
7856           status->kind = TARGET_WAITKIND_IGNORE;
7857           return minus_one_ptid;
7858         }
7859
7860       /* Otherwise do a blocking wait.  */
7861       ret = getpkt_or_notif_sane (&rs->buf, &rs->buf_size,
7862                                   1 /* forever */, &is_notif);
7863     }
7864 }
7865
7866 /* Wait until the remote machine stops, then return, storing status in
7867    STATUS just as `wait' would.  */
7868
7869 ptid_t
7870 remote_target::wait_as (ptid_t ptid, target_waitstatus *status, int options)
7871 {
7872   struct remote_state *rs = get_remote_state ();
7873   ptid_t event_ptid = null_ptid;
7874   char *buf;
7875   struct stop_reply *stop_reply;
7876
7877  again:
7878
7879   status->kind = TARGET_WAITKIND_IGNORE;
7880   status->value.integer = 0;
7881
7882   stop_reply = queued_stop_reply (ptid);
7883   if (stop_reply != NULL)
7884     return process_stop_reply (stop_reply, status);
7885
7886   if (rs->cached_wait_status)
7887     /* Use the cached wait status, but only once.  */
7888     rs->cached_wait_status = 0;
7889   else
7890     {
7891       int ret;
7892       int is_notif;
7893       int forever = ((options & TARGET_WNOHANG) == 0
7894                      && rs->wait_forever_enabled_p);
7895
7896       if (!rs->waiting_for_stop_reply)
7897         {
7898           status->kind = TARGET_WAITKIND_NO_RESUMED;
7899           return minus_one_ptid;
7900         }
7901
7902       /* FIXME: cagney/1999-09-27: If we're in async mode we should
7903          _never_ wait for ever -> test on target_is_async_p().
7904          However, before we do that we need to ensure that the caller
7905          knows how to take the target into/out of async mode.  */
7906       ret = getpkt_or_notif_sane (&rs->buf, &rs->buf_size,
7907                                   forever, &is_notif);
7908
7909       /* GDB gets a notification.  Return to core as this event is
7910          not interesting.  */
7911       if (ret != -1 && is_notif)
7912         return minus_one_ptid;
7913
7914       if (ret == -1 && (options & TARGET_WNOHANG) != 0)
7915         return minus_one_ptid;
7916     }
7917
7918   buf = rs->buf;
7919
7920   /* Assume that the target has acknowledged Ctrl-C unless we receive
7921      an 'F' or 'O' packet.  */
7922   if (buf[0] != 'F' && buf[0] != 'O')
7923     rs->ctrlc_pending_p = 0;
7924
7925   switch (buf[0])
7926     {
7927     case 'E':           /* Error of some sort.  */
7928       /* We're out of sync with the target now.  Did it continue or
7929          not?  Not is more likely, so report a stop.  */
7930       rs->waiting_for_stop_reply = 0;
7931
7932       warning (_("Remote failure reply: %s"), buf);
7933       status->kind = TARGET_WAITKIND_STOPPED;
7934       status->value.sig = GDB_SIGNAL_0;
7935       break;
7936     case 'F':           /* File-I/O request.  */
7937       /* GDB may access the inferior memory while handling the File-I/O
7938          request, but we don't want GDB accessing memory while waiting
7939          for a stop reply.  See the comments in putpkt_binary.  Set
7940          waiting_for_stop_reply to 0 temporarily.  */
7941       rs->waiting_for_stop_reply = 0;
7942       remote_fileio_request (this, buf, rs->ctrlc_pending_p);
7943       rs->ctrlc_pending_p = 0;
7944       /* GDB handled the File-I/O request, and the target is running
7945          again.  Keep waiting for events.  */
7946       rs->waiting_for_stop_reply = 1;
7947       break;
7948     case 'N': case 'T': case 'S': case 'X': case 'W':
7949       {
7950         struct stop_reply *stop_reply;
7951
7952         /* There is a stop reply to handle.  */
7953         rs->waiting_for_stop_reply = 0;
7954
7955         stop_reply
7956           = (struct stop_reply *) remote_notif_parse (this,
7957                                                       &notif_client_stop,
7958                                                       rs->buf);
7959
7960         event_ptid = process_stop_reply (stop_reply, status);
7961         break;
7962       }
7963     case 'O':           /* Console output.  */
7964       remote_console_output (buf + 1);
7965       break;
7966     case '\0':
7967       if (rs->last_sent_signal != GDB_SIGNAL_0)
7968         {
7969           /* Zero length reply means that we tried 'S' or 'C' and the
7970              remote system doesn't support it.  */
7971           target_terminal::ours_for_output ();
7972           printf_filtered
7973             ("Can't send signals to this remote system.  %s not sent.\n",
7974              gdb_signal_to_name (rs->last_sent_signal));
7975           rs->last_sent_signal = GDB_SIGNAL_0;
7976           target_terminal::inferior ();
7977
7978           strcpy (buf, rs->last_sent_step ? "s" : "c");
7979           putpkt (buf);
7980           break;
7981         }
7982       /* fallthrough */
7983     default:
7984       warning (_("Invalid remote reply: %s"), buf);
7985       break;
7986     }
7987
7988   if (status->kind == TARGET_WAITKIND_NO_RESUMED)
7989     return minus_one_ptid;
7990   else if (status->kind == TARGET_WAITKIND_IGNORE)
7991     {
7992       /* Nothing interesting happened.  If we're doing a non-blocking
7993          poll, we're done.  Otherwise, go back to waiting.  */
7994       if (options & TARGET_WNOHANG)
7995         return minus_one_ptid;
7996       else
7997         goto again;
7998     }
7999   else if (status->kind != TARGET_WAITKIND_EXITED
8000            && status->kind != TARGET_WAITKIND_SIGNALLED)
8001     {
8002       if (!ptid_equal (event_ptid, null_ptid))
8003         record_currthread (rs, event_ptid);
8004       else
8005         event_ptid = inferior_ptid;
8006     }
8007   else
8008     /* A process exit.  Invalidate our notion of current thread.  */
8009     record_currthread (rs, minus_one_ptid);
8010
8011   return event_ptid;
8012 }
8013
8014 /* Wait until the remote machine stops, then return, storing status in
8015    STATUS just as `wait' would.  */
8016
8017 ptid_t
8018 remote_target::wait (ptid_t ptid, struct target_waitstatus *status, int options)
8019 {
8020   ptid_t event_ptid;
8021
8022   if (target_is_non_stop_p ())
8023     event_ptid = wait_ns (ptid, status, options);
8024   else
8025     event_ptid = wait_as (ptid, status, options);
8026
8027   if (target_is_async_p ())
8028     {
8029       remote_state *rs = get_remote_state ();
8030
8031       /* If there are are events left in the queue tell the event loop
8032          to return here.  */
8033       if (!QUEUE_is_empty (stop_reply_p, rs->stop_reply_queue))
8034         mark_async_event_handler (rs->remote_async_inferior_event_token);
8035     }
8036
8037   return event_ptid;
8038 }
8039
8040 /* Fetch a single register using a 'p' packet.  */
8041
8042 int
8043 remote_target::fetch_register_using_p (struct regcache *regcache,
8044                                        packet_reg *reg)
8045 {
8046   struct gdbarch *gdbarch = regcache->arch ();
8047   struct remote_state *rs = get_remote_state ();
8048   char *buf, *p;
8049   gdb_byte *regp = (gdb_byte *) alloca (register_size (gdbarch, reg->regnum));
8050   int i;
8051
8052   if (packet_support (PACKET_p) == PACKET_DISABLE)
8053     return 0;
8054
8055   if (reg->pnum == -1)
8056     return 0;
8057
8058   p = rs->buf;
8059   *p++ = 'p';
8060   p += hexnumstr (p, reg->pnum);
8061   *p++ = '\0';
8062   putpkt (rs->buf);
8063   getpkt (&rs->buf, &rs->buf_size, 0);
8064
8065   buf = rs->buf;
8066
8067   switch (packet_ok (buf, &remote_protocol_packets[PACKET_p]))
8068     {
8069     case PACKET_OK:
8070       break;
8071     case PACKET_UNKNOWN:
8072       return 0;
8073     case PACKET_ERROR:
8074       error (_("Could not fetch register \"%s\"; remote failure reply '%s'"),
8075              gdbarch_register_name (regcache->arch (), 
8076                                     reg->regnum), 
8077              buf);
8078     }
8079
8080   /* If this register is unfetchable, tell the regcache.  */
8081   if (buf[0] == 'x')
8082     {
8083       regcache_raw_supply (regcache, reg->regnum, NULL);
8084       return 1;
8085     }
8086
8087   /* Otherwise, parse and supply the value.  */
8088   p = buf;
8089   i = 0;
8090   while (p[0] != 0)
8091     {
8092       if (p[1] == 0)
8093         error (_("fetch_register_using_p: early buf termination"));
8094
8095       regp[i++] = fromhex (p[0]) * 16 + fromhex (p[1]);
8096       p += 2;
8097     }
8098   regcache_raw_supply (regcache, reg->regnum, regp);
8099   return 1;
8100 }
8101
8102 /* Fetch the registers included in the target's 'g' packet.  */
8103
8104 int
8105 remote_target::send_g_packet ()
8106 {
8107   struct remote_state *rs = get_remote_state ();
8108   int buf_len;
8109
8110   xsnprintf (rs->buf, get_remote_packet_size (), "g");
8111   putpkt (rs->buf);
8112   getpkt (&rs->buf, &rs->buf_size, 0);
8113   if (packet_check_result (rs->buf) == PACKET_ERROR)
8114     error (_("Could not read registers; remote failure reply '%s'"),
8115            rs->buf);
8116
8117   /* We can get out of synch in various cases.  If the first character
8118      in the buffer is not a hex character, assume that has happened
8119      and try to fetch another packet to read.  */
8120   while ((rs->buf[0] < '0' || rs->buf[0] > '9')
8121          && (rs->buf[0] < 'A' || rs->buf[0] > 'F')
8122          && (rs->buf[0] < 'a' || rs->buf[0] > 'f')
8123          && rs->buf[0] != 'x')  /* New: unavailable register value.  */
8124     {
8125       if (remote_debug)
8126         fprintf_unfiltered (gdb_stdlog,
8127                             "Bad register packet; fetching a new packet\n");
8128       getpkt (&rs->buf, &rs->buf_size, 0);
8129     }
8130
8131   buf_len = strlen (rs->buf);
8132
8133   /* Sanity check the received packet.  */
8134   if (buf_len % 2 != 0)
8135     error (_("Remote 'g' packet reply is of odd length: %s"), rs->buf);
8136
8137   return buf_len / 2;
8138 }
8139
8140 void
8141 remote_target::process_g_packet (struct regcache *regcache)
8142 {
8143   struct gdbarch *gdbarch = regcache->arch ();
8144   struct remote_state *rs = get_remote_state ();
8145   remote_arch_state *rsa = rs->get_remote_arch_state (gdbarch);
8146   int i, buf_len;
8147   char *p;
8148   char *regs;
8149
8150   buf_len = strlen (rs->buf);
8151
8152   /* Further sanity checks, with knowledge of the architecture.  */
8153   if (buf_len > 2 * rsa->sizeof_g_packet)
8154     error (_("Remote 'g' packet reply is too long (expected %ld bytes, got %d "
8155              "bytes): %s"), rsa->sizeof_g_packet, buf_len / 2, rs->buf);
8156
8157   /* Save the size of the packet sent to us by the target.  It is used
8158      as a heuristic when determining the max size of packets that the
8159      target can safely receive.  */
8160   if (rsa->actual_register_packet_size == 0)
8161     rsa->actual_register_packet_size = buf_len;
8162
8163   /* If this is smaller than we guessed the 'g' packet would be,
8164      update our records.  A 'g' reply that doesn't include a register's
8165      value implies either that the register is not available, or that
8166      the 'p' packet must be used.  */
8167   if (buf_len < 2 * rsa->sizeof_g_packet)
8168     {
8169       long sizeof_g_packet = buf_len / 2;
8170
8171       for (i = 0; i < gdbarch_num_regs (gdbarch); i++)
8172         {
8173           long offset = rsa->regs[i].offset;
8174           long reg_size = register_size (gdbarch, i);
8175
8176           if (rsa->regs[i].pnum == -1)
8177             continue;
8178
8179           if (offset >= sizeof_g_packet)
8180             rsa->regs[i].in_g_packet = 0;
8181           else if (offset + reg_size > sizeof_g_packet)
8182             error (_("Truncated register %d in remote 'g' packet"), i);
8183           else
8184             rsa->regs[i].in_g_packet = 1;
8185         }
8186
8187       /* Looks valid enough, we can assume this is the correct length
8188          for a 'g' packet.  It's important not to adjust
8189          rsa->sizeof_g_packet if we have truncated registers otherwise
8190          this "if" won't be run the next time the method is called
8191          with a packet of the same size and one of the internal errors
8192          below will trigger instead.  */
8193       rsa->sizeof_g_packet = sizeof_g_packet;
8194     }
8195
8196   regs = (char *) alloca (rsa->sizeof_g_packet);
8197
8198   /* Unimplemented registers read as all bits zero.  */
8199   memset (regs, 0, rsa->sizeof_g_packet);
8200
8201   /* Reply describes registers byte by byte, each byte encoded as two
8202      hex characters.  Suck them all up, then supply them to the
8203      register cacheing/storage mechanism.  */
8204
8205   p = rs->buf;
8206   for (i = 0; i < rsa->sizeof_g_packet; i++)
8207     {
8208       if (p[0] == 0 || p[1] == 0)
8209         /* This shouldn't happen - we adjusted sizeof_g_packet above.  */
8210         internal_error (__FILE__, __LINE__,
8211                         _("unexpected end of 'g' packet reply"));
8212
8213       if (p[0] == 'x' && p[1] == 'x')
8214         regs[i] = 0;            /* 'x' */
8215       else
8216         regs[i] = fromhex (p[0]) * 16 + fromhex (p[1]);
8217       p += 2;
8218     }
8219
8220   for (i = 0; i < gdbarch_num_regs (gdbarch); i++)
8221     {
8222       struct packet_reg *r = &rsa->regs[i];
8223       long reg_size = register_size (gdbarch, i);
8224
8225       if (r->in_g_packet)
8226         {
8227           if ((r->offset + reg_size) * 2 > strlen (rs->buf))
8228             /* This shouldn't happen - we adjusted in_g_packet above.  */
8229             internal_error (__FILE__, __LINE__,
8230                             _("unexpected end of 'g' packet reply"));
8231           else if (rs->buf[r->offset * 2] == 'x')
8232             {
8233               gdb_assert (r->offset * 2 < strlen (rs->buf));
8234               /* The register isn't available, mark it as such (at
8235                  the same time setting the value to zero).  */
8236               regcache_raw_supply (regcache, r->regnum, NULL);
8237             }
8238           else
8239             regcache_raw_supply (regcache, r->regnum,
8240                                  regs + r->offset);
8241         }
8242     }
8243 }
8244
8245 void
8246 remote_target::fetch_registers_using_g (struct regcache *regcache)
8247 {
8248   send_g_packet ();
8249   process_g_packet (regcache);
8250 }
8251
8252 /* Make the remote selected traceframe match GDB's selected
8253    traceframe.  */
8254
8255 void
8256 remote_target::set_remote_traceframe ()
8257 {
8258   int newnum;
8259   struct remote_state *rs = get_remote_state ();
8260
8261   if (rs->remote_traceframe_number == get_traceframe_number ())
8262     return;
8263
8264   /* Avoid recursion, remote_trace_find calls us again.  */
8265   rs->remote_traceframe_number = get_traceframe_number ();
8266
8267   newnum = target_trace_find (tfind_number,
8268                               get_traceframe_number (), 0, 0, NULL);
8269
8270   /* Should not happen.  If it does, all bets are off.  */
8271   if (newnum != get_traceframe_number ())
8272     warning (_("could not set remote traceframe"));
8273 }
8274
8275 void
8276 remote_target::fetch_registers (struct regcache *regcache, int regnum)
8277 {
8278   struct gdbarch *gdbarch = regcache->arch ();
8279   struct remote_state *rs = get_remote_state ();
8280   remote_arch_state *rsa = rs->get_remote_arch_state (gdbarch);
8281   int i;
8282
8283   set_remote_traceframe ();
8284   set_general_thread (regcache->ptid ());
8285
8286   if (regnum >= 0)
8287     {
8288       packet_reg *reg = packet_reg_from_regnum (gdbarch, rsa, regnum);
8289
8290       gdb_assert (reg != NULL);
8291
8292       /* If this register might be in the 'g' packet, try that first -
8293          we are likely to read more than one register.  If this is the
8294          first 'g' packet, we might be overly optimistic about its
8295          contents, so fall back to 'p'.  */
8296       if (reg->in_g_packet)
8297         {
8298           fetch_registers_using_g (regcache);
8299           if (reg->in_g_packet)
8300             return;
8301         }
8302
8303       if (fetch_register_using_p (regcache, reg))
8304         return;
8305
8306       /* This register is not available.  */
8307       regcache_raw_supply (regcache, reg->regnum, NULL);
8308
8309       return;
8310     }
8311
8312   fetch_registers_using_g (regcache);
8313
8314   for (i = 0; i < gdbarch_num_regs (gdbarch); i++)
8315     if (!rsa->regs[i].in_g_packet)
8316       if (!fetch_register_using_p (regcache, &rsa->regs[i]))
8317         {
8318           /* This register is not available.  */
8319           regcache_raw_supply (regcache, i, NULL);
8320         }
8321 }
8322
8323 /* Prepare to store registers.  Since we may send them all (using a
8324    'G' request), we have to read out the ones we don't want to change
8325    first.  */
8326
8327 void
8328 remote_target::prepare_to_store (struct regcache *regcache)
8329 {
8330   struct remote_state *rs = get_remote_state ();
8331   remote_arch_state *rsa = rs->get_remote_arch_state (regcache->arch ());
8332   int i;
8333
8334   /* Make sure the entire registers array is valid.  */
8335   switch (packet_support (PACKET_P))
8336     {
8337     case PACKET_DISABLE:
8338     case PACKET_SUPPORT_UNKNOWN:
8339       /* Make sure all the necessary registers are cached.  */
8340       for (i = 0; i < gdbarch_num_regs (regcache->arch ()); i++)
8341         if (rsa->regs[i].in_g_packet)
8342           regcache->raw_update (rsa->regs[i].regnum);
8343       break;
8344     case PACKET_ENABLE:
8345       break;
8346     }
8347 }
8348
8349 /* Helper: Attempt to store REGNUM using the P packet.  Return fail IFF
8350    packet was not recognized.  */
8351
8352 int
8353 remote_target::store_register_using_P (const struct regcache *regcache,
8354                                        packet_reg *reg)
8355 {
8356   struct gdbarch *gdbarch = regcache->arch ();
8357   struct remote_state *rs = get_remote_state ();
8358   /* Try storing a single register.  */
8359   char *buf = rs->buf;
8360   gdb_byte *regp = (gdb_byte *) alloca (register_size (gdbarch, reg->regnum));
8361   char *p;
8362
8363   if (packet_support (PACKET_P) == PACKET_DISABLE)
8364     return 0;
8365
8366   if (reg->pnum == -1)
8367     return 0;
8368
8369   xsnprintf (buf, get_remote_packet_size (), "P%s=", phex_nz (reg->pnum, 0));
8370   p = buf + strlen (buf);
8371   regcache_raw_collect (regcache, reg->regnum, regp);
8372   bin2hex (regp, p, register_size (gdbarch, reg->regnum));
8373   putpkt (rs->buf);
8374   getpkt (&rs->buf, &rs->buf_size, 0);
8375
8376   switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_P]))
8377     {
8378     case PACKET_OK:
8379       return 1;
8380     case PACKET_ERROR:
8381       error (_("Could not write register \"%s\"; remote failure reply '%s'"),
8382              gdbarch_register_name (gdbarch, reg->regnum), rs->buf);
8383     case PACKET_UNKNOWN:
8384       return 0;
8385     default:
8386       internal_error (__FILE__, __LINE__, _("Bad result from packet_ok"));
8387     }
8388 }
8389
8390 /* Store register REGNUM, or all registers if REGNUM == -1, from the
8391    contents of the register cache buffer.  FIXME: ignores errors.  */
8392
8393 void
8394 remote_target::store_registers_using_G (const struct regcache *regcache)
8395 {
8396   struct remote_state *rs = get_remote_state ();
8397   remote_arch_state *rsa = rs->get_remote_arch_state (regcache->arch ());
8398   gdb_byte *regs;
8399   char *p;
8400
8401   /* Extract all the registers in the regcache copying them into a
8402      local buffer.  */
8403   {
8404     int i;
8405
8406     regs = (gdb_byte *) alloca (rsa->sizeof_g_packet);
8407     memset (regs, 0, rsa->sizeof_g_packet);
8408     for (i = 0; i < gdbarch_num_regs (regcache->arch ()); i++)
8409       {
8410         struct packet_reg *r = &rsa->regs[i];
8411
8412         if (r->in_g_packet)
8413           regcache_raw_collect (regcache, r->regnum, regs + r->offset);
8414       }
8415   }
8416
8417   /* Command describes registers byte by byte,
8418      each byte encoded as two hex characters.  */
8419   p = rs->buf;
8420   *p++ = 'G';
8421   bin2hex (regs, p, rsa->sizeof_g_packet);
8422   putpkt (rs->buf);
8423   getpkt (&rs->buf, &rs->buf_size, 0);
8424   if (packet_check_result (rs->buf) == PACKET_ERROR)
8425     error (_("Could not write registers; remote failure reply '%s'"), 
8426            rs->buf);
8427 }
8428
8429 /* Store register REGNUM, or all registers if REGNUM == -1, from the contents
8430    of the register cache buffer.  FIXME: ignores errors.  */
8431
8432 void
8433 remote_target::store_registers (struct regcache *regcache, int regnum)
8434 {
8435   struct gdbarch *gdbarch = regcache->arch ();
8436   struct remote_state *rs = get_remote_state ();
8437   remote_arch_state *rsa = rs->get_remote_arch_state (gdbarch);
8438   int i;
8439
8440   set_remote_traceframe ();
8441   set_general_thread (regcache->ptid ());
8442
8443   if (regnum >= 0)
8444     {
8445       packet_reg *reg = packet_reg_from_regnum (gdbarch, rsa, regnum);
8446
8447       gdb_assert (reg != NULL);
8448
8449       /* Always prefer to store registers using the 'P' packet if
8450          possible; we often change only a small number of registers.
8451          Sometimes we change a larger number; we'd need help from a
8452          higher layer to know to use 'G'.  */
8453       if (store_register_using_P (regcache, reg))
8454         return;
8455
8456       /* For now, don't complain if we have no way to write the
8457          register.  GDB loses track of unavailable registers too
8458          easily.  Some day, this may be an error.  We don't have
8459          any way to read the register, either...  */
8460       if (!reg->in_g_packet)
8461         return;
8462
8463       store_registers_using_G (regcache);
8464       return;
8465     }
8466
8467   store_registers_using_G (regcache);
8468
8469   for (i = 0; i < gdbarch_num_regs (gdbarch); i++)
8470     if (!rsa->regs[i].in_g_packet)
8471       if (!store_register_using_P (regcache, &rsa->regs[i]))
8472         /* See above for why we do not issue an error here.  */
8473         continue;
8474 }
8475 \f
8476
8477 /* Return the number of hex digits in num.  */
8478
8479 static int
8480 hexnumlen (ULONGEST num)
8481 {
8482   int i;
8483
8484   for (i = 0; num != 0; i++)
8485     num >>= 4;
8486
8487   return std::max (i, 1);
8488 }
8489
8490 /* Set BUF to the minimum number of hex digits representing NUM.  */
8491
8492 static int
8493 hexnumstr (char *buf, ULONGEST num)
8494 {
8495   int len = hexnumlen (num);
8496
8497   return hexnumnstr (buf, num, len);
8498 }
8499
8500
8501 /* Set BUF to the hex digits representing NUM, padded to WIDTH characters.  */
8502
8503 static int
8504 hexnumnstr (char *buf, ULONGEST num, int width)
8505 {
8506   int i;
8507
8508   buf[width] = '\0';
8509
8510   for (i = width - 1; i >= 0; i--)
8511     {
8512       buf[i] = "0123456789abcdef"[(num & 0xf)];
8513       num >>= 4;
8514     }
8515
8516   return width;
8517 }
8518
8519 /* Mask all but the least significant REMOTE_ADDRESS_SIZE bits.  */
8520
8521 static CORE_ADDR
8522 remote_address_masked (CORE_ADDR addr)
8523 {
8524   unsigned int address_size = remote_address_size;
8525
8526   /* If "remoteaddresssize" was not set, default to target address size.  */
8527   if (!address_size)
8528     address_size = gdbarch_addr_bit (target_gdbarch ());
8529
8530   if (address_size > 0
8531       && address_size < (sizeof (ULONGEST) * 8))
8532     {
8533       /* Only create a mask when that mask can safely be constructed
8534          in a ULONGEST variable.  */
8535       ULONGEST mask = 1;
8536
8537       mask = (mask << address_size) - 1;
8538       addr &= mask;
8539     }
8540   return addr;
8541 }
8542
8543 /* Determine whether the remote target supports binary downloading.
8544    This is accomplished by sending a no-op memory write of zero length
8545    to the target at the specified address. It does not suffice to send
8546    the whole packet, since many stubs strip the eighth bit and
8547    subsequently compute a wrong checksum, which causes real havoc with
8548    remote_write_bytes.
8549
8550    NOTE: This can still lose if the serial line is not eight-bit
8551    clean.  In cases like this, the user should clear "remote
8552    X-packet".  */
8553
8554 void
8555 remote_target::check_binary_download (CORE_ADDR addr)
8556 {
8557   struct remote_state *rs = get_remote_state ();
8558
8559   switch (packet_support (PACKET_X))
8560     {
8561     case PACKET_DISABLE:
8562       break;
8563     case PACKET_ENABLE:
8564       break;
8565     case PACKET_SUPPORT_UNKNOWN:
8566       {
8567         char *p;
8568
8569         p = rs->buf;
8570         *p++ = 'X';
8571         p += hexnumstr (p, (ULONGEST) addr);
8572         *p++ = ',';
8573         p += hexnumstr (p, (ULONGEST) 0);
8574         *p++ = ':';
8575         *p = '\0';
8576
8577         putpkt_binary (rs->buf, (int) (p - rs->buf));
8578         getpkt (&rs->buf, &rs->buf_size, 0);
8579
8580         if (rs->buf[0] == '\0')
8581           {
8582             if (remote_debug)
8583               fprintf_unfiltered (gdb_stdlog,
8584                                   "binary downloading NOT "
8585                                   "supported by target\n");
8586             remote_protocol_packets[PACKET_X].support = PACKET_DISABLE;
8587           }
8588         else
8589           {
8590             if (remote_debug)
8591               fprintf_unfiltered (gdb_stdlog,
8592                                   "binary downloading supported by target\n");
8593             remote_protocol_packets[PACKET_X].support = PACKET_ENABLE;
8594           }
8595         break;
8596       }
8597     }
8598 }
8599
8600 /* Helper function to resize the payload in order to try to get a good
8601    alignment.  We try to write an amount of data such that the next write will
8602    start on an address aligned on REMOTE_ALIGN_WRITES.  */
8603
8604 static int
8605 align_for_efficient_write (int todo, CORE_ADDR memaddr)
8606 {
8607   return ((memaddr + todo) & ~(REMOTE_ALIGN_WRITES - 1)) - memaddr;
8608 }
8609
8610 /* Write memory data directly to the remote machine.
8611    This does not inform the data cache; the data cache uses this.
8612    HEADER is the starting part of the packet.
8613    MEMADDR is the address in the remote memory space.
8614    MYADDR is the address of the buffer in our space.
8615    LEN_UNITS is the number of addressable units to write.
8616    UNIT_SIZE is the length in bytes of an addressable unit.
8617    PACKET_FORMAT should be either 'X' or 'M', and indicates if we
8618    should send data as binary ('X'), or hex-encoded ('M').
8619
8620    The function creates packet of the form
8621        <HEADER><ADDRESS>,<LENGTH>:<DATA>
8622
8623    where encoding of <DATA> is terminated by PACKET_FORMAT.
8624
8625    If USE_LENGTH is 0, then the <LENGTH> field and the preceding comma
8626    are omitted.
8627
8628    Return the transferred status, error or OK (an
8629    'enum target_xfer_status' value).  Save the number of addressable units
8630    transferred in *XFERED_LEN_UNITS.  Only transfer a single packet.
8631
8632    On a platform with an addressable memory size of 2 bytes (UNIT_SIZE == 2), an
8633    exchange between gdb and the stub could look like (?? in place of the
8634    checksum):
8635
8636    -> $m1000,4#??
8637    <- aaaabbbbccccdddd
8638
8639    -> $M1000,3:eeeeffffeeee#??
8640    <- OK
8641
8642    -> $m1000,4#??
8643    <- eeeeffffeeeedddd  */
8644
8645 target_xfer_status
8646 remote_target::remote_write_bytes_aux (const char *header, CORE_ADDR memaddr,
8647                                        const gdb_byte *myaddr,
8648                                        ULONGEST len_units,
8649                                        int unit_size,
8650                                        ULONGEST *xfered_len_units,
8651                                        char packet_format, int use_length)
8652 {
8653   struct remote_state *rs = get_remote_state ();
8654   char *p;
8655   char *plen = NULL;
8656   int plenlen = 0;
8657   int todo_units;
8658   int units_written;
8659   int payload_capacity_bytes;
8660   int payload_length_bytes;
8661
8662   if (packet_format != 'X' && packet_format != 'M')
8663     internal_error (__FILE__, __LINE__,
8664                     _("remote_write_bytes_aux: bad packet format"));
8665
8666   if (len_units == 0)
8667     return TARGET_XFER_EOF;
8668
8669   payload_capacity_bytes = get_memory_write_packet_size ();
8670
8671   /* The packet buffer will be large enough for the payload;
8672      get_memory_packet_size ensures this.  */
8673   rs->buf[0] = '\0';
8674
8675   /* Compute the size of the actual payload by subtracting out the
8676      packet header and footer overhead: "$M<memaddr>,<len>:...#nn".  */
8677
8678   payload_capacity_bytes -= strlen ("$,:#NN");
8679   if (!use_length)
8680     /* The comma won't be used.  */
8681     payload_capacity_bytes += 1;
8682   payload_capacity_bytes -= strlen (header);
8683   payload_capacity_bytes -= hexnumlen (memaddr);
8684
8685   /* Construct the packet excluding the data: "<header><memaddr>,<len>:".  */
8686
8687   strcat (rs->buf, header);
8688   p = rs->buf + strlen (header);
8689
8690   /* Compute a best guess of the number of bytes actually transfered.  */
8691   if (packet_format == 'X')
8692     {
8693       /* Best guess at number of bytes that will fit.  */
8694       todo_units = std::min (len_units,
8695                              (ULONGEST) payload_capacity_bytes / unit_size);
8696       if (use_length)
8697         payload_capacity_bytes -= hexnumlen (todo_units);
8698       todo_units = std::min (todo_units, payload_capacity_bytes / unit_size);
8699     }
8700   else
8701     {
8702       /* Number of bytes that will fit.  */
8703       todo_units
8704         = std::min (len_units,
8705                     (ULONGEST) (payload_capacity_bytes / unit_size) / 2);
8706       if (use_length)
8707         payload_capacity_bytes -= hexnumlen (todo_units);
8708       todo_units = std::min (todo_units,
8709                              (payload_capacity_bytes / unit_size) / 2);
8710     }
8711
8712   if (todo_units <= 0)
8713     internal_error (__FILE__, __LINE__,
8714                     _("minimum packet size too small to write data"));
8715
8716   /* If we already need another packet, then try to align the end
8717      of this packet to a useful boundary.  */
8718   if (todo_units > 2 * REMOTE_ALIGN_WRITES && todo_units < len_units)
8719     todo_units = align_for_efficient_write (todo_units, memaddr);
8720
8721   /* Append "<memaddr>".  */
8722   memaddr = remote_address_masked (memaddr);
8723   p += hexnumstr (p, (ULONGEST) memaddr);
8724
8725   if (use_length)
8726     {
8727       /* Append ",".  */
8728       *p++ = ',';
8729
8730       /* Append the length and retain its location and size.  It may need to be
8731          adjusted once the packet body has been created.  */
8732       plen = p;
8733       plenlen = hexnumstr (p, (ULONGEST) todo_units);
8734       p += plenlen;
8735     }
8736
8737   /* Append ":".  */
8738   *p++ = ':';
8739   *p = '\0';
8740
8741   /* Append the packet body.  */
8742   if (packet_format == 'X')
8743     {
8744       /* Binary mode.  Send target system values byte by byte, in
8745          increasing byte addresses.  Only escape certain critical
8746          characters.  */
8747       payload_length_bytes =
8748           remote_escape_output (myaddr, todo_units, unit_size, (gdb_byte *) p,
8749                                 &units_written, payload_capacity_bytes);
8750
8751       /* If not all TODO units fit, then we'll need another packet.  Make
8752          a second try to keep the end of the packet aligned.  Don't do
8753          this if the packet is tiny.  */
8754       if (units_written < todo_units && units_written > 2 * REMOTE_ALIGN_WRITES)
8755         {
8756           int new_todo_units;
8757
8758           new_todo_units = align_for_efficient_write (units_written, memaddr);
8759
8760           if (new_todo_units != units_written)
8761             payload_length_bytes =
8762                 remote_escape_output (myaddr, new_todo_units, unit_size,
8763                                       (gdb_byte *) p, &units_written,
8764                                       payload_capacity_bytes);
8765         }
8766
8767       p += payload_length_bytes;
8768       if (use_length && units_written < todo_units)
8769         {
8770           /* Escape chars have filled up the buffer prematurely,
8771              and we have actually sent fewer units than planned.
8772              Fix-up the length field of the packet.  Use the same
8773              number of characters as before.  */
8774           plen += hexnumnstr (plen, (ULONGEST) units_written,
8775                               plenlen);
8776           *plen = ':';  /* overwrite \0 from hexnumnstr() */
8777         }
8778     }
8779   else
8780     {
8781       /* Normal mode: Send target system values byte by byte, in
8782          increasing byte addresses.  Each byte is encoded as a two hex
8783          value.  */
8784       p += 2 * bin2hex (myaddr, p, todo_units * unit_size);
8785       units_written = todo_units;
8786     }
8787
8788   putpkt_binary (rs->buf, (int) (p - rs->buf));
8789   getpkt (&rs->buf, &rs->buf_size, 0);
8790
8791   if (rs->buf[0] == 'E')
8792     return TARGET_XFER_E_IO;
8793
8794   /* Return UNITS_WRITTEN, not TODO_UNITS, in case escape chars caused us to
8795      send fewer units than we'd planned.  */
8796   *xfered_len_units = (ULONGEST) units_written;
8797   return (*xfered_len_units != 0) ? TARGET_XFER_OK : TARGET_XFER_EOF;
8798 }
8799
8800 /* Write memory data directly to the remote machine.
8801    This does not inform the data cache; the data cache uses this.
8802    MEMADDR is the address in the remote memory space.
8803    MYADDR is the address of the buffer in our space.
8804    LEN is the number of bytes.
8805
8806    Return the transferred status, error or OK (an
8807    'enum target_xfer_status' value).  Save the number of bytes
8808    transferred in *XFERED_LEN.  Only transfer a single packet.  */
8809
8810 target_xfer_status
8811 remote_target::remote_write_bytes (CORE_ADDR memaddr, const gdb_byte *myaddr,
8812                                    ULONGEST len, int unit_size,
8813                                    ULONGEST *xfered_len)
8814 {
8815   const char *packet_format = NULL;
8816
8817   /* Check whether the target supports binary download.  */
8818   check_binary_download (memaddr);
8819
8820   switch (packet_support (PACKET_X))
8821     {
8822     case PACKET_ENABLE:
8823       packet_format = "X";
8824       break;
8825     case PACKET_DISABLE:
8826       packet_format = "M";
8827       break;
8828     case PACKET_SUPPORT_UNKNOWN:
8829       internal_error (__FILE__, __LINE__,
8830                       _("remote_write_bytes: bad internal state"));
8831     default:
8832       internal_error (__FILE__, __LINE__, _("bad switch"));
8833     }
8834
8835   return remote_write_bytes_aux (packet_format,
8836                                  memaddr, myaddr, len, unit_size, xfered_len,
8837                                  packet_format[0], 1);
8838 }
8839
8840 /* Read memory data directly from the remote machine.
8841    This does not use the data cache; the data cache uses this.
8842    MEMADDR is the address in the remote memory space.
8843    MYADDR is the address of the buffer in our space.
8844    LEN_UNITS is the number of addressable memory units to read..
8845    UNIT_SIZE is the length in bytes of an addressable unit.
8846
8847    Return the transferred status, error or OK (an
8848    'enum target_xfer_status' value).  Save the number of bytes
8849    transferred in *XFERED_LEN_UNITS.
8850
8851    See the comment of remote_write_bytes_aux for an example of
8852    memory read/write exchange between gdb and the stub.  */
8853
8854 target_xfer_status
8855 remote_target::remote_read_bytes_1 (CORE_ADDR memaddr, gdb_byte *myaddr,
8856                                     ULONGEST len_units,
8857                                     int unit_size, ULONGEST *xfered_len_units)
8858 {
8859   struct remote_state *rs = get_remote_state ();
8860   int buf_size_bytes;           /* Max size of packet output buffer.  */
8861   char *p;
8862   int todo_units;
8863   int decoded_bytes;
8864
8865   buf_size_bytes = get_memory_read_packet_size ();
8866   /* The packet buffer will be large enough for the payload;
8867      get_memory_packet_size ensures this.  */
8868
8869   /* Number of units that will fit.  */
8870   todo_units = std::min (len_units,
8871                          (ULONGEST) (buf_size_bytes / unit_size) / 2);
8872
8873   /* Construct "m"<memaddr>","<len>".  */
8874   memaddr = remote_address_masked (memaddr);
8875   p = rs->buf;
8876   *p++ = 'm';
8877   p += hexnumstr (p, (ULONGEST) memaddr);
8878   *p++ = ',';
8879   p += hexnumstr (p, (ULONGEST) todo_units);
8880   *p = '\0';
8881   putpkt (rs->buf);
8882   getpkt (&rs->buf, &rs->buf_size, 0);
8883   if (rs->buf[0] == 'E'
8884       && isxdigit (rs->buf[1]) && isxdigit (rs->buf[2])
8885       && rs->buf[3] == '\0')
8886     return TARGET_XFER_E_IO;
8887   /* Reply describes memory byte by byte, each byte encoded as two hex
8888      characters.  */
8889   p = rs->buf;
8890   decoded_bytes = hex2bin (p, myaddr, todo_units * unit_size);
8891   /* Return what we have.  Let higher layers handle partial reads.  */
8892   *xfered_len_units = (ULONGEST) (decoded_bytes / unit_size);
8893   return (*xfered_len_units != 0) ? TARGET_XFER_OK : TARGET_XFER_EOF;
8894 }
8895
8896 /* Using the set of read-only target sections of remote, read live
8897    read-only memory.
8898
8899    For interface/parameters/return description see target.h,
8900    to_xfer_partial.  */
8901
8902 target_xfer_status
8903 remote_target::remote_xfer_live_readonly_partial (gdb_byte *readbuf,
8904                                                   ULONGEST memaddr,
8905                                                   ULONGEST len,
8906                                                   int unit_size,
8907                                                   ULONGEST *xfered_len)
8908 {
8909   struct target_section *secp;
8910   struct target_section_table *table;
8911
8912   secp = target_section_by_addr (this, memaddr);
8913   if (secp != NULL
8914       && (bfd_get_section_flags (secp->the_bfd_section->owner,
8915                                  secp->the_bfd_section)
8916           & SEC_READONLY))
8917     {
8918       struct target_section *p;
8919       ULONGEST memend = memaddr + len;
8920
8921       table = target_get_section_table (this);
8922
8923       for (p = table->sections; p < table->sections_end; p++)
8924         {
8925           if (memaddr >= p->addr)
8926             {
8927               if (memend <= p->endaddr)
8928                 {
8929                   /* Entire transfer is within this section.  */
8930                   return remote_read_bytes_1 (memaddr, readbuf, len, unit_size,
8931                                               xfered_len);
8932                 }
8933               else if (memaddr >= p->endaddr)
8934                 {
8935                   /* This section ends before the transfer starts.  */
8936                   continue;
8937                 }
8938               else
8939                 {
8940                   /* This section overlaps the transfer.  Just do half.  */
8941                   len = p->endaddr - memaddr;
8942                   return remote_read_bytes_1 (memaddr, readbuf, len, unit_size,
8943                                               xfered_len);
8944                 }
8945             }
8946         }
8947     }
8948
8949   return TARGET_XFER_EOF;
8950 }
8951
8952 /* Similar to remote_read_bytes_1, but it reads from the remote stub
8953    first if the requested memory is unavailable in traceframe.
8954    Otherwise, fall back to remote_read_bytes_1.  */
8955
8956 target_xfer_status
8957 remote_target::remote_read_bytes (CORE_ADDR memaddr,
8958                                   gdb_byte *myaddr, ULONGEST len, int unit_size,
8959                                   ULONGEST *xfered_len)
8960 {
8961   if (len == 0)
8962     return TARGET_XFER_EOF;
8963
8964   if (get_traceframe_number () != -1)
8965     {
8966       std::vector<mem_range> available;
8967
8968       /* If we fail to get the set of available memory, then the
8969          target does not support querying traceframe info, and so we
8970          attempt reading from the traceframe anyway (assuming the
8971          target implements the old QTro packet then).  */
8972       if (traceframe_available_memory (&available, memaddr, len))
8973         {
8974           if (available.empty () || available[0].start != memaddr)
8975             {
8976               enum target_xfer_status res;
8977
8978               /* Don't read into the traceframe's available
8979                  memory.  */
8980               if (!available.empty ())
8981                 {
8982                   LONGEST oldlen = len;
8983
8984                   len = available[0].start - memaddr;
8985                   gdb_assert (len <= oldlen);
8986                 }
8987
8988               /* This goes through the topmost target again.  */
8989               res = remote_xfer_live_readonly_partial (myaddr, memaddr,
8990                                                        len, unit_size, xfered_len);
8991               if (res == TARGET_XFER_OK)
8992                 return TARGET_XFER_OK;
8993               else
8994                 {
8995                   /* No use trying further, we know some memory starting
8996                      at MEMADDR isn't available.  */
8997                   *xfered_len = len;
8998                   return (*xfered_len != 0) ?
8999                     TARGET_XFER_UNAVAILABLE : TARGET_XFER_EOF;
9000                 }
9001             }
9002
9003           /* Don't try to read more than how much is available, in
9004              case the target implements the deprecated QTro packet to
9005              cater for older GDBs (the target's knowledge of read-only
9006              sections may be outdated by now).  */
9007           len = available[0].length;
9008         }
9009     }
9010
9011   return remote_read_bytes_1 (memaddr, myaddr, len, unit_size, xfered_len);
9012 }
9013
9014 \f
9015
9016 /* Sends a packet with content determined by the printf format string
9017    FORMAT and the remaining arguments, then gets the reply.  Returns
9018    whether the packet was a success, a failure, or unknown.  */
9019
9020 packet_result
9021 remote_target::remote_send_printf (const char *format, ...)
9022 {
9023   struct remote_state *rs = get_remote_state ();
9024   int max_size = get_remote_packet_size ();
9025   va_list ap;
9026
9027   va_start (ap, format);
9028
9029   rs->buf[0] = '\0';
9030   if (vsnprintf (rs->buf, max_size, format, ap) >= max_size)
9031     internal_error (__FILE__, __LINE__, _("Too long remote packet."));
9032
9033   if (putpkt (rs->buf) < 0)
9034     error (_("Communication problem with target."));
9035
9036   rs->buf[0] = '\0';
9037   getpkt (&rs->buf, &rs->buf_size, 0);
9038
9039   return packet_check_result (rs->buf);
9040 }
9041
9042 /* Flash writing can take quite some time.  We'll set
9043    effectively infinite timeout for flash operations.
9044    In future, we'll need to decide on a better approach.  */
9045 static const int remote_flash_timeout = 1000;
9046
9047 void
9048 remote_target::flash_erase (ULONGEST address, LONGEST length)
9049 {
9050   int addr_size = gdbarch_addr_bit (target_gdbarch ()) / 8;
9051   enum packet_result ret;
9052   scoped_restore restore_timeout
9053     = make_scoped_restore (&remote_timeout, remote_flash_timeout);
9054
9055   ret = remote_send_printf ("vFlashErase:%s,%s",
9056                             phex (address, addr_size),
9057                             phex (length, 4));
9058   switch (ret)
9059     {
9060     case PACKET_UNKNOWN:
9061       error (_("Remote target does not support flash erase"));
9062     case PACKET_ERROR:
9063       error (_("Error erasing flash with vFlashErase packet"));
9064     default:
9065       break;
9066     }
9067 }
9068
9069 target_xfer_status
9070 remote_target::remote_flash_write (ULONGEST address,
9071                                    ULONGEST length, ULONGEST *xfered_len,
9072                                    const gdb_byte *data)
9073 {
9074   scoped_restore restore_timeout
9075     = make_scoped_restore (&remote_timeout, remote_flash_timeout);
9076   return remote_write_bytes_aux ("vFlashWrite:", address, data, length, 1,
9077                                  xfered_len,'X', 0);
9078 }
9079
9080 void
9081 remote_target::flash_done ()
9082 {
9083   int ret;
9084
9085   scoped_restore restore_timeout
9086     = make_scoped_restore (&remote_timeout, remote_flash_timeout);
9087
9088   ret = remote_send_printf ("vFlashDone");
9089
9090   switch (ret)
9091     {
9092     case PACKET_UNKNOWN:
9093       error (_("Remote target does not support vFlashDone"));
9094     case PACKET_ERROR:
9095       error (_("Error finishing flash operation"));
9096     default:
9097       break;
9098     }
9099 }
9100
9101 void
9102 remote_target::files_info ()
9103 {
9104   puts_filtered ("Debugging a target over a serial line.\n");
9105 }
9106 \f
9107 /* Stuff for dealing with the packets which are part of this protocol.
9108    See comment at top of file for details.  */
9109
9110 /* Close/unpush the remote target, and throw a TARGET_CLOSE_ERROR
9111    error to higher layers.  Called when a serial error is detected.
9112    The exception message is STRING, followed by a colon and a blank,
9113    the system error message for errno at function entry and final dot
9114    for output compatibility with throw_perror_with_name.  */
9115
9116 static void
9117 unpush_and_perror (const char *string)
9118 {
9119   int saved_errno = errno;
9120
9121   remote_unpush_target ();
9122   throw_error (TARGET_CLOSE_ERROR, "%s: %s.", string,
9123                safe_strerror (saved_errno));
9124 }
9125
9126 /* Read a single character from the remote end.  The current quit
9127    handler is overridden to avoid quitting in the middle of packet
9128    sequence, as that would break communication with the remote server.
9129    See remote_serial_quit_handler for more detail.  */
9130
9131 int
9132 remote_target::readchar (int timeout)
9133 {
9134   int ch;
9135   struct remote_state *rs = get_remote_state ();
9136
9137   {
9138     scoped_restore restore_quit_target
9139       = make_scoped_restore (&curr_quit_handler_target, this);
9140     scoped_restore restore_quit
9141       = make_scoped_restore (&quit_handler, ::remote_serial_quit_handler);
9142
9143     rs->got_ctrlc_during_io = 0;
9144
9145     ch = serial_readchar (rs->remote_desc, timeout);
9146
9147     if (rs->got_ctrlc_during_io)
9148       set_quit_flag ();
9149   }
9150
9151   if (ch >= 0)
9152     return ch;
9153
9154   switch ((enum serial_rc) ch)
9155     {
9156     case SERIAL_EOF:
9157       remote_unpush_target ();
9158       throw_error (TARGET_CLOSE_ERROR, _("Remote connection closed"));
9159       /* no return */
9160     case SERIAL_ERROR:
9161       unpush_and_perror (_("Remote communication error.  "
9162                            "Target disconnected."));
9163       /* no return */
9164     case SERIAL_TIMEOUT:
9165       break;
9166     }
9167   return ch;
9168 }
9169
9170 /* Wrapper for serial_write that closes the target and throws if
9171    writing fails.  The current quit handler is overridden to avoid
9172    quitting in the middle of packet sequence, as that would break
9173    communication with the remote server.  See
9174    remote_serial_quit_handler for more detail.  */
9175
9176 void
9177 remote_target::remote_serial_write (const char *str, int len)
9178 {
9179   struct remote_state *rs = get_remote_state ();
9180
9181   scoped_restore restore_quit_target
9182     = make_scoped_restore (&curr_quit_handler_target, this);
9183   scoped_restore restore_quit
9184     = make_scoped_restore (&quit_handler, ::remote_serial_quit_handler);
9185
9186   rs->got_ctrlc_during_io = 0;
9187
9188   if (serial_write (rs->remote_desc, str, len))
9189     {
9190       unpush_and_perror (_("Remote communication error.  "
9191                            "Target disconnected."));
9192     }
9193
9194   if (rs->got_ctrlc_during_io)
9195     set_quit_flag ();
9196 }
9197
9198 /* Return a string representing an escaped version of BUF, of len N.
9199    E.g. \n is converted to \\n, \t to \\t, etc.  */
9200
9201 static std::string
9202 escape_buffer (const char *buf, int n)
9203 {
9204   string_file stb;
9205
9206   stb.putstrn (buf, n, '\\');
9207   return std::move (stb.string ());
9208 }
9209
9210 /* Display a null-terminated packet on stdout, for debugging, using C
9211    string notation.  */
9212
9213 static void
9214 print_packet (const char *buf)
9215 {
9216   puts_filtered ("\"");
9217   fputstr_filtered (buf, '"', gdb_stdout);
9218   puts_filtered ("\"");
9219 }
9220
9221 int
9222 remote_target::putpkt (const char *buf)
9223 {
9224   return putpkt_binary (buf, strlen (buf));
9225 }
9226
9227 /* Wrapper around remote_target::putpkt to avoid exporting
9228    remote_target.  */
9229
9230 int
9231 putpkt (remote_target *remote, const char *buf)
9232 {
9233   return remote->putpkt (buf);
9234 }
9235
9236 /* Send a packet to the remote machine, with error checking.  The data
9237    of the packet is in BUF.  The string in BUF can be at most
9238    get_remote_packet_size () - 5 to account for the $, # and checksum,
9239    and for a possible /0 if we are debugging (remote_debug) and want
9240    to print the sent packet as a string.  */
9241
9242 int
9243 remote_target::putpkt_binary (const char *buf, int cnt)
9244 {
9245   struct remote_state *rs = get_remote_state ();
9246   int i;
9247   unsigned char csum = 0;
9248   gdb::def_vector<char> data (cnt + 6);
9249   char *buf2 = data.data ();
9250
9251   int ch;
9252   int tcount = 0;
9253   char *p;
9254
9255   /* Catch cases like trying to read memory or listing threads while
9256      we're waiting for a stop reply.  The remote server wouldn't be
9257      ready to handle this request, so we'd hang and timeout.  We don't
9258      have to worry about this in synchronous mode, because in that
9259      case it's not possible to issue a command while the target is
9260      running.  This is not a problem in non-stop mode, because in that
9261      case, the stub is always ready to process serial input.  */
9262   if (!target_is_non_stop_p ()
9263       && target_is_async_p ()
9264       && rs->waiting_for_stop_reply)
9265     {
9266       error (_("Cannot execute this command while the target is running.\n"
9267                "Use the \"interrupt\" command to stop the target\n"
9268                "and then try again."));
9269     }
9270
9271   /* We're sending out a new packet.  Make sure we don't look at a
9272      stale cached response.  */
9273   rs->cached_wait_status = 0;
9274
9275   /* Copy the packet into buffer BUF2, encapsulating it
9276      and giving it a checksum.  */
9277
9278   p = buf2;
9279   *p++ = '$';
9280
9281   for (i = 0; i < cnt; i++)
9282     {
9283       csum += buf[i];
9284       *p++ = buf[i];
9285     }
9286   *p++ = '#';
9287   *p++ = tohex ((csum >> 4) & 0xf);
9288   *p++ = tohex (csum & 0xf);
9289
9290   /* Send it over and over until we get a positive ack.  */
9291
9292   while (1)
9293     {
9294       int started_error_output = 0;
9295
9296       if (remote_debug)
9297         {
9298           *p = '\0';
9299
9300           int len = (int) (p - buf2);
9301
9302           std::string str
9303             = escape_buffer (buf2, std::min (len, REMOTE_DEBUG_MAX_CHAR));
9304
9305           fprintf_unfiltered (gdb_stdlog, "Sending packet: %s", str.c_str ());
9306
9307           if (len > REMOTE_DEBUG_MAX_CHAR)
9308             fprintf_unfiltered (gdb_stdlog, "[%d bytes omitted]",
9309                                 len - REMOTE_DEBUG_MAX_CHAR);
9310
9311           fprintf_unfiltered (gdb_stdlog, "...");
9312
9313           gdb_flush (gdb_stdlog);
9314         }
9315       remote_serial_write (buf2, p - buf2);
9316
9317       /* If this is a no acks version of the remote protocol, send the
9318          packet and move on.  */
9319       if (rs->noack_mode)
9320         break;
9321
9322       /* Read until either a timeout occurs (-2) or '+' is read.
9323          Handle any notification that arrives in the mean time.  */
9324       while (1)
9325         {
9326           ch = readchar (remote_timeout);
9327
9328           if (remote_debug)
9329             {
9330               switch (ch)
9331                 {
9332                 case '+':
9333                 case '-':
9334                 case SERIAL_TIMEOUT:
9335                 case '$':
9336                 case '%':
9337                   if (started_error_output)
9338                     {
9339                       putchar_unfiltered ('\n');
9340                       started_error_output = 0;
9341                     }
9342                 }
9343             }
9344
9345           switch (ch)
9346             {
9347             case '+':
9348               if (remote_debug)
9349                 fprintf_unfiltered (gdb_stdlog, "Ack\n");
9350               return 1;
9351             case '-':
9352               if (remote_debug)
9353                 fprintf_unfiltered (gdb_stdlog, "Nak\n");
9354               /* FALLTHROUGH */
9355             case SERIAL_TIMEOUT:
9356               tcount++;
9357               if (tcount > 3)
9358                 return 0;
9359               break;            /* Retransmit buffer.  */
9360             case '$':
9361               {
9362                 if (remote_debug)
9363                   fprintf_unfiltered (gdb_stdlog,
9364                                       "Packet instead of Ack, ignoring it\n");
9365                 /* It's probably an old response sent because an ACK
9366                    was lost.  Gobble up the packet and ack it so it
9367                    doesn't get retransmitted when we resend this
9368                    packet.  */
9369                 skip_frame ();
9370                 remote_serial_write ("+", 1);
9371                 continue;       /* Now, go look for +.  */
9372               }
9373
9374             case '%':
9375               {
9376                 int val;
9377
9378                 /* If we got a notification, handle it, and go back to looking
9379                    for an ack.  */
9380                 /* We've found the start of a notification.  Now
9381                    collect the data.  */
9382                 val = read_frame (&rs->buf, &rs->buf_size);
9383                 if (val >= 0)
9384                   {
9385                     if (remote_debug)
9386                       {
9387                         std::string str = escape_buffer (rs->buf, val);
9388
9389                         fprintf_unfiltered (gdb_stdlog,
9390                                             "  Notification received: %s\n",
9391                                             str.c_str ());
9392                       }
9393                     handle_notification (rs->notif_state, rs->buf);
9394                     /* We're in sync now, rewait for the ack.  */
9395                     tcount = 0;
9396                   }
9397                 else
9398                   {
9399                     if (remote_debug)
9400                       {
9401                         if (!started_error_output)
9402                           {
9403                             started_error_output = 1;
9404                             fprintf_unfiltered (gdb_stdlog, "putpkt: Junk: ");
9405                           }
9406                         fputc_unfiltered (ch & 0177, gdb_stdlog);
9407                         fprintf_unfiltered (gdb_stdlog, "%s", rs->buf);
9408                       }
9409                   }
9410                 continue;
9411               }
9412               /* fall-through */
9413             default:
9414               if (remote_debug)
9415                 {
9416                   if (!started_error_output)
9417                     {
9418                       started_error_output = 1;
9419                       fprintf_unfiltered (gdb_stdlog, "putpkt: Junk: ");
9420                     }
9421                   fputc_unfiltered (ch & 0177, gdb_stdlog);
9422                 }
9423               continue;
9424             }
9425           break;                /* Here to retransmit.  */
9426         }
9427
9428 #if 0
9429       /* This is wrong.  If doing a long backtrace, the user should be
9430          able to get out next time we call QUIT, without anything as
9431          violent as interrupt_query.  If we want to provide a way out of
9432          here without getting to the next QUIT, it should be based on
9433          hitting ^C twice as in remote_wait.  */
9434       if (quit_flag)
9435         {
9436           quit_flag = 0;
9437           interrupt_query ();
9438         }
9439 #endif
9440     }
9441
9442   return 0;
9443 }
9444
9445 /* Come here after finding the start of a frame when we expected an
9446    ack.  Do our best to discard the rest of this packet.  */
9447
9448 void
9449 remote_target::skip_frame ()
9450 {
9451   int c;
9452
9453   while (1)
9454     {
9455       c = readchar (remote_timeout);
9456       switch (c)
9457         {
9458         case SERIAL_TIMEOUT:
9459           /* Nothing we can do.  */
9460           return;
9461         case '#':
9462           /* Discard the two bytes of checksum and stop.  */
9463           c = readchar (remote_timeout);
9464           if (c >= 0)
9465             c = readchar (remote_timeout);
9466
9467           return;
9468         case '*':               /* Run length encoding.  */
9469           /* Discard the repeat count.  */
9470           c = readchar (remote_timeout);
9471           if (c < 0)
9472             return;
9473           break;
9474         default:
9475           /* A regular character.  */
9476           break;
9477         }
9478     }
9479 }
9480
9481 /* Come here after finding the start of the frame.  Collect the rest
9482    into *BUF, verifying the checksum, length, and handling run-length
9483    compression.  NUL terminate the buffer.  If there is not enough room,
9484    expand *BUF using xrealloc.
9485
9486    Returns -1 on error, number of characters in buffer (ignoring the
9487    trailing NULL) on success. (could be extended to return one of the
9488    SERIAL status indications).  */
9489
9490 long
9491 remote_target::read_frame (char **buf_p, long *sizeof_buf)
9492 {
9493   unsigned char csum;
9494   long bc;
9495   int c;
9496   char *buf = *buf_p;
9497   struct remote_state *rs = get_remote_state ();
9498
9499   csum = 0;
9500   bc = 0;
9501
9502   while (1)
9503     {
9504       c = readchar (remote_timeout);
9505       switch (c)
9506         {
9507         case SERIAL_TIMEOUT:
9508           if (remote_debug)
9509             fputs_filtered ("Timeout in mid-packet, retrying\n", gdb_stdlog);
9510           return -1;
9511         case '$':
9512           if (remote_debug)
9513             fputs_filtered ("Saw new packet start in middle of old one\n",
9514                             gdb_stdlog);
9515           return -1;            /* Start a new packet, count retries.  */
9516         case '#':
9517           {
9518             unsigned char pktcsum;
9519             int check_0 = 0;
9520             int check_1 = 0;
9521
9522             buf[bc] = '\0';
9523
9524             check_0 = readchar (remote_timeout);
9525             if (check_0 >= 0)
9526               check_1 = readchar (remote_timeout);
9527
9528             if (check_0 == SERIAL_TIMEOUT || check_1 == SERIAL_TIMEOUT)
9529               {
9530                 if (remote_debug)
9531                   fputs_filtered ("Timeout in checksum, retrying\n",
9532                                   gdb_stdlog);
9533                 return -1;
9534               }
9535             else if (check_0 < 0 || check_1 < 0)
9536               {
9537                 if (remote_debug)
9538                   fputs_filtered ("Communication error in checksum\n",
9539                                   gdb_stdlog);
9540                 return -1;
9541               }
9542
9543             /* Don't recompute the checksum; with no ack packets we
9544                don't have any way to indicate a packet retransmission
9545                is necessary.  */
9546             if (rs->noack_mode)
9547               return bc;
9548
9549             pktcsum = (fromhex (check_0) << 4) | fromhex (check_1);
9550             if (csum == pktcsum)
9551               return bc;
9552
9553             if (remote_debug)
9554               {
9555                 std::string str = escape_buffer (buf, bc);
9556
9557                 fprintf_unfiltered (gdb_stdlog,
9558                                     "Bad checksum, sentsum=0x%x, "
9559                                     "csum=0x%x, buf=%s\n",
9560                                     pktcsum, csum, str.c_str ());
9561               }
9562             /* Number of characters in buffer ignoring trailing
9563                NULL.  */
9564             return -1;
9565           }
9566         case '*':               /* Run length encoding.  */
9567           {
9568             int repeat;
9569
9570             csum += c;
9571             c = readchar (remote_timeout);
9572             csum += c;
9573             repeat = c - ' ' + 3;       /* Compute repeat count.  */
9574
9575             /* The character before ``*'' is repeated.  */
9576
9577             if (repeat > 0 && repeat <= 255 && bc > 0)
9578               {
9579                 if (bc + repeat - 1 >= *sizeof_buf - 1)
9580                   {
9581                     /* Make some more room in the buffer.  */
9582                     *sizeof_buf += repeat;
9583                     *buf_p = (char *) xrealloc (*buf_p, *sizeof_buf);
9584                     buf = *buf_p;
9585                   }
9586
9587                 memset (&buf[bc], buf[bc - 1], repeat);
9588                 bc += repeat;
9589                 continue;
9590               }
9591
9592             buf[bc] = '\0';
9593             printf_filtered (_("Invalid run length encoding: %s\n"), buf);
9594             return -1;
9595           }
9596         default:
9597           if (bc >= *sizeof_buf - 1)
9598             {
9599               /* Make some more room in the buffer.  */
9600               *sizeof_buf *= 2;
9601               *buf_p = (char *) xrealloc (*buf_p, *sizeof_buf);
9602               buf = *buf_p;
9603             }
9604
9605           buf[bc++] = c;
9606           csum += c;
9607           continue;
9608         }
9609     }
9610 }
9611
9612 /* Read a packet from the remote machine, with error checking, and
9613    store it in *BUF.  Resize *BUF using xrealloc if necessary to hold
9614    the result, and update *SIZEOF_BUF.  If FOREVER, wait forever
9615    rather than timing out; this is used (in synchronous mode) to wait
9616    for a target that is is executing user code to stop.  */
9617 /* FIXME: ezannoni 2000-02-01 this wrapper is necessary so that we
9618    don't have to change all the calls to getpkt to deal with the
9619    return value, because at the moment I don't know what the right
9620    thing to do it for those.  */
9621
9622 void
9623 remote_target::getpkt (char **buf, long *sizeof_buf, int forever)
9624 {
9625   getpkt_sane (buf, sizeof_buf, forever);
9626 }
9627
9628
9629 /* Read a packet from the remote machine, with error checking, and
9630    store it in *BUF.  Resize *BUF using xrealloc if necessary to hold
9631    the result, and update *SIZEOF_BUF.  If FOREVER, wait forever
9632    rather than timing out; this is used (in synchronous mode) to wait
9633    for a target that is is executing user code to stop.  If FOREVER ==
9634    0, this function is allowed to time out gracefully and return an
9635    indication of this to the caller.  Otherwise return the number of
9636    bytes read.  If EXPECTING_NOTIF, consider receiving a notification
9637    enough reason to return to the caller.  *IS_NOTIF is an output
9638    boolean that indicates whether *BUF holds a notification or not
9639    (a regular packet).  */
9640
9641 int
9642 remote_target::getpkt_or_notif_sane_1 (char **buf, long *sizeof_buf,
9643                                        int forever, int expecting_notif,
9644                                        int *is_notif)
9645 {
9646   struct remote_state *rs = get_remote_state ();
9647   int c;
9648   int tries;
9649   int timeout;
9650   int val = -1;
9651
9652   /* We're reading a new response.  Make sure we don't look at a
9653      previously cached response.  */
9654   rs->cached_wait_status = 0;
9655
9656   strcpy (*buf, "timeout");
9657
9658   if (forever)
9659     timeout = watchdog > 0 ? watchdog : -1;
9660   else if (expecting_notif)
9661     timeout = 0; /* There should already be a char in the buffer.  If
9662                     not, bail out.  */
9663   else
9664     timeout = remote_timeout;
9665
9666 #define MAX_TRIES 3
9667
9668   /* Process any number of notifications, and then return when
9669      we get a packet.  */
9670   for (;;)
9671     {
9672       /* If we get a timeout or bad checksum, retry up to MAX_TRIES
9673          times.  */
9674       for (tries = 1; tries <= MAX_TRIES; tries++)
9675         {
9676           /* This can loop forever if the remote side sends us
9677              characters continuously, but if it pauses, we'll get
9678              SERIAL_TIMEOUT from readchar because of timeout.  Then
9679              we'll count that as a retry.
9680
9681              Note that even when forever is set, we will only wait
9682              forever prior to the start of a packet.  After that, we
9683              expect characters to arrive at a brisk pace.  They should
9684              show up within remote_timeout intervals.  */
9685           do
9686             c = readchar (timeout);
9687           while (c != SERIAL_TIMEOUT && c != '$' && c != '%');
9688
9689           if (c == SERIAL_TIMEOUT)
9690             {
9691               if (expecting_notif)
9692                 return -1; /* Don't complain, it's normal to not get
9693                               anything in this case.  */
9694
9695               if (forever)      /* Watchdog went off?  Kill the target.  */
9696                 {
9697                   remote_unpush_target ();
9698                   throw_error (TARGET_CLOSE_ERROR,
9699                                _("Watchdog timeout has expired.  "
9700                                  "Target detached."));
9701                 }
9702               if (remote_debug)
9703                 fputs_filtered ("Timed out.\n", gdb_stdlog);
9704             }
9705           else
9706             {
9707               /* We've found the start of a packet or notification.
9708                  Now collect the data.  */
9709               val = read_frame (buf, sizeof_buf);
9710               if (val >= 0)
9711                 break;
9712             }
9713
9714           remote_serial_write ("-", 1);
9715         }
9716
9717       if (tries > MAX_TRIES)
9718         {
9719           /* We have tried hard enough, and just can't receive the
9720              packet/notification.  Give up.  */
9721           printf_unfiltered (_("Ignoring packet error, continuing...\n"));
9722
9723           /* Skip the ack char if we're in no-ack mode.  */
9724           if (!rs->noack_mode)
9725             remote_serial_write ("+", 1);
9726           return -1;
9727         }
9728
9729       /* If we got an ordinary packet, return that to our caller.  */
9730       if (c == '$')
9731         {
9732           if (remote_debug)
9733             {
9734               std::string str
9735                 = escape_buffer (*buf,
9736                                  std::min (val, REMOTE_DEBUG_MAX_CHAR));
9737
9738               fprintf_unfiltered (gdb_stdlog, "Packet received: %s",
9739                                   str.c_str ());
9740
9741               if (val > REMOTE_DEBUG_MAX_CHAR)
9742                 fprintf_unfiltered (gdb_stdlog, "[%d bytes omitted]",
9743                                     val - REMOTE_DEBUG_MAX_CHAR);
9744
9745               fprintf_unfiltered (gdb_stdlog, "\n");
9746             }
9747
9748           /* Skip the ack char if we're in no-ack mode.  */
9749           if (!rs->noack_mode)
9750             remote_serial_write ("+", 1);
9751           if (is_notif != NULL)
9752             *is_notif = 0;
9753           return val;
9754         }
9755
9756        /* If we got a notification, handle it, and go back to looking
9757          for a packet.  */
9758       else
9759         {
9760           gdb_assert (c == '%');
9761
9762           if (remote_debug)
9763             {
9764               std::string str = escape_buffer (*buf, val);
9765
9766               fprintf_unfiltered (gdb_stdlog,
9767                                   "  Notification received: %s\n",
9768                                   str.c_str ());
9769             }
9770           if (is_notif != NULL)
9771             *is_notif = 1;
9772
9773           handle_notification (rs->notif_state, *buf);
9774
9775           /* Notifications require no acknowledgement.  */
9776
9777           if (expecting_notif)
9778             return val;
9779         }
9780     }
9781 }
9782
9783 int
9784 remote_target::getpkt_sane (char **buf, long *sizeof_buf, int forever)
9785 {
9786   return getpkt_or_notif_sane_1 (buf, sizeof_buf, forever, 0, NULL);
9787 }
9788
9789 int
9790 remote_target::getpkt_or_notif_sane (char **buf, long *sizeof_buf, int forever,
9791                                      int *is_notif)
9792 {
9793   return getpkt_or_notif_sane_1 (buf, sizeof_buf, forever, 1,
9794                                  is_notif);
9795 }
9796
9797 /* Check whether EVENT is a fork event for the process specified
9798    by the pid passed in DATA, and if it is, kill the fork child.  */
9799
9800 int
9801 remote_kill_child_of_pending_fork (QUEUE (stop_reply_p) *q,
9802                                    QUEUE_ITER (stop_reply_p) *iter,
9803                                    stop_reply_p event,
9804                                    void *data)
9805 {
9806   struct queue_iter_param *param = (struct queue_iter_param *) data;
9807   int parent_pid = *(int *) param->input;
9808
9809   if (is_pending_fork_parent (&event->ws, parent_pid, event->ptid))
9810     {
9811       remote_target *remote = param->remote;
9812       int child_pid = ptid_get_pid (event->ws.value.related_pid);
9813       int res;
9814
9815       res = remote->remote_vkill (child_pid);
9816       if (res != 0)
9817         error (_("Can't kill fork child process %d"), child_pid);
9818     }
9819
9820   return 1;
9821 }
9822
9823 /* Kill any new fork children of process PID that haven't been
9824    processed by follow_fork.  */
9825
9826 void
9827 remote_target::kill_new_fork_children (int pid)
9828 {
9829   remote_state *rs = get_remote_state ();
9830   struct thread_info *thread;
9831   struct notif_client *notif = &notif_client_stop;
9832   struct queue_iter_param param;
9833
9834   /* Kill the fork child threads of any threads in process PID
9835      that are stopped at a fork event.  */
9836   ALL_NON_EXITED_THREADS (thread)
9837     {
9838       struct target_waitstatus *ws = &thread->pending_follow;
9839
9840       if (is_pending_fork_parent (ws, pid, thread->ptid))
9841         {
9842           int child_pid = ptid_get_pid (ws->value.related_pid);
9843           int res;
9844
9845           res = remote_vkill (child_pid);
9846           if (res != 0)
9847             error (_("Can't kill fork child process %d"), child_pid);
9848         }
9849     }
9850
9851   /* Check for any pending fork events (not reported or processed yet)
9852      in process PID and kill those fork child threads as well.  */
9853   remote_notif_get_pending_events (notif);
9854   param.remote = this;
9855   param.input = &pid;
9856   param.output = NULL;
9857   QUEUE_iterate (stop_reply_p, rs->stop_reply_queue,
9858                  remote_kill_child_of_pending_fork, &param);
9859 }
9860
9861 \f
9862 /* Target hook to kill the current inferior.  */
9863
9864 void
9865 remote_target::kill ()
9866 {
9867   int res = -1;
9868   int pid = ptid_get_pid (inferior_ptid);
9869   struct remote_state *rs = get_remote_state ();
9870
9871   if (packet_support (PACKET_vKill) != PACKET_DISABLE)
9872     {
9873       /* If we're stopped while forking and we haven't followed yet,
9874          kill the child task.  We need to do this before killing the
9875          parent task because if this is a vfork then the parent will
9876          be sleeping.  */
9877       kill_new_fork_children (pid);
9878
9879       res = remote_vkill (pid);
9880       if (res == 0)
9881         {
9882           target_mourn_inferior (inferior_ptid);
9883           return;
9884         }
9885     }
9886
9887   /* If we are in 'target remote' mode and we are killing the only
9888      inferior, then we will tell gdbserver to exit and unpush the
9889      target.  */
9890   if (res == -1 && !remote_multi_process_p (rs)
9891       && number_of_live_inferiors () == 1)
9892     {
9893       remote_kill_k ();
9894
9895       /* We've killed the remote end, we get to mourn it.  If we are
9896          not in extended mode, mourning the inferior also unpushes
9897          remote_ops from the target stack, which closes the remote
9898          connection.  */
9899       target_mourn_inferior (inferior_ptid);
9900
9901       return;
9902     }
9903
9904   error (_("Can't kill process"));
9905 }
9906
9907 /* Send a kill request to the target using the 'vKill' packet.  */
9908
9909 int
9910 remote_target::remote_vkill (int pid)
9911 {
9912   if (packet_support (PACKET_vKill) == PACKET_DISABLE)
9913     return -1;
9914
9915   remote_state *rs = get_remote_state ();
9916
9917   /* Tell the remote target to detach.  */
9918   xsnprintf (rs->buf, get_remote_packet_size (), "vKill;%x", pid);
9919   putpkt (rs->buf);
9920   getpkt (&rs->buf, &rs->buf_size, 0);
9921
9922   switch (packet_ok (rs->buf,
9923                      &remote_protocol_packets[PACKET_vKill]))
9924     {
9925     case PACKET_OK:
9926       return 0;
9927     case PACKET_ERROR:
9928       return 1;
9929     case PACKET_UNKNOWN:
9930       return -1;
9931     default:
9932       internal_error (__FILE__, __LINE__, _("Bad result from packet_ok"));
9933     }
9934 }
9935
9936 /* Send a kill request to the target using the 'k' packet.  */
9937
9938 void
9939 remote_target::remote_kill_k ()
9940 {
9941   /* Catch errors so the user can quit from gdb even when we
9942      aren't on speaking terms with the remote system.  */
9943   TRY
9944     {
9945       putpkt ("k");
9946     }
9947   CATCH (ex, RETURN_MASK_ERROR)
9948     {
9949       if (ex.error == TARGET_CLOSE_ERROR)
9950         {
9951           /* If we got an (EOF) error that caused the target
9952              to go away, then we're done, that's what we wanted.
9953              "k" is susceptible to cause a premature EOF, given
9954              that the remote server isn't actually required to
9955              reply to "k", and it can happen that it doesn't
9956              even get to reply ACK to the "k".  */
9957           return;
9958         }
9959
9960       /* Otherwise, something went wrong.  We didn't actually kill
9961          the target.  Just propagate the exception, and let the
9962          user or higher layers decide what to do.  */
9963       throw_exception (ex);
9964     }
9965   END_CATCH
9966 }
9967
9968 void
9969 remote_target::mourn_inferior ()
9970 {
9971   struct remote_state *rs = get_remote_state ();
9972
9973   /* We're no longer interested in notification events of an inferior
9974      that exited or was killed/detached.  */
9975   discard_pending_stop_replies (current_inferior ());
9976
9977   /* In 'target remote' mode with one inferior, we close the connection.  */
9978   if (!rs->extended && number_of_live_inferiors () <= 1)
9979     {
9980       unpush_target (this);
9981
9982       /* remote_close takes care of doing most of the clean up.  */
9983       generic_mourn_inferior ();
9984       return;
9985     }
9986
9987   /* In case we got here due to an error, but we're going to stay
9988      connected.  */
9989   rs->waiting_for_stop_reply = 0;
9990
9991   /* If the current general thread belonged to the process we just
9992      detached from or has exited, the remote side current general
9993      thread becomes undefined.  Considering a case like this:
9994
9995      - We just got here due to a detach.
9996      - The process that we're detaching from happens to immediately
9997        report a global breakpoint being hit in non-stop mode, in the
9998        same thread we had selected before.
9999      - GDB attaches to this process again.
10000      - This event happens to be the next event we handle.
10001
10002      GDB would consider that the current general thread didn't need to
10003      be set on the stub side (with Hg), since for all it knew,
10004      GENERAL_THREAD hadn't changed.
10005
10006      Notice that although in all-stop mode, the remote server always
10007      sets the current thread to the thread reporting the stop event,
10008      that doesn't happen in non-stop mode; in non-stop, the stub *must
10009      not* change the current thread when reporting a breakpoint hit,
10010      due to the decoupling of event reporting and event handling.
10011
10012      To keep things simple, we always invalidate our notion of the
10013      current thread.  */
10014   record_currthread (rs, minus_one_ptid);
10015
10016   /* Call common code to mark the inferior as not running.  */
10017   generic_mourn_inferior ();
10018
10019   if (!have_inferiors ())
10020     {
10021       if (!remote_multi_process_p (rs))
10022         {
10023           /* Check whether the target is running now - some remote stubs
10024              automatically restart after kill.  */
10025           putpkt ("?");
10026           getpkt (&rs->buf, &rs->buf_size, 0);
10027
10028           if (rs->buf[0] == 'S' || rs->buf[0] == 'T')
10029             {
10030               /* Assume that the target has been restarted.  Set
10031                  inferior_ptid so that bits of core GDB realizes
10032                  there's something here, e.g., so that the user can
10033                  say "kill" again.  */
10034               inferior_ptid = magic_null_ptid;
10035             }
10036         }
10037     }
10038 }
10039
10040 bool
10041 extended_remote_target::supports_disable_randomization ()
10042 {
10043   return packet_support (PACKET_QDisableRandomization) == PACKET_ENABLE;
10044 }
10045
10046 void
10047 remote_target::extended_remote_disable_randomization (int val)
10048 {
10049   struct remote_state *rs = get_remote_state ();
10050   char *reply;
10051
10052   xsnprintf (rs->buf, get_remote_packet_size (), "QDisableRandomization:%x",
10053              val);
10054   putpkt (rs->buf);
10055   reply = remote_get_noisy_reply ();
10056   if (*reply == '\0')
10057     error (_("Target does not support QDisableRandomization."));
10058   if (strcmp (reply, "OK") != 0)
10059     error (_("Bogus QDisableRandomization reply from target: %s"), reply);
10060 }
10061
10062 int
10063 remote_target::extended_remote_run (const std::string &args)
10064 {
10065   struct remote_state *rs = get_remote_state ();
10066   int len;
10067   const char *remote_exec_file = get_remote_exec_file ();
10068
10069   /* If the user has disabled vRun support, or we have detected that
10070      support is not available, do not try it.  */
10071   if (packet_support (PACKET_vRun) == PACKET_DISABLE)
10072     return -1;
10073
10074   strcpy (rs->buf, "vRun;");
10075   len = strlen (rs->buf);
10076
10077   if (strlen (remote_exec_file) * 2 + len >= get_remote_packet_size ())
10078     error (_("Remote file name too long for run packet"));
10079   len += 2 * bin2hex ((gdb_byte *) remote_exec_file, rs->buf + len,
10080                       strlen (remote_exec_file));
10081
10082   if (!args.empty ())
10083     {
10084       int i;
10085
10086       gdb_argv argv (args.c_str ());
10087       for (i = 0; argv[i] != NULL; i++)
10088         {
10089           if (strlen (argv[i]) * 2 + 1 + len >= get_remote_packet_size ())
10090             error (_("Argument list too long for run packet"));
10091           rs->buf[len++] = ';';
10092           len += 2 * bin2hex ((gdb_byte *) argv[i], rs->buf + len,
10093                               strlen (argv[i]));
10094         }
10095     }
10096
10097   rs->buf[len++] = '\0';
10098
10099   putpkt (rs->buf);
10100   getpkt (&rs->buf, &rs->buf_size, 0);
10101
10102   switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_vRun]))
10103     {
10104     case PACKET_OK:
10105       /* We have a wait response.  All is well.  */
10106       return 0;
10107     case PACKET_UNKNOWN:
10108       return -1;
10109     case PACKET_ERROR:
10110       if (remote_exec_file[0] == '\0')
10111         error (_("Running the default executable on the remote target failed; "
10112                  "try \"set remote exec-file\"?"));
10113       else
10114         error (_("Running \"%s\" on the remote target failed"),
10115                remote_exec_file);
10116     default:
10117       gdb_assert_not_reached (_("bad switch"));
10118     }
10119 }
10120
10121 /* Helper function to send set/unset environment packets.  ACTION is
10122    either "set" or "unset".  PACKET is either "QEnvironmentHexEncoded"
10123    or "QEnvironmentUnsetVariable".  VALUE is the variable to be
10124    sent.  */
10125
10126 void
10127 remote_target::send_environment_packet (const char *action,
10128                                         const char *packet,
10129                                         const char *value)
10130 {
10131   remote_state *rs = get_remote_state ();
10132
10133   /* Convert the environment variable to an hex string, which
10134      is the best format to be transmitted over the wire.  */
10135   std::string encoded_value = bin2hex ((const gdb_byte *) value,
10136                                          strlen (value));
10137
10138   xsnprintf (rs->buf, get_remote_packet_size (),
10139              "%s:%s", packet, encoded_value.c_str ());
10140
10141   putpkt (rs->buf);
10142   getpkt (&rs->buf, &rs->buf_size, 0);
10143   if (strcmp (rs->buf, "OK") != 0)
10144     warning (_("Unable to %s environment variable '%s' on remote."),
10145              action, value);
10146 }
10147
10148 /* Helper function to handle the QEnvironment* packets.  */
10149
10150 void
10151 remote_target::extended_remote_environment_support ()
10152 {
10153   remote_state *rs = get_remote_state ();
10154
10155   if (packet_support (PACKET_QEnvironmentReset) != PACKET_DISABLE)
10156     {
10157       putpkt ("QEnvironmentReset");
10158       getpkt (&rs->buf, &rs->buf_size, 0);
10159       if (strcmp (rs->buf, "OK") != 0)
10160         warning (_("Unable to reset environment on remote."));
10161     }
10162
10163   gdb_environ *e = &current_inferior ()->environment;
10164
10165   if (packet_support (PACKET_QEnvironmentHexEncoded) != PACKET_DISABLE)
10166     for (const std::string &el : e->user_set_env ())
10167       send_environment_packet ("set", "QEnvironmentHexEncoded",
10168                                el.c_str ());
10169
10170   if (packet_support (PACKET_QEnvironmentUnset) != PACKET_DISABLE)
10171     for (const std::string &el : e->user_unset_env ())
10172       send_environment_packet ("unset", "QEnvironmentUnset", el.c_str ());
10173 }
10174
10175 /* Helper function to set the current working directory for the
10176    inferior in the remote target.  */
10177
10178 void
10179 remote_target::extended_remote_set_inferior_cwd ()
10180 {
10181   if (packet_support (PACKET_QSetWorkingDir) != PACKET_DISABLE)
10182     {
10183       const char *inferior_cwd = get_inferior_cwd ();
10184       remote_state *rs = get_remote_state ();
10185
10186       if (inferior_cwd != NULL)
10187         {
10188           std::string hexpath = bin2hex ((const gdb_byte *) inferior_cwd,
10189                                          strlen (inferior_cwd));
10190
10191           xsnprintf (rs->buf, get_remote_packet_size (),
10192                      "QSetWorkingDir:%s", hexpath.c_str ());
10193         }
10194       else
10195         {
10196           /* An empty inferior_cwd means that the user wants us to
10197              reset the remote server's inferior's cwd.  */
10198           xsnprintf (rs->buf, get_remote_packet_size (),
10199                      "QSetWorkingDir:");
10200         }
10201
10202       putpkt (rs->buf);
10203       getpkt (&rs->buf, &rs->buf_size, 0);
10204       if (packet_ok (rs->buf,
10205                      &remote_protocol_packets[PACKET_QSetWorkingDir])
10206           != PACKET_OK)
10207         error (_("\
10208 Remote replied unexpectedly while setting the inferior's working\n\
10209 directory: %s"),
10210                rs->buf);
10211
10212     }
10213 }
10214
10215 /* In the extended protocol we want to be able to do things like
10216    "run" and have them basically work as expected.  So we need
10217    a special create_inferior function.  We support changing the
10218    executable file and the command line arguments, but not the
10219    environment.  */
10220
10221 void
10222 extended_remote_target::create_inferior (const char *exec_file,
10223                                          const std::string &args,
10224                                          char **env, int from_tty)
10225 {
10226   int run_worked;
10227   char *stop_reply;
10228   struct remote_state *rs = get_remote_state ();
10229   const char *remote_exec_file = get_remote_exec_file ();
10230
10231   /* If running asynchronously, register the target file descriptor
10232      with the event loop.  */
10233   if (target_can_async_p ())
10234     target_async (1);
10235
10236   /* Disable address space randomization if requested (and supported).  */
10237   if (supports_disable_randomization ())
10238     extended_remote_disable_randomization (disable_randomization);
10239
10240   /* If startup-with-shell is on, we inform gdbserver to start the
10241      remote inferior using a shell.  */
10242   if (packet_support (PACKET_QStartupWithShell) != PACKET_DISABLE)
10243     {
10244       xsnprintf (rs->buf, get_remote_packet_size (),
10245                  "QStartupWithShell:%d", startup_with_shell ? 1 : 0);
10246       putpkt (rs->buf);
10247       getpkt (&rs->buf, &rs->buf_size, 0);
10248       if (strcmp (rs->buf, "OK") != 0)
10249         error (_("\
10250 Remote replied unexpectedly while setting startup-with-shell: %s"),
10251                rs->buf);
10252     }
10253
10254   extended_remote_environment_support ();
10255
10256   extended_remote_set_inferior_cwd ();
10257
10258   /* Now restart the remote server.  */
10259   run_worked = extended_remote_run (args) != -1;
10260   if (!run_worked)
10261     {
10262       /* vRun was not supported.  Fail if we need it to do what the
10263          user requested.  */
10264       if (remote_exec_file[0])
10265         error (_("Remote target does not support \"set remote exec-file\""));
10266       if (!args.empty ())
10267         error (_("Remote target does not support \"set args\" or run <ARGS>"));
10268
10269       /* Fall back to "R".  */
10270       extended_remote_restart ();
10271     }
10272
10273   if (!have_inferiors ())
10274     {
10275       /* Clean up from the last time we ran, before we mark the target
10276          running again.  This will mark breakpoints uninserted, and
10277          get_offsets may insert breakpoints.  */
10278       init_thread_list ();
10279       init_wait_for_inferior ();
10280     }
10281
10282   /* vRun's success return is a stop reply.  */
10283   stop_reply = run_worked ? rs->buf : NULL;
10284   add_current_inferior_and_thread (stop_reply);
10285
10286   /* Get updated offsets, if the stub uses qOffsets.  */
10287   get_offsets ();
10288 }
10289 \f
10290
10291 /* Given a location's target info BP_TGT and the packet buffer BUF,  output
10292    the list of conditions (in agent expression bytecode format), if any, the
10293    target needs to evaluate.  The output is placed into the packet buffer
10294    started from BUF and ended at BUF_END.  */
10295
10296 static int
10297 remote_add_target_side_condition (struct gdbarch *gdbarch,
10298                                   struct bp_target_info *bp_tgt, char *buf,
10299                                   char *buf_end)
10300 {
10301   if (bp_tgt->conditions.empty ())
10302     return 0;
10303
10304   buf += strlen (buf);
10305   xsnprintf (buf, buf_end - buf, "%s", ";");
10306   buf++;
10307
10308   /* Send conditions to the target.  */
10309   for (agent_expr *aexpr : bp_tgt->conditions)
10310     {
10311       xsnprintf (buf, buf_end - buf, "X%x,", aexpr->len);
10312       buf += strlen (buf);
10313       for (int i = 0; i < aexpr->len; ++i)
10314         buf = pack_hex_byte (buf, aexpr->buf[i]);
10315       *buf = '\0';
10316     }
10317   return 0;
10318 }
10319
10320 static void
10321 remote_add_target_side_commands (struct gdbarch *gdbarch,
10322                                  struct bp_target_info *bp_tgt, char *buf)
10323 {
10324   if (bp_tgt->tcommands.empty ())
10325     return;
10326
10327   buf += strlen (buf);
10328
10329   sprintf (buf, ";cmds:%x,", bp_tgt->persist);
10330   buf += strlen (buf);
10331
10332   /* Concatenate all the agent expressions that are commands into the
10333      cmds parameter.  */
10334   for (agent_expr *aexpr : bp_tgt->tcommands)
10335     {
10336       sprintf (buf, "X%x,", aexpr->len);
10337       buf += strlen (buf);
10338       for (int i = 0; i < aexpr->len; ++i)
10339         buf = pack_hex_byte (buf, aexpr->buf[i]);
10340       *buf = '\0';
10341     }
10342 }
10343
10344 /* Insert a breakpoint.  On targets that have software breakpoint
10345    support, we ask the remote target to do the work; on targets
10346    which don't, we insert a traditional memory breakpoint.  */
10347
10348 int
10349 remote_target::insert_breakpoint (struct gdbarch *gdbarch,
10350                                   struct bp_target_info *bp_tgt)
10351 {
10352   /* Try the "Z" s/w breakpoint packet if it is not already disabled.
10353      If it succeeds, then set the support to PACKET_ENABLE.  If it
10354      fails, and the user has explicitly requested the Z support then
10355      report an error, otherwise, mark it disabled and go on.  */
10356
10357   if (packet_support (PACKET_Z0) != PACKET_DISABLE)
10358     {
10359       CORE_ADDR addr = bp_tgt->reqstd_address;
10360       struct remote_state *rs;
10361       char *p, *endbuf;
10362
10363       /* Make sure the remote is pointing at the right process, if
10364          necessary.  */
10365       if (!gdbarch_has_global_breakpoints (target_gdbarch ()))
10366         set_general_process ();
10367
10368       rs = get_remote_state ();
10369       p = rs->buf;
10370       endbuf = rs->buf + get_remote_packet_size ();
10371
10372       *(p++) = 'Z';
10373       *(p++) = '0';
10374       *(p++) = ',';
10375       addr = (ULONGEST) remote_address_masked (addr);
10376       p += hexnumstr (p, addr);
10377       xsnprintf (p, endbuf - p, ",%d", bp_tgt->kind);
10378
10379       if (supports_evaluation_of_breakpoint_conditions ())
10380         remote_add_target_side_condition (gdbarch, bp_tgt, p, endbuf);
10381
10382       if (can_run_breakpoint_commands ())
10383         remote_add_target_side_commands (gdbarch, bp_tgt, p);
10384
10385       putpkt (rs->buf);
10386       getpkt (&rs->buf, &rs->buf_size, 0);
10387
10388       switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_Z0]))
10389         {
10390         case PACKET_ERROR:
10391           return -1;
10392         case PACKET_OK:
10393           return 0;
10394         case PACKET_UNKNOWN:
10395           break;
10396         }
10397     }
10398
10399   /* If this breakpoint has target-side commands but this stub doesn't
10400      support Z0 packets, throw error.  */
10401   if (!bp_tgt->tcommands.empty ())
10402     throw_error (NOT_SUPPORTED_ERROR, _("\
10403 Target doesn't support breakpoints that have target side commands."));
10404
10405   return memory_insert_breakpoint (this, gdbarch, bp_tgt);
10406 }
10407
10408 int
10409 remote_target::remove_breakpoint (struct gdbarch *gdbarch,
10410                                   struct bp_target_info *bp_tgt,
10411                                   enum remove_bp_reason reason)
10412 {
10413   CORE_ADDR addr = bp_tgt->placed_address;
10414   struct remote_state *rs = get_remote_state ();
10415
10416   if (packet_support (PACKET_Z0) != PACKET_DISABLE)
10417     {
10418       char *p = rs->buf;
10419       char *endbuf = rs->buf + get_remote_packet_size ();
10420
10421       /* Make sure the remote is pointing at the right process, if
10422          necessary.  */
10423       if (!gdbarch_has_global_breakpoints (target_gdbarch ()))
10424         set_general_process ();
10425
10426       *(p++) = 'z';
10427       *(p++) = '0';
10428       *(p++) = ',';
10429
10430       addr = (ULONGEST) remote_address_masked (bp_tgt->placed_address);
10431       p += hexnumstr (p, addr);
10432       xsnprintf (p, endbuf - p, ",%d", bp_tgt->kind);
10433
10434       putpkt (rs->buf);
10435       getpkt (&rs->buf, &rs->buf_size, 0);
10436
10437       return (rs->buf[0] == 'E');
10438     }
10439
10440   return memory_remove_breakpoint (this, gdbarch, bp_tgt, reason);
10441 }
10442
10443 static enum Z_packet_type
10444 watchpoint_to_Z_packet (int type)
10445 {
10446   switch (type)
10447     {
10448     case hw_write:
10449       return Z_PACKET_WRITE_WP;
10450       break;
10451     case hw_read:
10452       return Z_PACKET_READ_WP;
10453       break;
10454     case hw_access:
10455       return Z_PACKET_ACCESS_WP;
10456       break;
10457     default:
10458       internal_error (__FILE__, __LINE__,
10459                       _("hw_bp_to_z: bad watchpoint type %d"), type);
10460     }
10461 }
10462
10463 int
10464 remote_target::insert_watchpoint (CORE_ADDR addr, int len,
10465                                   enum target_hw_bp_type type, struct expression *cond)
10466 {
10467   struct remote_state *rs = get_remote_state ();
10468   char *endbuf = rs->buf + get_remote_packet_size ();
10469   char *p;
10470   enum Z_packet_type packet = watchpoint_to_Z_packet (type);
10471
10472   if (packet_support (PACKET_Z0 + packet) == PACKET_DISABLE)
10473     return 1;
10474
10475   /* Make sure the remote is pointing at the right process, if
10476      necessary.  */
10477   if (!gdbarch_has_global_breakpoints (target_gdbarch ()))
10478     set_general_process ();
10479
10480   xsnprintf (rs->buf, endbuf - rs->buf, "Z%x,", packet);
10481   p = strchr (rs->buf, '\0');
10482   addr = remote_address_masked (addr);
10483   p += hexnumstr (p, (ULONGEST) addr);
10484   xsnprintf (p, endbuf - p, ",%x", len);
10485
10486   putpkt (rs->buf);
10487   getpkt (&rs->buf, &rs->buf_size, 0);
10488
10489   switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_Z0 + packet]))
10490     {
10491     case PACKET_ERROR:
10492       return -1;
10493     case PACKET_UNKNOWN:
10494       return 1;
10495     case PACKET_OK:
10496       return 0;
10497     }
10498   internal_error (__FILE__, __LINE__,
10499                   _("remote_insert_watchpoint: reached end of function"));
10500 }
10501
10502 bool
10503 remote_target::watchpoint_addr_within_range (CORE_ADDR addr,
10504                                              CORE_ADDR start, int length)
10505 {
10506   CORE_ADDR diff = remote_address_masked (addr - start);
10507
10508   return diff < length;
10509 }
10510
10511
10512 int
10513 remote_target::remove_watchpoint (CORE_ADDR addr, int len,
10514                                   enum target_hw_bp_type type, struct expression *cond)
10515 {
10516   struct remote_state *rs = get_remote_state ();
10517   char *endbuf = rs->buf + get_remote_packet_size ();
10518   char *p;
10519   enum Z_packet_type packet = watchpoint_to_Z_packet (type);
10520
10521   if (packet_support (PACKET_Z0 + packet) == PACKET_DISABLE)
10522     return -1;
10523
10524   /* Make sure the remote is pointing at the right process, if
10525      necessary.  */
10526   if (!gdbarch_has_global_breakpoints (target_gdbarch ()))
10527     set_general_process ();
10528
10529   xsnprintf (rs->buf, endbuf - rs->buf, "z%x,", packet);
10530   p = strchr (rs->buf, '\0');
10531   addr = remote_address_masked (addr);
10532   p += hexnumstr (p, (ULONGEST) addr);
10533   xsnprintf (p, endbuf - p, ",%x", len);
10534   putpkt (rs->buf);
10535   getpkt (&rs->buf, &rs->buf_size, 0);
10536
10537   switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_Z0 + packet]))
10538     {
10539     case PACKET_ERROR:
10540     case PACKET_UNKNOWN:
10541       return -1;
10542     case PACKET_OK:
10543       return 0;
10544     }
10545   internal_error (__FILE__, __LINE__,
10546                   _("remote_remove_watchpoint: reached end of function"));
10547 }
10548
10549
10550 int remote_hw_watchpoint_limit = -1;
10551 int remote_hw_watchpoint_length_limit = -1;
10552 int remote_hw_breakpoint_limit = -1;
10553
10554 int
10555 remote_target::region_ok_for_hw_watchpoint (CORE_ADDR addr, int len)
10556 {
10557   if (remote_hw_watchpoint_length_limit == 0)
10558     return 0;
10559   else if (remote_hw_watchpoint_length_limit < 0)
10560     return 1;
10561   else if (len <= remote_hw_watchpoint_length_limit)
10562     return 1;
10563   else
10564     return 0;
10565 }
10566
10567 int
10568 remote_target::can_use_hw_breakpoint (enum bptype type, int cnt, int ot)
10569 {
10570   if (type == bp_hardware_breakpoint)
10571     {
10572       if (remote_hw_breakpoint_limit == 0)
10573         return 0;
10574       else if (remote_hw_breakpoint_limit < 0)
10575         return 1;
10576       else if (cnt <= remote_hw_breakpoint_limit)
10577         return 1;
10578     }
10579   else
10580     {
10581       if (remote_hw_watchpoint_limit == 0)
10582         return 0;
10583       else if (remote_hw_watchpoint_limit < 0)
10584         return 1;
10585       else if (ot)
10586         return -1;
10587       else if (cnt <= remote_hw_watchpoint_limit)
10588         return 1;
10589     }
10590   return -1;
10591 }
10592
10593 /* The to_stopped_by_sw_breakpoint method of target remote.  */
10594
10595 bool
10596 remote_target::stopped_by_sw_breakpoint ()
10597 {
10598   struct thread_info *thread = inferior_thread ();
10599
10600   return (thread->priv != NULL
10601           && (get_remote_thread_info (thread)->stop_reason
10602               == TARGET_STOPPED_BY_SW_BREAKPOINT));
10603 }
10604
10605 /* The to_supports_stopped_by_sw_breakpoint method of target
10606    remote.  */
10607
10608 bool
10609 remote_target::supports_stopped_by_sw_breakpoint ()
10610 {
10611   return (packet_support (PACKET_swbreak_feature) == PACKET_ENABLE);
10612 }
10613
10614 /* The to_stopped_by_hw_breakpoint method of target remote.  */
10615
10616 bool
10617 remote_target::stopped_by_hw_breakpoint ()
10618 {
10619   struct thread_info *thread = inferior_thread ();
10620
10621   return (thread->priv != NULL
10622           && (get_remote_thread_info (thread)->stop_reason
10623               == TARGET_STOPPED_BY_HW_BREAKPOINT));
10624 }
10625
10626 /* The to_supports_stopped_by_hw_breakpoint method of target
10627    remote.  */
10628
10629 bool
10630 remote_target::supports_stopped_by_hw_breakpoint ()
10631 {
10632   return (packet_support (PACKET_hwbreak_feature) == PACKET_ENABLE);
10633 }
10634
10635 bool
10636 remote_target::stopped_by_watchpoint ()
10637 {
10638   struct thread_info *thread = inferior_thread ();
10639
10640   return (thread->priv != NULL
10641           && (get_remote_thread_info (thread)->stop_reason
10642               == TARGET_STOPPED_BY_WATCHPOINT));
10643 }
10644
10645 bool
10646 remote_target::stopped_data_address (CORE_ADDR *addr_p)
10647 {
10648   struct thread_info *thread = inferior_thread ();
10649
10650   if (thread->priv != NULL
10651       && (get_remote_thread_info (thread)->stop_reason
10652           == TARGET_STOPPED_BY_WATCHPOINT))
10653     {
10654       *addr_p = get_remote_thread_info (thread)->watch_data_address;
10655       return true;
10656     }
10657
10658   return false;
10659 }
10660
10661
10662 int
10663 remote_target::insert_hw_breakpoint (struct gdbarch *gdbarch,
10664                                      struct bp_target_info *bp_tgt)
10665 {
10666   CORE_ADDR addr = bp_tgt->reqstd_address;
10667   struct remote_state *rs;
10668   char *p, *endbuf;
10669   char *message;
10670
10671   if (packet_support (PACKET_Z1) == PACKET_DISABLE)
10672     return -1;
10673
10674   /* Make sure the remote is pointing at the right process, if
10675      necessary.  */
10676   if (!gdbarch_has_global_breakpoints (target_gdbarch ()))
10677     set_general_process ();
10678
10679   rs = get_remote_state ();
10680   p = rs->buf;
10681   endbuf = rs->buf + get_remote_packet_size ();
10682
10683   *(p++) = 'Z';
10684   *(p++) = '1';
10685   *(p++) = ',';
10686
10687   addr = remote_address_masked (addr);
10688   p += hexnumstr (p, (ULONGEST) addr);
10689   xsnprintf (p, endbuf - p, ",%x", bp_tgt->kind);
10690
10691   if (supports_evaluation_of_breakpoint_conditions ())
10692     remote_add_target_side_condition (gdbarch, bp_tgt, p, endbuf);
10693
10694   if (can_run_breakpoint_commands ())
10695     remote_add_target_side_commands (gdbarch, bp_tgt, p);
10696
10697   putpkt (rs->buf);
10698   getpkt (&rs->buf, &rs->buf_size, 0);
10699
10700   switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_Z1]))
10701     {
10702     case PACKET_ERROR:
10703       if (rs->buf[1] == '.')
10704         {
10705           message = strchr (rs->buf + 2, '.');
10706           if (message)
10707             error (_("Remote failure reply: %s"), message + 1);
10708         }
10709       return -1;
10710     case PACKET_UNKNOWN:
10711       return -1;
10712     case PACKET_OK:
10713       return 0;
10714     }
10715   internal_error (__FILE__, __LINE__,
10716                   _("remote_insert_hw_breakpoint: reached end of function"));
10717 }
10718
10719
10720 int
10721 remote_target::remove_hw_breakpoint (struct gdbarch *gdbarch,
10722                                      struct bp_target_info *bp_tgt)
10723 {
10724   CORE_ADDR addr;
10725   struct remote_state *rs = get_remote_state ();
10726   char *p = rs->buf;
10727   char *endbuf = rs->buf + get_remote_packet_size ();
10728
10729   if (packet_support (PACKET_Z1) == PACKET_DISABLE)
10730     return -1;
10731
10732   /* Make sure the remote is pointing at the right process, if
10733      necessary.  */
10734   if (!gdbarch_has_global_breakpoints (target_gdbarch ()))
10735     set_general_process ();
10736
10737   *(p++) = 'z';
10738   *(p++) = '1';
10739   *(p++) = ',';
10740
10741   addr = remote_address_masked (bp_tgt->placed_address);
10742   p += hexnumstr (p, (ULONGEST) addr);
10743   xsnprintf (p, endbuf  - p, ",%x", bp_tgt->kind);
10744
10745   putpkt (rs->buf);
10746   getpkt (&rs->buf, &rs->buf_size, 0);
10747
10748   switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_Z1]))
10749     {
10750     case PACKET_ERROR:
10751     case PACKET_UNKNOWN:
10752       return -1;
10753     case PACKET_OK:
10754       return 0;
10755     }
10756   internal_error (__FILE__, __LINE__,
10757                   _("remote_remove_hw_breakpoint: reached end of function"));
10758 }
10759
10760 /* Verify memory using the "qCRC:" request.  */
10761
10762 int
10763 remote_target::verify_memory (const gdb_byte *data, CORE_ADDR lma, ULONGEST size)
10764 {
10765   struct remote_state *rs = get_remote_state ();
10766   unsigned long host_crc, target_crc;
10767   char *tmp;
10768
10769   /* It doesn't make sense to use qCRC if the remote target is
10770      connected but not running.  */
10771   if (target_has_execution && packet_support (PACKET_qCRC) != PACKET_DISABLE)
10772     {
10773       enum packet_result result;
10774
10775       /* Make sure the remote is pointing at the right process.  */
10776       set_general_process ();
10777
10778       /* FIXME: assumes lma can fit into long.  */
10779       xsnprintf (rs->buf, get_remote_packet_size (), "qCRC:%lx,%lx",
10780                  (long) lma, (long) size);
10781       putpkt (rs->buf);
10782
10783       /* Be clever; compute the host_crc before waiting for target
10784          reply.  */
10785       host_crc = xcrc32 (data, size, 0xffffffff);
10786
10787       getpkt (&rs->buf, &rs->buf_size, 0);
10788
10789       result = packet_ok (rs->buf,
10790                           &remote_protocol_packets[PACKET_qCRC]);
10791       if (result == PACKET_ERROR)
10792         return -1;
10793       else if (result == PACKET_OK)
10794         {
10795           for (target_crc = 0, tmp = &rs->buf[1]; *tmp; tmp++)
10796             target_crc = target_crc * 16 + fromhex (*tmp);
10797
10798           return (host_crc == target_crc);
10799         }
10800     }
10801
10802   return simple_verify_memory (this, data, lma, size);
10803 }
10804
10805 /* compare-sections command
10806
10807    With no arguments, compares each loadable section in the exec bfd
10808    with the same memory range on the target, and reports mismatches.
10809    Useful for verifying the image on the target against the exec file.  */
10810
10811 static void
10812 compare_sections_command (const char *args, int from_tty)
10813 {
10814   asection *s;
10815   const char *sectname;
10816   bfd_size_type size;
10817   bfd_vma lma;
10818   int matched = 0;
10819   int mismatched = 0;
10820   int res;
10821   int read_only = 0;
10822
10823   if (!exec_bfd)
10824     error (_("command cannot be used without an exec file"));
10825
10826   if (args != NULL && strcmp (args, "-r") == 0)
10827     {
10828       read_only = 1;
10829       args = NULL;
10830     }
10831
10832   for (s = exec_bfd->sections; s; s = s->next)
10833     {
10834       if (!(s->flags & SEC_LOAD))
10835         continue;               /* Skip non-loadable section.  */
10836
10837       if (read_only && (s->flags & SEC_READONLY) == 0)
10838         continue;               /* Skip writeable sections */
10839
10840       size = bfd_get_section_size (s);
10841       if (size == 0)
10842         continue;               /* Skip zero-length section.  */
10843
10844       sectname = bfd_get_section_name (exec_bfd, s);
10845       if (args && strcmp (args, sectname) != 0)
10846         continue;               /* Not the section selected by user.  */
10847
10848       matched = 1;              /* Do this section.  */
10849       lma = s->lma;
10850
10851       gdb::byte_vector sectdata (size);
10852       bfd_get_section_contents (exec_bfd, s, sectdata.data (), 0, size);
10853
10854       res = target_verify_memory (sectdata.data (), lma, size);
10855
10856       if (res == -1)
10857         error (_("target memory fault, section %s, range %s -- %s"), sectname,
10858                paddress (target_gdbarch (), lma),
10859                paddress (target_gdbarch (), lma + size));
10860
10861       printf_filtered ("Section %s, range %s -- %s: ", sectname,
10862                        paddress (target_gdbarch (), lma),
10863                        paddress (target_gdbarch (), lma + size));
10864       if (res)
10865         printf_filtered ("matched.\n");
10866       else
10867         {
10868           printf_filtered ("MIS-MATCHED!\n");
10869           mismatched++;
10870         }
10871     }
10872   if (mismatched > 0)
10873     warning (_("One or more sections of the target image does not match\n\
10874 the loaded file\n"));
10875   if (args && !matched)
10876     printf_filtered (_("No loaded section named '%s'.\n"), args);
10877 }
10878
10879 /* Write LEN bytes from WRITEBUF into OBJECT_NAME/ANNEX at OFFSET
10880    into remote target.  The number of bytes written to the remote
10881    target is returned, or -1 for error.  */
10882
10883 target_xfer_status
10884 remote_target::remote_write_qxfer (const char *object_name,
10885                                    const char *annex, const gdb_byte *writebuf,
10886                                    ULONGEST offset, LONGEST len,
10887                                    ULONGEST *xfered_len,
10888                                    struct packet_config *packet)
10889 {
10890   int i, buf_len;
10891   ULONGEST n;
10892   struct remote_state *rs = get_remote_state ();
10893   int max_size = get_memory_write_packet_size (); 
10894
10895   if (packet_config_support (packet) == PACKET_DISABLE)
10896     return TARGET_XFER_E_IO;
10897
10898   /* Insert header.  */
10899   i = snprintf (rs->buf, max_size, 
10900                 "qXfer:%s:write:%s:%s:",
10901                 object_name, annex ? annex : "",
10902                 phex_nz (offset, sizeof offset));
10903   max_size -= (i + 1);
10904
10905   /* Escape as much data as fits into rs->buf.  */
10906   buf_len = remote_escape_output 
10907     (writebuf, len, 1, (gdb_byte *) rs->buf + i, &max_size, max_size);
10908
10909   if (putpkt_binary (rs->buf, i + buf_len) < 0
10910       || getpkt_sane (&rs->buf, &rs->buf_size, 0) < 0
10911       || packet_ok (rs->buf, packet) != PACKET_OK)
10912     return TARGET_XFER_E_IO;
10913
10914   unpack_varlen_hex (rs->buf, &n);
10915
10916   *xfered_len = n;
10917   return (*xfered_len != 0) ? TARGET_XFER_OK : TARGET_XFER_EOF;
10918 }
10919
10920 /* Read OBJECT_NAME/ANNEX from the remote target using a qXfer packet.
10921    Data at OFFSET, of up to LEN bytes, is read into READBUF; the
10922    number of bytes read is returned, or 0 for EOF, or -1 for error.
10923    The number of bytes read may be less than LEN without indicating an
10924    EOF.  PACKET is checked and updated to indicate whether the remote
10925    target supports this object.  */
10926
10927 target_xfer_status
10928 remote_target::remote_read_qxfer (const char *object_name,
10929                                   const char *annex,
10930                                   gdb_byte *readbuf, ULONGEST offset,
10931                                   LONGEST len,
10932                                   ULONGEST *xfered_len,
10933                                   struct packet_config *packet)
10934 {
10935   struct remote_state *rs = get_remote_state ();
10936   LONGEST i, n, packet_len;
10937
10938   if (packet_config_support (packet) == PACKET_DISABLE)
10939     return TARGET_XFER_E_IO;
10940
10941   /* Check whether we've cached an end-of-object packet that matches
10942      this request.  */
10943   if (rs->finished_object)
10944     {
10945       if (strcmp (object_name, rs->finished_object) == 0
10946           && strcmp (annex ? annex : "", rs->finished_annex) == 0
10947           && offset == rs->finished_offset)
10948         return TARGET_XFER_EOF;
10949
10950
10951       /* Otherwise, we're now reading something different.  Discard
10952          the cache.  */
10953       xfree (rs->finished_object);
10954       xfree (rs->finished_annex);
10955       rs->finished_object = NULL;
10956       rs->finished_annex = NULL;
10957     }
10958
10959   /* Request only enough to fit in a single packet.  The actual data
10960      may not, since we don't know how much of it will need to be escaped;
10961      the target is free to respond with slightly less data.  We subtract
10962      five to account for the response type and the protocol frame.  */
10963   n = std::min<LONGEST> (get_remote_packet_size () - 5, len);
10964   snprintf (rs->buf, get_remote_packet_size () - 4, "qXfer:%s:read:%s:%s,%s",
10965             object_name, annex ? annex : "",
10966             phex_nz (offset, sizeof offset),
10967             phex_nz (n, sizeof n));
10968   i = putpkt (rs->buf);
10969   if (i < 0)
10970     return TARGET_XFER_E_IO;
10971
10972   rs->buf[0] = '\0';
10973   packet_len = getpkt_sane (&rs->buf, &rs->buf_size, 0);
10974   if (packet_len < 0 || packet_ok (rs->buf, packet) != PACKET_OK)
10975     return TARGET_XFER_E_IO;
10976
10977   if (rs->buf[0] != 'l' && rs->buf[0] != 'm')
10978     error (_("Unknown remote qXfer reply: %s"), rs->buf);
10979
10980   /* 'm' means there is (or at least might be) more data after this
10981      batch.  That does not make sense unless there's at least one byte
10982      of data in this reply.  */
10983   if (rs->buf[0] == 'm' && packet_len == 1)
10984     error (_("Remote qXfer reply contained no data."));
10985
10986   /* Got some data.  */
10987   i = remote_unescape_input ((gdb_byte *) rs->buf + 1,
10988                              packet_len - 1, readbuf, n);
10989
10990   /* 'l' is an EOF marker, possibly including a final block of data,
10991      or possibly empty.  If we have the final block of a non-empty
10992      object, record this fact to bypass a subsequent partial read.  */
10993   if (rs->buf[0] == 'l' && offset + i > 0)
10994     {
10995       rs->finished_object = xstrdup (object_name);
10996       rs->finished_annex = xstrdup (annex ? annex : "");
10997       rs->finished_offset = offset + i;
10998     }
10999
11000   if (i == 0)
11001     return TARGET_XFER_EOF;
11002   else
11003     {
11004       *xfered_len = i;
11005       return TARGET_XFER_OK;
11006     }
11007 }
11008
11009 enum target_xfer_status
11010 remote_target::xfer_partial (enum target_object object,
11011                              const char *annex, gdb_byte *readbuf,
11012                              const gdb_byte *writebuf, ULONGEST offset, ULONGEST len,
11013                              ULONGEST *xfered_len)
11014 {
11015   struct remote_state *rs;
11016   int i;
11017   char *p2;
11018   char query_type;
11019   int unit_size = gdbarch_addressable_memory_unit_size (target_gdbarch ());
11020
11021   set_remote_traceframe ();
11022   set_general_thread (inferior_ptid);
11023
11024   rs = get_remote_state ();
11025
11026   /* Handle memory using the standard memory routines.  */
11027   if (object == TARGET_OBJECT_MEMORY)
11028     {
11029       /* If the remote target is connected but not running, we should
11030          pass this request down to a lower stratum (e.g. the executable
11031          file).  */
11032       if (!target_has_execution)
11033         return TARGET_XFER_EOF;
11034
11035       if (writebuf != NULL)
11036         return remote_write_bytes (offset, writebuf, len, unit_size,
11037                                    xfered_len);
11038       else
11039         return remote_read_bytes (offset, readbuf, len, unit_size,
11040                                   xfered_len);
11041     }
11042
11043   /* Handle SPU memory using qxfer packets.  */
11044   if (object == TARGET_OBJECT_SPU)
11045     {
11046       if (readbuf)
11047         return remote_read_qxfer ("spu", annex, readbuf, offset, len,
11048                                   xfered_len, &remote_protocol_packets
11049                                   [PACKET_qXfer_spu_read]);
11050       else
11051         return remote_write_qxfer ("spu", annex, writebuf, offset, len,
11052                                    xfered_len, &remote_protocol_packets
11053                                    [PACKET_qXfer_spu_write]);
11054     }
11055
11056   /* Handle extra signal info using qxfer packets.  */
11057   if (object == TARGET_OBJECT_SIGNAL_INFO)
11058     {
11059       if (readbuf)
11060         return remote_read_qxfer ("siginfo", annex, readbuf, offset, len,
11061                                   xfered_len, &remote_protocol_packets
11062                                   [PACKET_qXfer_siginfo_read]);
11063       else
11064         return remote_write_qxfer ("siginfo", annex,
11065                                    writebuf, offset, len, xfered_len,
11066                                    &remote_protocol_packets
11067                                    [PACKET_qXfer_siginfo_write]);
11068     }
11069
11070   if (object == TARGET_OBJECT_STATIC_TRACE_DATA)
11071     {
11072       if (readbuf)
11073         return remote_read_qxfer ("statictrace", annex,
11074                                   readbuf, offset, len, xfered_len,
11075                                   &remote_protocol_packets
11076                                   [PACKET_qXfer_statictrace_read]);
11077       else
11078         return TARGET_XFER_E_IO;
11079     }
11080
11081   /* Only handle flash writes.  */
11082   if (writebuf != NULL)
11083     {
11084       switch (object)
11085         {
11086         case TARGET_OBJECT_FLASH:
11087           return remote_flash_write (offset, len, xfered_len,
11088                                      writebuf);
11089
11090         default:
11091           return TARGET_XFER_E_IO;
11092         }
11093     }
11094
11095   /* Map pre-existing objects onto letters.  DO NOT do this for new
11096      objects!!!  Instead specify new query packets.  */
11097   switch (object)
11098     {
11099     case TARGET_OBJECT_AVR:
11100       query_type = 'R';
11101       break;
11102
11103     case TARGET_OBJECT_AUXV:
11104       gdb_assert (annex == NULL);
11105       return remote_read_qxfer ("auxv", annex, readbuf, offset, len,
11106                                 xfered_len,
11107                                 &remote_protocol_packets[PACKET_qXfer_auxv]);
11108
11109     case TARGET_OBJECT_AVAILABLE_FEATURES:
11110       return remote_read_qxfer
11111         ("features", annex, readbuf, offset, len, xfered_len,
11112          &remote_protocol_packets[PACKET_qXfer_features]);
11113
11114     case TARGET_OBJECT_LIBRARIES:
11115       return remote_read_qxfer
11116         ("libraries", annex, readbuf, offset, len, xfered_len,
11117          &remote_protocol_packets[PACKET_qXfer_libraries]);
11118
11119     case TARGET_OBJECT_LIBRARIES_SVR4:
11120       return remote_read_qxfer
11121         ("libraries-svr4", annex, readbuf, offset, len, xfered_len,
11122          &remote_protocol_packets[PACKET_qXfer_libraries_svr4]);
11123
11124     case TARGET_OBJECT_MEMORY_MAP:
11125       gdb_assert (annex == NULL);
11126       return remote_read_qxfer ("memory-map", annex, readbuf, offset, len,
11127                                  xfered_len,
11128                                 &remote_protocol_packets[PACKET_qXfer_memory_map]);
11129
11130     case TARGET_OBJECT_OSDATA:
11131       /* Should only get here if we're connected.  */
11132       gdb_assert (rs->remote_desc);
11133       return remote_read_qxfer
11134         ("osdata", annex, readbuf, offset, len, xfered_len,
11135         &remote_protocol_packets[PACKET_qXfer_osdata]);
11136
11137     case TARGET_OBJECT_THREADS:
11138       gdb_assert (annex == NULL);
11139       return remote_read_qxfer ("threads", annex, readbuf, offset, len,
11140                                 xfered_len,
11141                                 &remote_protocol_packets[PACKET_qXfer_threads]);
11142
11143     case TARGET_OBJECT_TRACEFRAME_INFO:
11144       gdb_assert (annex == NULL);
11145       return remote_read_qxfer
11146         ("traceframe-info", annex, readbuf, offset, len, xfered_len,
11147          &remote_protocol_packets[PACKET_qXfer_traceframe_info]);
11148
11149     case TARGET_OBJECT_FDPIC:
11150       return remote_read_qxfer ("fdpic", annex, readbuf, offset, len,
11151                                 xfered_len,
11152                                 &remote_protocol_packets[PACKET_qXfer_fdpic]);
11153
11154     case TARGET_OBJECT_OPENVMS_UIB:
11155       return remote_read_qxfer ("uib", annex, readbuf, offset, len,
11156                                 xfered_len,
11157                                 &remote_protocol_packets[PACKET_qXfer_uib]);
11158
11159     case TARGET_OBJECT_BTRACE:
11160       return remote_read_qxfer ("btrace", annex, readbuf, offset, len,
11161                                 xfered_len,
11162         &remote_protocol_packets[PACKET_qXfer_btrace]);
11163
11164     case TARGET_OBJECT_BTRACE_CONF:
11165       return remote_read_qxfer ("btrace-conf", annex, readbuf, offset,
11166                                 len, xfered_len,
11167         &remote_protocol_packets[PACKET_qXfer_btrace_conf]);
11168
11169     case TARGET_OBJECT_EXEC_FILE:
11170       return remote_read_qxfer ("exec-file", annex, readbuf, offset,
11171                                 len, xfered_len,
11172         &remote_protocol_packets[PACKET_qXfer_exec_file]);
11173
11174     default:
11175       return TARGET_XFER_E_IO;
11176     }
11177
11178   /* Minimum outbuf size is get_remote_packet_size ().  If LEN is not
11179      large enough let the caller deal with it.  */
11180   if (len < get_remote_packet_size ())
11181     return TARGET_XFER_E_IO;
11182   len = get_remote_packet_size ();
11183
11184   /* Except for querying the minimum buffer size, target must be open.  */
11185   if (!rs->remote_desc)
11186     error (_("remote query is only available after target open"));
11187
11188   gdb_assert (annex != NULL);
11189   gdb_assert (readbuf != NULL);
11190
11191   p2 = rs->buf;
11192   *p2++ = 'q';
11193   *p2++ = query_type;
11194
11195   /* We used one buffer char for the remote protocol q command and
11196      another for the query type.  As the remote protocol encapsulation
11197      uses 4 chars plus one extra in case we are debugging
11198      (remote_debug), we have PBUFZIZ - 7 left to pack the query
11199      string.  */
11200   i = 0;
11201   while (annex[i] && (i < (get_remote_packet_size () - 8)))
11202     {
11203       /* Bad caller may have sent forbidden characters.  */
11204       gdb_assert (isprint (annex[i]) && annex[i] != '$' && annex[i] != '#');
11205       *p2++ = annex[i];
11206       i++;
11207     }
11208   *p2 = '\0';
11209   gdb_assert (annex[i] == '\0');
11210
11211   i = putpkt (rs->buf);
11212   if (i < 0)
11213     return TARGET_XFER_E_IO;
11214
11215   getpkt (&rs->buf, &rs->buf_size, 0);
11216   strcpy ((char *) readbuf, rs->buf);
11217
11218   *xfered_len = strlen ((char *) readbuf);
11219   return (*xfered_len != 0) ? TARGET_XFER_OK : TARGET_XFER_EOF;
11220 }
11221
11222 /* Implementation of to_get_memory_xfer_limit.  */
11223
11224 ULONGEST
11225 remote_target::get_memory_xfer_limit ()
11226 {
11227   return get_memory_write_packet_size ();
11228 }
11229
11230 int
11231 remote_target::search_memory (CORE_ADDR start_addr, ULONGEST search_space_len,
11232                               const gdb_byte *pattern, ULONGEST pattern_len,
11233                               CORE_ADDR *found_addrp)
11234 {
11235   int addr_size = gdbarch_addr_bit (target_gdbarch ()) / 8;
11236   struct remote_state *rs = get_remote_state ();
11237   int max_size = get_memory_write_packet_size ();
11238   struct packet_config *packet =
11239     &remote_protocol_packets[PACKET_qSearch_memory];
11240   /* Number of packet bytes used to encode the pattern;
11241      this could be more than PATTERN_LEN due to escape characters.  */
11242   int escaped_pattern_len;
11243   /* Amount of pattern that was encodable in the packet.  */
11244   int used_pattern_len;
11245   int i;
11246   int found;
11247   ULONGEST found_addr;
11248
11249   /* Don't go to the target if we don't have to.  This is done before
11250      checking packet_config_support to avoid the possibility that a
11251      success for this edge case means the facility works in
11252      general.  */
11253   if (pattern_len > search_space_len)
11254     return 0;
11255   if (pattern_len == 0)
11256     {
11257       *found_addrp = start_addr;
11258       return 1;
11259     }
11260
11261   /* If we already know the packet isn't supported, fall back to the simple
11262      way of searching memory.  */
11263
11264   if (packet_config_support (packet) == PACKET_DISABLE)
11265     {
11266       /* Target doesn't provided special support, fall back and use the
11267          standard support (copy memory and do the search here).  */
11268       return simple_search_memory (this, start_addr, search_space_len,
11269                                    pattern, pattern_len, found_addrp);
11270     }
11271
11272   /* Make sure the remote is pointing at the right process.  */
11273   set_general_process ();
11274
11275   /* Insert header.  */
11276   i = snprintf (rs->buf, max_size, 
11277                 "qSearch:memory:%s;%s;",
11278                 phex_nz (start_addr, addr_size),
11279                 phex_nz (search_space_len, sizeof (search_space_len)));
11280   max_size -= (i + 1);
11281
11282   /* Escape as much data as fits into rs->buf.  */
11283   escaped_pattern_len =
11284     remote_escape_output (pattern, pattern_len, 1, (gdb_byte *) rs->buf + i,
11285                           &used_pattern_len, max_size);
11286
11287   /* Bail if the pattern is too large.  */
11288   if (used_pattern_len != pattern_len)
11289     error (_("Pattern is too large to transmit to remote target."));
11290
11291   if (putpkt_binary (rs->buf, i + escaped_pattern_len) < 0
11292       || getpkt_sane (&rs->buf, &rs->buf_size, 0) < 0
11293       || packet_ok (rs->buf, packet) != PACKET_OK)
11294     {
11295       /* The request may not have worked because the command is not
11296          supported.  If so, fall back to the simple way.  */
11297       if (packet_config_support (packet) == PACKET_DISABLE)
11298         {
11299           return simple_search_memory (this, start_addr, search_space_len,
11300                                        pattern, pattern_len, found_addrp);
11301         }
11302       return -1;
11303     }
11304
11305   if (rs->buf[0] == '0')
11306     found = 0;
11307   else if (rs->buf[0] == '1')
11308     {
11309       found = 1;
11310       if (rs->buf[1] != ',')
11311         error (_("Unknown qSearch:memory reply: %s"), rs->buf);
11312       unpack_varlen_hex (rs->buf + 2, &found_addr);
11313       *found_addrp = found_addr;
11314     }
11315   else
11316     error (_("Unknown qSearch:memory reply: %s"), rs->buf);
11317
11318   return found;
11319 }
11320
11321 void
11322 remote_target::rcmd (const char *command, struct ui_file *outbuf)
11323 {
11324   struct remote_state *rs = get_remote_state ();
11325   char *p = rs->buf;
11326
11327   if (!rs->remote_desc)
11328     error (_("remote rcmd is only available after target open"));
11329
11330   /* Send a NULL command across as an empty command.  */
11331   if (command == NULL)
11332     command = "";
11333
11334   /* The query prefix.  */
11335   strcpy (rs->buf, "qRcmd,");
11336   p = strchr (rs->buf, '\0');
11337
11338   if ((strlen (rs->buf) + strlen (command) * 2 + 8/*misc*/)
11339       > get_remote_packet_size ())
11340     error (_("\"monitor\" command ``%s'' is too long."), command);
11341
11342   /* Encode the actual command.  */
11343   bin2hex ((const gdb_byte *) command, p, strlen (command));
11344
11345   if (putpkt (rs->buf) < 0)
11346     error (_("Communication problem with target."));
11347
11348   /* get/display the response */
11349   while (1)
11350     {
11351       char *buf;
11352
11353       /* XXX - see also remote_get_noisy_reply().  */
11354       QUIT;                     /* Allow user to bail out with ^C.  */
11355       rs->buf[0] = '\0';
11356       if (getpkt_sane (&rs->buf, &rs->buf_size, 0) == -1)
11357         { 
11358           /* Timeout.  Continue to (try to) read responses.
11359              This is better than stopping with an error, assuming the stub
11360              is still executing the (long) monitor command.
11361              If needed, the user can interrupt gdb using C-c, obtaining
11362              an effect similar to stop on timeout.  */
11363           continue;
11364         }
11365       buf = rs->buf;
11366       if (buf[0] == '\0')
11367         error (_("Target does not support this command."));
11368       if (buf[0] == 'O' && buf[1] != 'K')
11369         {
11370           remote_console_output (buf + 1); /* 'O' message from stub.  */
11371           continue;
11372         }
11373       if (strcmp (buf, "OK") == 0)
11374         break;
11375       if (strlen (buf) == 3 && buf[0] == 'E'
11376           && isdigit (buf[1]) && isdigit (buf[2]))
11377         {
11378           error (_("Protocol error with Rcmd"));
11379         }
11380       for (p = buf; p[0] != '\0' && p[1] != '\0'; p += 2)
11381         {
11382           char c = (fromhex (p[0]) << 4) + fromhex (p[1]);
11383
11384           fputc_unfiltered (c, outbuf);
11385         }
11386       break;
11387     }
11388 }
11389
11390 std::vector<mem_region>
11391 remote_target::memory_map ()
11392 {
11393   std::vector<mem_region> result;
11394   gdb::optional<gdb::char_vector> text
11395     = target_read_stralloc (target_stack, TARGET_OBJECT_MEMORY_MAP, NULL);
11396
11397   if (text)
11398     result = parse_memory_map (text->data ());
11399
11400   return result;
11401 }
11402
11403 static void
11404 packet_command (const char *args, int from_tty)
11405 {
11406   remote_target *remote = get_current_remote_target ();
11407
11408   if (remote == nullptr)
11409     error (_("command can only be used with remote target"));
11410
11411   remote->packet_command (args, from_tty);
11412 }
11413
11414 void
11415 remote_target::packet_command (const char *args, int from_tty)
11416 {
11417   if (!args)
11418     error (_("remote-packet command requires packet text as argument"));
11419
11420   puts_filtered ("sending: ");
11421   print_packet (args);
11422   puts_filtered ("\n");
11423   putpkt (args);
11424
11425   remote_state *rs = get_remote_state ();
11426
11427   getpkt (&rs->buf, &rs->buf_size, 0);
11428   puts_filtered ("received: ");
11429   print_packet (rs->buf);
11430   puts_filtered ("\n");
11431 }
11432
11433 #if 0
11434 /* --------- UNIT_TEST for THREAD oriented PACKETS ------------------- */
11435
11436 static void display_thread_info (struct gdb_ext_thread_info *info);
11437
11438 static void threadset_test_cmd (char *cmd, int tty);
11439
11440 static void threadalive_test (char *cmd, int tty);
11441
11442 static void threadlist_test_cmd (char *cmd, int tty);
11443
11444 int get_and_display_threadinfo (threadref *ref);
11445
11446 static void threadinfo_test_cmd (char *cmd, int tty);
11447
11448 static int thread_display_step (threadref *ref, void *context);
11449
11450 static void threadlist_update_test_cmd (char *cmd, int tty);
11451
11452 static void init_remote_threadtests (void);
11453
11454 #define SAMPLE_THREAD  0x05060708       /* Truncated 64 bit threadid.  */
11455
11456 static void
11457 threadset_test_cmd (const char *cmd, int tty)
11458 {
11459   int sample_thread = SAMPLE_THREAD;
11460
11461   printf_filtered (_("Remote threadset test\n"));
11462   set_general_thread (sample_thread);
11463 }
11464
11465
11466 static void
11467 threadalive_test (const char *cmd, int tty)
11468 {
11469   int sample_thread = SAMPLE_THREAD;
11470   int pid = ptid_get_pid (inferior_ptid);
11471   ptid_t ptid = ptid_build (pid, sample_thread, 0);
11472
11473   if (remote_thread_alive (ptid))
11474     printf_filtered ("PASS: Thread alive test\n");
11475   else
11476     printf_filtered ("FAIL: Thread alive test\n");
11477 }
11478
11479 void output_threadid (char *title, threadref *ref);
11480
11481 void
11482 output_threadid (char *title, threadref *ref)
11483 {
11484   char hexid[20];
11485
11486   pack_threadid (&hexid[0], ref);       /* Convert threead id into hex.  */
11487   hexid[16] = 0;
11488   printf_filtered ("%s  %s\n", title, (&hexid[0]));
11489 }
11490
11491 static void
11492 threadlist_test_cmd (const char *cmd, int tty)
11493 {
11494   int startflag = 1;
11495   threadref nextthread;
11496   int done, result_count;
11497   threadref threadlist[3];
11498
11499   printf_filtered ("Remote Threadlist test\n");
11500   if (!remote_get_threadlist (startflag, &nextthread, 3, &done,
11501                               &result_count, &threadlist[0]))
11502     printf_filtered ("FAIL: threadlist test\n");
11503   else
11504     {
11505       threadref *scan = threadlist;
11506       threadref *limit = scan + result_count;
11507
11508       while (scan < limit)
11509         output_threadid (" thread ", scan++);
11510     }
11511 }
11512
11513 void
11514 display_thread_info (struct gdb_ext_thread_info *info)
11515 {
11516   output_threadid ("Threadid: ", &info->threadid);
11517   printf_filtered ("Name: %s\n ", info->shortname);
11518   printf_filtered ("State: %s\n", info->display);
11519   printf_filtered ("other: %s\n\n", info->more_display);
11520 }
11521
11522 int
11523 get_and_display_threadinfo (threadref *ref)
11524 {
11525   int result;
11526   int set;
11527   struct gdb_ext_thread_info threadinfo;
11528
11529   set = TAG_THREADID | TAG_EXISTS | TAG_THREADNAME
11530     | TAG_MOREDISPLAY | TAG_DISPLAY;
11531   if (0 != (result = remote_get_threadinfo (ref, set, &threadinfo)))
11532     display_thread_info (&threadinfo);
11533   return result;
11534 }
11535
11536 static void
11537 threadinfo_test_cmd (const char *cmd, int tty)
11538 {
11539   int athread = SAMPLE_THREAD;
11540   threadref thread;
11541   int set;
11542
11543   int_to_threadref (&thread, athread);
11544   printf_filtered ("Remote Threadinfo test\n");
11545   if (!get_and_display_threadinfo (&thread))
11546     printf_filtered ("FAIL cannot get thread info\n");
11547 }
11548
11549 static int
11550 thread_display_step (threadref *ref, void *context)
11551 {
11552   /* output_threadid(" threadstep ",ref); *//* simple test */
11553   return get_and_display_threadinfo (ref);
11554 }
11555
11556 static void
11557 threadlist_update_test_cmd (const char *cmd, int tty)
11558 {
11559   printf_filtered ("Remote Threadlist update test\n");
11560   remote_threadlist_iterator (thread_display_step, 0, CRAZY_MAX_THREADS);
11561 }
11562
11563 static void
11564 init_remote_threadtests (void)
11565 {
11566   add_com ("tlist", class_obscure, threadlist_test_cmd,
11567            _("Fetch and print the remote list of "
11568              "thread identifiers, one pkt only"));
11569   add_com ("tinfo", class_obscure, threadinfo_test_cmd,
11570            _("Fetch and display info about one thread"));
11571   add_com ("tset", class_obscure, threadset_test_cmd,
11572            _("Test setting to a different thread"));
11573   add_com ("tupd", class_obscure, threadlist_update_test_cmd,
11574            _("Iterate through updating all remote thread info"));
11575   add_com ("talive", class_obscure, threadalive_test,
11576            _(" Remote thread alive test "));
11577 }
11578
11579 #endif /* 0 */
11580
11581 /* Convert a thread ID to a string.  Returns the string in a static
11582    buffer.  */
11583
11584 const char *
11585 remote_target::pid_to_str (ptid_t ptid)
11586 {
11587   static char buf[64];
11588   struct remote_state *rs = get_remote_state ();
11589
11590   if (ptid_equal (ptid, null_ptid))
11591     return normal_pid_to_str (ptid);
11592   else if (ptid_is_pid (ptid))
11593     {
11594       /* Printing an inferior target id.  */
11595
11596       /* When multi-process extensions are off, there's no way in the
11597          remote protocol to know the remote process id, if there's any
11598          at all.  There's one exception --- when we're connected with
11599          target extended-remote, and we manually attached to a process
11600          with "attach PID".  We don't record anywhere a flag that
11601          allows us to distinguish that case from the case of
11602          connecting with extended-remote and the stub already being
11603          attached to a process, and reporting yes to qAttached, hence
11604          no smart special casing here.  */
11605       if (!remote_multi_process_p (rs))
11606         {
11607           xsnprintf (buf, sizeof buf, "Remote target");
11608           return buf;
11609         }
11610
11611       return normal_pid_to_str (ptid);
11612     }
11613   else
11614     {
11615       if (ptid_equal (magic_null_ptid, ptid))
11616         xsnprintf (buf, sizeof buf, "Thread <main>");
11617       else if (remote_multi_process_p (rs))
11618         if (ptid_get_lwp (ptid) == 0)
11619           return normal_pid_to_str (ptid);
11620         else
11621           xsnprintf (buf, sizeof buf, "Thread %d.%ld",
11622                      ptid_get_pid (ptid), ptid_get_lwp (ptid));
11623       else
11624         xsnprintf (buf, sizeof buf, "Thread %ld",
11625                    ptid_get_lwp (ptid));
11626       return buf;
11627     }
11628 }
11629
11630 /* Get the address of the thread local variable in OBJFILE which is
11631    stored at OFFSET within the thread local storage for thread PTID.  */
11632
11633 CORE_ADDR
11634 remote_target::get_thread_local_address (ptid_t ptid, CORE_ADDR lm,
11635                                          CORE_ADDR offset)
11636 {
11637   if (packet_support (PACKET_qGetTLSAddr) != PACKET_DISABLE)
11638     {
11639       struct remote_state *rs = get_remote_state ();
11640       char *p = rs->buf;
11641       char *endp = rs->buf + get_remote_packet_size ();
11642       enum packet_result result;
11643
11644       strcpy (p, "qGetTLSAddr:");
11645       p += strlen (p);
11646       p = write_ptid (p, endp, ptid);
11647       *p++ = ',';
11648       p += hexnumstr (p, offset);
11649       *p++ = ',';
11650       p += hexnumstr (p, lm);
11651       *p++ = '\0';
11652
11653       putpkt (rs->buf);
11654       getpkt (&rs->buf, &rs->buf_size, 0);
11655       result = packet_ok (rs->buf,
11656                           &remote_protocol_packets[PACKET_qGetTLSAddr]);
11657       if (result == PACKET_OK)
11658         {
11659           ULONGEST result;
11660
11661           unpack_varlen_hex (rs->buf, &result);
11662           return result;
11663         }
11664       else if (result == PACKET_UNKNOWN)
11665         throw_error (TLS_GENERIC_ERROR,
11666                      _("Remote target doesn't support qGetTLSAddr packet"));
11667       else
11668         throw_error (TLS_GENERIC_ERROR,
11669                      _("Remote target failed to process qGetTLSAddr request"));
11670     }
11671   else
11672     throw_error (TLS_GENERIC_ERROR,
11673                  _("TLS not supported or disabled on this target"));
11674   /* Not reached.  */
11675   return 0;
11676 }
11677
11678 /* Provide thread local base, i.e. Thread Information Block address.
11679    Returns 1 if ptid is found and thread_local_base is non zero.  */
11680
11681 bool
11682 remote_target::get_tib_address (ptid_t ptid, CORE_ADDR *addr)
11683 {
11684   if (packet_support (PACKET_qGetTIBAddr) != PACKET_DISABLE)
11685     {
11686       struct remote_state *rs = get_remote_state ();
11687       char *p = rs->buf;
11688       char *endp = rs->buf + get_remote_packet_size ();
11689       enum packet_result result;
11690
11691       strcpy (p, "qGetTIBAddr:");
11692       p += strlen (p);
11693       p = write_ptid (p, endp, ptid);
11694       *p++ = '\0';
11695
11696       putpkt (rs->buf);
11697       getpkt (&rs->buf, &rs->buf_size, 0);
11698       result = packet_ok (rs->buf,
11699                           &remote_protocol_packets[PACKET_qGetTIBAddr]);
11700       if (result == PACKET_OK)
11701         {
11702           ULONGEST result;
11703
11704           unpack_varlen_hex (rs->buf, &result);
11705           if (addr)
11706             *addr = (CORE_ADDR) result;
11707           return true;
11708         }
11709       else if (result == PACKET_UNKNOWN)
11710         error (_("Remote target doesn't support qGetTIBAddr packet"));
11711       else
11712         error (_("Remote target failed to process qGetTIBAddr request"));
11713     }
11714   else
11715     error (_("qGetTIBAddr not supported or disabled on this target"));
11716   /* Not reached.  */
11717   return false;
11718 }
11719
11720 /* Support for inferring a target description based on the current
11721    architecture and the size of a 'g' packet.  While the 'g' packet
11722    can have any size (since optional registers can be left off the
11723    end), some sizes are easily recognizable given knowledge of the
11724    approximate architecture.  */
11725
11726 struct remote_g_packet_guess
11727 {
11728   int bytes;
11729   const struct target_desc *tdesc;
11730 };
11731 typedef struct remote_g_packet_guess remote_g_packet_guess_s;
11732 DEF_VEC_O(remote_g_packet_guess_s);
11733
11734 struct remote_g_packet_data
11735 {
11736   VEC(remote_g_packet_guess_s) *guesses;
11737 };
11738
11739 static struct gdbarch_data *remote_g_packet_data_handle;
11740
11741 static void *
11742 remote_g_packet_data_init (struct obstack *obstack)
11743 {
11744   return OBSTACK_ZALLOC (obstack, struct remote_g_packet_data);
11745 }
11746
11747 void
11748 register_remote_g_packet_guess (struct gdbarch *gdbarch, int bytes,
11749                                 const struct target_desc *tdesc)
11750 {
11751   struct remote_g_packet_data *data
11752     = ((struct remote_g_packet_data *)
11753        gdbarch_data (gdbarch, remote_g_packet_data_handle));
11754   struct remote_g_packet_guess new_guess, *guess;
11755   int ix;
11756
11757   gdb_assert (tdesc != NULL);
11758
11759   for (ix = 0;
11760        VEC_iterate (remote_g_packet_guess_s, data->guesses, ix, guess);
11761        ix++)
11762     if (guess->bytes == bytes)
11763       internal_error (__FILE__, __LINE__,
11764                       _("Duplicate g packet description added for size %d"),
11765                       bytes);
11766
11767   new_guess.bytes = bytes;
11768   new_guess.tdesc = tdesc;
11769   VEC_safe_push (remote_g_packet_guess_s, data->guesses, &new_guess);
11770 }
11771
11772 /* Return 1 if remote_read_description would do anything on this target
11773    and architecture, 0 otherwise.  */
11774
11775 static int
11776 remote_read_description_p (struct target_ops *target)
11777 {
11778   struct remote_g_packet_data *data
11779     = ((struct remote_g_packet_data *)
11780        gdbarch_data (target_gdbarch (), remote_g_packet_data_handle));
11781
11782   if (!VEC_empty (remote_g_packet_guess_s, data->guesses))
11783     return 1;
11784
11785   return 0;
11786 }
11787
11788 const struct target_desc *
11789 remote_target::read_description ()
11790 {
11791   struct remote_g_packet_data *data
11792     = ((struct remote_g_packet_data *)
11793        gdbarch_data (target_gdbarch (), remote_g_packet_data_handle));
11794
11795   /* Do not try this during initial connection, when we do not know
11796      whether there is a running but stopped thread.  */
11797   if (!target_has_execution || ptid_equal (inferior_ptid, null_ptid))
11798     return beneath->read_description ();
11799
11800   if (!VEC_empty (remote_g_packet_guess_s, data->guesses))
11801     {
11802       struct remote_g_packet_guess *guess;
11803       int ix;
11804       int bytes = send_g_packet ();
11805
11806       for (ix = 0;
11807            VEC_iterate (remote_g_packet_guess_s, data->guesses, ix, guess);
11808            ix++)
11809         if (guess->bytes == bytes)
11810           return guess->tdesc;
11811
11812       /* We discard the g packet.  A minor optimization would be to
11813          hold on to it, and fill the register cache once we have selected
11814          an architecture, but it's too tricky to do safely.  */
11815     }
11816
11817   return beneath->read_description ();
11818 }
11819
11820 /* Remote file transfer support.  This is host-initiated I/O, not
11821    target-initiated; for target-initiated, see remote-fileio.c.  */
11822
11823 /* If *LEFT is at least the length of STRING, copy STRING to
11824    *BUFFER, update *BUFFER to point to the new end of the buffer, and
11825    decrease *LEFT.  Otherwise raise an error.  */
11826
11827 static void
11828 remote_buffer_add_string (char **buffer, int *left, const char *string)
11829 {
11830   int len = strlen (string);
11831
11832   if (len > *left)
11833     error (_("Packet too long for target."));
11834
11835   memcpy (*buffer, string, len);
11836   *buffer += len;
11837   *left -= len;
11838
11839   /* NUL-terminate the buffer as a convenience, if there is
11840      room.  */
11841   if (*left)
11842     **buffer = '\0';
11843 }
11844
11845 /* If *LEFT is large enough, hex encode LEN bytes from BYTES into
11846    *BUFFER, update *BUFFER to point to the new end of the buffer, and
11847    decrease *LEFT.  Otherwise raise an error.  */
11848
11849 static void
11850 remote_buffer_add_bytes (char **buffer, int *left, const gdb_byte *bytes,
11851                          int len)
11852 {
11853   if (2 * len > *left)
11854     error (_("Packet too long for target."));
11855
11856   bin2hex (bytes, *buffer, len);
11857   *buffer += 2 * len;
11858   *left -= 2 * len;
11859
11860   /* NUL-terminate the buffer as a convenience, if there is
11861      room.  */
11862   if (*left)
11863     **buffer = '\0';
11864 }
11865
11866 /* If *LEFT is large enough, convert VALUE to hex and add it to
11867    *BUFFER, update *BUFFER to point to the new end of the buffer, and
11868    decrease *LEFT.  Otherwise raise an error.  */
11869
11870 static void
11871 remote_buffer_add_int (char **buffer, int *left, ULONGEST value)
11872 {
11873   int len = hexnumlen (value);
11874
11875   if (len > *left)
11876     error (_("Packet too long for target."));
11877
11878   hexnumstr (*buffer, value);
11879   *buffer += len;
11880   *left -= len;
11881
11882   /* NUL-terminate the buffer as a convenience, if there is
11883      room.  */
11884   if (*left)
11885     **buffer = '\0';
11886 }
11887
11888 /* Parse an I/O result packet from BUFFER.  Set RETCODE to the return
11889    value, *REMOTE_ERRNO to the remote error number or zero if none
11890    was included, and *ATTACHMENT to point to the start of the annex
11891    if any.  The length of the packet isn't needed here; there may
11892    be NUL bytes in BUFFER, but they will be after *ATTACHMENT.
11893
11894    Return 0 if the packet could be parsed, -1 if it could not.  If
11895    -1 is returned, the other variables may not be initialized.  */
11896
11897 static int
11898 remote_hostio_parse_result (char *buffer, int *retcode,
11899                             int *remote_errno, char **attachment)
11900 {
11901   char *p, *p2;
11902
11903   *remote_errno = 0;
11904   *attachment = NULL;
11905
11906   if (buffer[0] != 'F')
11907     return -1;
11908
11909   errno = 0;
11910   *retcode = strtol (&buffer[1], &p, 16);
11911   if (errno != 0 || p == &buffer[1])
11912     return -1;
11913
11914   /* Check for ",errno".  */
11915   if (*p == ',')
11916     {
11917       errno = 0;
11918       *remote_errno = strtol (p + 1, &p2, 16);
11919       if (errno != 0 || p + 1 == p2)
11920         return -1;
11921       p = p2;
11922     }
11923
11924   /* Check for ";attachment".  If there is no attachment, the
11925      packet should end here.  */
11926   if (*p == ';')
11927     {
11928       *attachment = p + 1;
11929       return 0;
11930     }
11931   else if (*p == '\0')
11932     return 0;
11933   else
11934     return -1;
11935 }
11936
11937 /* Send a prepared I/O packet to the target and read its response.
11938    The prepared packet is in the global RS->BUF before this function
11939    is called, and the answer is there when we return.
11940
11941    COMMAND_BYTES is the length of the request to send, which may include
11942    binary data.  WHICH_PACKET is the packet configuration to check
11943    before attempting a packet.  If an error occurs, *REMOTE_ERRNO
11944    is set to the error number and -1 is returned.  Otherwise the value
11945    returned by the function is returned.
11946
11947    ATTACHMENT and ATTACHMENT_LEN should be non-NULL if and only if an
11948    attachment is expected; an error will be reported if there's a
11949    mismatch.  If one is found, *ATTACHMENT will be set to point into
11950    the packet buffer and *ATTACHMENT_LEN will be set to the
11951    attachment's length.  */
11952
11953 int
11954 remote_target::remote_hostio_send_command (int command_bytes, int which_packet,
11955                                            int *remote_errno, char **attachment,
11956                                            int *attachment_len)
11957 {
11958   struct remote_state *rs = get_remote_state ();
11959   int ret, bytes_read;
11960   char *attachment_tmp;
11961
11962   if (packet_support (which_packet) == PACKET_DISABLE)
11963     {
11964       *remote_errno = FILEIO_ENOSYS;
11965       return -1;
11966     }
11967
11968   putpkt_binary (rs->buf, command_bytes);
11969   bytes_read = getpkt_sane (&rs->buf, &rs->buf_size, 0);
11970
11971   /* If it timed out, something is wrong.  Don't try to parse the
11972      buffer.  */
11973   if (bytes_read < 0)
11974     {
11975       *remote_errno = FILEIO_EINVAL;
11976       return -1;
11977     }
11978
11979   switch (packet_ok (rs->buf, &remote_protocol_packets[which_packet]))
11980     {
11981     case PACKET_ERROR:
11982       *remote_errno = FILEIO_EINVAL;
11983       return -1;
11984     case PACKET_UNKNOWN:
11985       *remote_errno = FILEIO_ENOSYS;
11986       return -1;
11987     case PACKET_OK:
11988       break;
11989     }
11990
11991   if (remote_hostio_parse_result (rs->buf, &ret, remote_errno,
11992                                   &attachment_tmp))
11993     {
11994       *remote_errno = FILEIO_EINVAL;
11995       return -1;
11996     }
11997
11998   /* Make sure we saw an attachment if and only if we expected one.  */
11999   if ((attachment_tmp == NULL && attachment != NULL)
12000       || (attachment_tmp != NULL && attachment == NULL))
12001     {
12002       *remote_errno = FILEIO_EINVAL;
12003       return -1;
12004     }
12005
12006   /* If an attachment was found, it must point into the packet buffer;
12007      work out how many bytes there were.  */
12008   if (attachment_tmp != NULL)
12009     {
12010       *attachment = attachment_tmp;
12011       *attachment_len = bytes_read - (*attachment - rs->buf);
12012     }
12013
12014   return ret;
12015 }
12016
12017 /* See declaration.h.  */
12018
12019 void
12020 readahead_cache::invalidate ()
12021 {
12022   this->fd = -1;
12023 }
12024
12025 /* See declaration.h.  */
12026
12027 void
12028 readahead_cache::invalidate_fd (int fd)
12029 {
12030   if (this->fd == fd)
12031     this->fd = -1;
12032 }
12033
12034 /* Set the filesystem remote_hostio functions that take FILENAME
12035    arguments will use.  Return 0 on success, or -1 if an error
12036    occurs (and set *REMOTE_ERRNO).  */
12037
12038 int
12039 remote_target::remote_hostio_set_filesystem (struct inferior *inf,
12040                                              int *remote_errno)
12041 {
12042   struct remote_state *rs = get_remote_state ();
12043   int required_pid = (inf == NULL || inf->fake_pid_p) ? 0 : inf->pid;
12044   char *p = rs->buf;
12045   int left = get_remote_packet_size () - 1;
12046   char arg[9];
12047   int ret;
12048
12049   if (packet_support (PACKET_vFile_setfs) == PACKET_DISABLE)
12050     return 0;
12051
12052   if (rs->fs_pid != -1 && required_pid == rs->fs_pid)
12053     return 0;
12054
12055   remote_buffer_add_string (&p, &left, "vFile:setfs:");
12056
12057   xsnprintf (arg, sizeof (arg), "%x", required_pid);
12058   remote_buffer_add_string (&p, &left, arg);
12059
12060   ret = remote_hostio_send_command (p - rs->buf, PACKET_vFile_setfs,
12061                                     remote_errno, NULL, NULL);
12062
12063   if (packet_support (PACKET_vFile_setfs) == PACKET_DISABLE)
12064     return 0;
12065
12066   if (ret == 0)
12067     rs->fs_pid = required_pid;
12068
12069   return ret;
12070 }
12071
12072 /* Implementation of to_fileio_open.  */
12073
12074 int
12075 remote_target::remote_hostio_open (inferior *inf, const char *filename,
12076                                    int flags, int mode, int warn_if_slow,
12077                                    int *remote_errno)
12078 {
12079   struct remote_state *rs = get_remote_state ();
12080   char *p = rs->buf;
12081   int left = get_remote_packet_size () - 1;
12082
12083   if (warn_if_slow)
12084     {
12085       static int warning_issued = 0;
12086
12087       printf_unfiltered (_("Reading %s from remote target...\n"),
12088                          filename);
12089
12090       if (!warning_issued)
12091         {
12092           warning (_("File transfers from remote targets can be slow."
12093                      " Use \"set sysroot\" to access files locally"
12094                      " instead."));
12095           warning_issued = 1;
12096         }
12097     }
12098
12099   if (remote_hostio_set_filesystem (inf, remote_errno) != 0)
12100     return -1;
12101
12102   remote_buffer_add_string (&p, &left, "vFile:open:");
12103
12104   remote_buffer_add_bytes (&p, &left, (const gdb_byte *) filename,
12105                            strlen (filename));
12106   remote_buffer_add_string (&p, &left, ",");
12107
12108   remote_buffer_add_int (&p, &left, flags);
12109   remote_buffer_add_string (&p, &left, ",");
12110
12111   remote_buffer_add_int (&p, &left, mode);
12112
12113   return remote_hostio_send_command (p - rs->buf, PACKET_vFile_open,
12114                                      remote_errno, NULL, NULL);
12115 }
12116
12117 int
12118 remote_target::fileio_open (struct inferior *inf, const char *filename,
12119                             int flags, int mode, int warn_if_slow,
12120                             int *remote_errno)
12121 {
12122   return remote_hostio_open (inf, filename, flags, mode, warn_if_slow,
12123                              remote_errno);
12124 }
12125
12126 /* Implementation of to_fileio_pwrite.  */
12127
12128 int
12129 remote_target::remote_hostio_pwrite (int fd, const gdb_byte *write_buf, int len,
12130                                      ULONGEST offset, int *remote_errno)
12131 {
12132   struct remote_state *rs = get_remote_state ();
12133   char *p = rs->buf;
12134   int left = get_remote_packet_size ();
12135   int out_len;
12136
12137   rs->readahead_cache.invalidate_fd (fd);
12138
12139   remote_buffer_add_string (&p, &left, "vFile:pwrite:");
12140
12141   remote_buffer_add_int (&p, &left, fd);
12142   remote_buffer_add_string (&p, &left, ",");
12143
12144   remote_buffer_add_int (&p, &left, offset);
12145   remote_buffer_add_string (&p, &left, ",");
12146
12147   p += remote_escape_output (write_buf, len, 1, (gdb_byte *) p, &out_len,
12148                              get_remote_packet_size () - (p - rs->buf));
12149
12150   return remote_hostio_send_command (p - rs->buf, PACKET_vFile_pwrite,
12151                                      remote_errno, NULL, NULL);
12152 }
12153
12154 int
12155 remote_target::fileio_pwrite (int fd, const gdb_byte *write_buf, int len,
12156                               ULONGEST offset, int *remote_errno)
12157 {
12158   return remote_hostio_pwrite (fd, write_buf, len, offset, remote_errno);
12159 }
12160
12161 /* Helper for the implementation of to_fileio_pread.  Read the file
12162    from the remote side with vFile:pread.  */
12163
12164 int
12165 remote_target::remote_hostio_pread_vFile (int fd, gdb_byte *read_buf, int len,
12166                                           ULONGEST offset, int *remote_errno)
12167 {
12168   struct remote_state *rs = get_remote_state ();
12169   char *p = rs->buf;
12170   char *attachment;
12171   int left = get_remote_packet_size ();
12172   int ret, attachment_len;
12173   int read_len;
12174
12175   remote_buffer_add_string (&p, &left, "vFile:pread:");
12176
12177   remote_buffer_add_int (&p, &left, fd);
12178   remote_buffer_add_string (&p, &left, ",");
12179
12180   remote_buffer_add_int (&p, &left, len);
12181   remote_buffer_add_string (&p, &left, ",");
12182
12183   remote_buffer_add_int (&p, &left, offset);
12184
12185   ret = remote_hostio_send_command (p - rs->buf, PACKET_vFile_pread,
12186                                     remote_errno, &attachment,
12187                                     &attachment_len);
12188
12189   if (ret < 0)
12190     return ret;
12191
12192   read_len = remote_unescape_input ((gdb_byte *) attachment, attachment_len,
12193                                     read_buf, len);
12194   if (read_len != ret)
12195     error (_("Read returned %d, but %d bytes."), ret, (int) read_len);
12196
12197   return ret;
12198 }
12199
12200 /* See declaration.h.  */
12201
12202 int
12203 readahead_cache::pread (int fd, gdb_byte *read_buf, size_t len,
12204                         ULONGEST offset)
12205 {
12206   if (this->fd == fd
12207       && this->offset <= offset
12208       && offset < this->offset + this->bufsize)
12209     {
12210       ULONGEST max = this->offset + this->bufsize;
12211
12212       if (offset + len > max)
12213         len = max - offset;
12214
12215       memcpy (read_buf, this->buf + offset - this->offset, len);
12216       return len;
12217     }
12218
12219   return 0;
12220 }
12221
12222 /* Implementation of to_fileio_pread.  */
12223
12224 int
12225 remote_target::remote_hostio_pread (int fd, gdb_byte *read_buf, int len,
12226                                     ULONGEST offset, int *remote_errno)
12227 {
12228   int ret;
12229   struct remote_state *rs = get_remote_state ();
12230   readahead_cache *cache = &rs->readahead_cache;
12231
12232   ret = cache->pread (fd, read_buf, len, offset);
12233   if (ret > 0)
12234     {
12235       cache->hit_count++;
12236
12237       if (remote_debug)
12238         fprintf_unfiltered (gdb_stdlog, "readahead cache hit %s\n",
12239                             pulongest (cache->hit_count));
12240       return ret;
12241     }
12242
12243   cache->miss_count++;
12244   if (remote_debug)
12245     fprintf_unfiltered (gdb_stdlog, "readahead cache miss %s\n",
12246                         pulongest (cache->miss_count));
12247
12248   cache->fd = fd;
12249   cache->offset = offset;
12250   cache->bufsize = get_remote_packet_size ();
12251   cache->buf = (gdb_byte *) xrealloc (cache->buf, cache->bufsize);
12252
12253   ret = remote_hostio_pread_vFile (cache->fd, cache->buf, cache->bufsize,
12254                                    cache->offset, remote_errno);
12255   if (ret <= 0)
12256     {
12257       cache->invalidate_fd (fd);
12258       return ret;
12259     }
12260
12261   cache->bufsize = ret;
12262   return cache->pread (fd, read_buf, len, offset);
12263 }
12264
12265 int
12266 remote_target::fileio_pread (int fd, gdb_byte *read_buf, int len,
12267                              ULONGEST offset, int *remote_errno)
12268 {
12269   return remote_hostio_pread (fd, read_buf, len, offset, remote_errno);
12270 }
12271
12272 /* Implementation of to_fileio_close.  */
12273
12274 int
12275 remote_target::remote_hostio_close (int fd, int *remote_errno)
12276 {
12277   struct remote_state *rs = get_remote_state ();
12278   char *p = rs->buf;
12279   int left = get_remote_packet_size () - 1;
12280
12281   rs->readahead_cache.invalidate_fd (fd);
12282
12283   remote_buffer_add_string (&p, &left, "vFile:close:");
12284
12285   remote_buffer_add_int (&p, &left, fd);
12286
12287   return remote_hostio_send_command (p - rs->buf, PACKET_vFile_close,
12288                                      remote_errno, NULL, NULL);
12289 }
12290
12291 int
12292 remote_target::fileio_close (int fd, int *remote_errno)
12293 {
12294   return remote_hostio_close (fd, remote_errno);
12295 }
12296
12297 /* Implementation of to_fileio_unlink.  */
12298
12299 int
12300 remote_target::remote_hostio_unlink (inferior *inf, const char *filename,
12301                                      int *remote_errno)
12302 {
12303   struct remote_state *rs = get_remote_state ();
12304   char *p = rs->buf;
12305   int left = get_remote_packet_size () - 1;
12306
12307   if (remote_hostio_set_filesystem (inf, remote_errno) != 0)
12308     return -1;
12309
12310   remote_buffer_add_string (&p, &left, "vFile:unlink:");
12311
12312   remote_buffer_add_bytes (&p, &left, (const gdb_byte *) filename,
12313                            strlen (filename));
12314
12315   return remote_hostio_send_command (p - rs->buf, PACKET_vFile_unlink,
12316                                      remote_errno, NULL, NULL);
12317 }
12318
12319 int
12320 remote_target::fileio_unlink (struct inferior *inf, const char *filename,
12321                               int *remote_errno)
12322 {
12323   return remote_hostio_unlink (inf, filename, remote_errno);
12324 }
12325
12326 /* Implementation of to_fileio_readlink.  */
12327
12328 gdb::optional<std::string>
12329 remote_target::fileio_readlink (struct inferior *inf, const char *filename,
12330                                 int *remote_errno)
12331 {
12332   struct remote_state *rs = get_remote_state ();
12333   char *p = rs->buf;
12334   char *attachment;
12335   int left = get_remote_packet_size ();
12336   int len, attachment_len;
12337   int read_len;
12338
12339   if (remote_hostio_set_filesystem (inf, remote_errno) != 0)
12340     return {};
12341
12342   remote_buffer_add_string (&p, &left, "vFile:readlink:");
12343
12344   remote_buffer_add_bytes (&p, &left, (const gdb_byte *) filename,
12345                            strlen (filename));
12346
12347   len = remote_hostio_send_command (p - rs->buf, PACKET_vFile_readlink,
12348                                     remote_errno, &attachment,
12349                                     &attachment_len);
12350
12351   if (len < 0)
12352     return {};
12353
12354   std::string ret (len, '\0');
12355
12356   read_len = remote_unescape_input ((gdb_byte *) attachment, attachment_len,
12357                                     (gdb_byte *) &ret[0], len);
12358   if (read_len != len)
12359     error (_("Readlink returned %d, but %d bytes."), len, read_len);
12360
12361   return ret;
12362 }
12363
12364 /* Implementation of to_fileio_fstat.  */
12365
12366 int
12367 remote_target::fileio_fstat (int fd, struct stat *st, int *remote_errno)
12368 {
12369   struct remote_state *rs = get_remote_state ();
12370   char *p = rs->buf;
12371   int left = get_remote_packet_size ();
12372   int attachment_len, ret;
12373   char *attachment;
12374   struct fio_stat fst;
12375   int read_len;
12376
12377   remote_buffer_add_string (&p, &left, "vFile:fstat:");
12378
12379   remote_buffer_add_int (&p, &left, fd);
12380
12381   ret = remote_hostio_send_command (p - rs->buf, PACKET_vFile_fstat,
12382                                     remote_errno, &attachment,
12383                                     &attachment_len);
12384   if (ret < 0)
12385     {
12386       if (*remote_errno != FILEIO_ENOSYS)
12387         return ret;
12388
12389       /* Strictly we should return -1, ENOSYS here, but when
12390          "set sysroot remote:" was implemented in August 2008
12391          BFD's need for a stat function was sidestepped with
12392          this hack.  This was not remedied until March 2015
12393          so we retain the previous behavior to avoid breaking
12394          compatibility.
12395
12396          Note that the memset is a March 2015 addition; older
12397          GDBs set st_size *and nothing else* so the structure
12398          would have garbage in all other fields.  This might
12399          break something but retaining the previous behavior
12400          here would be just too wrong.  */
12401
12402       memset (st, 0, sizeof (struct stat));
12403       st->st_size = INT_MAX;
12404       return 0;
12405     }
12406
12407   read_len = remote_unescape_input ((gdb_byte *) attachment, attachment_len,
12408                                     (gdb_byte *) &fst, sizeof (fst));
12409
12410   if (read_len != ret)
12411     error (_("vFile:fstat returned %d, but %d bytes."), ret, read_len);
12412
12413   if (read_len != sizeof (fst))
12414     error (_("vFile:fstat returned %d bytes, but expecting %d."),
12415            read_len, (int) sizeof (fst));
12416
12417   remote_fileio_to_host_stat (&fst, st);
12418
12419   return 0;
12420 }
12421
12422 /* Implementation of to_filesystem_is_local.  */
12423
12424 bool
12425 remote_target::filesystem_is_local ()
12426 {
12427   /* Valgrind GDB presents itself as a remote target but works
12428      on the local filesystem: it does not implement remote get
12429      and users are not expected to set a sysroot.  To handle
12430      this case we treat the remote filesystem as local if the
12431      sysroot is exactly TARGET_SYSROOT_PREFIX and if the stub
12432      does not support vFile:open.  */
12433   if (strcmp (gdb_sysroot, TARGET_SYSROOT_PREFIX) == 0)
12434     {
12435       enum packet_support ps = packet_support (PACKET_vFile_open);
12436
12437       if (ps == PACKET_SUPPORT_UNKNOWN)
12438         {
12439           int fd, remote_errno;
12440
12441           /* Try opening a file to probe support.  The supplied
12442              filename is irrelevant, we only care about whether
12443              the stub recognizes the packet or not.  */
12444           fd = remote_hostio_open (NULL, "just probing",
12445                                    FILEIO_O_RDONLY, 0700, 0,
12446                                    &remote_errno);
12447
12448           if (fd >= 0)
12449             remote_hostio_close (fd, &remote_errno);
12450
12451           ps = packet_support (PACKET_vFile_open);
12452         }
12453
12454       if (ps == PACKET_DISABLE)
12455         {
12456           static int warning_issued = 0;
12457
12458           if (!warning_issued)
12459             {
12460               warning (_("remote target does not support file"
12461                          " transfer, attempting to access files"
12462                          " from local filesystem."));
12463               warning_issued = 1;
12464             }
12465
12466           return true;
12467         }
12468     }
12469
12470   return false;
12471 }
12472
12473 static int
12474 remote_fileio_errno_to_host (int errnum)
12475 {
12476   switch (errnum)
12477     {
12478       case FILEIO_EPERM:
12479         return EPERM;
12480       case FILEIO_ENOENT:
12481         return ENOENT;
12482       case FILEIO_EINTR:
12483         return EINTR;
12484       case FILEIO_EIO:
12485         return EIO;
12486       case FILEIO_EBADF:
12487         return EBADF;
12488       case FILEIO_EACCES:
12489         return EACCES;
12490       case FILEIO_EFAULT:
12491         return EFAULT;
12492       case FILEIO_EBUSY:
12493         return EBUSY;
12494       case FILEIO_EEXIST:
12495         return EEXIST;
12496       case FILEIO_ENODEV:
12497         return ENODEV;
12498       case FILEIO_ENOTDIR:
12499         return ENOTDIR;
12500       case FILEIO_EISDIR:
12501         return EISDIR;
12502       case FILEIO_EINVAL:
12503         return EINVAL;
12504       case FILEIO_ENFILE:
12505         return ENFILE;
12506       case FILEIO_EMFILE:
12507         return EMFILE;
12508       case FILEIO_EFBIG:
12509         return EFBIG;
12510       case FILEIO_ENOSPC:
12511         return ENOSPC;
12512       case FILEIO_ESPIPE:
12513         return ESPIPE;
12514       case FILEIO_EROFS:
12515         return EROFS;
12516       case FILEIO_ENOSYS:
12517         return ENOSYS;
12518       case FILEIO_ENAMETOOLONG:
12519         return ENAMETOOLONG;
12520     }
12521   return -1;
12522 }
12523
12524 static char *
12525 remote_hostio_error (int errnum)
12526 {
12527   int host_error = remote_fileio_errno_to_host (errnum);
12528
12529   if (host_error == -1)
12530     error (_("Unknown remote I/O error %d"), errnum);
12531   else
12532     error (_("Remote I/O error: %s"), safe_strerror (host_error));
12533 }
12534
12535 /* A RAII wrapper around a remote file descriptor.  */
12536
12537 class scoped_remote_fd
12538 {
12539 public:
12540   scoped_remote_fd (remote_target *remote, int fd)
12541     : m_remote (remote), m_fd (fd)
12542   {
12543   }
12544
12545   ~scoped_remote_fd ()
12546   {
12547     if (m_fd != -1)
12548       {
12549         try
12550           {
12551             int remote_errno;
12552             m_remote->remote_hostio_close (m_fd, &remote_errno);
12553           }
12554         catch (...)
12555           {
12556             /* Swallow exception before it escapes the dtor.  If
12557                something goes wrong, likely the connection is gone,
12558                and there's nothing else that can be done.  */
12559           }
12560       }
12561   }
12562
12563   DISABLE_COPY_AND_ASSIGN (scoped_remote_fd);
12564
12565   /* Release ownership of the file descriptor, and return it.  */
12566   int release () noexcept
12567   {
12568     int fd = m_fd;
12569     m_fd = -1;
12570     return fd;
12571   }
12572
12573   /* Return the owned file descriptor.  */
12574   int get () const noexcept
12575   {
12576     return m_fd;
12577   }
12578
12579 private:
12580   /* The remote target.  */
12581   remote_target *m_remote;
12582
12583   /* The owned remote I/O file descriptor.  */
12584   int m_fd;
12585 };
12586
12587 void
12588 remote_file_put (const char *local_file, const char *remote_file, int from_tty)
12589 {
12590   remote_target *remote = get_current_remote_target ();
12591
12592   if (remote == nullptr)
12593     error (_("command can only be used with remote target"));
12594
12595   remote->remote_file_put (local_file, remote_file, from_tty);
12596 }
12597
12598 void
12599 remote_target::remote_file_put (const char *local_file, const char *remote_file,
12600                                 int from_tty)
12601 {
12602   int retcode, remote_errno, bytes, io_size;
12603   int bytes_in_buffer;
12604   int saw_eof;
12605   ULONGEST offset;
12606
12607   gdb_file_up file = gdb_fopen_cloexec (local_file, "rb");
12608   if (file == NULL)
12609     perror_with_name (local_file);
12610
12611   scoped_remote_fd fd
12612     (this, remote_hostio_open (NULL,
12613                                remote_file, (FILEIO_O_WRONLY | FILEIO_O_CREAT
12614                                              | FILEIO_O_TRUNC),
12615                                0700, 0, &remote_errno));
12616   if (fd.get () == -1)
12617     remote_hostio_error (remote_errno);
12618
12619   /* Send up to this many bytes at once.  They won't all fit in the
12620      remote packet limit, so we'll transfer slightly fewer.  */
12621   io_size = get_remote_packet_size ();
12622   gdb::byte_vector buffer (io_size);
12623
12624   bytes_in_buffer = 0;
12625   saw_eof = 0;
12626   offset = 0;
12627   while (bytes_in_buffer || !saw_eof)
12628     {
12629       if (!saw_eof)
12630         {
12631           bytes = fread (buffer.data () + bytes_in_buffer, 1,
12632                          io_size - bytes_in_buffer,
12633                          file.get ());
12634           if (bytes == 0)
12635             {
12636               if (ferror (file.get ()))
12637                 error (_("Error reading %s."), local_file);
12638               else
12639                 {
12640                   /* EOF.  Unless there is something still in the
12641                      buffer from the last iteration, we are done.  */
12642                   saw_eof = 1;
12643                   if (bytes_in_buffer == 0)
12644                     break;
12645                 }
12646             }
12647         }
12648       else
12649         bytes = 0;
12650
12651       bytes += bytes_in_buffer;
12652       bytes_in_buffer = 0;
12653
12654       retcode = remote_hostio_pwrite (fd.get (), buffer.data (), bytes,
12655                                       offset, &remote_errno);
12656
12657       if (retcode < 0)
12658         remote_hostio_error (remote_errno);
12659       else if (retcode == 0)
12660         error (_("Remote write of %d bytes returned 0!"), bytes);
12661       else if (retcode < bytes)
12662         {
12663           /* Short write.  Save the rest of the read data for the next
12664              write.  */
12665           bytes_in_buffer = bytes - retcode;
12666           memmove (buffer.data (), buffer.data () + retcode, bytes_in_buffer);
12667         }
12668
12669       offset += retcode;
12670     }
12671
12672   if (remote_hostio_close (fd.release (), &remote_errno))
12673     remote_hostio_error (remote_errno);
12674
12675   if (from_tty)
12676     printf_filtered (_("Successfully sent file \"%s\".\n"), local_file);
12677 }
12678
12679 void
12680 remote_file_get (const char *remote_file, const char *local_file, int from_tty)
12681 {
12682   remote_target *remote = get_current_remote_target ();
12683
12684   if (remote == nullptr)
12685     error (_("command can only be used with remote target"));
12686
12687   remote->remote_file_get (remote_file, local_file, from_tty);
12688 }
12689
12690 void
12691 remote_target::remote_file_get (const char *remote_file, const char *local_file,
12692                                 int from_tty)
12693 {
12694   int remote_errno, bytes, io_size;
12695   ULONGEST offset;
12696
12697   scoped_remote_fd fd
12698     (this, remote_hostio_open (NULL,
12699                                remote_file, FILEIO_O_RDONLY, 0, 0,
12700                                &remote_errno));
12701   if (fd.get () == -1)
12702     remote_hostio_error (remote_errno);
12703
12704   gdb_file_up file = gdb_fopen_cloexec (local_file, "wb");
12705   if (file == NULL)
12706     perror_with_name (local_file);
12707
12708   /* Send up to this many bytes at once.  They won't all fit in the
12709      remote packet limit, so we'll transfer slightly fewer.  */
12710   io_size = get_remote_packet_size ();
12711   gdb::byte_vector buffer (io_size);
12712
12713   offset = 0;
12714   while (1)
12715     {
12716       bytes = remote_hostio_pread (fd.get (), buffer.data (), io_size, offset,
12717                                    &remote_errno);
12718       if (bytes == 0)
12719         /* Success, but no bytes, means end-of-file.  */
12720         break;
12721       if (bytes == -1)
12722         remote_hostio_error (remote_errno);
12723
12724       offset += bytes;
12725
12726       bytes = fwrite (buffer.data (), 1, bytes, file.get ());
12727       if (bytes == 0)
12728         perror_with_name (local_file);
12729     }
12730
12731   if (remote_hostio_close (fd.release (), &remote_errno))
12732     remote_hostio_error (remote_errno);
12733
12734   if (from_tty)
12735     printf_filtered (_("Successfully fetched file \"%s\".\n"), remote_file);
12736 }
12737
12738 void
12739 remote_file_delete (const char *remote_file, int from_tty)
12740 {
12741   remote_target *remote = get_current_remote_target ();
12742
12743   if (remote == nullptr)
12744     error (_("command can only be used with remote target"));
12745
12746   remote->remote_file_delete (remote_file, from_tty);
12747 }
12748
12749 void
12750 remote_target::remote_file_delete (const char *remote_file, int from_tty)
12751 {
12752   int retcode, remote_errno;
12753
12754   retcode = remote_hostio_unlink (NULL, remote_file, &remote_errno);
12755   if (retcode == -1)
12756     remote_hostio_error (remote_errno);
12757
12758   if (from_tty)
12759     printf_filtered (_("Successfully deleted file \"%s\".\n"), remote_file);
12760 }
12761
12762 static void
12763 remote_put_command (const char *args, int from_tty)
12764 {
12765   if (args == NULL)
12766     error_no_arg (_("file to put"));
12767
12768   gdb_argv argv (args);
12769   if (argv[0] == NULL || argv[1] == NULL || argv[2] != NULL)
12770     error (_("Invalid parameters to remote put"));
12771
12772   remote_file_put (argv[0], argv[1], from_tty);
12773 }
12774
12775 static void
12776 remote_get_command (const char *args, int from_tty)
12777 {
12778   if (args == NULL)
12779     error_no_arg (_("file to get"));
12780
12781   gdb_argv argv (args);
12782   if (argv[0] == NULL || argv[1] == NULL || argv[2] != NULL)
12783     error (_("Invalid parameters to remote get"));
12784
12785   remote_file_get (argv[0], argv[1], from_tty);
12786 }
12787
12788 static void
12789 remote_delete_command (const char *args, int from_tty)
12790 {
12791   if (args == NULL)
12792     error_no_arg (_("file to delete"));
12793
12794   gdb_argv argv (args);
12795   if (argv[0] == NULL || argv[1] != NULL)
12796     error (_("Invalid parameters to remote delete"));
12797
12798   remote_file_delete (argv[0], from_tty);
12799 }
12800
12801 static void
12802 remote_command (const char *args, int from_tty)
12803 {
12804   help_list (remote_cmdlist, "remote ", all_commands, gdb_stdout);
12805 }
12806
12807 bool
12808 remote_target::can_execute_reverse ()
12809 {
12810   if (packet_support (PACKET_bs) == PACKET_ENABLE
12811       || packet_support (PACKET_bc) == PACKET_ENABLE)
12812     return true;
12813   else
12814     return false;
12815 }
12816
12817 bool
12818 remote_target::supports_non_stop ()
12819 {
12820   return true;
12821 }
12822
12823 bool
12824 remote_target::supports_disable_randomization ()
12825 {
12826   /* Only supported in extended mode.  */
12827   return false;
12828 }
12829
12830 bool
12831 remote_target::supports_multi_process ()
12832 {
12833   struct remote_state *rs = get_remote_state ();
12834
12835   return remote_multi_process_p (rs);
12836 }
12837
12838 static int
12839 remote_supports_cond_tracepoints ()
12840 {
12841   return packet_support (PACKET_ConditionalTracepoints) == PACKET_ENABLE;
12842 }
12843
12844 bool
12845 remote_target::supports_evaluation_of_breakpoint_conditions ()
12846 {
12847   return packet_support (PACKET_ConditionalBreakpoints) == PACKET_ENABLE;
12848 }
12849
12850 static int
12851 remote_supports_fast_tracepoints ()
12852 {
12853   return packet_support (PACKET_FastTracepoints) == PACKET_ENABLE;
12854 }
12855
12856 static int
12857 remote_supports_static_tracepoints ()
12858 {
12859   return packet_support (PACKET_StaticTracepoints) == PACKET_ENABLE;
12860 }
12861
12862 static int
12863 remote_supports_install_in_trace ()
12864 {
12865   return packet_support (PACKET_InstallInTrace) == PACKET_ENABLE;
12866 }
12867
12868 bool
12869 remote_target::supports_enable_disable_tracepoint ()
12870 {
12871   return (packet_support (PACKET_EnableDisableTracepoints_feature)
12872           == PACKET_ENABLE);
12873 }
12874
12875 bool
12876 remote_target::supports_string_tracing ()
12877 {
12878   return packet_support (PACKET_tracenz_feature) == PACKET_ENABLE;
12879 }
12880
12881 bool
12882 remote_target::can_run_breakpoint_commands ()
12883 {
12884   return packet_support (PACKET_BreakpointCommands) == PACKET_ENABLE;
12885 }
12886
12887 void
12888 remote_target::trace_init ()
12889 {
12890   struct remote_state *rs = get_remote_state ();
12891
12892   putpkt ("QTinit");
12893   remote_get_noisy_reply ();
12894   if (strcmp (rs->buf, "OK") != 0)
12895     error (_("Target does not support this command."));
12896 }
12897
12898 /* Recursive routine to walk through command list including loops, and
12899    download packets for each command.  */
12900
12901 void
12902 remote_target::remote_download_command_source (int num, ULONGEST addr,
12903                                                struct command_line *cmds)
12904 {
12905   struct remote_state *rs = get_remote_state ();
12906   struct command_line *cmd;
12907
12908   for (cmd = cmds; cmd; cmd = cmd->next)
12909     {
12910       QUIT;     /* Allow user to bail out with ^C.  */
12911       strcpy (rs->buf, "QTDPsrc:");
12912       encode_source_string (num, addr, "cmd", cmd->line,
12913                             rs->buf + strlen (rs->buf),
12914                             rs->buf_size - strlen (rs->buf));
12915       putpkt (rs->buf);
12916       remote_get_noisy_reply ();
12917       if (strcmp (rs->buf, "OK"))
12918         warning (_("Target does not support source download."));
12919
12920       if (cmd->control_type == while_control
12921           || cmd->control_type == while_stepping_control)
12922         {
12923           remote_download_command_source (num, addr, cmd->body_list_0.get ());
12924
12925           QUIT; /* Allow user to bail out with ^C.  */
12926           strcpy (rs->buf, "QTDPsrc:");
12927           encode_source_string (num, addr, "cmd", "end",
12928                                 rs->buf + strlen (rs->buf),
12929                                 rs->buf_size - strlen (rs->buf));
12930           putpkt (rs->buf);
12931           remote_get_noisy_reply ();
12932           if (strcmp (rs->buf, "OK"))
12933             warning (_("Target does not support source download."));
12934         }
12935     }
12936 }
12937
12938 void
12939 remote_target::download_tracepoint (struct bp_location *loc)
12940 {
12941 #define BUF_SIZE 2048
12942
12943   CORE_ADDR tpaddr;
12944   char addrbuf[40];
12945   char buf[BUF_SIZE];
12946   std::vector<std::string> tdp_actions;
12947   std::vector<std::string> stepping_actions;
12948   char *pkt;
12949   struct breakpoint *b = loc->owner;
12950   struct tracepoint *t = (struct tracepoint *) b;
12951   struct remote_state *rs = get_remote_state ();
12952
12953   encode_actions_rsp (loc, &tdp_actions, &stepping_actions);
12954
12955   tpaddr = loc->address;
12956   sprintf_vma (addrbuf, tpaddr);
12957   xsnprintf (buf, BUF_SIZE, "QTDP:%x:%s:%c:%lx:%x", b->number,
12958              addrbuf, /* address */
12959              (b->enable_state == bp_enabled ? 'E' : 'D'),
12960              t->step_count, t->pass_count);
12961   /* Fast tracepoints are mostly handled by the target, but we can
12962      tell the target how big of an instruction block should be moved
12963      around.  */
12964   if (b->type == bp_fast_tracepoint)
12965     {
12966       /* Only test for support at download time; we may not know
12967          target capabilities at definition time.  */
12968       if (remote_supports_fast_tracepoints ())
12969         {
12970           if (gdbarch_fast_tracepoint_valid_at (loc->gdbarch, tpaddr,
12971                                                 NULL))
12972             xsnprintf (buf + strlen (buf), BUF_SIZE - strlen (buf), ":F%x",
12973                        gdb_insn_length (loc->gdbarch, tpaddr));
12974           else
12975             /* If it passed validation at definition but fails now,
12976                something is very wrong.  */
12977             internal_error (__FILE__, __LINE__,
12978                             _("Fast tracepoint not "
12979                               "valid during download"));
12980         }
12981       else
12982         /* Fast tracepoints are functionally identical to regular
12983            tracepoints, so don't take lack of support as a reason to
12984            give up on the trace run.  */
12985         warning (_("Target does not support fast tracepoints, "
12986                    "downloading %d as regular tracepoint"), b->number);
12987     }
12988   else if (b->type == bp_static_tracepoint)
12989     {
12990       /* Only test for support at download time; we may not know
12991          target capabilities at definition time.  */
12992       if (remote_supports_static_tracepoints ())
12993         {
12994           struct static_tracepoint_marker marker;
12995
12996           if (target_static_tracepoint_marker_at (tpaddr, &marker))
12997             strcat (buf, ":S");
12998           else
12999             error (_("Static tracepoint not valid during download"));
13000         }
13001       else
13002         /* Fast tracepoints are functionally identical to regular
13003            tracepoints, so don't take lack of support as a reason
13004            to give up on the trace run.  */
13005         error (_("Target does not support static tracepoints"));
13006     }
13007   /* If the tracepoint has a conditional, make it into an agent
13008      expression and append to the definition.  */
13009   if (loc->cond)
13010     {
13011       /* Only test support at download time, we may not know target
13012          capabilities at definition time.  */
13013       if (remote_supports_cond_tracepoints ())
13014         {
13015           agent_expr_up aexpr = gen_eval_for_expr (tpaddr, loc->cond.get ());
13016           xsnprintf (buf + strlen (buf), BUF_SIZE - strlen (buf), ":X%x,",
13017                      aexpr->len);
13018           pkt = buf + strlen (buf);
13019           for (int ndx = 0; ndx < aexpr->len; ++ndx)
13020             pkt = pack_hex_byte (pkt, aexpr->buf[ndx]);
13021           *pkt = '\0';
13022         }
13023       else
13024         warning (_("Target does not support conditional tracepoints, "
13025                    "ignoring tp %d cond"), b->number);
13026     }
13027
13028   if (b->commands || *default_collect)
13029     strcat (buf, "-");
13030   putpkt (buf);
13031   remote_get_noisy_reply ();
13032   if (strcmp (rs->buf, "OK"))
13033     error (_("Target does not support tracepoints."));
13034
13035   /* do_single_steps (t); */
13036   for (auto action_it = tdp_actions.begin ();
13037        action_it != tdp_actions.end (); action_it++)
13038     {
13039       QUIT;     /* Allow user to bail out with ^C.  */
13040
13041       bool has_more = (action_it != tdp_actions.end ()
13042                        || !stepping_actions.empty ());
13043
13044       xsnprintf (buf, BUF_SIZE, "QTDP:-%x:%s:%s%c",
13045                  b->number, addrbuf, /* address */
13046                  action_it->c_str (),
13047                  has_more ? '-' : 0);
13048       putpkt (buf);
13049       remote_get_noisy_reply ();
13050       if (strcmp (rs->buf, "OK"))
13051         error (_("Error on target while setting tracepoints."));
13052     }
13053
13054     for (auto action_it = stepping_actions.begin ();
13055          action_it != stepping_actions.end (); action_it++)
13056       {
13057         QUIT;   /* Allow user to bail out with ^C.  */
13058
13059         bool is_first = action_it == stepping_actions.begin ();
13060         bool has_more = action_it != stepping_actions.end ();
13061
13062         xsnprintf (buf, BUF_SIZE, "QTDP:-%x:%s:%s%s%s",
13063                    b->number, addrbuf, /* address */
13064                    is_first ? "S" : "",
13065                    action_it->c_str (),
13066                    has_more ? "-" : "");
13067         putpkt (buf);
13068         remote_get_noisy_reply ();
13069         if (strcmp (rs->buf, "OK"))
13070           error (_("Error on target while setting tracepoints."));
13071       }
13072
13073   if (packet_support (PACKET_TracepointSource) == PACKET_ENABLE)
13074     {
13075       if (b->location != NULL)
13076         {
13077           strcpy (buf, "QTDPsrc:");
13078           encode_source_string (b->number, loc->address, "at",
13079                                 event_location_to_string (b->location.get ()),
13080                                 buf + strlen (buf), 2048 - strlen (buf));
13081           putpkt (buf);
13082           remote_get_noisy_reply ();
13083           if (strcmp (rs->buf, "OK"))
13084             warning (_("Target does not support source download."));
13085         }
13086       if (b->cond_string)
13087         {
13088           strcpy (buf, "QTDPsrc:");
13089           encode_source_string (b->number, loc->address,
13090                                 "cond", b->cond_string, buf + strlen (buf),
13091                                 2048 - strlen (buf));
13092           putpkt (buf);
13093           remote_get_noisy_reply ();
13094           if (strcmp (rs->buf, "OK"))
13095             warning (_("Target does not support source download."));
13096         }
13097       remote_download_command_source (b->number, loc->address,
13098                                       breakpoint_commands (b));
13099     }
13100 }
13101
13102 bool
13103 remote_target::can_download_tracepoint ()
13104 {
13105   struct remote_state *rs = get_remote_state ();
13106   struct trace_status *ts;
13107   int status;
13108
13109   /* Don't try to install tracepoints until we've relocated our
13110      symbols, and fetched and merged the target's tracepoint list with
13111      ours.  */
13112   if (rs->starting_up)
13113     return false;
13114
13115   ts = current_trace_status ();
13116   status = get_trace_status (ts);
13117
13118   if (status == -1 || !ts->running_known || !ts->running)
13119     return false;
13120
13121   /* If we are in a tracing experiment, but remote stub doesn't support
13122      installing tracepoint in trace, we have to return.  */
13123   if (!remote_supports_install_in_trace ())
13124     return false;
13125
13126   return true;
13127 }
13128
13129
13130 void
13131 remote_target::download_trace_state_variable (const trace_state_variable &tsv)
13132 {
13133   struct remote_state *rs = get_remote_state ();
13134   char *p;
13135
13136   xsnprintf (rs->buf, get_remote_packet_size (), "QTDV:%x:%s:%x:",
13137              tsv.number, phex ((ULONGEST) tsv.initial_value, 8),
13138              tsv.builtin);
13139   p = rs->buf + strlen (rs->buf);
13140   if ((p - rs->buf) + tsv.name.length () * 2 >= get_remote_packet_size ())
13141     error (_("Trace state variable name too long for tsv definition packet"));
13142   p += 2 * bin2hex ((gdb_byte *) (tsv.name.data ()), p, tsv.name.length ());
13143   *p++ = '\0';
13144   putpkt (rs->buf);
13145   remote_get_noisy_reply ();
13146   if (*rs->buf == '\0')
13147     error (_("Target does not support this command."));
13148   if (strcmp (rs->buf, "OK") != 0)
13149     error (_("Error on target while downloading trace state variable."));
13150 }
13151
13152 void
13153 remote_target::enable_tracepoint (struct bp_location *location)
13154 {
13155   struct remote_state *rs = get_remote_state ();
13156   char addr_buf[40];
13157
13158   sprintf_vma (addr_buf, location->address);
13159   xsnprintf (rs->buf, get_remote_packet_size (), "QTEnable:%x:%s",
13160              location->owner->number, addr_buf);
13161   putpkt (rs->buf);
13162   remote_get_noisy_reply ();
13163   if (*rs->buf == '\0')
13164     error (_("Target does not support enabling tracepoints while a trace run is ongoing."));
13165   if (strcmp (rs->buf, "OK") != 0)
13166     error (_("Error on target while enabling tracepoint."));
13167 }
13168
13169 void
13170 remote_target::disable_tracepoint (struct bp_location *location)
13171 {
13172   struct remote_state *rs = get_remote_state ();
13173   char addr_buf[40];
13174
13175   sprintf_vma (addr_buf, location->address);
13176   xsnprintf (rs->buf, get_remote_packet_size (), "QTDisable:%x:%s",
13177              location->owner->number, addr_buf);
13178   putpkt (rs->buf);
13179   remote_get_noisy_reply ();
13180   if (*rs->buf == '\0')
13181     error (_("Target does not support disabling tracepoints while a trace run is ongoing."));
13182   if (strcmp (rs->buf, "OK") != 0)
13183     error (_("Error on target while disabling tracepoint."));
13184 }
13185
13186 void
13187 remote_target::trace_set_readonly_regions ()
13188 {
13189   asection *s;
13190   bfd *abfd = NULL;
13191   bfd_size_type size;
13192   bfd_vma vma;
13193   int anysecs = 0;
13194   int offset = 0;
13195
13196   if (!exec_bfd)
13197     return;                     /* No information to give.  */
13198
13199   struct remote_state *rs = get_remote_state ();
13200
13201   strcpy (rs->buf, "QTro");
13202   offset = strlen (rs->buf);
13203   for (s = exec_bfd->sections; s; s = s->next)
13204     {
13205       char tmp1[40], tmp2[40];
13206       int sec_length;
13207
13208       if ((s->flags & SEC_LOAD) == 0 ||
13209       /*  (s->flags & SEC_CODE) == 0 || */
13210           (s->flags & SEC_READONLY) == 0)
13211         continue;
13212
13213       anysecs = 1;
13214       vma = bfd_get_section_vma (abfd, s);
13215       size = bfd_get_section_size (s);
13216       sprintf_vma (tmp1, vma);
13217       sprintf_vma (tmp2, vma + size);
13218       sec_length = 1 + strlen (tmp1) + 1 + strlen (tmp2);
13219       if (offset + sec_length + 1 > rs->buf_size)
13220         {
13221           if (packet_support (PACKET_qXfer_traceframe_info) != PACKET_ENABLE)
13222             warning (_("\
13223 Too many sections for read-only sections definition packet."));
13224           break;
13225         }
13226       xsnprintf (rs->buf + offset, rs->buf_size - offset, ":%s,%s",
13227                  tmp1, tmp2);
13228       offset += sec_length;
13229     }
13230   if (anysecs)
13231     {
13232       putpkt (rs->buf);
13233       getpkt (&rs->buf, &rs->buf_size, 0);
13234     }
13235 }
13236
13237 void
13238 remote_target::trace_start ()
13239 {
13240   struct remote_state *rs = get_remote_state ();
13241
13242   putpkt ("QTStart");
13243   remote_get_noisy_reply ();
13244   if (*rs->buf == '\0')
13245     error (_("Target does not support this command."));
13246   if (strcmp (rs->buf, "OK") != 0)
13247     error (_("Bogus reply from target: %s"), rs->buf);
13248 }
13249
13250 int
13251 remote_target::get_trace_status (struct trace_status *ts)
13252 {
13253   /* Initialize it just to avoid a GCC false warning.  */
13254   char *p = NULL;
13255   /* FIXME we need to get register block size some other way.  */
13256   extern int trace_regblock_size;
13257   enum packet_result result;
13258   struct remote_state *rs = get_remote_state ();
13259
13260   if (packet_support (PACKET_qTStatus) == PACKET_DISABLE)
13261     return -1;
13262
13263   trace_regblock_size
13264     = rs->get_remote_arch_state (target_gdbarch ())->sizeof_g_packet;
13265
13266   putpkt ("qTStatus");
13267
13268   TRY
13269     {
13270       p = remote_get_noisy_reply ();
13271     }
13272   CATCH (ex, RETURN_MASK_ERROR)
13273     {
13274       if (ex.error != TARGET_CLOSE_ERROR)
13275         {
13276           exception_fprintf (gdb_stderr, ex, "qTStatus: ");
13277           return -1;
13278         }
13279       throw_exception (ex);
13280     }
13281   END_CATCH
13282
13283   result = packet_ok (p, &remote_protocol_packets[PACKET_qTStatus]);
13284
13285   /* If the remote target doesn't do tracing, flag it.  */
13286   if (result == PACKET_UNKNOWN)
13287     return -1;
13288
13289   /* We're working with a live target.  */
13290   ts->filename = NULL;
13291
13292   if (*p++ != 'T')
13293     error (_("Bogus trace status reply from target: %s"), rs->buf);
13294
13295   /* Function 'parse_trace_status' sets default value of each field of
13296      'ts' at first, so we don't have to do it here.  */
13297   parse_trace_status (p, ts);
13298
13299   return ts->running;
13300 }
13301
13302 void
13303 remote_target::get_tracepoint_status (struct breakpoint *bp,
13304                                       struct uploaded_tp *utp)
13305 {
13306   struct remote_state *rs = get_remote_state ();
13307   char *reply;
13308   struct bp_location *loc;
13309   struct tracepoint *tp = (struct tracepoint *) bp;
13310   size_t size = get_remote_packet_size ();
13311
13312   if (tp)
13313     {
13314       tp->hit_count = 0;
13315       tp->traceframe_usage = 0;
13316       for (loc = tp->loc; loc; loc = loc->next)
13317         {
13318           /* If the tracepoint was never downloaded, don't go asking for
13319              any status.  */
13320           if (tp->number_on_target == 0)
13321             continue;
13322           xsnprintf (rs->buf, size, "qTP:%x:%s", tp->number_on_target,
13323                      phex_nz (loc->address, 0));
13324           putpkt (rs->buf);
13325           reply = remote_get_noisy_reply ();
13326           if (reply && *reply)
13327             {
13328               if (*reply == 'V')
13329                 parse_tracepoint_status (reply + 1, bp, utp);
13330             }
13331         }
13332     }
13333   else if (utp)
13334     {
13335       utp->hit_count = 0;
13336       utp->traceframe_usage = 0;
13337       xsnprintf (rs->buf, size, "qTP:%x:%s", utp->number,
13338                  phex_nz (utp->addr, 0));
13339       putpkt (rs->buf);
13340       reply = remote_get_noisy_reply ();
13341       if (reply && *reply)
13342         {
13343           if (*reply == 'V')
13344             parse_tracepoint_status (reply + 1, bp, utp);
13345         }
13346     }
13347 }
13348
13349 void
13350 remote_target::trace_stop ()
13351 {
13352   struct remote_state *rs = get_remote_state ();
13353
13354   putpkt ("QTStop");
13355   remote_get_noisy_reply ();
13356   if (*rs->buf == '\0')
13357     error (_("Target does not support this command."));
13358   if (strcmp (rs->buf, "OK") != 0)
13359     error (_("Bogus reply from target: %s"), rs->buf);
13360 }
13361
13362 int
13363 remote_target::trace_find (enum trace_find_type type, int num,
13364                            CORE_ADDR addr1, CORE_ADDR addr2,
13365                            int *tpp)
13366 {
13367   struct remote_state *rs = get_remote_state ();
13368   char *endbuf = rs->buf + get_remote_packet_size ();
13369   char *p, *reply;
13370   int target_frameno = -1, target_tracept = -1;
13371
13372   /* Lookups other than by absolute frame number depend on the current
13373      trace selected, so make sure it is correct on the remote end
13374      first.  */
13375   if (type != tfind_number)
13376     set_remote_traceframe ();
13377
13378   p = rs->buf;
13379   strcpy (p, "QTFrame:");
13380   p = strchr (p, '\0');
13381   switch (type)
13382     {
13383     case tfind_number:
13384       xsnprintf (p, endbuf - p, "%x", num);
13385       break;
13386     case tfind_pc:
13387       xsnprintf (p, endbuf - p, "pc:%s", phex_nz (addr1, 0));
13388       break;
13389     case tfind_tp:
13390       xsnprintf (p, endbuf - p, "tdp:%x", num);
13391       break;
13392     case tfind_range:
13393       xsnprintf (p, endbuf - p, "range:%s:%s", phex_nz (addr1, 0),
13394                  phex_nz (addr2, 0));
13395       break;
13396     case tfind_outside:
13397       xsnprintf (p, endbuf - p, "outside:%s:%s", phex_nz (addr1, 0),
13398                  phex_nz (addr2, 0));
13399       break;
13400     default:
13401       error (_("Unknown trace find type %d"), type);
13402     }
13403
13404   putpkt (rs->buf);
13405   reply = remote_get_noisy_reply ();
13406   if (*reply == '\0')
13407     error (_("Target does not support this command."));
13408
13409   while (reply && *reply)
13410     switch (*reply)
13411       {
13412       case 'F':
13413         p = ++reply;
13414         target_frameno = (int) strtol (p, &reply, 16);
13415         if (reply == p)
13416           error (_("Unable to parse trace frame number"));
13417         /* Don't update our remote traceframe number cache on failure
13418            to select a remote traceframe.  */
13419         if (target_frameno == -1)
13420           return -1;
13421         break;
13422       case 'T':
13423         p = ++reply;
13424         target_tracept = (int) strtol (p, &reply, 16);
13425         if (reply == p)
13426           error (_("Unable to parse tracepoint number"));
13427         break;
13428       case 'O':         /* "OK"? */
13429         if (reply[1] == 'K' && reply[2] == '\0')
13430           reply += 2;
13431         else
13432           error (_("Bogus reply from target: %s"), reply);
13433         break;
13434       default:
13435         error (_("Bogus reply from target: %s"), reply);
13436       }
13437   if (tpp)
13438     *tpp = target_tracept;
13439
13440   rs->remote_traceframe_number = target_frameno;
13441   return target_frameno;
13442 }
13443
13444 bool
13445 remote_target::get_trace_state_variable_value (int tsvnum, LONGEST *val)
13446 {
13447   struct remote_state *rs = get_remote_state ();
13448   char *reply;
13449   ULONGEST uval;
13450
13451   set_remote_traceframe ();
13452
13453   xsnprintf (rs->buf, get_remote_packet_size (), "qTV:%x", tsvnum);
13454   putpkt (rs->buf);
13455   reply = remote_get_noisy_reply ();
13456   if (reply && *reply)
13457     {
13458       if (*reply == 'V')
13459         {
13460           unpack_varlen_hex (reply + 1, &uval);
13461           *val = (LONGEST) uval;
13462           return true;
13463         }
13464     }
13465   return false;
13466 }
13467
13468 int
13469 remote_target::save_trace_data (const char *filename)
13470 {
13471   struct remote_state *rs = get_remote_state ();
13472   char *p, *reply;
13473
13474   p = rs->buf;
13475   strcpy (p, "QTSave:");
13476   p += strlen (p);
13477   if ((p - rs->buf) + strlen (filename) * 2 >= get_remote_packet_size ())
13478     error (_("Remote file name too long for trace save packet"));
13479   p += 2 * bin2hex ((gdb_byte *) filename, p, strlen (filename));
13480   *p++ = '\0';
13481   putpkt (rs->buf);
13482   reply = remote_get_noisy_reply ();
13483   if (*reply == '\0')
13484     error (_("Target does not support this command."));
13485   if (strcmp (reply, "OK") != 0)
13486     error (_("Bogus reply from target: %s"), reply);
13487   return 0;
13488 }
13489
13490 /* This is basically a memory transfer, but needs to be its own packet
13491    because we don't know how the target actually organizes its trace
13492    memory, plus we want to be able to ask for as much as possible, but
13493    not be unhappy if we don't get as much as we ask for.  */
13494
13495 LONGEST
13496 remote_target::get_raw_trace_data (gdb_byte *buf, ULONGEST offset, LONGEST len)
13497 {
13498   struct remote_state *rs = get_remote_state ();
13499   char *reply;
13500   char *p;
13501   int rslt;
13502
13503   p = rs->buf;
13504   strcpy (p, "qTBuffer:");
13505   p += strlen (p);
13506   p += hexnumstr (p, offset);
13507   *p++ = ',';
13508   p += hexnumstr (p, len);
13509   *p++ = '\0';
13510
13511   putpkt (rs->buf);
13512   reply = remote_get_noisy_reply ();
13513   if (reply && *reply)
13514     {
13515       /* 'l' by itself means we're at the end of the buffer and
13516          there is nothing more to get.  */
13517       if (*reply == 'l')
13518         return 0;
13519
13520       /* Convert the reply into binary.  Limit the number of bytes to
13521          convert according to our passed-in buffer size, rather than
13522          what was returned in the packet; if the target is
13523          unexpectedly generous and gives us a bigger reply than we
13524          asked for, we don't want to crash.  */
13525       rslt = hex2bin (reply, buf, len);
13526       return rslt;
13527     }
13528
13529   /* Something went wrong, flag as an error.  */
13530   return -1;
13531 }
13532
13533 void
13534 remote_target::set_disconnected_tracing (int val)
13535 {
13536   struct remote_state *rs = get_remote_state ();
13537
13538   if (packet_support (PACKET_DisconnectedTracing_feature) == PACKET_ENABLE)
13539     {
13540       char *reply;
13541
13542       xsnprintf (rs->buf, get_remote_packet_size (), "QTDisconnected:%x", val);
13543       putpkt (rs->buf);
13544       reply = remote_get_noisy_reply ();
13545       if (*reply == '\0')
13546         error (_("Target does not support this command."));
13547       if (strcmp (reply, "OK") != 0)
13548         error (_("Bogus reply from target: %s"), reply);
13549     }
13550   else if (val)
13551     warning (_("Target does not support disconnected tracing."));
13552 }
13553
13554 int
13555 remote_target::core_of_thread (ptid_t ptid)
13556 {
13557   struct thread_info *info = find_thread_ptid (ptid);
13558
13559   if (info != NULL && info->priv != NULL)
13560     return get_remote_thread_info (info)->core;
13561
13562   return -1;
13563 }
13564
13565 void
13566 remote_target::set_circular_trace_buffer (int val)
13567 {
13568   struct remote_state *rs = get_remote_state ();
13569   char *reply;
13570
13571   xsnprintf (rs->buf, get_remote_packet_size (), "QTBuffer:circular:%x", val);
13572   putpkt (rs->buf);
13573   reply = remote_get_noisy_reply ();
13574   if (*reply == '\0')
13575     error (_("Target does not support this command."));
13576   if (strcmp (reply, "OK") != 0)
13577     error (_("Bogus reply from target: %s"), reply);
13578 }
13579
13580 traceframe_info_up
13581 remote_target::traceframe_info ()
13582 {
13583   gdb::optional<gdb::char_vector> text
13584     = target_read_stralloc (target_stack, TARGET_OBJECT_TRACEFRAME_INFO,
13585                             NULL);
13586   if (text)
13587     return parse_traceframe_info (text->data ());
13588
13589   return NULL;
13590 }
13591
13592 /* Handle the qTMinFTPILen packet.  Returns the minimum length of
13593    instruction on which a fast tracepoint may be placed.  Returns -1
13594    if the packet is not supported, and 0 if the minimum instruction
13595    length is unknown.  */
13596
13597 int
13598 remote_target::get_min_fast_tracepoint_insn_len ()
13599 {
13600   struct remote_state *rs = get_remote_state ();
13601   char *reply;
13602
13603   /* If we're not debugging a process yet, the IPA can't be
13604      loaded.  */
13605   if (!target_has_execution)
13606     return 0;
13607
13608   /* Make sure the remote is pointing at the right process.  */
13609   set_general_process ();
13610
13611   xsnprintf (rs->buf, get_remote_packet_size (), "qTMinFTPILen");
13612   putpkt (rs->buf);
13613   reply = remote_get_noisy_reply ();
13614   if (*reply == '\0')
13615     return -1;
13616   else
13617     {
13618       ULONGEST min_insn_len;
13619
13620       unpack_varlen_hex (reply, &min_insn_len);
13621
13622       return (int) min_insn_len;
13623     }
13624 }
13625
13626 void
13627 remote_target::set_trace_buffer_size (LONGEST val)
13628 {
13629   if (packet_support (PACKET_QTBuffer_size) != PACKET_DISABLE)
13630     {
13631       struct remote_state *rs = get_remote_state ();
13632       char *buf = rs->buf;
13633       char *endbuf = rs->buf + get_remote_packet_size ();
13634       enum packet_result result;
13635
13636       gdb_assert (val >= 0 || val == -1);
13637       buf += xsnprintf (buf, endbuf - buf, "QTBuffer:size:");
13638       /* Send -1 as literal "-1" to avoid host size dependency.  */
13639       if (val < 0)
13640         {
13641           *buf++ = '-';
13642           buf += hexnumstr (buf, (ULONGEST) -val);
13643         }
13644       else
13645         buf += hexnumstr (buf, (ULONGEST) val);
13646
13647       putpkt (rs->buf);
13648       remote_get_noisy_reply ();
13649       result = packet_ok (rs->buf,
13650                   &remote_protocol_packets[PACKET_QTBuffer_size]);
13651
13652       if (result != PACKET_OK)
13653         warning (_("Bogus reply from target: %s"), rs->buf);
13654     }
13655 }
13656
13657 bool
13658 remote_target::set_trace_notes (const char *user, const char *notes,
13659                                 const char *stop_notes)
13660 {
13661   struct remote_state *rs = get_remote_state ();
13662   char *reply;
13663   char *buf = rs->buf;
13664   char *endbuf = rs->buf + get_remote_packet_size ();
13665   int nbytes;
13666
13667   buf += xsnprintf (buf, endbuf - buf, "QTNotes:");
13668   if (user)
13669     {
13670       buf += xsnprintf (buf, endbuf - buf, "user:");
13671       nbytes = bin2hex ((gdb_byte *) user, buf, strlen (user));
13672       buf += 2 * nbytes;
13673       *buf++ = ';';
13674     }
13675   if (notes)
13676     {
13677       buf += xsnprintf (buf, endbuf - buf, "notes:");
13678       nbytes = bin2hex ((gdb_byte *) notes, buf, strlen (notes));
13679       buf += 2 * nbytes;
13680       *buf++ = ';';
13681     }
13682   if (stop_notes)
13683     {
13684       buf += xsnprintf (buf, endbuf - buf, "tstop:");
13685       nbytes = bin2hex ((gdb_byte *) stop_notes, buf, strlen (stop_notes));
13686       buf += 2 * nbytes;
13687       *buf++ = ';';
13688     }
13689   /* Ensure the buffer is terminated.  */
13690   *buf = '\0';
13691
13692   putpkt (rs->buf);
13693   reply = remote_get_noisy_reply ();
13694   if (*reply == '\0')
13695     return false;
13696
13697   if (strcmp (reply, "OK") != 0)
13698     error (_("Bogus reply from target: %s"), reply);
13699
13700   return true;
13701 }
13702
13703 bool
13704 remote_target::use_agent (bool use)
13705 {
13706   if (packet_support (PACKET_QAgent) != PACKET_DISABLE)
13707     {
13708       struct remote_state *rs = get_remote_state ();
13709
13710       /* If the stub supports QAgent.  */
13711       xsnprintf (rs->buf, get_remote_packet_size (), "QAgent:%d", use);
13712       putpkt (rs->buf);
13713       getpkt (&rs->buf, &rs->buf_size, 0);
13714
13715       if (strcmp (rs->buf, "OK") == 0)
13716         {
13717           ::use_agent = use;
13718           return true;
13719         }
13720     }
13721
13722   return false;
13723 }
13724
13725 bool
13726 remote_target::can_use_agent ()
13727 {
13728   return (packet_support (PACKET_QAgent) != PACKET_DISABLE);
13729 }
13730
13731 struct btrace_target_info
13732 {
13733   /* The ptid of the traced thread.  */
13734   ptid_t ptid;
13735
13736   /* The obtained branch trace configuration.  */
13737   struct btrace_config conf;
13738 };
13739
13740 /* Reset our idea of our target's btrace configuration.  */
13741
13742 static void
13743 remote_btrace_reset (remote_state *rs)
13744 {
13745   memset (&rs->btrace_config, 0, sizeof (rs->btrace_config));
13746 }
13747
13748 /* Synchronize the configuration with the target.  */
13749
13750 void
13751 remote_target::btrace_sync_conf (const btrace_config *conf)
13752 {
13753   struct packet_config *packet;
13754   struct remote_state *rs;
13755   char *buf, *pos, *endbuf;
13756
13757   rs = get_remote_state ();
13758   buf = rs->buf;
13759   endbuf = buf + get_remote_packet_size ();
13760
13761   packet = &remote_protocol_packets[PACKET_Qbtrace_conf_bts_size];
13762   if (packet_config_support (packet) == PACKET_ENABLE
13763       && conf->bts.size != rs->btrace_config.bts.size)
13764     {
13765       pos = buf;
13766       pos += xsnprintf (pos, endbuf - pos, "%s=0x%x", packet->name,
13767                         conf->bts.size);
13768
13769       putpkt (buf);
13770       getpkt (&buf, &rs->buf_size, 0);
13771
13772       if (packet_ok (buf, packet) == PACKET_ERROR)
13773         {
13774           if (buf[0] == 'E' && buf[1] == '.')
13775             error (_("Failed to configure the BTS buffer size: %s"), buf + 2);
13776           else
13777             error (_("Failed to configure the BTS buffer size."));
13778         }
13779
13780       rs->btrace_config.bts.size = conf->bts.size;
13781     }
13782
13783   packet = &remote_protocol_packets[PACKET_Qbtrace_conf_pt_size];
13784   if (packet_config_support (packet) == PACKET_ENABLE
13785       && conf->pt.size != rs->btrace_config.pt.size)
13786     {
13787       pos = buf;
13788       pos += xsnprintf (pos, endbuf - pos, "%s=0x%x", packet->name,
13789                         conf->pt.size);
13790
13791       putpkt (buf);
13792       getpkt (&buf, &rs->buf_size, 0);
13793
13794       if (packet_ok (buf, packet) == PACKET_ERROR)
13795         {
13796           if (buf[0] == 'E' && buf[1] == '.')
13797             error (_("Failed to configure the trace buffer size: %s"), buf + 2);
13798           else
13799             error (_("Failed to configure the trace buffer size."));
13800         }
13801
13802       rs->btrace_config.pt.size = conf->pt.size;
13803     }
13804 }
13805
13806 /* Read the current thread's btrace configuration from the target and
13807    store it into CONF.  */
13808
13809 static void
13810 btrace_read_config (struct btrace_config *conf)
13811 {
13812   gdb::optional<gdb::char_vector> xml
13813     = target_read_stralloc (target_stack, TARGET_OBJECT_BTRACE_CONF, "");
13814   if (xml)
13815     parse_xml_btrace_conf (conf, xml->data ());
13816 }
13817
13818 /* Maybe reopen target btrace.  */
13819
13820 void
13821 remote_target::remote_btrace_maybe_reopen ()
13822 {
13823   struct remote_state *rs = get_remote_state ();
13824   struct thread_info *tp;
13825   int btrace_target_pushed = 0;
13826   int warned = 0;
13827
13828   scoped_restore_current_thread restore_thread;
13829
13830   ALL_NON_EXITED_THREADS (tp)
13831     {
13832       set_general_thread (tp->ptid);
13833
13834       memset (&rs->btrace_config, 0x00, sizeof (struct btrace_config));
13835       btrace_read_config (&rs->btrace_config);
13836
13837       if (rs->btrace_config.format == BTRACE_FORMAT_NONE)
13838         continue;
13839
13840 #if !defined (HAVE_LIBIPT)
13841       if (rs->btrace_config.format == BTRACE_FORMAT_PT)
13842         {
13843           if (!warned)
13844             {
13845               warned = 1;
13846               warning (_("Target is recording using Intel Processor Trace "
13847                          "but support was disabled at compile time."));
13848             }
13849
13850           continue;
13851         }
13852 #endif /* !defined (HAVE_LIBIPT) */
13853
13854       /* Push target, once, but before anything else happens.  This way our
13855          changes to the threads will be cleaned up by unpushing the target
13856          in case btrace_read_config () throws.  */
13857       if (!btrace_target_pushed)
13858         {
13859           btrace_target_pushed = 1;
13860           record_btrace_push_target ();
13861           printf_filtered (_("Target is recording using %s.\n"),
13862                            btrace_format_string (rs->btrace_config.format));
13863         }
13864
13865       tp->btrace.target = XCNEW (struct btrace_target_info);
13866       tp->btrace.target->ptid = tp->ptid;
13867       tp->btrace.target->conf = rs->btrace_config;
13868     }
13869 }
13870
13871 /* Enable branch tracing.  */
13872
13873 struct btrace_target_info *
13874 remote_target::enable_btrace (ptid_t ptid, const struct btrace_config *conf)
13875 {
13876   struct btrace_target_info *tinfo = NULL;
13877   struct packet_config *packet = NULL;
13878   struct remote_state *rs = get_remote_state ();
13879   char *buf = rs->buf;
13880   char *endbuf = rs->buf + get_remote_packet_size ();
13881
13882   switch (conf->format)
13883     {
13884       case BTRACE_FORMAT_BTS:
13885         packet = &remote_protocol_packets[PACKET_Qbtrace_bts];
13886         break;
13887
13888       case BTRACE_FORMAT_PT:
13889         packet = &remote_protocol_packets[PACKET_Qbtrace_pt];
13890         break;
13891     }
13892
13893   if (packet == NULL || packet_config_support (packet) != PACKET_ENABLE)
13894     error (_("Target does not support branch tracing."));
13895
13896   btrace_sync_conf (conf);
13897
13898   set_general_thread (ptid);
13899
13900   buf += xsnprintf (buf, endbuf - buf, "%s", packet->name);
13901   putpkt (rs->buf);
13902   getpkt (&rs->buf, &rs->buf_size, 0);
13903
13904   if (packet_ok (rs->buf, packet) == PACKET_ERROR)
13905     {
13906       if (rs->buf[0] == 'E' && rs->buf[1] == '.')
13907         error (_("Could not enable branch tracing for %s: %s"),
13908                target_pid_to_str (ptid), rs->buf + 2);
13909       else
13910         error (_("Could not enable branch tracing for %s."),
13911                target_pid_to_str (ptid));
13912     }
13913
13914   tinfo = XCNEW (struct btrace_target_info);
13915   tinfo->ptid = ptid;
13916
13917   /* If we fail to read the configuration, we lose some information, but the
13918      tracing itself is not impacted.  */
13919   TRY
13920     {
13921       btrace_read_config (&tinfo->conf);
13922     }
13923   CATCH (err, RETURN_MASK_ERROR)
13924     {
13925       if (err.message != NULL)
13926         warning ("%s", err.message);
13927     }
13928   END_CATCH
13929
13930   return tinfo;
13931 }
13932
13933 /* Disable branch tracing.  */
13934
13935 void
13936 remote_target::disable_btrace (struct btrace_target_info *tinfo)
13937 {
13938   struct packet_config *packet = &remote_protocol_packets[PACKET_Qbtrace_off];
13939   struct remote_state *rs = get_remote_state ();
13940   char *buf = rs->buf;
13941   char *endbuf = rs->buf + get_remote_packet_size ();
13942
13943   if (packet_config_support (packet) != PACKET_ENABLE)
13944     error (_("Target does not support branch tracing."));
13945
13946   set_general_thread (tinfo->ptid);
13947
13948   buf += xsnprintf (buf, endbuf - buf, "%s", packet->name);
13949   putpkt (rs->buf);
13950   getpkt (&rs->buf, &rs->buf_size, 0);
13951
13952   if (packet_ok (rs->buf, packet) == PACKET_ERROR)
13953     {
13954       if (rs->buf[0] == 'E' && rs->buf[1] == '.')
13955         error (_("Could not disable branch tracing for %s: %s"),
13956                target_pid_to_str (tinfo->ptid), rs->buf + 2);
13957       else
13958         error (_("Could not disable branch tracing for %s."),
13959                target_pid_to_str (tinfo->ptid));
13960     }
13961
13962   xfree (tinfo);
13963 }
13964
13965 /* Teardown branch tracing.  */
13966
13967 void
13968 remote_target::teardown_btrace (struct btrace_target_info *tinfo)
13969 {
13970   /* We must not talk to the target during teardown.  */
13971   xfree (tinfo);
13972 }
13973
13974 /* Read the branch trace.  */
13975
13976 enum btrace_error
13977 remote_target::read_btrace (struct btrace_data *btrace,
13978                             struct btrace_target_info *tinfo,
13979                             enum btrace_read_type type)
13980 {
13981   struct packet_config *packet = &remote_protocol_packets[PACKET_qXfer_btrace];
13982   const char *annex;
13983
13984   if (packet_config_support (packet) != PACKET_ENABLE)
13985     error (_("Target does not support branch tracing."));
13986
13987 #if !defined(HAVE_LIBEXPAT)
13988   error (_("Cannot process branch tracing result. XML parsing not supported."));
13989 #endif
13990
13991   switch (type)
13992     {
13993     case BTRACE_READ_ALL:
13994       annex = "all";
13995       break;
13996     case BTRACE_READ_NEW:
13997       annex = "new";
13998       break;
13999     case BTRACE_READ_DELTA:
14000       annex = "delta";
14001       break;
14002     default:
14003       internal_error (__FILE__, __LINE__,
14004                       _("Bad branch tracing read type: %u."),
14005                       (unsigned int) type);
14006     }
14007
14008   gdb::optional<gdb::char_vector> xml
14009     = target_read_stralloc (target_stack, TARGET_OBJECT_BTRACE, annex);
14010   if (!xml)
14011     return BTRACE_ERR_UNKNOWN;
14012
14013   parse_xml_btrace (btrace, xml->data ());
14014
14015   return BTRACE_ERR_NONE;
14016 }
14017
14018 const struct btrace_config *
14019 remote_target::btrace_conf (const struct btrace_target_info *tinfo)
14020 {
14021   return &tinfo->conf;
14022 }
14023
14024 bool
14025 remote_target::augmented_libraries_svr4_read ()
14026 {
14027   return (packet_support (PACKET_augmented_libraries_svr4_read_feature)
14028           == PACKET_ENABLE);
14029 }
14030
14031 /* Implementation of to_load.  */
14032
14033 void
14034 remote_target::load (const char *name, int from_tty)
14035 {
14036   generic_load (name, from_tty);
14037 }
14038
14039 /* Accepts an integer PID; returns a string representing a file that
14040    can be opened on the remote side to get the symbols for the child
14041    process.  Returns NULL if the operation is not supported.  */
14042
14043 char *
14044 remote_target::pid_to_exec_file (int pid)
14045 {
14046   static gdb::optional<gdb::char_vector> filename;
14047   struct inferior *inf;
14048   char *annex = NULL;
14049
14050   if (packet_support (PACKET_qXfer_exec_file) != PACKET_ENABLE)
14051     return NULL;
14052
14053   inf = find_inferior_pid (pid);
14054   if (inf == NULL)
14055     internal_error (__FILE__, __LINE__,
14056                     _("not currently attached to process %d"), pid);
14057
14058   if (!inf->fake_pid_p)
14059     {
14060       const int annex_size = 9;
14061
14062       annex = (char *) alloca (annex_size);
14063       xsnprintf (annex, annex_size, "%x", pid);
14064     }
14065
14066   filename = target_read_stralloc (target_stack,
14067                                    TARGET_OBJECT_EXEC_FILE, annex);
14068
14069   return filename ? filename->data () : nullptr;
14070 }
14071
14072 /* Implement the to_can_do_single_step target_ops method.  */
14073
14074 int
14075 remote_target::can_do_single_step ()
14076 {
14077   /* We can only tell whether target supports single step or not by
14078      supported s and S vCont actions if the stub supports vContSupported
14079      feature.  If the stub doesn't support vContSupported feature,
14080      we have conservatively to think target doesn't supports single
14081      step.  */
14082   if (packet_support (PACKET_vContSupported) == PACKET_ENABLE)
14083     {
14084       struct remote_state *rs = get_remote_state ();
14085
14086       if (packet_support (PACKET_vCont) == PACKET_SUPPORT_UNKNOWN)
14087         remote_vcont_probe ();
14088
14089       return rs->supports_vCont.s && rs->supports_vCont.S;
14090     }
14091   else
14092     return 0;
14093 }
14094
14095 /* Implementation of the to_execution_direction method for the remote
14096    target.  */
14097
14098 enum exec_direction_kind
14099 remote_target::execution_direction ()
14100 {
14101   struct remote_state *rs = get_remote_state ();
14102
14103   return rs->last_resume_exec_dir;
14104 }
14105
14106 /* Return pointer to the thread_info struct which corresponds to
14107    THREAD_HANDLE (having length HANDLE_LEN).  */
14108
14109 thread_info *
14110 remote_target::thread_handle_to_thread_info (const gdb_byte *thread_handle,
14111                                              int handle_len,
14112                                              inferior *inf)
14113 {
14114   struct thread_info *tp;
14115
14116   ALL_NON_EXITED_THREADS (tp)
14117     {
14118       remote_thread_info *priv = get_remote_thread_info (tp);
14119
14120       if (tp->inf == inf && priv != NULL)
14121         {
14122           if (handle_len != priv->thread_handle.size ())
14123             error (_("Thread handle size mismatch: %d vs %zu (from remote)"),
14124                    handle_len, priv->thread_handle.size ());
14125           if (memcmp (thread_handle, priv->thread_handle.data (),
14126                       handle_len) == 0)
14127             return tp;
14128         }
14129     }
14130
14131   return NULL;
14132 }
14133
14134 bool
14135 remote_target::can_async_p ()
14136 {
14137   struct remote_state *rs = get_remote_state ();
14138
14139   /* We don't go async if the user has explicitly prevented it with the
14140      "maint set target-async" command.  */
14141   if (!target_async_permitted)
14142     return false;
14143
14144   /* We're async whenever the serial device is.  */
14145   return serial_can_async_p (rs->remote_desc);
14146 }
14147
14148 bool
14149 remote_target::is_async_p ()
14150 {
14151   struct remote_state *rs = get_remote_state ();
14152
14153   if (!target_async_permitted)
14154     /* We only enable async when the user specifically asks for it.  */
14155     return false;
14156
14157   /* We're async whenever the serial device is.  */
14158   return serial_is_async_p (rs->remote_desc);
14159 }
14160
14161 /* Pass the SERIAL event on and up to the client.  One day this code
14162    will be able to delay notifying the client of an event until the
14163    point where an entire packet has been received.  */
14164
14165 static serial_event_ftype remote_async_serial_handler;
14166
14167 static void
14168 remote_async_serial_handler (struct serial *scb, void *context)
14169 {
14170   /* Don't propogate error information up to the client.  Instead let
14171      the client find out about the error by querying the target.  */
14172   inferior_event_handler (INF_REG_EVENT, NULL);
14173 }
14174
14175 static void
14176 remote_async_inferior_event_handler (gdb_client_data data)
14177 {
14178   inferior_event_handler (INF_REG_EVENT, data);
14179 }
14180
14181 void
14182 remote_target::async (int enable)
14183 {
14184   struct remote_state *rs = get_remote_state ();
14185
14186   if (enable)
14187     {
14188       serial_async (rs->remote_desc, remote_async_serial_handler, rs);
14189
14190       /* If there are pending events in the stop reply queue tell the
14191          event loop to process them.  */
14192       if (!QUEUE_is_empty (stop_reply_p, rs->stop_reply_queue))
14193         mark_async_event_handler (rs->remote_async_inferior_event_token);
14194       /* For simplicity, below we clear the pending events token
14195          without remembering whether it is marked, so here we always
14196          mark it.  If there's actually no pending notification to
14197          process, this ends up being a no-op (other than a spurious
14198          event-loop wakeup).  */
14199       if (target_is_non_stop_p ())
14200         mark_async_event_handler (rs->notif_state->get_pending_events_token);
14201     }
14202   else
14203     {
14204       serial_async (rs->remote_desc, NULL, NULL);
14205       /* If the core is disabling async, it doesn't want to be
14206          disturbed with target events.  Clear all async event sources
14207          too.  */
14208       clear_async_event_handler (rs->remote_async_inferior_event_token);
14209       if (target_is_non_stop_p ())
14210         clear_async_event_handler (rs->notif_state->get_pending_events_token);
14211     }
14212 }
14213
14214 /* Implementation of the to_thread_events method.  */
14215
14216 void
14217 remote_target::thread_events (int enable)
14218 {
14219   struct remote_state *rs = get_remote_state ();
14220   size_t size = get_remote_packet_size ();
14221
14222   if (packet_support (PACKET_QThreadEvents) == PACKET_DISABLE)
14223     return;
14224
14225   xsnprintf (rs->buf, size, "QThreadEvents:%x", enable ? 1 : 0);
14226   putpkt (rs->buf);
14227   getpkt (&rs->buf, &rs->buf_size, 0);
14228
14229   switch (packet_ok (rs->buf,
14230                      &remote_protocol_packets[PACKET_QThreadEvents]))
14231     {
14232     case PACKET_OK:
14233       if (strcmp (rs->buf, "OK") != 0)
14234         error (_("Remote refused setting thread events: %s"), rs->buf);
14235       break;
14236     case PACKET_ERROR:
14237       warning (_("Remote failure reply: %s"), rs->buf);
14238       break;
14239     case PACKET_UNKNOWN:
14240       break;
14241     }
14242 }
14243
14244 static void
14245 set_remote_cmd (const char *args, int from_tty)
14246 {
14247   help_list (remote_set_cmdlist, "set remote ", all_commands, gdb_stdout);
14248 }
14249
14250 static void
14251 show_remote_cmd (const char *args, int from_tty)
14252 {
14253   /* We can't just use cmd_show_list here, because we want to skip
14254      the redundant "show remote Z-packet" and the legacy aliases.  */
14255   struct cmd_list_element *list = remote_show_cmdlist;
14256   struct ui_out *uiout = current_uiout;
14257
14258   ui_out_emit_tuple tuple_emitter (uiout, "showlist");
14259   for (; list != NULL; list = list->next)
14260     if (strcmp (list->name, "Z-packet") == 0)
14261       continue;
14262     else if (list->type == not_set_cmd)
14263       /* Alias commands are exactly like the original, except they
14264          don't have the normal type.  */
14265       continue;
14266     else
14267       {
14268         ui_out_emit_tuple option_emitter (uiout, "option");
14269
14270         uiout->field_string ("name", list->name);
14271         uiout->text (":  ");
14272         if (list->type == show_cmd)
14273           do_show_command (NULL, from_tty, list);
14274         else
14275           cmd_func (list, NULL, from_tty);
14276       }
14277 }
14278
14279
14280 /* Function to be called whenever a new objfile (shlib) is detected.  */
14281 static void
14282 remote_new_objfile (struct objfile *objfile)
14283 {
14284   remote_target *remote = get_current_remote_target ();
14285
14286   if (remote != NULL)                   /* Have a remote connection.  */
14287     remote->remote_check_symbols ();
14288 }
14289
14290 /* Pull all the tracepoints defined on the target and create local
14291    data structures representing them.  We don't want to create real
14292    tracepoints yet, we don't want to mess up the user's existing
14293    collection.  */
14294   
14295 int
14296 remote_target::upload_tracepoints (struct uploaded_tp **utpp)
14297 {
14298   struct remote_state *rs = get_remote_state ();
14299   char *p;
14300
14301   /* Ask for a first packet of tracepoint definition.  */
14302   putpkt ("qTfP");
14303   getpkt (&rs->buf, &rs->buf_size, 0);
14304   p = rs->buf;
14305   while (*p && *p != 'l')
14306     {
14307       parse_tracepoint_definition (p, utpp);
14308       /* Ask for another packet of tracepoint definition.  */
14309       putpkt ("qTsP");
14310       getpkt (&rs->buf, &rs->buf_size, 0);
14311       p = rs->buf;
14312     }
14313   return 0;
14314 }
14315
14316 int
14317 remote_target::upload_trace_state_variables (struct uploaded_tsv **utsvp)
14318 {
14319   struct remote_state *rs = get_remote_state ();
14320   char *p;
14321
14322   /* Ask for a first packet of variable definition.  */
14323   putpkt ("qTfV");
14324   getpkt (&rs->buf, &rs->buf_size, 0);
14325   p = rs->buf;
14326   while (*p && *p != 'l')
14327     {
14328       parse_tsv_definition (p, utsvp);
14329       /* Ask for another packet of variable definition.  */
14330       putpkt ("qTsV");
14331       getpkt (&rs->buf, &rs->buf_size, 0);
14332       p = rs->buf;
14333     }
14334   return 0;
14335 }
14336
14337 /* The "set/show range-stepping" show hook.  */
14338
14339 static void
14340 show_range_stepping (struct ui_file *file, int from_tty,
14341                      struct cmd_list_element *c,
14342                      const char *value)
14343 {
14344   fprintf_filtered (file,
14345                     _("Debugger's willingness to use range stepping "
14346                       "is %s.\n"), value);
14347 }
14348
14349 /* Return true if the vCont;r action is supported by the remote
14350    stub.  */
14351
14352 bool
14353 remote_target::vcont_r_supported ()
14354 {
14355   if (packet_support (PACKET_vCont) == PACKET_SUPPORT_UNKNOWN)
14356     remote_vcont_probe ();
14357
14358   return (packet_support (PACKET_vCont) == PACKET_ENABLE
14359           && get_remote_state ()->supports_vCont.r);
14360 }
14361
14362 /* The "set/show range-stepping" set hook.  */
14363
14364 static void
14365 set_range_stepping (const char *ignore_args, int from_tty,
14366                     struct cmd_list_element *c)
14367 {
14368   /* When enabling, check whether range stepping is actually supported
14369      by the target, and warn if not.  */
14370   if (use_range_stepping)
14371     {
14372       remote_target *remote = get_current_remote_target ();
14373       if (remote == NULL
14374           || !remote->vcont_r_supported ())
14375         warning (_("Range stepping is not supported by the current target"));
14376     }
14377 }
14378
14379 void
14380 _initialize_remote (void)
14381 {
14382   struct cmd_list_element *cmd;
14383   const char *cmd_name;
14384
14385   /* architecture specific data */
14386   remote_g_packet_data_handle =
14387     gdbarch_data_register_pre_init (remote_g_packet_data_init);
14388
14389   remote_pspace_data
14390     = register_program_space_data_with_cleanup (NULL,
14391                                                 remote_pspace_data_cleanup);
14392
14393   add_target (remote_target_info, remote_target::open);
14394   add_target (extended_remote_target_info, extended_remote_target::open);
14395
14396   /* Hook into new objfile notification.  */
14397   gdb::observers::new_objfile.attach (remote_new_objfile);
14398
14399 #if 0
14400   init_remote_threadtests ();
14401 #endif
14402
14403   /* set/show remote ...  */
14404
14405   add_prefix_cmd ("remote", class_maintenance, set_remote_cmd, _("\
14406 Remote protocol specific variables\n\
14407 Configure various remote-protocol specific variables such as\n\
14408 the packets being used"),
14409                   &remote_set_cmdlist, "set remote ",
14410                   0 /* allow-unknown */, &setlist);
14411   add_prefix_cmd ("remote", class_maintenance, show_remote_cmd, _("\
14412 Remote protocol specific variables\n\
14413 Configure various remote-protocol specific variables such as\n\
14414 the packets being used"),
14415                   &remote_show_cmdlist, "show remote ",
14416                   0 /* allow-unknown */, &showlist);
14417
14418   add_cmd ("compare-sections", class_obscure, compare_sections_command, _("\
14419 Compare section data on target to the exec file.\n\
14420 Argument is a single section name (default: all loaded sections).\n\
14421 To compare only read-only loaded sections, specify the -r option."),
14422            &cmdlist);
14423
14424   add_cmd ("packet", class_maintenance, packet_command, _("\
14425 Send an arbitrary packet to a remote target.\n\
14426    maintenance packet TEXT\n\
14427 If GDB is talking to an inferior via the GDB serial protocol, then\n\
14428 this command sends the string TEXT to the inferior, and displays the\n\
14429 response packet.  GDB supplies the initial `$' character, and the\n\
14430 terminating `#' character and checksum."),
14431            &maintenancelist);
14432
14433   add_setshow_boolean_cmd ("remotebreak", no_class, &remote_break, _("\
14434 Set whether to send break if interrupted."), _("\
14435 Show whether to send break if interrupted."), _("\
14436 If set, a break, instead of a cntrl-c, is sent to the remote target."),
14437                            set_remotebreak, show_remotebreak,
14438                            &setlist, &showlist);
14439   cmd_name = "remotebreak";
14440   cmd = lookup_cmd (&cmd_name, setlist, "", -1, 1);
14441   deprecate_cmd (cmd, "set remote interrupt-sequence");
14442   cmd_name = "remotebreak"; /* needed because lookup_cmd updates the pointer */
14443   cmd = lookup_cmd (&cmd_name, showlist, "", -1, 1);
14444   deprecate_cmd (cmd, "show remote interrupt-sequence");
14445
14446   add_setshow_enum_cmd ("interrupt-sequence", class_support,
14447                         interrupt_sequence_modes, &interrupt_sequence_mode,
14448                         _("\
14449 Set interrupt sequence to remote target."), _("\
14450 Show interrupt sequence to remote target."), _("\
14451 Valid value is \"Ctrl-C\", \"BREAK\" or \"BREAK-g\". The default is \"Ctrl-C\"."),
14452                         NULL, show_interrupt_sequence,
14453                         &remote_set_cmdlist,
14454                         &remote_show_cmdlist);
14455
14456   add_setshow_boolean_cmd ("interrupt-on-connect", class_support,
14457                            &interrupt_on_connect, _("\
14458 Set whether interrupt-sequence is sent to remote target when gdb connects to."), _("            \
14459 Show whether interrupt-sequence is sent to remote target when gdb connects to."), _("           \
14460 If set, interrupt sequence is sent to remote target."),
14461                            NULL, NULL,
14462                            &remote_set_cmdlist, &remote_show_cmdlist);
14463
14464   /* Install commands for configuring memory read/write packets.  */
14465
14466   add_cmd ("remotewritesize", no_class, set_memory_write_packet_size, _("\
14467 Set the maximum number of bytes per memory write packet (deprecated)."),
14468            &setlist);
14469   add_cmd ("remotewritesize", no_class, show_memory_write_packet_size, _("\
14470 Show the maximum number of bytes per memory write packet (deprecated)."),
14471            &showlist);
14472   add_cmd ("memory-write-packet-size", no_class,
14473            set_memory_write_packet_size, _("\
14474 Set the maximum number of bytes per memory-write packet.\n\
14475 Specify the number of bytes in a packet or 0 (zero) for the\n\
14476 default packet size.  The actual limit is further reduced\n\
14477 dependent on the target.  Specify ``fixed'' to disable the\n\
14478 further restriction and ``limit'' to enable that restriction."),
14479            &remote_set_cmdlist);
14480   add_cmd ("memory-read-packet-size", no_class,
14481            set_memory_read_packet_size, _("\
14482 Set the maximum number of bytes per memory-read packet.\n\
14483 Specify the number of bytes in a packet or 0 (zero) for the\n\
14484 default packet size.  The actual limit is further reduced\n\
14485 dependent on the target.  Specify ``fixed'' to disable the\n\
14486 further restriction and ``limit'' to enable that restriction."),
14487            &remote_set_cmdlist);
14488   add_cmd ("memory-write-packet-size", no_class,
14489            show_memory_write_packet_size,
14490            _("Show the maximum number of bytes per memory-write packet."),
14491            &remote_show_cmdlist);
14492   add_cmd ("memory-read-packet-size", no_class,
14493            show_memory_read_packet_size,
14494            _("Show the maximum number of bytes per memory-read packet."),
14495            &remote_show_cmdlist);
14496
14497   add_setshow_zinteger_cmd ("hardware-watchpoint-limit", no_class,
14498                             &remote_hw_watchpoint_limit, _("\
14499 Set the maximum number of target hardware watchpoints."), _("\
14500 Show the maximum number of target hardware watchpoints."), _("\
14501 Specify a negative limit for unlimited."),
14502                             NULL, NULL, /* FIXME: i18n: The maximum
14503                                            number of target hardware
14504                                            watchpoints is %s.  */
14505                             &remote_set_cmdlist, &remote_show_cmdlist);
14506   add_setshow_zinteger_cmd ("hardware-watchpoint-length-limit", no_class,
14507                             &remote_hw_watchpoint_length_limit, _("\
14508 Set the maximum length (in bytes) of a target hardware watchpoint."), _("\
14509 Show the maximum length (in bytes) of a target hardware watchpoint."), _("\
14510 Specify a negative limit for unlimited."),
14511                             NULL, NULL, /* FIXME: i18n: The maximum
14512                                            length (in bytes) of a target
14513                                            hardware watchpoint is %s.  */
14514                             &remote_set_cmdlist, &remote_show_cmdlist);
14515   add_setshow_zinteger_cmd ("hardware-breakpoint-limit", no_class,
14516                             &remote_hw_breakpoint_limit, _("\
14517 Set the maximum number of target hardware breakpoints."), _("\
14518 Show the maximum number of target hardware breakpoints."), _("\
14519 Specify a negative limit for unlimited."),
14520                             NULL, NULL, /* FIXME: i18n: The maximum
14521                                            number of target hardware
14522                                            breakpoints is %s.  */
14523                             &remote_set_cmdlist, &remote_show_cmdlist);
14524
14525   add_setshow_zuinteger_cmd ("remoteaddresssize", class_obscure,
14526                              &remote_address_size, _("\
14527 Set the maximum size of the address (in bits) in a memory packet."), _("\
14528 Show the maximum size of the address (in bits) in a memory packet."), NULL,
14529                              NULL,
14530                              NULL, /* FIXME: i18n: */
14531                              &setlist, &showlist);
14532
14533   init_all_packet_configs ();
14534
14535   add_packet_config_cmd (&remote_protocol_packets[PACKET_X],
14536                          "X", "binary-download", 1);
14537
14538   add_packet_config_cmd (&remote_protocol_packets[PACKET_vCont],
14539                          "vCont", "verbose-resume", 0);
14540
14541   add_packet_config_cmd (&remote_protocol_packets[PACKET_QPassSignals],
14542                          "QPassSignals", "pass-signals", 0);
14543
14544   add_packet_config_cmd (&remote_protocol_packets[PACKET_QCatchSyscalls],
14545                          "QCatchSyscalls", "catch-syscalls", 0);
14546
14547   add_packet_config_cmd (&remote_protocol_packets[PACKET_QProgramSignals],
14548                          "QProgramSignals", "program-signals", 0);
14549
14550   add_packet_config_cmd (&remote_protocol_packets[PACKET_QSetWorkingDir],
14551                          "QSetWorkingDir", "set-working-dir", 0);
14552
14553   add_packet_config_cmd (&remote_protocol_packets[PACKET_QStartupWithShell],
14554                          "QStartupWithShell", "startup-with-shell", 0);
14555
14556   add_packet_config_cmd (&remote_protocol_packets
14557                          [PACKET_QEnvironmentHexEncoded],
14558                          "QEnvironmentHexEncoded", "environment-hex-encoded",
14559                          0);
14560
14561   add_packet_config_cmd (&remote_protocol_packets[PACKET_QEnvironmentReset],
14562                          "QEnvironmentReset", "environment-reset",
14563                          0);
14564
14565   add_packet_config_cmd (&remote_protocol_packets[PACKET_QEnvironmentUnset],
14566                          "QEnvironmentUnset", "environment-unset",
14567                          0);
14568
14569   add_packet_config_cmd (&remote_protocol_packets[PACKET_qSymbol],
14570                          "qSymbol", "symbol-lookup", 0);
14571
14572   add_packet_config_cmd (&remote_protocol_packets[PACKET_P],
14573                          "P", "set-register", 1);
14574
14575   add_packet_config_cmd (&remote_protocol_packets[PACKET_p],
14576                          "p", "fetch-register", 1);
14577
14578   add_packet_config_cmd (&remote_protocol_packets[PACKET_Z0],
14579                          "Z0", "software-breakpoint", 0);
14580
14581   add_packet_config_cmd (&remote_protocol_packets[PACKET_Z1],
14582                          "Z1", "hardware-breakpoint", 0);
14583
14584   add_packet_config_cmd (&remote_protocol_packets[PACKET_Z2],
14585                          "Z2", "write-watchpoint", 0);
14586
14587   add_packet_config_cmd (&remote_protocol_packets[PACKET_Z3],
14588                          "Z3", "read-watchpoint", 0);
14589
14590   add_packet_config_cmd (&remote_protocol_packets[PACKET_Z4],
14591                          "Z4", "access-watchpoint", 0);
14592
14593   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_auxv],
14594                          "qXfer:auxv:read", "read-aux-vector", 0);
14595
14596   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_exec_file],
14597                          "qXfer:exec-file:read", "pid-to-exec-file", 0);
14598
14599   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_features],
14600                          "qXfer:features:read", "target-features", 0);
14601
14602   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_libraries],
14603                          "qXfer:libraries:read", "library-info", 0);
14604
14605   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_libraries_svr4],
14606                          "qXfer:libraries-svr4:read", "library-info-svr4", 0);
14607
14608   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_memory_map],
14609                          "qXfer:memory-map:read", "memory-map", 0);
14610
14611   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_spu_read],
14612                          "qXfer:spu:read", "read-spu-object", 0);
14613
14614   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_spu_write],
14615                          "qXfer:spu:write", "write-spu-object", 0);
14616
14617   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_osdata],
14618                         "qXfer:osdata:read", "osdata", 0);
14619
14620   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_threads],
14621                          "qXfer:threads:read", "threads", 0);
14622
14623   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_siginfo_read],
14624                          "qXfer:siginfo:read", "read-siginfo-object", 0);
14625
14626   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_siginfo_write],
14627                          "qXfer:siginfo:write", "write-siginfo-object", 0);
14628
14629   add_packet_config_cmd
14630     (&remote_protocol_packets[PACKET_qXfer_traceframe_info],
14631      "qXfer:traceframe-info:read", "traceframe-info", 0);
14632
14633   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_uib],
14634                          "qXfer:uib:read", "unwind-info-block", 0);
14635
14636   add_packet_config_cmd (&remote_protocol_packets[PACKET_qGetTLSAddr],
14637                          "qGetTLSAddr", "get-thread-local-storage-address",
14638                          0);
14639
14640   add_packet_config_cmd (&remote_protocol_packets[PACKET_qGetTIBAddr],
14641                          "qGetTIBAddr", "get-thread-information-block-address",
14642                          0);
14643
14644   add_packet_config_cmd (&remote_protocol_packets[PACKET_bc],
14645                          "bc", "reverse-continue", 0);
14646
14647   add_packet_config_cmd (&remote_protocol_packets[PACKET_bs],
14648                          "bs", "reverse-step", 0);
14649
14650   add_packet_config_cmd (&remote_protocol_packets[PACKET_qSupported],
14651                          "qSupported", "supported-packets", 0);
14652
14653   add_packet_config_cmd (&remote_protocol_packets[PACKET_qSearch_memory],
14654                          "qSearch:memory", "search-memory", 0);
14655
14656   add_packet_config_cmd (&remote_protocol_packets[PACKET_qTStatus],
14657                          "qTStatus", "trace-status", 0);
14658
14659   add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_setfs],
14660                          "vFile:setfs", "hostio-setfs", 0);
14661
14662   add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_open],
14663                          "vFile:open", "hostio-open", 0);
14664
14665   add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_pread],
14666                          "vFile:pread", "hostio-pread", 0);
14667
14668   add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_pwrite],
14669                          "vFile:pwrite", "hostio-pwrite", 0);
14670
14671   add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_close],
14672                          "vFile:close", "hostio-close", 0);
14673
14674   add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_unlink],
14675                          "vFile:unlink", "hostio-unlink", 0);
14676
14677   add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_readlink],
14678                          "vFile:readlink", "hostio-readlink", 0);
14679
14680   add_packet_config_cmd (&remote_protocol_packets[PACKET_vFile_fstat],
14681                          "vFile:fstat", "hostio-fstat", 0);
14682
14683   add_packet_config_cmd (&remote_protocol_packets[PACKET_vAttach],
14684                          "vAttach", "attach", 0);
14685
14686   add_packet_config_cmd (&remote_protocol_packets[PACKET_vRun],
14687                          "vRun", "run", 0);
14688
14689   add_packet_config_cmd (&remote_protocol_packets[PACKET_QStartNoAckMode],
14690                          "QStartNoAckMode", "noack", 0);
14691
14692   add_packet_config_cmd (&remote_protocol_packets[PACKET_vKill],
14693                          "vKill", "kill", 0);
14694
14695   add_packet_config_cmd (&remote_protocol_packets[PACKET_qAttached],
14696                          "qAttached", "query-attached", 0);
14697
14698   add_packet_config_cmd (&remote_protocol_packets[PACKET_ConditionalTracepoints],
14699                          "ConditionalTracepoints",
14700                          "conditional-tracepoints", 0);
14701
14702   add_packet_config_cmd (&remote_protocol_packets[PACKET_ConditionalBreakpoints],
14703                          "ConditionalBreakpoints",
14704                          "conditional-breakpoints", 0);
14705
14706   add_packet_config_cmd (&remote_protocol_packets[PACKET_BreakpointCommands],
14707                          "BreakpointCommands",
14708                          "breakpoint-commands", 0);
14709
14710   add_packet_config_cmd (&remote_protocol_packets[PACKET_FastTracepoints],
14711                          "FastTracepoints", "fast-tracepoints", 0);
14712
14713   add_packet_config_cmd (&remote_protocol_packets[PACKET_TracepointSource],
14714                          "TracepointSource", "TracepointSource", 0);
14715
14716   add_packet_config_cmd (&remote_protocol_packets[PACKET_QAllow],
14717                          "QAllow", "allow", 0);
14718
14719   add_packet_config_cmd (&remote_protocol_packets[PACKET_StaticTracepoints],
14720                          "StaticTracepoints", "static-tracepoints", 0);
14721
14722   add_packet_config_cmd (&remote_protocol_packets[PACKET_InstallInTrace],
14723                          "InstallInTrace", "install-in-trace", 0);
14724
14725   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_statictrace_read],
14726                          "qXfer:statictrace:read", "read-sdata-object", 0);
14727
14728   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_fdpic],
14729                          "qXfer:fdpic:read", "read-fdpic-loadmap", 0);
14730
14731   add_packet_config_cmd (&remote_protocol_packets[PACKET_QDisableRandomization],
14732                          "QDisableRandomization", "disable-randomization", 0);
14733
14734   add_packet_config_cmd (&remote_protocol_packets[PACKET_QAgent],
14735                          "QAgent", "agent", 0);
14736
14737   add_packet_config_cmd (&remote_protocol_packets[PACKET_QTBuffer_size],
14738                          "QTBuffer:size", "trace-buffer-size", 0);
14739
14740   add_packet_config_cmd (&remote_protocol_packets[PACKET_Qbtrace_off],
14741        "Qbtrace:off", "disable-btrace", 0);
14742
14743   add_packet_config_cmd (&remote_protocol_packets[PACKET_Qbtrace_bts],
14744        "Qbtrace:bts", "enable-btrace-bts", 0);
14745
14746   add_packet_config_cmd (&remote_protocol_packets[PACKET_Qbtrace_pt],
14747        "Qbtrace:pt", "enable-btrace-pt", 0);
14748
14749   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_btrace],
14750        "qXfer:btrace", "read-btrace", 0);
14751
14752   add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_btrace_conf],
14753        "qXfer:btrace-conf", "read-btrace-conf", 0);
14754
14755   add_packet_config_cmd (&remote_protocol_packets[PACKET_Qbtrace_conf_bts_size],
14756        "Qbtrace-conf:bts:size", "btrace-conf-bts-size", 0);
14757
14758   add_packet_config_cmd (&remote_protocol_packets[PACKET_multiprocess_feature],
14759        "multiprocess-feature", "multiprocess-feature", 0);
14760
14761   add_packet_config_cmd (&remote_protocol_packets[PACKET_swbreak_feature],
14762                          "swbreak-feature", "swbreak-feature", 0);
14763
14764   add_packet_config_cmd (&remote_protocol_packets[PACKET_hwbreak_feature],
14765                          "hwbreak-feature", "hwbreak-feature", 0);
14766
14767   add_packet_config_cmd (&remote_protocol_packets[PACKET_fork_event_feature],
14768                          "fork-event-feature", "fork-event-feature", 0);
14769
14770   add_packet_config_cmd (&remote_protocol_packets[PACKET_vfork_event_feature],
14771                          "vfork-event-feature", "vfork-event-feature", 0);
14772
14773   add_packet_config_cmd (&remote_protocol_packets[PACKET_Qbtrace_conf_pt_size],
14774        "Qbtrace-conf:pt:size", "btrace-conf-pt-size", 0);
14775
14776   add_packet_config_cmd (&remote_protocol_packets[PACKET_vContSupported],
14777                          "vContSupported", "verbose-resume-supported", 0);
14778
14779   add_packet_config_cmd (&remote_protocol_packets[PACKET_exec_event_feature],
14780                          "exec-event-feature", "exec-event-feature", 0);
14781
14782   add_packet_config_cmd (&remote_protocol_packets[PACKET_vCtrlC],
14783                          "vCtrlC", "ctrl-c", 0);
14784
14785   add_packet_config_cmd (&remote_protocol_packets[PACKET_QThreadEvents],
14786                          "QThreadEvents", "thread-events", 0);
14787
14788   add_packet_config_cmd (&remote_protocol_packets[PACKET_no_resumed],
14789                          "N stop reply", "no-resumed-stop-reply", 0);
14790
14791   /* Assert that we've registered "set remote foo-packet" commands
14792      for all packet configs.  */
14793   {
14794     int i;
14795
14796     for (i = 0; i < PACKET_MAX; i++)
14797       {
14798         /* Ideally all configs would have a command associated.  Some
14799            still don't though.  */
14800         int excepted;
14801
14802         switch (i)
14803           {
14804           case PACKET_QNonStop:
14805           case PACKET_EnableDisableTracepoints_feature:
14806           case PACKET_tracenz_feature:
14807           case PACKET_DisconnectedTracing_feature:
14808           case PACKET_augmented_libraries_svr4_read_feature:
14809           case PACKET_qCRC:
14810             /* Additions to this list need to be well justified:
14811                pre-existing packets are OK; new packets are not.  */
14812             excepted = 1;
14813             break;
14814           default:
14815             excepted = 0;
14816             break;
14817           }
14818
14819         /* This catches both forgetting to add a config command, and
14820            forgetting to remove a packet from the exception list.  */
14821         gdb_assert (excepted == (remote_protocol_packets[i].name == NULL));
14822       }
14823   }
14824
14825   /* Keep the old ``set remote Z-packet ...'' working.  Each individual
14826      Z sub-packet has its own set and show commands, but users may
14827      have sets to this variable in their .gdbinit files (or in their
14828      documentation).  */
14829   add_setshow_auto_boolean_cmd ("Z-packet", class_obscure,
14830                                 &remote_Z_packet_detect, _("\
14831 Set use of remote protocol `Z' packets"), _("\
14832 Show use of remote protocol `Z' packets "), _("\
14833 When set, GDB will attempt to use the remote breakpoint and watchpoint\n\
14834 packets."),
14835                                 set_remote_protocol_Z_packet_cmd,
14836                                 show_remote_protocol_Z_packet_cmd,
14837                                 /* FIXME: i18n: Use of remote protocol
14838                                    `Z' packets is %s.  */
14839                                 &remote_set_cmdlist, &remote_show_cmdlist);
14840
14841   add_prefix_cmd ("remote", class_files, remote_command, _("\
14842 Manipulate files on the remote system\n\
14843 Transfer files to and from the remote target system."),
14844                   &remote_cmdlist, "remote ",
14845                   0 /* allow-unknown */, &cmdlist);
14846
14847   add_cmd ("put", class_files, remote_put_command,
14848            _("Copy a local file to the remote system."),
14849            &remote_cmdlist);
14850
14851   add_cmd ("get", class_files, remote_get_command,
14852            _("Copy a remote file to the local system."),
14853            &remote_cmdlist);
14854
14855   add_cmd ("delete", class_files, remote_delete_command,
14856            _("Delete a remote file."),
14857            &remote_cmdlist);
14858
14859   add_setshow_string_noescape_cmd ("exec-file", class_files,
14860                                    &remote_exec_file_var, _("\
14861 Set the remote pathname for \"run\""), _("\
14862 Show the remote pathname for \"run\""), NULL,
14863                                    set_remote_exec_file,
14864                                    show_remote_exec_file,
14865                                    &remote_set_cmdlist,
14866                                    &remote_show_cmdlist);
14867
14868   add_setshow_boolean_cmd ("range-stepping", class_run,
14869                            &use_range_stepping, _("\
14870 Enable or disable range stepping."), _("\
14871 Show whether target-assisted range stepping is enabled."), _("\
14872 If on, and the target supports it, when stepping a source line, GDB\n\
14873 tells the target to step the corresponding range of addresses itself instead\n\
14874 of issuing multiple single-steps.  This speeds up source level\n\
14875 stepping.  If off, GDB always issues single-steps, even if range\n\
14876 stepping is supported by the target.  The default is on."),
14877                            set_range_stepping,
14878                            show_range_stepping,
14879                            &setlist,
14880                            &showlist);
14881
14882   /* Eventually initialize fileio.  See fileio.c */
14883   initialize_remote_fileio (remote_set_cmdlist, remote_show_cmdlist);
14884
14885   /* Take advantage of the fact that the TID field is not used, to tag
14886      special ptids with it set to != 0.  */
14887   magic_null_ptid = ptid_build (42000, -1, 1);
14888   not_sent_ptid = ptid_build (42000, -2, 1);
14889   any_thread_ptid = ptid_build (42000, 0, 1);
14890 }